def render(self, text, antialias=True, color=(0, 0, 0), background=None, surface=None): #optional surface for text rendering """ Render text onto surface. Arguments are text to render, and optional antialias, RGB color of text, RGB color of background, and surface for text rendering. """ if not surface: w, h = self.size(text) surf = Surface((w, h)) else: surf = surface w, h = surface.width, surface.height if background: surf.setFillStyle(Color(background)) surf.fillRect(0, 0, w, h) surf.setFont('%s %dpx %s' % (self.fontstyle, self.fontsize, self.fontname)) # if antialias: pass surf.setFillStyle(Color(color)) surf.setTextAlign('center') surf.setTextBaseline('middle') surf.fillText(text, w / 2, h / 2) if self.underline: surf.setLineWidth(self.fontsize / 20) surf.setStrokeStyle(Color(color)) surf.beginPath() surf.moveTo(0, h * 0.85) surf.lineTo(w, h * 0.85) surf.stroke() return surf
def rotozoom(self, surface, angle, size): """ Return Surface rotated and resized by the given angle and size. """ if not angle: width = int(surface.get_width() * size) height = int(surface.get_height() * size) return self.scale(surface, (width, height)) theta = angle * self.deg_rad width_i = int(surface.get_width() * size) height_i = int(surface.get_height() * size) cos_theta = _fabs(_cos(theta)) sin_theta = _fabs(_sin(theta)) width_f = int(_ceil((width_i * cos_theta) + (height_i * sin_theta))) if width_f % 2: width_f += 1 height_f = int(_ceil((width_i * sin_theta) + (height_i * cos_theta))) if height_f % 2: height_f += 1 surf = Surface((width_f, height_f)) surf.saveContext() surf.translate(width_f / 2.0, height_f / 2.0) surf.rotate(-theta) surf.drawImage(surface.canvas, 0, 0, surface.get_width(), surface.get_height(), -width_i / 2, -height_i / 2, width_i, height_i) surf.restoreContext() return surf
def create_cursor(size, data, mask): """ Create cursor image from binary data. Arguments cursor size and its binary data and mask. Return surface, can be used with mouse.set_cursor. """ surface = Surface(size, Const.SRCALPHA) black = Color(0, 0, 0, 255) white = Color(255, 255, 255, 255) x = y = 0 rang = range(8) for i in range(len(data)): if data[i] or mask[i]: for j in rang: if data[i] & 0x01 << 7 - j: surface.setFillStyle(black) surface.fillRect(x + j, y, 1, 1) elif mask[i] & 0x01 << 7 - j: surface.setFillStyle(white) surface.fillRect(x + j, y, 1, 1) x += 8 if x >= size[0]: x = 0 y += 1 return surface
def make_surface(array): """ Generates image pixels from array data. Argument array containing image data. Return Surface generated from array. """ surface = Surface((array._imagedata.width, array._imagedata.height)) blit_array(surface, array) return surface
def convert_image(self, image): """ Return the image as a Surface. """ if env.canvas._isCanvas: surface = Surface((image.width, image.height)) surface.drawImage(image, 0, 0) else: surface = Surf(image) return surface
def scale(self, surface, size, dest=None): """ Return Surface resized by the given size. An optional destination surface can be provided. """ if not dest: surf = Surface(size) else: surf = dest surf.drawImage(surface.canvas, 0, 0, surface.get_width(), surface.get_height(), 0, 0, size[0], size[1]) return surf
def __init__(self, size, buffered): Surface.__init__(self, size) if isinstance(buffered, bool): self._bufferedimage = buffered else: self._bufferedimage = True try: if self.impl.canvasContext: self._isCanvas = True except: self._isCanvas = False self._bufferedimage = False if self._bufferedimage: self.surface = Surface(size) else: self.surface = self self.images = {} self.image_list = [] self.callback = None self.time = Time() self.event = env.event self.addMouseListener(self) self.addKeyEventListener(self) self.sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEMOVE | Event.ONMOUSEOUT | Event.ONMOUSEWHEEL | Event.ONKEYDOWN | Event.ONKEYPRESS | Event.ONKEYUP) self.onContextMenu = None self.preventContextMenu() self.evt = self.event.eventObj self.modKey = self.event.modKey self.specialKey = self.event.specialKey self.modKeyCode = self.event.modKeyCode self.specialKeyCode = self.event.specialKeyCode self.keyRepeat = self.event.keyRepeat self.keyHeld = self.event.keyHeld self.mouse_entered = True self.event._initiate_touch_listener(self) self._touch_callback = self.event.touchlistener.callback self._rect_list = [] self._rect_len = 0 self._rect_num = 0 self._framerate = 0 self._frametime = 0 self._rendertime = self.time.time() self._pause = False self._canvas_init() self.run = None self.initialized = False
def flip(self, surface, xbool=True, ybool=False): """ Return Surface that is flipped horizontally, vertically, or both. """ surf = Surface((surface.get_width(), surface.get_height())) surf.saveContext() if xbool and ybool: surf.translate(surface.get_width(), surface.get_height()) surf.scale(-1, -1) elif xbool: surf.translate(surface.get_width(), 0) surf.scale(-1, 1) elif ybool: surf.translate(0, surface.get_height()) surf.scale(1, -1) surf.drawImage(surface.canvas, 0, 0) surf.restoreContext() return surf
def rotate(self, surface, angle): """ Return Surface rotated by the given angle. """ if not angle: return surface.copy() theta = angle * self.deg_rad width_i = surface.get_width() height_i = surface.get_height() cos_theta = _fabs(_cos(theta)) sin_theta = _fabs(_sin(theta)) width_f = int((width_i * cos_theta) + (height_i * sin_theta)) height_f = int((width_i * sin_theta) + (height_i * cos_theta)) surf = Surface((width_f, height_f)) surf.saveContext() surf.translate(width_f / 2.0, height_f / 2.0) surf.rotate(-theta) surf.drawImage(surface.canvas, -width_i / 2, -height_i / 2) surf.restoreContext() return surf
def __init__(self, size, buffered): Surface.__init__(self, size) MouseWheelHandler.__init__(self, True) if isinstance(buffered, bool): self._bufferedimage = buffered else: self._bufferedimage = True try: if self.impl.canvasContext: self._isCanvas = True except: self._isCanvas = False self._bufferedimage = False if self._bufferedimage: self.surface = Surface(size) else: self.surface = self self.images = {} self.image_list = [] self.callback = None self.time = Time() self.event = pyjsdl.event self.addMouseListener(self) self.addMouseWheelListener(self) self.addKeyboardListener(self) self.sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEMOVE | Event.ONMOUSEOUT | Event.ONMOUSEWHEEL | Event.ONKEYDOWN | Event.ONKEYPRESS | Event.ONKEYUP) self.modKey = pyjsdl.event.modKey self.specialKey = pyjsdl.event.specialKey self.event._initiate_touch_listener(self) self._touch_callback = self.event.touchlistener.callback self._repaint = False self._rect_list = [] self._rect_len = 0 self._rect_num = 0 self._framerate = 0 self._frametime = 0 self._canvas_init() self.initialized = False