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.sdlevents; 8 9 import bindbc.sdl.config; 10 11 import bindbc.sdl.bind.sdlgesture, 12 bindbc.sdl.bind.sdljoystick, 13 bindbc.sdl.bind.sdlkeyboard, 14 bindbc.sdl.bind.sdlkeycode, 15 bindbc.sdl.bind.sdlstdinc, 16 bindbc.sdl.bind.sdlsyswm, 17 bindbc.sdl.bind.sdltouch, 18 bindbc.sdl.bind.sdlvideo; 19 20 enum { 21 SDL_RELEASED = 0, 22 SDL_PRESSED = 1, 23 } 24 25 static if(sdlSupport >= SDLSupport.sdl2014) { 26 enum SDL_EventType { 27 SDL_FIRSTEVENT = 0, 28 SDL_QUIT = 0x100, 29 SDL_APP_TERMINATING, 30 SDL_APP_LOWMEMORY, 31 SDL_APP_WILLENTERBACKGROUND, 32 SDL_APP_DIDENTERBACKGROUND, 33 SDL_APP_WILLENTERFOREGROUND, 34 SDL_APP_DIDENTERFOREGROUND, 35 SDL_LOCALECHANGED, 36 SDL_DISPLAYEVENT = 0x150, 37 SDL_WINDOWEVENT = 0x200, 38 SDL_SYSWMEVENT, 39 SDL_KEYDOWN = 0x300, 40 SDL_KEYUP, 41 SDL_TEXTEDITING, 42 SDL_TEXTINPUT, 43 SDL_KEYMAPCHANGED, 44 SDL_MOUSEMOTION = 0x400, 45 SDL_MOUSEBUTTONDOWN, 46 SDL_MOUSEBUTTONUP, 47 SDL_MOUSEWHEEL, 48 SDL_JOYAXISMOTION = 0x600, 49 SDL_JOYBALLMOTION, 50 SDL_JOYHATMOTION, 51 SDL_JOYBUTTONDOWN, 52 SDL_JOYBUTTONUP, 53 SDL_JOYDEVICEADDED, 54 SDL_JOYDEVICEREMOVED, 55 SDL_CONTROLLERAXISMOTION = 0x650, 56 SDL_CONTROLLERBUTTONDOWN, 57 SDL_CONTROLLERBUTTONUP, 58 SDL_CONTROLLERDEVICEADDED, 59 SDL_CONTROLLERDEVICEREMOVED, 60 SDL_CONTROLLERDEVICEREMAPPED, 61 SDL_CONTROLLERTOUCHPADDOWN, 62 SDL_CONTROLLERTOUCHPADMOTION, 63 SDL_CONTROLLERTOUCHPADUP, 64 SDL_CONTROLLERSENSORUPDATE, 65 SDL_FINGERDOWN = 0x700, 66 SDL_FINGERUP, 67 SDL_FINGERMOTION, 68 SDL_DOLLARGESTURE = 0x800, 69 SDL_DOLLARRECORD, 70 SDL_MULTIGESTURE, 71 SDL_CLIPBOARDUPDATE = 0x900, 72 SDL_DROPFILE = 0x1000, 73 SDL_DROPTEXT, 74 SDL_DROPBEGIN, 75 SDL_DROPCOMPLETE, 76 SDL_AUDIODEVICEADDED = 0x1100, 77 SDL_AUDIODEVICEREMOVED, 78 SDL_SENSORUPDATE = 0x1200, 79 SDL_RENDER_TARGETS_RESET = 0x2000, 80 SDL_RENDER_DEVICE_RESET, 81 SDL_USEREVENT = 0x8000, 82 SDL_LASTEVENT = 0xFFFF 83 } 84 } 85 else static if(sdlSupport >= SDLSupport.sdl209) { 86 enum SDL_EventType { 87 SDL_FIRSTEVENT = 0, 88 SDL_QUIT = 0x100, 89 SDL_APP_TERMINATING, 90 SDL_APP_LOWMEMORY, 91 SDL_APP_WILLENTERBACKGROUND, 92 SDL_APP_DIDENTERBACKGROUND, 93 SDL_APP_WILLENTERFOREGROUND, 94 SDL_APP_DIDENTERFOREGROUND, 95 SDL_DISPLAYEVENT = 0x150, 96 SDL_WINDOWEVENT = 0x200, 97 SDL_SYSWMEVENT, 98 SDL_KEYDOWN = 0x300, 99 SDL_KEYUP, 100 SDL_TEXTEDITING, 101 SDL_TEXTINPUT, 102 SDL_KEYMAPCHANGED, 103 SDL_MOUSEMOTION = 0x400, 104 SDL_MOUSEBUTTONDOWN, 105 SDL_MOUSEBUTTONUP, 106 SDL_MOUSEWHEEL, 107 SDL_JOYAXISMOTION = 0x600, 108 SDL_JOYBALLMOTION, 109 SDL_JOYHATMOTION, 110 SDL_JOYBUTTONDOWN, 111 SDL_JOYBUTTONUP, 112 SDL_JOYDEVICEADDED, 113 SDL_JOYDEVICEREMOVED, 114 SDL_CONTROLLERAXISMOTION = 0x650, 115 SDL_CONTROLLERBUTTONDOWN, 116 SDL_CONTROLLERBUTTONUP, 117 SDL_CONTROLLERDEVICEADDED, 118 SDL_CONTROLLERDEVICEREMOVED, 119 SDL_CONTROLLERDEVICEREMAPPED, 120 SDL_FINGERDOWN = 0x700, 121 SDL_FINGERUP, 122 SDL_FINGERMOTION, 123 SDL_DOLLARGESTURE = 0x800, 124 SDL_DOLLARRECORD, 125 SDL_MULTIGESTURE, 126 SDL_CLIPBOARDUPDATE = 0x900, 127 SDL_DROPFILE = 0x1000, 128 SDL_DROPTEXT, 129 SDL_DROPBEGIN, 130 SDL_DROPCOMPLETE, 131 SDL_AUDIODEVICEADDED = 0x1100, 132 SDL_AUDIODEVICEREMOVED, 133 SDL_SENSORUPDATE = 0x1200, 134 SDL_RENDER_TARGETS_RESET = 0x2000, 135 SDL_RENDER_DEVICE_RESET, 136 SDL_USEREVENT = 0x8000, 137 SDL_LASTEVENT = 0xFFFF 138 } 139 } 140 else static if(sdlSupport >= SDLSupport.sdl205) { 141 enum SDL_EventType { 142 SDL_FIRSTEVENT = 0, 143 SDL_QUIT = 0x100, 144 SDL_APP_TERMINATING, 145 SDL_APP_LOWMEMORY, 146 SDL_APP_WILLENTERBACKGROUND, 147 SDL_APP_DIDENTERBACKGROUND, 148 SDL_APP_WILLENTERFOREGROUND, 149 SDL_APP_DIDENTERFOREGROUND, 150 SDL_WINDOWEVENT = 0x200, 151 SDL_SYSWMEVENT, 152 SDL_KEYDOWN = 0x300, 153 SDL_KEYUP, 154 SDL_TEXTEDITING, 155 SDL_TEXTINPUT, 156 SDL_KEYMAPCHANGED, 157 SDL_MOUSEMOTION = 0x400, 158 SDL_MOUSEBUTTONDOWN, 159 SDL_MOUSEBUTTONUP, 160 SDL_MOUSEWHEEL, 161 SDL_JOYAXISMOTION = 0x600, 162 SDL_JOYBALLMOTION, 163 SDL_JOYHATMOTION, 164 SDL_JOYBUTTONDOWN, 165 SDL_JOYBUTTONUP, 166 SDL_JOYDEVICEADDED, 167 SDL_JOYDEVICEREMOVED, 168 SDL_CONTROLLERAXISMOTION = 0x650, 169 SDL_CONTROLLERBUTTONDOWN, 170 SDL_CONTROLLERBUTTONUP, 171 SDL_CONTROLLERDEVICEADDED, 172 SDL_CONTROLLERDEVICEREMOVED, 173 SDL_CONTROLLERDEVICEREMAPPED, 174 SDL_FINGERDOWN = 0x700, 175 SDL_FINGERUP, 176 SDL_FINGERMOTION, 177 SDL_DOLLARGESTURE = 0x800, 178 SDL_DOLLARRECORD, 179 SDL_MULTIGESTURE, 180 SDL_CLIPBOARDUPDATE = 0x900, 181 SDL_DROPFILE = 0x1000, 182 SDL_DROPTEXT, 183 SDL_DROPBEGIN, 184 SDL_DROPCOMPLETE, 185 SDL_AUDIODEVICEADDED = 0x1100, 186 SDL_AUDIODEVICEREMOVED, 187 SDL_RENDER_TARGETS_RESET = 0x2000, 188 SDL_RENDER_DEVICE_RESET, 189 SDL_USEREVENT = 0x8000, 190 SDL_LASTEVENT = 0xFFFF 191 } 192 } 193 else static if(sdlSupport >= SDLSupport.sdl204) { 194 enum SDL_EventType { 195 SDL_FIRSTEVENT = 0, 196 SDL_QUIT = 0x100, 197 SDL_APP_TERMINATING, 198 SDL_APP_LOWMEMORY, 199 SDL_APP_WILLENTERBACKGROUND, 200 SDL_APP_DIDENTERBACKGROUND, 201 SDL_APP_WILLENTERFOREGROUND, 202 SDL_APP_DIDENTERFOREGROUND, 203 SDL_WINDOWEVENT = 0x200, 204 SDL_SYSWMEVENT, 205 SDL_KEYDOWN = 0x300, 206 SDL_KEYUP, 207 SDL_TEXTEDITING, 208 SDL_TEXTINPUT, 209 SDL_KEYMAPCHANGED, 210 SDL_MOUSEMOTION = 0x400, 211 SDL_MOUSEBUTTONDOWN, 212 SDL_MOUSEBUTTONUP, 213 SDL_MOUSEWHEEL, 214 SDL_JOYAXISMOTION = 0x600, 215 SDL_JOYBALLMOTION, 216 SDL_JOYHATMOTION, 217 SDL_JOYBUTTONDOWN, 218 SDL_JOYBUTTONUP, 219 SDL_JOYDEVICEADDED, 220 SDL_JOYDEVICEREMOVED, 221 SDL_CONTROLLERAXISMOTION = 0x650, 222 SDL_CONTROLLERBUTTONDOWN, 223 SDL_CONTROLLERBUTTONUP, 224 SDL_CONTROLLERDEVICEADDED, 225 SDL_CONTROLLERDEVICEREMOVED, 226 SDL_CONTROLLERDEVICEREMAPPED, 227 SDL_FINGERDOWN = 0x700, 228 SDL_FINGERUP, 229 SDL_FINGERMOTION, 230 SDL_DOLLARGESTURE = 0x800, 231 SDL_DOLLARRECORD, 232 SDL_MULTIGESTURE, 233 SDL_CLIPBOARDUPDATE = 0x900, 234 SDL_DROPFILE = 0x1000, 235 SDL_AUDIODEVICEADDED = 0x1100, 236 SDL_AUDIODEVICEREMOVED, 237 SDL_RENDER_TARGETS_RESET = 0x2000, 238 SDL_RENDER_DEVICE_RESET, 239 SDL_USEREVENT = 0x8000, 240 SDL_LASTEVENT = 0xFFFF 241 } 242 } 243 else static if(sdlSupport >= SDLSupport.sdl201) { 244 enum SDL_EventType { 245 SDL_FIRSTEVENT = 0, 246 SDL_QUIT = 0x100, 247 SDL_APP_TERMINATING, 248 SDL_APP_LOWMEMORY, 249 SDL_APP_WILLENTERBACKGROUND, 250 SDL_APP_DIDENTERBACKGROUND, 251 SDL_APP_WILLENTERFOREGROUND, 252 SDL_APP_DIDENTERFOREGROUND, 253 SDL_WINDOWEVENT = 0x200, 254 SDL_SYSWMEVENT, 255 SDL_KEYDOWN = 0x300, 256 SDL_KEYUP, 257 SDL_TEXTEDITING, 258 SDL_TEXTINPUT, 259 SDL_MOUSEMOTION = 0x400, 260 SDL_MOUSEBUTTONDOWN, 261 SDL_MOUSEBUTTONUP, 262 SDL_MOUSEWHEEL, 263 SDL_JOYAXISMOTION = 0x600, 264 SDL_JOYBALLMOTION, 265 SDL_JOYHATMOTION, 266 SDL_JOYBUTTONDOWN, 267 SDL_JOYBUTTONUP, 268 SDL_JOYDEVICEADDED, 269 SDL_JOYDEVICEREMOVED, 270 SDL_CONTROLLERAXISMOTION = 0x650, 271 SDL_CONTROLLERBUTTONDOWN, 272 SDL_CONTROLLERBUTTONUP, 273 SDL_CONTROLLERDEVICEADDED, 274 SDL_CONTROLLERDEVICEREMOVED, 275 SDL_CONTROLLERDEVICEREMAPPED, 276 SDL_FINGERDOWN = 0x700, 277 SDL_FINGERUP, 278 SDL_FINGERMOTION, 279 SDL_DOLLARGESTURE = 0x800, 280 SDL_DOLLARRECORD, 281 SDL_MULTIGESTURE, 282 SDL_CLIPBOARDUPDATE = 0x900, 283 SDL_DROPFILE = 0x1000, 284 SDL_RENDER_TARGETS_RESET = 0x2000, 285 SDL_USEREVENT = 0x8000, 286 SDL_LASTEVENT = 0xFFFF 287 } 288 } 289 else { 290 enum SDL_EventType { 291 SDL_FIRSTEVENT = 0, 292 SDL_QUIT = 0x100, 293 SDL_APP_TERMINATING, 294 SDL_APP_LOWMEMORY, 295 SDL_APP_WILLENTERBACKGROUND, 296 SDL_APP_DIDENTERBACKGROUND, 297 SDL_APP_WILLENTERFOREGROUND, 298 SDL_APP_DIDENTERFOREGROUND, 299 SDL_WINDOWEVENT = 0x200, 300 SDL_SYSWMEVENT, 301 SDL_KEYDOWN = 0x300, 302 SDL_KEYUP, 303 SDL_TEXTEDITING, 304 SDL_TEXTINPUT, 305 SDL_MOUSEMOTION = 0x400, 306 SDL_MOUSEBUTTONDOWN, 307 SDL_MOUSEBUTTONUP, 308 SDL_MOUSEWHEEL, 309 SDL_JOYAXISMOTION = 0x600, 310 SDL_JOYBALLMOTION, 311 SDL_JOYHATMOTION, 312 SDL_JOYBUTTONDOWN, 313 SDL_JOYBUTTONUP, 314 SDL_JOYDEVICEADDED, 315 SDL_JOYDEVICEREMOVED, 316 SDL_CONTROLLERAXISMOTION = 0x650, 317 SDL_CONTROLLERBUTTONDOWN, 318 SDL_CONTROLLERBUTTONUP, 319 SDL_CONTROLLERDEVICEADDED, 320 SDL_CONTROLLERDEVICEREMOVED, 321 SDL_CONTROLLERDEVICEREMAPPED, 322 SDL_FINGERDOWN = 0x700, 323 SDL_FINGERUP, 324 SDL_FINGERMOTION, 325 SDL_DOLLARGESTURE = 0x800, 326 SDL_DOLLARRECORD, 327 SDL_MULTIGESTURE, 328 SDL_CLIPBOARDUPDATE = 0x900, 329 SDL_DROPFILE = 0x1000, 330 SDL_USEREVENT = 0x8000, 331 SDL_LASTEVENT = 0xFFFF 332 } 333 } 334 mixin(expandEnum!SDL_EventType); 335 336 struct SDL_CommonEvent { 337 SDL_EventType type; 338 uint timestamp; 339 } 340 341 static if(sdlSupport >= SDLSupport.sdl209) { 342 struct SDL_DisplayEvent { 343 SDL_EventType type; 344 uint timestamp; 345 uint display; 346 ubyte event; 347 ubyte padding1; 348 ubyte padding2; 349 ubyte padding3; 350 int data1; 351 } 352 } 353 354 struct SDL_WindowEvent { 355 SDL_EventType type; 356 uint timestamp; 357 uint windowID; 358 SDL_WindowEventID event; 359 ubyte padding1; 360 ubyte padding2; 361 ubyte padding3; 362 int data1; 363 int data2; 364 } 365 366 struct SDL_KeyboardEvent { 367 SDL_EventType type; 368 uint timestamp; 369 uint windowID; 370 ubyte state; 371 ubyte repeat; 372 ubyte padding2; 373 ubyte padding3; 374 SDL_Keysym keysym; 375 } 376 377 enum SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32; 378 struct SDL_TextEditingEvent { 379 SDL_EventType type; 380 uint timestamp; 381 uint windowID; 382 char[SDL_TEXTEDITINGEVENT_TEXT_SIZE] text; 383 int start; 384 int length; 385 } 386 387 enum SDL_TEXTINPUTEVENT_TEXT_SIZE = 32; 388 struct SDL_TextInputEvent { 389 SDL_EventType type; 390 uint timestamp; 391 uint windowID; 392 char[SDL_TEXTINPUTEVENT_TEXT_SIZE] text; 393 } 394 395 struct SDL_MouseMotionEvent { 396 SDL_EventType type; 397 uint timestamp; 398 uint windowID; 399 uint which; 400 uint state; 401 int x; 402 int y; 403 int xrel; 404 int yrel; 405 } 406 407 struct SDL_MouseButtonEvent { 408 SDL_EventType type; 409 uint timestamp; 410 uint windowID; 411 uint which; 412 ubyte button; 413 ubyte state; 414 static if(sdlSupport == SDLSupport.sdl200) { 415 ubyte padding1; 416 ubyte padding2; 417 } 418 else { 419 ubyte clicks; 420 ubyte padding1; 421 } 422 int x; 423 int y; 424 } 425 426 struct SDL_MouseWheelEvent { 427 SDL_EventType type; 428 uint timestamp; 429 uint windowID; 430 uint which; 431 int x; 432 int y; 433 static if(sdlSupport >= SDLSupport.sdl204) { 434 uint direction; 435 } 436 static if(sdlSupport >= SDLSupport.sdl2018) { 437 float preciseX; 438 float preciseY; 439 } 440 } 441 442 struct SDL_JoyAxisEvent { 443 SDL_EventType type; 444 uint timestamp; 445 SDL_JoystickID which; 446 ubyte axis; 447 ubyte padding1; 448 ubyte padding2; 449 ubyte padding3; 450 short value; 451 ushort padding4; 452 } 453 454 struct SDL_JoyBallEvent { 455 SDL_EventType type; 456 uint timestamp; 457 SDL_JoystickID which; 458 ubyte ball; 459 ubyte padding1; 460 ubyte padding2; 461 ubyte padding3; 462 short xrel; 463 short yrel; 464 } 465 466 struct SDL_JoyHatEvent { 467 SDL_EventType type; 468 uint timestamp; 469 SDL_JoystickID which; 470 ubyte hat; 471 ubyte value; 472 ubyte padding1; 473 ubyte padding2; 474 } 475 476 struct SDL_JoyButtonEvent { 477 SDL_EventType type; 478 uint timestamp; 479 SDL_JoystickID which; 480 ubyte button; 481 ubyte state; 482 ubyte padding1; 483 ubyte padding2; 484 } 485 486 struct SDL_JoyDeviceEvent { 487 SDL_EventType type; 488 uint timestamp; 489 int which; 490 } 491 492 struct SDL_ControllerAxisEvent { 493 SDL_EventType type; 494 uint timestamp; 495 SDL_JoystickID which; 496 ubyte axis; 497 ubyte padding1; 498 ubyte padding2; 499 ubyte padding3; 500 short value; 501 ushort padding4; 502 } 503 504 struct SDL_ControllerButtonEvent { 505 SDL_EventType type; 506 uint timestamp; 507 SDL_JoystickID which; 508 ubyte button; 509 ubyte state; 510 ubyte padding1; 511 ubyte padding2; 512 } 513 514 struct SDL_ControllerDeviceEvent { 515 SDL_EventType type; 516 uint timestamp; 517 int which; 518 } 519 520 static if(sdlSupport >= SDLSupport.sdl2014) { 521 struct SDL_ControllerTouchpadEvent { 522 uint type; 523 uint timestamp; 524 SDL_JoystickID which; 525 int touchpad; 526 int finger; 527 float x; 528 float y; 529 float pressure; 530 } 531 532 struct SDL_ControllerSensorEvent { 533 uint type; 534 uint timestamp; 535 SDL_JoystickID which; 536 int sensor; 537 float[3] data; 538 } 539 } 540 541 static if(sdlSupport >= SDLSupport.sdl204) { 542 struct SDL_AudioDeviceEvent { 543 uint type; 544 uint timestamp; 545 uint which; 546 ubyte iscapture; 547 ubyte padding1; 548 ubyte padding2; 549 ubyte padding3; 550 } 551 } 552 553 struct SDL_TouchFingerEvent { 554 SDL_EventType type; 555 uint timestamp; 556 SDL_TouchID touchId; 557 SDL_FingerID fingerId; 558 float x; 559 float y; 560 float dx; 561 float dy; 562 float pressure; 563 564 static if(sdlSupport >= SDLSupport.sdl2012) { 565 uint windowID; 566 } 567 } 568 569 struct SDL_MultiGestureEvent { 570 SDL_EventType type; 571 uint timestamp; 572 SDL_TouchID touchId; 573 float dTheta; 574 float dDist; 575 float x; 576 float y; 577 ushort numFingers; 578 ushort padding; 579 } 580 581 struct SDL_DollarGestureEvent { 582 SDL_EventType type; 583 uint timestamp; 584 SDL_TouchID touchId; 585 SDL_GestureID gestureId; 586 uint numFingers; 587 float error; 588 float x; 589 float y; 590 } 591 592 struct SDL_DropEvent { 593 SDL_EventType type; 594 uint timestamp; 595 char* file; 596 static if(sdlSupport >= SDLSupport.sdl205) { 597 uint windowID; 598 } 599 } 600 601 struct SDL_SensorEvent { 602 SDL_EventType type; 603 uint timestamp; 604 int which; 605 float[6] data; 606 } 607 608 struct SDL_QuitEvent { 609 SDL_EventType type; 610 uint timestamp; 611 } 612 613 struct SDL_OSEvent { 614 SDL_EventType type; 615 uint timestamp; 616 } 617 618 struct SDL_UserEvent { 619 SDL_EventType type; 620 uint timestamp; 621 uint windowID; 622 int code; 623 void* data1; 624 void* data2; 625 } 626 627 struct SDL_SysWMEvent { 628 SDL_EventType type; 629 uint timestamp; 630 SDL_SysWMmsg* msg; 631 } 632 633 union SDL_Event { 634 SDL_EventType type; 635 SDL_CommonEvent common; 636 static if(sdlSupport >= SDLSupport.sdl209) { 637 SDL_DisplayEvent display; 638 } 639 SDL_WindowEvent window; 640 SDL_KeyboardEvent key; 641 SDL_TextEditingEvent edit; 642 SDL_TextInputEvent text; 643 SDL_MouseMotionEvent motion; 644 SDL_MouseButtonEvent button; 645 SDL_MouseWheelEvent wheel; 646 SDL_JoyAxisEvent jaxis; 647 SDL_JoyBallEvent jball; 648 SDL_JoyHatEvent jhat; 649 SDL_JoyButtonEvent jbutton; 650 SDL_JoyDeviceEvent jdevice; 651 SDL_ControllerAxisEvent caxis; 652 SDL_ControllerButtonEvent cbutton; 653 SDL_ControllerDeviceEvent cdevice; 654 static if(sdlSupport >= SDLSupport.sdl2014) { 655 SDL_ControllerTouchpadEvent ctouchpad; 656 SDL_ControllerSensorEvent csensor; 657 } 658 static if(sdlSupport >= SDLSupport.sdl204) { 659 SDL_AudioDeviceEvent adevice; 660 } 661 static if(sdlSupport >= SDLSupport.sdl209) { 662 SDL_SensorEvent sensor; 663 } 664 SDL_QuitEvent quit; 665 SDL_UserEvent user; 666 SDL_SysWMEvent syswm; 667 SDL_TouchFingerEvent tfinger; 668 SDL_MultiGestureEvent mgesture; 669 SDL_DollarGestureEvent dgesture; 670 SDL_DropEvent drop; 671 672 ubyte[56] padding; 673 } 674 675 enum SDL_eventaction { 676 SDL_ADDEVENT, 677 SDL_PEEKEVENT, 678 SDL_GETEVENT 679 } 680 alias SDL_EventAction = SDL_eventaction; 681 mixin(expandEnum!SDL_EventAction); 682 683 extern(C) nothrow alias SDL_EventFilter = int function(void* userdata, SDL_Event* event); 684 685 enum { 686 SDL_QUERY = -1, 687 SDL_IGNORE = 0, 688 SDL_DISABLE = 0, 689 SDL_ENABLE = 1, 690 } 691 692 @nogc nothrow { 693 int SDL_GetEventState(SDL_EventType type) { 694 pragma(inline, true); 695 return SDL_EventState(type, SDL_QUERY); 696 } 697 698 // This is implemented in SDL_quit.h, but works better here. 699 bool SDL_QuitRequested() { 700 pragma(inline, true); 701 SDL_PumpEvents(); 702 return SDL_PeepEvents(null,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0; 703 } 704 } 705 706 static if(staticBinding) { 707 extern(C) @nogc nothrow { 708 void SDL_PumpEvents(); 709 int SDL_PeepEvents(SDL_Event* events, int numevents, SDL_eventaction action, uint minType, uint maxType); 710 SDL_bool SDL_HasEvent(uint type); 711 SDL_bool SDL_HasEvents(uint minType, uint maxType); 712 void SDL_FlushEvent(uint type); 713 void SDL_FlushEvents(uint minType, uint maxType); 714 int SDL_PollEvent(SDL_Event* event); 715 int SDL_WaitEvent(SDL_Event* event); 716 int SDL_WaitEventTimeout(SDL_Event* event, int timeout); 717 int SDL_PushEvent(SDL_Event* event); 718 void SDL_SetEventFilter(SDL_EventFilter filter, void* userdata); 719 SDL_bool SDL_GetEventFilter(SDL_EventFilter* filter, void** userdata); 720 void SDL_AddEventWatch(SDL_EventFilter filter, void* userdata); 721 void SDL_DelEventWatch(SDL_EventFilter filter, void* userdata); 722 void SDL_FilterEvents(SDL_EventFilter filter, void* userdata); 723 ubyte SDL_EventState(uint type, int state); 724 uint SDL_RegisterEvents(int numevents); 725 } 726 } 727 else { 728 extern(C) @nogc nothrow { 729 alias pSDL_PumpEvents = void function(); 730 alias pSDL_PeepEvents = int function(SDL_Event* events, int numevents, SDL_eventaction action, uint minType, uint maxType); 731 alias pSDL_HasEvent = SDL_bool function(uint type); 732 alias pSDL_HasEvents = SDL_bool function(uint minType, uint maxType); 733 alias pSDL_FlushEvent = void function(uint type); 734 alias pSDL_FlushEvents = void function(uint minType, uint maxType); 735 alias pSDL_PollEvent = int function(SDL_Event* event); 736 alias pSDL_WaitEvent = int function(SDL_Event* event); 737 alias pSDL_WaitEventTimeout = int function(SDL_Event* event, int timeout); 738 alias pSDL_PushEvent = int function(SDL_Event* event); 739 alias pSDL_SetEventFilter = void function(SDL_EventFilter filter, void* userdata); 740 alias pSDL_GetEventFilter = SDL_bool function(SDL_EventFilter* filter, void** userdata); 741 alias pSDL_AddEventWatch = void function(SDL_EventFilter filter, void* userdata); 742 alias pSDL_DelEventWatch = void function(SDL_EventFilter filter, void* userdata); 743 alias pSDL_FilterEvents = void function(SDL_EventFilter filter, void* userdata); 744 alias pSDL_EventState = ubyte function(uint type, int state); 745 alias pSDL_RegisterEvents = uint function(int numevents); 746 } 747 748 __gshared { 749 pSDL_PumpEvents SDL_PumpEvents; 750 pSDL_PeepEvents SDL_PeepEvents; 751 pSDL_HasEvent SDL_HasEvent; 752 pSDL_HasEvents SDL_HasEvents; 753 pSDL_FlushEvent SDL_FlushEvent; 754 pSDL_FlushEvents SDL_FlushEvents; 755 pSDL_PollEvent SDL_PollEvent; 756 pSDL_WaitEvent SDL_WaitEvent; 757 pSDL_WaitEventTimeout SDL_WaitEventTimeout; 758 pSDL_PushEvent SDL_PushEvent; 759 pSDL_SetEventFilter SDL_SetEventFilter; 760 pSDL_GetEventFilter SDL_GetEventFilter; 761 pSDL_AddEventWatch SDL_AddEventWatch; 762 pSDL_DelEventWatch SDL_DelEventWatch; 763 pSDL_FilterEvents SDL_FilterEvents; 764 pSDL_EventState SDL_EventState; 765 pSDL_RegisterEvents SDL_RegisterEvents; 766 } 767 }