diff options
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 18 | ||||
-rw-r--r-- | engines/sci/graphics/coordadjuster.cpp | 13 | ||||
-rw-r--r-- | engines/sci/graphics/coordadjuster.h | 5 | ||||
-rw-r--r-- | engines/sci/graphics/cursor.cpp | 32 | ||||
-rw-r--r-- | engines/sci/graphics/cursor.h | 9 | ||||
-rw-r--r-- | engines/sci/graphics/gui.cpp | 30 | ||||
-rw-r--r-- | engines/sci/graphics/gui.h | 4 | ||||
-rw-r--r-- | engines/sci/graphics/gui32.cpp | 30 | ||||
-rw-r--r-- | engines/sci/graphics/gui32.h | 9 |
9 files changed, 62 insertions, 88 deletions
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index a41a536d63..e48abd0cc6 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -101,7 +101,7 @@ static reg_t kSetCursorSci0(EngineState *s, int argc, reg_t *argv) { if (argc >= 4) { pos.y = argv[3].toSint16(); pos.x = argv[2].toSint16(); - s->_gui->setCursorPos(pos); + s->_gfxCursor->kernelSetPos(pos); } if ((argc >= 2) && (argv[1].toSint16() == 0)) { @@ -136,12 +136,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) { pos.y = argv[1].toSint16(); pos.x = argv[0].toSint16(); -#ifdef ENABLE_SCI32 - if (s->_gui32) - s->_gui32->setCursorPos(pos); - else -#endif - s->_gui->setCursorPos(pos); + s->_gfxCursor->kernelSetPos(pos); break; case 4: { int16 top = argv[0].toSint16(); @@ -151,12 +146,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) { if ((right >= left) && (bottom >= top)) { Common::Rect rect = Common::Rect(left, top, right, bottom); -#ifdef ENABLE_SCI32 - if (s->_gui32) - s->_gui32->setCursorZone(rect); - else -#endif - s->_gui->setCursorZone(rect); + s->_gfxCursor->kernelSetMoveZone(rect); } else { warning("kSetCursor: Ignoring invalid mouse zone (%i, %i)-(%i, %i)", left, top, right, bottom); } @@ -193,7 +183,7 @@ reg_t kMoveCursor(EngineState *s, int argc, reg_t *argv) { if (argc == 2) { pos.y = argv[1].toSint16(); pos.x = argv[0].toSint16(); - s->_gui->setCursorPos(pos); + s->_gfxCursor->kernelSetPos(pos); } return s->r_acc; } diff --git a/engines/sci/graphics/coordadjuster.cpp b/engines/sci/graphics/coordadjuster.cpp index 1c5207b2b4..3c9e30c8c8 100644 --- a/engines/sci/graphics/coordadjuster.cpp +++ b/engines/sci/graphics/coordadjuster.cpp @@ -65,6 +65,19 @@ Common::Rect GfxCoordAdjuster16::onControl(Common::Rect rect) { return adjustedRect; } +void GfxCoordAdjuster16::setCursorPos(Common::Point &pos) { + pos.y += _ports->getPort()->top; + pos.x += _ports->getPort()->left; +} + +void GfxCoordAdjuster16::moveCursor(Common::Point &pos) { + pos.y += _ports->_picWind->rect.top; + pos.x += _ports->_picWind->rect.left; + + pos.y = CLIP<int16>(pos.y, _ports->_picWind->rect.top, _ports->_picWind->rect.bottom - 1); + pos.x = CLIP<int16>(pos.x, _ports->_picWind->rect.left, _ports->_picWind->rect.right - 1); +} + #ifdef ENABLE_SCI32 GfxCoordAdjuster32::GfxCoordAdjuster32(SegManager *segMan) : _segMan(segMan) { diff --git a/engines/sci/graphics/coordadjuster.h b/engines/sci/graphics/coordadjuster.h index 4c9cc1a11a..e1fed1a539 100644 --- a/engines/sci/graphics/coordadjuster.h +++ b/engines/sci/graphics/coordadjuster.h @@ -47,7 +47,8 @@ public: virtual void kernelLocalToGlobal(int16 &x, int16 &y, reg_t planeObject = NULL_REG) { }; virtual Common::Rect onControl(Common::Rect rect) { return rect; }; - + virtual void setCursorPos(Common::Point &pos) { }; + virtual void moveCursor(Common::Point &pos) { }; private: }; @@ -60,6 +61,8 @@ public: void kernelLocalToGlobal(int16 &x, int16 &y, reg_t planeObject = NULL_REG); Common::Rect onControl(Common::Rect rect); + void setCursorPos(Common::Point &pos); + void moveCursor(Common::Point &pos); private: GfxPorts *_ports; diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index 5de0166c98..ac4ef0a227 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -28,9 +28,11 @@ #include "common/events.h" #include "sci/sci.h" +#include "sci/event.h" #include "sci/engine/state.h" #include "sci/graphics/palette.h" #include "sci/graphics/screen.h" +#include "sci/graphics/coordadjuster.h" #include "sci/graphics/view.h" #include "sci/graphics/cursor.h" @@ -42,7 +44,7 @@ GfxCursor::GfxCursor(ResourceManager *resMan, GfxPalette *palette, GfxScreen *sc _upscaledHires = _screen->getUpscaledHires(); // center mouse cursor setPosition(Common::Point(_screen->getDisplayWidth() / 2, _screen->getDisplayHeight() / 2)); - setMoveZone(Common::Rect(0, 0, _screen->getDisplayWidth(), _screen->getDisplayHeight())); + kernelSetMoveZone(Common::Rect(0, 0, _screen->getDisplayWidth(), _screen->getDisplayHeight())); _isVisible = true; } @@ -51,6 +53,11 @@ GfxCursor::~GfxCursor() { purgeCache(); } +void GfxCursor::init(GfxCoordAdjuster *coordAdjuster, SciEvent *event) { + _coordAdjuster = coordAdjuster; + _event = event; +} + void GfxCursor::kernelShow() { CursorMan.showMouse(true); _isVisible = true; @@ -224,4 +231,27 @@ void GfxCursor::refreshPosition() { setPosition(mousePoint); } +void GfxCursor::kernelSetMoveZone(Common::Rect zone) { + _moveZone = zone; +} + +void GfxCursor::kernelSetPos(Common::Point pos) { + _coordAdjuster->setCursorPos(pos); + kernelMoveCursor(pos); +} + +void GfxCursor::kernelMoveCursor(Common::Point pos) { + _coordAdjuster->moveCursor(pos); + if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) { + warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x); + return; + } + + setPosition(pos); + + // Trigger event reading to make sure the mouse coordinates will + // actually have changed the next time we read them. + _event->get(SCI_EVENT_PEEK); +} + } // End of namespace Sci diff --git a/engines/sci/graphics/cursor.h b/engines/sci/graphics/cursor.h index 3de6621ead..a32df21a1b 100644 --- a/engines/sci/graphics/cursor.h +++ b/engines/sci/graphics/cursor.h @@ -45,6 +45,8 @@ public: GfxCursor(ResourceManager *resMan, GfxPalette *palette, GfxScreen *screen); ~GfxCursor(); + void init(GfxCoordAdjuster *coordAdjuster, SciEvent *event); + void kernelShow(); void kernelHide(); bool isVisible(); @@ -59,7 +61,10 @@ public: * * @param[in] rect The rectangle */ - void setMoveZone(Common::Rect zone) { _moveZone = zone; } + void kernelSetMoveZone(Common::Rect zone); + + void kernelSetPos(Common::Point pos); + void kernelMoveCursor(Common::Point pos); private: void purgeCache(); @@ -67,6 +72,8 @@ private: ResourceManager *_resMan; GfxScreen *_screen; GfxPalette *_palette; + GfxCoordAdjuster *_coordAdjuster; + SciEvent *_event; bool _upscaledHires; diff --git a/engines/sci/graphics/gui.cpp b/engines/sci/graphics/gui.cpp index 387b058d6c..a2f41bf746 100644 --- a/engines/sci/graphics/gui.cpp +++ b/engines/sci/graphics/gui.cpp @@ -56,6 +56,7 @@ SciGui::SciGui(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCa _coordAdjuster = new GfxCoordAdjuster16(_ports); _s->_gfxCoordAdjuster = _coordAdjuster; + _cursor->init(_coordAdjuster, _s->_event); _compare = new GfxCompare(_s->_segMan, _s->_kernel, _cache, _screen, _coordAdjuster); _s->_gfxCompare = _compare; _transitions = new GfxTransitions(this, _screen, _palette, _s->resMan->isVGA()); @@ -269,35 +270,6 @@ void SciGui::shakeScreen(uint16 shakeCount, uint16 directions) { } } -void SciGui::setCursorPos(Common::Point pos) { - pos.y += _ports->getPort()->top; - pos.x += _ports->getPort()->left; - moveCursor(pos); -} - -void SciGui::moveCursor(Common::Point pos) { - pos.y += _ports->_picWind->rect.top; - pos.x += _ports->_picWind->rect.left; - - pos.y = CLIP<int16>(pos.y, _ports->_picWind->rect.top, _ports->_picWind->rect.bottom - 1); - pos.x = CLIP<int16>(pos.x, _ports->_picWind->rect.left, _ports->_picWind->rect.right - 1); - - if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) { - warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x); - return; - } - - _cursor->setPosition(pos); - - // Trigger event reading to make sure the mouse coordinates will - // actually have changed the next time we read them. - _s->_event->get(SCI_EVENT_PEEK); -} - -void SciGui::setCursorZone(Common::Rect zone) { - _cursor->setMoveZone(zone); -} - reg_t SciGui::portraitLoad(Common::String resourceName) { //Portrait *myPortrait = new Portrait(_s->resMan, _screen, _palette, resourceName); return NULL_REG; diff --git a/engines/sci/graphics/gui.h b/engines/sci/graphics/gui.h index 21e7288d92..74735925af 100644 --- a/engines/sci/graphics/gui.h +++ b/engines/sci/graphics/gui.h @@ -76,10 +76,6 @@ public: virtual void shakeScreen(uint16 shakeCount, uint16 directions); - virtual void setCursorPos(Common::Point pos); - virtual void moveCursor(Common::Point pos); - void setCursorZone(Common::Rect zone); - virtual reg_t portraitLoad(Common::String resourceName); virtual void portraitShow(Common::String resourceName, Common::Point position, uint16 resourceNum, uint16 noun, uint16 verb, uint16 cond, uint16 seq); virtual void portraitUnload(uint16 portraitId); diff --git a/engines/sci/graphics/gui32.cpp b/engines/sci/graphics/gui32.cpp index c7e21015b4..64ed619ac3 100644 --- a/engines/sci/graphics/gui32.cpp +++ b/engines/sci/graphics/gui32.cpp @@ -51,6 +51,7 @@ SciGui32::SciGui32(EngineState *state, GfxScreen *screen, GfxPalette *palette, G _coordAdjuster = new GfxCoordAdjuster32(_s->_segMan); _s->_gfxCoordAdjuster = _coordAdjuster; + _cursor->init(_coordAdjuster, _s->_event); _compare = new GfxCompare(_s->_segMan, _s->_kernel, _cache, _screen, _coordAdjuster); _s->_gfxCompare = _compare; _paint32 = new GfxPaint32(_s->resMan, _s->_segMan, _s->_kernel, _cache, _screen, _palette); @@ -92,35 +93,6 @@ void SciGui32::shakeScreen(uint16 shakeCount, uint16 directions) { } } -void SciGui32::setCursorPos(Common::Point pos) { - //pos.y += _gfx->GetPort()->top; - //pos.x += _gfx->GetPort()->left; - moveCursor(pos); -} - -void SciGui32::moveCursor(Common::Point pos) { - // pos.y += _windowMgr->_picWind->rect.top; - // pos.x += _windowMgr->_picWind->rect.left; - - // pos.y = CLIP<int16>(pos.y, _windowMgr->_picWind->rect.top, _windowMgr->_picWind->rect.bottom - 1); - // pos.x = CLIP<int16>(pos.x, _windowMgr->_picWind->rect.left, _windowMgr->_picWind->rect.right - 1); - - if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) { - warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x); - return; - } - - _cursor->setPosition(pos); - - // Trigger event reading to make sure the mouse coordinates will - // actually have changed the next time we read them. - _s->_event->get(SCI_EVENT_PEEK); -} - -void SciGui32::setCursorZone(Common::Rect zone) { - _cursor->setMoveZone(zone); -} - void SciGui32::drawRobot(GuiResourceId robotId) { Robot *test = new Robot(_s->resMan, _screen, robotId); test->draw(); diff --git a/engines/sci/graphics/gui32.h b/engines/sci/graphics/gui32.h index e4b431df11..9ac52854da 100644 --- a/engines/sci/graphics/gui32.h +++ b/engines/sci/graphics/gui32.h @@ -50,15 +50,6 @@ public: void shakeScreen(uint16 shakeCount, uint16 directions); - void setNowSeen(reg_t objectReference); - bool canBeHere(reg_t curObject, reg_t listReference); - bool isItSkip(GuiResourceId viewId, int16 loopNo, int16 celNo, Common::Point position); - void baseSetter(reg_t object); - - void setCursorPos(Common::Point pos); - void moveCursor(Common::Point pos); - void setCursorZone(Common::Rect zone); - void drawRobot(GuiResourceId robotId); // FIXME: Don't store EngineState |