| /* |
| SDL - Simple DirectMedia Layer |
| Copyright (C) 1997-2012 Sam Lantinga |
| |
| This library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public |
| License as published by the Free Software Foundation; either |
| version 2.1 of the License, or (at your option) any later version. |
| |
| This library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public |
| License along with this library; if not, write to the Free Software |
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| |
| Sam Lantinga |
| slouken@libsdl.org |
| */ |
| #include "SDL_config.h" |
| |
| #ifndef _SDL_gapivideo_h |
| #define _SDL_gapivideo_h |
| |
| #include "SDL_mouse.h" |
| #include "SDL_mutex.h" |
| #include "../SDL_sysvideo.h" |
| #include "../windib/SDL_gapidibvideo.h" |
| |
| /* From gx.h, since it's not really C compliant */ |
| |
| struct GXDisplayProperties { |
| DWORD cxWidth; |
| DWORD cyHeight; // notice lack of 'th' in the word height. |
| long cbxPitch; // number of bytes to move right one x pixel - can be negative. |
| long cbyPitch; // number of bytes to move down one y pixel - can be negative. |
| long cBPP; // # of bits in each pixel |
| DWORD ffFormat; // format flags. |
| }; |
| |
| struct GXKeyList { |
| short vkUp; // key for up |
| POINT ptUp; // x,y position of key/button. Not on screen but in screen coordinates. |
| short vkDown; |
| POINT ptDown; |
| short vkLeft; |
| POINT ptLeft; |
| short vkRight; |
| POINT ptRight; |
| short vkA; |
| POINT ptA; |
| short vkB; |
| POINT ptB; |
| short vkC; |
| POINT ptC; |
| short vkStart; |
| POINT ptStart; |
| }; |
| |
| typedef int (*PFNGXOpenDisplay)(HWND hWnd, DWORD dwFlags); |
| typedef int (*PFNGXCloseDisplay)(); |
| typedef void* (*PFNGXBeginDraw)(); |
| typedef int (*PFNGXEndDraw)(); |
| typedef int (*PFNGXOpenInput)(); |
| typedef int (*PFNGXCloseInput)(); |
| typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties)(); |
| typedef struct GXKeyList (*PFNGXGetDefaultKeys)(int iOptions); |
| typedef int (*PFNGXSuspend)(); |
| typedef int (*PFNGXResume)(); |
| typedef int (*PFNGXSetViewport)( DWORD dwTop, DWORD dwHeight, DWORD dwReserved1, DWORD dwReserved2 ); |
| typedef BOOL (*PFNGXIsDisplayDRAMBuffer)(); |
| |
| struct GapiFunc |
| { |
| PFNGXOpenDisplay GXOpenDisplay; |
| PFNGXCloseDisplay GXCloseDisplay; |
| PFNGXBeginDraw GXBeginDraw; |
| PFNGXEndDraw GXEndDraw; |
| PFNGXOpenInput GXOpenInput; |
| PFNGXCloseInput GXCloseInput; |
| PFNGXGetDisplayProperties GXGetDisplayProperties; |
| PFNGXGetDefaultKeys GXGetDefaultKeys; |
| PFNGXSuspend GXSuspend; |
| PFNGXResume GXResume; |
| PFNGXSetViewport GXSetViewport; |
| PFNGXIsDisplayDRAMBuffer GXIsDisplayDRAMBuffer; |
| }; |
| |
| #define kfLandscape 0x8 // Screen is rotated 270 degrees |
| #define kfPalette 0x10 // Pixel values are indexes into a palette |
| #define kfDirect 0x20 // Pixel values contain actual level information |
| #define kfDirect555 0x40 // 5 bits each for red, green and blue values in a pixel. |
| #define kfDirect565 0x80 // 5 red bits, 6 green bits and 5 blue bits per pixel |
| #define kfDirect888 0x100 // 8 bits each for red, green and blue values in a pixel. |
| #define kfDirect444 0x200 // 4 red, 4 green, 4 blue |
| #define kfDirectInverted 0x400 |
| |
| #define GX_FULLSCREEN 0x01 // for OpenDisplay() |
| #define GX_NORMALKEYS 0x02 |
| #define GX_LANDSCAPEKEYS 0x03 |
| |
| |
| /* GAPI video mode */ |
| typedef enum { |
| GAPI_NONE = 0, |
| GAPI_DIRECT_565, |
| GAPI_DIRECT_555, |
| GAPI_MONO, |
| GAPI_PALETTE |
| } GAPIVideoMode; |
| |
| typedef unsigned short PIXEL; |
| |
| /* Private display data |
| begin with DIB private structure to allow DIB events code sharing |
| */ |
| struct GapiInfo { |
| /* Rotation which has to be applied to the key (arrow keys) and mouse events measured in quarters of a circle |
| * counter clockwise */ |
| int coordinateTransform; |
| char hiresFix; /* using hires mode without defining hires resource */ |
| int invert; //TODO this is only written but never read, so it should be removed |
| |
| #define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ |
| int SDL_nummodes[NUM_MODELISTS]; |
| SDL_Rect **SDL_modelist[NUM_MODELISTS]; |
| |
| |
| // The orientation of the video mode user wants to get |
| // Probably restricted to UP and RIGHT |
| SDL_ScreenOrientation userOrientation; |
| SDL_ScreenOrientation systemOrientation; |
| // -------------- |
| int useGXOpenDisplay; /* use GXOpenDispplay */ |
| int alreadyGXOpened; |
| int w, h; |
| // The orientation of GAPI framebuffer. |
| // Never changes on the same device. |
| SDL_ScreenOrientation gapiOrientation; |
| |
| void *buffer; // may be 8, 16, 24, 32 bpp |
| PIXEL *videoMem; |
| BOOL needUpdate; |
| struct GXKeyList keyList; |
| struct GapiFunc gxFunc; |
| struct GXDisplayProperties gxProperties; |
| GAPIVideoMode videoMode; |
| int colorscale; |
| int dstLineStep; // in bytes |
| int dstPixelStep; // in bytes |
| int startOffset; // in bytes |
| int useVga; |
| int suspended; // do not pu anything into video memory |
| }; |
| |
| |
| |
| #endif /* _SDL_gapivideo_h */ |