[Scummvm-cvs-logs] CVS: scummvm/gui console.cpp,1.50,1.51 console.h,1.26,1.27

Max Horn fingolfin at users.sourceforge.net
Fri Nov 26 17:26:05 CET 2004


Update of /cvsroot/scummvm/scummvm/gui
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4578/gui

Modified Files:
	console.cpp console.h 
Log Message:
Add slide animation effect to the console

Index: console.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/console.cpp,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- console.cpp	28 Sep 2004 20:19:26 -0000	1.50
+++ console.cpp	27 Nov 2004 01:25:25 -0000	1.51
@@ -34,6 +34,9 @@
 #define kConsoleCharWidth	(g_consolefont.getMaxCharWidth())
 #define kConsoleLineHeight	(g_consolefont.getFontHeight() + 2)
 
+enum {
+	kConsoleSlideDownDuration = 300	// Time in milliseconds
+};
 
 
 #define PROMPT	") "
@@ -62,6 +65,9 @@
 	_caretVisible = false;
 	_caretTime = 0;
 
+	_slideUpAndClose = false;
+	_slideTime = 0;
+
 	// Add scrollbar
 	_scrollBar = new ScrollBarWidget(this, _w - kScrollBarWidth - 1, 0, kScrollBarWidth, _h);
 	_scrollBar->setTarget(this);
@@ -97,7 +103,21 @@
 	_linesPerPage = (_h - 2) / kConsoleLineHeight;
 }
 
+void ConsoleDialog::slideUpAndClose() {
+	if (!_slideUpAndClose) {
+		_slideTime = g_system->getMillis();
+		_slideUpAndClose = true;
+	}
+}
+
 void ConsoleDialog::open() {
+	// Initiate sliding the console down. We do a very simple trick to achieve
+	// this effect: we simply move the console dialog just above (outside) the
+	// visible screen area, then shift it down in handleTickle() over a
+	// certain period of time. 
+	_y = -_h;
+	_slideTime = g_system->getMillis();
+
 	Dialog::open();
 	if (_promptStartPos == -1) {
 		print(PROMPT);
@@ -144,6 +164,23 @@
 		_caretTime = time + kCaretBlinkTime;
 		drawCaret(_caretVisible);
 	}
+	
+	// Perform the "slide animation".
+	if (_slideUpAndClose) {
+		_y = -(int)(_h * (float)(g_system->getMillis() - _slideTime) / kConsoleSlideDownDuration);
+		if (_y <= -_h) {
+			_slideUpAndClose = false;
+			close();
+		} else
+			draw();
+	} else
+	if (_y < 0) {
+		_y = -(int)(_h * (1.0 - (float)(g_system->getMillis() - _slideTime) / kConsoleSlideDownDuration));
+		if (_y > 0)
+			_y = 0;
+
+		draw();
+	}
 }
 
 void ConsoleDialog::handleMouseWheel(int x, int y, int direction) {
@@ -152,6 +189,9 @@
 
 void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
 	int i;
+	
+	if (_slideUpAndClose)
+		return;
 
 	switch (keycode) {
 	case '\n':	// enter/return
@@ -193,11 +233,11 @@
 
 		draw();
 		if (!keepRunning)
-			close();
+			slideUpAndClose();
 		break;
 		}
 	case 27:	// escape
-		close();
+		slideUpAndClose();
 		break;
 	case 8:		// backspace
 		if (_caretVisible)
@@ -295,7 +335,7 @@
 		break;
 	default:
 		if (ascii == '~' || ascii == '#') {
-			close();
+			slideUpAndClose();
 		} else if (modifiers == OSystem::KBD_CTRL) {
 			specialKeys(keycode);
 		} else if (isprint((char)ascii)) {

Index: console.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/console.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- console.h	23 May 2004 14:06:52 -0000	1.26
+++ console.h	27 Nov 2004 01:25:25 -0000	1.27
@@ -58,6 +58,9 @@
 
 	bool	_caretVisible;
 	uint32	_caretTime;
+	
+	bool	_slideUpAndClose;
+	uint32	_slideTime;
 
 	ScrollBarWidget *_scrollBar;
 
@@ -78,6 +81,8 @@
 	float _widthPercent, _heightPercent;
 
 	void reflowLayout();
+	
+	void slideUpAndClose();
 
 public:
 	ConsoleDialog(float widthPercent, float heightPercent);





More information about the Scummvm-git-logs mailing list