src/video/SDL_sysvideo.h
author Sam Lantinga <slouken@libsdl.org>
Fri, 11 Feb 2011 00:25:44 -0800
changeset 5249 7a963be087ef
parent 5246 58265e606e4e
child 5261 595814f561f7
permissions -rw-r--r--
Mostly fixed fullscreen mode on Mac OS X, and you can toggle it on and off.

There are still some problems with the ConvertNSRect() calculations when switching video modes, which causes wierd window positioning issues, and the fullscreen window is still minimized on exit.
slouken@0
     1
/*
slouken@0
     2
    SDL - Simple DirectMedia Layer
slouken@3697
     3
    Copyright (C) 1997-2010 Sam Lantinga
slouken@0
     4
slouken@0
     5
    This library is free software; you can redistribute it and/or
slouken@1312
     6
    modify it under the terms of the GNU Lesser General Public
slouken@0
     7
    License as published by the Free Software Foundation; either
slouken@1312
     8
    version 2.1 of the License, or (at your option) any later version.
slouken@0
     9
slouken@0
    10
    This library is distributed in the hope that it will be useful,
slouken@0
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
slouken@0
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
slouken@1312
    13
    Lesser General Public License for more details.
slouken@0
    14
slouken@1312
    15
    You should have received a copy of the GNU Lesser General Public
slouken@1312
    16
    License along with this library; if not, write to the Free Software
slouken@1312
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
slouken@0
    18
slouken@0
    19
    Sam Lantinga
slouken@252
    20
    slouken@libsdl.org
slouken@0
    21
*/
slouken@1402
    22
#include "SDL_config.h"
slouken@0
    23
slouken@0
    24
#ifndef _SDL_sysvideo_h
slouken@0
    25
#define _SDL_sysvideo_h
slouken@0
    26
eligottlieb@4782
    27
#include "SDL_shape.h"
slouken@0
    28
slouken@0
    29
/* The SDL video driver */
slouken@1895
    30
eligottlieb@4782
    31
typedef struct SDL_WindowShaper SDL_WindowShaper;
eligottlieb@4782
    32
typedef struct SDL_ShapeDriver SDL_ShapeDriver;
slouken@1895
    33
typedef struct SDL_VideoDisplay SDL_VideoDisplay;
slouken@0
    34
typedef struct SDL_VideoDevice SDL_VideoDevice;
slouken@0
    35
eligottlieb@4782
    36
/* Define the SDL window-shaper structure */
eligottlieb@4782
    37
struct SDL_WindowShaper
eligottlieb@4782
    38
{   
eligottlieb@4782
    39
    /* The window associated with the shaper */
eligottlieb@4782
    40
    SDL_Window *window;
eligottlieb@4782
    41
    
eligottlieb@4851
    42
    /* The user's specified coordinates for the window, for once we give it a shape. */
eligottlieb@4851
    43
    Uint32 userx,usery;
eligottlieb@4782
    44
    
eligottlieb@4807
    45
    /* The parameters for shape calculation. */
eligottlieb@4807
    46
    SDL_WindowShapeMode mode;
eligottlieb@4782
    47
    
eligottlieb@4782
    48
    /* Has this window been assigned a shape? */
eligottlieb@4782
    49
    SDL_bool hasshape;
eligottlieb@4782
    50
    
eligottlieb@4782
    51
    void *driverdata;
eligottlieb@4782
    52
};
eligottlieb@4782
    53
eligottlieb@4782
    54
/* Define the SDL shape driver structure */
eligottlieb@4782
    55
struct SDL_ShapeDriver
eligottlieb@4782
    56
{
eligottlieb@4782
    57
    SDL_WindowShaper *(*CreateShaper)(SDL_Window * window);
egottlieb@4849
    58
    int (*SetWindowShape)(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode);
eligottlieb@4782
    59
    int (*ResizeWindowShape)(SDL_Window *window);
eligottlieb@4782
    60
};
eligottlieb@4782
    61
slouken@5165
    62
typedef struct SDL_WindowUserData
slouken@5165
    63
{
slouken@5165
    64
    char *name;
slouken@5165
    65
    void *data;
slouken@5165
    66
    struct SDL_WindowUserData *next;
slouken@5165
    67
} SDL_WindowUserData;
slouken@5165
    68
slouken@1895
    69
/* Define the SDL window structure, corresponding to toplevel windows */
slouken@2753
    70
struct SDL_Window
slouken@2753
    71
{
slouken@3695
    72
    const void *magic;
slouken@2753
    73
    Uint32 id;
slouken@2753
    74
    char *title;
slouken@5249
    75
slouken@5249
    76
    /* The fullscreen values */
slouken@5249
    77
    struct {
slouken@5249
    78
        int x, y;
slouken@5249
    79
        int w, h;
slouken@5249
    80
    } fullscreen;
slouken@5249
    81
slouken@5249
    82
    /* The windowed values */
slouken@5249
    83
    struct {
slouken@5249
    84
        int x, y;
slouken@5249
    85
        int w, h;
slouken@5249
    86
    } windowed;
slouken@5249
    87
slouken@5249
    88
    /* The public values */
slouken@2753
    89
    int x, y;
slouken@2753
    90
    int w, h;
slouken@2753
    91
    Uint32 flags;
slouken@1895
    92
slouken@3500
    93
    SDL_DisplayMode fullscreen_mode;
eligottlieb@4782
    94
    
slouken@5166
    95
    SDL_Surface *surface;
slouken@5174
    96
    SDL_bool surface_valid;
slouken@5166
    97
eligottlieb@4782
    98
    SDL_WindowShaper *shaper;
slouken@3500
    99
slouken@5165
   100
    SDL_WindowUserData *data;
slouken@5165
   101
slouken@2753
   102
    void *driverdata;
slouken@3685
   103
slouken@3685
   104
    SDL_Window *prev;
slouken@3685
   105
    SDL_Window *next;
slouken@1895
   106
};
slouken@1895
   107
#define FULLSCREEN_VISIBLE(W) \
slouken@1895
   108
    (((W)->flags & SDL_WINDOW_FULLSCREEN) && \
slouken@1895
   109
     ((W)->flags & SDL_WINDOW_SHOWN) && \
slouken@1895
   110
     !((W)->flags & SDL_WINDOW_MINIMIZED))
slouken@1895
   111
hfutrell@2742
   112
/*
hfutrell@2742
   113
 * Define the SDL display structure This corresponds to physical monitors
hfutrell@2742
   114
 * attached to the system.
slouken@1895
   115
 */
slouken@2753
   116
struct SDL_VideoDisplay
slouken@2753
   117
{
slouken@2753
   118
    int max_display_modes;
slouken@2753
   119
    int num_display_modes;
slouken@2753
   120
    SDL_DisplayMode *display_modes;
slouken@2753
   121
    SDL_DisplayMode desktop_mode;
slouken@2753
   122
    SDL_DisplayMode current_mode;
slouken@1895
   123
slouken@3517
   124
    SDL_Window *fullscreen_window;
slouken@1895
   125
slouken@2753
   126
    SDL_VideoDevice *device;
slouken@1895
   127
slouken@2753
   128
    void *driverdata;
slouken@1895
   129
};
slouken@1895
   130
slouken@0
   131
/* Define the SDL video driver structure */
slouken@0
   132
#define _THIS	SDL_VideoDevice *_this
slouken@0
   133
slouken@2753
   134
struct SDL_VideoDevice
slouken@2753
   135
{
slouken@2753
   136
    /* * * */
slouken@2753
   137
    /* The name of this video driver */
slouken@2753
   138
    const char *name;
slouken@0
   139
slouken@2753
   140
    /* * * */
slouken@2753
   141
    /* Initialization/Query functions */
slouken@0
   142
slouken@2753
   143
    /*
slouken@2753
   144
     * Initialize the native video subsystem, filling in the list of
slouken@2753
   145
     * displays for this driver, returning 0 or -1 if there's an error.
slouken@2753
   146
     */
slouken@2753
   147
    int (*VideoInit) (_THIS);
slouken@0
   148
slouken@2753
   149
    /*
slouken@2753
   150
     * Reverse the effects VideoInit() -- called if VideoInit() fails or
slouken@2753
   151
     * if the application is shutting down the video subsystem.
slouken@2753
   152
     */
slouken@2753
   153
    void (*VideoQuit) (_THIS);
slouken@1913
   154
slouken@2753
   155
    /* * * */
slouken@2753
   156
    /*
slouken@2753
   157
     * Display functions
slouken@2753
   158
     */
slouken@0
   159
slouken@2753
   160
    /*
slouken@3528
   161
     * Get the bounds of a display
slouken@3528
   162
     */
slouken@3528
   163
    int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
slouken@3528
   164
slouken@3528
   165
    /*
slouken@5246
   166
     * Get a list of the available display modes for a display.
slouken@2753
   167
     */
slouken@3500
   168
    void (*GetDisplayModes) (_THIS, SDL_VideoDisplay * display);
slouken@0
   169
slouken@2753
   170
    /*
slouken@2753
   171
     * Setting the display mode is independent of creating windows, so
slouken@2753
   172
     * when the display mode is changed, all existing windows should have
slouken@2753
   173
     * their data updated accordingly, including the display surfaces
slouken@2753
   174
     * associated with them.
slouken@2753
   175
     */
slouken@3500
   176
    int (*SetDisplayMode) (_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
slouken@0
   177
slouken@2753
   178
    /* * * */
slouken@2753
   179
    /*
slouken@2753
   180
     * Window functions
slouken@2753
   181
     */
slouken@2753
   182
    int (*CreateWindow) (_THIS, SDL_Window * window);
slouken@2753
   183
    int (*CreateWindowFrom) (_THIS, SDL_Window * window, const void *data);
slouken@2753
   184
    void (*SetWindowTitle) (_THIS, SDL_Window * window);
slouken@2967
   185
    void (*SetWindowIcon) (_THIS, SDL_Window * window, SDL_Surface * icon);
slouken@2753
   186
    void (*SetWindowPosition) (_THIS, SDL_Window * window);
slouken@2753
   187
    void (*SetWindowSize) (_THIS, SDL_Window * window);
slouken@2753
   188
    void (*ShowWindow) (_THIS, SDL_Window * window);
slouken@2753
   189
    void (*HideWindow) (_THIS, SDL_Window * window);
slouken@2753
   190
    void (*RaiseWindow) (_THIS, SDL_Window * window);
slouken@2753
   191
    void (*MaximizeWindow) (_THIS, SDL_Window * window);
slouken@2753
   192
    void (*MinimizeWindow) (_THIS, SDL_Window * window);
slouken@2753
   193
    void (*RestoreWindow) (_THIS, SDL_Window * window);
slouken@5249
   194
    void (*PrepWindowFullscreen) (_THIS, SDL_Window * window);
slouken@5249
   195
    void (*SetWindowFullscreen) (_THIS, SDL_Window * window);
slouken@2753
   196
    void (*SetWindowGrab) (_THIS, SDL_Window * window);
slouken@2753
   197
    void (*DestroyWindow) (_THIS, SDL_Window * window);
slouken@5166
   198
    int (*CreateWindowFramebuffer) (_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
slouken@5166
   199
    int (*UpdateWindowFramebuffer) (_THIS, SDL_Window * window, int numrects, SDL_Rect * rects);
slouken@5166
   200
    void (*DestroyWindowFramebuffer) (_THIS, SDL_Window * window);
slouken@5166
   201
eligottlieb@4782
   202
    /* * * */
eligottlieb@4782
   203
    /*
eligottlieb@4782
   204
     * Shaped-window functions
eligottlieb@4782
   205
     */
eligottlieb@4782
   206
    SDL_ShapeDriver shape_driver;
slouken@0
   207
slouken@2753
   208
    /* Get some platform dependent window information */
slouken@2753
   209
      SDL_bool(*GetWindowWMInfo) (_THIS, SDL_Window * window,
slouken@2753
   210
                                  struct SDL_SysWMinfo * info);
slouken@0
   211
slouken@2753
   212
    /* * * */
slouken@2753
   213
    /*
slouken@2753
   214
     * OpenGL support
slouken@2753
   215
     */
slouken@2753
   216
    int (*GL_LoadLibrary) (_THIS, const char *path);
slouken@2753
   217
    void *(*GL_GetProcAddress) (_THIS, const char *proc);
slouken@3057
   218
    void (*GL_UnloadLibrary) (_THIS);
slouken@2753
   219
      SDL_GLContext(*GL_CreateContext) (_THIS, SDL_Window * window);
slouken@2753
   220
    int (*GL_MakeCurrent) (_THIS, SDL_Window * window, SDL_GLContext context);
slouken@2753
   221
    int (*GL_SetSwapInterval) (_THIS, int interval);
slouken@2753
   222
    int (*GL_GetSwapInterval) (_THIS);
slouken@2753
   223
    void (*GL_SwapWindow) (_THIS, SDL_Window * window);
slouken@2753
   224
    void (*GL_DeleteContext) (_THIS, SDL_GLContext context);
slouken@0
   225
slouken@2753
   226
    /* * * */
slouken@2753
   227
    /*
slouken@2753
   228
     * Event manager functions
slouken@2753
   229
     */
slouken@2753
   230
    void (*PumpEvents) (_THIS);
slouken@0
   231
slouken@3025
   232
    /* Suspend the screensaver */
slouken@3025
   233
    void (*SuspendScreenSaver) (_THIS);
slouken@3025
   234
slouken@3280
   235
    /* Text input */
slouken@3280
   236
    void (*StartTextInput) (_THIS);
slouken@3280
   237
    void (*StopTextInput) (_THIS);
slouken@3280
   238
    void (*SetTextInputRect) (_THIS, SDL_Rect *rect);
slouken@3280
   239
slouken@4495
   240
    /* Clipboard */
slouken@4495
   241
    int (*SetClipboardText) (_THIS, const char *text);
slouken@4495
   242
    char * (*GetClipboardText) (_THIS);
slouken@4495
   243
    SDL_bool (*HasClipboardText) (_THIS);
slouken@4495
   244
slouken@2753
   245
    /* * * */
slouken@2753
   246
    /* Data common to all drivers */
slouken@3025
   247
    SDL_bool suspend_screensaver;
slouken@2753
   248
    int num_displays;
slouken@2753
   249
    SDL_VideoDisplay *displays;
slouken@5246
   250
    SDL_Window *windows;
slouken@3695
   251
    Uint8 window_magic;
slouken@2753
   252
    Uint32 next_object_id;
slouken@4495
   253
    char * clipboard_text;
slouken@0
   254
slouken@2753
   255
    /* * * */
slouken@2753
   256
    /* Data used by the GL drivers */
slouken@2753
   257
    struct
slouken@2753
   258
    {
slouken@2753
   259
        int red_size;
slouken@2753
   260
        int green_size;
slouken@2753
   261
        int blue_size;
slouken@2753
   262
        int alpha_size;
slouken@2753
   263
        int depth_size;
slouken@2753
   264
        int buffer_size;
slouken@2753
   265
        int stencil_size;
slouken@2753
   266
        int double_buffer;
slouken@2753
   267
        int accum_red_size;
slouken@2753
   268
        int accum_green_size;
slouken@2753
   269
        int accum_blue_size;
slouken@2753
   270
        int accum_alpha_size;
slouken@2753
   271
        int stereo;
slouken@2753
   272
        int multisamplebuffers;
slouken@2753
   273
        int multisamplesamples;
slouken@2753
   274
        int accelerated;
slouken@3100
   275
        int major_version;
slouken@3100
   276
        int minor_version;
slouken@2753
   277
        int retained_backing;
slouken@2753
   278
        int driver_loaded;
slouken@2753
   279
        char driver_path[256];
slouken@2753
   280
        void *dll_handle;
slouken@2753
   281
    } gl_config;
slouken@0
   282
slouken@2753
   283
    /* * * */
slouken@2753
   284
    /* Data private to this driver */
slouken@2753
   285
    void *driverdata;
slouken@2753
   286
    struct SDL_GLDriverData *gl_data;
slouken@0
   287
slouken@3161
   288
#if SDL_VIDEO_DRIVER_PANDORA
slouken@3161
   289
    struct SDL_PrivateGLESData *gles_data;
slouken@3161
   290
#endif
slouken@3161
   291
slouken@2753
   292
    /* * * */
slouken@2753
   293
    /* The function used to dispose of this structure */
slouken@2753
   294
    void (*free) (_THIS);
slouken@1895
   295
};
slouken@0
   296
slouken@2753
   297
typedef struct VideoBootStrap
slouken@2753
   298
{
slouken@2753
   299
    const char *name;
slouken@2753
   300
    const char *desc;
slouken@2753
   301
    int (*available) (void);
slouken@2753
   302
    SDL_VideoDevice *(*create) (int devindex);
slouken@2753
   303
} VideoBootStrap;
slouken@0
   304
slouken@1931
   305
#if SDL_VIDEO_DRIVER_COCOA
slouken@1931
   306
extern VideoBootStrap COCOA_bootstrap;
slouken@1361
   307
#endif
slouken@1361
   308
#if SDL_VIDEO_DRIVER_X11
slouken@0
   309
extern VideoBootStrap X11_bootstrap;
slouken@0
   310
#endif
slouken@1361
   311
#if SDL_VIDEO_DRIVER_DIRECTFB
slouken@167
   312
extern VideoBootStrap DirectFB_bootstrap;
slouken@167
   313
#endif
slouken@5062
   314
#if SDL_VIDEO_DRIVER_WINDOWS
slouken@5062
   315
extern VideoBootStrap WINDOWS_bootstrap;
slouken@1361
   316
#endif
slouken@1361
   317
#if SDL_VIDEO_DRIVER_BWINDOW
slouken@1361
   318
extern VideoBootStrap BWINDOW_bootstrap;
slouken@1361
   319
#endif
slouken@5150
   320
#if SDL_VIDEO_DRIVER_PANDORA
slouken@5150
   321
extern VideoBootStrap PND_bootstrap;
slouken@3083
   322
#endif
slouken@5150
   323
#if SDL_VIDEO_DRIVER_NDS
slouken@5150
   324
extern VideoBootStrap NDS_bootstrap;
slouken@1361
   325
#endif
hfutrell@2742
   326
#if SDL_VIDEO_DRIVER_UIKIT
hfutrell@2742
   327
extern VideoBootStrap UIKIT_bootstrap;
hfutrell@2742
   328
#endif
slouken@5150
   329
#if SDL_VIDEO_DRIVER_ANDROID
slouken@5150
   330
extern VideoBootStrap Android_bootstrap;
slouken@5150
   331
#endif
slouken@1361
   332
#if SDL_VIDEO_DRIVER_DUMMY
slouken@173
   333
extern VideoBootStrap DUMMY_bootstrap;
slouken@173
   334
#endif
slouken@1361
   335
slouken@4472
   336
extern SDL_VideoDevice *SDL_GetVideoDevice(void);
slouken@2753
   337
extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
slouken@2753
   338
extern int SDL_AddVideoDisplay(const SDL_VideoDisplay * display);
slouken@3500
   339
extern SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode * mode);
slouken@5246
   340
extern SDL_VideoDisplay *SDL_GetDisplayForWindow(SDL_Window *window);
slouken@1895
   341
slouken@2753
   342
extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags);
slouken@1895
   343
slouken@2753
   344
extern void SDL_OnWindowShown(SDL_Window * window);
slouken@2753
   345
extern void SDL_OnWindowHidden(SDL_Window * window);
slouken@5166
   346
extern void SDL_OnWindowResized(SDL_Window * window);
slouken@3502
   347
extern void SDL_OnWindowMinimized(SDL_Window * window);
slouken@3502
   348
extern void SDL_OnWindowRestored(SDL_Window * window);
slouken@2753
   349
extern void SDL_OnWindowFocusGained(SDL_Window * window);
slouken@2753
   350
extern void SDL_OnWindowFocusLost(SDL_Window * window);
slouken@3685
   351
extern SDL_Window * SDL_GetFocusWindow(void);
slouken@0
   352
slouken@2753
   353
#endif /* _SDL_sysvideo_h */
slouken@1895
   354
slouken@1895
   355
/* vi: set ts=4 sw=4 expandtab: */