146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    SDL - Simple DirectMedia Layer
346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Copyright (C) 1997-2006 Sam Lantinga
446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is free software; you can redistribute it and/or
646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    modify it under the terms of the GNU Lesser General Public
746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License as published by the Free Software Foundation; either
846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    version 2.1 of the License, or (at your option) any later version.
946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is distributed in the hope that it will be useful,
1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    but WITHOUT ANY WARRANTY; without even the implied warranty of
1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Lesser General Public License for more details.
1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    You should have received a copy of the GNU Lesser General Public
1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License along with this library; if not, write to the Free Software
1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Sam Lantinga
2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    slouken@libsdl.org
2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h"
2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef _SDL_gemvideo_h
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define _SDL_gemvideo_h
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_mutex.h"
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_sysvideo.h"
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* The implementation dependent data for the window manager cursor */
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct WMcursor {
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MFORM *mform_p;
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Hidden "this" pointer for the video functions */
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define _THIS	SDL_VideoDevice *this
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Functions prototypes */
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid GEM_wind_redraw(_THIS, int winhandle, short *inside);
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Private display data */
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define B2S_C2P_1TO2		(1<<0)	/* C2P convert buffer 1 to buffer 2 */
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define B2S_C2P_1TOS		(1<<1)	/* C2P convert buffer 1 to screen */
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define B2S_VROCPYFM_1TOS	(1<<2)	/* vro_cpyfm() buffer 1 to screen */
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define B2S_VROCPYFM_2TOS	(1<<3)	/* vro_cpyfm() buffer 2 to screen */
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_NUMMODES	1		/* Fullscreen */
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct SDL_PrivateVideoData {
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16	buf2scr_ops;		/* Operations to get buffer to screen */
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *buffer1;				/* Our shadow buffers */
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *buffer2;
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	/* VDI infos */
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short vdi_handle;			/* VDI handle */
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short full_w, full_h;		/* Fullscreen size */
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short bpp;					/* Colour depth */
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short pixelsize;			/* Bytes per pixel */
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short old_numcolors;		/* Number of colors in saved palette */
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 pitch;				/* Line length */
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 format;				/* Screen format */
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *screen;				/* Screen address */
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 red, green, blue, alpha;	/* Screen components */
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 screensize;
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short	blit_coords[8];		/* Coordinates for bitblt */
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MFDB	src_mfdb, dst_mfdb;	/* VDI MFDB for bitblt */
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 old_palette[256][3];	/* Saved current palette */
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 cur_palette[256][3];	/* SDL application palette */
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner								/* Function to set/restore palette */
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void (*setpalette)(_THIS, Uint16 newpal[256][3]);
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	/* GEM infos */
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short desk_x, desk_y;		/* Desktop properties */
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short desk_w, desk_h;
7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short win_handle;			/* Our window handle */
7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int window_type;			/* Window type */
7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	const char *title_name;		/* Window title */
7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	const char *icon_name;		/* Icon title */
8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short version;				/* AES version */
8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short wfeatures;			/* AES window features */
8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool refresh_name;		/* Change window title ? */
8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool window_fulled;		/* Window maximized ? */
8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool mouse_relative;	/* Report relative mouse movement */
8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool locked;			/* AES locked for fullscreen ? */
8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool lock_redraw;		/* Prevent redraw till buffers are setup */
8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	short message[8];			/* To self-send an AES message */
8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *menubar;				/* Menu bar save buffer when going fullscreen */
8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool use_dev_mouse;		/* Use /dev/mouse ? */
9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	WMcursor *cursor;			/* To restore cursor when leaving/entering window */
9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool fullscreen;		/* Fullscreen or windowed mode ? */
9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_Rect *SDL_modelist[SDL_NUMMODES+1];	/* Mode list */
9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_Surface *icon;			/* The icon */
9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Hidden structure -> variables names */
9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_handle			(this->hidden->vdi_handle)
9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_w				(this->hidden->full_w)
10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_h				(this->hidden->full_h)
10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_bpp				(this->hidden->bpp)
10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_pixelsize		(this->hidden->pixelsize)
10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_oldnumcolors	(this->hidden->old_numcolors)
10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_oldpalette		(this->hidden->old_palette)
10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_curpalette		(this->hidden->cur_palette)
10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_setpalette		(this->hidden->setpalette)
10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_pitch			(this->hidden->pitch)
10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_format			(this->hidden->format)
10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_screen			(this->hidden->screen)
11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_redmask			(this->hidden->red)
11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_greenmask		(this->hidden->green)
11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_bluemask		(this->hidden->blue)
11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_alphamask		(this->hidden->alpha)
11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_screensize		(this->hidden->screensize)
11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_src_mfdb		(this->hidden->src_mfdb)
11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_dst_mfdb		(this->hidden->dst_mfdb)
11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_blit_coords		(this->hidden->blit_coords)
11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_desk_x			(this->hidden->desk_x)
12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_desk_y			(this->hidden->desk_y)
12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_desk_w			(this->hidden->desk_w)
12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_desk_h			(this->hidden->desk_h)
12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_handle			(this->hidden->win_handle)
12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_win_type		(this->hidden->window_type)
12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_title_name		(this->hidden->title_name)
12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_icon_name		(this->hidden->icon_name)
12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_refresh_name	(this->hidden->refresh_name)
12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_version			(this->hidden->version)
12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_wfeatures		(this->hidden->wfeatures)
13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_win_fulled		(this->hidden->window_fulled)
13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_mouse_relative	(this->hidden->mouse_relative)
13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_locked			(this->hidden->locked)
13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_lock_redraw		(this->hidden->lock_redraw)
13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_message			(this->hidden->message)
13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_modelist		(this->hidden->SDL_modelist)
13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_icon			(this->hidden->icon)
13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_fullscreen		(this->hidden->fullscreen)
13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_menubar			(this->hidden->menubar)
13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_usedevmouse		(this->hidden->use_dev_mouse)
14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_cursor			(this->hidden->cursor)
14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_buffer1			(this->hidden->buffer1)
14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_buffer2			(this->hidden->buffer2)
14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define GEM_bufops			(this->hidden->buf2scr_ops)
14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VDI_FBMASK(amask, rmask, gmask, bmask) \
14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDI_alphamask = (amask); \
14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDI_redmask = (rmask); \
14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDI_greenmask = (gmask); \
15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDI_bluemask = (bmask);
15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Possible buffer to screen operations:
15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	TC: 8 (chunky),15,16,24,32 bpp
15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	8I: 8 bpp planes
15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	FB: screen framebuffer address available
15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	FS: fullscreen
15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	TC, FB, FS:
16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to screen
16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	8I, FB, FS:
16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- C2P from buffer 1 to screen
16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	TC, !FB, FS:
16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 1 to screen
16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	8I, !FB, FS:
17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- C2P from buffer 1 to buffer 2
17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 2 to screen
17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	TC, FB, !FS:
17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 1 to screen
17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	8I, FB, !FS:
17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- C2P from buffer 1 to buffer 2
18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 2 to screen
18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	TC, !FB, !FS:
18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 1 to screen
18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	8I, !FB, !FS:
18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- draw to buffer 1
18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- C2P from buffer 1 to buffer 2
18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		- vro_cpyfm() from buffer 2 to screen
18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* _SDL_gemvideo_h */
192