Mercurial > nagslang
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 |
rev | line source |
---|---|
237 | 1 from nagslang.constants import FONT, FONT_SIZE |
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 | 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 | 7 |
8 | |
9 class TextWidget(Widget): | |
10 def __init__(self, pos, text, size=None, fontname=None, fontsize=None, | |
11 colour=None): | |
12 super(TextWidget, self).__init__(pos, size) | |
13 | |
14 self.text = text | |
15 self.fontname = fontname or FONT | |
16 self.fontsize = fontsize or FONT_SIZE | |
17 self.colour = convert_colour(colour or (0, 0, 0)) | |
18 | |
19 self.prepare() | |
20 | |
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 | 23 self.surface = self.font.render(self.text, True, self.colour) |
24 self.text_rect = self.surface.get_rect() | |
25 if not self.size: | |
26 self.rect.size = self.text_rect.size | |
27 | |
28 def draw(self, surface): | |
29 if self.visible: | |
30 self.do_prepare() | |
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 | 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 | 57 |
58 | |
59 class MultiLineWidget(LabelWidget): | |
60 | |
61 def prepare(self): | |
62 self.font = resources.get_font(self.fontname, self.fontsize) | |
63 surfaces = [] | |
64 height = 0 | |
65 width = 0 | |
66 for line in self.text.split('\n'): | |
67 surface = self.font.render(line, True, self.colour) | |
68 width = max(width, surface.get_rect().width) | |
69 height += surface.get_rect().height | |
70 surfaces.append(surface) | |
405 | 71 width += 2 * self.padding |
72 height += 2 * self.padding | |
395 | 73 self.surface = pygame.surface.Surface((width, height), |
74 pygame.locals.SRCALPHA) | |
75 self.surface.fill(self.bg_colour) | |
76 y = 0 | |
77 for surface in surfaces: | |
405 | 78 self.surface.blit(surface, (self.padding, y + self.padding)) |
395 | 79 y += surface.get_rect().height |
80 self.text_rect = self.surface.get_rect() | |
81 if not self.size: | |
82 self.rect.size = self.text_rect.size |