From 70197e23230f15dd303982004ecb84aaf2480c69 Mon Sep 17 00:00:00 2001 From: iggy <iggy@muc.ccc.de> Date: Sun, 2 Jul 2023 16:07:54 +0200 Subject: [PATCH] py: st4m experimets wip --- python_payload/st4m/color.py | 9 ----- python_payload/st4m/input.py | 29 +++++++++++++- python_payload/st4m/property.py | 45 ++++++++++++++++++++++ python_payload/st4m/ui/elements/visuals.py | 6 ++- python_payload/st4m/ui/interactions.py | 1 + python_payload/st4m/ui/view.py | 2 + 6 files changed, 80 insertions(+), 12 deletions(-) delete mode 100644 python_payload/st4m/color.py create mode 100644 python_payload/st4m/property.py diff --git a/python_payload/st4m/color.py b/python_payload/st4m/color.py deleted file mode 100644 index da2de633ad..0000000000 --- a/python_payload/st4m/color.py +++ /dev/null @@ -1,9 +0,0 @@ -# Define a few RGB (0.0 to 1.0) colors -BLACK = (0, 0, 0) -RED = (1, 0, 0) -GREEN = (0, 1, 0) -BLUE = (0, 0, 1) -WHITE = (1, 1, 1) -GREY = (0.5, 0.5, 0.5) -GO_GREEN = (63 / 255, 255 / 255, 33 / 255) -PUSH_RED = (251 / 255, 72 / 255, 196 / 255) diff --git a/python_payload/st4m/input.py b/python_payload/st4m/input.py index 5c597bf165..e35dcff390 100644 --- a/python_payload/st4m/input.py +++ b/python_payload/st4m/input.py @@ -14,7 +14,11 @@ class InputState: """ def __init__( - self, petal_pressed: List[bool], left_button: int, right_button: int + self, + petal_pressed: List[bool], + petal_pads: List[List[int]], + left_button: int, + right_button: int, ) -> None: self.petal_pressed = petal_pressed self.left_button = left_button @@ -28,10 +32,14 @@ class InputState: """ cts = captouch.read() petal_pressed = [cts.petals[i].pressed for i in range(10)] + petal_pads = [ + [0, 0, 0] + for petal_ix in range(10) + ] left_button = hardware.left_button_get() right_button = hardware.right_button_get() - return InputState(petal_pressed, left_button, right_button) + return InputState(petal_pressed, petal_pads, left_button, right_button) class RepeatSettings: @@ -40,6 +48,10 @@ class RepeatSettings: self.subsequent = subsequent +class Slideable: + pass + + class Pressable: """ A pressable button or button-acting object (like captouch petal in button @@ -275,3 +287,16 @@ class InputController: self.captouch._ignore_pressed() self.left_shoulder._ignore_pressed() self.right_shoulder._ignore_pressed() + + +class PetalSlideController: + def __init__(self, ix): + self._ts = 0 + self._input = PetalState(ix) + + def think(self, hr: InputState, delta_ms: int) -> None: + self._ts += delta_ms + self._input._update(self._ts, hr) + + def _ignore_pressed(self) -> None: + self._input._ignore_pressed() diff --git a/python_payload/st4m/property.py b/python_payload/st4m/property.py new file mode 100644 index 0000000000..fa4292cf44 --- /dev/null +++ b/python_payload/st4m/property.py @@ -0,0 +1,45 @@ +class Property: + pass + + +class PropertyFloat(Property): + def __init__(self): + self.min = 0.0 + self.max = 1.0 + + def set_value(self, value): + self._value = value + + def mod_value(self, delta): + self._value += delta_ms + + def get_value(self): + return self._value + + +# Define a few RGB (0.0 to 1.0) colors +BLACK = (0, 0, 0) +RED = (1, 0, 0) +GREEN = (0, 1, 0) +BLUE = (0, 0, 1) +WHITE = (1, 1, 1) +GREY = (0.5, 0.5, 0.5) +GO_GREEN = (63 / 255, 255 / 255, 33 / 255) +PUSH_RED = (251 / 255, 72 / 255, 196 / 255) + + +class Color: + @classmethod + def from_rgb888(cls, r: int = 0, g: int = 0, b: int = 0): + return cls(r / 255, g / 255, b / 255) + + def __init__(self, r: float = 0.0, g: float = 0.0, b: float = 0.0) -> None: + self.r = r + self.g = g + self.b = b + + def as_normal_tuple(self) -> tuple[float]: + return (self.r, self.g, self.b) + + +print(Color.from_rgb888(255, 255, 128).as_normal_tuple()) diff --git a/python_payload/st4m/ui/elements/visuals.py b/python_payload/st4m/ui/elements/visuals.py index 43236a4411..a0b0db54a8 100644 --- a/python_payload/st4m/ui/elements/visuals.py +++ b/python_payload/st4m/ui/elements/visuals.py @@ -126,7 +126,11 @@ class FlowerIcon(Responder): ctx.text_baseline = ctx.MIDDLE ctx.font_size = self.size / 3 ctx.line_width = 5 - ctx.font = ctx.get_font_name(6) + try: + ctx.font = ctx.get_font_name(6) + except AttributeError: + pass + if self.rotation_time: phi_rotate = tau * ((self.ts % self.rotation_time) / self.rotation_time) else: diff --git a/python_payload/st4m/ui/interactions.py b/python_payload/st4m/ui/interactions.py index 1d8a54e9da..9a79e2010e 100644 --- a/python_payload/st4m/ui/interactions.py +++ b/python_payload/st4m/ui/interactions.py @@ -162,3 +162,4 @@ class ScrollController(st4m.Responder): self._current_position = ( self._current_position + self._velocity * delta ) % self._nitems + diff --git a/python_payload/st4m/ui/view.py b/python_payload/st4m/ui/view.py index da19488744..5a0559e174 100644 --- a/python_payload/st4m/ui/view.py +++ b/python_payload/st4m/ui/view.py @@ -42,6 +42,8 @@ class ViewWithInputState(View): def think(self, ins: InputState, delta_ms: int) -> None: self.input.think(ins, delta_ms) +class ViewWithSingleInputState(ViewWithInputState()): + def __ class ViewTransition(ABCBase): """ -- GitLab