diff --git a/python_payload/st3m/event.py b/python_payload/st3m/event.py index 99982163815297e78a2ba67fc003918076e02ea6..50ae27b10d564b0db6c025fdae7208ec16589b55 100644 --- a/python_payload/st3m/event.py +++ b/python_payload/st3m/event.py @@ -73,7 +73,7 @@ class Engine: self.next_timed.trigger({"ticks_ms": now, "ticks_delay": -diff}) self.next_timed = None - def _handle_input(self): + def _handle_input(self, delta): input_state = [] # buttons @@ -108,6 +108,7 @@ class Engine: # update for all entry["ticks_ms"] = time.ticks_ms() + entry["delta"] = delta if entry["value"] != last_entry["value"]: # update only when value changed @@ -132,16 +133,16 @@ class Engine: if self.foreground_app: self.foreground_app.tick() - def _handle_draw(self): + def _handle_draw(self, ctx): if self.foreground_app: - self.foreground_app.draw() + self.foreground_app.draw(ctx) if self.active_menu: - self.active_menu.draw() + self.active_menu.draw(ctx) hardware.display_update() - def _eventloop_single(self): + def _eventloop_single(self, delta): self._handle_timed() - self._handle_input() + self._handle_input(delta) self._handle_userloop() def eventloop(self): @@ -150,15 +151,21 @@ class Engine: log.warning("eventloop already running, doing nothing") return self.is_running = True + ctx = hardware.get_ctx() last_draw = 0 + last_eventloop = None while self.is_running: - self._eventloop_single() now = time.ticks_ms() + if last_eventloop is not None: + delta = now - last_eventloop + self._eventloop_single(delta / 1000.0) + last_eventloop = now + diff = time.ticks_diff(now, last_draw) # print("diff:",diff) if diff > 10: # print("eventloop draw") - self._handle_draw() + self._handle_draw(ctx) last_draw = time.ticks_ms() # self.deadline = time.ticks_add(time.ticks_ms(),ms) diff --git a/python_payload/st3m/menu.py b/python_payload/st3m/menu.py index 203810339f60f92ec27741135e9270fef4fe98a7..cd475fa25512cbc038a4b8ccd121ea50219d5fc9 100644 --- a/python_payload/st3m/menu.py +++ b/python_payload/st3m/menu.py @@ -230,10 +230,10 @@ def on_scroll(d): return if d["index"] == 0: # right button - active_menu.scroll_app(d["value"]) + active_menu.scroll_app(d["value"] * 10.0 * d["delta"]) else: # index=1, #left button - active_menu.scroll_menu(d["value"]) + active_menu.scroll_menu(d["value"] * 10.0 * d["delta"]) def on_scroll_captouch(d):