src/video/SDL_sysvideo.h
author Captain Lex <kimonline@126.com>
Sun, 17 Mar 2013 20:07:02 +0800
changeset 7009 161b7b6a5303
parent 6885 700f1b25f77f
child 7011 82bbfbbc720e
permissions -rw-r--r--
Add PSP support
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
     4 
     5   This software is provided 'as-is', without any express or implied
     6   warranty.  In no event will the authors be held liable for any damages
     7   arising from the use of this software.
     8 
     9   Permission is granted to anyone to use this software for any purpose,
    10   including commercial applications, and to alter it and redistribute it
    11   freely, subject to the following restrictions:
    12 
    13   1. The origin of this software must not be misrepresented; you must not
    14      claim that you wrote the original software. If you use this software
    15      in a product, an acknowledgment in the product documentation would be
    16      appreciated but is not required.
    17   2. Altered source versions must be plainly marked as such, and must not be
    18      misrepresented as being the original software.
    19   3. This notice may not be removed or altered from any source distribution.
    20 */
    21 #include "SDL_config.h"
    22 
    23 #ifndef _SDL_sysvideo_h
    24 #define _SDL_sysvideo_h
    25 
    26 #include "SDL_messagebox.h"
    27 #include "SDL_shape.h"
    28 
    29 /* The SDL video driver */
    30 
    31 typedef struct SDL_WindowShaper SDL_WindowShaper;
    32 typedef struct SDL_ShapeDriver SDL_ShapeDriver;
    33 typedef struct SDL_VideoDisplay SDL_VideoDisplay;
    34 typedef struct SDL_VideoDevice SDL_VideoDevice;
    35 
    36 /* Define the SDL window-shaper structure */
    37 struct SDL_WindowShaper
    38 {   
    39     /* The window associated with the shaper */
    40     SDL_Window *window;
    41     
    42     /* The user's specified coordinates for the window, for once we give it a shape. */
    43     Uint32 userx,usery;
    44     
    45     /* The parameters for shape calculation. */
    46     SDL_WindowShapeMode mode;
    47     
    48     /* Has this window been assigned a shape? */
    49     SDL_bool hasshape;
    50     
    51     void *driverdata;
    52 };
    53 
    54 /* Define the SDL shape driver structure */
    55 struct SDL_ShapeDriver
    56 {
    57     SDL_WindowShaper *(*CreateShaper)(SDL_Window * window);
    58     int (*SetWindowShape)(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode);
    59     int (*ResizeWindowShape)(SDL_Window *window);
    60 };
    61 
    62 typedef struct SDL_WindowUserData
    63 {
    64     char *name;
    65     void *data;
    66     struct SDL_WindowUserData *next;
    67 } SDL_WindowUserData;
    68 
    69 /* Define the SDL window structure, corresponding to toplevel windows */
    70 struct SDL_Window
    71 {
    72     const void *magic;
    73     Uint32 id;
    74     char *title;
    75     int x, y;
    76     int w, h;
    77     int min_w, min_h;
    78     int max_w, max_h;
    79     Uint32 flags;
    80 
    81     /* Stored position and size for windowed mode */
    82     SDL_Rect windowed;
    83 
    84     SDL_DisplayMode fullscreen_mode;
    85     
    86     float brightness;
    87     Uint16 *gamma;
    88     Uint16 *saved_gamma;        /* (just offset into gamma) */
    89 
    90     SDL_Surface *surface;
    91     SDL_bool surface_valid;
    92 
    93     SDL_WindowShaper *shaper;
    94 
    95     SDL_WindowUserData *data;
    96 
    97     void *driverdata;
    98 
    99     SDL_Window *prev;
   100     SDL_Window *next;
   101 };
   102 #define FULLSCREEN_VISIBLE(W) \
   103     (((W)->flags & SDL_WINDOW_FULLSCREEN) && \
   104      ((W)->flags & SDL_WINDOW_SHOWN) && \
   105      !((W)->flags & SDL_WINDOW_MINIMIZED))
   106 
   107 /*
   108  * Define the SDL display structure This corresponds to physical monitors
   109  * attached to the system.
   110  */
   111 struct SDL_VideoDisplay
   112 {
   113     char *name;
   114     int max_display_modes;
   115     int num_display_modes;
   116     SDL_DisplayMode *display_modes;
   117     SDL_DisplayMode desktop_mode;
   118     SDL_DisplayMode current_mode;
   119 
   120     SDL_Window *fullscreen_window;
   121 
   122     SDL_VideoDevice *device;
   123 
   124     void *driverdata;
   125 };
   126 
   127 /* Forward declaration */
   128 struct SDL_SysWMinfo;
   129 
   130 /* Define the SDL video driver structure */
   131 #define _THIS	SDL_VideoDevice *_this
   132 
   133 struct SDL_VideoDevice
   134 {
   135     /* * * */
   136     /* The name of this video driver */
   137     const char *name;
   138 
   139     /* * * */
   140     /* Initialization/Query functions */
   141 
   142     /*
   143      * Initialize the native video subsystem, filling in the list of
   144      * displays for this driver, returning 0 or -1 if there's an error.
   145      */
   146     int (*VideoInit) (_THIS);
   147 
   148     /*
   149      * Reverse the effects VideoInit() -- called if VideoInit() fails or
   150      * if the application is shutting down the video subsystem.
   151      */
   152     void (*VideoQuit) (_THIS);
   153 
   154     /* * * */
   155     /*
   156      * Display functions
   157      */
   158 
   159     /*
   160      * Get the bounds of a display
   161      */
   162     int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
   163 
   164     /*
   165      * Get a list of the available display modes for a display.
   166      */
   167     void (*GetDisplayModes) (_THIS, SDL_VideoDisplay * display);
   168 
   169     /*
   170      * Setting the display mode is independent of creating windows, so
   171      * when the display mode is changed, all existing windows should have
   172      * their data updated accordingly, including the display surfaces
   173      * associated with them.
   174      */
   175     int (*SetDisplayMode) (_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
   176 
   177     /* * * */
   178     /*
   179      * Window functions
   180      */
   181     int (*CreateWindow) (_THIS, SDL_Window * window);
   182     int (*CreateWindowFrom) (_THIS, SDL_Window * window, const void *data);
   183     void (*SetWindowTitle) (_THIS, SDL_Window * window);
   184     void (*SetWindowIcon) (_THIS, SDL_Window * window, SDL_Surface * icon);
   185     void (*SetWindowPosition) (_THIS, SDL_Window * window);
   186     void (*SetWindowSize) (_THIS, SDL_Window * window);
   187     void (*SetWindowMinimumSize) (_THIS, SDL_Window * window);
   188     void (*SetWindowMaximumSize) (_THIS, SDL_Window * window);
   189     void (*ShowWindow) (_THIS, SDL_Window * window);
   190     void (*HideWindow) (_THIS, SDL_Window * window);
   191     void (*RaiseWindow) (_THIS, SDL_Window * window);
   192     void (*MaximizeWindow) (_THIS, SDL_Window * window);
   193     void (*MinimizeWindow) (_THIS, SDL_Window * window);
   194     void (*RestoreWindow) (_THIS, SDL_Window * window);
   195     void (*SetWindowBordered) (_THIS, SDL_Window * window, SDL_bool bordered);
   196     void (*SetWindowFullscreen) (_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen);
   197     int (*SetWindowGammaRamp) (_THIS, SDL_Window * window, const Uint16 * ramp);
   198     int (*GetWindowGammaRamp) (_THIS, SDL_Window * window, Uint16 * ramp);
   199     void (*SetWindowGrab) (_THIS, SDL_Window * window, SDL_bool grabbed);
   200     void (*DestroyWindow) (_THIS, SDL_Window * window);
   201     int (*CreateWindowFramebuffer) (_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
   202     int (*UpdateWindowFramebuffer) (_THIS, SDL_Window * window, SDL_Rect * rects, int numrects);
   203     void (*DestroyWindowFramebuffer) (_THIS, SDL_Window * window);
   204 
   205     /* * * */
   206     /*
   207      * Shaped-window functions
   208      */
   209     SDL_ShapeDriver shape_driver;
   210 
   211     /* Get some platform dependent window information */
   212       SDL_bool(*GetWindowWMInfo) (_THIS, SDL_Window * window,
   213                                   struct SDL_SysWMinfo * info);
   214 
   215     /* * * */
   216     /*
   217      * OpenGL support
   218      */
   219     int (*GL_LoadLibrary) (_THIS, const char *path);
   220     void *(*GL_GetProcAddress) (_THIS, const char *proc);
   221     void (*GL_UnloadLibrary) (_THIS);
   222       SDL_GLContext(*GL_CreateContext) (_THIS, SDL_Window * window);
   223     int (*GL_MakeCurrent) (_THIS, SDL_Window * window, SDL_GLContext context);
   224     int (*GL_SetSwapInterval) (_THIS, int interval);
   225     int (*GL_GetSwapInterval) (_THIS);
   226     void (*GL_SwapWindow) (_THIS, SDL_Window * window);
   227     void (*GL_DeleteContext) (_THIS, SDL_GLContext context);
   228 
   229     /* * * */
   230     /*
   231      * Event manager functions
   232      */
   233     void (*PumpEvents) (_THIS);
   234 
   235     /* Suspend the screensaver */
   236     void (*SuspendScreenSaver) (_THIS);
   237 
   238     /* Text input */
   239     void (*StartTextInput) (_THIS);
   240     void (*StopTextInput) (_THIS);
   241     void (*SetTextInputRect) (_THIS, SDL_Rect *rect);
   242 
   243     /* Screen keyboard */
   244     SDL_bool (*SDL_HasScreenKeyboardSupport) (_THIS);
   245     void (*SDL_ShowScreenKeyboard) (_THIS, SDL_Window *window);
   246     void (*SDL_HideScreenKeyboard) (_THIS, SDL_Window *window);
   247     SDL_bool (*SDL_IsScreenKeyboardShown) (_THIS, SDL_Window *window);
   248 
   249     /* Clipboard */
   250     int (*SetClipboardText) (_THIS, const char *text);
   251     char * (*GetClipboardText) (_THIS);
   252     SDL_bool (*HasClipboardText) (_THIS);
   253 
   254     /* MessageBox */
   255     int (*ShowMessageBox) (_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid);
   256 
   257     /* * * */
   258     /* Data common to all drivers */
   259     SDL_bool suspend_screensaver;
   260     int num_displays;
   261     SDL_VideoDisplay *displays;
   262     SDL_Window *windows;
   263     Uint8 window_magic;
   264     Uint32 next_object_id;
   265     char * clipboard_text;
   266 
   267     /* * * */
   268     /* Data used by the GL drivers */
   269     struct
   270     {
   271         int red_size;
   272         int green_size;
   273         int blue_size;
   274         int alpha_size;
   275         int depth_size;
   276         int buffer_size;
   277         int stencil_size;
   278         int double_buffer;
   279         int accum_red_size;
   280         int accum_green_size;
   281         int accum_blue_size;
   282         int accum_alpha_size;
   283         int stereo;
   284         int multisamplebuffers;
   285         int multisamplesamples;
   286         int accelerated;
   287         int major_version;
   288         int minor_version;
   289         int flags;
   290         int profile_mask;
   291         int use_egl;
   292         int share_with_current_context;
   293         int retained_backing;
   294         int driver_loaded;
   295         char driver_path[256];
   296         void *dll_handle;
   297     } gl_config;
   298 
   299     /* * * */
   300     /* Cache current GL context; don't call the OS when it hasn't changed. */
   301     SDL_Window *current_glwin;
   302     SDL_GLContext current_glctx;
   303 
   304     /* * * */
   305     /* Data private to this driver */
   306     void *driverdata;
   307     struct SDL_GLDriverData *gl_data;
   308 
   309 #if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
   310     struct SDL_PrivateGLESData *gles_data;
   311 #endif
   312 
   313     /* * * */
   314     /* The function used to dispose of this structure */
   315     void (*free) (_THIS);
   316 };
   317 
   318 typedef struct VideoBootStrap
   319 {
   320     const char *name;
   321     const char *desc;
   322     int (*available) (void);
   323     SDL_VideoDevice *(*create) (int devindex);
   324 } VideoBootStrap;
   325 
   326 #if SDL_VIDEO_DRIVER_COCOA
   327 extern VideoBootStrap COCOA_bootstrap;
   328 #endif
   329 #if SDL_VIDEO_DRIVER_X11
   330 extern VideoBootStrap X11_bootstrap;
   331 #endif
   332 #if SDL_VIDEO_DRIVER_DIRECTFB
   333 extern VideoBootStrap DirectFB_bootstrap;
   334 #endif
   335 #if SDL_VIDEO_DRIVER_WINDOWS
   336 extern VideoBootStrap WINDOWS_bootstrap;
   337 #endif
   338 #if SDL_VIDEO_DRIVER_BWINDOW
   339 extern VideoBootStrap BWINDOW_bootstrap;
   340 #endif
   341 #if SDL_VIDEO_DRIVER_PANDORA
   342 extern VideoBootStrap PND_bootstrap;
   343 #endif
   344 #if SDL_VIDEO_DRIVER_NDS
   345 extern VideoBootStrap NDS_bootstrap;
   346 #endif
   347 #if SDL_VIDEO_DRIVER_UIKIT
   348 extern VideoBootStrap UIKIT_bootstrap;
   349 #endif
   350 #if SDL_VIDEO_DRIVER_ANDROID
   351 extern VideoBootStrap Android_bootstrap;
   352 #endif
   353 #if SDL_VIDEO_DRIVER_PSP
   354 extern VideoBootStrap PSP_bootstrap;
   355 #endif
   356 #if SDL_VIDEO_DRIVER_DUMMY
   357 extern VideoBootStrap DUMMY_bootstrap;
   358 #endif
   359 
   360 extern SDL_VideoDevice *SDL_GetVideoDevice(void);
   361 extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
   362 extern int SDL_AddVideoDisplay(const SDL_VideoDisplay * display);
   363 extern SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode * mode);
   364 extern SDL_VideoDisplay *SDL_GetDisplayForWindow(SDL_Window *window);
   365 
   366 extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags);
   367 
   368 extern void SDL_OnWindowShown(SDL_Window * window);
   369 extern void SDL_OnWindowHidden(SDL_Window * window);
   370 extern void SDL_OnWindowResized(SDL_Window * window);
   371 extern void SDL_OnWindowMinimized(SDL_Window * window);
   372 extern void SDL_OnWindowRestored(SDL_Window * window);
   373 extern void SDL_OnWindowFocusGained(SDL_Window * window);
   374 extern void SDL_OnWindowFocusLost(SDL_Window * window);
   375 extern void SDL_UpdateWindowGrab(SDL_Window * window);
   376 extern SDL_Window * SDL_GetFocusWindow(void);
   377 
   378 extern SDL_bool SDL_ShouldAllowTopmost();
   379 
   380 #endif /* _SDL_sysvideo_h */
   381 
   382 /* vi: set ts=4 sw=4 expandtab: */