1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2006 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 #ifndef _SDL_gemvideo_h 25 #define _SDL_gemvideo_h 26 27 #include "SDL_mutex.h" 28 #include "../SDL_sysvideo.h" 29 30 /* The implementation dependent data for the window manager cursor */ 31 struct WMcursor { 32 MFORM *mform_p; 33 }; 34 35 /* Hidden "this" pointer for the video functions */ 36 #define _THIS SDL_VideoDevice *this 37 38 /* Functions prototypes */ 39 void GEM_wind_redraw(_THIS, int winhandle, short *inside); 40 41 /* Private display data */ 42 43 #define B2S_C2P_1TO2 (1<<0) /* C2P convert buffer 1 to buffer 2 */ 44 #define B2S_C2P_1TOS (1<<1) /* C2P convert buffer 1 to screen */ 45 #define B2S_VROCPYFM_1TOS (1<<2) /* vro_cpyfm() buffer 1 to screen */ 46 #define B2S_VROCPYFM_2TOS (1<<3) /* vro_cpyfm() buffer 2 to screen */ 47 48 #define SDL_NUMMODES 1 /* Fullscreen */ 49 50 struct SDL_PrivateVideoData { 51 Uint16 buf2scr_ops; /* Operations to get buffer to screen */ 52 void *buffer1; /* Our shadow buffers */ 53 void *buffer2; 54 55 /* VDI infos */ 56 short vdi_handle; /* VDI handle */ 57 short full_w, full_h; /* Fullscreen size */ 58 short bpp; /* Colour depth */ 59 short pixelsize; /* Bytes per pixel */ 60 short old_numcolors; /* Number of colors in saved palette */ 61 Uint16 pitch; /* Line length */ 62 Uint16 format; /* Screen format */ 63 void *screen; /* Screen address */ 64 Uint32 red, green, blue, alpha; /* Screen components */ 65 Uint32 screensize; 66 short blit_coords[8]; /* Coordinates for bitblt */ 67 MFDB src_mfdb, dst_mfdb; /* VDI MFDB for bitblt */ 68 Uint16 old_palette[256][3]; /* Saved current palette */ 69 Uint16 cur_palette[256][3]; /* SDL application palette */ 70 /* Function to set/restore palette */ 71 void (*setpalette)(_THIS, Uint16 newpal[256][3]); 72 73 /* GEM infos */ 74 short desk_x, desk_y; /* Desktop properties */ 75 short desk_w, desk_h; 76 short win_handle; /* Our window handle */ 77 int window_type; /* Window type */ 78 const char *title_name; /* Window title */ 79 const char *icon_name; /* Icon title */ 80 short version; /* AES version */ 81 short wfeatures; /* AES window features */ 82 SDL_bool refresh_name; /* Change window title ? */ 83 SDL_bool window_fulled; /* Window maximized ? */ 84 SDL_bool mouse_relative; /* Report relative mouse movement */ 85 SDL_bool locked; /* AES locked for fullscreen ? */ 86 SDL_bool lock_redraw; /* Prevent redraw till buffers are setup */ 87 short message[8]; /* To self-send an AES message */ 88 void *menubar; /* Menu bar save buffer when going fullscreen */ 89 SDL_bool use_dev_mouse; /* Use /dev/mouse ? */ 90 WMcursor *cursor; /* To restore cursor when leaving/entering window */ 91 92 SDL_bool fullscreen; /* Fullscreen or windowed mode ? */ 93 SDL_Rect *SDL_modelist[SDL_NUMMODES+1]; /* Mode list */ 94 SDL_Surface *icon; /* The icon */ 95 }; 96 97 /* Hidden structure -> variables names */ 98 #define VDI_handle (this->hidden->vdi_handle) 99 #define VDI_w (this->hidden->full_w) 100 #define VDI_h (this->hidden->full_h) 101 #define VDI_bpp (this->hidden->bpp) 102 #define VDI_pixelsize (this->hidden->pixelsize) 103 #define VDI_oldnumcolors (this->hidden->old_numcolors) 104 #define VDI_oldpalette (this->hidden->old_palette) 105 #define VDI_curpalette (this->hidden->cur_palette) 106 #define VDI_setpalette (this->hidden->setpalette) 107 #define VDI_pitch (this->hidden->pitch) 108 #define VDI_format (this->hidden->format) 109 #define VDI_screen (this->hidden->screen) 110 #define VDI_redmask (this->hidden->red) 111 #define VDI_greenmask (this->hidden->green) 112 #define VDI_bluemask (this->hidden->blue) 113 #define VDI_alphamask (this->hidden->alpha) 114 #define VDI_screensize (this->hidden->screensize) 115 #define VDI_src_mfdb (this->hidden->src_mfdb) 116 #define VDI_dst_mfdb (this->hidden->dst_mfdb) 117 #define VDI_blit_coords (this->hidden->blit_coords) 118 119 #define GEM_desk_x (this->hidden->desk_x) 120 #define GEM_desk_y (this->hidden->desk_y) 121 #define GEM_desk_w (this->hidden->desk_w) 122 #define GEM_desk_h (this->hidden->desk_h) 123 #define GEM_handle (this->hidden->win_handle) 124 #define GEM_win_type (this->hidden->window_type) 125 #define GEM_title_name (this->hidden->title_name) 126 #define GEM_icon_name (this->hidden->icon_name) 127 #define GEM_refresh_name (this->hidden->refresh_name) 128 #define GEM_version (this->hidden->version) 129 #define GEM_wfeatures (this->hidden->wfeatures) 130 #define GEM_win_fulled (this->hidden->window_fulled) 131 #define GEM_mouse_relative (this->hidden->mouse_relative) 132 #define GEM_locked (this->hidden->locked) 133 #define GEM_lock_redraw (this->hidden->lock_redraw) 134 #define GEM_message (this->hidden->message) 135 #define SDL_modelist (this->hidden->SDL_modelist) 136 #define GEM_icon (this->hidden->icon) 137 #define GEM_fullscreen (this->hidden->fullscreen) 138 #define GEM_menubar (this->hidden->menubar) 139 #define GEM_usedevmouse (this->hidden->use_dev_mouse) 140 #define GEM_cursor (this->hidden->cursor) 141 142 #define GEM_buffer1 (this->hidden->buffer1) 143 #define GEM_buffer2 (this->hidden->buffer2) 144 #define GEM_bufops (this->hidden->buf2scr_ops) 145 146 #define VDI_FBMASK(amask, rmask, gmask, bmask) \ 147 VDI_alphamask = (amask); \ 148 VDI_redmask = (rmask); \ 149 VDI_greenmask = (gmask); \ 150 VDI_bluemask = (bmask); 151 152 /* 153 Possible buffer to screen operations: 154 155 TC: 8 (chunky),15,16,24,32 bpp 156 8I: 8 bpp planes 157 FB: screen framebuffer address available 158 FS: fullscreen 159 160 TC, FB, FS: 161 - draw to screen 162 8I, FB, FS: 163 - draw to buffer 1 164 - C2P from buffer 1 to screen 165 166 TC, !FB, FS: 167 - draw to buffer 1 168 - vro_cpyfm() from buffer 1 to screen 169 8I, !FB, FS: 170 - draw to buffer 1 171 - C2P from buffer 1 to buffer 2 172 - vro_cpyfm() from buffer 2 to screen 173 174 TC, FB, !FS: 175 - draw to buffer 1 176 - vro_cpyfm() from buffer 1 to screen 177 8I, FB, !FS: 178 - draw to buffer 1 179 - C2P from buffer 1 to buffer 2 180 - vro_cpyfm() from buffer 2 to screen 181 182 TC, !FB, !FS: 183 - draw to buffer 1 184 - vro_cpyfm() from buffer 1 to screen 185 8I, !FB, !FS: 186 - draw to buffer 1 187 - C2P from buffer 1 to buffer 2 188 - vro_cpyfm() from buffer 2 to screen 189 */ 190 191 #endif /* _SDL_gemvideo_h */ 192