aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/wince/wince-sdl.h
diff options
context:
space:
mode:
authorKostas Nakos2006-07-01 08:13:46 +0000
committerKostas Nakos2006-07-01 08:13:46 +0000
commit6a8749ace05649fdf69593c76a75c322f34a5bfa (patch)
treeda214254c9ca56ded22af377fe0763ad73dd7bb5 /backends/platform/wince/wince-sdl.h
parent294dcea3ef063ee4ec95f3f418af4534445da1c6 (diff)
downloadscummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.gz
scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.tar.bz2
scummvm-rg350-6a8749ace05649fdf69593c76a75c322f34a5bfa.zip
move ce port to its new home
svn-id: r23366
Diffstat (limited to 'backends/platform/wince/wince-sdl.h')
-rw-r--r--backends/platform/wince/wince-sdl.h237
1 files changed, 237 insertions, 0 deletions
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
new file mode 100644
index 0000000000..ae1d252f2d
--- /dev/null
+++ b/backends/platform/wince/wince-sdl.h
@@ -0,0 +1,237 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001-2006 The ScummVM project
+ *
+ * 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 WINCE_SDL_H
+#define WINCE_SDL_H
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "graphics/scaler.h"
+#include "backends/intern.h"
+#include "backends/platform/sdl/sdl-common.h"
+
+#include "CEgui.h"
+#include "CEkeys.h"
+#include "CEDevice.h"
+#include "CEScaler.h"
+
+#include <SDL.h>
+
+
+
+#define TOTAL_ZONES 3
+
+class OSystem_WINCE3 : public OSystem_SDL {
+public:
+ OSystem_WINCE3();
+
+ // Update the dirty areas of the screen
+ void internUpdateScreen();
+
+ void initSize(uint w, uint h);
+
+ void initBackend();
+
+ // Overloaded from SDL_Common (toolbar handling)
+ bool pollEvent(Event &event);
+ // Overloaded from SDL_Common (toolbar handling)
+ void drawMouse();
+ // Overloaded from SDL_Common (mouse and new scaler handling)
+ void fillMouseEvent(Event &event, int x, int y);
+ // Overloaded from SDL_Common (new scaler handling)
+ void addDirtyRect(int x, int y, int w, int h, bool mouseRect = false);
+ // Overloaded from SDL_Common (new scaler handling)
+ void warpMouse(int x, int y);
+ // Overloaded from SDL_Commmon
+ void quit();
+ // Overloaded from SDL_Commmon (master volume and sample rate subtleties)
+ bool setSoundCallback(SoundProc proc, void *param);
+
+ // Overloaded from SDL_Common (FIXME)
+ void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor, int cursorTargetScale); // overloaded by CE backend
+ void undrawMouse();
+ void blitCursor();
+ void setMousePos(int x, int y);
+ void copyRectToScreen(const byte *src, int pitch, int x, int y, int w, int h); // overloaded by CE backend (FIXME)
+ void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
+ void showOverlay();
+ void hideOverlay();
+
+ // GUI and action stuff
+ void swap_panel_visibility();
+ void swap_panel();
+ void swap_sound_master();
+ void add_right_click(bool pushed);
+ void swap_mouse_visibility();
+ void swap_freeLook();
+ void swap_zoom_up();
+ void swap_zoom_down();
+ void swap_smartphone_keyboard();
+
+//#ifdef WIN32_PLATFORM_WFSP
+ // Smartphone actions
+
+ void initZones();
+ void loadDeviceConfigurationElement(String element, int &value, int defaultValue);
+ void loadDeviceConfiguration();
+ void add_left_click(bool pushed);
+ void move_cursor_up();
+ void move_cursor_down();
+ void move_cursor_left();
+ void move_cursor_right();
+ void switch_zone();
+ void smartphone_rotate_display();
+//#endif
+
+ static int getScreenWidth();
+ static int getScreenHeight();
+ static void initScreenInfos();
+ static bool isOzone();
+
+protected:
+ void loadGFXMode();
+ void unloadGFXMode();
+ void hotswapGFXMode();
+ bool saveScreenshot(const char *filename);
+
+
+ const GraphicsMode *getSupportedGraphicsModes() const;
+ bool setGraphicsMode(int mode);
+ //int getGraphicsMode() const;
+ int getDefaultGraphicsMode() const;
+
+ void setWindowCaption(const char *caption);
+ bool openCD(int drive);
+ int getOutputSampleRate() const;
+
+ bool hasFeature(Feature f);
+ void setFeatureState(Feature f, bool enable);
+ bool getFeatureState(Feature f);
+
+ void internDrawMouse();
+ void drawToolbarMouse(SDL_Surface *surf, bool draw);
+
+private:
+
+#ifdef USE_VORBIS
+ bool checkOggHighSampleRate();
+#endif
+
+ static void private_sound_proc(void *param, byte *buf, int len);
+ static SoundProc _originalSoundProc;
+
+ bool update_scalers();
+ void create_toolbar();
+ void update_game_settings();
+ void check_mappings();
+ void update_keyboard();
+ void get_sample_rate();
+
+ void retrieve_mouse_location(int &x, int &y);
+
+ CEGUI::ToolbarHandler _toolbarHandler;
+
+ SDL_Surface *_toolbarLow; // toolbar 320x40
+ SDL_Surface *_toolbarHigh; // toolbar 640x80
+ bool _toolbarHighDrawn; // cache toolbar 640x80
+
+ uint16 _sampleRate; // current audio sample rate
+
+ bool _freeLook; // freeLook mode (do not send mouse button events)
+
+ bool _forceHideMouse; // force invisible mouse cursor
+
+ bool _forcePanelInvisible; // force panel visibility for some cases
+ bool _panelVisible; // panel visibility
+ bool _panelStateForced; // panel visibility forced by external call
+
+ bool _panelInitialized; // only initialize the toolbar once
+
+ bool _monkeyKeyboard; // forced keyboard for Monkey Island copy protection
+ static bool _soundMaster; // turn off sound after all calculations
+ // static since needed by the SDL callback
+ int _orientationLandscape; // current orientation
+ int _newOrientation; // new orientation
+
+ bool _saveToolbarState; // save visibility when forced
+ String _saveActiveToolbar; // save active toolbar when forced
+
+ bool _saveToolbarZoom; // save visibility when zooming
+ bool _zoomUp; // zooming up mode
+ bool _zoomDown; // zooming down mode
+
+ bool _rbutton; // double tap -> right button simulation
+
+ bool _usesEmulatedMouse; // emulated mousemove ever been used in this session
+
+ int _scaleFactorXm; // scaler X *
+ int _scaleFactorXd; // scaler X /
+ int _scaleFactorYm; // scaler Y *
+ int _scaleFactorYd; // scaler Y /
+ bool _scalersChanged;
+
+ static int _platformScreenWidth;
+ static int _platformScreenHeight;
+ static bool _isOzone; // true if running on Windows 2003 SE
+
+ // Keyboard tap
+ int _tapX;
+ int _tapY;
+ long _tapTime;
+
+ // Mouse
+ int _mouseHotspotX, _mouseHotspotY;
+ byte *_mouseBackupOld;
+ uint16 *_mouseBackupToolbar;
+
+ // Smartphone specific variables
+
+ int _lastKeyPressed; // last key pressed
+ int _keyRepeat; // number of time the last key was repeated
+ int _keyRepeatTime; // elapsed time since the key was pressed
+ int _keyRepeatTrigger; // minimum time to consider the key was repeated
+
+ int _repeatX; // repeat trigger for left and right cursor moves
+ int _repeatY; // repeat trigger for up and down cursor moves
+ int _stepX1; // offset for left and right cursor moves (slowest)
+ int _stepX2; // offset for left and right cursor moves (faster)
+ int _stepX3; // offset for left and right cursor moves (fastest)
+ int _stepY1; // offset for up and down cursor moves (slowest)
+ int _stepY2; // offset for up and down cursor moves (faster)
+ int _stepY3; // offset for up and down cursor moves (fastest)
+
+ int _mouseXZone[TOTAL_ZONES];
+ int _mouseYZone[TOTAL_ZONES];
+ int _currentZone;
+
+ typedef struct zoneDesc {
+ int x;
+ int y;
+ int width;
+ int height;
+ } zoneDesc;
+
+ static zoneDesc _zones[TOTAL_ZONES];
+};
+
+#endif