1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
from ctypes import Structure, c_int, c_float, POINTER
from .dll import _bind
from .stdinc import SDL_bool
__all__ = [
# Structs
"SDL_Point", "SDL_FPoint", "SDL_Rect", "SDL_FRect",
# Macro Functions
"SDL_PointInRect", "SDL_RectEmpty", "SDL_RectEquals",
# Functions
"SDL_HasIntersection", "SDL_IntersectRect", "SDL_UnionRect",
"SDL_EnclosePoints", "SDL_IntersectRectAndLine"
]
class SDL_Point(Structure):
_fields_ = [("x", c_int), ("y", c_int)]
def __init__(self, x=0, y=0):
super(SDL_Point, self).__init__()
self.x = x
self.y = y
def __repr__(self):
return "SDL_Point(x=%d, y=%d)" % (self.x, self.y)
def __copy__(self):
return SDL_Point(self.x, self.y)
def __deepcopy__(self, memo):
return SDL_Point(self.x, self.y)
def __eq__(self, pt):
return self.x == pt.x and self.y == pt.y
def __ne__(self, pt):
return self.x != pt.x or self.y != pt.y
class SDL_FPoint(Structure):
_fields_ = [("x", c_float), ("y", c_float)]
def __init__(self, x=0.0, y=0.0):
super(SDL_FPoint, self).__init__()
self.x = x
self.y = y
def __repr__(self):
return "SDL_FPoint(x=%.3f, y=%.3f)" % (self.x, self.y)
def __copy__(self):
return SDL_FPoint(self.x, self.y)
def __deepcopy__(self, memo):
return SDL_FPoint(self.x, self.y)
def __eq__(self, pt):
return self.x == pt.x and self.y == pt.y
def __ne__(self, pt):
return self.x != pt.x or self.y != pt.y
class SDL_Rect(Structure):
_fields_ = [("x", c_int), ("y", c_int),
("w", c_int), ("h", c_int)]
def __init__(self, x=0, y=0, w=0, h=0):
super(SDL_Rect, self).__init__()
self.x = x
self.y = y
self.w = w
self.h = h
def __repr__(self):
return "SDL_Rect(x=%d, y=%d, w=%d, h=%d)" % (self.x, self.y, self.w,
self.h)
def __copy__(self):
return SDL_Rect(self.x, self.y, self.w, self.h)
def __deepcopy__(self, memo):
return SDL_Rect(self.x, self.y, self.w, self.h)
def __eq__(self, rt):
origin_equal = self.x == rt.x and self.y == rt.y
size_equal = self.w == rt.w and self.h == rt.h
return origin_equal and size_equal
def __ne__(self, rt):
origin_equal = self.x == rt.x and self.y == rt.y
size_equal = self.w == rt.w and self.h == rt.h
return not (origin_equal and size_equal)
class SDL_FRect(Structure):
_fields_ = [("x", c_float), ("y", c_float),
("w", c_float), ("h", c_float)]
def __init__(self, x=0.0, y=0.0, w=0.0, h=0.0):
super(SDL_FRect, self).__init__()
self.x = x
self.y = y
self.w = w
self.h = h
def __repr__(self):
dims = (self.x, self.y, self.w, self.h)
return "SDL_FRect(x=%.3f, y=%.3f, w=%.3f, h=%.3f)" % dims
def __copy__(self):
return SDL_FRect(self.x, self.y, self.w, self.h)
def __deepcopy__(self, memo):
return SDL_FRect(self.x, self.y, self.w, self.h)
def __eq__(self, rt):
origin_equal = self.x == rt.x and self.y == rt.y
size_equal = self.w == rt.w and self.h == rt.h
return origin_equal and size_equal
def __ne__(self, rt):
origin_equal = self.x == rt.x and self.y == rt.y
size_equal = self.w == rt.w and self.h == rt.h
return not (origin_equal and size_equal)
SDL_RectEmpty = lambda x: ((not x) or (x.w <= 0) or (x.h <= 0))
SDL_RectEquals = lambda a, b: ((a.x == b.x) and (a.y == b.y) and
(a.w == b.w) and (a.h == b.h))
SDL_PointInRect = lambda p, r: ((p.x >= r.x) and (p.x < (r.x + r.w)) and
(p.y >= r.y) and (p.y < (r.y + r.h)))
SDL_HasIntersection = _bind("SDL_HasIntersection", [POINTER(SDL_Rect), POINTER(SDL_Rect)], SDL_bool)
SDL_IntersectRect = _bind("SDL_IntersectRect", [POINTER(SDL_Rect), POINTER(SDL_Rect), POINTER(SDL_Rect)], SDL_bool)
SDL_UnionRect = _bind("SDL_UnionRect", [POINTER(SDL_Rect), POINTER(SDL_Rect), POINTER(SDL_Rect)])
SDL_EnclosePoints = _bind("SDL_EnclosePoints", [POINTER(SDL_Point), c_int, POINTER(SDL_Rect), POINTER(SDL_Rect)], SDL_bool)
SDL_IntersectRectAndLine = _bind("SDL_IntersectRectAndLine", [POINTER(SDL_Rect), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)], SDL_bool)
|