diff options
author | Paul Gilbert | 2011-07-02 21:34:40 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-07-02 21:34:40 +1000 |
commit | 1e3c0725e4ed431f6e1336edb7e3976532f71160 (patch) | |
tree | 0a95bd6a0ffed00e67de40300b9af8047b21d10c /engines/cge/events.cpp | |
parent | adb27016294b995eb273663a2c33904050723f96 (diff) | |
download | scummvm-rg350-1e3c0725e4ed431f6e1336edb7e3976532f71160.tar.gz scummvm-rg350-1e3c0725e4ed431f6e1336edb7e3976532f71160.tar.bz2 scummvm-rg350-1e3c0725e4ed431f6e1336edb7e3976532f71160.zip |
CGE: Hooked up mouse event handler
Diffstat (limited to 'engines/cge/events.cpp')
-rw-r--r-- | engines/cge/events.cpp | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 932c922c49..2c675a69f8 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -140,31 +140,23 @@ CGEEvent Evt[EVT_MAX]; uint16 EvtHead = 0, EvtTail = 0; -MOUSE_FUN *MOUSE::OldMouseFun = NULL; -uint16 MOUSE::OldMouseMask = 0; - - MOUSE::MOUSE(CGEEngine *vm, Bitmap **shpl) : Sprite(vm, shpl), Busy(NULL), Hold(NULL), hx(0), _vm(vm) { static Seq ms[] = { { 0, 0, 0, 0, 1 }, { 1, 1, 0, 0, 1 } }; + Hold = NULL; + hx = 0; hy = 0; + Exist = true; + Buttons = 0; + Busy = NULL; + setSeq(ms); - /* TODO Mouse handling - // Mouse reset - _AX = 0x0000; // soft & hard reset (0x0021 soft reset does not work) - __int__(0x33); - Exist = (_AX != 0); - Buttons = _BX; -*/ gotoxy(SCR_WID/2, SCR_HIG/2); _z = 127; step(1); - - Exist = true; - warning("STUB: MOUSE::MOUSE"); } @@ -236,15 +228,33 @@ void MOUSE::Off(void) { warning("STUB: MOUSE::Off"); } - -void MOUSE::ClrEvt(Sprite *spr) { - if (spr) { - uint16 e; - for (e = EvtTail; e != EvtHead; e = (e + 1) % EVT_MAX) - if (Evt[e]._ptr == spr) - Evt[e]._msk = 0; - } else - EvtTail = EvtHead; +void MOUSE::NewMouse(Common::Event &event) { + CGEEvent &evt = Evt[EvtHead++]; + evt._x = event.mouse.x; + evt._y = event.mouse.y; + evt._ptr = SpriteAt(evt._x, evt._y); + + switch (event.type) { + case Common::EVENT_MOUSEMOVE: + evt._msk = ROLL; + break; + case Common::EVENT_LBUTTONDOWN: + evt._msk = L_DN; + Buttons |= 1; + break; + case Common::EVENT_LBUTTONUP: + evt._msk = L_UP; + Buttons &= ~1; + break; + case Common::EVENT_RBUTTONDOWN: + evt._msk = R_DN; + Buttons |= 2; + break; + case Common::EVENT_RBUTTONUP: + evt._msk = R_UP; + Buttons &= ~2; + break; + } } /*----------------- EventManager interface -----------------*/ @@ -257,10 +267,12 @@ void EventManager::poll() { while (g_system->getEventManager()->pollEvent(_event)) { switch (_event.type) { case Common::EVENT_QUIT: + // Signal to quit _quitFlag = true; return; case Common::EVENT_KEYDOWN: case Common::EVENT_KEYUP: + // Handle keyboard events _keyboard->NewKeyboard(_event); handleEvents(); break; @@ -269,8 +281,8 @@ void EventManager::poll() { case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONDOWN: case Common::EVENT_RBUTTONUP: - // TODO: Handle mouse events - //_mouse->NewMouse(event); + // Handle mouse events + _mouse->NewMouse(_event); handleEvents(); break; } @@ -324,4 +336,14 @@ void EventManager::handleEvents(void) { _mouse->Hold->gotoxy(_mouse->_x - _mouse->hx, _mouse->_y - _mouse->hy); } +void EventManager::ClrEvt(Sprite *spr) { + if (spr) { + uint16 e; + for (e = EvtTail; e != EvtHead; e = (e + 1) % EVT_MAX) + if (Evt[e]._ptr == spr) + Evt[e]._msk = 0; + } else + EvtTail = EvtHead; +} + } // End of namespace CGE |