2003-07-22 16:05:51 +00:00
|
|
|
/* ScummVM - Scumm Interpreter
|
2004-01-06 12:45:34 +00:00
|
|
|
* Copyright (C) 2002-2004 The ScummVM project
|
2003-07-22 16:05:51 +00:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*
|
|
|
|
* $Header$
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
2003-09-18 02:07:18 +00:00
|
|
|
#include "base/engine.h"
|
2004-02-09 01:27:27 +00:00
|
|
|
#include "base/version.h"
|
2003-11-02 14:50:53 +00:00
|
|
|
#include "gui/about.h"
|
|
|
|
#include "gui/newgui.h"
|
|
|
|
#include "gui/widget.h"
|
2003-07-22 16:05:51 +00:00
|
|
|
|
2003-11-10 23:40:48 +00:00
|
|
|
namespace GUI {
|
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
enum {
|
2004-12-20 22:02:20 +00:00
|
|
|
kScrollStartDelay = 2500,
|
2004-12-19 19:17:43 +00:00
|
|
|
kScrollMillisPerPixel = 80,
|
|
|
|
|
|
|
|
kXOff = 3,
|
|
|
|
kYOff = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO: Probably should display something regarding GPL
|
|
|
|
// We could just list our full credits section here now...
|
|
|
|
//
|
|
|
|
// The following commands can be put at the start of a line (all subject to change):
|
|
|
|
// \C, \L, \R -- set center/left/right alignment
|
|
|
|
// \c0 - \c4 -- set a custom color:
|
|
|
|
// 0 normal text (green)
|
|
|
|
// 1 highlighted text (light green)
|
|
|
|
// 2 light border (light gray)
|
|
|
|
// 3 dark border (dark gray)
|
|
|
|
// 4 background (black)
|
2004-12-22 01:07:13 +00:00
|
|
|
static const char *credits_intro[] = {
|
2004-12-19 19:17:43 +00:00
|
|
|
"\\C""Copyright (C) 2002-2004 The ScummVM project",
|
|
|
|
"\\C""http://www.scummvm.org",
|
|
|
|
"\\C""",
|
|
|
|
"\\C""LucasArts SCUMM Games (C) LucasArts",
|
|
|
|
"\\C""Humongous SCUMM Games (C) Humongous",
|
|
|
|
"\\C""Simon the Sorcerer (C) Adventure Soft",
|
|
|
|
"\\C""Beneath a Steel Sky (C) Revolution",
|
|
|
|
"\\C""Broken Sword Games (C) Revolution",
|
|
|
|
"\\C""Flight of the Amazon Queen (C) John Passfield",
|
|
|
|
"\\C""and Steve Stamatiadis",
|
2004-12-22 01:07:13 +00:00
|
|
|
"\\C"""
|
2004-12-19 19:17:43 +00:00
|
|
|
};
|
|
|
|
|
2004-12-22 01:07:13 +00:00
|
|
|
#include "gui/credits.h"
|
|
|
|
|
|
|
|
|
2003-11-02 02:18:16 +00:00
|
|
|
AboutDialog::AboutDialog()
|
2004-12-19 19:17:43 +00:00
|
|
|
: Dialog(10, 20, 300, 174),
|
|
|
|
_scrollPos(0), _scrollTime(0) {
|
|
|
|
|
|
|
|
int i;
|
2004-02-09 01:27:27 +00:00
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
_lineHeight = g_gui.getFont().getFontHeight() + 3;
|
2003-11-08 23:22:16 +00:00
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
for (i = 0; i < 1; i++)
|
|
|
|
_lines.push_back("");
|
|
|
|
|
|
|
|
Common::String version("\\C\\c0""ScummVM ");
|
2003-07-22 16:05:51 +00:00
|
|
|
version += gScummVMVersion;
|
2004-12-19 19:17:43 +00:00
|
|
|
_lines.push_back(version);
|
2003-07-22 16:05:51 +00:00
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
Common::String date("\\C\\c2""(built on ");
|
2003-07-22 16:05:51 +00:00
|
|
|
date += gScummVMBuildDate;
|
|
|
|
date += ')';
|
2004-12-19 19:17:43 +00:00
|
|
|
_lines.push_back(date);
|
2003-07-22 16:05:51 +00:00
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
Common::String features("\\C\\c2""Supports: ");
|
2004-02-09 01:27:27 +00:00
|
|
|
features += gScummVMFeatures;
|
2004-12-19 19:17:43 +00:00
|
|
|
_lines.push_back(features);
|
|
|
|
|
|
|
|
_lines.push_back("");
|
2004-02-09 01:27:27 +00:00
|
|
|
|
2004-12-22 01:07:13 +00:00
|
|
|
for (i = 0; i < ARRAYSIZE(credits_intro); i++)
|
|
|
|
_lines.push_back(credits_intro[i]);
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAYSIZE(credits); i++)
|
|
|
|
_lines.push_back(credits[i]);
|
2004-12-19 19:17:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void AboutDialog::open() {
|
|
|
|
_scrollTime = g_system->getMillis() + kScrollStartDelay;
|
|
|
|
_scrollPos = 0;
|
|
|
|
|
|
|
|
Dialog::open();
|
|
|
|
}
|
|
|
|
|
|
|
|
void AboutDialog::drawDialog() {
|
|
|
|
// Blend over the background
|
|
|
|
g_gui.blendRect(_x, _y, _w, _h, g_gui._bgcolor);
|
|
|
|
|
|
|
|
// Draw text
|
|
|
|
// TODO: Add a "fade" effect for the top/bottom text lines
|
|
|
|
const int firstLine = _scrollPos / _lineHeight;
|
2004-12-20 22:54:20 +00:00
|
|
|
const int lastLine = MIN((_scrollPos + _h) / _lineHeight + 1, (uint32)_lines.size());
|
2004-12-19 19:17:43 +00:00
|
|
|
int y = _y + kYOff - (_scrollPos % _lineHeight);
|
|
|
|
|
|
|
|
for (int line = firstLine; line < lastLine; line++) {
|
|
|
|
const char *str = _lines[line].c_str();
|
|
|
|
Graphics::TextAlignment align = Graphics::kTextAlignCenter;
|
|
|
|
OverlayColor color = g_gui._textcolor;
|
|
|
|
while (str[0] == '\\') {
|
|
|
|
switch (str[1]) {
|
|
|
|
case 'C':
|
|
|
|
align = Graphics::kTextAlignCenter;
|
|
|
|
break;
|
|
|
|
case 'L':
|
|
|
|
align = Graphics::kTextAlignLeft;
|
|
|
|
break;
|
|
|
|
case 'R':
|
|
|
|
align = Graphics::kTextAlignRight;
|
|
|
|
break;
|
|
|
|
case 'c':
|
|
|
|
switch (str[2]) {
|
|
|
|
case '0':
|
|
|
|
color = g_gui._textcolor;
|
|
|
|
break;
|
|
|
|
case '1':
|
|
|
|
color = g_gui._textcolorhi;
|
|
|
|
break;
|
|
|
|
case '2':
|
|
|
|
color = g_gui._color;
|
|
|
|
break;
|
|
|
|
case '3':
|
|
|
|
color = g_gui._shadowcolor;
|
|
|
|
break;
|
|
|
|
case '4':
|
|
|
|
color = g_gui._bgcolor;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
warning("Unknown color type '%c'", str[2]);
|
|
|
|
}
|
|
|
|
str++;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
warning("Unknown scroller opcode '%c'\n", str[1]);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
str += 2;
|
|
|
|
}
|
|
|
|
// Trim leading whitespaces if center mode is on
|
|
|
|
if (align == Graphics::kTextAlignCenter)
|
|
|
|
while (*str && *str == ' ')
|
|
|
|
str++;
|
2004-02-09 01:27:27 +00:00
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
g_gui.drawString(str, _x + kXOff, y, _w - 2 * kXOff, color, align);
|
|
|
|
y += _lineHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Draw a border
|
|
|
|
g_gui.box(_x, _y, _w, _h, g_gui._color, g_gui._shadowcolor);
|
|
|
|
|
|
|
|
// Finally blit it all to the screen
|
|
|
|
g_gui.addDirtyRect(_x, _y, _w, _h);
|
2003-07-22 16:05:51 +00:00
|
|
|
}
|
|
|
|
|
2004-12-19 19:17:43 +00:00
|
|
|
|
|
|
|
void AboutDialog::handleTickle() {
|
|
|
|
const uint32 t = g_system->getMillis();
|
|
|
|
int scrollOffset = ((int)t - (int)_scrollTime) / kScrollMillisPerPixel;
|
|
|
|
if (scrollOffset > 0) {
|
|
|
|
_scrollPos += scrollOffset;
|
|
|
|
_scrollTime = t;
|
|
|
|
|
|
|
|
if (_scrollPos < 0) {
|
|
|
|
_scrollPos = 0;
|
|
|
|
} else if ((uint32)_scrollPos > _lines.size() * _lineHeight) {
|
|
|
|
_scrollPos = 0;
|
|
|
|
_scrollTime += kScrollStartDelay;
|
|
|
|
} else {
|
|
|
|
g_gui.addDirtyRect(_x, _y, _w, _h);
|
|
|
|
}
|
|
|
|
draw(); // Issue a full redraw
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void AboutDialog::handleMouseUp(int x, int y, int button, int clickCount) {
|
|
|
|
// Close upon any mouse click
|
|
|
|
close();
|
|
|
|
}
|
|
|
|
|
|
|
|
void AboutDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
|
|
|
|
}
|
|
|
|
|
|
|
|
void AboutDialog::handleKeyUp(uint16 ascii, int keycode, int modifiers) {
|
|
|
|
close();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-11-10 23:40:48 +00:00
|
|
|
} // End of namespace GUI
|