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, blender
from naja.utils import convert_colour
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),
}
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)
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)
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]
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, blender(self.colour)))
- continue
+ 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)