diff options
-rw-r--r-- | engines/wage/entities.cpp | 16 | ||||
-rw-r--r-- | engines/wage/entities.h | 2 | ||||
-rw-r--r-- | engines/wage/gui.cpp | 13 | ||||
-rw-r--r-- | engines/wage/gui.h | 2 | ||||
-rw-r--r-- | engines/wage/macwindow.cpp | 26 |
5 files changed, 40 insertions, 19 deletions
diff --git a/engines/wage/entities.cpp b/engines/wage/entities.cpp index 49e2592949..d0a838f1e7 100644 --- a/engines/wage/entities.cpp +++ b/engines/wage/entities.cpp @@ -202,6 +202,22 @@ const char *Scene::getFontName() { return "Unknown"; } +Designed *Scene::lookUpEntity(int x, int y) { + for (ObjList::const_iterator it = _objs.end(); it != _objs.begin(); ) { + it--; + if ((*it)->_design->isPointOpaque(x, y)) + return *it; + } + + for (ChrList::const_iterator it = _chrs.end(); it != _chrs.begin(); ) { + it--; + if ((*it)->_design->isPointOpaque(x, y)) + return *it; + } + + return nullptr; +} + Obj::Obj() : _currentOwner(NULL), _currentScene(NULL) { _index = 0; _namePlural = false; diff --git a/engines/wage/entities.h b/engines/wage/entities.h index c393f15f01..9e706f0d58 100644 --- a/engines/wage/entities.h +++ b/engines/wage/entities.h @@ -322,6 +322,8 @@ public: Scene(Common::String name, Common::SeekableReadStream *data); ~Scene(); + Designed *lookUpEntity(int x, int y); + Common::Rect *getTextBounds() { return _textBounds == NULL ? NULL : new Common::Rect(*_textBounds); } diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp index ffbd801f89..05af5667e6 100644 --- a/engines/wage/gui.cpp +++ b/engines/wage/gui.cpp @@ -315,7 +315,18 @@ void Gui::drawScene() { _consoleTextArea.setHeight(_scene->_textBounds->height() - 2 * kBorderWidth); } -static void sceneWindowCallback(WindowClick click, Common::Event &event, void *gui) { +static void sceneWindowCallback(WindowClick click, Common::Event &event, void *g) { + Gui *gui = (Gui *)g; + + if (click == kBorderInner && event.type == Common::EVENT_LBUTTONUP) { + Designed *obj = gui->_scene->lookUpEntity(event.mouse.x - gui->_sceneWindow->getDimensions().left, + event.mouse.y - gui->_sceneWindow->getDimensions().top); + + if (obj != nullptr) + gui->_engine->processTurn(NULL, obj); + + return; + } } // Render console diff --git a/engines/wage/gui.h b/engines/wage/gui.h index 99bfbd8fad..baf167a370 100644 --- a/engines/wage/gui.h +++ b/engines/wage/gui.h @@ -155,13 +155,13 @@ public: bool _menuDirty; + Scene *_scene; MacWindow *_sceneWindow; MacWindow *_consoleWindow; private: Graphics::ManagedSurface _console; Menu *_menu; - Scene *_scene; bool _sceneDirty; bool _consoleDirty; bool _bordersDirty; diff --git a/engines/wage/macwindow.cpp b/engines/wage/macwindow.cpp index 682045b9c9..1b869fa222 100644 --- a/engines/wage/macwindow.cpp +++ b/engines/wage/macwindow.cpp @@ -267,6 +267,9 @@ void MacWindow::fillRect(Graphics::ManagedSurface *g, int x, int y, int w, int h } static WindowClick isInBorder(Common::Rect &rect, int x, int y) { + if (rect.contains(x, y)) + return kBorderInner; + if (x >= rect.left - kBorderWidth && x < rect.left && y >= rect.top - kBorderWidth && y < rect.top) return kBorderCloseButton; @@ -294,15 +297,12 @@ bool MacWindow::processEvent(Common::Event &event) { case Common::EVENT_LBUTTONDOWN: mouseDown(event); break; - case Common::EVENT_LBUTTONUP: - setHighlight(kBorderNone); -#if 0 - { - Designed *obj = mouseUp(event.mouse.x, event.mouse.y); - if (obj != NULL) - _engine->processTurn(NULL, obj); + case Common::EVENT_LBUTTONUP: { + setHighlight(kBorderNone); + + WindowClick click = isInBorder(_innerDims, event.mouse.x, event.mouse.y); + (*_callback)(click, event, _dataPtr); } -#endif break; default: @@ -313,14 +313,6 @@ bool MacWindow::processEvent(Common::Event &event) { } void MacWindow::mouseDown(Common::Event &event) { - if (_innerDims.contains(event.mouse.x, event.mouse.y)) { - if (!_callback) - return; - - (*_callback)(kBorderInner, event, _dataPtr); - return; - } - WindowClick click = isInBorder(_innerDims, event.mouse.x, event.mouse.y); if (click == kBorderNone) @@ -328,7 +320,7 @@ void MacWindow::mouseDown(Common::Event &event) { setHighlight(click); - if (click == kBorderScrollUp || click == kBorderScrollDown) { + if (click == kBorderScrollUp || click == kBorderScrollDown || click == kBorderInner) { if (!_callback) return; |