Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
 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
Beispiel #8
0
 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
Beispiel #9
0
 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
Beispiel #10
0
 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