diff --git a/system/ui/widgets/button.py b/system/ui/widgets/button.py index 0b0cac4b34..ae85f14bb2 100644 --- a/system/ui/widgets/button.py +++ b/system/ui/widgets/button.py @@ -166,6 +166,7 @@ class Button(Widget): text_alignment: TextAlignment = TextAlignment.CENTER, text_padding: int = 20, enabled: bool = True, + icon = None, ): super().__init__() @@ -180,6 +181,7 @@ class Button(Widget): self._text_size = measure_text_cached(gui_app.font(font_weight), text, font_size) self._text_alignment = text_alignment self._text_padding = text_padding + self._icon = icon self.enabled = enabled def _handle_mouse_release(self, mouse_pos: MousePos): @@ -202,12 +204,29 @@ class Button(Widget): rl.draw_rectangle_rounded(self._rect, roundness, 10, self._background_color) text_pos = rl.Vector2(0, self._rect.y + (self._rect.height - self._text_size.y) // 2) - if self._text_alignment == TextAlignment.LEFT: - text_pos.x = self._rect.x + self._text_padding - elif self._text_alignment == TextAlignment.CENTER: - text_pos.x = self._rect.x + (self._rect.width - self._text_size.x) // 2 - elif self._text_alignment == TextAlignment.RIGHT: - text_pos.x = self._rect.x + self._rect.width - self._text_size.x - self._text_padding + if self._icon: + icon_y = self._rect.y + (self._rect.height - self._icon.height) / 2 + if self._text: + if self._text_alignment == TextAlignment.LEFT: + icon_x = self._rect.x + self._text_padding + text_pos.x = icon_x + self._icon.width + ICON_PADDING + elif self._text_alignment == TextAlignment.CENTER: + total_width = self._icon.width + ICON_PADDING + self._text_size.x + icon_x = self._rect.x + (self._rect.width - total_width) / 2 + text_pos.x = icon_x + self._icon.width + ICON_PADDING + else: + text_pos.x = self._rect.x + self._rect.width - self._text_size.x - self._text_padding + icon_x = text_pos.x - ICON_PADDING - self._icon.width + else: + icon_x = self._rect.x + (self._rect.width - self._icon.width) / 2 + rl.draw_texture_v(self._icon, rl.Vector2(icon_x, icon_y), rl.WHITE if self.enabled else rl.Color(255, 255, 255, 100)) + else: + if self._text_alignment == TextAlignment.LEFT: + text_pos.x = self._rect.x + self._text_padding + elif self._text_alignment == TextAlignment.CENTER: + text_pos.x = self._rect.x + (self._rect.width - self._text_size.x) // 2 + elif self._text_alignment == TextAlignment.RIGHT: + text_pos.x = self._rect.x + self._rect.width - self._text_size.x - self._text_padding rl.draw_text_ex(self._label_font, self._text, text_pos, self._font_size, 0, self._text_color) class ButtonRadio(Button): @@ -220,8 +239,7 @@ class ButtonRadio(Button): text_padding: int = 20, ): - super().__init__(text, click_callback=click_callback, font_size=font_size, border_radius=border_radius, text_padding=text_padding) - self._icon = icon + super().__init__(text, click_callback=click_callback, font_size=font_size, border_radius=border_radius, text_padding=text_padding, icon=icon) self.selected = False def _handle_mouse_release(self, mouse_pos: MousePos):