"lib/utils/pyexec.c" did not exist on "0334058fa43a8ac7c689007f5824510c2927c5cc"
Select Git revision
DEV_Config.c
Forked from
card10 / firmware
Source project has a limited visibility.
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()