Skip to content
Snippets Groups Projects
Select Git revision
  • 71be1ddeb128e6068d2f1df605ec9c8c10f67091
  • master default protected
  • schneider/ir
  • rahix/user-space-ctx
  • schneider/iaq-python
  • schneider/ble-mini-demo
  • schneider/ble-ecg-stream-visu
  • schneider/mp-exception-print
  • schneider/sleep-display
  • schneider/deepsleep4
  • schneider/deepsleep2
  • schneider/deepsleep
  • schneider/ble-central
  • rahix/bluetooth-app-favorite
  • schneider/v1.17-changelog
  • schneider/ancs
  • schneider/png
  • schneider/freertos-list-debug
  • schneider/212-reset-hardware-when-entering-repl
  • schneider/bonding-fail-if-full
  • schneider/ble-fixes-2020-3
  • v1.18
  • v1.17
  • v1.16
  • v1.15
  • v1.14
  • v1.13
  • v1.12
  • v1.11
  • v1.10
  • v1.9
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
41 results

group__SPIXFC__CONFIG.js

Blame
  • ui.py 3.04 KiB
    import hardware
    import random
    import math
    import time
    
    class UIElement():
        def __init__(self,origin=(0,0)):
            self.children = []
            self.origin = origin
            self.ctx = hardware.get_ctx()
        
        def draw(self, offset=(0,0)):
            pos = (self.origin[0]+offset[0],self.origin[1]+offset[1])
    
            self._draw(pos)
            for child in self.children:
                child.draw(pos)
    
        def _draw(self,pos):
            #print(pos)
            pass
    
        def add(self, child):
            self.children.append(child)
    
    class Text(UIElement):
        def __init__(self,s="foo"):
            self.s = s
            super().__init__()
    
        def _draw(self, pos):
            self.ctx.text_align = self.ctx.CENTER
            self.ctx.text_baseline = self.ctx.MIDDLE
            self.ctx.rgb(1,1,1).move_to(pos[0],pos[1]).text(self.s)
    
    class Icon(UIElement):
        def __init__(self,label="?", size=60):
            self.bg_r = random.random()
            self.bg_g = random.random()
            self.bg_b = random.random()
            self.fg = 0
            self.label=label
            self.size = size
            self.has_highlight = False
            super().__init__()
    
        def _draw(self,pos):
            x = int(pos[0])
            y = int(pos[1])
            width = 55
            height = 40
            self.ctx.text_align = self.ctx.CENTER
            self.ctx.text_baseline = self.ctx.MIDDLE
    
            if self.has_highlight:
                hs = self.size+5;
                self.ctx.move_to(x,y-hs/2).rgb(1,1,1).round_rectangle(
                    x-hs/2,
                    y-hs/2,
                    hs,hs,hs//2
                ).fill()
            self.ctx.move_to(x,y-self.size/2).rgb(self.bg_r,self.bg_g,self.bg_b).round_rectangle(
                x-self.size/2,
                y-self.size/2,
                self.size,self.size,self.size//2
            ).fill()
            self.ctx.rgb(1,1,1).move_to(x,y).text(self.label)
    class GroupStackedVertical(UIElement):
        pass
    
            
    class GroupRing(UIElement):
        def __init__(self,r=100,origin=(0,0),element_center=None):
            self.r = r
            self.angle_offset = 0
            self.element_center=element_center
            super().__init__(origin)
    
        def draw(self, offset=(0,0)):
            pos = (self.origin[0]+offset[0],self.origin[1]+offset[1])
            self._draw(pos)
            for index in range(len(self.children)):
                child = self.children[index]
                angle = 2*math.pi/len(self.children)*index+self.angle_offset
                x = math.sin(angle)*self.r+pos[0]
                y = -math.cos(angle)*self.r+pos[1]
                child.draw(offset=(x,y))
    
        def _draw(self,pos):
            if self.element_center:
                self.element_center._draw(pos)
    
    def test():
        group = UIElement((10,0))
        group.add(UIElement((10,10)))
        group.add(UIElement((20,20)))
        #group.draw()
    
        ring = GroupRing(r=80)
        ctx = hardware.get_ctx()
        for i in range(12):
            ring.add(Icon(str(i)))
            hardware.display_update()
        while True:
            ctx.rectangle(0,0,240,240).rgb(1,1,1).fill()
            ring.draw()
            hardware.display_update()
            ring.angle_offset+=2*math.pi/60
            time.sleep(0.01)
            hardware.display_update()
    
    #test()