Allow custom flags for blending.
[naja.git] / naja / widgets / text.py
index 7c1039ff4d2ef517f019c7d52b71f8a75c0149ea..6862b968907ec7132a15bc1a01f509e63d446e45 100644 (file)
@@ -3,7 +3,7 @@ import pygame.locals as pgl
 
 from naja.constants import FONT, FONT_SIZE, EIGHT_BIT_SCALE, PALETTE, KEYS
 from naja.resources import resources
-from naja.resources.mutators import EIGHT_BIT, blender
+from naja.resources.mutators import EIGHT_BIT, R180, blender
 from naja.utils import convert_colour
 from naja.widgets.base import Widget
 
@@ -40,7 +40,8 @@ class TextWidget(Widget):
     VIEW_PORT_DY = 50
 
     def __init__(self, pos, text, fontname=None, fontsize=None,
-                 colour=None, unselectable_colour=None, view_port=None):
+                 colour=None, unselectable_colour=None, view_port=None,
+                 centre=False):
         super(TextWidget, self).__init__(pos)
 
         self.text = text
@@ -52,6 +53,8 @@ class TextWidget(Widget):
         self.unselectable_colour = unselectable_colour
         self.view_port = (
             pygame.Rect((0, 0), view_port) if view_port is not None else None)
+        self.centre = centre
+        self.centre_pos = pos
 
     def render_line(self, text):
         colour = self.colour
@@ -68,6 +71,9 @@ class TextWidget(Widget):
             self.size = self.view_port.size
         else:
             self.size = self.surface.get_rect().size
+        if self.centre:
+            self.pos = (self.centre_pos[0] - self.size[0] // 2,
+                        self.centre_pos[1])
 
     def prepare(self):
         self.font = resources.get_font(self.fontname, self.fontsize)
@@ -98,6 +104,23 @@ class TextWidget(Widget):
             rect = self.pos
             area = self.view_port
         surface.blit(self.surface, rect, area)
+        if self.view_port is not None:
+            self.draw_arrows(surface)
+
+    def draw_arrows(self, surface):
+        if self.view_port.top > 0:
+            up = resources.get_image('bits', 'arrow_on.png',
+                                     transforms=(EIGHT_BIT,))
+            icon_size = up.get_rect().height
+            pos = (self.pos[0] + self.view_port.width - icon_size, self.pos[1])
+            surface.blit(up, pos)
+        if self.view_port.bottom < self.surface.get_rect().bottom:
+            down = resources.get_image('bits', 'arrow_on.png',
+                                       transforms=(R180, EIGHT_BIT))
+            icon_size = down.get_rect().height
+            pos = (self.pos[0] + self.view_port.width - icon_size,
+                   self.pos[1] + self.view_port.height - icon_size)
+            surface.blit(down, pos)
 
 
 class TextBoxWidget(TextWidget):
@@ -147,7 +170,7 @@ class TextBoxWidget(TextWidget):
     def _wrapped_lines(self, image_map):
         def words_fit(words):
             words_line = ' '.join(words)
-            width = self.font.size(words_line)[0]
+            width = self.font.size(words_line)[0] * EIGHT_BIT_SCALE
             if width < self.box_width:
                 return True
             elif len(words) == 1: