diff --git a/NOTE.md b/NOTE.md index 284ba4a..d374ced 100644 --- a/NOTE.md +++ b/NOTE.md @@ -12,7 +12,6 @@ A faire : - Voir si les event listener intégré à pyglet sont plus pratique que l'event propagation (?) - Faire une scène incluant par défaut les boutons "Retour" (?) -- Faire des scènes "pop-up" (?) Bug : diff --git a/assets/image/popup/background.png b/assets/image/popup/background.png new file mode 100644 index 0000000..9a2d7d9 Binary files /dev/null and b/assets/image/popup/background.png differ diff --git a/source/gui/scene/Result.py b/source/gui/scene/Result.py index d1b4981..3f17d41 100644 --- a/source/gui/scene/Result.py +++ b/source/gui/scene/Result.py @@ -5,12 +5,13 @@ import pyglet.clock from source.gui import texture, widget from source.gui.event import StopEvent from source.gui.scene.abc import Scene +from source.gui.scene.abc.Popup import Popup if TYPE_CHECKING: from source.gui.window import Window -class Result(Scene): +class Result(Popup): def __init__(self, window: "Window", won: bool, **kwargs): super().__init__(window, **kwargs) @@ -25,9 +26,3 @@ class Result(Scene): from source.gui.scene import MainMenu pyglet.clock.schedule_once(lambda dt: self.window.set_scene(MainMenu), 5.0) - - def on_mouse_press_after(self, x: int, y: int, button: int, modifiers: int): - raise StopEvent() - - def on_mouse_motion_after(self, x: int, y: int, button: int, modifiers: int): - raise StopEvent() diff --git a/source/gui/scene/Settings.py b/source/gui/scene/Settings.py index 7e8f850..9756902 100644 --- a/source/gui/scene/Settings.py +++ b/source/gui/scene/Settings.py @@ -1,17 +1,24 @@ from typing import TYPE_CHECKING -from source.gui.event import StopEvent -from source.gui.scene.abc import Scene from source.gui import widget, texture +from source.gui.scene.abc.Popup import Popup if TYPE_CHECKING: from source.gui.window import Window -class Settings(Scene): +class Settings(Popup): def __init__(self, window: "Window", **kwargs): super().__init__(window, **kwargs) + self.background = self.add_widget( + widget.Image, + + x=0, y=0, width=1.0, height=1.0, + + image=texture.Popup.Style1.background + ) + self.back = self.add_widget( widget.Button, x=20, y=20, width=0.2, height=0.1, @@ -43,9 +50,3 @@ class Settings(Scene): text_transform=lambda value: round(value, 2) ) - - def on_mouse_press_after(self, x: int, y: int, button: int, modifiers: int): - raise StopEvent() - - def on_mouse_motion_after(self, x: int, y: int, button: int, modifiers: int): - raise StopEvent() diff --git a/source/gui/scene/abc/Popup.py b/source/gui/scene/abc/Popup.py new file mode 100644 index 0000000..b38a807 --- /dev/null +++ b/source/gui/scene/abc/Popup.py @@ -0,0 +1,16 @@ +from abc import ABC + +from source.gui.event import StopEvent +from source.gui.scene.abc import Scene + + +class Popup(Scene, ABC): + """ + Similaire à une Scène, mais empêche les interactions avec les scènes en arrière-plan. + """ + + def on_mouse_press_after(self, x: int, y: int, button: int, modifiers: int): + raise StopEvent() + + def on_mouse_motion_after(self, x: int, y: int, button: int, modifiers: int): + raise StopEvent() diff --git a/source/gui/texture/Popup.py b/source/gui/texture/Popup.py new file mode 100644 index 0000000..d7e3d88 --- /dev/null +++ b/source/gui/texture/Popup.py @@ -0,0 +1,10 @@ +from . import path +from .abc import Style +from .type import Texture + +path = path / "popup" + + +class Popup: + class Style1(Style): + background = Texture(path / "background.png") diff --git a/source/gui/texture/__init__.py b/source/gui/texture/__init__.py index fa5a737..7456e48 100644 --- a/source/gui/texture/__init__.py +++ b/source/gui/texture/__init__.py @@ -2,6 +2,7 @@ from pathlib import Path path: Path = Path("./assets/image") +from .Popup import Popup from .Background import Background from .Button import Button from .Checkbox import Checkbox diff --git a/source/gui/widget/Image.py b/source/gui/widget/Image.py index edd2680..9b40e91 100644 --- a/source/gui/widget/Image.py +++ b/source/gui/widget/Image.py @@ -38,7 +38,7 @@ class Image(BoxWidget): # refresh def _refresh_size(self): - self.image.width, self.image.height = self.size + self.image.x, self.image.y, self.image.width, self.image.height = self.bbox # event diff --git a/source/gui/widget/Input.py b/source/gui/widget/Input.py index 517bdce..b2c878f 100644 --- a/source/gui/widget/Input.py +++ b/source/gui/widget/Input.py @@ -121,8 +121,6 @@ class Input(BoxWidget): self.trigger_event("on_enter") def on_text(self, char: str): - print("on_text") - if not self.activated: return # ignore si ce widget est désactivé / non sélectionné if not self.label.multiline and char in "\r\n": return # si le texte est sur une ligne, ignore les retours