407 lines
14 KiB
Python
407 lines
14 KiB
Python
from ctypes import c_char, c_char_p, c_float, c_void_p, c_int, Structure, \
|
|
Union, CFUNCTYPE, POINTER
|
|
from .dll import _bind
|
|
from .stdinc import Sint16, Sint32, Uint8, Uint16, Uint32, SDL_bool
|
|
from .keyboard import SDL_Keysym
|
|
from .joystick import SDL_JoystickID
|
|
from .touch import SDL_FingerID, SDL_TouchID
|
|
from .gesture import SDL_GestureID
|
|
|
|
__all__ = ["SDL_FIRSTEVENT", "SDL_QUIT", "SDL_APP_TERMINATING",
|
|
"SDL_APP_LOWMEMORY", "SDL_APP_WILLENTERBACKGROUND",
|
|
"SDL_APP_DIDENTERBACKGROUND", "SDL_APP_WILLENTERFOREGROUND",
|
|
"SDL_APP_DIDENTERFOREGROUND", "SDL_WINDOWEVENT", "SDL_SYSWMEVENT",
|
|
"SDL_KEYDOWN", "SDL_KEYUP", "SDL_TEXTEDITING", "SDL_TEXTINPUT",
|
|
"SDL_MOUSEMOTION", "SDL_MOUSEBUTTONDOWN", "SDL_MOUSEBUTTONUP",
|
|
"SDL_MOUSEWHEEL", "SDL_JOYAXISMOTION", "SDL_JOYBALLMOTION",
|
|
"SDL_JOYHATMOTION", "SDL_JOYBUTTONDOWN", "SDL_JOYBUTTONUP",
|
|
"SDL_JOYDEVICEADDED", "SDL_JOYDEVICEREMOVED", "SDL_KEYMAPCHANGED",
|
|
"SDL_CONTROLLERAXISMOTION", "SDL_CONTROLLERBUTTONDOWN",
|
|
"SDL_CONTROLLERBUTTONUP", "SDL_CONTROLLERDEVICEADDED",
|
|
"SDL_CONTROLLERDEVICEREMOVED", "SDL_CONTROLLERDEVICEREMAPPED",
|
|
"SDL_FINGERDOWN", "SDL_FINGERUP", "SDL_FINGERMOTION",
|
|
"SDL_DOLLARGESTURE", "SDL_DOLLARRECORD", "SDL_MULTIGESTURE",
|
|
"SDL_CLIPBOARDUPDATE", "SDL_DROPFILE", "SDL_DROPTEXT",
|
|
"SDL_DROPBEGIN", "SDL_DROPCOMPLETE",
|
|
"SDL_RENDER_TARGETS_RESET", "SDL_RENDER_DEVICE_RESET",
|
|
"SDL_USEREVENT", "SDL_LASTEVENT", "SDL_AUDIODEVICEADDED",
|
|
"SDL_AUDIODEVICEREMOVED",
|
|
"SDL_EventType","SDL_CommonEvent", "SDL_WindowEvent",
|
|
"SDL_KeyboardEvent", "SDL_TEXTEDITINGEVENT_TEXT_SIZE",
|
|
"SDL_TextEditingEvent", "SDL_TEXTINPUTEVENT_TEXT_SIZE",
|
|
"SDL_TextInputEvent", "SDL_MouseMotionEvent", "SDL_MouseButtonEvent",
|
|
"SDL_MouseWheelEvent", "SDL_JoyAxisEvent", "SDL_JoyBallEvent",
|
|
"SDL_JoyHatEvent", "SDL_JoyButtonEvent", "SDL_JoyDeviceEvent",
|
|
"SDL_ControllerAxisEvent", "SDL_ControllerButtonEvent",
|
|
"SDL_ControllerDeviceEvent", "SDL_TouchFingerEvent",
|
|
"SDL_MultiGestureEvent", "SDL_DollarGestureEvent", "SDL_DropEvent",
|
|
"SDL_QuitEvent", "SDL_UserEvent", "SDL_SysWMmsg", "SDL_SysWMEvent",
|
|
"SDL_Event", "SDL_PumpEvents", "SDL_ADDEVENT", "SDL_PEEKEVENT",
|
|
"SDL_GETEVENT", "SDL_eventaction", "SDL_PeepEvents", "SDL_HasEvent",
|
|
"SDL_HasEvents", "SDL_FlushEvent", "SDL_FlushEvents",
|
|
"SDL_PollEvent", "SDL_WaitEvent", "SDL_WaitEventTimeout",
|
|
"SDL_PushEvent", "SDL_EventFilter", "SDL_SetEventFilter",
|
|
"SDL_GetEventFilter", "SDL_AddEventWatch", "SDL_DelEventWatch",
|
|
"SDL_FilterEvents", "SDL_QUERY", "SDL_IGNORE", "SDL_DISABLE",
|
|
"SDL_ENABLE", "SDL_EventState", "SDL_GetEventState",
|
|
"SDL_RegisterEvents", "SDL_QuitRequested", "SDL_PRESSED",
|
|
"SDL_RELEASED"
|
|
]
|
|
|
|
SDL_FIRSTEVENT = 0
|
|
SDL_QUIT = 0x100
|
|
SDL_APP_TERMINATING = 0x101
|
|
SDL_APP_LOWMEMORY = 0x102
|
|
SDL_APP_WILLENTERBACKGROUND = 0x103
|
|
SDL_APP_DIDENTERBACKGROUND = 0x104
|
|
SDL_APP_WILLENTERFOREGROUND = 0x105
|
|
SDL_APP_DIDENTERFOREGROUND = 0x106
|
|
SDL_WINDOWEVENT = 0x200
|
|
SDL_SYSWMEVENT = 0x201
|
|
SDL_KEYDOWN = 0x300
|
|
SDL_KEYUP = 0x301
|
|
SDL_TEXTEDITING = 0x302
|
|
SDL_TEXTINPUT = 0x303
|
|
SDL_KEYMAPCHANGED = 0x304
|
|
SDL_MOUSEMOTION = 0x400
|
|
SDL_MOUSEBUTTONDOWN = 0x401
|
|
SDL_MOUSEBUTTONUP = 0x402
|
|
SDL_MOUSEWHEEL = 0x403
|
|
SDL_JOYAXISMOTION = 0x600
|
|
SDL_JOYBALLMOTION = 0x601
|
|
SDL_JOYHATMOTION = 0x602
|
|
SDL_JOYBUTTONDOWN = 0x603
|
|
SDL_JOYBUTTONUP = 0x604
|
|
SDL_JOYDEVICEADDED = 0x605
|
|
SDL_JOYDEVICEREMOVED = 0x606
|
|
SDL_CONTROLLERAXISMOTION = 0x650
|
|
SDL_CONTROLLERBUTTONDOWN = 0x651
|
|
SDL_CONTROLLERBUTTONUP = 0x652
|
|
SDL_CONTROLLERDEVICEADDED = 0x653
|
|
SDL_CONTROLLERDEVICEREMOVED = 0x654
|
|
SDL_CONTROLLERDEVICEREMAPPED = 0x655
|
|
SDL_FINGERDOWN = 0x700
|
|
SDL_FINGERUP = 0x701
|
|
SDL_FINGERMOTION = 0x702
|
|
SDL_DOLLARGESTURE = 0x800
|
|
SDL_DOLLARRECORD = 0x801
|
|
SDL_MULTIGESTURE = 0x802
|
|
SDL_CLIPBOARDUPDATE = 0x900
|
|
SDL_DROPFILE = 0x1000
|
|
SDL_DROPTEXT = 0x1001
|
|
SDL_DROPBEGIN = 0x1002
|
|
SDL_DROPCOMPLETE = 0x1003
|
|
SDL_AUDIODEVICEADDED = 0x1100
|
|
SDL_AUDIODEVICEREMOVED = 0x1101
|
|
SDL_RENDER_TARGETS_RESET = 0x2000
|
|
SDL_RENDER_DEVICE_RESET = 0x2001
|
|
SDL_USEREVENT = 0x8000
|
|
SDL_LASTEVENT = 0xFFFF
|
|
SDL_EventType = c_int
|
|
|
|
SDL_RELEASED = 0
|
|
SDL_PRESSED = 1
|
|
|
|
|
|
class SDL_CommonEvent(Structure):
|
|
_fields_ = [("type", Uint32), ("timestamp", Uint32)]
|
|
|
|
class SDL_WindowEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("event", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8),
|
|
("data1", Sint32),
|
|
("data2", Sint32)
|
|
]
|
|
|
|
class SDL_KeyboardEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("state", Uint8),
|
|
("repeat", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8),
|
|
("keysym", SDL_Keysym)
|
|
]
|
|
|
|
SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32
|
|
|
|
class SDL_TextEditingEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("text", (c_char * SDL_TEXTEDITINGEVENT_TEXT_SIZE)),
|
|
("start", Sint32),
|
|
("length", Sint32)
|
|
]
|
|
|
|
SDL_TEXTINPUTEVENT_TEXT_SIZE = 32
|
|
class SDL_TextInputEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("text", (c_char * SDL_TEXTINPUTEVENT_TEXT_SIZE))
|
|
]
|
|
|
|
class SDL_MouseMotionEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("which", Uint32),
|
|
("state", Uint32),
|
|
("x", Sint32),
|
|
("y", Sint32),
|
|
("xrel", Sint32),
|
|
("yrel", Sint32)
|
|
]
|
|
|
|
class SDL_MouseButtonEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("which", Uint32),
|
|
("button", Uint8),
|
|
("state", Uint8),
|
|
("clicks", Uint8),
|
|
("padding1", Uint8),
|
|
("x", Sint32),
|
|
("y", Sint32)
|
|
]
|
|
|
|
class SDL_MouseWheelEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("which", Uint32),
|
|
("x", Sint32),
|
|
("y", Sint32),
|
|
("direction", Uint32)
|
|
]
|
|
|
|
class SDL_JoyAxisEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("axis", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8),
|
|
("value", Sint16),
|
|
("padding4", Uint16)
|
|
]
|
|
|
|
class SDL_JoyBallEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("ball", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8),
|
|
("xrel", Sint16),
|
|
("yrel", Sint16)
|
|
]
|
|
|
|
class SDL_JoyHatEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("hat", Uint8),
|
|
("value", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8)
|
|
]
|
|
|
|
class SDL_JoyButtonEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("button", Uint8),
|
|
("state", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8)
|
|
]
|
|
|
|
class SDL_JoyDeviceEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", Sint32)
|
|
]
|
|
|
|
class SDL_ControllerAxisEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("axis", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8),
|
|
("value", Sint16),
|
|
("padding4", Uint16)
|
|
]
|
|
|
|
class SDL_ControllerButtonEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", SDL_JoystickID),
|
|
("button", Uint8),
|
|
("state", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8)
|
|
]
|
|
|
|
class SDL_ControllerDeviceEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", Sint32)
|
|
]
|
|
|
|
class SDL_AudioDeviceEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("which", Uint32),
|
|
("iscapture", Uint8),
|
|
("padding1", Uint8),
|
|
("padding2", Uint8),
|
|
("padding3", Uint8)
|
|
]
|
|
|
|
class SDL_TouchFingerEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("touchId", SDL_TouchID),
|
|
("fingerId", SDL_FingerID),
|
|
("x", c_float),
|
|
("y", c_float),
|
|
("dx", c_float),
|
|
("dy", c_float),
|
|
("pressure", c_float)
|
|
]
|
|
|
|
class SDL_MultiGestureEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("touchId", SDL_TouchID),
|
|
("dTheta", c_float),
|
|
("dDist", c_float),
|
|
("x", c_float),
|
|
("y", c_float),
|
|
("numFingers", Uint16),
|
|
("padding", Uint16)
|
|
]
|
|
|
|
class SDL_DollarGestureEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("touchId", SDL_TouchID),
|
|
("gestureId", SDL_GestureID),
|
|
("numFingers", Uint32),
|
|
("error", c_float),
|
|
("x", c_float),
|
|
("y", c_float)
|
|
]
|
|
|
|
class SDL_DropEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("file", c_char_p),
|
|
("windowID", Uint32)
|
|
]
|
|
|
|
class SDL_QuitEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32)
|
|
]
|
|
|
|
class SDL_OSEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32)
|
|
]
|
|
|
|
class SDL_UserEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("windowID", Uint32),
|
|
("code", Sint32),
|
|
("data1", c_void_p),
|
|
("data2", c_void_p)
|
|
]
|
|
|
|
# TODO
|
|
class SDL_SysWMmsg(Structure):
|
|
pass
|
|
|
|
class SDL_SysWMEvent(Structure):
|
|
_fields_ = [("type", Uint32),
|
|
("timestamp", Uint32),
|
|
("msg", POINTER(SDL_SysWMmsg))
|
|
]
|
|
|
|
class SDL_Event(Union):
|
|
_fields_ = [("type", Uint32),
|
|
("common", SDL_CommonEvent),
|
|
("window", SDL_WindowEvent),
|
|
("key", SDL_KeyboardEvent),
|
|
("edit", SDL_TextEditingEvent),
|
|
("text", SDL_TextInputEvent),
|
|
("motion", SDL_MouseMotionEvent),
|
|
("button", SDL_MouseButtonEvent),
|
|
("wheel", SDL_MouseWheelEvent),
|
|
("jaxis", SDL_JoyAxisEvent),
|
|
("jball", SDL_JoyBallEvent),
|
|
("jhat", SDL_JoyHatEvent),
|
|
("jbutton", SDL_JoyButtonEvent),
|
|
("jdevice", SDL_JoyDeviceEvent),
|
|
("caxis", SDL_ControllerAxisEvent),
|
|
("cbutton", SDL_ControllerButtonEvent),
|
|
("cdevice", SDL_ControllerDeviceEvent),
|
|
("adevice", SDL_AudioDeviceEvent),
|
|
("quit", SDL_QuitEvent),
|
|
("user", SDL_UserEvent),
|
|
("syswm", SDL_SysWMEvent),
|
|
("tfinger", SDL_TouchFingerEvent),
|
|
("mgesture", SDL_MultiGestureEvent),
|
|
("dgesture", SDL_DollarGestureEvent),
|
|
("drop", SDL_DropEvent),
|
|
("padding", (Uint8 * 56)),
|
|
]
|
|
|
|
SDL_PumpEvents = _bind("SDL_PumpEvents")
|
|
SDL_ADDEVENT = 0
|
|
SDL_PEEKEVENT = 1
|
|
SDL_GETEVENT = 2
|
|
SDL_eventaction = c_int
|
|
SDL_PeepEvents = _bind("SDL_PeepEvents", [POINTER(SDL_Event), c_int, SDL_eventaction, Uint32, Uint32], c_int)
|
|
SDL_HasEvent = _bind("SDL_HasEvent", [Uint32], SDL_bool)
|
|
SDL_HasEvents = _bind("SDL_HasEvents", [Uint32, Uint32], SDL_bool)
|
|
SDL_FlushEvent = _bind("SDL_FlushEvent", [Uint32])
|
|
SDL_FlushEvents = _bind("SDL_FlushEvents", [Uint32, Uint32])
|
|
SDL_PollEvent = _bind("SDL_PollEvent", [POINTER(SDL_Event)], c_int)
|
|
SDL_WaitEvent = _bind("SDL_WaitEvent", [POINTER(SDL_Event)], c_int)
|
|
SDL_WaitEventTimeout = _bind("SDL_WaitEventTimeout", [POINTER(SDL_Event), c_int], c_int)
|
|
SDL_PushEvent = _bind("SDL_PushEvent", [POINTER(SDL_Event)], c_int)
|
|
SDL_EventFilter = CFUNCTYPE(c_int, c_void_p, POINTER(SDL_Event))
|
|
SDL_SetEventFilter = _bind("SDL_SetEventFilter", [SDL_EventFilter, c_void_p])
|
|
SDL_GetEventFilter = _bind("SDL_GetEventFilter", [POINTER(SDL_EventFilter), POINTER(c_void_p)], SDL_bool)
|
|
SDL_AddEventWatch = _bind("SDL_AddEventWatch", [SDL_EventFilter, c_void_p])
|
|
SDL_DelEventWatch = _bind("SDL_DelEventWatch", [SDL_EventFilter, c_void_p])
|
|
SDL_FilterEvents = _bind("SDL_FilterEvents", [SDL_EventFilter, c_void_p])
|
|
SDL_QUERY = -1
|
|
SDL_IGNORE = 0
|
|
SDL_DISABLE = 0
|
|
SDL_ENABLE = 1
|
|
SDL_EventState = _bind("SDL_EventState", [Uint32, c_int], Uint8)
|
|
SDL_GetEventState = lambda t: SDL_EventState(t, SDL_QUERY)
|
|
SDL_RegisterEvents = _bind("SDL_RegisterEvents", [c_int], Uint32)
|
|
|
|
|
|
# SDL_quit.h
|
|
def SDL_QuitRequested():
|
|
SDL_PumpEvents()
|
|
return SDL_PeepEvents(None, 0, SDL_PEEKEVENT, SDL_QUIT, SDL_QUIT) > 0
|