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; |