events/video namespaces
This commit is contained in:
parent
93944aa85a
commit
2d0b5e8181
383
csdl/__init__.py
383
csdl/__init__.py
@ -1,5 +1,5 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
from .internal import _SDL
|
from .internal import _SDL, errcheck
|
||||||
|
|
||||||
# Constants
|
# Constants
|
||||||
class INIT(object):
|
class INIT(object):
|
||||||
@ -11,58 +11,8 @@ class INIT(object):
|
|||||||
NOPARACHUTE = 0x00100000
|
NOPARACHUTE = 0x00100000
|
||||||
EVERYTHING = 0x0000FFFF
|
EVERYTHING = 0x0000FFFF
|
||||||
|
|
||||||
class Event(object):
|
|
||||||
FIRSTEVENT = 0
|
|
||||||
|
|
||||||
QUIT = 0x100
|
|
||||||
|
|
||||||
WINDOWEVENT = 0x200
|
|
||||||
SYSWMEVENT = 0x201
|
|
||||||
|
|
||||||
KEYDOWN = 0x300
|
|
||||||
KEYUP = 0x301
|
|
||||||
TEXTEDITING = 0x302
|
|
||||||
TEXTINPUT = 0x303
|
|
||||||
|
|
||||||
MOUSEMOTION = 0x400
|
|
||||||
MOUSEBUTTONDOWN = 0x401
|
|
||||||
MOUSEBUTTONUP = 0x402
|
|
||||||
MOUSEWHEEL = 0x403
|
|
||||||
|
|
||||||
INPUTMOTION = 0x500
|
|
||||||
INPUTBUTTONDOWN = 0x501
|
|
||||||
INPUTBUTTONUP = 0x502
|
|
||||||
INPUTWHEEL = 0x503
|
|
||||||
INPUTPROXIMITYIN = 0x504
|
|
||||||
INPUTPROXIMITYOUT = 0x505
|
|
||||||
|
|
||||||
JOYAXISMOTION = 0x600
|
|
||||||
JOYBALLMOTION = 0x601
|
|
||||||
JOYHATMOTION = 0x602
|
|
||||||
JOYBUTTONDOWN = 0x603
|
|
||||||
JOYBUTTONUP = 0x604
|
|
||||||
|
|
||||||
FINGERDOWN = 0x700
|
|
||||||
FINGERUP = 0x701
|
|
||||||
FINGERMOTION = 0x702
|
|
||||||
TOUCHBUTTONDOWN = 0x703
|
|
||||||
TOUCHBUTTONUP = 0x704
|
|
||||||
|
|
||||||
DOLLARGESTURE = 0x800
|
|
||||||
DOLLARRECORD = 0x801
|
|
||||||
MULTIGESTURE = 0x802
|
|
||||||
|
|
||||||
CLIPBOARDUPDATE = 0x900
|
|
||||||
|
|
||||||
USEREVENT = 0x8000
|
|
||||||
LASTEVENT = 0xFFFF
|
|
||||||
|
|
||||||
|
|
||||||
##### Error Handling
|
##### Error Handling
|
||||||
|
|
||||||
class SDLError(Exception):
|
|
||||||
""" Exception representing an error in an SDL call """
|
|
||||||
|
|
||||||
_SDL.SDL_GetError.restype = ctypes.c_char_p
|
_SDL.SDL_GetError.restype = ctypes.c_char_p
|
||||||
def get_error():
|
def get_error():
|
||||||
return _SDL.SDL_GetError()
|
return _SDL.SDL_GetError()
|
||||||
@ -73,13 +23,6 @@ def set_error(msg):
|
|||||||
def clear_error():
|
def clear_error():
|
||||||
_SDL.SDL_ClearError()
|
_SDL.SDL_ClearError()
|
||||||
|
|
||||||
def errcheck(result):
|
|
||||||
if result < 0:
|
|
||||||
msg = _SDL.SDL_GetError()
|
|
||||||
_SDL.SDL_ClearError()
|
|
||||||
raise SDLError(msg)
|
|
||||||
return result
|
|
||||||
|
|
||||||
##### Initialization
|
##### Initialization
|
||||||
|
|
||||||
def init(flags):
|
def init(flags):
|
||||||
@ -122,327 +65,3 @@ _SDL.SDL_GetRevision.restype = ctypes.c_char_p
|
|||||||
def get_revision():
|
def get_revision():
|
||||||
return _SDL.SDL_GetRevision()
|
return _SDL.SDL_GetRevision()
|
||||||
|
|
||||||
|
|
||||||
#### System Information
|
|
||||||
|
|
||||||
class DisplayMode(ctypes.Structure):
|
|
||||||
_fields_ = (
|
|
||||||
('format', ctypes.c_uint32),
|
|
||||||
('width', ctypes.c_int),
|
|
||||||
('height', ctypes.c_int),
|
|
||||||
('refresh_rate', ctypes.c_int),
|
|
||||||
('driver_data', ctypes.c_void_p)
|
|
||||||
)
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '{0}x{1} @{2}Hz ({3})'.format(self.width,
|
|
||||||
self.height,
|
|
||||||
self.refresh_rate,
|
|
||||||
get_pixel_format_name(self.format)
|
|
||||||
)
|
|
||||||
|
|
||||||
class RendererInfo(ctypes.Structure):
|
|
||||||
_fields_ = (
|
|
||||||
('name', ctypes.c_char_p),
|
|
||||||
('flags', ctypes.c_uint32),
|
|
||||||
('mod_modes', ctypes.c_uint32),
|
|
||||||
('blend_modes', ctypes.c_uint32),
|
|
||||||
('scale_modes', ctypes.c_uint32),
|
|
||||||
('num_texture_formats', ctypes.c_uint32),
|
|
||||||
('texture_formats', ctypes.c_uint32*50),
|
|
||||||
('max_texture_width', ctypes.c_int),
|
|
||||||
('max_texture_height', ctypes.c_int)
|
|
||||||
)
|
|
||||||
|
|
||||||
_render_driver_list = []
|
|
||||||
def get_render_drivers():
|
|
||||||
if not _render_driver_list:
|
|
||||||
num = _SDL.SDL_GetNumRenderDrivers()
|
|
||||||
for i in xrange(num):
|
|
||||||
rinfo = RendererInfo()
|
|
||||||
errcheck(_SDL.SDL_GetRenderDriverInfo(i, ctypes.byref(rinfo)))
|
|
||||||
_render_driver_list.append(rinfo)
|
|
||||||
return _render_driver_list
|
|
||||||
|
|
||||||
class Renderer(object):
|
|
||||||
|
|
||||||
def __init__(self, window, index=-1, flags=0):
|
|
||||||
self._renderer = errcheck(_SDL.SDL_CreateRenderer(window, index, flags))
|
|
||||||
|
|
||||||
def get_info(self):
|
|
||||||
rinfo = RendererInfo()
|
|
||||||
errcheck(_SDL.SDL_GetRendererInfo(self._renderer, ctypes.byref(rinfo)))
|
|
||||||
return rinfo
|
|
||||||
|
|
||||||
def set_draw_color(self, r, g, b, a=255):
|
|
||||||
errcheck(_SDL.SDL_SetRenderDrawColor(self._renderer, r, g, b, a))
|
|
||||||
|
|
||||||
@property
|
|
||||||
def draw_color(self):
|
|
||||||
r = ctypes.c_uint8()
|
|
||||||
g = ctypes.c_uint8()
|
|
||||||
b = ctypes.c_uint8()
|
|
||||||
a = ctypes.c_uint8()
|
|
||||||
errcheck(_SDL.SDL_GetRenderDrawColor(self._renderer, ctypes.byref(r),
|
|
||||||
ctypes.byref(g), ctypes.byref(b),
|
|
||||||
ctypes.byref(a)))
|
|
||||||
return (r,g,b,a)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def viewport(self):
|
|
||||||
rect = Rect()
|
|
||||||
_SDL.SDL_RenderGetViewport(self._renderer, ctypes.byref(rect))
|
|
||||||
return rect
|
|
||||||
|
|
||||||
@viewport.setter
|
|
||||||
def viewport(self, rect):
|
|
||||||
_SDL.SDL_RenderSetViewport(self._renderer, ctypes.pointer(rect))
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
errcheck(_SDL.SDL_RenderClear(self._renderer))
|
|
||||||
|
|
||||||
def present(self):
|
|
||||||
errcheck(_SDL.SDL_RenderPresent(self._renderer))
|
|
||||||
|
|
||||||
def draw_line(self, x1, y1, x2, y2):
|
|
||||||
errcheck(_SDL.SDL_RenderDrawLine(self._renderer, x1, y1, x2, y2))
|
|
||||||
|
|
||||||
def draw_lines(self, points):
|
|
||||||
PtArray = Point*len(points)
|
|
||||||
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
|
||||||
errcheck(_SDL.SDL_RenderDrawLines(self._renderer, _sdl_points,
|
|
||||||
len(points)))
|
|
||||||
|
|
||||||
def draw_point(self, x, y):
|
|
||||||
errcheck(_SDL.SDL_RenderDrawPoint(self._renderer, x, y))
|
|
||||||
|
|
||||||
def draw_points(self, points):
|
|
||||||
PtArray = Point*len(points)
|
|
||||||
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
|
||||||
errcheck(_SDL.SDL_RenderDrawPoints(self._renderer, _sdl_points,
|
|
||||||
len(points)))
|
|
||||||
|
|
||||||
def draw_rect(self, rect):
|
|
||||||
_SDL.SDL_RenderDrawRect(self._renderer, ctypes.pointer(rect))
|
|
||||||
|
|
||||||
def draw_rects(self, rects):
|
|
||||||
RectArray = Rect*len(rects)
|
|
||||||
rects = RectArray(*rects)
|
|
||||||
_SDL.SDL_RenderDrawRects(self._renderer, rects, len(rects))
|
|
||||||
|
|
||||||
def fill_rect(self, rect):
|
|
||||||
_SDL.SDL_RenderFillRect(self._renderer, ctypes.pointer(rect))
|
|
||||||
|
|
||||||
def fill_rects(self, rects):
|
|
||||||
RectArray = Rect*len(rects)
|
|
||||||
rects = RectArray(*rects)
|
|
||||||
_SDL.SDL_RenderFillRects(self._renderer, rects, len(rects))
|
|
||||||
|
|
||||||
_SDL.SDL_GetWindowTitle.restype = ctypes.c_char_p
|
|
||||||
|
|
||||||
class Window(object):
|
|
||||||
|
|
||||||
def __init__(self, title, x, y, w, h, flags=0):
|
|
||||||
self._handle = errcheck(_SDL.SDL_CreateWindow(title, x, y, w, h,
|
|
||||||
flags))
|
|
||||||
self.renderer = Renderer(self._handle)
|
|
||||||
|
|
||||||
def destroy(self):
|
|
||||||
_SDL.SDL_DestroyWindow(self._handle)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def display(self):
|
|
||||||
return errcheck(_SDL.SDL_GetWindowDisplay(self._handle))
|
|
||||||
|
|
||||||
def get_display_mode(self):
|
|
||||||
mode = DisplayMode()
|
|
||||||
errcheck(_SDL.SDL_GetWindowDisplayMode(self._handle,
|
|
||||||
ctypes.byref(mode)))
|
|
||||||
return mode
|
|
||||||
|
|
||||||
def get_flags(self):
|
|
||||||
return _SDL.SDL_GetWindowFlags(self._handle)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def grab(self):
|
|
||||||
return _SDL.SDL_GetWindowGrab(self._handle) == 1
|
|
||||||
|
|
||||||
@grab.setter
|
|
||||||
def grab(self, grab_mode):
|
|
||||||
_SDL.SDL_SetWindowGrab(self._handle, 1 if grab_mode else 0)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def id(self):
|
|
||||||
return _SDL.SDL_GetWindowID(self._handle)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def pixel_format(self):
|
|
||||||
return errcheck(_SDL.SDL_GetWindowPixelFormat(self._handle))
|
|
||||||
|
|
||||||
@property
|
|
||||||
def position(self):
|
|
||||||
x = ctypes.c_int()
|
|
||||||
y = ctypes.c_int()
|
|
||||||
_SDL.SDL_GetWindowPosition(self._handle, ctypes.byref(x),
|
|
||||||
ctypes.byref(y))
|
|
||||||
return x.value, y.value
|
|
||||||
|
|
||||||
def move(self, x, y):
|
|
||||||
_SDL.SDL_SetWindowPosition(self._handle, x, y)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def size(self):
|
|
||||||
w = ctypes.c_int()
|
|
||||||
h = ctypes.c_int()
|
|
||||||
_SDL.SDL_GetWindowSize(self._handle, ctypes.byref(w),
|
|
||||||
ctypes.byref(h))
|
|
||||||
return w,h
|
|
||||||
|
|
||||||
def resize(self, w, h):
|
|
||||||
_SDL.SDL_SetWindowSize(self._handle, w, h)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def title(self):
|
|
||||||
return _SDL.SDL_GetWindowTitle(self._handle)
|
|
||||||
|
|
||||||
@title.setter
|
|
||||||
def title(self, title_str):
|
|
||||||
_SDL.SDL_SetWindowTitle(self._handle, title_str)
|
|
||||||
|
|
||||||
def hide(self):
|
|
||||||
_SDL.SDL_HideWindow(self._handle)
|
|
||||||
|
|
||||||
def maximize(self):
|
|
||||||
_SDL.SDL_MaximizeWindow(self._handle)
|
|
||||||
|
|
||||||
def minimize(self):
|
|
||||||
_SDL.SDL_MinimizeWindow(self._handle)
|
|
||||||
|
|
||||||
def raise_window(self):
|
|
||||||
_SDL.SDL_RaiseWindow(self._handle)
|
|
||||||
|
|
||||||
def restore(self):
|
|
||||||
_SDL.SDL_RestoreWindow(self._handle)
|
|
||||||
|
|
||||||
def show(self):
|
|
||||||
_SDL.SDL_ShowWindow(self._handle)
|
|
||||||
|
|
||||||
def disable_screensaver():
|
|
||||||
_SDL.SDL_DisableScreenSaver()
|
|
||||||
|
|
||||||
def enable_screensaver():
|
|
||||||
_SDL.SDL_EnableScreenSaver()
|
|
||||||
|
|
||||||
def is_screensaver_enabled():
|
|
||||||
return _SDL.SDL_IsScreenSaverEnabled() == 1
|
|
||||||
|
|
||||||
def get_current_display_mode(display):
|
|
||||||
mode = DisplayMode()
|
|
||||||
errcheck(_SDL.SDL_GetCurrentDisplayMode(display, ctypes.byref(mode)))
|
|
||||||
return mode
|
|
||||||
|
|
||||||
_SDL.SDL_GetPixelFormatName.restype = ctypes.c_char_p
|
|
||||||
def get_pixel_format_name(format):
|
|
||||||
return _SDL.SDL_GetPixelFormatName(format)
|
|
||||||
|
|
||||||
_SDL.SDL_GetCurrentVideoDriver.restype = ctypes.c_char_p
|
|
||||||
def get_current_video_driver():
|
|
||||||
return _SDL.SDL_GetCurrentVideoDriver()
|
|
||||||
|
|
||||||
def get_num_video_displays():
|
|
||||||
return _SDL.SDL_GetNumVideoDisplays()
|
|
||||||
|
|
||||||
_video_driver_list = []
|
|
||||||
_SDL.SDL_GetVideoDriver.restype = ctypes.c_char_p
|
|
||||||
def get_video_drivers():
|
|
||||||
if not _video_driver_list:
|
|
||||||
num = _SDL.SDL_GetNumVideoDrivers()
|
|
||||||
for i in xrange(num):
|
|
||||||
_video_driver_list.append(_SDL.SDL_GetVideoDriver(i))
|
|
||||||
return _video_driver_list
|
|
||||||
|
|
||||||
_display_mode_list = {}
|
|
||||||
def get_display_modes(display_index):
|
|
||||||
if not display_index in _display_mode_list:
|
|
||||||
_display_mode_list[display_index] = []
|
|
||||||
num = _SDL.SDL_GetNumDisplayModes(display_index)
|
|
||||||
for i in xrange(num):
|
|
||||||
mode = DisplayMode()
|
|
||||||
_SDL.SDL_GetDisplayMode(display_index, i, ctypes.byref(mode))
|
|
||||||
_display_mode_list[display_index].append(mode)
|
|
||||||
return _display_mode_list[display_index]
|
|
||||||
|
|
||||||
def get_desktop_display_mode(display_index):
|
|
||||||
mode = DisplayMode()
|
|
||||||
errcheck(_SDL.SDL_GetDesktopDisplayMode(display_index, ctypes.byref(mode)))
|
|
||||||
return mode
|
|
||||||
|
|
||||||
class Rect(ctypes.Structure):
|
|
||||||
_fields_ = (
|
|
||||||
('x', ctypes.c_int),
|
|
||||||
('y', ctypes.c_int),
|
|
||||||
('width', ctypes.c_int),
|
|
||||||
('height', ctypes.c_int),
|
|
||||||
)
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
return (self.x == other.x and self.y == other.y and
|
|
||||||
self.width == other.width and self.height == other.height)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def enclose_points(points, clip=None):
|
|
||||||
PtArray = Point*len(points)
|
|
||||||
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
|
||||||
result = Rect()
|
|
||||||
|
|
||||||
# returns True if a rect is created
|
|
||||||
if _SDL.SDL_EnclosePoints(_sdl_points, len(points),
|
|
||||||
ctypes.pointer(clip) if clip else None,
|
|
||||||
ctypes.byref(result)):
|
|
||||||
return result
|
|
||||||
|
|
||||||
def intersects(self, other):
|
|
||||||
return _SDL.SDL_HasIntersection(ctypes.pointer(self),
|
|
||||||
ctypes.pointer(other)) == 1
|
|
||||||
|
|
||||||
def intersection(self, other):
|
|
||||||
result = Rect()
|
|
||||||
|
|
||||||
# returns True if an intersection is found
|
|
||||||
if _SDL.SDL_IntersectRect(ctypes.pointer(self), ctypes.pointer(other),
|
|
||||||
ctypes.byref(result)):
|
|
||||||
return result
|
|
||||||
|
|
||||||
def union(self, other):
|
|
||||||
result = Rect()
|
|
||||||
_SDL.SDL_UnionRect(ctypes.pointer(self), ctypes.pointer(other),
|
|
||||||
ctypes.byref(result))
|
|
||||||
return result
|
|
||||||
|
|
||||||
def intersects_line(self, x1, y1, x2, y2):
|
|
||||||
return _SDL.SDL_IntersectRectAndLine(ctypes.pointer(self),
|
|
||||||
ctypes.pointer(x1),
|
|
||||||
ctypes.pointer(y1),
|
|
||||||
ctypes.pointer(x2),
|
|
||||||
ctypes.pointer(y2)) == 1
|
|
||||||
|
|
||||||
def is_empty(self):
|
|
||||||
return self.width <= 0 or self.height <= 0
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return 'Rect({0}, {1}, {2}, {3})'.format(self.x, self.y,
|
|
||||||
self.width, self.height)
|
|
||||||
|
|
||||||
class Point(ctypes.Structure):
|
|
||||||
_fields_ = (
|
|
||||||
('x', ctypes.c_int),
|
|
||||||
('y', ctypes.c_int),
|
|
||||||
)
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return 'Point({0}, {1})'.format(self.x, self.y)
|
|
||||||
|
|
||||||
def get_display_bounds(display_index):
|
|
||||||
rect = Rect()
|
|
||||||
errcheck(_SDL.SDL_GetDisplayBounds(display_index, ctypes.byref(rect)))
|
|
||||||
return rect
|
|
||||||
|
50
csdl/events.py
Normal file
50
csdl/events.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import ctypes
|
||||||
|
from .internal import _SDL
|
||||||
|
|
||||||
|
class Event(object):
|
||||||
|
FIRSTEVENT = 0
|
||||||
|
|
||||||
|
QUIT = 0x100
|
||||||
|
|
||||||
|
WINDOWEVENT = 0x200
|
||||||
|
SYSWMEVENT = 0x201
|
||||||
|
|
||||||
|
KEYDOWN = 0x300
|
||||||
|
KEYUP = 0x301
|
||||||
|
TEXTEDITING = 0x302
|
||||||
|
TEXTINPUT = 0x303
|
||||||
|
|
||||||
|
MOUSEMOTION = 0x400
|
||||||
|
MOUSEBUTTONDOWN = 0x401
|
||||||
|
MOUSEBUTTONUP = 0x402
|
||||||
|
MOUSEWHEEL = 0x403
|
||||||
|
|
||||||
|
INPUTMOTION = 0x500
|
||||||
|
INPUTBUTTONDOWN = 0x501
|
||||||
|
INPUTBUTTONUP = 0x502
|
||||||
|
INPUTWHEEL = 0x503
|
||||||
|
INPUTPROXIMITYIN = 0x504
|
||||||
|
INPUTPROXIMITYOUT = 0x505
|
||||||
|
|
||||||
|
JOYAXISMOTION = 0x600
|
||||||
|
JOYBALLMOTION = 0x601
|
||||||
|
JOYHATMOTION = 0x602
|
||||||
|
JOYBUTTONDOWN = 0x603
|
||||||
|
JOYBUTTONUP = 0x604
|
||||||
|
|
||||||
|
FINGERDOWN = 0x700
|
||||||
|
FINGERUP = 0x701
|
||||||
|
FINGERMOTION = 0x702
|
||||||
|
TOUCHBUTTONDOWN = 0x703
|
||||||
|
TOUCHBUTTONUP = 0x704
|
||||||
|
|
||||||
|
DOLLARGESTURE = 0x800
|
||||||
|
DOLLARRECORD = 0x801
|
||||||
|
MULTIGESTURE = 0x802
|
||||||
|
|
||||||
|
CLIPBOARDUPDATE = 0x900
|
||||||
|
|
||||||
|
USEREVENT = 0x8000
|
||||||
|
LASTEVENT = 0xFFFF
|
||||||
|
|
||||||
|
|
@ -1,2 +1,13 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
_SDL = ctypes.cdll.LoadLibrary('/usr/local/lib/libSDL-1.3.so.0.0.0')
|
_SDL = ctypes.cdll.LoadLibrary('/usr/local/lib/libSDL-1.3.so.0.0.0')
|
||||||
|
|
||||||
|
class SDLError(Exception):
|
||||||
|
""" Exception representing an error in an SDL call """
|
||||||
|
|
||||||
|
def errcheck(result):
|
||||||
|
if result < 0:
|
||||||
|
msg = _SDL.SDL_GetError()
|
||||||
|
_SDL.SDL_ClearError()
|
||||||
|
raise SDLError(msg)
|
||||||
|
return result
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import ctypes
|
||||||
|
from .internal import _SDL
|
||||||
|
|
||||||
_SDL.SDL_GetPlatform.restype = ctypes.c_char_p
|
_SDL.SDL_GetPlatform.restype = ctypes.c_char_p
|
||||||
|
|
||||||
def get_platform():
|
def get_platform():
|
||||||
|
324
csdl/video.py
Normal file
324
csdl/video.py
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
import ctypes
|
||||||
|
from .internal import _SDL, errcheck
|
||||||
|
|
||||||
|
class DisplayMode(ctypes.Structure):
|
||||||
|
_fields_ = (
|
||||||
|
('format', ctypes.c_uint32),
|
||||||
|
('width', ctypes.c_int),
|
||||||
|
('height', ctypes.c_int),
|
||||||
|
('refresh_rate', ctypes.c_int),
|
||||||
|
('driver_data', ctypes.c_void_p)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '{0}x{1} @{2}Hz ({3})'.format(self.width,
|
||||||
|
self.height,
|
||||||
|
self.refresh_rate,
|
||||||
|
get_pixel_format_name(self.format)
|
||||||
|
)
|
||||||
|
|
||||||
|
class RendererInfo(ctypes.Structure):
|
||||||
|
_fields_ = (
|
||||||
|
('name', ctypes.c_char_p),
|
||||||
|
('flags', ctypes.c_uint32),
|
||||||
|
('mod_modes', ctypes.c_uint32),
|
||||||
|
('blend_modes', ctypes.c_uint32),
|
||||||
|
('scale_modes', ctypes.c_uint32),
|
||||||
|
('num_texture_formats', ctypes.c_uint32),
|
||||||
|
('texture_formats', ctypes.c_uint32*50),
|
||||||
|
('max_texture_width', ctypes.c_int),
|
||||||
|
('max_texture_height', ctypes.c_int)
|
||||||
|
)
|
||||||
|
|
||||||
|
_render_driver_list = []
|
||||||
|
def get_render_drivers():
|
||||||
|
if not _render_driver_list:
|
||||||
|
num = _SDL.SDL_GetNumRenderDrivers()
|
||||||
|
for i in xrange(num):
|
||||||
|
rinfo = RendererInfo()
|
||||||
|
errcheck(_SDL.SDL_GetRenderDriverInfo(i, ctypes.byref(rinfo)))
|
||||||
|
_render_driver_list.append(rinfo)
|
||||||
|
return _render_driver_list
|
||||||
|
|
||||||
|
class Renderer(object):
|
||||||
|
|
||||||
|
def __init__(self, window, index=-1, flags=0):
|
||||||
|
self._renderer = errcheck(_SDL.SDL_CreateRenderer(window, index, flags))
|
||||||
|
|
||||||
|
def get_info(self):
|
||||||
|
rinfo = RendererInfo()
|
||||||
|
errcheck(_SDL.SDL_GetRendererInfo(self._renderer, ctypes.byref(rinfo)))
|
||||||
|
return rinfo
|
||||||
|
|
||||||
|
def set_draw_color(self, r, g, b, a=255):
|
||||||
|
errcheck(_SDL.SDL_SetRenderDrawColor(self._renderer, r, g, b, a))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def draw_color(self):
|
||||||
|
r = ctypes.c_uint8()
|
||||||
|
g = ctypes.c_uint8()
|
||||||
|
b = ctypes.c_uint8()
|
||||||
|
a = ctypes.c_uint8()
|
||||||
|
errcheck(_SDL.SDL_GetRenderDrawColor(self._renderer, ctypes.byref(r),
|
||||||
|
ctypes.byref(g), ctypes.byref(b),
|
||||||
|
ctypes.byref(a)))
|
||||||
|
return (r,g,b,a)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def viewport(self):
|
||||||
|
rect = Rect()
|
||||||
|
_SDL.SDL_RenderGetViewport(self._renderer, ctypes.byref(rect))
|
||||||
|
return rect
|
||||||
|
|
||||||
|
@viewport.setter
|
||||||
|
def viewport(self, rect):
|
||||||
|
_SDL.SDL_RenderSetViewport(self._renderer, ctypes.pointer(rect))
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
errcheck(_SDL.SDL_RenderClear(self._renderer))
|
||||||
|
|
||||||
|
def present(self):
|
||||||
|
errcheck(_SDL.SDL_RenderPresent(self._renderer))
|
||||||
|
|
||||||
|
def draw_line(self, x1, y1, x2, y2):
|
||||||
|
errcheck(_SDL.SDL_RenderDrawLine(self._renderer, x1, y1, x2, y2))
|
||||||
|
|
||||||
|
def draw_lines(self, points):
|
||||||
|
PtArray = Point*len(points)
|
||||||
|
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
||||||
|
errcheck(_SDL.SDL_RenderDrawLines(self._renderer, _sdl_points,
|
||||||
|
len(points)))
|
||||||
|
|
||||||
|
def draw_point(self, x, y):
|
||||||
|
errcheck(_SDL.SDL_RenderDrawPoint(self._renderer, x, y))
|
||||||
|
|
||||||
|
def draw_points(self, points):
|
||||||
|
PtArray = Point*len(points)
|
||||||
|
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
||||||
|
errcheck(_SDL.SDL_RenderDrawPoints(self._renderer, _sdl_points,
|
||||||
|
len(points)))
|
||||||
|
|
||||||
|
def draw_rect(self, rect):
|
||||||
|
_SDL.SDL_RenderDrawRect(self._renderer, ctypes.pointer(rect))
|
||||||
|
|
||||||
|
def draw_rects(self, rects):
|
||||||
|
RectArray = Rect*len(rects)
|
||||||
|
rects = RectArray(*rects)
|
||||||
|
_SDL.SDL_RenderDrawRects(self._renderer, rects, len(rects))
|
||||||
|
|
||||||
|
def fill_rect(self, rect):
|
||||||
|
_SDL.SDL_RenderFillRect(self._renderer, ctypes.pointer(rect))
|
||||||
|
|
||||||
|
def fill_rects(self, rects):
|
||||||
|
RectArray = Rect*len(rects)
|
||||||
|
rects = RectArray(*rects)
|
||||||
|
_SDL.SDL_RenderFillRects(self._renderer, rects, len(rects))
|
||||||
|
|
||||||
|
_SDL.SDL_GetWindowTitle.restype = ctypes.c_char_p
|
||||||
|
|
||||||
|
class Window(object):
|
||||||
|
|
||||||
|
def __init__(self, title, x, y, w, h, flags=0):
|
||||||
|
self._handle = errcheck(_SDL.SDL_CreateWindow(title, x, y, w, h,
|
||||||
|
flags))
|
||||||
|
self.renderer = Renderer(self._handle)
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
_SDL.SDL_DestroyWindow(self._handle)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def display(self):
|
||||||
|
return errcheck(_SDL.SDL_GetWindowDisplay(self._handle))
|
||||||
|
|
||||||
|
def get_display_mode(self):
|
||||||
|
mode = DisplayMode()
|
||||||
|
errcheck(_SDL.SDL_GetWindowDisplayMode(self._handle,
|
||||||
|
ctypes.byref(mode)))
|
||||||
|
return mode
|
||||||
|
|
||||||
|
def get_flags(self):
|
||||||
|
return _SDL.SDL_GetWindowFlags(self._handle)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def grab(self):
|
||||||
|
return _SDL.SDL_GetWindowGrab(self._handle) == 1
|
||||||
|
|
||||||
|
@grab.setter
|
||||||
|
def grab(self, grab_mode):
|
||||||
|
_SDL.SDL_SetWindowGrab(self._handle, 1 if grab_mode else 0)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return _SDL.SDL_GetWindowID(self._handle)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pixel_format(self):
|
||||||
|
return errcheck(_SDL.SDL_GetWindowPixelFormat(self._handle))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def position(self):
|
||||||
|
x = ctypes.c_int()
|
||||||
|
y = ctypes.c_int()
|
||||||
|
_SDL.SDL_GetWindowPosition(self._handle, ctypes.byref(x),
|
||||||
|
ctypes.byref(y))
|
||||||
|
return x.value, y.value
|
||||||
|
|
||||||
|
def move(self, x, y):
|
||||||
|
_SDL.SDL_SetWindowPosition(self._handle, x, y)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def size(self):
|
||||||
|
w = ctypes.c_int()
|
||||||
|
h = ctypes.c_int()
|
||||||
|
_SDL.SDL_GetWindowSize(self._handle, ctypes.byref(w),
|
||||||
|
ctypes.byref(h))
|
||||||
|
return w,h
|
||||||
|
|
||||||
|
def resize(self, w, h):
|
||||||
|
_SDL.SDL_SetWindowSize(self._handle, w, h)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title(self):
|
||||||
|
return _SDL.SDL_GetWindowTitle(self._handle)
|
||||||
|
|
||||||
|
@title.setter
|
||||||
|
def title(self, title_str):
|
||||||
|
_SDL.SDL_SetWindowTitle(self._handle, title_str)
|
||||||
|
|
||||||
|
def hide(self):
|
||||||
|
_SDL.SDL_HideWindow(self._handle)
|
||||||
|
|
||||||
|
def maximize(self):
|
||||||
|
_SDL.SDL_MaximizeWindow(self._handle)
|
||||||
|
|
||||||
|
def minimize(self):
|
||||||
|
_SDL.SDL_MinimizeWindow(self._handle)
|
||||||
|
|
||||||
|
def raise_window(self):
|
||||||
|
_SDL.SDL_RaiseWindow(self._handle)
|
||||||
|
|
||||||
|
def restore(self):
|
||||||
|
_SDL.SDL_RestoreWindow(self._handle)
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
_SDL.SDL_ShowWindow(self._handle)
|
||||||
|
|
||||||
|
def disable_screensaver():
|
||||||
|
_SDL.SDL_DisableScreenSaver()
|
||||||
|
|
||||||
|
def enable_screensaver():
|
||||||
|
_SDL.SDL_EnableScreenSaver()
|
||||||
|
|
||||||
|
def is_screensaver_enabled():
|
||||||
|
return _SDL.SDL_IsScreenSaverEnabled() == 1
|
||||||
|
|
||||||
|
def get_current_display_mode(display):
|
||||||
|
mode = DisplayMode()
|
||||||
|
errcheck(_SDL.SDL_GetCurrentDisplayMode(display, ctypes.byref(mode)))
|
||||||
|
return mode
|
||||||
|
|
||||||
|
_SDL.SDL_GetPixelFormatName.restype = ctypes.c_char_p
|
||||||
|
def get_pixel_format_name(format):
|
||||||
|
return _SDL.SDL_GetPixelFormatName(format)
|
||||||
|
|
||||||
|
_SDL.SDL_GetCurrentVideoDriver.restype = ctypes.c_char_p
|
||||||
|
def get_current_video_driver():
|
||||||
|
return _SDL.SDL_GetCurrentVideoDriver()
|
||||||
|
|
||||||
|
def get_num_video_displays():
|
||||||
|
return _SDL.SDL_GetNumVideoDisplays()
|
||||||
|
|
||||||
|
_video_driver_list = []
|
||||||
|
_SDL.SDL_GetVideoDriver.restype = ctypes.c_char_p
|
||||||
|
def get_video_drivers():
|
||||||
|
if not _video_driver_list:
|
||||||
|
num = _SDL.SDL_GetNumVideoDrivers()
|
||||||
|
for i in xrange(num):
|
||||||
|
_video_driver_list.append(_SDL.SDL_GetVideoDriver(i))
|
||||||
|
return _video_driver_list
|
||||||
|
|
||||||
|
_display_mode_list = {}
|
||||||
|
def get_display_modes(display_index):
|
||||||
|
if not display_index in _display_mode_list:
|
||||||
|
_display_mode_list[display_index] = []
|
||||||
|
num = _SDL.SDL_GetNumDisplayModes(display_index)
|
||||||
|
for i in xrange(num):
|
||||||
|
mode = DisplayMode()
|
||||||
|
_SDL.SDL_GetDisplayMode(display_index, i, ctypes.byref(mode))
|
||||||
|
_display_mode_list[display_index].append(mode)
|
||||||
|
return _display_mode_list[display_index]
|
||||||
|
|
||||||
|
def get_desktop_display_mode(display_index):
|
||||||
|
mode = DisplayMode()
|
||||||
|
errcheck(_SDL.SDL_GetDesktopDisplayMode(display_index, ctypes.byref(mode)))
|
||||||
|
return mode
|
||||||
|
|
||||||
|
class Rect(ctypes.Structure):
|
||||||
|
_fields_ = (
|
||||||
|
('x', ctypes.c_int),
|
||||||
|
('y', ctypes.c_int),
|
||||||
|
('width', ctypes.c_int),
|
||||||
|
('height', ctypes.c_int),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return (self.x == other.x and self.y == other.y and
|
||||||
|
self.width == other.width and self.height == other.height)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def enclose_points(points, clip=None):
|
||||||
|
PtArray = Point*len(points)
|
||||||
|
_sdl_points = PtArray(*[Point(*pt) for pt in points])
|
||||||
|
result = Rect()
|
||||||
|
|
||||||
|
# returns True if a rect is created
|
||||||
|
if _SDL.SDL_EnclosePoints(_sdl_points, len(points),
|
||||||
|
ctypes.pointer(clip) if clip else None,
|
||||||
|
ctypes.byref(result)):
|
||||||
|
return result
|
||||||
|
|
||||||
|
def intersects(self, other):
|
||||||
|
return _SDL.SDL_HasIntersection(ctypes.pointer(self),
|
||||||
|
ctypes.pointer(other)) == 1
|
||||||
|
|
||||||
|
def intersection(self, other):
|
||||||
|
result = Rect()
|
||||||
|
|
||||||
|
# returns True if an intersection is found
|
||||||
|
if _SDL.SDL_IntersectRect(ctypes.pointer(self), ctypes.pointer(other),
|
||||||
|
ctypes.byref(result)):
|
||||||
|
return result
|
||||||
|
|
||||||
|
def union(self, other):
|
||||||
|
result = Rect()
|
||||||
|
_SDL.SDL_UnionRect(ctypes.pointer(self), ctypes.pointer(other),
|
||||||
|
ctypes.byref(result))
|
||||||
|
return result
|
||||||
|
|
||||||
|
def intersects_line(self, x1, y1, x2, y2):
|
||||||
|
return _SDL.SDL_IntersectRectAndLine(ctypes.pointer(self),
|
||||||
|
ctypes.pointer(x1),
|
||||||
|
ctypes.pointer(y1),
|
||||||
|
ctypes.pointer(x2),
|
||||||
|
ctypes.pointer(y2)) == 1
|
||||||
|
|
||||||
|
def is_empty(self):
|
||||||
|
return self.width <= 0 or self.height <= 0
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return 'Rect({0}, {1}, {2}, {3})'.format(self.x, self.y,
|
||||||
|
self.width, self.height)
|
||||||
|
|
||||||
|
class Point(ctypes.Structure):
|
||||||
|
_fields_ = (
|
||||||
|
('x', ctypes.c_int),
|
||||||
|
('y', ctypes.c_int),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return 'Point({0}, {1})'.format(self.x, self.y)
|
||||||
|
|
||||||
|
def get_display_bounds(display_index):
|
||||||
|
rect = Rect()
|
||||||
|
errcheck(_SDL.SDL_GetDisplayBounds(display_index, ctypes.byref(rect)))
|
||||||
|
return rect
|
@ -1,4 +1,5 @@
|
|||||||
from csdl import init, Window, INIT, Rect
|
from csdl import init, INIT
|
||||||
|
from csdl.video import Window, Rect
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
from csdl import init, Window, INIT
|
from csdl import init, INIT
|
||||||
|
from csdl.video import Window
|
||||||
|
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user