[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