Home | History | Annotate | Download | only in cybergfx
      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 (at) libsdl.org
     21 */
     22 #include "SDL_config.h"
     23 
     24 #ifndef _SDL_cgxvideo_h
     25 #define _SDL_cgxvideo_h
     26 
     27 
     28 #include <exec/exec.h>
     29 #include <cybergraphx/cybergraphics.h>
     30 #include <graphics/scale.h>
     31 #include <graphics/gfx.h>
     32 #include <intuition/intuition.h>
     33 #if defined(__SASC) || defined(STORMC4_WOS)
     34 #include <proto/exec.h>
     35 #include <proto/cybergraphics.h>
     36 #include <proto/graphics.h>
     37 #include <proto/intuition.h>
     38 #include <proto/console.h>
     39 #else
     40 #include <inline/exec.h>
     41 #include <inline/cybergraphics.h>
     42 #include <inline/graphics.h>
     43 #include <inline/intuition.h>
     44 #include <inline/console.h>
     45 #endif
     46 
     47 #include "SDL_mouse.h"
     48 #include "../SDL_sysvideo.h"
     49 #include "mydebug.h"
     50 
     51 #define USE_CGX_WRITELUTPIXEL
     52 
     53 /* Hidden "this" pointer for the video functions */
     54 #define _THIS	SDL_VideoDevice *this
     55 
     56 /* Private display data */
     57 struct SDL_PrivateVideoData {
     58     struct Screen *Public_Display; /* Used for events and window management */
     59     struct Screen *GFX_Display;	/* Used for graphics and colormap stuff */
     60     Uint32 SDL_VisualUnused;		/* The visual used by our window */
     61     struct Window *SDL_Window;	/* Shared by both displays (no X security?) */
     62     unsigned char *BlankCursor;	/* The invisible cursor */
     63 
     64     char *SDL_windowid;		/* Flag: true if we have been passed a window */
     65 
     66     /* The variables used for displaying graphics */
     67     Uint8 *Ximage;		/* The X image for our window */
     68     int swap_pixels;		/* Flag: true if display is swapped endian */
     69 
     70     /* Support for internal mouse warping */
     71     struct {
     72         int x;
     73         int y;
     74     } mouse_last;
     75     struct {
     76         int numerator;
     77         int denominator;
     78         int threshold;
     79     } mouse_accel;
     80     int mouse_relative;
     81 
     82     /* The current list of available video modes */
     83     SDL_Rect **modelist;
     84 
     85     /* available visuals of interest to us, sorted deepest first */
     86     struct {
     87 		Uint32 visual;
     88 		int depth;		/* number of significant bits/pixel */
     89 		int bpp;		/* pixel quantum in bits */
     90     } visuals[5];		/* at most entries for 8, 15, 16, 24 */
     91     int nvisuals;
     92 
     93     Uint32 vis;		/* current visual in use */
     94     int depth;			/* current visual depth (not bpp) */
     95     int BytesPerPixel;
     96     int currently_fullscreen,same_format,dbuffer;
     97 
     98     /* Automatic mode switching support (entering/leaving fullscreen) */
     99     Uint32 switch_waiting;
    100     Uint32 switch_time;
    101 
    102     /* Prevent too many XSync() calls */
    103     int blit_queued;
    104 
    105     /* Colormap handling */
    106     LONG Pens;
    107     Sint32 *XPixels;		/* A list of pixels that have been allocated, the size depends on the screen format */
    108 	struct ScreenBuffer *SB[2];
    109 	struct RastPort *RP;
    110     short *iconcolors;		/* List of colors used by the icon */
    111 };
    112 
    113 /* Old variable names */
    114 #define local_X11		(this->hidden->local_X11)
    115 #define SDL_Display		(this->hidden->Public_Display)
    116 #define GFX_Display		(this->hidden->GFX_Display)
    117 #define SDL_Screen		DefaultScreen(this->hidden->Public_Display)
    118 
    119 #define SDL_Visual		(this->hidden->vis)
    120 
    121 #define SDL_Root		RootWindow(SDL_Display, SDL_Screen)
    122 #define WMwindow		(this->hidden->WMwindow)
    123 #define FSwindow		(this->hidden->FSwindow)
    124 #define SDL_Window		(this->hidden->SDL_Window)
    125 #define WM_DELETE_WINDOW	(this->hidden->WM_DELETE_WINDOW)
    126 #define SDL_BlankCursor		(this->hidden->BlankCursor)
    127 #define SDL_windowid		(this->hidden->SDL_windowid)
    128 #define SDL_Ximage		(this->hidden->Ximage)
    129 #define SDL_GC			(this->hidden->gc)
    130 #define swap_pixels		(this->hidden->swap_pixels)
    131 #define mouse_last		(this->hidden->mouse_last)
    132 #define mouse_accel		(this->hidden->mouse_accel)
    133 #define mouse_relative		(this->hidden->mouse_relative)
    134 #define SDL_modelist		(this->hidden->modelist)
    135 #define SDL_RastPort		(this->hidden->RP)
    136 #define saved_mode		(this->hidden->saved_mode)
    137 #define saved_view		(this->hidden->saved_view)
    138 #define currently_fullscreen	(this->hidden->currently_fullscreen)
    139 #define blit_queued		(this->hidden->blit_queued)
    140 #define SDL_DisplayColormap	(this->hidden->GFX_Display->ViewPort.ColorMap)
    141 #define SDL_XPixels		(this->hidden->XPixels)
    142 #define SDL_iconcolors		(this->hidden->iconcolors)
    143 
    144 /* Used to get the X cursor from a window-manager specific cursor */
    145 // extern Cursor SDL_GetWMXCursor(WMcursor *cursor);
    146 
    147 extern int CGX_CreateWindow(_THIS, SDL_Surface *screen,
    148 			    int w, int h, int bpp, Uint32 flags);
    149 extern int CGX_ResizeWindow(_THIS,
    150 			SDL_Surface *screen, int w, int h, Uint32 flags);
    151 
    152 extern void CGX_DestroyWindow(_THIS, SDL_Surface *screen);
    153 
    154 extern struct Library *CyberGfxBase;
    155 extern struct IntuitionBase *IntuitionBase;
    156 extern struct GfxBase *GfxBase;
    157 extern struct ExecBase *SysBase;
    158 extern struct DosLibrary *DOSBase;
    159 
    160 struct private_hwdata
    161 {
    162 	struct BitMap *bmap;
    163 	APTR lock;
    164 	struct SDL_VideoDevice *videodata;
    165 	APTR mask;
    166 	int allocated;
    167 };
    168 
    169 int CGX_CheckHWBlit(_THIS,SDL_Surface *src,SDL_Surface *dst);
    170 int CGX_FillHWRect(_THIS,SDL_Surface *dst,SDL_Rect *dstrect,Uint32 color);
    171 int CGX_SetHWColorKey(_THIS,SDL_Surface *surface, Uint32 key);
    172 #endif /* _SDL_x11video_h */
    173