implemented new 'nice' scaler hotkeys

svn-id: r10613
This commit is contained in:
Max Horn 2003-10-05 15:04:25 +00:00
parent 16e4897531
commit 2e27e74fb4
3 changed files with 98 additions and 65 deletions

39
README
View File

@ -423,23 +423,26 @@ Simon the Sorcerer: 1 & 2
---- -----------------
ScummVM offers several anti-aliasing filters to attempt to improve visual
quality. These are the same filters used in many other emulators, such as
MAME.
Note: the resolutions listed assume the game was originally 320x200
MAME. These filters take the original game graphics, and scale it by a
certain fixed factor (usually 2x or 3x) before displaying them to you.
So for example, if the game originally run at a resolution of 320x200
(typical for most of the SCUMM games), then using a filter with scale
factor 2x will effectively yield 640x400 graphics. Likewise with a
3x filter you'll get 960x600.
They are:
normal - No filtering, original 320x200 resolution. Fastest.
2x - No filtering, double screen/window size to 640x400
(default)
3x - No filtering, triple screen/window size to 960x600
2xsai - 2xsai filtering, double screen/window size to 640x400
super2xsai - Enhanced 2xsai filtering. 640x400 screen/window size
supereagle - Less blurry than 2xsai, but slower. Also 640x400
advmame2x - 640x400 scaling. Doesn't rely on blurring like 2xSAI.
advmame3x - 960x600 scaling. Doesn't rely on blurring like 2xSAI.
hq2x - 640x400 scaling. Doesn't rely on blurring like 2xSAI.
hq3x - 960x600 scaling. Doesn't rely on blurring like 2xSAI.
tv2x - 640x400 scaling. Horizontal scanlines.
dotmatrix - 640x400 scaling. Dot matrix effect.
normal - No filtering, no scaling. Fastest.
2x - No filtering, factor 2x (default).
3x - No filtering, factor 3x.
2xsai - 2xsai filter, factor 2x.
super2xsai - Enhanced 2xsai filtering, factor 2x.
supereagle - Less blurry than 2xsai, but slower. Factor 2x.
advmame2x - Doesn't rely on blurring like 2xSAI, fast. Factor 2x.
advmame3x - Doesn't rely on blurring like 2xSAI, fast. Factor 3x.
hq2x - Very nice high quality filter but slow. Factor 2x.
hq3x - Very nice high quality filter but slow. Factor 3x.
tv2x - Interlace filter, tries to emulate a TV. Factor 2x.
dotmatrix - Dot matrix effect. Factor 2x.
opengl - OpenGL with bilinear filtering [Unsupported]
To select a graphics filter, pass its name via the '-g' option to scummvm,
@ -470,9 +473,9 @@ simon games.
Common:
Ctrl-z OR Alt-x - Quit
Keyboard Arrow Keys - Simulate mouse movement
Ctrl-f - Runs in fast mode.
Ctrl-Alt 0-9 - Switch between graphics filters
Ctrl-Alt c-d - Switch between other graphics filters
Ctrl-f - Toggle fast mode.
Ctrl-Alt 1-8 - Switch between graphics filters
Ctrl-Alt + and - - Increase/Decrease the scale factor
Ctrl-Alt b - Switch between bilinear and non-linear
filtering [OpenGL backend]
Ctrl-Alt a - Toggle aspect-ratio correction on/off.

37
TODO
View File

@ -6,15 +6,6 @@ General
* Revise the way "quit" is handled. Maybe add a global variable "g_quit" which
we set when the application should be quit (e.g. when an EVENT_QUIT is
received). This is useful if multiple levels of event loops have to be ended
* Add API to query backend for a list of available music engines
Useful for Options dialog
* Add API to query backend for a list of available scalers/screenmodes
(that is, a list of user presentable names, and corresponding PROP_SET_GFX_MODE
values). This is useful for the options dialog
* Add PROP_GET_GFX_MODE (mirroring PROP_SET_GFX_MODE)
* Consider replacing the PROP_TOGGLE_* properties with GET/SET ones ->
this allows more control over these properties (like, it allows the GUI to
display checkboxes for these in the options dialog)
* gameDetector.cpp is quite messy. Also, it makes providing native GUI front
ends for ScummVM unnecessarily cumbersome (think of systems which don't
even have a command line, like classic MacOS). It would be nice to better
@ -118,30 +109,24 @@ Descumm
* Rewrite code to use 2 passes; first pass builds an intermediate graph, the
second pass then tries to detect loops, break/continue statements etc.
Backend
=======
Backends
========
* Several of the backend factory functions take config parameters. It should
be possible to get rid of those once the config system rewrite (see above)
has been done. In that case, the backends simply can query the config
manager for these parameters (or any others they might like :-).
* Add API to query backend for a list of available music engines
Useful for Options dialog
* Add API to query backend for a list of available scalers/screenmodes
(that is, a list of user presentable names, and corresponding PROP_SET_GFX_MODE
values). This is useful for the options dialog
* Add PROP_GET_GFX_MODE (mirroring PROP_SET_GFX_MODE)
* Consider replacing the PROP_TOGGLE_* properties with GET/SET ones ->
this allows more control over these properties (like, it allows the GUI to
display checkboxes for these in the options dialog)
SDL backend
===========
* Maybe change the shortcuts? One idea (add ctrl-alt in all cases):
1-3: select scale factor
2-4: normal, advmame, hq filters (all available as 2x and 3x)
5-9,0: the other scalers
Justification: We have so many scalers now, we are running out of keys
for them - and this way, we need a few less. Of course, the question remains
what happens if you press ctrl-alt-3 while 2xSai is scaler, what happens?
So maybe (again add ctrl-alt):
'+' / '-':
increase/decrease scale factor, cycling over the possible range.
So for a 2x-only scaler, it does nothing; for a scaler supporting
all scales from 1x to 4x, it works as usual (and pressing '+' in
4x mode goes to 1x)
1-9: switch between the "base" scalers: normal (point) scaler, advmame,
hq (high quality), 2xsai, super2xsai, supereagle, tv2x, dotmatrix, ...
* Fix the "auto dirty rect" computing code - in particular, use a proper checksum
algorithm, this should solve many of the problems with some luck
* OpenGL code: either fix it (see open bug tracker items and various hacks in the code),

View File

@ -629,13 +629,13 @@ bool OSystem_SDL_Common::poll_event(Event *event) {
#ifdef MACOSX
// On Macintosh', Cmd-Q quits
if ((ev.key.keysym.mod & KMOD_META) && ev.key.keysym.sym=='q') {
if ((ev.key.keysym.mod & KMOD_META) && ev.key.keysym.sym == 'q') {
event->event_code = EVENT_QUIT;
return true;
}
#else
// Ctrl-z and Alt-X quit
if ((b == KBD_CTRL && ev.key.keysym.sym=='z') || (b == KBD_ALT && ev.key.keysym.sym=='x')) {
if ((b == KBD_CTRL && ev.key.keysym.sym == 'z') || (b == KBD_ALT && ev.key.keysym.sym == 'x')) {
event->event_code = EVENT_QUIT;
return true;
}
@ -643,31 +643,76 @@ bool OSystem_SDL_Common::poll_event(Event *event) {
// Ctr-Alt-<key> will change the GFX mode
if (b == (KBD_CTRL|KBD_ALT)) {
const char keys[] = "1234567890cd";
char *ptr;
static const int gfxModes[][4] = {
{ GFX_NORMAL, GFX_DOUBLESIZE, GFX_TRIPLESIZE, -1 },
{ GFX_NORMAL, GFX_ADVMAME2X, GFX_ADVMAME3X, -1 },
{ GFX_NORMAL, GFX_HQ2X, GFX_HQ3X, -1 },
{ GFX_NORMAL, GFX_2XSAI, -1, -1 },
{ GFX_NORMAL, GFX_SUPER2XSAI, -1, -1 },
{ GFX_NORMAL, GFX_SUPEREAGLE, -1, -1 },
{ GFX_NORMAL, GFX_TV2X, -1, -1 },
{ GFX_NORMAL, GFX_DOTMATRIX, -1, -1 }
};
ptr = strchr(keys, ev.key.keysym.sym);
if (ptr != NULL) {
Property prop;
// FIXME EVIL HACK: This shouldn't be a static int, rather it
// should be a member variable. Furthermore, it shouldn't be
// set in this code, rather it should be set by load_gfx_mode().
// But for now this quick&dirty hack works.
static int _scalerType = 0;
if (_mode != GFX_NORMAL) {
// Try to figure out which gfx mode "group" we are in
// This is just a temporary hack until the proper solution
// (i.e. code in load_gfx_mode()) is in effect.
for (int i = 0; i < ARRAYSIZE(gfxModes); i++) {
if (gfxModes[i][1] == _mode || gfxModes[i][2] == _mode) {
_scalerType = i;
break;
}
}
}
prop.gfx_mode = ptr - keys;
Property prop;
int factor = _scaleFactor - 1;
// Ctr-Alt-a toggles aspect ratio correction
if (ev.key.keysym.sym == 'a') {
property(PROP_TOGGLE_ASPECT_RATIO, NULL);
break;
}
// Ctr-Alt-b changes to bilinear filtering in the OpenGL backend
if (ev.key.keysym.sym == 'b') {
prop.gfx_mode = GFX_BILINEAR;
property(PROP_SET_GFX_MODE, &prop);
break;
}
}
// Ctr-Alt-a will change aspect ratio
if (b == (KBD_CTRL|KBD_ALT) && ev.key.keysym.sym=='a') {
property(PROP_TOGGLE_ASPECT_RATIO, NULL);
break;
}
// Ctr-Alt-b will change bilinear filtering in OpenGL backend
if (b == (KBD_CTRL|KBD_ALT) && ev.key.keysym.sym=='b') {
Property prop;
prop.gfx_mode = GFX_BILINEAR;
property(PROP_SET_GFX_MODE, &prop);
break;
// Increase/decrease the scale factor
// TODO: Shall we 'wrap around' here?
if (ev.key.keysym.sym == '+' || ev.key.keysym.sym == '-') {
factor += (ev.key.keysym.sym == '+' ? +1 : -1);
if (0 <= factor && factor < 4 && gfxModes[_scalerType][factor] >= 0) {
prop.gfx_mode = gfxModes[_scalerType][factor];
property(PROP_SET_GFX_MODE, &prop);
}
break;
}
if ('1' <= ev.key.keysym.sym && ev.key.keysym.sym <= '9') {
_scalerType = ev.key.keysym.sym - '1';
if (_scalerType >= ARRAYSIZE(gfxModes))
break;
while (gfxModes[_scalerType][factor] < 0) {
assert(factor > 0);
factor--;
}
prop.gfx_mode = gfxModes[_scalerType][factor];
property(PROP_SET_GFX_MODE, &prop);
break;
}
}
#ifdef QTOPIA