Sound panel blinky

This commit is contained in:
firestarsdog
2026-08-23 04:48:35 -04:00
parent 58e919c264
commit 33f6d69a32
3 changed files with 50 additions and 9 deletions
@@ -603,6 +603,7 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
self._page_anim_committed = False
self._page_anim_prev_tiles: list = []
self._page_drag_active = False
self._page_drag_eligible = False
self._page_drag_offset = 0.0
self._page_drag_start_x = 0.0
self._page_drag_start_y = 0.0
@@ -918,6 +919,7 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
super()._handle_mouse_press(mouse_pos)
if self._has_pagination:
if self._page_clip_rect and not rl.check_collision_point_rec(mouse_pos, self._page_clip_rect):
self._page_drag_eligible = False
return
if self._page_animating:
@@ -926,15 +928,17 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
self._page_drag_start_x = mouse_pos.x
self._page_drag_start_y = mouse_pos.y
self._page_drag_active = False
self._page_drag_eligible = True
self._page_drag_offset = 0.0
def _handle_mouse_event(self, mouse_event: MouseEvent) -> None:
super()._handle_mouse_event(mouse_event)
if self._has_pagination:
if self._has_pagination and getattr(self, "_page_drag_eligible", False):
dx = mouse_event.pos.x - self._page_drag_start_x
dy = abs(mouse_event.pos.y - self._page_drag_start_y)
if dy > abs(dx) * 1.2 and dy > 32:
self._page_drag_active = False
self._page_drag_eligible = False
self._page_drag_offset = 0.0
return
if (self._current_page == 0 and dx > 0) or \
@@ -947,6 +951,7 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
self._can_click = False
def _handle_mouse_release(self, mouse_pos: MousePos) -> None:
self._page_drag_eligible = False
if self._page_drag_active and self._has_pagination:
self._page_drag_active = False
offset = self._page_drag_offset
@@ -1026,6 +1031,7 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
def show_event(self) -> None:
super().show_event()
self._page_drag_eligible = False
self._page_drag_active = False
self._page_drag_offset = 0.0
self._page_animating = False
@@ -1034,6 +1040,14 @@ class PanelManagerView(AetherInteractiveMixin, Widget):
self._current_page = 0
self._on_page_changed()
def hide_event(self) -> None:
super().hide_event()
self._page_drag_eligible = False
self._page_drag_active = False
self._page_drag_offset = 0.0
self._page_animating = False
self._page_anim_prev_tiles.clear()
# ═══════════════════════════════════════════════════════════════
# AdjustorTogglesPanelView — shared adjustor+toggle-grid base
@@ -59,20 +59,13 @@ class SoundsManagerView(AdjustorTogglesPanelView):
self._init_adjustors()
self._init_toggles()
self._forward_touch_valid()
def _forward_touch_valid(self):
self._toggle_grid.set_touch_valid_callback(
lambda: self._scroll_panel.is_touch_valid()
)
def _init_toggles(self):
if self.PANEL_STYLE.toggle_row_mode:
self._toggle_grid = TileGrid(columns=1, padding=SPACING.md, min_tile_height=TOGGLE_MIN_HEIGHT)
else:
self._toggle_grid = TileGrid(columns=2, padding=12, min_tile_height=130.0)
self._child(self._toggle_grid)
self._page_grid = self._toggle_grid
self.register_page_grid(self._toggle_grid)
toggle_defs = []
for key in self._controller.CUSTOM_ALERTS_KEYS:
+34
View File
@@ -615,6 +615,40 @@ class TestAethergridContracts(unittest.TestCase):
view._activate_target(mod.BACK_BTN)
app_mod.gui_app.pop_widget.assert_called_once()
def test_panel_manager_view_page_drag_eligibility_and_reset(self):
mod = _import_aethergrid()
view = mod.PanelManagerView()
view._page_count = 2
view._current_page = 1
view._page_clip_rect = mod.rl.Rectangle(1000, 100, 800, 800)
view._scroll_rect = mod.rl.Rectangle(0, 0, 1920, 1080)
# Press outside grid (e.g. at volume adjustor on left: x=200, y=200)
view._handle_mouse_press(types.SimpleNamespace(x=200, y=200))
self.assertFalse(view._page_drag_eligible)
self.assertFalse(view._page_drag_active)
# Move event while not eligible does not trigger drag offset
mouse_event = types.SimpleNamespace(pos=types.SimpleNamespace(x=500, y=200), left_pressed=False, left_down=True, left_released=False, slot=0)
view._handle_mouse_event(mouse_event)
self.assertFalse(view._page_drag_active)
self.assertEqual(view._page_drag_offset, 0.0)
# Press inside grid (e.g. at x=1200, y=200)
view._handle_mouse_press(types.SimpleNamespace(x=1200, y=200))
self.assertTrue(view._page_drag_eligible)
# Move event while eligible calculates drag offset (swipe right towards page 0)
drag_event = types.SimpleNamespace(pos=types.SimpleNamespace(x=1250, y=200), left_pressed=False, left_down=True, left_released=False, slot=0)
view._handle_mouse_event(drag_event)
self.assertTrue(view._page_drag_active)
self.assertEqual(view._page_drag_offset, 50.0)
# Release resets eligibility and active drag
view._handle_mouse_release(types.SimpleNamespace(x=1250, y=200))
self.assertFalse(view._page_drag_eligible)
self.assertFalse(view._page_drag_active)
if __name__ == "__main__":
unittest.main()