aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/x11/x11.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/x11/x11.h')
-rw-r--r--backends/platform/x11/x11.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/backends/platform/x11/x11.h b/backends/platform/x11/x11.h
new file mode 100644
index 0000000000..ba29bc7eab
--- /dev/null
+++ b/backends/platform/x11/x11.h
@@ -0,0 +1,195 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * 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$
+ *
+ */
+
+class OSystem_X11:public OSystem {
+public:
+ OSystem_X11();
+ ~OSystem_X11();
+
+ void initBackend();
+
+ // Determine whether the backend supports the specified feature.
+ bool hasFeature(Feature f);
+
+ // En-/disable the specified feature.
+ void setFeatureState(Feature f, bool enable);
+
+ // Query the state of the specified feature.
+ bool getFeatureState(Feature f);
+
+ // Retrieve a list of all graphics modes supported by this backend.
+ const GraphicsMode *getSupportedGraphicsModes() const;
+
+ // Return the ID of the 'default' graphics mode.
+ int getDefaultGraphicsMode() const;
+
+ // Switch to the specified graphics mode.
+ bool setGraphicsMode(int mode);
+
+ // Determine which graphics mode is currently active.
+ int getGraphicsMode() const;
+
+ // Set colors of the palette
+ void setPalette(const byte *colors, uint start, uint num);
+
+ // Set the size of the video bitmap.
+ // Typically, 320x200
+ void initSize(uint w, uint h);
+
+ // Draw a bitmap to screen.
+ // The screen will not be updated to reflect the new bitmap
+ void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
+
+ // Update the dirty areas of the screen
+ void updateScreen();
+
+ // Either show or hide the mouse cursor
+ bool showMouse(bool visible);
+
+ // Set the position of the mouse cursor
+ void set_mouse_pos(int x, int y);
+
+ // 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 hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1);
+
+ // 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.
+ bool pollEvent(Event &event);
+
+ // Set function that generates samples
+ bool setSoundCallback(SoundProc proc, void *param);
+ void clearSoundCallback();
+
+ // Determine the output sample rate. Audio data provided by the sound
+ // callback will be played using this rate.
+ int getOutputSampleRate() const;
+
+ // Quit
+ void quit();
+
+ // Add a callback timer
+ void setTimerCallback(TimerProc callback, int interval);
+
+ // Mutex handling
+ MutexRef createMutex();
+ void lockMutex(MutexRef mutex);
+ void unlockMutex(MutexRef mutex);
+ void deleteMutex(MutexRef mutex);
+
+ // Overlay handling for the new menu system
+ void showOverlay();
+ void hideOverlay();
+ void clearOverlay();
+ void grabOverlay(int16 *, int);
+ void copyRectToOverlay(const int16 *, int, int, int, int, int);
+ virtual int16 getHeight();
+ virtual int16 getWidth();
+
+ virtual void grabPalette(byte *colors, uint start, uint num);
+
+ // Set a window caption or any other comparable status display to the
+ // given value.
+ void setWindowCaption(const char *caption);
+
+ static OSystem *create(int gfx_mode, bool full_screen);
+
+private:
+ typedef struct {
+ int x, y;
+ int w, h;
+ int hot_x, hot_y;
+ } MouseState;
+
+ typedef struct {
+ int x, y, w, h;
+ } DirtyRect;
+
+ enum {
+ MAX_NUMBER_OF_DIRTY_RECTS = 32
+ };
+
+ void create_empty_cursor();
+ void draw_mouse(DirtyRect *dout);
+ void undraw_mouse();
+ void updateScreen_helper(const DirtyRect *d, DirtyRect *dout);
+ void blit_convert(const DirtyRect *d, uint8 *dst, int pitch);
+ void blit(const DirtyRect *d, uint16 *dst, int pitch);
+
+ uint8 *_local_fb;
+ uint16 *_local_fb_overlay;
+ bool _overlay_visible;
+
+ int _window_width, _window_height;
+ int _fb_width, _fb_height;
+ int _scumm_x, _scumm_y;
+
+ uint16 *_palette16;
+ uint32 *_palette32;
+
+ bool _palette_changed;
+ Display *_display;
+ int _screen, _depth;
+ uint8 _bytesPerPixel;
+ Window _window;
+ GC _black_gc;
+ XImage *_image;
+ pthread_t _sound_thread;
+
+ struct timeval _start_time;
+
+ int _fake_right_mouse;
+ int _report_presses;
+ int _current_shake_pos;
+ int _new_shake_pos;
+ DirtyRect _ds[MAX_NUMBER_OF_DIRTY_RECTS];
+ int _num_of_dirty_rects;
+
+ MouseState _oldMouseState, _curMouseState;
+ byte *_ms_buf;
+ bool _mouse_visible;
+ bool _mouse_state_changed;
+ byte _mouseKeycolor;
+
+ uint32 _timer_duration, _timer_next_expiry;
+ bool _timer_active;
+ int (*_timer_callback) (int);
+};
+
+typedef struct {
+ OSystem::SoundProc sound_proc;
+ void *param;
+} THREAD_PARAM;