Add Pico touch routing abstraction

This commit is contained in:
2026-06-03 02:48:30 -06:00
parent 2c7b090cfb
commit b5e8bf43fc
3 changed files with 113 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
class TouchEvent:
def __init__(self, x, y, pressed=True):
self.x = x
self.y = y
self.pressed = pressed
class TouchController:
def __init__(self, touch_device=None):
self.touch_device = touch_device
def read_event(self):
if not self.touch_device:
return None
point = self.touch_device.read()
if not point:
return None
return TouchEvent(point["x"], point["y"], point.get("pressed", True))
+38
View File
@@ -0,0 +1,38 @@
NAV_ITEMS = [
("dashboard", 0, 64),
("battery", 64, 128),
("temps", 128, 192),
("power", 192, 256),
("system", 256, 320),
]
class TouchRouter:
def __init__(self, screen_manager, width=320, height=480, nav_height=56):
self.screen_manager = screen_manager
self.width = width
self.height = height
self.nav_height = nav_height
def handle_touch(self, event):
if not event or not event.pressed:
return False
if self._is_bottom_nav(event.y):
screen = self._screen_for_nav_x(event.x)
if screen:
self.screen_manager.go_to(screen)
return True
return False
def _is_bottom_nav(self, y):
return y >= self.height - self.nav_height
def _screen_for_nav_x(self, x):
for screen, start_x, end_x in NAV_ITEMS:
if start_x <= x < end_x:
return screen
return None