diff options
Diffstat (limited to 'engines/wage/gui.cpp')
-rw-r--r-- | engines/wage/gui.cpp | 81 |
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 |