-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathtext.py
More file actions
143 lines (113 loc) · 3.94 KB
/
text.py
File metadata and controls
143 lines (113 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import pygfx
import numpy as np
from ._base import Graphic
from ._features import (
TextData,
FontSize,
TextFaceColor,
TextOutlineColor,
TextOutlineThickness,
)
class TextGraphic(Graphic):
_features = {
"text",
"font_size",
"face_color",
"outline_color",
"outline_thickness",
}
def __init__(
self,
text: str,
font_size: float | int = 14,
face_color: str | np.ndarray | list[float] | tuple[float] = "w",
outline_color: str | np.ndarray | list[float] | tuple[float] = "w",
outline_thickness: float = 0.0,
screen_space: bool = True,
offset: tuple[float] = (0, 0, 0),
anchor: str = "middle-center",
**kwargs,
):
"""
Create a text Graphic
Parameters
----------
text: str
text to display
font_size: float | int, default 10
font size
face_color: str or array, default "w"
str or RGBA array to set the color of the text
outline_color: str or array, default "w"
str or RGBA array to set the outline color of the text
outline_thickness: float, default 0
relative outline thickness, value between 0.0 - 0.5
screen_space: bool = True
if True, text size is in screen space, if False the text size is in data space
offset: (float, float, float), default (0, 0, 0)
places the text at this location
anchor: str, default "middle-center"
position of the origin of the text
a string representing the vertical and horizontal anchors, separated by a dash
* Vertical values: "top", "middle", "baseline", "bottom"
* Horizontal values: "left", "center", "right"
**kwargs
passed to Graphic
"""
super().__init__(**kwargs)
self._text = TextData(text)
self._font_size = FontSize(font_size)
self._face_color = TextFaceColor(face_color)
self._outline_color = TextOutlineColor(outline_color)
self._outline_thickness = TextOutlineThickness(outline_thickness)
world_object = pygfx.Text(
pygfx.TextGeometry(
text=self.text,
font_size=self.font_size,
screen_space=screen_space,
anchor=anchor,
),
pygfx.TextMaterial(
color=self.face_color,
outline_color=self.outline_color,
outline_thickness=self.outline_thickness,
pick_write=True,
),
)
self._set_world_object(world_object)
self.offset = offset
@property
def text(self) -> str:
"""the text displayed"""
return self._text.value
@text.setter
def text(self, text: str):
self._text.set_value(self, text)
@property
def font_size(self) -> float | int:
""" "text font size"""
return self._font_size.value
@font_size.setter
def font_size(self, size: float | int):
self._font_size.set_value(self, size)
@property
def face_color(self) -> pygfx.Color:
"""text face color"""
return self._face_color.value
@face_color.setter
def face_color(self, color: str | np.ndarray | list[float] | tuple[float]):
self._face_color.set_value(self, color)
@property
def outline_thickness(self) -> float:
"""text outline thickness"""
return self._outline_thickness.value
@outline_thickness.setter
def outline_thickness(self, thickness: float):
self._outline_thickness.set_value(self, thickness)
@property
def outline_color(self) -> pygfx.Color:
"""text outline color"""
return self._outline_color.value
@outline_color.setter
def outline_color(self, color: str | np.ndarray | list[float] | tuple[float]):
self._outline_color.set_value(self, color)