Source code for miniworlds.actors.texts.text
from typing import Tuple
import miniworlds.actors.actor as actor
import miniworlds.actors.texts.text_costume as text_costume
[docs]
class Text(actor.Actor):
"""
A Text-Actor is a actor which contains a Text.
You have to set the size of the actor with self.size() manually so that
the complete text can be seen.
Args:
position: Top-Left position of Text.
text: The initial text
Examples:
Create a new texts::
self.text = TextActor((1,1), "Hello World")
"""
[docs]
def __init__(
self, position: Tuple[float, float] = (0, 0), text: str = "", **kwargs
):
"""_summary_
Args:
position (tuple, optional): _description_. Defaults to (0,0).
text (Optional[int]): The text (otherwise empty string "")
"""
self._max_width = 0
super().__init__(position, **kwargs)
self.font_size = 24
self.costume.is_scaled = True
self.is_static: bool = True
self.fixed_size = False
self.set_text(text)
self.costume._update_draw_shape()
self.costume.set_dirty("write_text", self.costume.RELOAD_ACTUAL_IMAGE)
[docs]
def new_costume(self):
return text_costume.TextCostume(self)
@property
def font_size(self):
"""Set font size to a value, e.g. 10, 12, ...
Examples:
Sets size of actor to 10::
text.font_size = 10
"""
return self.costume.font_size
@font_size.setter
def font_size(self, value):
if self.costume:
self.costume.font_size = value
self.costume._update_draw_shape()
self.costume.set_dirty("write_text", self.costume.RELOAD_ACTUAL_IMAGE)
[docs]
def font_by_size(self, width=None, height=None):
self.font_size = self.costume.scale_to_size(width, height)
@property
def max_width(self):
return self._max_width
@max_width.setter
def max_width(self, value):
self._max_width = value
self.dirty = 1
self.costume._update_draw_shape()
self.costume.set_dirty("write_text", self.costume.RELOAD_ACTUAL_IMAGE)
[docs]
def get_text_width(self):
return self.costume.get_text_width()
[docs]
def get_text(self):
"""Gets the currently displayed text
Returns:
The currently displayed text
"""
return self.costume.text
@property
def text(self):
"""changes the text."""
return self.get_text()
@text.setter
def text(self, value):
if value == "":
value = " "
self.set_text(value)
self.costume.set_dirty("all", self.costume.RELOAD_ACTUAL_IMAGE)
[docs]
def set_text(self, text):
"""
Sets the text of the actor
Args:
text: The text
"""
self.position_manager.store_origin()
self.costume.text = text
self.costume._update_draw_shape()
self.costume.set_dirty("write_text", self.costume.RELOAD_ACTUAL_IMAGE)
self.position_manager.restore_origin()
[docs]
def on_shape_change(self):
self.costume._update_draw_shape()