1 2 // Copyright 2018 - 2022 Michael D. Parker 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.sdlvideo; 8 9 import bindbc.sdl.config; 10 import bindbc.sdl.bind.sdlrect : SDL_Rect; 11 import bindbc.sdl.bind.sdlstdinc : SDL_bool; 12 import bindbc.sdl.bind.sdlsurface : SDL_Surface; 13 14 struct SDL_DisplayMode { 15 uint format; 16 int w; 17 int h; 18 int refresh_rate; 19 void* driverdata; 20 } 21 22 struct SDL_Window; 23 24 // SDL_WindowFlags 25 enum uint SDL_WINDOW_FULLSCREEN = 0x00000001; 26 enum uint SDL_WINDOW_OPENGL = 0x00000002; 27 enum uint SDL_WINDOW_SHOWN = 0x00000004; 28 enum uint SDL_WINDOW_HIDDEN = 0x00000008; 29 enum uint SDL_WINDOW_BORDERLESS = 0x00000010; 30 enum uint SDL_WINDOW_RESIZABLE = 0x00000020; 31 enum uint SDL_WINDOW_MINIMIZED = 0x00000040; 32 enum uint SDL_WINDOW_MAXIMIZED = 0x00000080; 33 enum uint SDL_WINDOW_INPUT_GRABBED = 0x00000100; 34 enum uint SDL_WINDOW_INPUT_FOCUS = 0x00000200; 35 enum uint SDL_WINDOW_MOUSE_FOCUS = 0x00000400; 36 enum uint SDL_WINDOW_FULLSCREEN_DESKTOP = SDL_WINDOW_FULLSCREEN | 0x00001000; 37 enum uint SDL_WINDOW_FOREIGN = 0x00000800; 38 static if(sdlSupport >= SDLSupport.sdl201) { 39 enum uint SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000; 40 } 41 static if(sdlSupport >= SDLSupport.sdl204) { 42 enum uint SDL_WINDOW_MOUSE_CAPTURE = 0x00004000; 43 } 44 static if(sdlSupport >= SDLSupport.sdl205) { 45 enum uint SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000; 46 enum uint SDL_WINDOW_SKIP_TASKBAR = 0x00010000; 47 enum uint SDL_WINDOW_UTILITY = 0x00020000; 48 enum uint SDL_WINDOW_TOOLTIP = 0x00040000; 49 enum uint SDL_WINDOW_POPUP_MENU = 0x00080000; 50 } 51 static if(sdlSupport >= SDLSupport.sdl206) { 52 enum uint SDL_WINDOW_VULKAN = 0x10000000; 53 } 54 static if(sdlSupport >= SDLSupport.sdl206) { 55 enum uint SDL_WINDOW_METAL = 0x20000000; 56 } 57 static if(sdlSupport >= SDLSupport.sdl2016) { 58 enum uint SDL_WINDOW_MOUSE_GRABBED = SDL_WINDOW_INPUT_GRABBED; 59 enum uint SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000; 60 } 61 alias SDL_WindowFlags = uint; 62 63 enum uint SDL_WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000; 64 enum uint SDL_WINDOWPOS_UNDEFINED = SDL_WINDOWPOS_UNDEFINED_DISPLAY(0); 65 66 enum uint SDL_WINDOWPOS_CENTERED_MASK = 0x2FFF0000; 67 enum uint SDL_WINDOWPOS_CENTERED = SDL_WINDOWPOS_CENTERED_DISPLAY(0); 68 69 @safe @nogc nothrow pure { 70 uint SDL_WINDOWPOS_UNDEFINED_DISPLAY(uint x) { return SDL_WINDOWPOS_UNDEFINED_MASK | x; } 71 uint SDL_WINDOWPOS_ISUNDEFINED(uint x) { return (x & 0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK; } 72 uint SDL_WINDOWPOS_CENTERED_DISPLAY(uint x) { return SDL_WINDOWPOS_CENTERED_MASK | x; } 73 uint SDL_WINDOWPOS_ISCENTERED(uint x) { return (x & 0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK; } 74 } 75 76 static if(sdlSupport >= SDLSupport.sdl2018) { 77 enum SDL_WindowEventID : ubyte { 78 SDL_WINDOWEVENT_NONE, 79 SDL_WINDOWEVENT_SHOWN, 80 SDL_WINDOWEVENT_HIDDEN, 81 SDL_WINDOWEVENT_EXPOSED, 82 SDL_WINDOWEVENT_MOVED, 83 SDL_WINDOWEVENT_RESIZED, 84 SDL_WINDOWEVENT_SIZE_CHANGED, 85 SDL_WINDOWEVENT_MINIMIZED, 86 SDL_WINDOWEVENT_MAXIMIZED, 87 SDL_WINDOWEVENT_RESTORED, 88 SDL_WINDOWEVENT_ENTER, 89 SDL_WINDOWEVENT_LEAVE, 90 SDL_WINDOWEVENT_FOCUS_GAINED, 91 SDL_WINDOWEVENT_FOCUS_LOST, 92 SDL_WINDOWEVENT_CLOSE, 93 SDL_WINDOWEVENT_TAKE_FOCUS, 94 SDL_WINDOWEVENT_HIT_TEST, 95 SDL_WINDOWEVENT_ICCPROF_CHANGED, 96 SDL_WINDOWEVENT_DISPLAY_CHANGED, 97 } 98 99 } 100 else static if(sdlSupport >= SDLSupport.sdl205) { 101 enum SDL_WindowEventID : ubyte { 102 SDL_WINDOWEVENT_NONE, 103 SDL_WINDOWEVENT_SHOWN, 104 SDL_WINDOWEVENT_HIDDEN, 105 SDL_WINDOWEVENT_EXPOSED, 106 SDL_WINDOWEVENT_MOVED, 107 SDL_WINDOWEVENT_RESIZED, 108 SDL_WINDOWEVENT_SIZE_CHANGED, 109 SDL_WINDOWEVENT_MINIMIZED, 110 SDL_WINDOWEVENT_MAXIMIZED, 111 SDL_WINDOWEVENT_RESTORED, 112 SDL_WINDOWEVENT_ENTER, 113 SDL_WINDOWEVENT_LEAVE, 114 SDL_WINDOWEVENT_FOCUS_GAINED, 115 SDL_WINDOWEVENT_FOCUS_LOST, 116 SDL_WINDOWEVENT_CLOSE, 117 SDL_WINDOWEVENT_TAKE_FOCUS, 118 SDL_WINDOWEVENT_HIT_TEST, 119 } 120 121 } 122 else { 123 enum SDL_WindowEventID : ubyte { 124 SDL_WINDOWEVENT_NONE, 125 SDL_WINDOWEVENT_SHOWN, 126 SDL_WINDOWEVENT_HIDDEN, 127 SDL_WINDOWEVENT_EXPOSED, 128 SDL_WINDOWEVENT_MOVED, 129 SDL_WINDOWEVENT_RESIZED, 130 SDL_WINDOWEVENT_SIZE_CHANGED, 131 SDL_WINDOWEVENT_MINIMIZED, 132 SDL_WINDOWEVENT_MAXIMIZED, 133 SDL_WINDOWEVENT_RESTORED, 134 SDL_WINDOWEVENT_ENTER, 135 SDL_WINDOWEVENT_LEAVE, 136 SDL_WINDOWEVENT_FOCUS_GAINED, 137 SDL_WINDOWEVENT_FOCUS_LOST, 138 SDL_WINDOWEVENT_CLOSE, 139 } 140 } 141 mixin(expandEnum!SDL_WindowEventID); 142 143 static if(sdlSupport >= SDLSupport.sdl2014) { 144 enum SDL_DisplayEventID { 145 SDL_DISPLAYEVENT_NONE, 146 SDL_DISPLAYEVENT_ORIENTATION, 147 SDL_DISPLAYEVENT_CONNECTED, 148 SDL_DISPLAYEVENT_DISCONNECTED, 149 } 150 mixin(expandEnum!SDL_DisplayEventID); 151 } 152 else static if(sdlSupport >= SDLSupport.sdl209) { 153 enum SDL_DisplayEventID { 154 SDL_DISPLAYEVENT_NONE, 155 SDL_DISPLAYEVENT_ORIENTATION, 156 } 157 mixin(expandEnum!SDL_DisplayEventID); 158 } 159 160 static if(sdlSupport >= SDLSupport.sdl209) { 161 enum SDL_DisplayOrientation { 162 SDL_ORIENTATION_UNKNOWN, 163 SDL_ORIENTATION_LANDSCAPE, 164 SDL_ORIENTATION_LANDSCAPE_FLIPPED, 165 SDL_ORIENTATION_PORTRAIT, 166 SDL_ORIENTATION_PORTRAIT_FLIPPED, 167 } 168 mixin(expandEnum!SDL_DisplayOrientation); 169 } 170 171 static if(sdlSupport >= SDLSupport.sdl2016) { 172 enum SDL_FlashOperation { 173 SDL_FLASH_CANCEL, 174 SDL_FLASH_BRIEFLY, 175 SDL_FLASH_UNTIL_FOCUSED 176 } 177 mixin(expandEnum!SDL_FlashOperation); 178 } 179 180 alias SDL_GLContext = void*; 181 182 static if(sdlSupport >= SDLSupport.sdl206) { 183 enum SDL_GLattr { 184 SDL_GL_RED_SIZE, 185 SDL_GL_GREEN_SIZE, 186 SDL_GL_BLUE_SIZE, 187 SDL_GL_ALPHA_SIZE, 188 SDL_GL_BUFFER_SIZE, 189 SDL_GL_DOUBLEBUFFER, 190 SDL_GL_DEPTH_SIZE, 191 SDL_GL_STENCIL_SIZE, 192 SDL_GL_ACCUM_RED_SIZE, 193 SDL_GL_ACCUM_GREEN_SIZE, 194 SDL_GL_ACCUM_BLUE_SIZE, 195 SDL_GL_ACCUM_ALPHA_SIZE, 196 SDL_GL_STEREO, 197 SDL_GL_MULTISAMPLEBUFFERS, 198 SDL_GL_MULTISAMPLESAMPLES, 199 SDL_GL_ACCELERATED_VISUAL, 200 SDL_GL_RETAINED_BACKING, 201 SDL_GL_CONTEXT_MAJOR_VERSION, 202 SDL_GL_CONTEXT_MINOR_VERSION, 203 SDL_GL_CONTEXT_EGL, 204 SDL_GL_CONTEXT_FLAGS, 205 SDL_GL_CONTEXT_PROFILE_MASK, 206 SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 207 SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 208 SDL_GL_RELEASE_BEHAVIOR, 209 SDL_GL_CONTEXT_RESET_NOTIFICATION, 210 SDL_GL_CONTEXT_NO_ERROR, 211 } 212 } 213 else static if(sdlSupport >= SDLSupport.sdl204) { 214 enum SDL_GLattr { 215 SDL_GL_RED_SIZE, 216 SDL_GL_GREEN_SIZE, 217 SDL_GL_BLUE_SIZE, 218 SDL_GL_ALPHA_SIZE, 219 SDL_GL_BUFFER_SIZE, 220 SDL_GL_DOUBLEBUFFER, 221 SDL_GL_DEPTH_SIZE, 222 SDL_GL_STENCIL_SIZE, 223 SDL_GL_ACCUM_RED_SIZE, 224 SDL_GL_ACCUM_GREEN_SIZE, 225 SDL_GL_ACCUM_BLUE_SIZE, 226 SDL_GL_ACCUM_ALPHA_SIZE, 227 SDL_GL_STEREO, 228 SDL_GL_MULTISAMPLEBUFFERS, 229 SDL_GL_MULTISAMPLESAMPLES, 230 SDL_GL_ACCELERATED_VISUAL, 231 SDL_GL_RETAINED_BACKING, 232 SDL_GL_CONTEXT_MAJOR_VERSION, 233 SDL_GL_CONTEXT_MINOR_VERSION, 234 SDL_GL_CONTEXT_EGL, 235 SDL_GL_CONTEXT_FLAGS, 236 SDL_GL_CONTEXT_PROFILE_MASK, 237 SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 238 SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 239 SDL_GL_RELEASE_BEHAVIOR, 240 } 241 } 242 else static if(sdlSupport >= SDLSupport.sdl201) { 243 enum SDL_GLattr { 244 SDL_GL_RED_SIZE, 245 SDL_GL_GREEN_SIZE, 246 SDL_GL_BLUE_SIZE, 247 SDL_GL_ALPHA_SIZE, 248 SDL_GL_BUFFER_SIZE, 249 SDL_GL_DOUBLEBUFFER, 250 SDL_GL_DEPTH_SIZE, 251 SDL_GL_STENCIL_SIZE, 252 SDL_GL_ACCUM_RED_SIZE, 253 SDL_GL_ACCUM_GREEN_SIZE, 254 SDL_GL_ACCUM_BLUE_SIZE, 255 SDL_GL_ACCUM_ALPHA_SIZE, 256 SDL_GL_STEREO, 257 SDL_GL_MULTISAMPLEBUFFERS, 258 SDL_GL_MULTISAMPLESAMPLES, 259 SDL_GL_ACCELERATED_VISUAL, 260 SDL_GL_RETAINED_BACKING, 261 SDL_GL_CONTEXT_MAJOR_VERSION, 262 SDL_GL_CONTEXT_MINOR_VERSION, 263 SDL_GL_CONTEXT_EGL, 264 SDL_GL_CONTEXT_FLAGS, 265 SDL_GL_CONTEXT_PROFILE_MASK, 266 SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 267 SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 268 } 269 } 270 else { 271 enum SDL_GLattr { 272 SDL_GL_RED_SIZE, 273 SDL_GL_GREEN_SIZE, 274 SDL_GL_BLUE_SIZE, 275 SDL_GL_ALPHA_SIZE, 276 SDL_GL_BUFFER_SIZE, 277 SDL_GL_DOUBLEBUFFER, 278 SDL_GL_DEPTH_SIZE, 279 SDL_GL_STENCIL_SIZE, 280 SDL_GL_ACCUM_RED_SIZE, 281 SDL_GL_ACCUM_GREEN_SIZE, 282 SDL_GL_ACCUM_BLUE_SIZE, 283 SDL_GL_ACCUM_ALPHA_SIZE, 284 SDL_GL_STEREO, 285 SDL_GL_MULTISAMPLEBUFFERS, 286 SDL_GL_MULTISAMPLESAMPLES, 287 SDL_GL_ACCELERATED_VISUAL, 288 SDL_GL_RETAINED_BACKING, 289 SDL_GL_CONTEXT_MAJOR_VERSION, 290 SDL_GL_CONTEXT_MINOR_VERSION, 291 SDL_GL_CONTEXT_EGL, 292 SDL_GL_CONTEXT_FLAGS, 293 SDL_GL_CONTEXT_PROFILE_MASK, 294 SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 295 } 296 } 297 mixin(expandEnum!SDL_GLattr); 298 299 enum SDL_GLprofile { 300 SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, 301 SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, 302 SDL_GL_CONTEXT_PROFILE_ES = 0x0004, 303 } 304 mixin(expandEnum!SDL_GLprofile); 305 306 enum { 307 SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, 308 SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, 309 SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, 310 SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008, 311 } 312 alias SDL_GLcontextFlag = int; 313 314 static if(sdlSupport >= SDLSupport.sdl204) { 315 enum SDL_GLcontextReleaseFlag { 316 SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, 317 SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001, 318 } 319 mixin(expandEnum!SDL_GLcontextReleaseFlag); 320 321 enum SDL_HitTestResult { 322 SDL_HITTEST_NORMAL, 323 SDL_HITTEST_DRAGGABLE, 324 SDL_HITTEST_RESIZE_TOPLEFT, 325 SDL_HITTEST_RESIZE_TOP, 326 SDL_HITTEST_RESIZE_TOPRIGHT, 327 SDL_HITTEST_RESIZE_RIGHT, 328 SDL_HITTEST_RESIZE_BOTTOMRIGHT, 329 SDL_HITTEST_RESIZE_BOTTOM, 330 SDL_HITTEST_RESIZE_BOTTOMLEFT, 331 SDL_HITTEST_RESIZE_LEFT, 332 } 333 mixin(expandEnum!SDL_HitTestResult); 334 335 import bindbc.sdl.bind.sdlrect : SDL_Point; 336 extern(C) nothrow alias SDL_HitTest = SDL_HitTestResult function(SDL_Window*,const(SDL_Point)*,void*); 337 } 338 339 static if(sdlSupport >= SDLSupport.sdl206) { 340 enum SDL_GLContextResetNotification { 341 SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, 342 SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001, 343 } 344 mixin(expandEnum!SDL_GLContextResetNotification); 345 } 346 347 348 349 static if(staticBinding) { 350 extern(C) @nogc nothrow { 351 int SDL_GetNumVideoDrivers(); 352 const(char)* SDL_GetVideoDriver(int index); 353 int SDL_VideoInit(const(char)* driver_name); 354 void SDL_VideoQuit(); 355 const(char)* SDL_GetCurrentVideoDriver(); 356 int SDL_GetNumVideoDisplays(); 357 const(char)* SDL_GetDisplayName(int displayIndex); 358 int SDL_GetDisplayBounds(int displayIndex, SDL_Rect* rect); 359 int SDL_GetNumDisplayModes(int displayIndex); 360 int SDL_GetDisplayMode(int displayIndex, int modeIndex, SDL_DisplayMode* mode); 361 int SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode* mode); 362 int SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode* mode); 363 SDL_DisplayMode* SDL_GetClosestDisplayMode(int displayIndex, const(SDL_DisplayMode)* mode, SDL_DisplayMode* closest); 364 int SDL_GetWindowDisplayIndex(SDL_Window* window); 365 int SDL_SetWindowDisplayMode(SDL_Window* window, const(SDL_DisplayMode)* mode); 366 int SDL_GetWindowDisplayMode(SDL_Window* window, SDL_DisplayMode* mode); 367 uint SDL_GetWindowPixelFormat(SDL_Window* window); 368 SDL_Window* SDL_CreateWindow(const(char)* title, int x, int y, int w, int h, SDL_WindowFlags flags); 369 SDL_Window* SDL_CreateWindowFrom(const(void)* data); 370 uint SDL_GetWindowID(SDL_Window* window); 371 SDL_Window* SDL_GetWindowFromID(uint id); 372 SDL_WindowFlags SDL_GetWindowFlags(SDL_Window* window); 373 void SDL_SetWindowTitle(SDL_Window* window, const(char)* title); 374 const(char)* SDL_GetWindowTitle(SDL_Window* window); 375 void SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon); 376 void* SDL_SetWindowData(SDL_Window* window, const(char)* name, void* userdata); 377 void* SDL_GetWindowData(SDL_Window* window, const(char)* name); 378 void SDL_SetWindowPosition(SDL_Window* window, int x, int y); 379 void SDL_GetWindowPosition(SDL_Window* window, int* x, int* y); 380 void SDL_SetWindowSize(SDL_Window* window, int w, int h); 381 void SDL_GetWindowSize(SDL_Window* window, int* w, int* h); 382 void SDL_SetWindowMinimumSize(SDL_Window* window, int min_w, int min_h); 383 void SDL_GetWindowMinimumSize(SDL_Window* window, int* w, int* h); 384 void SDL_SetWindowMaximumSize(SDL_Window* window, int max_w, int max_h); 385 void SDL_GetWindowMaximumSize(SDL_Window* window, int* w, int* h); 386 void SDL_SetWindowBordered(SDL_Window* window, SDL_bool bordered); 387 void SDL_ShowWindow(SDL_Window* window); 388 void SDL_HideWindow(SDL_Window* window); 389 void SDL_RaiseWindow(SDL_Window* window); 390 void SDL_MaximizeWindow(SDL_Window* window); 391 void SDL_MinimizeWindow(SDL_Window* window); 392 void SDL_RestoreWindow(SDL_Window* window); 393 int SDL_SetWindowFullscreen(SDL_Window* window, SDL_WindowFlags flags); 394 SDL_Surface* SDL_GetWindowSurface(SDL_Window* window); 395 int SDL_UpdateWindowSurface(SDL_Window* window); 396 int SDL_UpdateWindowSurfaceRects(SDL_Window* window, SDL_Rect* rects, int numrects); 397 void SDL_SetWindowGrab(SDL_Window* window, SDL_bool grabbed); 398 SDL_bool SDL_GetWindowGrab(SDL_Window* window); 399 int SDL_SetWindowBrightness(SDL_Window* window, float brightness); 400 float SDL_GetWindowBrightness(SDL_Window* window); 401 int SDL_SetWindowGammaRamp(SDL_Window* window, const(ushort)* red, const(ushort)* green, const(ushort)* blue); 402 int SDL_GetWindowGammaRamp(SDL_Window* window, ushort* red, ushort* green, ushort* blue); 403 void SDL_DestroyWindow(SDL_Window* window); 404 SDL_bool SDL_IsScreenSaverEnabled(); 405 void SDL_EnableScreenSaver(); 406 void SDL_DisableScreenSaver(); 407 int SDL_GL_LoadLibrary(const(char)* path); 408 void* SDL_GL_GetProcAddress(const(char)* proc); 409 void SDL_GL_UnloadLibrary(); 410 SDL_bool SDL_GL_ExtensionSupported(const(char)* extension); 411 int SDL_GL_SetAttribute(SDL_GLattr attr, int value); 412 int SDL_GL_GetAttribute(SDL_GLattr attr, int* value); 413 SDL_GLContext SDL_GL_CreateContext(SDL_Window* window); 414 int SDL_GL_MakeCurrent(SDL_Window* window, SDL_GLContext context); 415 SDL_Window* SDL_GL_GetCurrentWindow(); 416 SDL_GLContext SDL_GL_GetCurrentContext(); 417 int SDL_GL_SetSwapInterval(int interval); 418 int SDL_GL_GetSwapInterval(); 419 void SDL_GL_SwapWindow(SDL_Window* window); 420 void SDL_GL_DeleteContext(SDL_GLContext context); 421 422 static if(sdlSupport >= SDLSupport.sdl201) { 423 void SDL_GL_GetDrawableSize(SDL_Window* window, int* w, int* h); 424 } 425 static if(sdlSupport >= SDLSupport.sdl202) { 426 void SDL_GL_ResetAttributes(); 427 } 428 static if(sdlSupport >= SDLSupport.sdl204) { 429 int SDL_GetDisplayDPI(int displayIndex, float* ddpi, float* hdpi, float* vdpi); 430 SDL_Window* SDL_GetGrabbedWindow(); 431 int SDL_SetWindowHitTest(SDL_Window* window, SDL_HitTest callback, void* callback_data); 432 } 433 static if(sdlSupport >= SDLSupport.sdl205) { 434 int SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect* rect); 435 int SDL_GetWindowBordersSize(SDL_Window* window, int* top, int* left, int* bottom, int* right); 436 int SDL_GetWindowOpacity(SDL_Window* window, float* opacity); 437 int SDL_SetWindowInputFocus(SDL_Window* window); 438 int SDL_SetWindowModalFor(SDL_Window* modal_window, SDL_Window* parent_window); 439 int SDL_SetWindowOpacity(SDL_Window* window, float opacity); 440 void SDL_SetWindowResizable(SDL_Window* window, SDL_bool resizable); 441 } 442 static if(sdlSupport >= SDLSupport.sdl209) { 443 SDL_DisplayOrientation SDL_GetDisplayOrientation(int displayIndex); 444 } 445 static if(sdlSupport >= SDLSupport.sdl2016) { 446 int SDL_FlashWindow(SDL_Window* window, SDL_FlashOperation operation); 447 void SDL_SetWindowAlwaysOnTop(SDL_Window* window, SDL_bool on_top); 448 void SDL_SetWindowKeyboardGrab(SDL_Window* window, SDL_bool grabbed); 449 SDL_bool SDL_GetWindowKeyboardGrab(SDL_Window * window); 450 void SDL_SetWindowMouseGrab(SDL_Window* window, SDL_bool grabbed); 451 SDL_bool SDL_GetWindowMouseGrab(SDL_Window* window); 452 } 453 static if(sdlSupport >= SDLSupport.sdl2018) { 454 void* SDL_GetWindowICCProfile(SDL_Window* window, size_t* size); 455 int SDL_SetWindowMouseRect(SDL_Window* window, const(SDL_Rect)* rect); 456 const(SDL_Rect)* SDL_GetWindowMouseRect(SDL_Window* window); 457 458 } 459 } 460 } 461 else { 462 extern(C) @nogc nothrow { 463 alias pSDL_GetNumVideoDrivers = int function(); 464 alias pSDL_GetVideoDriver = const(char)* function(int index); 465 alias pSDL_VideoInit = int function(const(char)* driver_name); 466 alias pSDL_VideoQuit = void function(); 467 alias pSDL_GetCurrentVideoDriver = const(char)* function(); 468 alias pSDL_GetNumVideoDisplays = int function(); 469 alias pSDL_GetDisplayName = const(char)* function(int displayIndex); 470 alias pSDL_GetDisplayBounds = int function(int displayIndex, SDL_Rect* rect); 471 alias pSDL_GetNumDisplayModes = int function(int displayIndex); 472 alias pSDL_GetDisplayMode = int function(int displayIndex, int modeIndex, SDL_DisplayMode* mode); 473 alias pSDL_GetDesktopDisplayMode = int function(int displayIndex, SDL_DisplayMode* mode); 474 alias pSDL_GetCurrentDisplayMode = int function(int displayIndex, SDL_DisplayMode* mode); 475 alias pSDL_GetClosestDisplayMode = SDL_DisplayMode* function(int displayIndex, const(SDL_DisplayMode)* mode, SDL_DisplayMode* closest); 476 alias pSDL_GetWindowDisplayIndex = int function(SDL_Window* window); 477 alias pSDL_SetWindowDisplayMode = int function(SDL_Window* window, const(SDL_DisplayMode)* mode); 478 alias pSDL_GetWindowDisplayMode = int function(SDL_Window* window, SDL_DisplayMode* mode); 479 alias pSDL_GetWindowPixelFormat = uint function(SDL_Window* window); 480 alias pSDL_CreateWindow = SDL_Window* function(const(char)* title, int x, int y, int w, int h, SDL_WindowFlags flags); 481 alias pSDL_CreateWindowFrom = SDL_Window* function(const(void)* data); 482 alias pSDL_GetWindowID = uint function(SDL_Window* window); 483 alias pSDL_GetWindowFromID = SDL_Window* function(uint id); 484 alias pSDL_GetWindowFlags = SDL_WindowFlags function(SDL_Window* window); 485 alias pSDL_SetWindowTitle = void function(SDL_Window* window, const(char)* title); 486 alias pSDL_GetWindowTitle = const(char)* function(SDL_Window* window); 487 alias pSDL_SetWindowIcon = void function(SDL_Window* window, SDL_Surface* icon); 488 alias pSDL_SetWindowData = void* function(SDL_Window* window, const(char)* name, void* userdata); 489 alias pSDL_GetWindowData = void* function(SDL_Window* window, const(char)* name); 490 alias pSDL_SetWindowPosition = void function(SDL_Window* window, int x, int y); 491 alias pSDL_GetWindowPosition = void function(SDL_Window* window, int* x, int* y); 492 alias pSDL_SetWindowSize = void function(SDL_Window* window, int w, int h); 493 alias pSDL_GetWindowSize = void function(SDL_Window* window, int* w, int* h); 494 alias pSDL_SetWindowMinimumSize = void function(SDL_Window* window, int min_w, int min_h); 495 alias pSDL_GetWindowMinimumSize = void function(SDL_Window* window, int* w, int* h); 496 alias pSDL_SetWindowMaximumSize = void function(SDL_Window* window, int max_w, int max_h); 497 alias pSDL_GetWindowMaximumSize = void function(SDL_Window* window, int* w, int* h); 498 alias pSDL_SetWindowBordered = void function(SDL_Window* window, SDL_bool bordered); 499 alias pSDL_ShowWindow = void function(SDL_Window* window); 500 alias pSDL_HideWindow = void function(SDL_Window* window); 501 alias pSDL_RaiseWindow = void function(SDL_Window* window); 502 alias pSDL_MaximizeWindow = void function(SDL_Window* window); 503 alias pSDL_MinimizeWindow = void function(SDL_Window* window); 504 alias pSDL_RestoreWindow = void function(SDL_Window* window); 505 alias pSDL_SetWindowFullscreen = int function(SDL_Window* window, SDL_WindowFlags flags); 506 alias pSDL_GetWindowSurface = SDL_Surface* function(SDL_Window* window); 507 alias pSDL_UpdateWindowSurface = int function(SDL_Window* window); 508 alias pSDL_UpdateWindowSurfaceRects = int function(SDL_Window* window, SDL_Rect* rects, int numrects); 509 alias pSDL_SetWindowGrab = void function(SDL_Window* window, SDL_bool grabbed); 510 alias pSDL_GetWindowGrab = SDL_bool function(SDL_Window* window); 511 alias pSDL_SetWindowBrightness = int function(SDL_Window* window, float brightness); 512 alias pSDL_GetWindowBrightness = float function(SDL_Window* window); 513 alias pSDL_SetWindowGammaRamp = int function(SDL_Window* window, const(ushort)* red, const(ushort)* green, const(ushort)* blue); 514 alias pSDL_GetWindowGammaRamp = int function(SDL_Window* window, ushort* red, ushort* green, ushort* blue); 515 alias pSDL_DestroyWindow = void function(SDL_Window* window); 516 alias pSDL_IsScreenSaverEnabled = SDL_bool function(); 517 alias pSDL_EnableScreenSaver = void function(); 518 alias pSDL_DisableScreenSaver = void function(); 519 alias pSDL_GL_LoadLibrary = int function(const(char)* path); 520 alias pSDL_GL_GetProcAddress = void* function(const(char)* proc); 521 alias pSDL_GL_UnloadLibrary = void function(); 522 alias pSDL_GL_ExtensionSupported = SDL_bool function(const(char)* extension); 523 alias pSDL_GL_SetAttribute = int function(SDL_GLattr attr, int value); 524 alias pSDL_GL_GetAttribute = int function(SDL_GLattr attr, int* value); 525 alias pSDL_GL_CreateContext = SDL_GLContext function(SDL_Window* window); 526 alias pSDL_GL_MakeCurrent = int function(SDL_Window* window, SDL_GLContext context); 527 alias pSDL_GL_GetCurrentWindow = SDL_Window* function(); 528 alias pSDL_GL_GetCurrentContext = SDL_GLContext function(); 529 alias pSDL_GL_SetSwapInterval = int function(int interval); 530 alias pSDL_GL_GetSwapInterval = int function(); 531 alias pSDL_GL_SwapWindow = void function(SDL_Window* window); 532 alias pSDL_GL_DeleteContext = void function(SDL_GLContext context); 533 } 534 535 __gshared { 536 pSDL_GetNumVideoDrivers SDL_GetNumVideoDrivers; 537 pSDL_GetVideoDriver SDL_GetVideoDriver; 538 pSDL_VideoInit SDL_VideoInit; 539 pSDL_VideoQuit SDL_VideoQuit; 540 pSDL_GetCurrentVideoDriver SDL_GetCurrentVideoDriver; 541 pSDL_GetNumVideoDisplays SDL_GetNumVideoDisplays; 542 pSDL_GetDisplayName SDL_GetDisplayName; 543 pSDL_GetDisplayBounds SDL_GetDisplayBounds; 544 pSDL_GetNumDisplayModes SDL_GetNumDisplayModes; 545 pSDL_GetDisplayMode SDL_GetDisplayMode; 546 pSDL_GetDesktopDisplayMode SDL_GetDesktopDisplayMode; 547 pSDL_GetCurrentDisplayMode SDL_GetCurrentDisplayMode; 548 pSDL_GetClosestDisplayMode SDL_GetClosestDisplayMode; 549 pSDL_GetWindowDisplayIndex SDL_GetWindowDisplayIndex; 550 pSDL_SetWindowDisplayMode SDL_SetWindowDisplayMode; 551 pSDL_GetWindowDisplayMode SDL_GetWindowDisplayMode; 552 pSDL_GetWindowPixelFormat SDL_GetWindowPixelFormat; 553 pSDL_CreateWindow SDL_CreateWindow; 554 pSDL_CreateWindowFrom SDL_CreateWindowFrom; 555 pSDL_GetWindowID SDL_GetWindowID; 556 pSDL_GetWindowFromID SDL_GetWindowFromID; 557 pSDL_GetWindowFlags SDL_GetWindowFlags; 558 pSDL_SetWindowTitle SDL_SetWindowTitle; 559 pSDL_GetWindowTitle SDL_GetWindowTitle; 560 pSDL_SetWindowIcon SDL_SetWindowIcon; 561 pSDL_SetWindowData SDL_SetWindowData; 562 pSDL_GetWindowData SDL_GetWindowData; 563 pSDL_SetWindowPosition SDL_SetWindowPosition; 564 pSDL_GetWindowPosition SDL_GetWindowPosition; 565 pSDL_SetWindowSize SDL_SetWindowSize; 566 pSDL_GetWindowSize SDL_GetWindowSize; 567 pSDL_SetWindowMinimumSize SDL_SetWindowMinimumSize; 568 pSDL_GetWindowMinimumSize SDL_GetWindowMinimumSize; 569 pSDL_SetWindowMaximumSize SDL_SetWindowMaximumSize; 570 pSDL_GetWindowMaximumSize SDL_GetWindowMaximumSize; 571 pSDL_SetWindowBordered SDL_SetWindowBordered; 572 pSDL_ShowWindow SDL_ShowWindow; 573 pSDL_HideWindow SDL_HideWindow; 574 pSDL_RaiseWindow SDL_RaiseWindow; 575 pSDL_MaximizeWindow SDL_MaximizeWindow; 576 pSDL_MinimizeWindow SDL_MinimizeWindow; 577 pSDL_RestoreWindow SDL_RestoreWindow; 578 pSDL_SetWindowFullscreen SDL_SetWindowFullscreen; 579 pSDL_GetWindowSurface SDL_GetWindowSurface; 580 pSDL_UpdateWindowSurface SDL_UpdateWindowSurface; 581 pSDL_UpdateWindowSurfaceRects SDL_UpdateWindowSurfaceRects; 582 pSDL_SetWindowGrab SDL_SetWindowGrab; 583 pSDL_GetWindowGrab SDL_GetWindowGrab; 584 pSDL_SetWindowBrightness SDL_SetWindowBrightness; 585 pSDL_GetWindowBrightness SDL_GetWindowBrightness; 586 pSDL_SetWindowGammaRamp SDL_SetWindowGammaRamp; 587 pSDL_GetWindowGammaRamp SDL_GetWindowGammaRamp; 588 pSDL_DestroyWindow SDL_DestroyWindow; 589 pSDL_IsScreenSaverEnabled SDL_IsScreenSaverEnabled; 590 pSDL_EnableScreenSaver SDL_EnableScreenSaver; 591 pSDL_DisableScreenSaver SDL_DisableScreenSaver; 592 pSDL_GL_LoadLibrary SDL_GL_LoadLibrary; 593 pSDL_GL_GetProcAddress SDL_GL_GetProcAddress; 594 pSDL_GL_UnloadLibrary SDL_GL_UnloadLibrary; 595 pSDL_GL_ExtensionSupported SDL_GL_ExtensionSupported; 596 pSDL_GL_SetAttribute SDL_GL_SetAttribute; 597 pSDL_GL_GetAttribute SDL_GL_GetAttribute; 598 pSDL_GL_CreateContext SDL_GL_CreateContext; 599 pSDL_GL_MakeCurrent SDL_GL_MakeCurrent; 600 pSDL_GL_GetCurrentWindow SDL_GL_GetCurrentWindow; 601 pSDL_GL_GetCurrentContext SDL_GL_GetCurrentContext; 602 pSDL_GL_SetSwapInterval SDL_GL_SetSwapInterval; 603 pSDL_GL_GetSwapInterval SDL_GL_GetSwapInterval; 604 pSDL_GL_SwapWindow SDL_GL_SwapWindow; 605 pSDL_GL_DeleteContext SDL_GL_DeleteContext; 606 } 607 608 static if(sdlSupport >= SDLSupport.sdl201) { 609 extern(C) @nogc nothrow { 610 alias pSDL_GL_GetDrawableSize = void function(SDL_Window* window, int* w, int* h); 611 } 612 613 __gshared { 614 pSDL_GL_GetDrawableSize SDL_GL_GetDrawableSize; 615 } 616 } 617 618 static if(sdlSupport >= SDLSupport.sdl202) { 619 extern(C) @nogc nothrow { 620 alias pSDL_GL_ResetAttributes = void function(); 621 } 622 623 __gshared { 624 pSDL_GL_ResetAttributes SDL_GL_ResetAttributes; 625 } 626 } 627 628 static if(sdlSupport >= SDLSupport.sdl204) { 629 extern(C) @nogc nothrow { 630 alias pSDL_GetDisplayDPI = int function(int displayIndex, float* ddpi, float* hdpi, float* vdpi); 631 alias pSDL_GetGrabbedWindow = SDL_Window* function(); 632 alias pSDL_SetWindowHitTest = int function(SDL_Window* window, SDL_HitTest callback, void* callback_data); 633 } 634 635 __gshared { 636 pSDL_GetDisplayDPI SDL_GetDisplayDPI; 637 pSDL_GetGrabbedWindow SDL_GetGrabbedWindow; 638 pSDL_SetWindowHitTest SDL_SetWindowHitTest; 639 } 640 } 641 642 static if(sdlSupport >= SDLSupport.sdl205) { 643 extern(C) @nogc nothrow { 644 alias pSDL_GetDisplayUsableBounds = int function(int displayIndex, SDL_Rect* rect); 645 alias pSDL_GetWindowBordersSize = int function(SDL_Window* window, int* top, int* left, int* bottom, int* right); 646 alias pSDL_GetWindowOpacity = int function(SDL_Window* window, float* opacity); 647 alias pSDL_SetWindowInputFocus = int function(SDL_Window* window); 648 alias pSDL_SetWindowModalFor = int function(SDL_Window* modal_window, SDL_Window* parent_window); 649 alias pSDL_SetWindowOpacity = int function(SDL_Window* window, float opacity); 650 alias pSDL_SetWindowResizable = void function(SDL_Window* window, SDL_bool resizable); 651 } 652 653 __gshared { 654 pSDL_GetDisplayUsableBounds SDL_GetDisplayUsableBounds; 655 pSDL_GetWindowBordersSize SDL_GetWindowBordersSize; 656 pSDL_GetWindowOpacity SDL_GetWindowOpacity; 657 pSDL_SetWindowInputFocus SDL_SetWindowInputFocus; 658 pSDL_SetWindowModalFor SDL_SetWindowModalFor; 659 pSDL_SetWindowOpacity SDL_SetWindowOpacity; 660 pSDL_SetWindowResizable SDL_SetWindowResizable; 661 } 662 } 663 664 static if(sdlSupport >= SDLSupport.sdl209) { 665 extern(C) @nogc nothrow { 666 alias pSDL_GetDisplayOrientation = SDL_DisplayOrientation function(int displayIndex); 667 } 668 669 __gshared { 670 pSDL_GetDisplayOrientation SDL_GetDisplayOrientation; 671 } 672 } 673 674 static if(sdlSupport >= SDLSupport.sdl2016) { 675 extern(C) @nogc nothrow { 676 alias pSDL_FlashWindow = int function(SDL_Window* window, SDL_FlashOperation operation); 677 alias pSDL_SetWindowAlwaysOnTop = void function(SDL_Window* window, SDL_bool on_top); 678 alias pSDL_SetWindowKeyboardGrab = void function(SDL_Window* window, SDL_bool grabbed); 679 alias pSDL_GetWindowKeyboardGrab = SDL_bool function(SDL_Window* window); 680 alias pSDL_SetWindowMouseGrab = void function(SDL_Window* window, SDL_bool grabbed); 681 alias pSDL_GetWindowMouseGrab = SDL_bool function(SDL_Window* window); 682 } 683 684 __gshared { 685 pSDL_FlashWindow SDL_FlashWindow; 686 pSDL_SetWindowAlwaysOnTop SDL_SetWindowAlwaysOnTop; 687 pSDL_SetWindowKeyboardGrab SDL_SetWindowKeyboardGrab; 688 pSDL_GetWindowKeyboardGrab SDL_GetWindowKeyboardGrab; 689 pSDL_SetWindowMouseGrab SDL_SetWindowMouseGrab; 690 pSDL_GetWindowMouseGrab SDL_GetWindowMouseGrab; 691 } 692 } 693 694 static if(sdlSupport >= SDLSupport.sdl2018) { 695 extern(C) @nogc nothrow { 696 alias pSDL_GetWindowICCProfile = void* function(SDL_Window* window, size_t* size); 697 alias pSDL_SetWindowMouseRect = int function(SDL_Window* window, const(SDL_Rect)* rect); 698 alias pSDL_GetWindowMouseRect = const(SDL_Rect)* function(SDL_Window* window); 699 } 700 701 __gshared { 702 pSDL_GetWindowICCProfile SDL_GetWindowICCProfile; 703 pSDL_SetWindowMouseRect SDL_SetWindowMouseRect; 704 pSDL_GetWindowMouseRect SDL_GetWindowMouseRect; 705 } 706 } 707 }