aboutsummaryrefslogtreecommitdiff
path: root/engines/wage/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/wage/gui.cpp')
-rw-r--r--engines/wage/gui.cpp81
1 files changed, 67 insertions, 14 deletions
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 099279158f..cd259e6ddd 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -49,25 +49,25 @@
#include "common/system.h"
#include "graphics/cursorman.h"
#include "graphics/primitives.h"
+#include "graphics/macgui/macwindowmanager.h"
+#include "graphics/macgui/macwindow.h"
+#include "graphics/macgui/macmenu.h"
#include "wage/wage.h"
#include "wage/design.h"
#include "wage/entities.h"
#include "wage/gui.h"
-#include "wage/macwindow.h"
-#include "wage/macwindowmanager.h"
-#include "wage/macmenu.h"
#include "wage/world.h"
namespace Wage {
-static const MenuData menuSubItems[] = {
+static const Graphics::MenuData menuSubItems[] = {
{ kMenuHighLevel, "File", 0, 0, false },
{ kMenuHighLevel, "Edit", 0, 0, false },
{ kMenuFile, "New", kMenuActionNew, 0, false },
- { kMenuFile, "Open...", kMenuActionOpen, 0, false },
+ { kMenuFile, "Open...", kMenuActionOpen, 0, true },
{ kMenuFile, "Close", kMenuActionClose, 0, true },
- { kMenuFile, "Save", kMenuActionSave, 0, false },
+ { kMenuFile, "Save", kMenuActionSave, 0, true },
{ kMenuFile, "Save as...", kMenuActionSaveAs, 0, true },
{ kMenuFile, "Revert", kMenuActionRevert, 0, false },
{ kMenuFile, "Quit", kMenuActionQuit, 0, true },
@@ -96,16 +96,22 @@ static void cursorTimerHandler(void *refCon) {
x += gui->_consoleWindow->getInnerDimensions().left;
y += gui->_consoleWindow->getInnerDimensions().top;
+ int h = kCursorHeight;
- gui->_screen.vLine(x, y, y + kCursorHeight, gui->_cursorState ? kColorBlack : kColorWhite);
+ if (y + h > gui->_consoleWindow->getInnerDimensions().bottom) {
+ h = gui->_consoleWindow->getInnerDimensions().bottom - y;
+ }
+
+ if (h > 0)
+ gui->_screen.vLine(x, y, y + h, gui->_cursorState ? kColorBlack : kColorWhite);
if (!gui->_cursorOff)
gui->_cursorState = !gui->_cursorState;
gui->_cursorRect.left = x;
gui->_cursorRect.right = MIN<uint16>(x + 1, gui->_screen.w);
- gui->_cursorRect.top = y;
- gui->_cursorRect.bottom = MIN<uint16>(y + kCursorHeight, gui->_screen.h);
+ gui->_cursorRect.top = MIN<uint16>(y - 1, gui->_consoleWindow->getInnerDimensions().top);
+ gui->_cursorRect.bottom = MIN<uint16>(MIN<uint16>(y + h, gui->_screen.h), gui->_consoleWindow->getInnerDimensions().bottom);
gui->_cursorDirty = true;
}
@@ -168,6 +174,9 @@ Gui::Gui(WageEngine *engine) {
_consoleWindow = _wm.addWindow(true, true, true);
_consoleWindow->setCallback(consoleWindowCallback, this);
+
+ loadBorders();
+
}
Gui::~Gui() {
@@ -211,8 +220,19 @@ void Gui::draw() {
_wm.draw();
if (_cursorDirty && _cursorRect.left < _screen.w && _cursorRect.bottom < _screen.h) {
- g_system->copyRectToScreen(_screen.getBasePtr(_cursorRect.left, _cursorRect.top), _screen.pitch,
- _cursorRect.left, _cursorRect.top, _cursorRect.width(), _cursorRect.height());
+ int x = _cursorRect.left, y = _cursorRect.top, w = _cursorRect.width(), h = _cursorRect.height();
+ if (x < 0) {
+ w += x;
+ x = 0;
+ }
+ if (y < 0) {
+ h += y;
+ y = 0;
+ }
+ if (x + w > _screen.w) w = _screen.w - x;
+ if (y + h > _screen.h) h = _screen.h - y;
+ if (w != 0 && h != 0)
+ g_system->copyRectToScreen(_screen.getBasePtr(x, y), _screen.pitch, x, y, w, h);
_cursorDirty = false;
}
@@ -323,12 +343,19 @@ void Gui::executeMenuCommand(int action, Common::String &text) {
switch(action) {
case kMenuActionAbout:
case kMenuActionNew:
- case kMenuActionOpen:
case kMenuActionClose:
- case kMenuActionSave:
- case kMenuActionSaveAs:
case kMenuActionRevert:
case kMenuActionQuit:
+ break;
+
+ case kMenuActionOpen:
+ _engine->scummVMSaveLoadDialog(false);
+ break;
+
+ case kMenuActionSave:
+ case kMenuActionSaveAs:
+ _engine->scummVMSaveLoadDialog(true);
+ break;
case kMenuActionUndo:
actionUndo();
@@ -356,4 +383,30 @@ void Gui::executeMenuCommand(int action, Common::String &text) {
}
}
+void Gui::loadBorders() {
+ // Do not load borders for now
+ //loadBorder(_sceneWindow, "border_inac.bmp", false);
+ //loadBorder(_sceneWindow, "border_act.bmp", true);
+}
+
+void Gui::loadBorder(Graphics::MacWindow *target, Common::String filename, bool active) {
+ Common::File borderfile;
+
+ if (!borderfile.open(filename)) {
+ debug(1, "Cannot open border file");
+ return;
+ }
+
+ Image::BitmapDecoder bmpDecoder;
+ Common::SeekableReadStream *stream = borderfile.readStream(borderfile.size());
+ if (stream) {
+
+ target->loadBorder(*stream, active, 10, 10, 1, 1);
+
+ borderfile.close();
+
+ delete stream;
+ }
+}
+
} // End of namespace Wage