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
|
||||
from .internal import _SDL
|
||||
from .internal import _SDL, errcheck
|
||||
|
||||
# Constants
|
||||
class INIT(object):
|
||||
@ -11,58 +11,8 @@ class INIT(object):
|
||||
NOPARACHUTE = 0x00100000
|
||||
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
|
||||
|
||||
class SDLError(Exception):
|
||||
""" Exception representing an error in an SDL call """
|
||||
|
||||
_SDL.SDL_GetError.restype = ctypes.c_char_p
|
||||
def get_error():
|
||||
return _SDL.SDL_GetError()
|
||||
@ -73,13 +23,6 @@ def set_error(msg):
|
||||
def clear_error():
|
||||
_SDL.SDL_ClearError()
|
||||
|
||||
def errcheck(result):
|
||||
if result < 0:
|
||||
msg = _SDL.SDL_GetError()
|
||||
_SDL.SDL_ClearError()
|
||||
raise SDLError(msg)
|
||||
return result
|
||||
|
||||
##### Initialization
|
||||
|
||||
def init(flags):
|
||||
@ -122,327 +65,3 @@ _SDL.SDL_GetRevision.restype = ctypes.c_char_p
|
||||
def get_revision():
|
||||
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
|
||||
_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
|
||||
|
||||
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 time
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
from csdl import init, Window, INIT
|
||||
from csdl import init, INIT
|
||||
from csdl.video import Window
|
||||
|
||||
import random
|
||||
import time
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user