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