diff options
author | Paul Gilbert | 2017-07-17 19:39:50 -0400 |
---|---|---|
committer | Paul Gilbert | 2017-07-17 19:39:50 -0400 |
commit | e8e7266214b43e302c5ba0bfd601b79a508e04cd (patch) | |
tree | bc6097dad57b87afb6dc259541c4f0ce5b4e5edf | |
parent | 06e1445fd1b304e97c419b2782f14f48f5e10387 (diff) | |
download | scummvm-rg350-e8e7266214b43e302c5ba0bfd601b79a508e04cd.tar.gz scummvm-rg350-e8e7266214b43e302c5ba0bfd601b79a508e04cd.tar.bz2 scummvm-rg350-e8e7266214b43e302c5ba0bfd601b79a508e04cd.zip |
TITANIC: Improve performance of event handling
-rw-r--r-- | engines/titanic/events.cpp | 116 |
1 files changed, 63 insertions, 53 deletions
diff --git a/engines/titanic/events.cpp b/engines/titanic/events.cpp index 0d0fcaf753..cb46f8c42b 100644 --- a/engines/titanic/events.cpp +++ b/engines/titanic/events.cpp @@ -34,66 +34,76 @@ Events::Events(TitanicEngine *vm): _vm(vm), _frameCounter(1), _totalFrames(0), _priorFrameTime(0), _specialButtons(0) { } +#define MOVE_CHECK if (moved) eventTarget()->mouseMove(_mousePos) + void Events::pollEvents() { checkForNextFrameCounter(); + bool moved = false; Common::Event event; - if (!g_system->getEventManager()->pollEvent(event)) - return; - - switch (event.type) { - case Common::EVENT_MOUSEMOVE: - _mousePos = event.mouse; - eventTarget()->mouseMove(_mousePos); - break; - case Common::EVENT_LBUTTONDOWN: - _specialButtons |= MK_LBUTTON; - _mousePos = event.mouse; - eventTarget()->leftButtonDown(_mousePos); - break; - case Common::EVENT_LBUTTONUP: - _specialButtons &= ~MK_LBUTTON; - _mousePos = event.mouse; - eventTarget()->leftButtonUp(_mousePos); - break; - case Common::EVENT_MBUTTONDOWN: - _specialButtons |= MK_MBUTTON; - _mousePos = event.mouse; - eventTarget()->middleButtonDown(_mousePos); - break; - case Common::EVENT_MBUTTONUP: - _specialButtons &= ~MK_MBUTTON; - _mousePos = event.mouse; - eventTarget()->middleButtonUp(_mousePos); - break; - case Common::EVENT_RBUTTONDOWN: - _specialButtons |= MK_RBUTTON; - _mousePos = event.mouse; - eventTarget()->rightButtonDown(_mousePos); - break; - case Common::EVENT_RBUTTONUP: - _specialButtons &= ~MK_RBUTTON; - _mousePos = event.mouse; - eventTarget()->rightButtonUp(_mousePos); - break; - case Common::EVENT_WHEELUP: - case Common::EVENT_WHEELDOWN: - _mousePos = event.mouse; - eventTarget()->mouseWheel(_mousePos, event.type == Common::EVENT_WHEELUP); - break; - case Common::EVENT_KEYDOWN: - handleKbdSpecial(event.kbd); - eventTarget()->keyDown(event.kbd); - break; - case Common::EVENT_KEYUP: - handleKbdSpecial(event.kbd); - eventTarget()->keyUp(event.kbd); - break; - default: - break; + while (!_vm->shouldQuit() && g_system->getEventManager()->pollEvent(event)) { + if (event.type != Common::EVENT_MOUSEMOVE) { + MOVE_CHECK; + } + + switch (event.type) { + case Common::EVENT_MOUSEMOVE: + _mousePos = event.mouse; + moved = true; + break; + case Common::EVENT_LBUTTONDOWN: + _specialButtons |= MK_LBUTTON; + _mousePos = event.mouse; + eventTarget()->leftButtonDown(_mousePos); + return; + case Common::EVENT_LBUTTONUP: + _specialButtons &= ~MK_LBUTTON; + _mousePos = event.mouse; + eventTarget()->leftButtonUp(_mousePos); + return; + case Common::EVENT_MBUTTONDOWN: + _specialButtons |= MK_MBUTTON; + _mousePos = event.mouse; + eventTarget()->middleButtonDown(_mousePos); + return; + case Common::EVENT_MBUTTONUP: + _specialButtons &= ~MK_MBUTTON; + _mousePos = event.mouse; + eventTarget()->middleButtonUp(_mousePos); + return; + case Common::EVENT_RBUTTONDOWN: + _specialButtons |= MK_RBUTTON; + _mousePos = event.mouse; + eventTarget()->rightButtonDown(_mousePos); + return; + case Common::EVENT_RBUTTONUP: + _specialButtons &= ~MK_RBUTTON; + _mousePos = event.mouse; + eventTarget()->rightButtonUp(_mousePos); + return; + case Common::EVENT_WHEELUP: + case Common::EVENT_WHEELDOWN: + _mousePos = event.mouse; + eventTarget()->mouseWheel(_mousePos, event.type == Common::EVENT_WHEELUP); + return; + case Common::EVENT_KEYDOWN: + handleKbdSpecial(event.kbd); + eventTarget()->keyDown(event.kbd); + return; + case Common::EVENT_KEYUP: + handleKbdSpecial(event.kbd); + eventTarget()->keyUp(event.kbd); + return; + default: + break; + } } + + MOVE_CHECK; } +#undef MOVE_CHECK + void Events::pollEventsAndWait() { pollEvents(); g_system->delayMillis(10); |