[Scummvm-cvs-logs] CVS: scummvm/sword2/driver driver96.h,1.72,1.73 menu.cpp,1.26,1.27

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Sat Jun 5 03:29:04 CEST 2004


Update of /cvsroot/scummvm/scummvm/sword2/driver
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27223/driver

Modified Files:
	driver96.h menu.cpp 
Log Message:
Cleanup


Index: driver96.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/driver/driver96.h,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- driver96.h	9 May 2004 13:32:04 -0000	1.72
+++ driver96.h	5 Jun 2004 10:28:42 -0000	1.73
@@ -119,7 +119,8 @@
 	RDMENU_HIDDEN,
 	RDMENU_SHOWN,
 	RDMENU_OPENING,
-	RDMENU_CLOSING
+	RDMENU_CLOSING,
+	RDMENU_ALMOST_HIDDEN
 };
 
 #define RDMENU_ICONWIDE			35

Index: menu.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword2/driver/menu.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- menu.cpp	23 Apr 2004 07:02:10 -0000	1.26
+++ menu.cpp	5 Jun 2004 10:28:42 -0000	1.27
@@ -28,17 +28,14 @@
 #define MAXMENUANIMS 8
 
 void Graphics::clearIconArea(int menu, int pocket, Common::Rect *r) {
-	byte *dst;
-	int i;
-
 	r->top = menu * (RENDERDEEP + MENUDEEP) + (MENUDEEP - RDMENU_ICONDEEP) / 2;
 	r->bottom = r->top + RDMENU_ICONDEEP;
 	r->left = RDMENU_ICONSTART + pocket * (RDMENU_ICONWIDE + RDMENU_ICONSPACING);
 	r->right = r->left + RDMENU_ICONWIDE;
 
-	dst = _buffer + r->top * _screenWide + r->left;
+	byte *dst = _buffer + r->top * _screenWide + r->left;
 
-	for (i = 0; i < RDMENU_ICONDEEP; i++) {
+	for (int i = 0; i < RDMENU_ICONDEEP; i++) {
 		memset(dst, 0, RDMENU_ICONWIDE);
 		dst += _screenWide;
 	}
@@ -51,22 +48,18 @@
  */
 
 void Graphics::processMenu(void) {
-	byte *src, *dst;
 	uint8 menu;
 	uint8 i, j;
-	uint8 complete;
 	uint8 frameCount;
-	int32 curx, xoff;
-	int32 cury, yoff;
 	Common::Rect r1, r2;
-	int32 delta;
 	static int32 lastTime = 0;
 
 	if (lastTime == 0) {
 		lastTime = _vm->_system->get_msecs();
 		frameCount = 1;
 	} else {
-		delta = _vm->_system->get_msecs() - lastTime;
+		int32 delta = _vm->_system->get_msecs() - lastTime;
+
 		if (delta > 250) {
 			lastTime += delta;
 			delta = 250;
@@ -77,116 +70,106 @@
 		}
 	}
 
+	// Note: The "almost hidden" menu state exists only so that the menu
+	// will be redrawn one last time before it's completely hidden. We do
+	// not need a corresponding "almost shown" state because the menu will
+	// always be redrawn while it's shown anyway. (We may want to change
+	// this later.)
+
 	while (frameCount-- > 0) {
 		for (menu = RDMENU_TOP; menu <= RDMENU_BOTTOM; menu++) {
-			if (_menuStatus[menu] == RDMENU_OPENING) {
-				// The menu is opening, so process it here
-				complete = 1;
+			if (_menuStatus[menu] == RDMENU_HIDDEN || _menuStatus[menu] == RDMENU_ALMOST_HIDDEN || _menuStatus[menu] == RDMENU_SHOWN)
+				continue;
 
-				// Propagate the animation from the first icon.
-				for (i = RDMENU_MAXPOCKETS - 1; i > 0; i--) {
-					_pocketStatus[menu][i] = _pocketStatus[menu][i - 1];
-					if (_pocketStatus[menu][i] != MAXMENUANIMS)
-						complete = 0;
-				}
-				if (_pocketStatus[menu][i] != MAXMENUANIMS)
-					complete = 0;
+			int target, direction, nextState;
 
-				// ... and animate the first icon
-				if (_pocketStatus[menu][0] != MAXMENUANIMS)
-					_pocketStatus[menu][0]++;
+			if (_menuStatus[menu] == RDMENU_OPENING) {
+				target = MAXMENUANIMS;
+				direction = 1;
+				nextState = RDMENU_SHOWN;
+			} else {
+				target = 0;
+				direction = -1;
+				nextState = RDMENU_ALMOST_HIDDEN;
+			}
 
-				// Check to see if the menu is fully open
-				if (complete)
-					_menuStatus[menu] = RDMENU_SHOWN;
-			} else if (_menuStatus[menu] == RDMENU_CLOSING) {
-				// The menu is closing, so process it here
-				complete = 1;
+			bool complete = true;
 
-				// Propagate the animation from the first icon.
-				for (i = RDMENU_MAXPOCKETS - 1; i > 0; i--) {
-					if (_icons[menu][i] && _pocketStatus[menu][i] != 0 && _pocketStatus[menu][i - 1] == 0) {
-						clearIconArea(menu, i, &r1);
-						updateRect(&r1);
-					}
+			// Propagate animation from the first icon...
+			for (i = RDMENU_MAXPOCKETS - 1; i > 0; i--) {
+				_pocketStatus[menu][i] = _pocketStatus[menu][i - 1];
 
-					_pocketStatus[menu][i] = _pocketStatus[menu][i - 1];
-					if (_pocketStatus[menu][i] != 0)
-						complete = 0;
-				}
-				if (_pocketStatus[menu][i] != 0)
-					complete = 0;
+				if (_pocketStatus[menu][i] != target)
+					complete = false;
+			}
 
-				// ... and animate the first icon
-				if (_pocketStatus[menu][0] != 0) {
-					_pocketStatus[menu][0]--;
+			if (_pocketStatus[menu][i] != target)
+				complete = false;
 
-					if (_pocketStatus[menu][0] == 0) {
-						clearIconArea(menu, 0, &r1);
-						updateRect(&r1);
-					}
-				}
+			// ...and animate the first icon
+			if (_pocketStatus[menu][0] != target)
+				_pocketStatus[menu][0] += direction;
 
-				// Check to see if the menu is fully closed
-				if (complete)
-					_menuStatus[menu] = RDMENU_HIDDEN;
-			}
+			if (complete)
+				_menuStatus[menu] = nextState;
 		}
 	}
-	
-	// Does the menu need to be drawn?
+
 	for (menu = RDMENU_TOP; menu <= RDMENU_BOTTOM; menu++) {
-		if (_menuStatus[menu] != RDMENU_HIDDEN) {
-			// Draw the menu here.
-			curx = RDMENU_ICONSTART + RDMENU_ICONWIDE / 2;
-			cury = (MENUDEEP / 2) + (RENDERDEEP + MENUDEEP) * menu;
+		if (_menuStatus[menu] == RDMENU_HIDDEN)
+			continue;
 
-			for (i = 0; i < RDMENU_MAXPOCKETS; i++) {
-				if (_icons[menu][i]) {
-					// Since we no longer clear the screen
-					// after each frame we need to clear
-					// the icon area.
+		if (_menuStatus[menu] == RDMENU_ALMOST_HIDDEN)
+			_menuStatus[menu] = RDMENU_HIDDEN;
 
-					clearIconArea(menu, i, &r1);
+		// Draw the menu here.
+		int32 curx = RDMENU_ICONSTART + RDMENU_ICONWIDE / 2;
+		int32 cury = (MENUDEEP / 2) + (RENDERDEEP + MENUDEEP) * menu;
+
+		for (i = 0; i < RDMENU_MAXPOCKETS; i++) {
+			if (_icons[menu][i]) {
+				int32 xoff, yoff;
+
+				// Since we no longer clear the screen after
+				// each frame we need to clear the icon area.
+
+				clearIconArea(menu, i, &r1);
 					
-					if (_pocketStatus[menu][i] == MAXMENUANIMS) {
-						xoff = (RDMENU_ICONWIDE / 2);
-						r2.left = curx - xoff;
-						r2.right = r2.left + RDMENU_ICONWIDE;
-						yoff = (RDMENU_ICONDEEP / 2);
-						r2.top = cury - yoff;
-						r2.bottom = r2.top + RDMENU_ICONDEEP;
-					} else {
-						xoff = (RDMENU_ICONWIDE / 2) * _pocketStatus[menu][i] / MAXMENUANIMS;
-						r2.left = curx - xoff;
-						r2.right = curx + xoff;
-						yoff = (RDMENU_ICONDEEP / 2) * _pocketStatus[menu][i] / MAXMENUANIMS;
-						r2.top = cury - yoff;
-						r2.bottom = cury + yoff;
-					}
+				if (_pocketStatus[menu][i] == MAXMENUANIMS) {
+					xoff = (RDMENU_ICONWIDE / 2);
+					r2.left = curx - xoff;
+					r2.right = r2.left + RDMENU_ICONWIDE;
+					yoff = (RDMENU_ICONDEEP / 2);
+					r2.top = cury - yoff;
+					r2.bottom = r2.top + RDMENU_ICONDEEP;
+				} else {
+					xoff = (RDMENU_ICONWIDE / 2) * _pocketStatus[menu][i] / MAXMENUANIMS;
+					r2.left = curx - xoff;
+					r2.right = curx + xoff;
+					yoff = (RDMENU_ICONDEEP / 2) * _pocketStatus[menu][i] / MAXMENUANIMS;
+					r2.top = cury - yoff;
+					r2.bottom = cury + yoff;
+				}
 
-					if (xoff != 0 && yoff != 0) {
-						dst = _buffer + r2.top * _screenWide + r2.left;
-						src = _icons[menu][i];
+				if (xoff != 0 && yoff != 0) {
+					byte *dst = _buffer + r2.top * _screenWide + r2.left;
+					byte *src = _icons[menu][i];
 
-						if (_pocketStatus[menu][i] != MAXMENUANIMS) {
-							squashImage(
-								dst, _screenWide, r2.right - r2.left, r2.bottom - r2.top,
-								src, RDMENU_ICONWIDE, RDMENU_ICONWIDE, RDMENU_ICONDEEP, NULL);
-						} else {
-							for (j = 0; j < RDMENU_ICONDEEP; j++) {
-								memcpy(dst, src, RDMENU_ICONWIDE);
-								src += RDMENU_ICONWIDE;
-								dst += _screenWide;
-							}
+					if (_pocketStatus[menu][i] != MAXMENUANIMS) {
+						squashImage(
+							dst, _screenWide, r2.right - r2.left, r2.bottom - r2.top,
+							src, RDMENU_ICONWIDE, RDMENU_ICONWIDE, RDMENU_ICONDEEP, NULL);
+					} else {
+						for (j = 0; j < RDMENU_ICONDEEP; j++) {
+							memcpy(dst, src, RDMENU_ICONWIDE);
+							src += RDMENU_ICONWIDE;
+							dst += _screenWide;
 						}
-						updateRect(&r1);
 					}
 				}
-				curx += (RDMENU_ICONSPACING + RDMENU_ICONWIDE);
-				r1.left += (RDMENU_ICONSPACING + RDMENU_ICONWIDE);
-				r1.right += (RDMENU_ICONSPACING + RDMENU_ICONWIDE);
+				updateRect(&r1);
 			}
+			curx += (RDMENU_ICONSPACING + RDMENU_ICONWIDE);
 		}
 	}
 }
@@ -239,16 +222,16 @@
 	Common::Rect r;
 	int i;
 
-	_menuStatus[0] = RDMENU_HIDDEN;
-	_menuStatus[1] = RDMENU_HIDDEN;
+	_menuStatus[RDMENU_TOP] = RDMENU_HIDDEN;
+	_menuStatus[RDMENU_BOTTOM] = RDMENU_HIDDEN;
 
 	for (i = 0; i < RDMENU_MAXPOCKETS; i++) {
-		if (_icons[0][i]) {
-			clearIconArea(0, i, &r);
+		if (_icons[RDMENU_TOP][i]) {
+			clearIconArea(RDMENU_TOP, i, &r);
 			updateRect(&r);
 		}
-		if (_icons[1][i]) {
-			clearIconArea(1, i, &r);
+		if (_icons[RDMENU_BOTTOM][i]) {
+			clearIconArea(RDMENU_BOTTOM, i, &r);
 			updateRect(&r);
 		}
 	}





More information about the Scummvm-git-logs mailing list