1/*
2    SDL - Simple DirectMedia Layer
3    Copyright (C) 1997-2012 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 */
31struct 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 */
39void 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
50struct 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