flipped msb glyph
[naja.git] / naja / widgets / text.py
index 22914009f3a49fef75db2c115f7d59ada839d4b3..ab8b53d0f52be79da8fff14b70d5ac9627bdf1c1 100644 (file)
@@ -1,17 +1,24 @@
 import pygame
 
-from naja.constants import FONT, FONT_SIZE, EIGHT_BIT_SCALE
+from naja.constants import FONT, FONT_SIZE, EIGHT_BIT_SCALE, PALETTE
 from naja.resources import resources
-from naja.resources.mutators import EIGHT_BIT
+from naja.resources.mutators import EIGHT_BIT, blender
 from naja.utils import convert_colour
 from naja.widgets.base import Widget
 
 
 MARKUP_MAP = {
-    'NORTH': (1, 'glyphs/arrow_up.png'),
-    'SOUTH': (1, 'glyphs/arrow_down.png'),
-    'EAST': (1, 'glyphs/arrow_right.png'),
-    'WEST': (1, 'glyphs/arrow_left.png'),
+    'NORTH': (1, 'glyphs/arrow_up.png', None),
+    'SOUTH': (1, 'glyphs/arrow_down.png', None),
+    'EAST': (1, 'glyphs/arrow_right.png', None),
+    'WEST': (1, 'glyphs/arrow_left.png', None),
+    'HEALTH': (1, 'glyphs/health.png', PALETTE.DARK_RED),
+    'WINTOKEN': (1, 'glyphs/win.png', PALETTE.DARK_OLIVE),
+    'KEY': (1, 'glyphs/key.png', None),
+    'MSB': (1, 'glyphs/msb.png', None),
+    'REDKEY': (1, 'glyphs/key.png', PALETTE.ORANGE),
+    'GREENKEY': (1, 'glyphs/key.png', PALETTE.GREEN),
+    'BLUEKEY': (1, 'glyphs/key.png', PALETTE.BLUE),
 }
 
 
@@ -24,7 +31,7 @@ class TextWidget(Widget):
         self.text = text
         self.fontname = fontname or FONT
         self.fontsize = (fontsize or FONT_SIZE) // EIGHT_BIT_SCALE
-        self.colour = convert_colour(colour or (0, 0, 0))
+        self.colour = convert_colour(colour or PALETTE.BLACK)
 
     def render_line(self, text):
         text_surf = self.font.render(text, True, self.colour)
@@ -47,9 +54,9 @@ class TextBoxWidget(TextWidget):
         self.padding = kwargs.pop('padding', 5)
         self.border = kwargs.pop('border', 2)
         self.bg_colour = convert_colour(kwargs.pop('bg_colour',
-                                                   (255, 255, 255, 192)))
+                                                   PALETTE.LIGHT_VIOLET))
         self.border_colour = convert_colour(kwargs.pop('border_colour',
-                                                       (0, 0, 0)))
+                                                       PALETTE.BLACK))
         self.box_width = kwargs.pop('box_width', 0)
 
         super(TextBoxWidget, self).__init__(*args, **kwargs)
@@ -73,7 +80,9 @@ class TextBoxWidget(TextWidget):
         line_count = 0
         for line in self.text.splitlines():
             current_words = []
-            for word in line.split():
+            remaining_words = line.split()
+            while remaining_words:
+                word = remaining_words[0]
                 suffix = ''
                 if word[-1] in '.,':
                     suffix = word[-1]
@@ -86,17 +95,21 @@ class TextBoxWidget(TextWidget):
                 if words_fit(current_words):
                     if markup_data is not None:
                         size = self.font.size(
-                            ' '.join(current_words[:-1]) + ' ')
+                            ' '.join(current_words[:-1] + ['']))
                         pos = (size[0] * EIGHT_BIT_SCALE,
                                size[1] * line_count * EIGHT_BIT_SCALE)
                         pos = (pos[0] + self.padding, pos[1] + self.padding)
+                        colour = self.colour
+                        if markup_data[2] is not None:
+                            colour = markup_data[2]
                         image_map[pos] = resources.get_image(
-                            markup_data[1], transforms=(EIGHT_BIT,))
-                        continue
+                            markup_data[1],
+                            transforms=(EIGHT_BIT, blender(colour)))
+                    remaining_words.pop(0)
                 else:
                     line_count += 1
                     yield ' '.join(current_words[:-1])
-                    current_words = current_words[-1:]
+                    current_words = []
             if current_words and words_fit(current_words):
                 yield ' '.join(current_words)