[Scummvm-cvs-logs] SF.net SVN: scummvm: [26458] scummvm/trunk/engines/gob
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Fri Apr 13 09:48:26 CEST 2007
Revision: 26458
http://scummvm.svn.sourceforge.net/scummvm/?rev=26458&view=rev
Author: drmccoy
Date: 2007-04-13 00:48:26 -0700 (Fri, 13 Apr 2007)
Log Message:
-----------
The scrolling now works without cursor jittering...
Modified Paths:
--------------
scummvm/trunk/engines/gob/game.cpp
scummvm/trunk/engines/gob/game.h
scummvm/trunk/engines/gob/game_v2.cpp
scummvm/trunk/engines/gob/util.cpp
scummvm/trunk/engines/gob/util.h
Modified: scummvm/trunk/engines/gob/game.cpp
===================================================================
--- scummvm/trunk/engines/gob/game.cpp 2007-04-13 03:34:20 UTC (rev 26457)
+++ scummvm/trunk/engines/gob/game.cpp 2007-04-13 07:48:26 UTC (rev 26458)
@@ -288,10 +288,43 @@
_vm->_snd->freeSample(sample);
}
+void Game::evaluateScroll(int16 x, int16 y) {
+ if ((_handleMouse == 0) || (_menuLevel > 0))
+ return;
+
+ if (_vm->_global->_videoMode != 0x14)
+ return;
+
+ if ((x == 0) && (_vm->_draw->_scrollOffsetX > 0)) {
+ uint16 off;
+
+ off = MIN(_vm->_draw->_cursorWidth, _vm->_draw->_scrollOffsetX);
+ off = MAX(off / 2, 1);
+ _vm->_draw->_scrollOffsetX -= off;
+ }
+
+ int16 cursorRight = x + _vm->_draw->_cursorWidth;
+ int16 screenRight = _vm->_draw->_scrollOffsetX + 320;
+
+ if ((cursorRight >= 320) && (screenRight < _vm->_video->_surfWidth)) {
+ uint16 off;
+
+ off = MIN(_vm->_draw->_cursorWidth,
+ (int16) (_vm->_video->_surfWidth - screenRight));
+ off = MAX(off / 2, 1);
+
+ _vm->_draw->_scrollOffsetX += off;
+
+ _vm->_util->setMousePos(320 - _vm->_draw->_cursorWidth, y);
+ }
+
+ _vm->_util->setScrollOffset();
+}
+
int16 Game::checkKeys(int16 *pMouseX, int16 *pMouseY,
int16 *pButtons, char handleMouse) {
- _vm->_util->processInput();
+ _vm->_util->processInput(true);
if (_vm->_mult->_multData && _vm->_global->_inter_variables &&
(VAR(58) != 0)) {
Modified: scummvm/trunk/engines/gob/game.h
===================================================================
--- scummvm/trunk/engines/gob/game.h 2007-04-13 03:34:20 UTC (rev 26457)
+++ scummvm/trunk/engines/gob/game.h 2007-04-13 07:48:26 UTC (rev 26458)
@@ -139,6 +139,8 @@
void freeSoundSlot(int16 slot);
+ void evaluateScroll(int16 x, int16 y);
+
int16 checkKeys(int16 *pMousex, int16 *pMouseY, int16 *pButtons, char handleMouse);
void start(void);
void totSub(int8 flags, const char *newTotFile);
Modified: scummvm/trunk/engines/gob/game_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/game_v2.cpp 2007-04-13 03:34:20 UTC (rev 26457)
+++ scummvm/trunk/engines/gob/game_v2.cpp 2007-04-13 07:48:26 UTC (rev 26458)
@@ -407,6 +407,8 @@
int16 newkey;
uint32 timeKey;
+ _handleMouse = handleMouse;
+
if (deltaTime >= -1) {
_lastCollKey = 0;
_lastCollAreaIndex = 0;
@@ -448,49 +450,6 @@
key = checkKeys(&_vm->_global->_inter_mouseX,
&_vm->_global->_inter_mouseY, &_mouseButtons, handleMouse);
- if ((_vm->_global->_videoMode == 0x14) && (handleMouse != 0) &&
- (_menuLevel == 0)) {
-
- int16 cursorRight;
- int16 screenRight;
-
- if ((_vm->_global->_inter_mouseX == _vm->_draw->_scrollOffsetX) &&
- (_vm->_draw->_scrollOffsetX > 0)) {
- uint16 off;
- int16 min;
-
- off = MIN(_vm->_draw->_cursorWidth, _vm->_draw->_scrollOffsetX);
- off = MAX(off / 2, 1);
- min = _vm->_draw->_scrollOffsetX - off + 1;
-
- _vm->_draw->_scrollOffsetX -= off;
- _vm->_global->_inter_mouseX -= off;
- _vm->_global->_inter_mouseX = MAX(_vm->_global->_inter_mouseX, min);
- }
-
- cursorRight = _vm->_global->_inter_mouseX + _vm->_draw->_cursorWidth;
- screenRight = _vm->_draw->_scrollOffsetX + 320;
-
- if ((cursorRight >= screenRight) &&
- (screenRight < _vm->_video->_surfWidth)) {
- uint16 off;
- int16 max;
-
- off = MIN(_vm->_draw->_cursorWidth,
- (int16) (_vm->_video->_surfWidth - screenRight));
- off = MAX(off / 2, 1);
- max = _vm->_video->_surfWidth - _vm->_draw->_cursorWidth;
-
- _vm->_draw->_scrollOffsetX += off;
- _vm->_global->_inter_mouseX += off - 1;
- _vm->_global->_inter_mouseX = MIN(_vm->_global->_inter_mouseX, max);
- }
-
- _vm->_util->setScrollOffset();
- _vm->_util->setMousePos(MAX(0, _vm->_global->_inter_mouseX -
- _vm->_draw->_scrollOffsetX), _vm->_global->_inter_mouseY);
- }
-
if ((handleMouse == 0) && (_mouseButtons != 0)) {
_vm->_util->waitMouseRelease(0);
key = 3;
Modified: scummvm/trunk/engines/gob/util.cpp
===================================================================
--- scummvm/trunk/engines/gob/util.cpp 2007-04-13 03:34:20 UTC (rev 26457)
+++ scummvm/trunk/engines/gob/util.cpp 2007-04-13 07:48:26 UTC (rev 26458)
@@ -77,12 +77,19 @@
_keyBufferHead = _keyBufferTail = 0;
}
-void Util::processInput() {
+void Util::processInput(bool scroll) {
Common::Event event;
Common::EventManager *eventMan = g_system->getEventManager();
+ int16 x, y;
+ bool hasMove = false;
while (eventMan->pollEvent(event)) {
switch (event.type) {
+ case Common::EVENT_MOUSEMOVE:
+ hasMove = true;
+ x = event.mouse.x;
+ y = event.mouse.y;
+ break;
case Common::EVENT_LBUTTONDOWN:
_mouseButtons |= 1;
break;
@@ -107,6 +114,9 @@
break;
}
}
+
+ if (scroll && hasMove)
+ _vm->_game->evaluateScroll(x, y);
}
void Util::clearKeyBuf(void) {
Modified: scummvm/trunk/engines/gob/util.h
===================================================================
--- scummvm/trunk/engines/gob/util.h 2007-04-13 03:34:20 UTC (rev 26457)
+++ scummvm/trunk/engines/gob/util.h 2007-04-13 07:48:26 UTC (rev 26458)
@@ -54,7 +54,7 @@
void longDelay(uint16 msecs);
void initInput(void);
- void processInput(void);
+ void processInput(bool scroll = false);
void clearKeyBuf(void);
int16 getKey(void);
int16 checkKey(void);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list