diff options
| -rw-r--r-- | gui/console.cpp | 38 | ||||
| -rw-r--r-- | gui/console.h | 8 | 
2 files changed, 29 insertions, 17 deletions
diff --git a/gui/console.cpp b/gui/console.cpp index e78489347b..4b628e8743 100644 --- a/gui/console.cpp +++ b/gui/console.cpp @@ -35,7 +35,7 @@ extern const Graphics::NewFont g_consolefont;  #define kConsoleLineHeight	(g_consolefont.getFontHeight() + 2)  enum { -	kConsoleSlideDownDuration = 300	// Time in milliseconds +	kConsoleSlideDownDuration = 200	// Time in milliseconds  }; @@ -65,7 +65,7 @@ ConsoleDialog::ConsoleDialog(float widthPercent, float heightPercent)  	_caretVisible = false;  	_caretTime = 0; -	_slideUpAndClose = false; +	_slideMode = kNoSlideMode;  	_slideTime = 0;  	// Add scrollbar @@ -104,9 +104,9 @@ void ConsoleDialog::reflowLayout() {  }  void ConsoleDialog::slideUpAndClose() { -	if (!_slideUpAndClose) { +	if (_slideMode == kNoSlideMode) {  		_slideTime = g_system->getMillis(); -		_slideUpAndClose = true; +		_slideMode = kUpSlideMode;  	}  } @@ -117,6 +117,7 @@ void ConsoleDialog::open() {  	// certain period of time.   	_y = -_h;  	_slideTime = g_system->getMillis(); +	_slideMode = kDownSlideMode;  	Dialog::open();  	if (_promptStartPos == -1) { @@ -166,20 +167,25 @@ void ConsoleDialog::handleTickle() {  	}  	// Perform the "slide animation". -	if (_slideUpAndClose) { -		_y = -(int)(_h * (float)(g_system->getMillis() - _slideTime) / kConsoleSlideDownDuration); -		if (_y <= -_h) { -			_slideUpAndClose = false; +	if (_slideMode != kNoSlideMode) { +		const float tmp = (float)(g_system->getMillis() - _slideTime) / kConsoleSlideDownDuration; +		if (_slideMode == kUpSlideMode) { +			_y = (int)(_h * (0.0 - tmp)); +		} else { +			_y = (int)(_h * (tmp - 1.0)); +		} +		 +		if (_slideMode == kDownSlideMode && _y > 0) { +			// End the slide +			_slideMode = kNoSlideMode; +			_y = 0; +			draw(); +		} else if (_slideMode == kUpSlideMode && _y <= -_h) { +			// End the slide +			_slideMode = kNoSlideMode;  			close();  		} else  			draw(); -	} else -	if (_y < 0) { -		_y = -(int)(_h * (1.0 - (float)(g_system->getMillis() - _slideTime) / kConsoleSlideDownDuration)); -		if (_y > 0) -			_y = 0; - -		draw();  	}  } @@ -190,7 +196,7 @@ void ConsoleDialog::handleMouseWheel(int x, int y, int direction) {  void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {  	int i; -	if (_slideUpAndClose) +	if (_slideMode != kNoSlideMode)  		return;  	switch (keycode) { diff --git a/gui/console.h b/gui/console.h index 49dae71c8b..eb1218b6da 100644 --- a/gui/console.h +++ b/gui/console.h @@ -59,7 +59,13 @@ protected:  	bool	_caretVisible;  	uint32	_caretTime; -	bool	_slideUpAndClose; +	enum SlideMode { +		kNoSlideMode, +		kUpSlideMode, +		kDownSlideMode +	}; +		 +	SlideMode	_slideMode;  	uint32	_slideTime;  	ScrollBarWidget *_scrollBar;  | 
