diff --git a/python_payload/st3m/ui/view.py b/python_payload/st3m/ui/view.py index db791cdc9bcee7b6cf0ba09f480e4aea470b11a5..36772015b878438f4da95ac7ea4e31d9580babb2 100644 --- a/python_payload/st3m/ui/view.py +++ b/python_payload/st3m/ui/view.py @@ -191,6 +191,16 @@ class ViewManager(Responder): self._input = InputController() self._first_think = False + self._fully_drawn = 0 + + def _end_transition(self) -> None: + self._transitioning = False + + if self._incoming is not None: + self._incoming.on_enter_done() + if self._outgoing is not None: + self._outgoing.on_exit_done() + self._outgoing = None def think(self, ins: InputState, delta_ms: int) -> None: self._input.think(ins, delta_ms) @@ -207,15 +217,11 @@ class ViewManager(Responder): self._transition += (delta_ms / 1000.0) * (1000 / self._time_ms) else: self._first_think = False - if self._transition >= 1.0: - self._transition = 0 - self._transitioning = False - if self._incoming is not None: - self._incoming.on_enter_done() - if self._outgoing is not None: - self._outgoing.on_exit_done() - self._outgoing = None + if self._transition >= 1.0: + self._transition = 1.0 + if self._fully_drawn > 3: # TODO: use actual pipeline depth + self._end_transition() if self._outgoing is not None: self._outgoing.think(ins, delta_ms) @@ -224,6 +230,9 @@ class ViewManager(Responder): def draw(self, ctx: Context) -> None: if self._transitioning: + if self._transition >= 1.0: + self._fully_drawn += 1 + vt = self._default_vt if self._overriden_vt is not None: vt = self._overriden_vt @@ -238,7 +247,6 @@ class ViewManager(Responder): self._incoming.draw(ctx) ctx.restore() - def replace( self, r: View, @@ -255,6 +263,7 @@ class ViewManager(Responder): self._transition = 0.0 self._direction = direction self._first_think = True + self._fully_drawn = 0 self._outgoing = self._incoming if self._outgoing is not None: