treasurehunting2/PySDL2-0.9.5/sdl2/syswm.py
2017-05-13 11:00:53 +02:00

168 lines
4.3 KiB
Python

from ctypes import Union, Structure, c_int, c_void_p, c_long, c_ulong, \
c_longlong, c_ulonglong, c_uint, sizeof, POINTER
from .dll import _bind
from .stdinc import SDL_bool, Uint32
from .version import SDL_version
from .video import SDL_Window
__all__ = ["SDL_SYSWM_TYPE", "SDL_SYSWM_UNKNOWN", "SDL_SYSWM_WINDOWS",
"SDL_SYSWM_X11", "SDL_SYSWM_DIRECTFB", "SDL_SYSWM_COCOA",
"SDL_SYSWM_UIKIT", "SDL_SYSWM_WAYLAND", "SDL_SYSWM_MIR",
"SDL_SYSWM_WINRT", "SDL_SYSWM_ANDROID", "SDL_SYSWM_VIVANTE",
"SDL_SysWMmsg", "SDL_SysWMinfo", "SDL_GetWindowWMInfo"
]
SDL_SYSWM_TYPE = c_int
SDL_SYSWM_UNKNOWN = 0
SDL_SYSWM_WINDOWS = 1
SDL_SYSWM_X11 = 2
SDL_SYSWM_DIRECTFB = 3
SDL_SYSWM_COCOA = 4
SDL_SYSWM_UIKIT = 5
SDL_SYSWM_WAYLAND = 6
SDL_SYSWM_MIR = 7
SDL_SYSWM_WINRT = 8
SDL_SYSWM_ANDROID = 9
SDL_SYSWM_VIVANTE = 10
# FIXME: Hack around the ctypes "_type_ 'v' not supported" bug - remove
# once this has been fixed properly in Python 2.7+
HWND = c_void_p
HDC = c_void_p
UINT = c_uint
if sizeof(c_long) == sizeof(c_void_p):
WPARAM = c_ulong
LPARAM = c_long
elif sizeof(c_longlong) == sizeof(c_void_p):
WPARAM = c_ulonglong
LPARAM = c_longlong
# FIXME: end
class _winmsg(Structure):
_fields_ = [("hwnd", HWND),
("msg", UINT),
("wParam", WPARAM),
("lParam", LPARAM),
]
class _x11msg(Structure):
_fields_ = [("event", c_void_p)]
class _dfbmsg(Structure):
_fields_ = [("event", c_void_p)]
class _cocoamsg(Structure):
pass
class _uikitmsg(Structure):
pass
class _msg(Union):
_fields_ = [("win", _winmsg),
("x11", _x11msg),
("dfb", _dfbmsg),
("cocoa", _cocoamsg),
("uikit", _uikitmsg),
("dummy", c_int)
]
class SDL_SysWMmsg(Structure):
_fields_ = [("version", SDL_version),
("subsystem", SDL_SYSWM_TYPE),
("msg", _msg)
]
class _wininfo(Structure):
_fields_ = [("window", HWND),
("hdc", HDC)]
class _winrtinfo(Structure):
_fields_ = [("window", c_void_p)]
class _x11info(Structure):
"""Window information for X11."""
_fields_ = [("display", c_void_p),
("window", c_ulong)]
class _dfbinfo(Structure):
"""Window information for DirectFB."""
_fields_ = [("dfb", c_void_p),
("window", c_void_p),
("surface", c_void_p)]
class _cocoainfo(Structure):
"""Window information for MacOS X."""
_fields_ = [("window", c_void_p)]
class _uikitinfo(Structure):
"""Window information for iOS."""
_fields_ = [("window", c_void_p),
("framebuffer", Uint32),
("colorbuffer", Uint32),
("resolveFramebuffer", Uint32)]
class _wl(Structure):
"""Window information for Wayland."""
_fields_ = [("display", c_void_p),
("surface", c_void_p),
("shell_surface", c_void_p)]
class _mir(Structure):
"""Window information for Mir."""
_fields_ = [("connection", c_void_p),
("surface", c_void_p)]
class _android(Structure):
"""Window information for Android."""
_fields_ = [("window", c_void_p),
("surface", c_void_p)]
class _vivante(Structure):
"""Window information for Vivante."""
_fields_ = [("display", c_void_p),
("window", c_void_p)]
class _info(Union):
"""The platform-specific information of a window."""
_fields_ = [("win", _wininfo),
("winrt", _winrtinfo),
("x11", _x11info),
("dfb", _dfbinfo),
("cocoa", _cocoainfo),
("uikit", _uikitinfo),
("wl", _wl),
("mir", _mir),
("android", _android),
("vivante", _vivante),
("dummy", c_int)
]
class SDL_SysWMinfo(Structure):
"""System-specific window manager information.
This holds the low-level information about the window.
"""
_fields_ = [("version", SDL_version),
("subsystem", SDL_SYSWM_TYPE),
("info", _info)
]
SDL_GetWindowWMInfo = _bind("SDL_GetWindowWMInfo", [POINTER(SDL_Window), POINTER(SDL_SysWMinfo)], SDL_bool)