import pygame COLOR = { 'black': (0,0,0), 'white': (255,255,255), 'red': (255,0,0), 'green': (0,255,0), 'blue': (0,0,255), 'yellow': (255,255,0), } import os this_dir = os.path.dirname(os.path.abspath(__file__)) FONT = os.path.join(this_dir, 'cyrvetic.ttf') FIXEDFONT = os.path.join(this_dir, 'VeraMoBd.ttf') # TODO class FakeImg: fakeimg = True def get_size(self): return (0 , 0) class FakeFont: fakefont = True def render (self, *args): return FakeImg() class PyGameDriver: def __init__ (self): self.FONTCACHE = {} self.size = 0,0 def resize(self, (w,h)): self.width = w self.height = h self.size = w,h pygame.display.init() pygame.font.init() self.screen = pygame.display.set_mode((w, h), pygame.HWSURFACE|pygame.RESIZABLE, 32) def combine(self, color1, color2, alpha): r1, g1, b1 = color1 r2, g2, b2 = color2 beta = 1.0 - alpha return (int(r1 * alpha + r2 * beta), int(g1 * alpha + g2 * beta), int(b1 * alpha + b2 * beta)) def highlight_color (self,color): if color == (0, 0, 0): # black becomes magenta return (255, 0, 255) elif color == (255, 255, 255): # white becomes yellow return (255, 255, 0) intensity = sum(color) if intensity > 191 * 3: return self.combine(color, (128, 192, 0), 0.2) else: return self.combine(color, (255, 255, 0), 0.2) def parse_webcolor (self, name): return (int(name[1:3],16), int(name[3:5],16), int(name[5:7],16)) def getcolor (self, name, default): if name in COLOR: return COLOR[name] elif name.startswith('#') and len(name) == 7: rval = COLOR[name] = self.parse_webcolor (name) return rval else: return default def get_canvas_size (self): return self.width, self.height def process_event (self, event, display): def display_async_quit(): pygame.event.post(pygame.event.Event(QUIT)) def display_async_cmd(**kwds): pygame.event.post(pygame.event.Event(USEREVENT, **kwds)) def getfont (self, size, fixedfont=False): selected = None if size in self.FONTCACHE: selected = self.FONTCACHE[size] elif size < 5: self.FONTCACHE[size] = None else: if fixedfont: filename = FIXEDFONT else: filename = FONT selected = self.FONTCACHE[size] = pygame.font.Font(filename, size) return selected or FakeFont() def fill (self, *args): self.screen.fill(*args) def draw_lines (self, *args): pygame.draw.lines (self.screen, *args) def draw_rect (self, *args): pygame.draw.rect(self.screen, *args) def draw_polygon (self, *args): pygame.draw.polygon (self.screen, *args) def update (self): pygame.display.flip() def draw_ellipse(self, *args): pygame.draw.ellipse(self.screen, *args) def blit_image (self, *args): img = args[0] if getattr(img,'fakeimg', False): return self.screen.blit (*args) def render_font (self, font, *args): img = None try: try: img = font.render (*args) except pygame.error, e: # Try *with* anti-aliasing to work around a bug in SDL img = font.render (*args) except pygame.error: del parts[i] # Text has zero width return img