Fix bug in text box widget and multiline strings with markup
[naja.git] / naja / widgets / text.py
index e4eecaacad57e2f53ffdf07a9b8419a43896166f..1ddab05915122bf9c22bdbf033f78da57ea0a13f 100644 (file)
@@ -21,6 +21,9 @@ MARKUP_MAP = {
     'BLUE': ('glyphs/key.png', PALETTE.BLUE),
     'CLOCKWISE': ('glyphs/clockwise.png', None),
     'ANTICLOCKWISE': ('glyphs/anticlockwise.png', None),
+
+    'HEALTH_NOCOLOUR': ('glyphs/health.png', None),
+    'WINTOKEN_NOCOLOUR': ('glyphs/win.png', None),
 }
 
 
@@ -34,16 +37,22 @@ class Glyph(object):
 class TextWidget(Widget):
 
     def __init__(self, pos, text, size=None, fontname=None, fontsize=None,
-                 colour=None):
+                 colour=None, unselectable_colour=None):
         super(TextWidget, self).__init__(pos, size)
 
         self.text = text
         self.fontname = fontname or FONT
         self.fontsize = (fontsize or FONT_SIZE) // EIGHT_BIT_SCALE
         self.colour = convert_colour(colour or PALETTE.BLACK)
+        if unselectable_colour is not None:
+            unselectable_colour = convert_colour(unselectable_colour)
+        self.unselectable_colour = unselectable_colour
 
     def render_line(self, text):
-        text_surf = self.font.render(text, True, self.colour)
+        colour = self.colour
+        if not self.is_selectable() and self.unselectable_colour is not None:
+            colour = self.unselectable_colour
+        text_surf = self.font.render(text, True, colour)
         text_rect = text_surf.get_rect()
         return pygame.transform.scale(
             text_surf, (text_rect.width * EIGHT_BIT_SCALE,
@@ -134,6 +143,7 @@ class TextBoxWidget(TextWidget):
                         word = glyph.markup_text
                     remaining_words.insert(0, word)
             if current_words and words_fit(current_words):
+                line_count += 1
                 yield ' '.join(current_words)
 
     def prepare(self):