src/video/SDL_sysvideo.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 31 Dec 2012 11:07:46 -0800
changeset 6787 95a4c5a5464c
parent 6784 8fd20f04d5d9
child 6788 036f53f2f5aa
permissions -rw-r--r--
Added SDL_GetDisplayName(), with implementation for Mac OS X
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2012 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     Uint32 flags;
    79 
    80     /* Stored position and size for windowed mode */
    81     SDL_Rect windowed;
    82 
    83     SDL_DisplayMode fullscreen_mode;
    84     
    85     float brightness;
    86     Uint16 *gamma;
    87     Uint16 *saved_gamma;        /* (just offset into gamma) */
    88 
    89     SDL_Surface *surface;
    90     SDL_bool surface_valid;
    91 
    92     SDL_WindowShaper *shaper;
    93 
    94     SDL_WindowUserData *data;
    95 
    96     void *driverdata;
    97 
    98     SDL_Window *prev;
    99     SDL_Window *next;
   100 };
   101 #define FULLSCREEN_VISIBLE(W) \
   102     (((W)->flags & SDL_WINDOW_FULLSCREEN) && \
   103      ((W)->flags & SDL_WINDOW_SHOWN) && \
   104      !((W)->flags & SDL_WINDOW_MINIMIZED))
   105 
   106 /*
   107  * Define the SDL display structure This corresponds to physical monitors
   108  * attached to the system.
   109  */
   110 struct SDL_VideoDisplay
   111 {
   112     char *name;
   113     int max_display_modes;
   114     int num_display_modes;
   115     SDL_DisplayMode *display_modes;
   116     SDL_DisplayMode desktop_mode;
   117     SDL_DisplayMode current_mode;
   118 
   119     SDL_Window *fullscreen_window;
   120 
   121     SDL_VideoDevice *device;
   122 
   123     void *driverdata;
   124 };
   125 
   126 /* Forward declaration */
   127 struct SDL_SysWMinfo;
   128 
   129 /* Define the SDL video driver structure */
   130 #define _THIS	SDL_VideoDevice *_this
   131 
   132 struct SDL_VideoDevice
   133 {
   134     /* * * */
   135     /* The name of this video driver */
   136     const char *name;
   137 
   138     /* * * */
   139     /* Initialization/Query functions */
   140 
   141     /*
   142      * Initialize the native video subsystem, filling in the list of
   143      * displays for this driver, returning 0 or -1 if there's an error.
   144      */
   145     int (*VideoInit) (_THIS);
   146 
   147     /*
   148      * Reverse the effects VideoInit() -- called if VideoInit() fails or
   149      * if the application is shutting down the video subsystem.
   150      */
   151     void (*VideoQuit) (_THIS);
   152 
   153     /* * * */
   154     /*
   155      * Display functions
   156      */
   157 
   158     /*
   159      * Get the bounds of a display
   160      */
   161     int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
   162 
   163     /*
   164      * Get a list of the available display modes for a display.
   165      */
   166     void (*GetDisplayModes) (_THIS, SDL_VideoDisplay * display);
   167 
   168     /*
   169      * Setting the display mode is independent of creating windows, so
   170      * when the display mode is changed, all existing windows should have
   171      * their data updated accordingly, including the display surfaces
   172      * associated with them.
   173      */
   174     int (*SetDisplayMode) (_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
   175 
   176     /* * * */
   177     /*
   178      * Window functions
   179      */
   180     int (*CreateWindow) (_THIS, SDL_Window * window);
   181     int (*CreateWindowFrom) (_THIS, SDL_Window * window, const void *data);
   182     void (*SetWindowTitle) (_THIS, SDL_Window * window);
   183     void (*SetWindowIcon) (_THIS, SDL_Window * window, SDL_Surface * icon);
   184     void (*SetWindowPosition) (_THIS, SDL_Window * window);
   185     void (*SetWindowSize) (_THIS, SDL_Window * window);
   186     void (*SetWindowMinimumSize) (_THIS, SDL_Window * window);
   187     void (*ShowWindow) (_THIS, SDL_Window * window);
   188     void (*HideWindow) (_THIS, SDL_Window * window);
   189     void (*RaiseWindow) (_THIS, SDL_Window * window);
   190     void (*MaximizeWindow) (_THIS, SDL_Window * window);
   191     void (*MinimizeWindow) (_THIS, SDL_Window * window);
   192     void (*RestoreWindow) (_THIS, SDL_Window * window);
   193     void (*SetWindowBordered) (_THIS, SDL_Window * window, SDL_bool bordered);
   194     void (*SetWindowFullscreen) (_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen);
   195     int (*SetWindowGammaRamp) (_THIS, SDL_Window * window, const Uint16 * ramp);
   196     int (*GetWindowGammaRamp) (_THIS, SDL_Window * window, Uint16 * ramp);
   197     void (*SetWindowGrab) (_THIS, SDL_Window * window, SDL_bool grabbed);
   198     void (*DestroyWindow) (_THIS, SDL_Window * window);
   199     int (*CreateWindowFramebuffer) (_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
   200     int (*UpdateWindowFramebuffer) (_THIS, SDL_Window * window, SDL_Rect * rects, int numrects);
   201     void (*DestroyWindowFramebuffer) (_THIS, SDL_Window * window);
   202 
   203     /* * * */
   204     /*
   205      * Shaped-window functions
   206      */
   207     SDL_ShapeDriver shape_driver;
   208 
   209     /* Get some platform dependent window information */
   210       SDL_bool(*GetWindowWMInfo) (_THIS, SDL_Window * window,
   211                                   struct SDL_SysWMinfo * info);
   212 
   213     /* * * */
   214     /*
   215      * OpenGL support
   216      */
   217     int (*GL_LoadLibrary) (_THIS, const char *path);
   218     void *(*GL_GetProcAddress) (_THIS, const char *proc);
   219     void (*GL_UnloadLibrary) (_THIS);
   220       SDL_GLContext(*GL_CreateContext) (_THIS, SDL_Window * window);
   221     int (*GL_MakeCurrent) (_THIS, SDL_Window * window, SDL_GLContext context);
   222     int (*GL_SetSwapInterval) (_THIS, int interval);
   223     int (*GL_GetSwapInterval) (_THIS);
   224     void (*GL_SwapWindow) (_THIS, SDL_Window * window);
   225     void (*GL_DeleteContext) (_THIS, SDL_GLContext context);
   226 
   227     /* * * */
   228     /*
   229      * Event manager functions
   230      */
   231     void (*PumpEvents) (_THIS);
   232 
   233     /* Suspend the screensaver */
   234     void (*SuspendScreenSaver) (_THIS);
   235 
   236     /* Text input */
   237     void (*StartTextInput) (_THIS);
   238     void (*StopTextInput) (_THIS);
   239     void (*SetTextInputRect) (_THIS, SDL_Rect *rect);
   240 
   241     /* Screen keyboard */
   242     SDL_bool (*SDL_HasScreenKeyboardSupport) (_THIS);
   243     void (*SDL_ShowScreenKeyboard) (_THIS, SDL_Window *window);
   244     void (*SDL_HideScreenKeyboard) (_THIS, SDL_Window *window);
   245     SDL_bool (*SDL_IsScreenKeyboardShown) (_THIS, SDL_Window *window);
   246 
   247     /* Clipboard */
   248     int (*SetClipboardText) (_THIS, const char *text);
   249     char * (*GetClipboardText) (_THIS);
   250     SDL_bool (*HasClipboardText) (_THIS);
   251 
   252     /* MessageBox */
   253     int (*ShowMessageBox) (_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid);
   254 
   255     /* * * */
   256     /* Data common to all drivers */
   257     SDL_bool suspend_screensaver;
   258     int num_displays;
   259     SDL_VideoDisplay *displays;
   260     SDL_Window *windows;
   261     Uint8 window_magic;
   262     Uint32 next_object_id;
   263     char * clipboard_text;
   264 
   265     /* * * */
   266     /* Data used by the GL drivers */
   267     struct
   268     {
   269         int red_size;
   270         int green_size;
   271         int blue_size;
   272         int alpha_size;
   273         int depth_size;
   274         int buffer_size;
   275         int stencil_size;
   276         int double_buffer;
   277         int accum_red_size;
   278         int accum_green_size;
   279         int accum_blue_size;
   280         int accum_alpha_size;
   281         int stereo;
   282         int multisamplebuffers;
   283         int multisamplesamples;
   284         int accelerated;
   285         int major_version;
   286         int minor_version;
   287         int flags;
   288         int profile_mask;
   289         int use_egl;
   290         int share_with_current_context;
   291         int retained_backing;
   292         int driver_loaded;
   293         char driver_path[256];
   294         void *dll_handle;
   295     } gl_config;
   296 
   297     /* * * */
   298     /* Cache current GL context; don't call the OS when it hasn't changed. */
   299     SDL_Window *current_glwin;
   300     SDL_GLContext current_glctx;
   301 
   302     /* * * */
   303     /* Data private to this driver */
   304     void *driverdata;
   305     struct SDL_GLDriverData *gl_data;
   306 
   307 #if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
   308     struct SDL_PrivateGLESData *gles_data;
   309 #endif
   310 
   311     /* * * */
   312     /* The function used to dispose of this structure */
   313     void (*free) (_THIS);
   314 };
   315 
   316 typedef struct VideoBootStrap
   317 {
   318     const char *name;
   319     const char *desc;
   320     int (*available) (void);
   321     SDL_VideoDevice *(*create) (int devindex);
   322 } VideoBootStrap;
   323 
   324 #if SDL_VIDEO_DRIVER_COCOA
   325 extern VideoBootStrap COCOA_bootstrap;
   326 #endif
   327 #if SDL_VIDEO_DRIVER_X11
   328 extern VideoBootStrap X11_bootstrap;
   329 #endif
   330 #if SDL_VIDEO_DRIVER_DIRECTFB
   331 extern VideoBootStrap DirectFB_bootstrap;
   332 #endif
   333 #if SDL_VIDEO_DRIVER_WINDOWS
   334 extern VideoBootStrap WINDOWS_bootstrap;
   335 #endif
   336 #if SDL_VIDEO_DRIVER_BWINDOW
   337 extern VideoBootStrap BWINDOW_bootstrap;
   338 #endif
   339 #if SDL_VIDEO_DRIVER_PANDORA
   340 extern VideoBootStrap PND_bootstrap;
   341 #endif
   342 #if SDL_VIDEO_DRIVER_NDS
   343 extern VideoBootStrap NDS_bootstrap;
   344 #endif
   345 #if SDL_VIDEO_DRIVER_UIKIT
   346 extern VideoBootStrap UIKIT_bootstrap;
   347 #endif
   348 #if SDL_VIDEO_DRIVER_ANDROID
   349 extern VideoBootStrap Android_bootstrap;
   350 #endif
   351 #if SDL_VIDEO_DRIVER_DUMMY
   352 extern VideoBootStrap DUMMY_bootstrap;
   353 #endif
   354 
   355 extern SDL_VideoDevice *SDL_GetVideoDevice(void);
   356 extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
   357 extern int SDL_AddVideoDisplay(const SDL_VideoDisplay * display);
   358 extern SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode * mode);
   359 extern SDL_VideoDisplay *SDL_GetDisplayForWindow(SDL_Window *window);
   360 
   361 extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags);
   362 
   363 extern void SDL_OnWindowShown(SDL_Window * window);
   364 extern void SDL_OnWindowHidden(SDL_Window * window);
   365 extern void SDL_OnWindowResized(SDL_Window * window);
   366 extern void SDL_OnWindowMinimized(SDL_Window * window);
   367 extern void SDL_OnWindowRestored(SDL_Window * window);
   368 extern void SDL_OnWindowFocusGained(SDL_Window * window);
   369 extern void SDL_OnWindowFocusLost(SDL_Window * window);
   370 extern void SDL_UpdateWindowGrab(SDL_Window * window);
   371 extern SDL_Window * SDL_GetFocusWindow(void);
   372 
   373 extern SDL_bool SDL_ShouldAllowTopmost();
   374 
   375 #endif /* _SDL_sysvideo_h */
   376 
   377 /* vi: set ts=4 sw=4 expandtab: */