Home | History | Annotate | Download | only in gem
      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 (at) 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