sliders #32
|
@ -16,7 +16,8 @@ class EventHandler:
|
||||||
self.engine = core
|
self.engine = core
|
||||||
self.key_pressed = []
|
self.key_pressed = []
|
||||||
self.buttons_area = []
|
self.buttons_area = []
|
||||||
self.hovered_area = []
|
self.hovered_buttons_area = []
|
||||||
|
self.hovered_sliders_area = []
|
||||||
self.sliders_area = []
|
self.sliders_area = []
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -43,7 +44,7 @@ class EventHandler:
|
||||||
callback: FunctionType | classmethod | staticmethod, name: str,
|
callback: FunctionType | classmethod | staticmethod, name: str,
|
||||||
is_window_relative: int = -1,
|
is_window_relative: int = -1,
|
||||||
hover_callback: FunctionType | classmethod | staticmethod = None):
|
hover_callback: FunctionType | classmethod | staticmethod = None):
|
||||||
"""Enregistre une zone comme bouton. La fonction donnée sera donc executé lorsque la zone sur la fenêtre
|
"""Enregistre une zone comme bouton. La fonction donnée sera donc executée lorsque la zone sur la fenêtre
|
||||||
sera cliqué. is_window_relative doit être 0 pour que le rect soit multipliée par la largeur de la fenêtre et 1
|
sera cliqué. is_window_relative doit être 0 pour que le rect soit multipliée par la largeur de la fenêtre et 1
|
||||||
pour qu'elle soit multipliée par la hauteur"""
|
pour qu'elle soit multipliée par la hauteur"""
|
||||||
self.buttons_area.append((rect, callback, is_window_relative, name, hover_callback))
|
self.buttons_area.append((rect, callback, is_window_relative, name, hover_callback))
|
||||||
|
@ -62,11 +63,21 @@ class EventHandler:
|
||||||
def register_slider_area(self, size: tuple[float | int, float | int],
|
def register_slider_area(self, size: tuple[float | int, float | int],
|
||||||
motion_rect: tuple[float | int, float | int, float | int, float | int],
|
motion_rect: tuple[float | int, float | int, float | int, float | int],
|
||||||
motion_axes: tuple[bool, bool],
|
motion_axes: tuple[bool, bool],
|
||||||
is_window_relative: int = -1):
|
is_window_relative: int = -1,
|
||||||
|
clicked_callback: FunctionType | classmethod | staticmethod = None,
|
||||||
|
released_callback: FunctionType | classmethod | staticmethod = None,
|
||||||
|
hover_callback: FunctionType | classmethod | staticmethod = None):
|
||||||
"""Enregistre une zone comme une zone déplaçable à l'écran."""
|
"""Enregistre une zone comme une zone déplaçable à l'écran."""
|
||||||
self.sliders_area.append([[motion_rect[0], motion_rect[1], *size], is_window_relative, False, (0, 0), motion_axes, motion_rect])
|
self.sliders_area.append([[motion_rect[0], motion_rect[1], *size], is_window_relative, False, (0, 0),
|
||||||
|
motion_axes, motion_rect, clicked_callback, released_callback, hover_callback])
|
||||||
# Le premier booléen correspond à l'état de suivi de la souris
|
# Le premier booléen correspond à l'état de suivi de la souris
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_slider_area_values(slider: list):
|
||||||
|
"""Donne la valeur de la zone de slider donnée."""
|
||||||
|
return round((slider[0][0]-slider[5][0])/slider[5][2], 5), round((slider[0][1]-slider[5][1])/slider[5][3], 5)
|
||||||
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Vérifie s'il y a de nouvelles interactions et les traites."""
|
"""Vérifie s'il y a de nouvelles interactions et les traites."""
|
||||||
|
|
||||||
|
@ -101,21 +112,27 @@ class EventHandler:
|
||||||
area[3] = (e.pos[0]/window_size[0] - area[0][0], e.pos[1]/window_size[1] - area[0][1])
|
area[3] = (e.pos[0]/window_size[0] - area[0][0], e.pos[1]/window_size[1] - area[0][1])
|
||||||
else:
|
else:
|
||||||
area[3] = (e.pos[0] - area[0][0], e.pos[1] - area[0][1])
|
area[3] = (e.pos[0] - area[0][0], e.pos[1] - area[0][1])
|
||||||
|
|
||||||
|
if area[6] is not None:
|
||||||
|
area[6](self.get_slider_area_values(area))
|
||||||
|
|
||||||
elif e.type == MOUSEBUTTONUP:
|
elif e.type == MOUSEBUTTONUP:
|
||||||
for area in self.sliders_area:
|
for area in self.sliders_area:
|
||||||
area[2] = False
|
area[2] = False
|
||||||
|
if area[7] is not None:
|
||||||
|
area[7](self.get_slider_area_values(area))
|
||||||
|
|
||||||
elif e.type == MOUSEMOTION:
|
elif e.type == MOUSEMOTION:
|
||||||
for area in self.buttons_area:
|
for area in self.buttons_area:
|
||||||
if area[4] is not None:
|
if area[4] is not None:
|
||||||
if self.get_click_collision(area[0], e.pos, area[2]):
|
if self.get_click_collision(area[0], e.pos, area[2]):
|
||||||
if area not in self.hovered_area:
|
if area not in self.hovered_buttons_area:
|
||||||
area[4](True)
|
area[4](True)
|
||||||
self.hovered_area.append(area)
|
self.hovered_buttons_area.append(area)
|
||||||
else:
|
else:
|
||||||
if area in self.hovered_area:
|
if area in self.hovered_buttons_area:
|
||||||
area[4](False)
|
area[4](False)
|
||||||
self.hovered_area.remove(area)
|
self.hovered_buttons_area.remove(area)
|
||||||
|
|
||||||
for area in self.sliders_area:
|
for area in self.sliders_area:
|
||||||
if area[2]:
|
if area[2]:
|
||||||
|
|
|
@ -47,7 +47,7 @@ class Game(Engine):
|
||||||
menu.add_widget(Slider(40, 200, base_image, hover_image))
|
menu.add_widget(Slider(40, 200, base_image, hover_image))
|
||||||
self.menu_manager.register_menu(menu, "main")
|
self.menu_manager.register_menu(menu, "main")
|
||||||
|
|
||||||
self.event_handler.register_slider_area((0.1, 0.1), (0.2, 0.4, 0.3, 0.3), (True, True), 1)
|
self.event_handler.register_slider_area((0.1, 0.1), (0.2, 0.4, 0.3, 0.3), (True, True), 1, clicked_callback=print,released_callback=print)
|
||||||
|
|
||||||
self.menu_manager.show("main")
|
self.menu_manager.show("main")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue