aboutsummaryrefslogtreecommitdiff
path: root/gui/console.cpp
diff options
context:
space:
mode:
authorMax Horn2004-11-27 01:25:25 +0000
committerMax Horn2004-11-27 01:25:25 +0000
commit096f2b61103db3af432bdc5030b303e25a9f28a8 (patch)
tree64d5d6460a76afd944c8b0dd477ce98c4d01ae5b /gui/console.cpp
parent573cac958021b520f4bb9eaa8e3a59066bbbb5a6 (diff)
downloadscummvm-rg350-096f2b61103db3af432bdc5030b303e25a9f28a8.tar.gz
scummvm-rg350-096f2b61103db3af432bdc5030b303e25a9f28a8.tar.bz2
scummvm-rg350-096f2b61103db3af432bdc5030b303e25a9f28a8.zip
Add slide animation effect to the console
svn-id: r15903
Diffstat (limited to 'gui/console.cpp')
-rw-r--r--gui/console.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/gui/console.cpp b/gui/console.cpp
index 43a6d5ca04..e78489347b 100644
--- a/gui/console.cpp
+++ b/gui/console.cpp
@@ -34,6 +34,9 @@ extern const Graphics::NewFont g_consolefont;
#define kConsoleCharWidth (g_consolefont.getMaxCharWidth())
#define kConsoleLineHeight (g_consolefont.getFontHeight() + 2)
+enum {
+ kConsoleSlideDownDuration = 300 // Time in milliseconds
+};
#define PROMPT ") "
@@ -62,6 +65,9 @@ ConsoleDialog::ConsoleDialog(float widthPercent, float heightPercent)
_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 @@ void ConsoleDialog::reflowLayout() {
_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 @@ void ConsoleDialog::handleTickle() {
_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::handleMouseWheel(int x, int y, int direction) {
void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
int i;
+
+ if (_slideUpAndClose)
+ return;
switch (keycode) {
case '\n': // enter/return
@@ -193,11 +233,11 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
draw();
if (!keepRunning)
- close();
+ slideUpAndClose();
break;
}
case 27: // escape
- close();
+ slideUpAndClose();
break;
case 8: // backspace
if (_caretVisible)
@@ -295,7 +335,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
break;
default:
if (ascii == '~' || ascii == '#') {
- close();
+ slideUpAndClose();
} else if (modifiers == OSystem::KBD_CTRL) {
specialKeys(keycode);
} else if (isprint((char)ascii)) {