aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/gp2x/gp2x-common.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/gp2x/gp2x-common.h')
-rw-r--r--backends/platform/gp2x/gp2x-common.h381
1 files changed, 10 insertions, 371 deletions
diff --git a/backends/platform/gp2x/gp2x-common.h b/backends/platform/gp2x/gp2x-common.h
index 1c8708a8b1..4d2a9c33cc 100644
--- a/backends/platform/gp2x/gp2x-common.h
+++ b/backends/platform/gp2x/gp2x-common.h
@@ -23,384 +23,23 @@
*
*/
-#ifndef GP2X_COMMON_H
-#define GP2X_COMMON_H
+#ifndef PLATFORM_SDL_GP2X_H
+#define PLATFORM_SDL_GP2X_H
-#include <SDL.h>
-#include <SDL_gp2x.h>
-
-#include "backends/base-backend.h"
-#include "graphics/scaler.h"
-
-#define __GP2X__
-#define USE_OSD
-#define MIXER_DOUBLE_BUFFERING 1
-
-namespace Audio {
- class MixerImpl;
-}
-
-enum {
- GFX_NORMAL = 0
-};
+#include "backends/platform/sdl/posix/posix.h"
+#ifndef PATH_MAX
+ #define PATH_MAX 255
+#endif
-class OSystem_GP2X : public BaseBackend {
+class OSystem_GP2X : public OSystem_POSIX {
public:
- OSystem_GP2X();
- virtual ~OSystem_GP2X();
-
virtual void initBackend();
-
- void beginGFXTransaction(void);
- TransactionError endGFXTransaction(void);
-
- // Set the size of the video bitmap.
- // Typically, 320x200
- void initSize(uint w, uint h, const Graphics::PixelFormat *format);
-
- 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
- void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h);
-
- 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.
- void warpMouse(int x, int y);
-
- // Set the bitmap that's used when drawing the cursor.
- void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format);
-
- // 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
-
- // Sets up the keymapper with the backends hardware key set
- void setupKeymapper();
-
-protected:
- virtual bool dispatchSDLEvent(SDL_Event &ev, Common::Event &event);
-
- // Handlers for specific SDL events, called by pollEvent.
- // This way, if a backend inherits fromt the SDL backend, it can
- // change the behavior of only a single event, without having to override all
- // of pollEvent.
- virtual bool handleKeyDown(SDL_Event &ev, Common::Event &event);
- virtual bool handleKeyUp(SDL_Event &ev, Common::Event &event);
- virtual bool handleMouseMotion(SDL_Event &ev, Common::Event &event);
- virtual bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event);
- virtual bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event);
- virtual bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event);
- virtual bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event);
- virtual bool handleJoyAxisMotion(SDL_Event &ev, Common::Event &event);
-
-public:
-
- // Set function that generates samples
- void setupMixer();
- static void mixCallback(void *s, byte *samples, int len);
-
- void closeMixer();
-
- virtual Audio::Mixer *getMixer();
-
- // Quit
- void quit();
-
- void getTimeAndDate(TimeDate &t) const;
- virtual Common::TimerManager *getTimerManager();
-
- // Mutex handling
- MutexRef createMutex();
- void lockMutex(MutexRef mutex);
- void unlockMutex(MutexRef mutex);
- void deleteMutex(MutexRef mutex);
-
- // Overlay
- Graphics::PixelFormat getOverlayFormat() const { return _overlayFormat; }
- void showOverlay();
- void hideOverlay();
- void clearOverlay();
- void grabOverlay(OverlayColor *buf, int pitch);
- void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
- int16 getHeight();
- int16 getWidth();
- int16 getOverlayHeight() { return _videoMode.overlayHeight; }
- int16 getOverlayWidth() { return _videoMode.overlayWidth; }
-
- const GraphicsMode *getSupportedGraphicsModes() const;
- int getDefaultGraphicsMode() const;
- bool setGraphicsMode(int mode);
- int getGraphicsMode() const;
-
- bool hasFeature(Feature f);
- void setFeatureState(Feature f, bool enable);
- bool getFeatureState(Feature f);
- void preprocessEvents(SDL_Event *event) {}
-
- void displayMessageOnOSD(const char *msg);
-
- virtual Common::SaveFileManager *getSavefileManager();
- virtual FilesystemFactory *getFilesystemFactory();
+ virtual void quit();
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0);
- virtual Common::SeekableReadStream *createConfigReadStream();
- virtual Common::WriteStream *createConfigWriteStream();
-
-protected:
- bool _inited;
-
- 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
- };
-
- // hardware screen
- SDL_Surface *_hwscreen;
-
- // unseen game screen
- SDL_Surface *_screen;
-
- // temporary screen (for scalers)
- SDL_Surface *_tmpscreen;
- SDL_Surface *_tmpscreen2;
-
- // overlay
- SDL_Surface *_overlayscreen;
- bool _overlayVisible;
- Graphics::PixelFormat _overlayFormat;
-
- enum {
- kTransactionNone = 0,
- kTransactionActive = 1,
- kTransactionRollback = 2
- };
-
- struct TransactionDetails {
- bool sizeChanged;
- bool needHotswap;
- bool needUpdatescreen;
- bool normal1xScaler;
- };
- TransactionDetails _transactionDetails;
-
- struct VideoState {
- bool setup;
-
- bool fullscreen;
- bool aspectRatioCorrection;
-
- int mode;
- int scaleFactor;
-
- int screenWidth, screenHeight;
- int overlayWidth, overlayHeight;
- };
- 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) */
- bool _modeChanged;
- int _screenChangeCount;
-
- /* True if zoom on mouse is enabled. (only set by > 240 high games) */
- bool _adjustZoomOnMouse;
-
- enum {
- NUM_DIRTY_RECT = 100,
- MAX_MOUSE_W = 80,
- MAX_MOUSE_H = 80,
- MAX_SCALING = 3
- };
-
- // Dirty rect management
- SDL_Rect _dirtyRectList[NUM_DIRTY_RECT];
- int _numDirtyRects;
-
- // 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
- };
-
- // Scroll lock state - since SDL doesn't track it
- bool _scrollLock;
-
- // joystick
- SDL_Joystick *_joystick;
- bool _stickBtn[32];
-
- // 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:
- virtual void addDirtyRect(int x, int y, int w, int h, bool realCoordinates = false);
-
- void drawMouse();
- void undrawMouse();
- void blitCursor();
-
- /** Set the position of the virtual mouse cursor. */
- void setMousePos(int x, int y);
- void fillMouseEvent(Common::Event &event, int x, int y);
- void toggleMouseGrab();
-
- void internUpdateScreen();
-
- bool loadGFXMode();
- void unloadGFXMode();
- bool hotswapGFXMode();
-
- void setFullscreenMode(bool enable);
- void setAspectRatioCorrection(bool enable);
-
- void setZoomOnMouse(); // GP2X: On > 240 high games zooms on the mouse + radius.
-
- bool saveScreenshot(const char *filename);
-
- int effectiveScreenHeight() const;
-
- void setupIcon();
- void handleKbdMouse();
-
- virtual bool remapKey(SDL_Event &ev, Common::Event &event);
-
- bool handleScalerHotkeys(const SDL_KeyboardEvent &key);
- bool isScalerHotkey(const Common::Event &event);
-
- void moveStick();
- int _gp2xInputType;
+ virtual void initSDL();
};
-#endif // GP2X_COMMON_H
+#endif