1 2 // Copyright Michael D. Parker 2018. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 module bindbc.sdl.bind.sdlsyswm; 8 9 import core.stdc.config : c_long; 10 import bindbc.sdl.config; 11 import bindbc.sdl.bind.sdlstdinc : SDL_bool; 12 import bindbc.sdl.bind.sdlversion : SDL_version; 13 import bindbc.sdl.bind.sdlvideo : SDL_Window; 14 15 static if(sdlSupport >= SDLSupport.sdl205) { 16 enum SDL_SYSWM_TYPE { 17 SDL_SYSWM_UNKNOWN, 18 SDL_SYSWM_WINDOWS, 19 SDL_SYSWM_X11, 20 SDL_SYSWM_DIRECTFB, 21 SDL_SYSWM_COCOA, 22 SDL_SYSWM_UIKIT, 23 SDL_SYSWM_WAYLAND, 24 SDL_SYSWM_MIR, 25 SDL_SYSWM_WINRT, 26 SDL_SYSWM_ANDROID, 27 SDL_SYSWM_VIVANTE, 28 SDL_SYSWM_OS2, 29 } 30 } 31 else static if(sdlSupport >= SDLSupport.sdl205) { 32 enum SDL_SYSWM_TYPE { 33 SDL_SYSWM_UNKNOWN, 34 SDL_SYSWM_WINDOWS, 35 SDL_SYSWM_X11, 36 SDL_SYSWM_DIRECTFB, 37 SDL_SYSWM_COCOA, 38 SDL_SYSWM_UIKIT, 39 SDL_SYSWM_WAYLAND, 40 SDL_SYSWM_MIR, 41 SDL_SYSWM_WINRT, 42 SDL_SYSWM_ANDROID, 43 SDL_SYSWM_VIVANTE, 44 } 45 } 46 else static if(sdlSupport >= SDLSupport.sdl204) { 47 enum SDL_SYSWM_TYPE { 48 SDL_SYSWM_UNKNOWN, 49 SDL_SYSWM_WINDOWS, 50 SDL_SYSWM_X11, 51 SDL_SYSWM_DIRECTFB, 52 SDL_SYSWM_COCOA, 53 SDL_SYSWM_UIKIT, 54 SDL_SYSWM_WAYLAND, 55 SDL_SYSWM_MIR, 56 SDL_SYSWM_WINRT, 57 SDL_SYSWM_ANDROID, 58 } 59 } 60 else static if(sdlSupport >= SDLSupport.sdl203) { 61 enum SDL_SYSWM_TYPE { 62 SDL_SYSWM_UNKNOWN, 63 SDL_SYSWM_WINDOWS, 64 SDL_SYSWM_X11, 65 SDL_SYSWM_DIRECTFB, 66 SDL_SYSWM_COCOA, 67 SDL_SYSWM_UIKIT, 68 SDL_SYSWM_WAYLAND, 69 SDL_SYSWM_MIR, 70 SDL_SYSWM_WINRT, 71 } 72 } 73 else static if(sdlSupport >= SDLSupport.sdl202) { 74 enum SDL_SYSWM_TYPE { 75 SDL_SYSWM_UNKNOWN, 76 SDL_SYSWM_WINDOWS, 77 SDL_SYSWM_X11, 78 SDL_SYSWM_DIRECTFB, 79 SDL_SYSWM_COCOA, 80 SDL_SYSWM_UIKIT, 81 SDL_SYSWM_WAYLAND, 82 SDL_SYSWM_MIR, 83 } 84 } 85 else { 86 enum SDL_SYSWM_TYPE { 87 SDL_SYSWM_UNKNOWN, 88 SDL_SYSWM_WINDOWS, 89 SDL_SYSWM_X11, 90 SDL_SYSWM_DIRECTFB, 91 SDL_SYSWM_COCOA, 92 SDL_SYSWM_UIKIT, 93 } 94 } 95 mixin(expandEnum!SDL_SYSWM_TYPE); 96 97 version(Windows) { 98 // I don't want to import core.sys.windows.windows just for these 99 version(Win64) { 100 alias wparam = ulong; 101 alias lparam = long; 102 }else { 103 alias wparam = uint; 104 alias lparam = int; 105 } 106 } 107 108 struct SDL_SysWMmsg { 109 SDL_version version_; 110 SDL_SYSWM_TYPE subsystem; 111 union msg_ { 112 version(Windows) { 113 struct win_ { 114 void* hwnd; 115 uint msg; 116 wparam wParam; 117 lparam lParam; 118 } 119 win_ win; 120 } 121 else version(OSX) { 122 struct cocoa_ { 123 int dummy; 124 } 125 cocoa_ cocoa; 126 } 127 else version(linux) { 128 struct dfb_ { 129 void* event; 130 } 131 dfb_ dfb; 132 } 133 134 version(Posix) { 135 struct x11_ { 136 c_long[24] pad; // sufficient size for any X11 event 137 } 138 x11_ x11; 139 } 140 141 static if(sdlSupport >= SDLSupport.sdl205) { 142 struct vivante_ { 143 int dummy; 144 } 145 vivante_ vivante; 146 } 147 148 int dummy; 149 } 150 msg_ msg; 151 } 152 153 struct SDL_SysWMinfo { 154 SDL_version version_; 155 SDL_SYSWM_TYPE subsystem; 156 157 union info_ { 158 version(Windows) { 159 struct win_ { 160 void* window; 161 static if(sdlSupport >= SDLSupport.sdl204) void* hdc; 162 static if(sdlSupport >= SDLSupport.sdl206) void* hinstance; 163 } 164 win_ win; 165 } 166 else version(OSX) { 167 struct cocoa_ { 168 void* window; 169 } 170 cocoa_ cocoa; 171 172 struct uikit_ { 173 void *window; 174 } 175 uikit_ uikit; 176 177 } 178 else version(linux) { 179 struct dfb_ { 180 void *dfb; 181 void *window; 182 void *surface; 183 } 184 dfb_ dfb; 185 186 static if(sdlSupport >= SDLSupport.sdl202) { 187 struct wl_ { 188 void *display; 189 void *surface; 190 void *shell_surface; 191 } 192 wl_ wl; 193 194 struct mir_ { 195 void *connection; 196 void *surface; 197 } 198 mir_ mir; 199 } 200 } 201 202 version(Posix) { 203 struct x11_ { 204 void* display; 205 uint window; 206 } 207 x11_ x11; 208 } 209 210 static if(sdlSupport >= SDLSupport.sdl204) { 211 version(Android) { 212 struct android_ { 213 void* window; 214 void* surface; 215 } 216 android_ android; 217 } 218 } 219 220 static if(sdlSupport >= SDLSupport.sdl206) ubyte[64] dummy; 221 else int dummy; 222 } 223 info_ info; 224 } 225 226 version(BindSDL_Static) { 227 extern(C) @nogc nothrow { 228 SDL_bool SDL_GetWindowWMInfo(SDL_Window*,SDL_SysWMinfo*); 229 } 230 } 231 else { 232 extern(C) @nogc nothrow { 233 alias pSDL_GetWindowWMInfo = SDL_bool function(SDL_Window*,SDL_SysWMinfo*); 234 } 235 236 __gshared { 237 pSDL_GetWindowWMInfo SDL_GetWindowWMInfo; 238 } 239 }