include/SDL_syswm.h
author Sylvain Becker <sylvain.becker@gmail.com>
Wed, 23 Oct 2019 11:25:16 +0200
changeset 13170 6f0ec1079286
parent 13074 2ede888544ac
permissions -rw-r--r--
Fixed bug 4775 - Japanese on Android, remove inputtype PASSWORD (Thanks Tamo!)
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2019 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 
    22 /**
    23  *  \file SDL_syswm.h
    24  *
    25  *  Include file for SDL custom system window manager hooks.
    26  */
    27 
    28 #ifndef SDL_syswm_h_
    29 #define SDL_syswm_h_
    30 
    31 #include "SDL_stdinc.h"
    32 #include "SDL_error.h"
    33 #include "SDL_video.h"
    34 #include "SDL_version.h"
    35 
    36 /**
    37  *  \brief SDL_syswm.h
    38  *
    39  *  Your application has access to a special type of event ::SDL_SYSWMEVENT,
    40  *  which contains window-manager specific information and arrives whenever
    41  *  an unhandled window event occurs.  This event is ignored by default, but
    42  *  you can enable it with SDL_EventState().
    43  */
    44 struct SDL_SysWMinfo;
    45 
    46 #if !defined(SDL_PROTOTYPES_ONLY)
    47 
    48 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
    49 #ifndef WIN32_LEAN_AND_MEAN
    50 #define WIN32_LEAN_AND_MEAN
    51 #endif
    52 #ifndef NOMINMAX   /* don't define min() and max(). */
    53 #define NOMINMAX
    54 #endif
    55 #include <windows.h>
    56 #endif
    57 
    58 #if defined(SDL_VIDEO_DRIVER_WINRT)
    59 #include <Inspectable.h>
    60 #endif
    61 
    62 /* This is the structure for custom window manager events */
    63 #if defined(SDL_VIDEO_DRIVER_X11)
    64 #if defined(__APPLE__) && defined(__MACH__)
    65 /* conflicts with Quickdraw.h */
    66 #define Cursor X11Cursor
    67 #endif
    68 
    69 #include <X11/Xlib.h>
    70 #include <X11/Xatom.h>
    71 
    72 #if defined(__APPLE__) && defined(__MACH__)
    73 /* matches the re-define above */
    74 #undef Cursor
    75 #endif
    76 
    77 #endif /* defined(SDL_VIDEO_DRIVER_X11) */
    78 
    79 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
    80 #include <directfb.h>
    81 #endif
    82 
    83 #if defined(SDL_VIDEO_DRIVER_COCOA)
    84 #ifdef __OBJC__
    85 @class NSWindow;
    86 #else
    87 typedef struct _NSWindow NSWindow;
    88 #endif
    89 #endif
    90 
    91 #if defined(SDL_VIDEO_DRIVER_UIKIT)
    92 #ifdef __OBJC__
    93 #include <UIKit/UIKit.h>
    94 #else
    95 typedef struct _UIWindow UIWindow;
    96 typedef struct _UIViewController UIViewController;
    97 #endif
    98 typedef Uint32 GLuint;
    99 #endif
   100 
   101 #if defined(SDL_VIDEO_DRIVER_ANDROID)
   102 typedef struct ANativeWindow ANativeWindow;
   103 typedef void *EGLSurface;
   104 #endif
   105 
   106 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
   107 #include "SDL_egl.h"
   108 #endif
   109 #endif /* SDL_PROTOTYPES_ONLY */
   110 
   111 
   112 #include "begin_code.h"
   113 /* Set up for C function definitions, even when using C++ */
   114 #ifdef __cplusplus
   115 extern "C" {
   116 #endif
   117 
   118 #if !defined(SDL_PROTOTYPES_ONLY)
   119 /**
   120  *  These are the various supported windowing subsystems
   121  */
   122 typedef enum
   123 {
   124     SDL_SYSWM_UNKNOWN,
   125     SDL_SYSWM_WINDOWS,
   126     SDL_SYSWM_X11,
   127     SDL_SYSWM_DIRECTFB,
   128     SDL_SYSWM_COCOA,
   129     SDL_SYSWM_UIKIT,
   130     SDL_SYSWM_WAYLAND,
   131     SDL_SYSWM_MIR,  /* no longer available, left for API/ABI compatibility. Remove in 2.1! */
   132     SDL_SYSWM_WINRT,
   133     SDL_SYSWM_ANDROID,
   134     SDL_SYSWM_VIVANTE,
   135     SDL_SYSWM_OS2
   136 } SDL_SYSWM_TYPE;
   137 
   138 /**
   139  *  The custom event structure.
   140  */
   141 struct SDL_SysWMmsg
   142 {
   143     SDL_version version;
   144     SDL_SYSWM_TYPE subsystem;
   145     union
   146     {
   147 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
   148         struct {
   149             HWND hwnd;                  /**< The window for the message */
   150             UINT msg;                   /**< The type of message */
   151             WPARAM wParam;              /**< WORD message parameter */
   152             LPARAM lParam;              /**< LONG message parameter */
   153         } win;
   154 #endif
   155 #if defined(SDL_VIDEO_DRIVER_X11)
   156         struct {
   157             XEvent event;
   158         } x11;
   159 #endif
   160 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
   161         struct {
   162             DFBEvent event;
   163         } dfb;
   164 #endif
   165 #if defined(SDL_VIDEO_DRIVER_COCOA)
   166         struct
   167         {
   168             /* Latest version of Xcode clang complains about empty structs in C v. C++:
   169                  error: empty struct has size 0 in C, size 1 in C++
   170              */
   171             int dummy;
   172             /* No Cocoa window events yet */
   173         } cocoa;
   174 #endif
   175 #if defined(SDL_VIDEO_DRIVER_UIKIT)
   176         struct
   177         {
   178             int dummy;
   179             /* No UIKit window events yet */
   180         } uikit;
   181 #endif
   182 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
   183         struct
   184         {
   185             int dummy;
   186             /* No Vivante window events yet */
   187         } vivante;
   188 #endif
   189         /* Can't have an empty union */
   190         int dummy;
   191     } msg;
   192 };
   193 
   194 /**
   195  *  The custom window manager information structure.
   196  *
   197  *  When this structure is returned, it holds information about which
   198  *  low level system it is using, and will be one of SDL_SYSWM_TYPE.
   199  */
   200 struct SDL_SysWMinfo
   201 {
   202     SDL_version version;
   203     SDL_SYSWM_TYPE subsystem;
   204     union
   205     {
   206 #if defined(SDL_VIDEO_DRIVER_WINDOWS)
   207         struct
   208         {
   209             HWND window;                /**< The window handle */
   210             HDC hdc;                    /**< The window device context */
   211             HINSTANCE hinstance;        /**< The instance handle */
   212         } win;
   213 #endif
   214 #if defined(SDL_VIDEO_DRIVER_WINRT)
   215         struct
   216         {
   217             IInspectable * window;      /**< The WinRT CoreWindow */
   218         } winrt;
   219 #endif
   220 #if defined(SDL_VIDEO_DRIVER_X11)
   221         struct
   222         {
   223             Display *display;           /**< The X11 display */
   224             Window window;              /**< The X11 window */
   225         } x11;
   226 #endif
   227 #if defined(SDL_VIDEO_DRIVER_DIRECTFB)
   228         struct
   229         {
   230             IDirectFB *dfb;             /**< The directfb main interface */
   231             IDirectFBWindow *window;    /**< The directfb window handle */
   232             IDirectFBSurface *surface;  /**< The directfb client surface */
   233         } dfb;
   234 #endif
   235 #if defined(SDL_VIDEO_DRIVER_COCOA)
   236         struct
   237         {
   238 #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
   239             NSWindow __unsafe_unretained *window; /**< The Cocoa window */
   240 #else
   241             NSWindow *window;                     /**< The Cocoa window */
   242 #endif
   243         } cocoa;
   244 #endif
   245 #if defined(SDL_VIDEO_DRIVER_UIKIT)
   246         struct
   247         {
   248 #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
   249             UIWindow __unsafe_unretained *window; /**< The UIKit window */
   250 #else
   251             UIWindow *window;                     /**< The UIKit window */
   252 #endif
   253             GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */
   254             GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */
   255             GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */
   256         } uikit;
   257 #endif
   258 #if defined(SDL_VIDEO_DRIVER_WAYLAND)
   259         struct
   260         {
   261             struct wl_display *display;            /**< Wayland display */
   262             struct wl_surface *surface;            /**< Wayland surface */
   263             struct wl_shell_surface *shell_surface; /**< Wayland shell_surface (window manager handle) */
   264         } wl;
   265 #endif
   266 #if defined(SDL_VIDEO_DRIVER_MIR)  /* no longer available, left for API/ABI compatibility. Remove in 2.1! */
   267         struct
   268         {
   269             void *connection;  /**< Mir display server connection */
   270             void *surface;  /**< Mir surface */
   271         } mir;
   272 #endif
   273 
   274 #if defined(SDL_VIDEO_DRIVER_ANDROID)
   275         struct
   276         {
   277             ANativeWindow *window;
   278             EGLSurface surface;
   279         } android;
   280 #endif
   281 
   282 #if defined(SDL_VIDEO_DRIVER_VIVANTE)
   283         struct
   284         {
   285             EGLNativeDisplayType display;
   286             EGLNativeWindowType window;
   287         } vivante;
   288 #endif
   289 
   290         /* Make sure this union is always 64 bytes (8 64-bit pointers). */
   291         /* Be careful not to overflow this if you add a new target! */
   292         Uint8 dummy[64];
   293     } info;
   294 };
   295 
   296 #endif /* SDL_PROTOTYPES_ONLY */
   297 
   298 typedef struct SDL_SysWMinfo SDL_SysWMinfo;
   299 
   300 /* Function prototypes */
   301 /**
   302  *  \brief This function allows access to driver-dependent window information.
   303  *
   304  *  \param window The window about which information is being requested
   305  *  \param info This structure must be initialized with the SDL version, and is
   306  *              then filled in with information about the given window.
   307  *
   308  *  \return SDL_TRUE if the function is implemented and the version member of
   309  *          the \c info struct is valid, SDL_FALSE otherwise.
   310  *
   311  *  You typically use this function like this:
   312  *  \code
   313  *  SDL_SysWMinfo info;
   314  *  SDL_VERSION(&info.version);
   315  *  if ( SDL_GetWindowWMInfo(window, &info) ) { ... }
   316  *  \endcode
   317  */
   318 extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window,
   319                                                      SDL_SysWMinfo * info);
   320 
   321 
   322 /* Ends C function definitions when using C++ */
   323 #ifdef __cplusplus
   324 }
   325 #endif
   326 #include "close_code.h"
   327 
   328 #endif /* SDL_syswm_h_ */
   329 
   330 /* vi: set ts=4 sw=4 expandtab: */