SDL-1.2.14
[sdl_omap.git] / src / video / gem / SDL_gemvideo.h
1 /*
2     SDL - Simple DirectMedia Layer
3     Copyright (C) 1997-2009 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 */