diff --git a/main.pyw b/main.pyw index c009e07..dd12ef6 100644 --- a/main.pyw +++ b/main.pyw @@ -13,14 +13,14 @@ class TestScene(Scene): # loading resource - normal_texture = pyglet.image.load("./assets/image/button/test_button_normal.png") - hover_texture = pyglet.image.load("./assets/image/button/test_button_hover.png") - click_texture = pyglet.image.load("./assets/image/button/test_button_clicking.png") + texture_normal = pyglet.image.load("./assets/image/button/test_button_normal.png") + texture_hover = pyglet.image.load("./assets/image/button/test_button_hover.png") + texture_click = pyglet.image.load("./assets/image/button/test_button_clicking.png") button_atlas = pyglet.image.atlas.TextureAtlas() - normal_region = button_atlas.add(normal_texture) - hover_region = button_atlas.add(hover_texture) - click_region = button_atlas.add(click_texture) + region_normal = button_atlas.add(texture_normal) + region_hover = button_atlas.add(texture_hover) + region_click = button_atlas.add(texture_click) self.background_batch = pyglet.graphics.Batch() self.label_batch = pyglet.graphics.Batch() @@ -33,9 +33,9 @@ class TestScene(Scene): x=0.5, y=0.5, width=0.5, height=0.5, - texture_normal=normal_region, - texture_hover=hover_region, - texture_click=click_region, + texture_normal=region_normal, + texture_hover=region_hover, + texture_click=region_click, label_text="Hello World !", @@ -51,8 +51,6 @@ class TestScene(Scene): self.label_batch.draw() - - # Create a new window window = Window(resizable=True, vsync=False) window.add_scene(TestScene) diff --git a/source/gui/widget/Button.py b/source/gui/widget/Button.py index d6f19a2..8baf391 100644 --- a/source/gui/widget/Button.py +++ b/source/gui/widget/Button.py @@ -38,15 +38,16 @@ class Button(BoxWidget): self.background = Sprite( img=self._texture_normal, - x=self.x, y=self.y, width=self.width, height=self.height, **dict_prefix("background_", kwargs) ) self.label = pyglet.text.Label( - x=self.x, y=self.y, width=self.width, height=self.height, + anchor_x="center", anchor_y="center", **dict_prefix("label_", kwargs) ) + self._refresh_size() # refresh the size and position for the background and label + # background @property @@ -64,9 +65,20 @@ class Button(BoxWidget): self._texture_normal ) + # refresh + def _refresh_background(self) -> None: self.background.image = self.background_texture + def _refresh_size(self) -> None: + self.background.x = self.x + self.background.y = self.y + self.background.width = self.width + self.background.height = self.height + + self.label.x = self.x + (self.width / 2) + self.label.y = self.y + (self.height / 2) + @BoxWidget.hovering.setter def hovering(self, hovering: bool): # when the hover state is changed, update the background @@ -82,15 +94,7 @@ class Button(BoxWidget): # event def on_resize(self, width: int, height: int): - self.background.x = self.x - self.background.y = self.y - self.background.width = self.width - self.background.height = self.height - - self.label.x = self.x - self.label.y = self.y - self.label.width = self.width - self.label.height = self.height + self._refresh_size() def draw(self): """ diff --git a/source/gui/widget/Text.py b/source/gui/widget/Text.py index 999f1e4..198b7a3 100644 --- a/source/gui/widget/Text.py +++ b/source/gui/widget/Text.py @@ -24,16 +24,20 @@ class Text(BoxWidget): super().__init__(scene, x, y, width, height) self.label = pyglet.text.Label( - x=self.x, y=self.y, width=self.width, height=self.height, *args, **kwargs ) - def on_resize(self, width: int, height: int): + self._refresh_size() + + def _refresh_size(self): self.label.x = self.x self.label.y = self.y self.label.width = self.width self.label.height = self.height + def on_resize(self, width: int, height: int): + self._refresh_size() + def draw(self): """ The draw function. Can be called to draw the widget, but can be ignored to draw it with batchs. diff --git a/source/utils/dict.py b/source/utils/dict.py index 2d58294..f97dde2 100644 --- a/source/utils/dict.py +++ b/source/utils/dict.py @@ -1,12 +1,19 @@ from typing import Callable, Any -def dict_filter(filter_func: Callable[[Any, Any], bool], dictionary: dict) -> dict: +def dict_filter(filter_func: Callable[[Any, Any], bool], dictionary: dict[Any, Any]) -> dict[Any, Any]: """ Filter a dict object with the filter function given. :filter_func: the function to filter with :dictionary: the dictionary to filter :return: the filtered dictionary + + Example : + filter_func = lambda key, value: key.startswith("valeur") + dictionary = {"valeur1": 1, "valeur2": 2, "clé1": None} + + result = {"valeur1": 1, "valeur2": 2} + """ return { @@ -17,12 +24,18 @@ def dict_filter(filter_func: Callable[[Any, Any], bool], dictionary: dict) -> di } -def dict_prefix(prefix: str, dictionary: dict) -> dict: +def dict_prefix(prefix: str, dictionary: dict[str, Any]) -> dict[str, Any]: """ Take only the keys that start with the prefix, and remove this prefix from the keys. :prefix: the prefix to use :dictionary: the dictionary to filter :return: the dictionary with the prefix + + Example: + prefix = "button" + dictionary = {"button1": 1, "button2": 2, "label1": None} + + result = {"1": 1, "2": 2} """ return {