annotate nagslang/widgets/text.py @ 698:020e73192fe2 default tip

Update debian urls
author Neil Muller <drnlmuller@gmail.com>
date Tue, 17 Mar 2020 22:38:52 +0200
parents 7d376e66bfd2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
237
6995dbefdbfb Add multiline widget
Neil Muller <drnlmuller@gmail.com>
parents: 196
diff changeset
1 from nagslang.constants import FONT, FONT_SIZE
6995dbefdbfb Add multiline widget
Neil Muller <drnlmuller@gmail.com>
parents: 196
diff changeset
2 from nagslang.widgets.base import Widget
196
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
3 import pygame
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
4
29
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
5 from nagslang.utils import convert_colour
33
d9b65cf72db4 Prettier resource loading module
Stefano Rivera <stefano@rivera.za.net>
parents: 29
diff changeset
6 from nagslang.resources import resources
29
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9 class TextWidget(Widget):
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
10 def __init__(self, pos, text, size=None, fontname=None, fontsize=None,
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11 colour=None):
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 super(TextWidget, self).__init__(pos, size)
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14 self.text = text
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15 self.fontname = fontname or FONT
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16 self.fontsize = fontsize or FONT_SIZE
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
17 self.colour = convert_colour(colour or (0, 0, 0))
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
18
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
19 self.prepare()
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
20
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21 def prepare(self):
33
d9b65cf72db4 Prettier resource loading module
Stefano Rivera <stefano@rivera.za.net>
parents: 29
diff changeset
22 self.font = resources.get_font(self.fontname, self.fontsize)
29
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
23 self.surface = self.font.render(self.text, True, self.colour)
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
24 self.text_rect = self.surface.get_rect()
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
25 if not self.size:
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26 self.rect.size = self.text_rect.size
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
28 def draw(self, surface):
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
29 if self.visible:
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 self.do_prepare()
58505d3482b6 Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
31 surface.blit(self.surface, self.rect)
196
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
32
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
33
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
34 class LabelWidget(TextWidget):
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
35 def __init__(self, *args, **kwargs):
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
36 self.padding = kwargs.pop('padding', 5)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
37 self.border = kwargs.pop('border', 2)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
38 self.bg_colour = convert_colour(kwargs.pop('bg_colour',
498
7d376e66bfd2 Less transparent text.
Jeremy Thurgood <firxen@gmail.com>
parents: 405
diff changeset
39 (255, 255, 255, 192)))
196
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
40 self.border_colour = convert_colour(kwargs.pop('border_colour',
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
41 (0, 0, 0)))
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
42 super(LabelWidget, self).__init__(*args, **kwargs)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
43
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
44 def prepare(self):
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
45 super(LabelWidget, self).prepare()
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
46 if not self.size:
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
47 self.rect.width += 2 * self.padding
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
48 self.rect.height += 2 * self.padding
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
49 surface = pygame.Surface(self.rect.size)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
50 surface = surface.convert_alpha()
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
51 surface.fill(self.bg_colour)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
52 surface.blit(self.surface, self.surface.get_rect().move(
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
53 (self.padding, self.padding)))
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
54 pygame.draw.rect(surface, self.border_colour, surface.get_rect(),
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
55 self.border)
40f618978c00 Overlays that don't suck as much
Stefano Rivera <stefano@rivera.za.net>
parents: 33
diff changeset
56 self.surface = surface
395
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
57
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
58
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
59 class MultiLineWidget(LabelWidget):
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
60
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
61 def prepare(self):
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
62 self.font = resources.get_font(self.fontname, self.fontsize)
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
63 surfaces = []
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
64 height = 0
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
65 width = 0
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
66 for line in self.text.split('\n'):
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
67 surface = self.font.render(line, True, self.colour)
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
68 width = max(width, surface.get_rect().width)
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
69 height += surface.get_rect().height
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
70 surfaces.append(surface)
405
c0ce236f153c Pad multiline text.
Jeremy Thurgood <firxen@gmail.com>
parents: 395
diff changeset
71 width += 2 * self.padding
c0ce236f153c Pad multiline text.
Jeremy Thurgood <firxen@gmail.com>
parents: 395
diff changeset
72 height += 2 * self.padding
395
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
73 self.surface = pygame.surface.Surface((width, height),
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
74 pygame.locals.SRCALPHA)
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
75 self.surface.fill(self.bg_colour)
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
76 y = 0
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
77 for surface in surfaces:
405
c0ce236f153c Pad multiline text.
Jeremy Thurgood <firxen@gmail.com>
parents: 395
diff changeset
78 self.surface.blit(surface, (self.padding, y + self.padding))
395
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
79 y += surface.get_rect().height
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
80 self.text_rect = self.surface.get_rect()
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
81 if not self.size:
450081926426 Better MultiLineWidget
Neil Muller <drnlmuller@gmail.com>
parents: 237
diff changeset
82 self.rect.size = self.text_rect.size