scummvm/backends/platform/sdl/sdl.h
Travis Howell 1b47344cc1 Merged revisions 43066,43068,43088,43093,43095,43097,43101-43102,43107,43112,43114,43117,43119-43120,43122-43123,43126,43131,43139,43143,43145,43147,43150,43152,43155-43156,43163,43165,43167,43171-43172,43178-43179,43183,43186-43200,43202,43205-43223,43227-43235,43237-43241 via svnmerge from
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

........
  r43066 | dreammaster | 2009-08-05 20:44:37 +1000 (Wed, 05 Aug 2009) | 1 line
  
  Bugfix for music not being stopped when music volume is set to zero
........
  r43068 | scott_t | 2009-08-05 23:57:40 +1000 (Wed, 05 Aug 2009) | 1 line
  
  T7G: Fix bug #2831041 by implementing opcode responsible for starting music partway through a video
........
  r43088 | knakos | 2009-08-07 04:05:50 +1000 (Fri, 07 Aug 2009) | 1 line
  
  overload showMouse to kill mouse shadows in kyra
........
  r43093 | dreammaster | 2009-08-07 19:25:06 +1000 (Fri, 07 Aug 2009) | 1 line
  
  Bugfix for #2831159 - Palace guards saying !!HIGH STRING!!
........
  r43095 | knakos | 2009-08-07 20:44:34 +1000 (Fri, 07 Aug 2009) | 1 line
  
  hint backend about virtual keyboard on save, in LoK
........
  r43097 | knakos | 2009-08-07 21:05:58 +1000 (Fri, 07 Aug 2009) | 1 line
  
  show VK in gui_v2 games of kyra
........
  r43101 | dhewg | 2009-08-08 04:16:58 +1000 (Sat, 08 Aug 2009) | 3 lines
  
  Merge creation of Info.plist into update-version.pl.
  This fixes the static version info after branching (#2820503).
........
  r43102 | knakos | 2009-08-08 05:33:39 +1000 (Sat, 08 Aug 2009) | 1 line
  
  mouse up events need the same lovin' as mouse down events do. don't underestimate 'em. fixes bug #2833549
........
  r43107 | drmccoy | 2009-08-08 12:23:04 +1000 (Sat, 08 Aug 2009) | 1 line
  
  When opening a data stream, don't read the whole file into memory if not necessary. This vastly improves the loading times of Gob3 on small devices
........
  r43112 | dreammaster | 2009-08-08 19:34:23 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Commit of dhewg's patch to fix screen refreshes on the Wii
........
  r43114 | knakos | 2009-08-08 19:38:12 +1000 (Sat, 08 Aug 2009) | 1 line
  
  forward port of wince 3.0 fix for paths from branch 0.13.0, r39978
........
  r43117 | dhewg | 2009-08-08 21:30:56 +1000 (Sat, 08 Aug 2009) | 1 line
  
  tweaked the mapped keys to reintroduce SHIFT for mass adding games
........
  r43119 | lordhoto | 2009-08-08 21:42:29 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Add workaround for bug #2820054 "DW1: No intro music at first start on Wii", which actually happened on all systems, when using the multilanguage version.
........
  r43120 | lordhoto | 2009-08-08 21:51:15 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Fix for bug #2412336 "DW2: Voices cut off" (commit on behalf of dreammaster)
........
  r43122 | lordhoto | 2009-08-08 22:00:34 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Formatting fix.
........
  r43123 | lordhoto | 2009-08-08 22:22:34 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Change workaround for bug #2820054 to apply for all GRA versions.
........
  r43126 | lordhoto | 2009-08-08 23:57:21 +1000 (Sat, 08 Aug 2009) | 1 line
  
  Fix XMIDI looping implementation. Now for example the music in the ferret village of ITE plays fine.
........
  r43131 | sev | 2009-08-09 04:01:44 +1000 (Sun, 09 Aug 2009) | 2 lines
  
  Implement FR#2821534: "GUI: Mute All disable volume sliders"
........
  r43139 | sev | 2009-08-09 06:08:22 +1000 (Sun, 09 Aug 2009) | 2 lines
  
  Add DS version of Atari MM from Bug #2834054
........
  r43143 | sev | 2009-08-09 06:16:58 +1000 (Sun, 09 Aug 2009) | 2 lines
  
  Patch #2832247: "GMM: Enable loading & deleting of unnamed savegames"
........
  r43145 | sev | 2009-08-09 06:49:13 +1000 (Sun, 09 Aug 2009) | 2 lines
  
  Fix bug #2825565: "Unable to select subtitles in Atlantis and Simon 1"
........
  r43147 | drmccoy | 2009-08-09 07:43:07 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Changed the scroll-handling to be more like the original. This fixes bug #2832362 ("GOB3: Scrolling locked after cutscene")
........
  r43150 | dreammaster | 2009-08-09 11:05:47 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Changed subtitles display speed to also include the time taken to say voice samples (if voices are turned on). This means subtitles will display for the same time irrespective of whether voices are on or not
........
  r43152 | Kirben | 2009-08-09 11:20:08 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Fix bug #2834254 - ELVIRA: Buggy scroll arrows when mixing spells.
........
  r43155 | dreammaster | 2009-08-09 11:45:39 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Slight adjustment to Spanish font lookup table, based on mac_es's description of character lookup problems
........
  r43156 | Kirben | 2009-08-09 11:55:34 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Fix bug #2834252 - ELVIRA1 Problem with 8-character-long save names.
........
  r43163 | Kirben | 2009-08-09 17:16:08 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Fix bug #2834260 - ELVIRA1: Graphic glitch when bird takes off.
........
  r43165 | Kirben | 2009-08-09 20:28:11 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Fix glitch when removing arrows from spell book in Elvira 1.
........
  r43167 | djwillis | 2009-08-09 22:12:24 +1000 (Sun, 09 Aug 2009) | 1 line
  
  GP2X: Commit local version of backend, contains a 'fix' to work around a GP2X SDL 'feature' that was removing the ability to disable aspect ratio correction. Also misc cleanup and changes to default volume levels to cut down on sample clipping.
........
  r43171 | dreammaster | 2009-08-09 22:23:01 +1000 (Sun, 09 Aug 2009) | 1 line
  
  Removed redundant code related to Midi handling
........
  r43172 | lordhoto | 2009-08-10 01:37:00 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Fix for bug #2834250 "GUI: Incorrect behavior of sliders".
........
  r43178 | knakos | 2009-08-10 04:34:08 +1000 (Mon, 10 Aug 2009) | 1 line
  
  removing support for flac (good riddance) and mpeg2
........
  r43179 | knakos | 2009-08-10 04:37:29 +1000 (Mon, 10 Aug 2009) | 1 line
  
  update news files for 1.0.0rc1 release
........
  r43183 | lordhoto | 2009-08-10 05:11:10 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Cleanup AMIGA graphics conversion.
........
  r43186 | lordhoto | 2009-08-10 08:46:25 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Create a "Font" interface and create a "DOSFont" implementation for handling DOS version fonts.
........
  r43187 | lordhoto | 2009-08-10 08:46:43 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Add support for the font format used in Kyrandia 1 Amiga. (font colors are wrong though)
........
  r43188 | lordhoto | 2009-08-10 09:23:48 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Unbreak basic Kyra1 amiga in game support, by disabling some palette code for the amiga version.
........
  r43189 | lordhoto | 2009-08-10 09:32:52 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Clear the destination page for bitmap loading, this fixes graphics artifacts in Kyra1 amiga.
........
  r43190 | waltervn | 2009-08-10 11:08:20 +1000 (Mon, 10 Aug 2009) | 3 lines
  
  SCI: Added detection entries for French versions of Eco Quest 1/2 (reported
  by Strangerke).
........
  r43191 | lordhoto | 2009-08-10 11:32:22 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Disable menu text fading in kyra1 amiga for now.
........
  r43192 | lordhoto | 2009-08-10 11:32:39 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Initial support for correct colors in the interface of Kyra1 AMIGA.
........
  r43193 | lordhoto | 2009-08-10 11:32:59 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Fix inventory background color.
........
  r43194 | lordhoto | 2009-08-10 11:33:18 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Fix text color in character speeches in Kyra1 amiga.
........
  r43195 | lordhoto | 2009-08-10 11:33:36 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Fix interface text color.
........
  r43196 | lordhoto | 2009-08-10 11:33:56 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Enable interface text fading in Kyra1 amiga again.
........
  r43197 | lordhoto | 2009-08-10 11:34:14 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Use interface palette for mouse cursor in Kyra1 amiga, when it's enabled.
........
  r43198 | lordhoto | 2009-08-10 11:34:29 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Cleanup.
........
  r43199 | lordhoto | 2009-08-10 11:34:46 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Remove dead code.
........
  r43200 | lordhoto | 2009-08-10 12:32:19 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Fix bug when setting up mouse cursor with inventory palette.
........
  r43202 | athrxx | 2009-08-10 20:25:53 +1000 (Mon, 10 Aug 2009) | 1 line
  
  LOL: fix main menu in floppy version
........
  r43205 | lordhoto | 2009-08-10 23:46:17 +1000 (Mon, 10 Aug 2009) | 1 line
  
  Made font color configuration independend from font style configuration.
........
  r43206 | lordhoto | 2009-08-11 00:05:14 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Rename 'font_color' attribute for 'text' draw step to 'text_color'.
........
  r43207 | lordhoto | 2009-08-11 00:35:28 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix copyright string displaying in Kyra1 amiga. Unlike the DOS version it does not use a second print for creating a shadow look.
........
  r43208 | lordhoto | 2009-08-11 02:42:39 +1000 (Tue, 11 Aug 2009) | 4 lines
  
  - Fix extraction of Kyra 1 amiga string tables in kyra.dat
  - Fix "taken" string offsets in kyra.dat
  - Add temporary workaround for only one "taken" string being present in Kyra 1 amiga.
  - Update kyra.dat
........
  r43209 | lordhoto | 2009-08-11 03:14:03 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix GUI strings in Kyrandia 1 Amiga.
........
  r43210 | lordhoto | 2009-08-11 03:14:22 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Implement item to item name list index mapping for Kyrandia 1 Amiga.
........
  r43211 | lordhoto | 2009-08-11 03:17:19 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Typo.
........
  r43212 | lordhoto | 2009-08-11 04:01:28 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix GUI font colors and text drawing in Kyrandia 1 Amiga.
........
  r43213 | lordhoto | 2009-08-11 04:03:37 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix GUI button outline colors in Kyra1 Amiga.
........
  r43214 | tramboi | 2009-08-11 04:03:54 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  Option "desired_screen_aspect_ratio" for fullscreen mode in the SDL backend
  Shortcoming: the picture is not centered
........
  r43215 | lordhoto | 2009-08-11 04:04:53 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix GUI menu colors for Kyrandia 1 Amiga.
........
  r43216 | lordhoto | 2009-08-11 04:13:01 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Remove unused variables.
........
  r43217 | waltervn | 2009-08-11 04:37:47 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  SCI: Improved multilanguage support for SCI1 and SCI1.1.
........
  r43218 | waltervn | 2009-08-11 04:43:15 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  SCI: Fix warnings.
........
  r43219 | waltervn | 2009-08-11 04:59:59 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  SCI: Fix vmvars debug command.
........
  r43220 | lordhoto | 2009-08-11 05:08:00 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  - Fix AMIGA to DOS palette conversion
  - Amiga version uses 13 instead of 12 palette buffers
........
  r43221 | lordhoto | 2009-08-11 05:09:13 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix incorrect converted colors in Kyra1 Amiga speech text color setup.
........
  r43222 | lordhoto | 2009-08-11 05:10:11 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Implement differences for Kyrandia 1 Amiga in o1_setCustomPaletteRange.
........
  r43223 | sev | 2009-08-11 05:31:08 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  Add support for Italian MM NES
........
  r43227 | strangerke | 2009-08-11 06:57:26 +1000 (Tue, 11 Aug 2009) | 1 line
  
  gob - Add a workaround for files (at least in Playtoons) that are tested on CD only, with the '@' symbol
........
  r43228 | strangerke | 2009-08-11 06:58:13 +1000 (Tue, 11 Aug 2009) | 1 line
  
  gob - Add 2 files tested and used by Playtoons and Playtoons CK
........
  r43229 | waltervn | 2009-08-11 07:30:16 +1000 (Tue, 11 Aug 2009) | 2 lines
  
  SCI: Added several debug command aliases.
........
  r43230 | lordhoto | 2009-08-11 08:18:18 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Cleanup.
........
  r43231 | lordhoto | 2009-08-11 08:18:33 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix o1_makeAmuletAppear for Kyrandia 1 Amiga.
........
  r43232 | lordhoto | 2009-08-11 08:18:47 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix WSA movies for final sequence of Kyrandia 1 Amiga. (this is just a theoretical fix, the game isn't yet playable till then)
........
  r43233 | lordhoto | 2009-08-11 08:54:25 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Proper implementation of o1_fadeSpecialPalette for Kyrandia 1 Amiga.
........
  r43234 | lordhoto | 2009-08-11 08:54:45 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix cauldron water color in Zanthia's home in Kyrandia 1 Amiga.
........
  r43235 | mthreepwood | 2009-08-11 09:01:11 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Provide a better detection method for Indy3 Mac sound effects. This fixes sounds such as the music that plays when Indy uses the whip on the hook in the giant cork. This also is a proper fix for bug #1852635 -- Sound 54 is actually not a sound effect.
........
  r43237 | lordhoto | 2009-08-11 09:34:35 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Implement different in Kyrandia 1 Amiga in o1_setFireberryGlowPalette.
........
  r43238 | lordhoto | 2009-08-11 09:35:16 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix yet another inventory background color glitch in Kyrandia 1 Amiga.
........
  r43239 | lordhoto | 2009-08-11 10:14:24 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix a little graphics bug in Kyrandia 1 Amiga, when jewels are enabled.
........
  r43240 | lordhoto | 2009-08-11 10:14:40 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Disable Kyragem fading for Kyrandia 1 Amiga.
........
  r43241 | lordhoto | 2009-08-11 10:14:54 +1000 (Tue, 11 Aug 2009) | 1 line
  
  Fix regression introduced with r41081.
........

svn-id: r43250
2009-08-11 02:04:17 +00:00

473 lines
12 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
#ifndef SDL_COMMON_H
#define SDL_COMMON_H
#if defined(__SYMBIAN32__)
#include <esdl\SDL.h>
#else
#include <SDL.h>
#endif
#include "backends/base-backend.h"
#include "graphics/scaler.h"
namespace Audio {
class MixerImpl;
}
#if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
// Uncomment this to enable the 'on screen display' code.
#define USE_OSD 1
#endif
#if defined(MACOSX)
// On Mac OS X, we need to double buffer the audio buffer, else anything
// which produces sampled data with high latency (like the MT-32 emulator)
// will sound terribly.
// This could be enabled for more / most ports in the future, but needs some
// testing.
#define MIXER_DOUBLE_BUFFERING 1
#endif
enum {
GFX_NORMAL = 0,
GFX_DOUBLESIZE = 1,
GFX_TRIPLESIZE = 2,
GFX_2XSAI = 3,
GFX_SUPER2XSAI = 4,
GFX_SUPEREAGLE = 5,
GFX_ADVMAME2X = 6,
GFX_ADVMAME3X = 7,
GFX_HQ2X = 8,
GFX_HQ3X = 9,
GFX_TV2X = 10,
GFX_DOTMATRIX = 11
};
class AspectRatio {
int _kw, _kh;
public:
AspectRatio() { _kw = _kh = 0; }
AspectRatio(int w, int h);
bool isAuto() const { return (_kw | _kh) == 0; }
int kw() const { return _kw; }
int kh() const { return _kh; }
};
class OSystem_SDL : public BaseBackend {
public:
OSystem_SDL();
virtual ~OSystem_SDL();
virtual void initBackend();
void beginGFXTransaction(void);
TransactionError endGFXTransaction(void);
#ifdef ENABLE_RGB_COLOR
// Game screen
virtual Graphics::PixelFormat getScreenFormat() const { return _screenFormat; }
// Highest supported
virtual Common::List<Graphics::PixelFormat> getSupportedFormats();
#endif
// Set the size and format of the video bitmap.
// Typically, 320x200 CLUT8
virtual void initSize(uint w, uint h, const Graphics::PixelFormat *format); // overloaded by CE backend
virtual int getScreenChangeID() const { return _screenChangeCount; }
// Set colors of the palette
void setPalette(const byte *colors, uint start, uint num);
// Get colors of the palette
void grabPalette(byte *colors, uint start, uint num);
// Draw a bitmap to screen.
// The screen will not be updated to reflect the new bitmap
virtual void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h); // overloaded by CE backend (FIXME)
virtual Graphics::Surface *lockScreen();
virtual void unlockScreen();
// Update the dirty areas of the screen
void updateScreen();
// Either show or hide the mouse cursor
bool showMouse(bool visible);
// Warp the mouse cursor. Where set_mouse_pos() only informs the
// backend of the mouse cursor's current position, this function
// actually moves the cursor to the specified position.
virtual void warpMouse(int x, int y); // overloaded by CE backend (FIXME)
// Set the bitmap that's used when drawing the cursor.
virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format); // overloaded by CE backend (FIXME)
// Set colors of cursor palette
void setCursorPalette(const byte *colors, uint start, uint num);
// Disables or enables cursor palette
void disableCursorPalette(bool disable) {
_cursorPaletteDisabled = disable;
blitCursor();
}
// Shaking is used in SCUMM. Set current shake position.
void setShakePos(int shake_pos);
// Get the number of milliseconds since the program was started.
uint32 getMillis();
// Delay for a specified amount of milliseconds
void delayMillis(uint msecs);
// Get the next event.
// Returns true if an event was retrieved.
virtual bool pollEvent(Common::Event &event); // overloaded by CE backend
// Define all hardware keys for keymapper
virtual Common::HardwareKeySet *getHardwareKeySet();
// Set function that generates samples
virtual void setupMixer();
static void mixCallback(void *s, byte *samples, int len);
virtual void closeMixer();
virtual Audio::Mixer *getMixer();
// Poll CD status
// Returns true if cd audio is playing
bool pollCD();
// Play CD audio track
void playCD(int track, int num_loops, int start_frame, int duration);
// Stop CD audio track
void stopCD();
// Update CD audio status
void updateCD();
// Quit
virtual void quit(); // overloaded by CE backend
virtual void getTimeAndDate(struct tm &t) const;
virtual Common::TimerManager *getTimerManager();
// Mutex handling
MutexRef createMutex();
void lockMutex(MutexRef mutex);
void unlockMutex(MutexRef mutex);
void deleteMutex(MutexRef mutex);
// Overlay
virtual Graphics::PixelFormat getOverlayFormat() const { return _overlayFormat; }
virtual void showOverlay();
virtual void hideOverlay();
virtual void clearOverlay();
virtual void grabOverlay(OverlayColor *buf, int pitch);
virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
virtual int16 getHeight();
virtual int16 getWidth();
virtual int16 getOverlayHeight() { return _videoMode.overlayHeight; }
virtual int16 getOverlayWidth() { return _videoMode.overlayWidth; }
virtual const GraphicsMode *getSupportedGraphicsModes() const;
virtual int getDefaultGraphicsMode() const;
virtual bool setGraphicsMode(int mode);
virtual int getGraphicsMode() const;
virtual void setWindowCaption(const char *caption);
virtual bool openCD(int drive);
virtual bool hasFeature(Feature f);
virtual void setFeatureState(Feature f, bool enable);
virtual bool getFeatureState(Feature f);
#ifdef USE_OSD
void displayMessageOnOSD(const char *msg);
#endif
virtual Common::SaveFileManager *getSavefileManager();
virtual FilesystemFactory *getFilesystemFactory();
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
virtual Common::SeekableReadStream *createConfigReadStream();
virtual Common::WriteStream *createConfigWriteStream();
protected:
bool _inited;
#ifdef USE_OSD
SDL_Surface *_osdSurface;
Uint8 _osdAlpha; // Transparency level of the OSD
uint32 _osdFadeStartTime; // When to start the fade out
enum {
kOSDFadeOutDelay = 2 * 1000, // Delay before the OSD is faded out (in milliseconds)
kOSDFadeOutDuration = 500, // Duration of the OSD fade out (in milliseconds)
kOSDColorKey = 1,
kOSDInitialAlpha = 80 // Initial alpha level, in percent
};
#endif
// hardware screen
SDL_Surface *_hwscreen;
// unseen game screen
SDL_Surface *_screen;
#ifdef ENABLE_RGB_COLOR
Graphics::PixelFormat _screenFormat;
Graphics::PixelFormat _cursorFormat;
#endif
// temporary screen (for scalers)
SDL_Surface *_tmpscreen;
SDL_Surface *_tmpscreen2;
// overlay
SDL_Surface *_overlayscreen;
bool _overlayVisible;
Graphics::PixelFormat _overlayFormat;
// Audio
int _samplesPerSec;
// CD Audio
SDL_CD *_cdrom;
int _cdTrack, _cdNumLoops, _cdStartFrame, _cdDuration;
uint32 _cdEndTime, _cdStopTime;
enum {
DF_WANT_RECT_OPTIM = 1 << 0
};
enum {
kTransactionNone = 0,
kTransactionActive = 1,
kTransactionRollback = 2
};
struct TransactionDetails {
bool sizeChanged;
bool needHotswap;
bool needUpdatescreen;
bool normal1xScaler;
#ifdef ENABLE_RGB_COLOR
bool formatChanged;
#endif
};
TransactionDetails _transactionDetails;
struct VideoState {
bool setup;
bool fullscreen;
bool aspectRatioCorrection;
AspectRatio desiredAspectRatio;
int mode;
int scaleFactor;
int screenWidth, screenHeight;
int overlayWidth, overlayHeight;
#ifdef ENABLE_RGB_COLOR
Graphics::PixelFormat format;
#endif
int hardwareWidth, hardwareHeight;
};
VideoState _videoMode, _oldVideoMode;
virtual void setGraphicsModeIntern(); // overloaded by CE backend
/** Force full redraw on next updateScreen */
bool _forceFull;
ScalerProc *_scalerProc;
int _scalerType;
int _transactionMode;
bool _screenIsLocked;
Graphics::Surface _framebuffer;
/** Current video mode flags (see DF_* constants) */
uint32 _modeFlags;
bool _modeChanged;
int _screenChangeCount;
enum {
NUM_DIRTY_RECT = 100,
MAX_SCALING = 3
};
// Dirty rect management
SDL_Rect _dirtyRectList[NUM_DIRTY_RECT];
int _numDirtyRects;
uint32 *_dirtyChecksums;
bool _cksumValid;
int _cksumNum;
// Keyboard mouse emulation. Disabled by fingolfin 2004-12-18.
// I am keeping the rest of the code in for now, since the joystick
// code (or rather, "hack") uses it, too.
struct KbdMouse {
int16 x, y, x_vel, y_vel, x_max, y_max, x_down_count, y_down_count;
uint32 last_time, delay_time, x_down_time, y_down_time;
};
struct MousePos {
// The mouse position, using either virtual (game) or real
// (overlay) coordinates.
int16 x, y;
// The size and hotspot of the original cursor image.
int16 w, h;
int16 hotX, hotY;
// The size and hotspot of the pre-scaled cursor image, in real
// coordinates.
int16 rW, rH;
int16 rHotX, rHotY;
// The size and hotspot of the pre-scaled cursor image, in game
// coordinates.
int16 vW, vH;
int16 vHotX, vHotY;
MousePos() : x(0), y(0), w(0), h(0), hotX(0), hotY(0),
rW(0), rH(0), rHotX(0), rHotY(0), vW(0), vH(0),
vHotX(0), vHotY(0)
{ }
};
// mouse
KbdMouse _km;
bool _mouseVisible;
bool _mouseNeedsRedraw;
byte *_mouseData;
SDL_Rect _mouseBackup;
MousePos _mouseCurState;
byte _mouseKeyColor;
int _cursorTargetScale;
bool _cursorPaletteDisabled;
SDL_Surface *_mouseOrigSurface;
SDL_Surface *_mouseSurface;
enum {
kMouseColorKey = 1
};
// joystick
SDL_Joystick *_joystick;
// Shake mode
int _currentShakePos;
int _newShakePos;
// Palette data
SDL_Color *_currentPalette;
uint _paletteDirtyStart, _paletteDirtyEnd;
// Cursor palette data
SDL_Color *_cursorPalette;
/**
* Mutex which prevents multiple threads from interfering with each other
* when accessing the screen.
*/
MutexRef _graphicsMutex;
#ifdef MIXER_DOUBLE_BUFFERING
SDL_mutex *_soundMutex;
SDL_cond *_soundCond;
SDL_Thread *_soundThread;
bool _soundThreadIsRunning;
bool _soundThreadShouldQuit;
byte _activeSoundBuf;
uint _soundBufSize;
byte *_soundBuffers[2];
void mixerProducerThread();
static int SDLCALL mixerProducerThreadEntry(void *arg);
void initThreadedMixer(Audio::MixerImpl *mixer, uint bufSize);
void deinitThreadedMixer();
#endif
FilesystemFactory *_fsFactory;
Common::SaveFileManager *_savefile;
Audio::MixerImpl *_mixer;
SDL_TimerID _timerID;
Common::TimerManager *_timer;
protected:
void addDirtyRgnAuto(const byte *buf);
void makeChecksums(const byte *buf);
virtual void addDirtyRect(int x, int y, int w, int h, bool realCoordinates = false); // overloaded by CE backend
virtual void drawMouse(); // overloaded by CE backend
virtual void undrawMouse(); // overloaded by CE backend (FIXME)
virtual void blitCursor(); // overloaded by CE backend (FIXME)
/** Set the position of the virtual mouse cursor. */
void setMousePos(int x, int y);
virtual void fillMouseEvent(Common::Event &event, int x, int y); // overloaded by CE backend
void toggleMouseGrab();
virtual void internUpdateScreen(); // overloaded by CE backend
virtual bool loadGFXMode(); // overloaded by CE backend
virtual void unloadGFXMode(); // overloaded by CE backend
virtual bool hotswapGFXMode(); // overloaded by CE backend
void setFullscreenMode(bool enable);
void setAspectRatioCorrection(bool enable);
virtual bool saveScreenshot(const char *filename); // overloaded by CE backend
int effectiveScreenHeight() const {
return (_videoMode.aspectRatioCorrection ? real2Aspect(_videoMode.screenHeight) : _videoMode.screenHeight)
* _videoMode.scaleFactor;
}
void setupIcon();
void handleKbdMouse();
virtual bool remapKey(SDL_Event &ev, Common::Event &event);
void handleScalerHotkeys(const SDL_KeyboardEvent &key);
};
#endif