1 """Funtions for manipulating pygame surfaces."""
6 """Return the subsurface of a surface, with some help, checks."""
9 raise Exception("rectangle out of bounds: surface=%dx%d, rect=%s" % (
10 s.get_width(),s.get_height(),r))
11 w,h = s.get_width(),s.get_height()
16 assert(r.w >= 0 and r.h >= 0)
17 return s.subsurface(r)
21 A surface-like object which smartly handle out-of-area blitting.
23 Note that only one of parent and real_surface should be supplied.
26 parent -- a ProxySurface object
27 real_surface -- a pygame Surface object
30 mysubsurface -- a real and valid pygame.Surface object to be used
32 x, y -- if the proxy surface is to the left or above the parent
33 offset -- an option which let you scroll the whole blitted content
36 def __init__(self, parent, rect, real_surface, offset=(0, 0)):
39 if rect.x < 0: self.x = rect.x
40 if rect.y < 0: self.y = rect.y
41 self.real_surface = real_surface
42 if real_surface == None:
43 self.mysubsurface = parent.mysubsurface.subsurface(
44 parent.mysubsurface.get_rect().clip(rect))
46 self.mysubsurface = real_surface.subsurface(
47 real_surface.get_rect().clip(rect))
51 def blit(self, s, pos, rect=None):
52 if rect == None: rect = s.get_rect()
53 pos = (pos[0] + self.offset[0] + self.x, pos[1] + self.offset[1] + self.y)
54 self.mysubsurface.blit(s, pos, rect)
56 def subsurface(self, rect):
57 r = pygame.Rect(rect).move(self.offset[0] + self.x,
58 self.offset[1] + self.y)
59 return ProxySurface(self, r, self.real_surface)
61 def fill(self, color, rect=None):
62 if rect != None: self.mysubsurface.fill(color, rect)
63 else: self.mysubsurface.fill(color)
64 def get_rect(self): return self.rect
65 def get_width(self): return self.rect[2]
66 def get_height(self): return self.rect[3]
67 def get_abs_offset(): return self.rect[:2]
68 def get_abs_parent(): return self.mysubsurface.get_abs_parent()
69 def set_clip(self, rect=None):
70 if rect == None: self.mysubsurface.set_clip()
72 rect = [rect[0] + self.offset[0] + self.x, rect[1] + self.offset[0] + self.y, rect[2], rect[3]]
73 self.mysubsurface.set_clip(rect)
80 """This class is obsolete and is scheduled to be removed."""
82 def __init__(self, parent, rect, real_surface, offset=(0, 0)):
85 if rect[0] < 0: self.x = rect[0]
86 if rect[1] < 0: self.y = rect[1]
87 self.real_surface = real_surface
88 if real_surface == None:
89 self.mysubsurface = parent.mysubsurface.subsurface(parent.mysubsurface.get_rect().clip(rect))
91 self.mysubsurface = real_surface.subsurface(real_surface.get_rect().clip(rect))
92 rect[0], rect[1] = 0, 0
95 def blit(self, s, pos, rect=None):
96 if rect == None: rect = s.get_rect()
97 pos = (pos[0] + self.offset[0] + self.x, pos[1] + self.offset[1] + self.y)
98 self.mysubsurface.blit(s, pos, rect)
100 def subsurface(self, rect): return ProxySurface(self, pygame.Rect(rect).move(self.offset[0] + self.x, self.offset[1] + self.y),self.real_surface)
101 def fill(self, color, rect=None):
102 if rect != None: self.mysubsurface.fill(color, rect)
103 else: self.mysubsurface.fill(color)
104 def get_rect(self): return self.rect
105 def get_width(self): return self.rect[2]
106 def get_height(self): return self.rect[3]
107 def get_abs_offset(): return self.rect[:2]
108 def get_abs_parent(): return self.mysubsurface.get_abs_parent()
109 def set_clip(self, rect=None):
110 if rect == None: self.mysubsurface.set_clip()
112 rect = [rect[0] + self.offset[0] + self.x, rect[1] + self.offset[0] + self.y, rect[2], rect[3]]
113 self.mysubsurface.set_clip(rect)