1 /** 2 * このモジュールをユーザーが直接使用することはありません。 3 */ 4 5 module grape.event; 6 7 import derelict.sdl2.sdl; 8 9 enum { 10 /* 11 SDL_FIRSTEVENT, 12 SDL_QUIT, 13 SDL_WINDOWEVENT, 14 SDL_SYSWMEVENT, 15 */ 16 KeyDown = SDL_KEYDOWN, 17 KeyUp = SDL_KEYUP, 18 /* 19 SDL_TEXTEDITING, 20 SDL_TEXTINPUT, 21 */ 22 MouseMotion = SDL_MOUSEMOTION, 23 MouseButtonDown = SDL_MOUSEBUTTONDOWN, 24 MouseButtonUp = SDL_MOUSEBUTTONUP, 25 MouseWheel = SDL_MOUSEWHEEL, 26 JoyAxisMotion = SDL_JOYAXISMOTION, 27 JoyBallMotion = SDL_JOYBALLMOTION, 28 JoyHatMotion = SDL_JOYHATMOTION, 29 JoyButtonDown = SDL_JOYBUTTONDOWN, 30 JoyButtonUp = SDL_JOYBUTTONUP, 31 JoyDeviceAdded = SDL_JOYDEVICEADDED, 32 JoyDeviceRemoved = SDL_JOYDEVICEREMOVED, 33 /* 34 SDL_CONTROLLERAXISMOTION, 35 SDL_CONTROLLERBUTTONDOWN, 36 SDL_CONTROLLERBUTTONUP, 37 SDL_CONTROLLERDEVICEADDED, 38 SDL_CONTROLLERDEVICEREMOVED, 39 SDL_CONTROLLERDEVICEREMAPPED, 40 SDL_FINGERDOWN, 41 SDL_FINGERUP, 42 SDL_FINGERMOTION, 43 SDL_DOLLARGESTURE, 44 SDL_DOLLARRECORD, 45 SDL_MULTIGESTURE, 46 SDL_CLIPBOARDUPDATE, 47 SDL_DROPFILE, 48 SDL_USEREVENT, 49 SDL_LASTEVENT 50 */ 51 } 52 53 class Event { 54 private @disable this() {} 55 56 public: 57 @property { 58 static bool is_happening() { 59 return SDL_PollEvent(&_event) ? true : false; 60 } 61 62 static Uint32 type() { 63 return _event.type; 64 } 65 66 mixin KeyEvent; 67 mixin JoyEvent; 68 } 69 70 private: 71 static SDL_Event _event; 72 } 73 74 mixin template KeyEvent() { 75 static SDL_Keysym keysym() { 76 return _event.key.keysym; 77 } 78 79 static SDL_Scancode scancode() { 80 return keysym.scancode; 81 } 82 83 static SDL_Keycode keycode() { 84 return keysym.sym; 85 } 86 } 87 88 mixin template JoyEvent() { 89 static Uint8 button() { 90 return _event.jbutton.button; 91 } 92 93 static Uint8 hat() { 94 return _event.jhat.hat; 95 } 96 97 static Uint8 axis() { 98 return _event.jaxis.axis; 99 } 100 } 101