|
|
|
|
@ -34,17 +34,17 @@ def gui_label( |
|
|
|
|
|
|
|
|
|
# Elide text to fit within the rectangle |
|
|
|
|
if elide_right and text_size.x > rect.width: |
|
|
|
|
_ellipsis = "..." |
|
|
|
|
ellipsis = "..." |
|
|
|
|
left, right = 0, len(text) |
|
|
|
|
while left < right: |
|
|
|
|
mid = (left + right) // 2 |
|
|
|
|
candidate = text[:mid] + _ellipsis |
|
|
|
|
candidate = text[:mid] + ellipsis |
|
|
|
|
candidate_size = measure_text_cached(font, candidate, font_size) |
|
|
|
|
if candidate_size.x <= rect.width: |
|
|
|
|
left = mid + 1 |
|
|
|
|
else: |
|
|
|
|
right = mid |
|
|
|
|
display_text = text[: left - 1] + _ellipsis if left > 0 else _ellipsis |
|
|
|
|
display_text = text[: left - 1] + ellipsis if left > 0 else ellipsis |
|
|
|
|
text_size = measure_text_cached(font, display_text, font_size) |
|
|
|
|
|
|
|
|
|
# Calculate horizontal position based on alignment |
|
|
|
|
@ -101,8 +101,7 @@ class Label(Widget): |
|
|
|
|
text_alignment: TextAlignment = TextAlignment.CENTER, |
|
|
|
|
text_padding: int = 20, |
|
|
|
|
text_color: rl.Color = DEFAULT_TEXT_COLOR, |
|
|
|
|
icon=None, |
|
|
|
|
elide_right: bool = False |
|
|
|
|
icon = None, |
|
|
|
|
): |
|
|
|
|
|
|
|
|
|
super().__init__() |
|
|
|
|
@ -113,7 +112,6 @@ class Label(Widget): |
|
|
|
|
self._text_padding = text_padding |
|
|
|
|
self._text_color = text_color |
|
|
|
|
self._icon = icon |
|
|
|
|
self._elide_right = elide_right |
|
|
|
|
self.set_text(text) |
|
|
|
|
|
|
|
|
|
def set_text(self, text): |
|
|
|
|
@ -129,29 +127,7 @@ class Label(Widget): |
|
|
|
|
def _update_text(self, text): |
|
|
|
|
self._emojis = [] |
|
|
|
|
self._text_size = [] |
|
|
|
|
if self._elide_right: |
|
|
|
|
display_text = text |
|
|
|
|
|
|
|
|
|
# Elide text to fit within the rectangle |
|
|
|
|
text_size = measure_text_cached(self._font, text, self._font_size) |
|
|
|
|
content_width = self._rect.width - self._text_padding * 2 |
|
|
|
|
if text_size.x > content_width: |
|
|
|
|
_ellipsis = "..." |
|
|
|
|
left, right = 0, len(text) |
|
|
|
|
while left < right: |
|
|
|
|
mid = (left + right) // 2 |
|
|
|
|
candidate = text[:mid] + _ellipsis |
|
|
|
|
candidate_size = measure_text_cached(self._font, candidate, self._font_size) |
|
|
|
|
if candidate_size.x <= content_width: |
|
|
|
|
left = mid + 1 |
|
|
|
|
else: |
|
|
|
|
right = mid |
|
|
|
|
display_text = text[: left - 1] + _ellipsis if left > 0 else _ellipsis |
|
|
|
|
|
|
|
|
|
self._text = [display_text] |
|
|
|
|
else: |
|
|
|
|
self._text = wrap_text(self._font, text, self._font_size, self._rect.width - (self._text_padding * 2)) |
|
|
|
|
|
|
|
|
|
self._text = wrap_text(self._font, text, self._font_size, self._rect.width - (self._text_padding*2)) |
|
|
|
|
for t in self._text: |
|
|
|
|
self._emojis.append(find_emoji(t)) |
|
|
|
|
self._text_size.append(measure_text_cached(self._font, t, self._font_size)) |
|
|
|
|
|