@@ -1,41 +0,0 @@
|
||||
def anim_x_cb(label, v):
|
||||
label.set_x(v)
|
||||
|
||||
def sw_event_cb(e,label):
|
||||
sw = e.get_target_obj()
|
||||
|
||||
if sw.has_state(lv.STATE.CHECKED):
|
||||
a = lv.anim_t()
|
||||
a.init()
|
||||
a.set_var(label)
|
||||
a.set_values(label.get_x(), 100)
|
||||
a.set_time(500)
|
||||
a.set_path_cb(lv.anim_t.path_overshoot)
|
||||
a.set_custom_exec_cb(lambda a,val: anim_x_cb(label,val))
|
||||
lv.anim_t.start(a)
|
||||
else:
|
||||
a = lv.anim_t()
|
||||
a.init()
|
||||
a.set_var(label)
|
||||
a.set_values(label.get_x(), -label.get_width())
|
||||
a.set_time(500)
|
||||
a.set_path_cb(lv.anim_t.path_ease_in)
|
||||
a.set_custom_exec_cb(lambda a,val: anim_x_cb(label,val))
|
||||
lv.anim_t.start(a)
|
||||
|
||||
#
|
||||
# Start animation on an event
|
||||
#
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("Hello animations!")
|
||||
label.set_pos(100, 10)
|
||||
|
||||
|
||||
sw = lv.switch(lv.screen_active())
|
||||
sw.center()
|
||||
sw.add_state(lv.STATE.CHECKED)
|
||||
sw.add_event_cb(lambda e: sw_event_cb(e,label), lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
def anim_x_cb(obj, v):
|
||||
obj.set_x(v)
|
||||
|
||||
def anim_size_cb(obj, v):
|
||||
obj.set_size(v, v)
|
||||
|
||||
|
||||
#
|
||||
# Create a playback animation
|
||||
#
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
|
||||
obj.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
||||
|
||||
obj.align(lv.ALIGN.LEFT_MID, 10, 0)
|
||||
|
||||
a1 = lv.anim_t()
|
||||
a1.init()
|
||||
a1.set_var(obj)
|
||||
a1.set_values(10, 50)
|
||||
a1.set_time(1000)
|
||||
a1.set_playback_delay(100)
|
||||
a1.set_playback_duration(300)
|
||||
a1.set_repeat_delay(500)
|
||||
a1.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
a1.set_path_cb(lv.anim_t.path_ease_in_out)
|
||||
a1.set_custom_exec_cb(lambda a1,val: anim_size_cb(obj,val))
|
||||
lv.anim_t.start(a1)
|
||||
|
||||
a2 = lv.anim_t()
|
||||
a2.init()
|
||||
a2.set_var(obj)
|
||||
a2.set_values(10, 240)
|
||||
a2.set_time(1000)
|
||||
a2.set_playback_delay(100)
|
||||
a2.set_playback_duration(300)
|
||||
a2.set_repeat_delay(500)
|
||||
a2.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
a2.set_path_cb(lv.anim_t.path_ease_in_out)
|
||||
a2.set_custom_exec_cb(lambda a1,val: anim_x_cb(obj,val))
|
||||
lv.anim_t.start(a2)
|
||||
@@ -1,123 +0,0 @@
|
||||
from micropython import const
|
||||
|
||||
# the example show the use of cubic-bezier3 in animation.
|
||||
# the control point P1,P2 of cubic-bezier3 can be adjusted by slider.
|
||||
# and the chart shows the cubic-bezier3 in real time. you can click
|
||||
# run button see animation in current point of cubic-bezier3.
|
||||
#
|
||||
|
||||
CHART_POINTS_NUM = const(256)
|
||||
|
||||
class LvExampleAnim_3():
|
||||
#
|
||||
# create an animation
|
||||
#
|
||||
def __init__(self):
|
||||
# Create a container with grid
|
||||
col_dsc = [lv.grid_fr(1), 200, lv.grid_fr(1), lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [30, 10, 10, lv.grid_fr(1),lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
self.p1 = 0
|
||||
self.p2 = 0
|
||||
self.cont = lv.obj(lv.screen_active())
|
||||
self.cont.set_style_pad_all(2, lv.PART.MAIN)
|
||||
self.cont.set_style_pad_column(10, lv.PART.MAIN)
|
||||
self.cont.set_style_pad_row(10, lv.PART.MAIN)
|
||||
self.cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
self.cont.set_size(320, 240)
|
||||
self.cont.center()
|
||||
self.page_obj_init(self.cont)
|
||||
|
||||
self.a = lv.anim_t()
|
||||
self.a.init()
|
||||
self.a.set_var(self.anim_obj)
|
||||
end = self.cont.get_style_width(lv.PART.MAIN) - self.anim_obj.get_style_width(lv.PART.MAIN) - 10
|
||||
self.a.set_values(5, end)
|
||||
self.a.set_time(2000)
|
||||
self.a.set_custom_exec_cb(lambda a,val: self.anim_x_cb(self.anim_obj,val))
|
||||
self.a.set_path_cb(self.anim_path_bezier3_cb)
|
||||
self.refer_chart_cubic_bezier()
|
||||
|
||||
def page_obj_init(self,par):
|
||||
self.anim_obj = lv.obj(par)
|
||||
self.anim_obj.set_size(30, 30)
|
||||
self.anim_obj.set_align(lv.ALIGN.TOP_LEFT)
|
||||
self.anim_obj.remove_flag(lv.obj.FLAG.SCROLLABLE)
|
||||
self.anim_obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), lv.PART.MAIN)
|
||||
self.anim_obj.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 0, 1)
|
||||
|
||||
self.p1_label = lv.label(par)
|
||||
self.p2_label = lv.label(par)
|
||||
self.p1_label.set_text("p1:0")
|
||||
self.p2_label.set_text("p2:0")
|
||||
self.p1_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 1, 1)
|
||||
self.p2_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 2, 1)
|
||||
|
||||
self.p1_slider = lv.slider(par)
|
||||
self.p2_slider = lv.slider(par)
|
||||
self.p1_slider.set_range(0, 1024)
|
||||
self.p2_slider.set_range(0, 1024)
|
||||
self.p1_slider.set_style_pad_all(2, lv.PART.KNOB)
|
||||
self.p2_slider.set_style_pad_all(2, lv.PART.KNOB)
|
||||
self.p1_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)
|
||||
self.p2_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)
|
||||
self.p1_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1,lv.GRID_ALIGN.START, 1, 1)
|
||||
self.p2_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1,lv.GRID_ALIGN.START, 2, 1)
|
||||
|
||||
self.run_button = lv.button(par)
|
||||
self.run_button.add_event_cb(self.run_button_event_handler, lv.EVENT.CLICKED, None)
|
||||
button_label = lv.label(self.run_button)
|
||||
button_label.set_text(lv.SYMBOL.PLAY)
|
||||
button_label.center()
|
||||
self.run_button.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 1,lv.GRID_ALIGN.STRETCH, 1, 2)
|
||||
|
||||
self.chart = lv.chart(par)
|
||||
self.chart.set_style_pad_all(0, lv.PART.MAIN)
|
||||
self.chart.set_style_size(0, 0, lv.PART.INDICATOR)
|
||||
self.chart.set_type(lv.chart.TYPE.SCATTER)
|
||||
self.ser1 = self.chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y)
|
||||
self.chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1024)
|
||||
self.chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 1024)
|
||||
self.chart.set_point_count(CHART_POINTS_NUM)
|
||||
self.chart.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 3,lv.GRID_ALIGN.STRETCH, 3, 1)
|
||||
|
||||
def refer_chart_cubic_bezier(self):
|
||||
for i in range(CHART_POINTS_NUM+1):
|
||||
t = i * (1024 // CHART_POINTS_NUM)
|
||||
step = lv.bezier3(t, 0, self.p1, self.p2, 1024)
|
||||
self.chart.set_value_by_id2(self.ser1, i, t, step)
|
||||
self.chart.refresh()
|
||||
|
||||
def slider_event_cb(self,e):
|
||||
slider = e.get_target_obj()
|
||||
|
||||
if slider == self.p1_slider:
|
||||
label = self.p1_label
|
||||
self.p1 = slider.get_value()
|
||||
label.set_text("p1: {:d}".format(self.p1))
|
||||
else:
|
||||
label = self.p2_label
|
||||
self.p2 = slider.get_value()
|
||||
label.set_text("p1: {:d}".format(self.p2))
|
||||
|
||||
self.refer_chart_cubic_bezier()
|
||||
|
||||
|
||||
def run_button_event_handler(self,e):
|
||||
|
||||
code = e.get_code()
|
||||
if code == lv.EVENT.CLICKED:
|
||||
lv.anim_t.start(self.a)
|
||||
|
||||
def anim_x_cb(self, var, v):
|
||||
var.set_style_translate_x(v, lv.PART.MAIN)
|
||||
|
||||
def anim_path_bezier3_cb(self,a):
|
||||
t = lv.map(a.act_time, 0, a.duration, 0, 1024)
|
||||
step = lv.bezier3(t, 0, self.p1, self.p2, 1024)
|
||||
new_value = step * (a.end_value - a.start_value)
|
||||
new_value = new_value >> 10
|
||||
new_value += a.start_value
|
||||
return new_value
|
||||
|
||||
lv_example_anim_3 = LvExampleAnim_3()
|
||||
@@ -1,137 +0,0 @@
|
||||
class LV_ExampleAnimTimeline_1(object):
|
||||
|
||||
def __init__(self):
|
||||
self.obj_width = 120
|
||||
self.obj_height = 150
|
||||
#
|
||||
# Create an animation timeline
|
||||
#
|
||||
|
||||
self.par = lv.screen_active()
|
||||
self.par.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||
self.par.set_flex_align(lv.FLEX_ALIGN.SPACE_AROUND, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER)
|
||||
|
||||
self.button_run = lv.button(self.par)
|
||||
self.button_run.add_event_cb(self.button_run_event_handler, lv.EVENT.VALUE_CHANGED, None)
|
||||
self.button_run.add_flag(lv.obj.FLAG.IGNORE_LAYOUT)
|
||||
self.button_run.add_flag(lv.obj.FLAG.CHECKABLE)
|
||||
self.button_run.align(lv.ALIGN.TOP_MID, -50, 20)
|
||||
|
||||
self.label_run = lv.label(self.button_run)
|
||||
self.label_run.set_text("Run")
|
||||
self.label_run.center()
|
||||
|
||||
self.button_del = lv.button(self.par)
|
||||
self.button_del.add_event_cb(self.button_delete_event_handler, lv.EVENT.CLICKED, None)
|
||||
self.button_del.add_flag(lv.obj.FLAG.IGNORE_LAYOUT)
|
||||
self.button_del.align(lv.ALIGN.TOP_MID, 50, 20)
|
||||
|
||||
self.label_del = lv.label(self.button_del)
|
||||
self.label_del.set_text("Stop")
|
||||
self.label_del.center()
|
||||
|
||||
self.slider = lv.slider(self.par)
|
||||
self.slider.add_event_cb(self.slider_prg_event_handler, lv.EVENT.VALUE_CHANGED, None)
|
||||
self.slider.add_flag(lv.obj.FLAG.IGNORE_LAYOUT)
|
||||
self.slider.align(lv.ALIGN.BOTTOM_RIGHT, -20, -20)
|
||||
self.slider.set_range(0, 65535)
|
||||
|
||||
self.obj1 = lv.obj(self.par)
|
||||
self.obj1.set_size(self.obj_width, self.obj_height)
|
||||
|
||||
self.obj2 = lv.obj(self.par)
|
||||
self.obj2.set_size(self.obj_width, self.obj_height)
|
||||
|
||||
self.obj3 = lv.obj(self.par)
|
||||
self.obj3.set_size(self.obj_width, self.obj_height)
|
||||
|
||||
self.anim_timeline = None
|
||||
|
||||
def set_width(self,obj, v):
|
||||
obj.set_width(v)
|
||||
|
||||
def set_height(self,obj, v):
|
||||
obj.set_height(v)
|
||||
|
||||
def anim_timeline_create(self):
|
||||
# obj1
|
||||
self.a1 = lv.anim_t()
|
||||
self.a1.init()
|
||||
self.a1.set_values(0, self.obj_width)
|
||||
self.a1.set_custom_exec_cb(lambda a,v: self.set_width(self.obj1,v))
|
||||
self.a1.set_path_cb(lv.anim_t.path_overshoot)
|
||||
self.a1.set_time(300)
|
||||
|
||||
self.a2 = lv.anim_t()
|
||||
self.a2.init()
|
||||
self.a2.set_values(0, self.obj_height)
|
||||
self.a2.set_custom_exec_cb(lambda a,v: self.set_height(self.obj1,v))
|
||||
self.a2.set_path_cb(lv.anim_t.path_ease_out)
|
||||
self.a2.set_time(300)
|
||||
|
||||
# obj2
|
||||
self.a3=lv.anim_t()
|
||||
self.a3.init()
|
||||
self.a3.set_values(0, self.obj_width)
|
||||
self.a3.set_custom_exec_cb(lambda a,v: self.set_width(self.obj2,v))
|
||||
self.a3.set_path_cb(lv.anim_t.path_overshoot)
|
||||
self.a3.set_time(300)
|
||||
|
||||
self.a4 = lv.anim_t()
|
||||
self.a4.init()
|
||||
self.a4.set_values(0, self.obj_height)
|
||||
self.a4.set_custom_exec_cb(lambda a,v: self.set_height(self.obj2,v))
|
||||
self.a4.set_path_cb(lv.anim_t.path_ease_out)
|
||||
self.a4.set_time(300)
|
||||
|
||||
# obj3
|
||||
self.a5 = lv.anim_t()
|
||||
self.a5.init()
|
||||
self.a5.set_values(0, self.obj_width)
|
||||
self.a5.set_custom_exec_cb(lambda a,v: self.set_width(self.obj3,v))
|
||||
self.a5.set_path_cb(lv.anim_t.path_overshoot)
|
||||
self.a5.set_time(300)
|
||||
|
||||
self.a6 = lv.anim_t()
|
||||
self.a6.init()
|
||||
self.a6.set_values(0, self.obj_height)
|
||||
self.a6.set_custom_exec_cb(lambda a,v: self.set_height(self.obj3,v))
|
||||
self.a6.set_path_cb(lv.anim_t.path_ease_out)
|
||||
self.a6.set_time(300)
|
||||
|
||||
# Create anim timeline
|
||||
print("Create new anim_timeline")
|
||||
self.anim_timeline = lv.anim_timeline_create()
|
||||
self.anim_timeline.add(0, self.a1)
|
||||
self.anim_timeline.add(0, self.a2)
|
||||
self.anim_timeline.add(200, self.a3)
|
||||
self.anim_timeline.add(200, self.a4)
|
||||
self.anim_timeline.add(400, self.a5)
|
||||
self.anim_timeline.add(400, self.a6)
|
||||
|
||||
def slider_prg_event_handler(self,e):
|
||||
slider = e.get_target_obj()
|
||||
|
||||
if not self.anim_timeline:
|
||||
self.anim_timeline_create()
|
||||
|
||||
progress = slider.get_value()
|
||||
self.anim_timeline.set_progress(progress)
|
||||
|
||||
|
||||
def button_run_event_handler(self,e):
|
||||
button = e.get_target_obj()
|
||||
if not self.anim_timeline:
|
||||
self.anim_timeline_create()
|
||||
|
||||
reverse = button.has_state(lv.STATE.CHECKED)
|
||||
self.anim_timeline.set_reverse(reverse)
|
||||
self.anim_timeline.start()
|
||||
|
||||
def button_delete_event_handler(self,e):
|
||||
if self.anim_timeline:
|
||||
self.anim_timeline.delete()
|
||||
self.anim_timeline = None
|
||||
|
||||
|
||||
lv_example_anim_timeline_1 = LV_ExampleAnimTimeline_1()
|
||||
@@ -1,25 +0,0 @@
|
||||
class Event_1():
|
||||
def __init__(self):
|
||||
self.cnt = 1
|
||||
#
|
||||
# Add click event to a button
|
||||
#
|
||||
|
||||
button = lv.button(lv.screen_active())
|
||||
button.set_size(100, 50)
|
||||
button.center()
|
||||
button.add_event_cb(self.event_cb, lv.EVENT.CLICKED, None)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Click me!")
|
||||
label.center()
|
||||
|
||||
def event_cb(self,e):
|
||||
print("Clicked")
|
||||
|
||||
button = e.get_target_obj()
|
||||
label = button.get_child(0)
|
||||
label.set_text(str(self.cnt))
|
||||
self.cnt += 1
|
||||
|
||||
evt1 = Event_1()
|
||||
@@ -1,22 +0,0 @@
|
||||
def event_cb(e,label):
|
||||
code = e.get_code()
|
||||
if code == lv.EVENT.PRESSED:
|
||||
label.set_text("The last button event:\nLV_EVENT_PRESSED")
|
||||
elif code == lv.EVENT.CLICKED:
|
||||
label.set_text("The last button event:\nLV_EVENT_CLICKED")
|
||||
elif code == lv.EVENT.LONG_PRESSED:
|
||||
label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED")
|
||||
elif code == lv.EVENT.LONG_PRESSED_REPEAT:
|
||||
label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED_REPEAT")
|
||||
button = lv.button(lv.screen_active())
|
||||
button.set_size(100, 50)
|
||||
button.center()
|
||||
|
||||
button_label = lv.label(button)
|
||||
button_label.set_text("Click me!")
|
||||
button_label.center()
|
||||
|
||||
info_label = lv.label(lv.screen_active())
|
||||
info_label.set_text("The last button event:\nNone")
|
||||
|
||||
button.add_event_cb(lambda e: event_cb(e,info_label), lv.EVENT.ALL, None)
|
||||
@@ -1,34 +0,0 @@
|
||||
def event_cb(e):
|
||||
|
||||
# The original target of the event. Can be the buttons or the container
|
||||
target = e.get_target_obj()
|
||||
|
||||
# The current target is always the container as the event is added to it
|
||||
cont = e.get_current_target_obj()
|
||||
|
||||
# If container was clicked do nothing
|
||||
if target == cont:
|
||||
return
|
||||
|
||||
# Make the clicked buttons red
|
||||
target.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
|
||||
|
||||
#
|
||||
# Demonstrate event bubbling
|
||||
#
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(290, 200)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
|
||||
for i in range(30):
|
||||
button = lv.button(cont)
|
||||
button.set_size(70, 50)
|
||||
button.add_flag(lv.obj.FLAG.EVENT_BUBBLE)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("{:d}".format(i))
|
||||
label.center()
|
||||
|
||||
cont.add_event_cb(event_cb, lv.EVENT.CLICKED, None)
|
||||
@@ -1,53 +0,0 @@
|
||||
class LV_Example_Event_4:
|
||||
|
||||
def __init__(self):
|
||||
#
|
||||
# Demonstrate the usage of draw event
|
||||
#
|
||||
self.size = 0
|
||||
self.size_dec = False
|
||||
self.cont = lv.obj(lv.screen_active())
|
||||
self.cont.set_size(200, 200)
|
||||
self.cont.center()
|
||||
self.cont.add_event_cb(self.event_cb, lv.EVENT.DRAW_TASK_ADDED, None)
|
||||
self.cont.add_flag(lv.obj.FLAG.SEND_DRAW_TASK_EVENTS)
|
||||
lv.timer_create(self.timer_cb, 30, None)
|
||||
|
||||
def timer_cb(self,timer) :
|
||||
self.cont.invalidate()
|
||||
if self.size_dec :
|
||||
self.size -= 1
|
||||
else :
|
||||
self.size += 1
|
||||
|
||||
if self.size == 50 :
|
||||
self.size_dec = True
|
||||
elif self.size == 0:
|
||||
self.size_dec = False
|
||||
|
||||
def event_cb(self,e) :
|
||||
obj = e.get_target_obj()
|
||||
dsc = e.get_draw_task()
|
||||
base_dsc = lv.draw_dsc_base_t.__cast__(dsc.draw_dsc)
|
||||
if base_dsc.part == lv.PART.MAIN:
|
||||
a = lv.area_t()
|
||||
a.x1 = 0
|
||||
a.y1 = 0
|
||||
a.x2 = self.size
|
||||
a.y2 = self.size
|
||||
coords = lv.area_t()
|
||||
obj.get_coords(coords)
|
||||
coords.align(a, lv.ALIGN.CENTER, 0, 0)
|
||||
|
||||
draw_dsc = lv.draw_rect_dsc_t()
|
||||
draw_dsc.init()
|
||||
draw_dsc.bg_color = lv.color_hex(0xffaaaa)
|
||||
draw_dsc.radius = lv.RADIUS_CIRCLE
|
||||
draw_dsc.border_color = lv.color_hex(0xff5555)
|
||||
draw_dsc.border_width = 2
|
||||
draw_dsc.outline_color = lv.color_hex(0xff0000)
|
||||
draw_dsc.outline_pad = 3
|
||||
draw_dsc.outline_width = 2
|
||||
lv.draw_rect(base_dsc.layer, draw_dsc, a)
|
||||
|
||||
lv_example_event_4 = LV_Example_Event_4()
|
||||
@@ -1,9 +0,0 @@
|
||||
# Change the active screen's background color
|
||||
scr = lv.screen_active()
|
||||
scr.set_style_bg_color(lv.color_hex(0x003a57), lv.PART.MAIN)
|
||||
|
||||
# Create a white label, set its text and align it to the center
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("Hello world")
|
||||
label.set_style_text_color(lv.color_hex(0xffffff), lv.PART.MAIN)
|
||||
label.align(lv.ALIGN.CENTER, 0, 0)
|
||||
@@ -1,29 +0,0 @@
|
||||
class CounterBtn():
|
||||
def __init__(self):
|
||||
self.cnt = 0
|
||||
#
|
||||
# Create a button with a label and react on click event.
|
||||
#
|
||||
|
||||
button = lv.button(lv.screen_active()) # Add a button the current screen
|
||||
button.set_pos(10, 10) # Set its position
|
||||
button.set_size(120, 50) # Set its size
|
||||
button.align(lv.ALIGN.CENTER,0,0)
|
||||
button.add_event_cb(self.button_event_cb, lv.EVENT.ALL, None) # Assign a callback to the button
|
||||
label = lv.label(button) # Add a label to the button
|
||||
label.set_text("Button") # Set the labels text
|
||||
label.center()
|
||||
|
||||
def button_event_cb(self,e):
|
||||
code = e.get_code()
|
||||
button = e.get_target_obj()
|
||||
if code == lv.EVENT.CLICKED:
|
||||
self.cnt += 1
|
||||
|
||||
# Get the first child of the button which is the label and change its text
|
||||
label = button.get_child(0)
|
||||
label.set_text("Button: " + str(self.cnt))
|
||||
|
||||
|
||||
counterBtn = CounterBtn()
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
#
|
||||
# Create styles from scratch for buttons.
|
||||
#
|
||||
style_button = lv.style_t()
|
||||
style_button_red = lv.style_t()
|
||||
style_button_pressed = lv.style_t()
|
||||
|
||||
# Create a simple button style
|
||||
style_button.init()
|
||||
style_button.set_radius(10)
|
||||
style_button.set_bg_opa(lv.OPA.COVER)
|
||||
style_button.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3))
|
||||
style_button.set_bg_grad_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
style_button.set_bg_grad_dir(lv.GRAD_DIR.VER)
|
||||
|
||||
# Add a border
|
||||
style_button.set_border_color(lv.color_white())
|
||||
style_button.set_border_opa(lv.OPA._70)
|
||||
style_button.set_border_width(2)
|
||||
|
||||
# Set the text style
|
||||
style_button.set_text_color(lv.color_white())
|
||||
|
||||
# Create a red style. Change only some colors.
|
||||
style_button_red.init()
|
||||
style_button_red.set_bg_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style_button_red.set_bg_grad_color(lv.palette_lighten(lv.PALETTE.RED, 2))
|
||||
|
||||
# Create a style for the pressed state.
|
||||
style_button_pressed.init()
|
||||
style_button_pressed.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style_button_pressed.set_bg_grad_color(lv.palette_darken(lv.PALETTE.RED, 3))
|
||||
|
||||
# Create a button and use the new styles
|
||||
button = lv.button(lv.screen_active()) # Add a button the current screen
|
||||
# Remove the styles coming from the theme
|
||||
# Note that size and position are also stored as style properties
|
||||
# so lv_obj_remove_style_all will remove the set size and position too
|
||||
button.remove_style_all() # Remove the styles coming from the theme
|
||||
button.set_pos(10, 10) # Set its position
|
||||
button.set_size(120, 50) # Set its size
|
||||
button.add_style(style_button, 0)
|
||||
button.add_style(style_button_pressed, lv.STATE.PRESSED)
|
||||
|
||||
label = lv.label(button) # Add a label to the button
|
||||
label.set_text("Button") # Set the labels text
|
||||
label.center()
|
||||
|
||||
# Create a slider in the center of the display
|
||||
slider = lv.slider(lv.screen_active())
|
||||
slider.set_width(200) # Set the width
|
||||
slider.center() # Align to the center of the parent (screen)
|
||||
|
||||
# Create another button and use the red style too
|
||||
button2 = lv.button(lv.screen_active())
|
||||
button2.remove_style_all() # Remove the styles coming from the theme
|
||||
button2.set_pos(10, 80) # Set its position
|
||||
button2.set_size(120, 50) # Set its size
|
||||
button2.add_style(style_button, 0)
|
||||
button2.add_style(style_button_red, 0)
|
||||
button2.add_style(style_button_pressed, lv.STATE.PRESSED)
|
||||
button2.set_style_radius(lv.RADIUS_CIRCLE, 0) # Add a local style
|
||||
|
||||
label = lv.label(button2) # Add a label to the button
|
||||
label.set_text("Button 2") # Set the labels text
|
||||
label.center()
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
def slider_event_cb(e):
|
||||
slider = e.get_target_obj()
|
||||
|
||||
# Refresh the text
|
||||
label.set_text(str(slider.get_value()))
|
||||
|
||||
#
|
||||
# Create a slider and write its value on a label.
|
||||
#
|
||||
|
||||
# Create a slider in the center of the display
|
||||
slider = lv.slider(lv.screen_active())
|
||||
slider.set_width(200) # Set the width
|
||||
slider.center() # Align to the center of the parent (screen)
|
||||
slider.add_event_cb(slider_event_cb, lv.EVENT.VALUE_CHANGED, None) # Assign an event function
|
||||
|
||||
# Create a label above the slider
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("0")
|
||||
label.align_to(slider, lv.ALIGN.OUT_TOP_MID, 0, -15) # Align below the slider
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
#
|
||||
# A simple row and a column layout with flexbox
|
||||
#
|
||||
|
||||
# Create a container with ROW flex direction
|
||||
cont_row = lv.obj(lv.screen_active())
|
||||
cont_row.set_size(300, 75)
|
||||
cont_row.align(lv.ALIGN.TOP_MID, 0, 5)
|
||||
cont_row.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||
|
||||
# Create a container with COLUMN flex direction
|
||||
cont_col = lv.obj(lv.screen_active())
|
||||
cont_col.set_size(200, 150)
|
||||
cont_col.align_to(cont_row, lv.ALIGN.OUT_BOTTOM_MID, 0, 5)
|
||||
cont_col.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||
|
||||
for i in range(10):
|
||||
# Add items to the row
|
||||
obj = lv.button(cont_row)
|
||||
obj.set_size(100, lv.pct(100))
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("Item: {:d}".format(i))
|
||||
label.center()
|
||||
|
||||
# Add items to the column
|
||||
obj = lv.button(cont_col)
|
||||
obj.set_size(lv.pct(100), lv.SIZE_CONTENT)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("Item: {:d}".format(i))
|
||||
label.center()
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Arrange items in rows with wrap and place the items to get even space around them.
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
style.set_flex_main_place(lv.FLEX_ALIGN.SPACE_EVENLY)
|
||||
style.set_layout(lv.LAYOUT.FLEX)
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.add_style(style, 0)
|
||||
|
||||
for i in range(8):
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(70, lv.SIZE_CONTENT)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("{:d}".format(i))
|
||||
label.center()
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#
|
||||
# Demonstrate flex grow.
|
||||
#
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(40, 40) # Fix size
|
||||
|
||||
obj = lv.obj(cont)
|
||||
obj.set_height(40)
|
||||
obj.set_flex_grow(1) # 1 portion from the free space
|
||||
|
||||
obj = lv.obj(cont)
|
||||
obj.set_height(40)
|
||||
obj.set_flex_grow(2) # 2 portion from the free space
|
||||
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(40, 40) # Fix size. It is flushed to the right by the "grow" items
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#
|
||||
# Reverse the order of flex items
|
||||
#
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.COLUMN_REVERSE)
|
||||
|
||||
for i in range(6):
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(100, 50)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("Item: " + str(i))
|
||||
label.center()
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
def row_gap_anim(obj, v):
|
||||
obj.set_style_pad_row(v, 0)
|
||||
|
||||
|
||||
def column_gap_anim(obj, v):
|
||||
obj.set_style_pad_column(v, 0)
|
||||
|
||||
#
|
||||
# Demonstrate the effect of column and row gap style properties
|
||||
#
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
|
||||
for i in range(9):
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(70, lv.SIZE_CONTENT)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text(str(i))
|
||||
label.center()
|
||||
|
||||
a_row = lv.anim_t()
|
||||
a_row.init()
|
||||
a_row.set_var(cont)
|
||||
a_row.set_values(0, 10)
|
||||
a_row.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
|
||||
a_row.set_time(500)
|
||||
a_row.set_playback_duration(500)
|
||||
a_row.set_custom_exec_cb(lambda a,val: row_gap_anim(cont,val))
|
||||
lv.anim_t.start(a_row)
|
||||
|
||||
a_col = lv.anim_t()
|
||||
a_col.init()
|
||||
a_col.set_var(cont)
|
||||
a_col.set_values(0, 10)
|
||||
a_col.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
|
||||
a_col.set_time(3000)
|
||||
a_col.set_playback_duration(3000)
|
||||
a_col.set_custom_exec_cb(lambda a,val: column_gap_anim(cont,val))
|
||||
|
||||
lv.anim_t.start(a_col)
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#
|
||||
# RTL base direction changes order of the items.
|
||||
# Also demonstrate how horizontal scrolling works with RTL.
|
||||
#
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_style_base_dir(lv.BASE_DIR.RTL,0)
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
|
||||
for i in range(20):
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(70, lv.SIZE_CONTENT)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text(str(i))
|
||||
label.center()
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
#
|
||||
# A simple grid
|
||||
#
|
||||
|
||||
col_dsc = [70, 70, 70, lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [50, 50, 50, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_style_grid_column_dsc_array(col_dsc, 0)
|
||||
cont.set_style_grid_row_dsc_array(row_dsc, 0)
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_layout(lv.LAYOUT.GRID)
|
||||
|
||||
for i in range(9):
|
||||
col = i % 3
|
||||
row = i // 3
|
||||
|
||||
obj = lv.button(cont)
|
||||
# Stretch the cell horizontally and vertically too
|
||||
# Set span to 1 to make the cell 1 column/row sized
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("c" +str(col) + "r" +str(row))
|
||||
label.center()
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
#
|
||||
# Demonstrate cell placement and span
|
||||
#
|
||||
|
||||
col_dsc = [70, 70, 70, lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [50, 50, 50, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
|
||||
# Cell to 0;0 and align to the start (left/top) horizontally and vertically too
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,
|
||||
lv.GRID_ALIGN.START, 0, 1)
|
||||
label = lv.label(obj)
|
||||
label.set_text("c0, r0")
|
||||
|
||||
# Cell to 1;0 and align to the start (left) horizontally and center vertically too
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.START, 1, 1,
|
||||
lv.GRID_ALIGN.CENTER, 0, 1)
|
||||
label = lv.label(obj)
|
||||
label.set_text("c1, r0")
|
||||
|
||||
# Cell to 2;0 and align to the start (left) horizontally and end (bottom) vertically too
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.START, 2, 1,
|
||||
lv.GRID_ALIGN.END, 0, 1)
|
||||
label = lv.label(obj)
|
||||
label.set_text("c2, r0")
|
||||
|
||||
# Cell to 1;1 but 2 column wide (span = 2).Set width and height to stretched.
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 2,
|
||||
lv.GRID_ALIGN.STRETCH, 1, 1)
|
||||
label = lv.label(obj)
|
||||
label.set_text("c1-2, r1")
|
||||
|
||||
# Cell to 0;1 but 2 rows tall (span = 2).Set width and height to stretched.
|
||||
obj = lv.obj(cont)
|
||||
obj.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1,
|
||||
lv.GRID_ALIGN.STRETCH, 1, 2)
|
||||
label = lv.label(obj)
|
||||
label.set_text("c0\nr1-2")
|
||||
@@ -1,36 +0,0 @@
|
||||
#
|
||||
# Demonstrate grid's "free unit"
|
||||
#
|
||||
|
||||
# Column 1: fix width 60 px
|
||||
# Column 2: 1 unit from the remaining free space
|
||||
# Column 3: 2 unit from the remaining free space
|
||||
|
||||
col_dsc = [60, lv.grid_fr(1), lv.grid_fr(2), lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Row 1: fix width 60 px
|
||||
# Row 2: 1 unit from the remaining free space
|
||||
# Row 3: fix width 60 px
|
||||
|
||||
row_dsc = [40, lv.grid_fr(1), 40, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
|
||||
for i in range(9):
|
||||
col = i % 3
|
||||
row = i // 3
|
||||
|
||||
obj = lv.obj(cont)
|
||||
# Stretch the cell horizontally and vertically too
|
||||
# Set span to 1 to make the cell 1 column/row sized
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("%d,%d"%(col, row))
|
||||
label.center()
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
#
|
||||
# Demonstrate track placement
|
||||
#
|
||||
|
||||
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
|
||||
# Add space between the columns and move the rows to the bottom (end)
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_grid_align(lv.GRID_ALIGN.SPACE_BETWEEN, lv.GRID_ALIGN.END)
|
||||
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
|
||||
|
||||
for i in range(9):
|
||||
col = i % 3
|
||||
row = i // 3
|
||||
|
||||
obj = lv.obj(cont)
|
||||
# Stretch the cell horizontally and vertically too
|
||||
# Set span to 1 to make the cell 1 column/row sized
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("{:d}{:d}".format(col, row))
|
||||
label.center()
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
def row_gap_anim(obj, v):
|
||||
obj.set_style_pad_row(v, 0)
|
||||
|
||||
def column_gap_anim(obj, v):
|
||||
obj.set_style_pad_column(v, 0)
|
||||
|
||||
#
|
||||
# Demonstrate column and row gap
|
||||
#
|
||||
|
||||
# 60x60 cells
|
||||
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
|
||||
for i in range(9):
|
||||
col = i % 3
|
||||
row = i // 3
|
||||
|
||||
obj = lv.obj(cont)
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||
label = lv.label(obj)
|
||||
label.set_text("{:d},{:d}".format(col, row))
|
||||
label.center()
|
||||
|
||||
a_row = lv.anim_t()
|
||||
a_row.init()
|
||||
a_row.set_var(cont)
|
||||
a_row.set_values(0, 10)
|
||||
a_row.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
a_row.set_time(500)
|
||||
a_row.set_playback_duration(500)
|
||||
a_row. set_custom_exec_cb(lambda a,val: row_gap_anim(cont,val))
|
||||
lv.anim_t.start(a_row)
|
||||
|
||||
a_col = lv.anim_t()
|
||||
a_col.init()
|
||||
a_col.set_var(cont)
|
||||
a_col.set_values(0, 10)
|
||||
a_col.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
a_col.set_time(500)
|
||||
a_col.set_playback_duration(500)
|
||||
a_col. set_custom_exec_cb(lambda a,val: column_gap_anim(cont,val))
|
||||
lv.anim_t.start(a_col)
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#
|
||||
# Demonstrate RTL direction on grid
|
||||
#
|
||||
col_dsc = [60, 60, 60, lv.GRID_TEMPLATE_LAST]
|
||||
row_dsc = [40, 40, 40, lv.GRID_TEMPLATE_LAST]
|
||||
|
||||
# Create a container with grid
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(300, 220)
|
||||
cont.center()
|
||||
cont.set_style_base_dir(lv.BASE_DIR.RTL,0)
|
||||
cont.set_grid_dsc_array(col_dsc, row_dsc)
|
||||
|
||||
for i in range(9):
|
||||
col = i % 3
|
||||
row = i // 3
|
||||
|
||||
obj = lv.obj(cont)
|
||||
# Stretch the cell horizontally and vertically too
|
||||
# Set span to 1 to make the cell 1 column/row sized
|
||||
obj.set_grid_cell(lv.GRID_ALIGN.STRETCH, col, 1,
|
||||
lv.GRID_ALIGN.STRETCH, row, 1)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("{:d},{:d}".format(col, row))
|
||||
label.center()
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
|
||||
bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
|
||||
fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
|
||||
|
||||
barcode = lv.barcode(lv.screen_active())
|
||||
barcode.set_height(50)
|
||||
barcode.center()
|
||||
|
||||
# Set color
|
||||
barcode.set_dark_color(fg_color)
|
||||
barcode.set_light_color(bg_color)
|
||||
|
||||
# Add a border with bg_color
|
||||
barcode.set_style_border_color(bg_color, 0)
|
||||
barcode.set_style_border_width(5, 0)
|
||||
|
||||
# Set data
|
||||
barcode.update("https://lvgl.io")
|
||||
@@ -1 +0,0 @@
|
||||
pass
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/opt/bin/lv_micropython-ffmpeg -i
|
||||
import sys
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
|
||||
try:
|
||||
#
|
||||
# Open an image from a file
|
||||
#
|
||||
image = lv.image(lv.screen_active())
|
||||
image.set_src("ffmpeg.png")
|
||||
image.center()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
# TODO
|
||||
# fallback for online examples
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("FFmpeg is not installed")
|
||||
label.center()
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/opt/bin/lv_micropython-ffmpeg -i
|
||||
import sys
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
|
||||
#
|
||||
# Open a video from a file
|
||||
#
|
||||
|
||||
# birds.mp4 is downloaded from http://www.videezy.com (Free Stock Footage by Videezy!)
|
||||
# https://www.videezy.com/abstract/44864-silhouettes-of-birds-over-the-sunset
|
||||
player = lv.ffmpeg_player(lv.screen_active())
|
||||
player.player_set_src("birds.mp4")
|
||||
player.player_set_auto_restart(True)
|
||||
player.player_set_cmd(lv.ffmpeg_player.PLAYER_CMD.START)
|
||||
# player.player_set_cmd(0)
|
||||
player.center()
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
import fs_driver
|
||||
|
||||
font = lv.freetype_font_create("./Lato-Regular.ttf", 24, lv.FREETYPE_FONT_STYLE.NORMAL)
|
||||
|
||||
# Create style with the new font
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_text_font(font)
|
||||
style.set_text_align(lv.TEXT_ALIGN.CENTER)
|
||||
|
||||
# Create a label with the new style
|
||||
label = lv.label(lv.screen_active())
|
||||
label.add_style(style, 0)
|
||||
label.set_text("Hello world\nI'm a font created with FreeType")
|
||||
label.center()
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,27 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
import fs_driver
|
||||
from img_bulb_gif import img_bulb_gif_map
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
#
|
||||
# Open a GIF image from a file and a variable
|
||||
#
|
||||
image_bulb_gif = lv.image_dsc_t(
|
||||
{
|
||||
"header": {"w": 0, "h": 0, "cf": lv.COLOR_FORMAT.RAW},
|
||||
"data_size": 0,
|
||||
"data": img_bulb_gif_map,
|
||||
}
|
||||
)
|
||||
image1 = lv.gif(lv.screen_active())
|
||||
image1.set_src(image_bulb_gif)
|
||||
image1.align(lv.ALIGN.RIGHT_MID, -150, 0)
|
||||
|
||||
image2 = lv.gif(lv.screen_active())
|
||||
# The File system is attached to letter 'S'
|
||||
|
||||
image2.set_src("S:bulb.gif")
|
||||
image2.align(lv.ALIGN.RIGHT_MID, -250, 0)
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
import fs_driver
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
wp = lv.image(lv.screen_active())
|
||||
# The File system is attached to letter 'S'
|
||||
|
||||
wp.set_src("S:flower.jpg")
|
||||
wp.center()
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
import fs_driver
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
image = lv.image(lv.screen_active())
|
||||
image.set_src("S:png_demo.png")
|
||||
image.center()
|
||||
@@ -1,336 +0,0 @@
|
||||
|
||||
img_wink_png_map = bytes([
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x3f, 0x88,
|
||||
0xb1, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
|
||||
0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00,
|
||||
0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
|
||||
0x07, 0xe5, 0x05, 0x07, 0x0c, 0x1b, 0x26, 0xad, 0x4b, 0x20, 0x5b, 0x00, 0x00, 0x00, 0x1d, 0x69,
|
||||
0x54, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50,
|
||||
0x64, 0x2e, 0x65, 0x07, 0x00, 0x00, 0x13, 0x8a, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xad, 0x9a,
|
||||
0x69, 0x94, 0x5d, 0xd5, 0x75, 0xe7, 0x7f, 0xe7, 0xdc, 0x7b, 0xdf, 0x7d, 0x43, 0xd5, 0xab, 0xe9,
|
||||
0x55, 0x49, 0x05, 0xaa, 0xd2, 0x80, 0x10, 0x12, 0x48, 0xa8, 0x24, 0x04, 0x66, 0x72, 0x6c, 0xec,
|
||||
0xd8, 0xd0, 0x6e, 0x27, 0xc4, 0x6d, 0x4c, 0x08, 0x21, 0xdd, 0xed, 0x24, 0xbd, 0x1c, 0x67, 0x39,
|
||||
0xcb, 0x6d, 0x33, 0xc7, 0x6e, 0x9b, 0xc6, 0x18, 0x64, 0x90, 0x43, 0xda, 0xb1, 0x1d, 0x7f, 0x31,
|
||||
0x89, 0x93, 0xb8, 0x33, 0x38, 0x84, 0x15, 0x63, 0xe3, 0x38, 0x84, 0x80, 0x99, 0x67, 0x24, 0x10,
|
||||
0x83, 0x06, 0x84, 0x84, 0x54, 0x52, 0x95, 0x6a, 0x7e, 0xf5, 0xa6, 0x3b, 0x9c, 0xb3, 0xfb, 0xc3,
|
||||
0xbd, 0x6f, 0x28, 0xa1, 0xac, 0x0e, 0x8e, 0x6b, 0xad, 0xb3, 0x6e, 0xd5, 0x7b, 0xa7, 0xce, 0xd9,
|
||||
0xff, 0xb3, 0xa7, 0xff, 0xde, 0xf7, 0x28, 0x7e, 0x8e, 0x9f, 0x97, 0x6f, 0x18, 0xe2, 0xec, 0x3b,
|
||||
0x8f, 0x03, 0xf0, 0xe0, 0xd5, 0x5b, 0x19, 0x1e, 0xdd, 0xa7, 0x4b, 0xab, 0x95, 0x5a, 0x98, 0xee,
|
||||
0xe9, 0x6d, 0xcc, 0x95, 0xcf, 0xcb, 0xf5, 0xc8, 0xe6, 0x6c, 0x97, 0x3e, 0x5d, 0x3b, 0x76, 0xd0,
|
||||
0x51, 0xaa, 0x28, 0x56, 0x10, 0xc3, 0xa2, 0x89, 0xd5, 0x74, 0x58, 0xe3, 0x50, 0xa3, 0xa6, 0x5e,
|
||||
0x15, 0xed, 0xbf, 0x30, 0x30, 0x5c, 0x38, 0x52, 0x9f, 0x1a, 0x8f, 0xe7, 0xaa, 0x3d, 0xb2, 0xed,
|
||||
0xee, 0xe3, 0xd2, 0x5e, 0x7f, 0x19, 0x67, 0xdf, 0x39, 0xf9, 0xae, 0x64, 0x52, 0xef, 0x66, 0xf2,
|
||||
0x4b, 0xd7, 0x0d, 0xb3, 0x65, 0xc7, 0x31, 0x00, 0x7e, 0x70, 0xee, 0x6a, 0xb5, 0xed, 0x13, 0xc7,
|
||||
0xfd, 0x58, 0x7a, 0x46, 0x95, 0xa9, 0x7c, 0xa2, 0xab, 0xa4, 0xaf, 0xcc, 0xe4, 0xe3, 0xb3, 0xf3,
|
||||
0xbd, 0x1a, 0x37, 0x23, 0x80, 0x80, 0xa8, 0xe4, 0x69, 0x01, 0x63, 0x51, 0x06, 0xc4, 0x28, 0x6c,
|
||||
0x03, 0x1a, 0x65, 0xa1, 0x51, 0xd3, 0xc7, 0xeb, 0x55, 0x1e, 0x08, 0x43, 0xef, 0xaf, 0x5d, 0x47,
|
||||
0xbf, 0x30, 0xb7, 0xa0, 0xcb, 0x5b, 0xef, 0x9e, 0x8a, 0x9a, 0xfb, 0xed, 0xba, 0x6e, 0x19, 0x9b,
|
||||
0x77, 0x4c, 0xfe, 0xe2, 0x80, 0xec, 0xff, 0xf6, 0xc7, 0x88, 0x8f, 0xfd, 0x88, 0xf5, 0x5f, 0x49,
|
||||
0xf6, 0x78, 0xe3, 0xcb, 0x5d, 0x5d, 0x5e, 0x2e, 0x7b, 0x6e, 0xb6, 0x18, 0x7f, 0x26, 0xdf, 0x6b,
|
||||
0xff, 0x4b, 0xd7, 0xa0, 0x42, 0x39, 0x2e, 0x38, 0x59, 0x20, 0x83, 0x68, 0x0f, 0x94, 0x87, 0xd2,
|
||||
0x39, 0x40, 0x83, 0x44, 0x88, 0xa9, 0x83, 0x09, 0xc0, 0x84, 0xa8, 0x30, 0x40, 0x05, 0x01, 0x84,
|
||||
0x06, 0x22, 0x45, 0xa3, 0x6c, 0xa9, 0x2e, 0xea, 0xb7, 0xea, 0x81, 0xf7, 0x4d, 0x1b, 0xdb, 0xfb,
|
||||
0x0e, 0x8e, 0x17, 0x0f, 0x5f, 0xf2, 0xdd, 0x23, 0x31, 0xc0, 0xab, 0x5f, 0x7b, 0x2f, 0x67, 0xdd,
|
||||
0xf8, 0xd8, 0x7f, 0x1c, 0xc8, 0xae, 0x1b, 0x47, 0xd8, 0xfc, 0xb5, 0xc3, 0x00, 0xfc, 0xf4, 0xd2,
|
||||
0x62, 0x66, 0xed, 0x07, 0x33, 0x9b, 0xb3, 0xdd, 0xe6, 0xf3, 0xdd, 0x83, 0x72, 0x55, 0xae, 0x17,
|
||||
0x54, 0xa6, 0x1b, 0x71, 0xfb, 0x20, 0xbb, 0x12, 0xd5, 0xb3, 0x09, 0x95, 0x3f, 0x1d, 0x72, 0x23,
|
||||
0xe0, 0xf5, 0x82, 0xd2, 0xed, 0x85, 0x24, 0x86, 0x60, 0x06, 0xea, 0x87, 0x91, 0xea, 0x5e, 0x98,
|
||||
0x7f, 0x05, 0x16, 0x0f, 0x41, 0x75, 0x0e, 0x55, 0xab, 0xa0, 0x02, 0x4b, 0x54, 0x83, 0xc5, 0xb2,
|
||||
0x3a, 0xdc, 0x08, 0xdd, 0xdb, 0xe6, 0xe6, 0xd5, 0x8f, 0x37, 0x7d, 0x7d, 0x61, 0x1c, 0xe0, 0xa5,
|
||||
0xeb, 0x57, 0xb0, 0xe5, 0xae, 0x23, 0x3f, 0x3f, 0x90, 0x5d, 0xd7, 0x95, 0xd8, 0xbc, 0x63, 0x3a,
|
||||
0xb5, 0xdb, 0x81, 0xc1, 0xbe, 0x11, 0xf9, 0xaf, 0x85, 0x12, 0x37, 0x15, 0x06, 0x28, 0x39, 0xd9,
|
||||
0x02, 0xf8, 0xa3, 0xd0, 0x77, 0x1e, 0xaa, 0xff, 0x62, 0xc8, 0xad, 0x04, 0x31, 0xe9, 0xb0, 0x24,
|
||||
0xf6, 0x74, 0x92, 0xed, 0x54, 0x3a, 0x50, 0x50, 0x3f, 0x02, 0x33, 0xcf, 0x20, 0x53, 0xcf, 0xc3,
|
||||
0xec, 0x01, 0x58, 0x9c, 0x46, 0x87, 0x50, 0xaf, 0xc2, 0x62, 0xc5, 0xf9, 0x49, 0xad, 0xae, 0xef,
|
||||
0x58, 0x73, 0x6b, 0xf9, 0x31, 0x80, 0x9d, 0x37, 0x0c, 0x33, 0x76, 0xe7, 0xb1, 0x77, 0x0f, 0x64,
|
||||
0xd7, 0xf5, 0x7d, 0x6c, 0xbe, 0x6b, 0x0e, 0x80, 0x3d, 0xb7, 0x0e, 0x9c, 0xd5, 0x73, 0x8a, 0xfa,
|
||||
0x52, 0xf7, 0x32, 0x75, 0xa5, 0xdf, 0x25, 0x90, 0x1d, 0x81, 0xbe, 0x8b, 0x50, 0x43, 0x97, 0x42,
|
||||
0x66, 0x28, 0x39, 0x6d, 0x31, 0x27, 0x59, 0x45, 0xda, 0xcf, 0x14, 0xa0, 0x12, 0x83, 0x60, 0xdb,
|
||||
0xf3, 0xb5, 0x87, 0x8a, 0xab, 0xc8, 0xec, 0x0b, 0xc8, 0xb1, 0xa7, 0x60, 0xe2, 0x15, 0x54, 0xb5,
|
||||
0x82, 0xc4, 0x9a, 0x85, 0x05, 0xa6, 0x2a, 0x55, 0xe7, 0xe6, 0xaf, 0xfd, 0xf0, 0xb2, 0xef, 0x7d,
|
||||
0xfb, 0xc5, 0x1f, 0xc4, 0x3b, 0x3f, 0xd7, 0xcb, 0xd8, 0xdd, 0xf3, 0xff, 0x7e, 0x20, 0x2f, 0xdf,
|
||||
0x50, 0xe2, 0xec, 0x3b, 0x13, 0x4d, 0xec, 0xbb, 0xbd, 0xff, 0xe2, 0xbe, 0x11, 0xe7, 0xae, 0xc2,
|
||||
0xa0, 0x3e, 0xdf, 0xcb, 0x6b, 0xe8, 0xda, 0x8c, 0x5a, 0x76, 0x39, 0x14, 0xcf, 0x4e, 0x65, 0x3c,
|
||||
0x19, 0x00, 0x8b, 0x12, 0x69, 0x09, 0xac, 0xc4, 0x22, 0x62, 0x81, 0xb6, 0xb6, 0x94, 0x98, 0x44,
|
||||
0x6b, 0x62, 0x12, 0xa0, 0xda, 0x43, 0xa2, 0x05, 0x98, 0x7c, 0x16, 0x79, 0xfb, 0x31, 0x98, 0x3c,
|
||||
0x80, 0xb2, 0x0e, 0xd5, 0x2a, 0x71, 0xb9, 0xa2, 0xbf, 0xf2, 0xe1, 0xff, 0x75, 0xda, 0x57, 0x5f,
|
||||
0x63, 0x97, 0xd9, 0x79, 0xfd, 0x72, 0xc6, 0xee, 0x9a, 0xf8, 0xff, 0x03, 0xd9, 0x79, 0xdd, 0x10,
|
||||
0x63, 0x3b, 0x92, 0xd0, 0xba, 0xff, 0x8e, 0xfe, 0x4b, 0xfa, 0x56, 0x39, 0xdf, 0x28, 0x94, 0xdc,
|
||||
0x8d, 0xae, 0xef, 0x42, 0xdf, 0xc5, 0xa8, 0xe1, 0x2b, 0xc0, 0x1f, 0x6e, 0x0b, 0xd0, 0x71, 0xfa,
|
||||
0x0a, 0x0b, 0xa9, 0xd0, 0x4b, 0x4e, 0x5e, 0x92, 0xcf, 0x15, 0x6d, 0xe1, 0x45, 0x2c, 0x8a, 0x14,
|
||||
0x60, 0x13, 0x14, 0x02, 0xca, 0x81, 0x85, 0x03, 0x70, 0xe8, 0x11, 0xe4, 0xd0, 0x73, 0x28, 0xeb,
|
||||
0xd0, 0x68, 0x88, 0x99, 0x9d, 0x77, 0x76, 0x8c, 0x7c, 0xa9, 0x72, 0x13, 0xc0, 0xce, 0x9b, 0x4f,
|
||||
0x63, 0xec, 0x8e, 0x37, 0xff, 0x6d, 0x20, 0xaf, 0x7c, 0x69, 0x3d, 0x9b, 0x6e, 0x7d, 0x23, 0xd1,
|
||||
0xc4, 0xf6, 0xd2, 0x7b, 0xfa, 0x47, 0xf5, 0x9f, 0x77, 0x2d, 0xf3, 0xd6, 0x3b, 0x9e, 0x03, 0xfd,
|
||||
0xef, 0x47, 0x9d, 0x72, 0x25, 0x78, 0xfd, 0x20, 0x31, 0xda, 0x71, 0x00, 0x41, 0x4c, 0x94, 0x0a,
|
||||
0xd3, 0x71, 0xe2, 0x1d, 0xc2, 0xa9, 0xa6, 0xbf, 0x88, 0x41, 0x3a, 0xb5, 0xd0, 0xfa, 0xbc, 0x03,
|
||||
0x88, 0x4d, 0xd7, 0x50, 0x1a, 0x82, 0x39, 0xe4, 0xd0, 0xa3, 0xb0, 0xff, 0x31, 0xb0, 0x2e, 0x41,
|
||||
0x40, 0x70, 0x7c, 0x46, 0x6f, 0x5f, 0xfd, 0xbf, 0x2b, 0xb7, 0xc8, 0x93, 0xb0, 0xff, 0xe0, 0xe7,
|
||||
0x38, 0xfd, 0xea, 0xbb, 0x4f, 0x0e, 0x44, 0x9e, 0x06, 0x75, 0x3e, 0xec, 0xbf, 0x63, 0x68, 0x4d,
|
||||
0xf7, 0x72, 0xfe, 0xae, 0x6f, 0xa5, 0x7f, 0x8e, 0x76, 0x25, 0xf1, 0x87, 0x53, 0xaf, 0x49, 0x40,
|
||||
0xd8, 0x08, 0x9d, 0xcd, 0x30, 0x77, 0xe8, 0x6d, 0x4c, 0x14, 0xd2, 0x37, 0x3c, 0x88, 0x52, 0xd2,
|
||||
0x21, 0x98, 0x39, 0x41, 0xf8, 0x26, 0xc0, 0x7f, 0x43, 0x78, 0x39, 0x11, 0x4c, 0xf2, 0x14, 0x80,
|
||||
0xb8, 0x06, 0x6f, 0xfd, 0x0c, 0xde, 0x7c, 0x0a, 0xf0, 0x68, 0x04, 0xcc, 0x1e, 0x3e, 0xea, 0x5d,
|
||||
0xbf, 0x61, 0xfb, 0xc2, 0x3d, 0x6f, 0x5c, 0xeb, 0xa9, 0xf5, 0x5f, 0x8f, 0x5a, 0x26, 0xd1, 0x8a,
|
||||
0x8f, 0xbb, 0x6f, 0x2e, 0xa1, 0xce, 0x87, 0xdd, 0x37, 0xf6, 0xf4, 0xe6, 0x7a, 0xf8, 0x4a, 0xdf,
|
||||
0x68, 0x36, 0x01, 0xd1, 0x75, 0x26, 0x6a, 0xf9, 0xc7, 0x50, 0x6e, 0x2f, 0xd8, 0x06, 0xda, 0x85,
|
||||
0xf1, 0x5d, 0x3b, 0xf9, 0xfe, 0x1f, 0x7e, 0x95, 0x3f, 0xbe, 0xe6, 0xb3, 0x4c, 0xee, 0x7f, 0x13,
|
||||
0x4c, 0x80, 0xb2, 0x01, 0x2a, 0x7d, 0x62, 0x1b, 0x88, 0x69, 0x20, 0x36, 0x00, 0x69, 0x80, 0x0d,
|
||||
0xc0, 0x86, 0x1d, 0x23, 0x48, 0x86, 0x49, 0x9f, 0x36, 0x99, 0x23, 0x26, 0x40, 0x6c, 0x88, 0x98,
|
||||
0x10, 0xe2, 0x46, 0x22, 0xd8, 0xc8, 0x36, 0x18, 0x5c, 0x05, 0x62, 0xf1, 0x33, 0xf4, 0x9f, 0xb2,
|
||||
0x2c, 0xba, 0xe1, 0xa9, 0x4f, 0x97, 0xc6, 0xd6, 0x7f, 0x3d, 0x92, 0x97, 0x3e, 0x37, 0xc0, 0x12,
|
||||
0x20, 0xaf, 0x6f, 0xbf, 0x90, 0x8d, 0x77, 0x4c, 0xf3, 0xd3, 0x4b, 0xbb, 0xbd, 0xc2, 0x90, 0x7f,
|
||||
0x79, 0xef, 0x4a, 0xef, 0x6a, 0x27, 0xa3, 0x21, 0xb3, 0x1c, 0x55, 0xfa, 0x00, 0x64, 0x96, 0x23,
|
||||
0xa6, 0x86, 0x92, 0x64, 0xd3, 0x87, 0xee, 0xf9, 0x1b, 0x0e, 0xbc, 0xf0, 0x0a, 0xc3, 0x83, 0x73,
|
||||
0x44, 0xf3, 0x7b, 0xc0, 0xd4, 0x11, 0xdb, 0x48, 0x47, 0x80, 0x48, 0x08, 0xd2, 0x21, 0x6c, 0x4b,
|
||||
0xe0, 0xce, 0xbf, 0xc3, 0xb6, 0xf0, 0x26, 0x15, 0xde, 0x86, 0xe9, 0x77, 0x8d, 0xf6, 0x50, 0x0a,
|
||||
0xd6, 0x5c, 0x08, 0x19, 0x8d, 0x52, 0x90, 0xf5, 0x39, 0x63, 0xf5, 0x68, 0xfd, 0x36, 0x80, 0x2d,
|
||||
0x77, 0xcf, 0x2c, 0x05, 0xb2, 0xe1, 0xa6, 0x27, 0x01, 0xd8, 0xf0, 0xab, 0xbd, 0xc3, 0x85, 0x41,
|
||||
0xbd, 0x23, 0xdb, 0xe3, 0x23, 0x78, 0xd0, 0xbd, 0x11, 0xba, 0xb7, 0x82, 0xa9, 0x82, 0x6d, 0xa0,
|
||||
0x1c, 0x61, 0xdf, 0x53, 0xcf, 0x72, 0xf4, 0x8d, 0xfd, 0xfc, 0xca, 0x15, 0x9a, 0x2b, 0x3e, 0xbd,
|
||||
0x8e, 0xe5, 0xab, 0x4a, 0x40, 0x08, 0x92, 0x0e, 0xdb, 0x00, 0xd3, 0xe8, 0x10, 0xbe, 0x53, 0xc0,
|
||||
0xf6, 0x48, 0x34, 0x76, 0xc2, 0x77, 0xa6, 0x91, 0x1e, 0x40, 0x73, 0xad, 0x44, 0xa3, 0x2a, 0x9b,
|
||||
0x85, 0xe5, 0xa7, 0x03, 0x06, 0xc7, 0x81, 0x62, 0xb7, 0x5c, 0xb0, 0xf7, 0x0b, 0xdd, 0xbf, 0xdf,
|
||||
0xcc, 0x75, 0x00, 0xfa, 0xf5, 0x3b, 0xce, 0x4f, 0xf2, 0xc6, 0xb5, 0x3d, 0x59, 0x1b, 0x36, 0x3e,
|
||||
0xdd, 0x37, 0x9a, 0x2d, 0x89, 0x08, 0xe4, 0x4e, 0x41, 0xf5, 0x5d, 0x90, 0x2e, 0xdc, 0x40, 0xd9,
|
||||
0x10, 0x1c, 0xc3, 0x6b, 0x8f, 0xbf, 0xc4, 0x59, 0x1b, 0xa6, 0xd9, 0xf4, 0xc1, 0x8b, 0x29, 0x9d,
|
||||
0xf7, 0x07, 0x78, 0x3d, 0x2b, 0x52, 0x61, 0x52, 0x00, 0x9d, 0x26, 0x74, 0x52, 0xd3, 0x09, 0x96,
|
||||
0x9e, 0xbe, 0x09, 0xda, 0xda, 0x6b, 0x3d, 0x1b, 0x09, 0x00, 0x09, 0x50, 0x12, 0x02, 0x21, 0xaa,
|
||||
0x74, 0x2a, 0xe8, 0xc4, 0x25, 0x5c, 0x87, 0xfe, 0xc1, 0x7e, 0x73, 0xcd, 0x7d, 0x57, 0xad, 0x1c,
|
||||
0x68, 0x26, 0x6c, 0x77, 0xc3, 0xcd, 0x4f, 0x03, 0xd0, 0xbf, 0xba, 0xbb, 0x94, 0xef, 0x33, 0x9f,
|
||||
0xd7, 0x9e, 0x83, 0xe0, 0x43, 0x7e, 0x2d, 0xf8, 0xa7, 0xa0, 0x4c, 0x2d, 0x71, 0x44, 0x25, 0x44,
|
||||
0x0b, 0x55, 0xa4, 0x72, 0x80, 0xb5, 0xdb, 0xce, 0x64, 0x60, 0xe3, 0xaf, 0x22, 0xda, 0x4f, 0x4f,
|
||||
0x51, 0x3a, 0x9c, 0xd9, 0xb4, 0x9d, 0xb7, 0x95, 0x3f, 0x52, 0x87, 0xb6, 0x16, 0x6b, 0x63, 0xac,
|
||||
0x89, 0x40, 0x2c, 0x5a, 0x83, 0xd6, 0xd2, 0xfe, 0x3f, 0x3a, 0x02, 0x45, 0xcb, 0xf1, 0xd3, 0x40,
|
||||
0xe1, 0x79, 0xe0, 0x29, 0x08, 0xc0, 0xd1, 0xe0, 0xfb, 0x9c, 0x35, 0xb6, 0x6e, 0xe6, 0x93, 0xc0,
|
||||
0x0e, 0x00, 0x07, 0x60, 0xe7, 0xb5, 0x3d, 0xae, 0x93, 0x91, 0x4f, 0x2d, 0xdb, 0x50, 0xb8, 0x14,
|
||||
0xad, 0xc1, 0x2f, 0xa1, 0x4a, 0xef, 0x47, 0x39, 0x99, 0xc4, 0x61, 0x89, 0xd1, 0x8e, 0xe5, 0xf0,
|
||||
0xee, 0x37, 0xc9, 0x98, 0x43, 0xac, 0x7e, 0xcf, 0x2f, 0x93, 0xe9, 0x1e, 0x02, 0x13, 0x82, 0x8d,
|
||||
0x41, 0xa2, 0x64, 0x10, 0x81, 0x8d, 0x11, 0x1b, 0xa7, 0xd9, 0xbe, 0x63, 0xd8, 0x88, 0xe9, 0xa3,
|
||||
0xd3, 0x3c, 0xf3, 0xc0, 0x8b, 0x3c, 0x75, 0xff, 0xf3, 0xbc, 0xf1, 0xcc, 0x1e, 0x2a, 0xb3, 0x0b,
|
||||
0x14, 0xba, 0x1c, 0x72, 0x79, 0x85, 0x52, 0x06, 0x4d, 0x8c, 0x22, 0x42, 0x49, 0x9c, 0xac, 0x23,
|
||||
0x21, 0xd8, 0x28, 0xd9, 0xa7, 0x32, 0x0e, 0x8b, 0x53, 0x60, 0x54, 0x33, 0x7d, 0xf9, 0x5a, 0x8b,
|
||||
0xda, 0xdc, 0x7d, 0xf6, 0x7d, 0xf7, 0xbe, 0x7e, 0x2c, 0x74, 0x13, 0x6d, 0x14, 0x7c, 0xbf, 0xcb,
|
||||
0xfe, 0x8e, 0xce, 0x38, 0x88, 0x38, 0x90, 0x29, 0x81, 0xbf, 0x0c, 0x69, 0x6a, 0x43, 0x2c, 0x28,
|
||||
0x85, 0x69, 0xcc, 0xb3, 0x62, 0xec, 0x42, 0xba, 0x4b, 0x43, 0xd8, 0xb8, 0xb6, 0x24, 0xd9, 0xc9,
|
||||
0x92, 0x70, 0x6a, 0x96, 0x84, 0x54, 0xad, 0x85, 0xb9, 0xa9, 0x05, 0xfe, 0xf5, 0xff, 0x3e, 0xcc,
|
||||
0xe4, 0xbe, 0x37, 0x39, 0x73, 0x4b, 0x0f, 0x5d, 0x3d, 0x1e, 0x8d, 0xd9, 0x79, 0x9e, 0xbb, 0x7f,
|
||||
0x1f, 0xe7, 0x7e, 0x64, 0x1b, 0x83, 0x23, 0x7d, 0x2c, 0xcc, 0x87, 0xcc, 0x97, 0x03, 0x72, 0xbe,
|
||||
0xd0, 0xdf, 0x2d, 0x29, 0xa0, 0x06, 0x34, 0x8e, 0x23, 0x0b, 0x87, 0x50, 0x19, 0x07, 0x22, 0x01,
|
||||
0x23, 0xb8, 0x2e, 0xf8, 0x19, 0xb5, 0x7e, 0xcb, 0xda, 0xbd, 0x97, 0x02, 0xf7, 0xba, 0xcf, 0x7d,
|
||||
0x66, 0x98, 0xfa, 0x3c, 0xeb, 0xfa, 0x46, 0xdc, 0xd3, 0x11, 0x05, 0x4e, 0x1e, 0x95, 0x5b, 0x09,
|
||||
0xa6, 0x9e, 0x2c, 0x92, 0x0a, 0x6a, 0x03, 0xcb, 0xea, 0x4d, 0xab, 0x00, 0xc1, 0x5a, 0x83, 0xc2,
|
||||
0x24, 0x7e, 0x83, 0xc5, 0x88, 0x4e, 0xcc, 0x40, 0xe2, 0x0e, 0xda, 0x61, 0x5b, 0x79, 0x43, 0x8c,
|
||||
0xc5, 0xcf, 0x84, 0xbc, 0xef, 0x23, 0x25, 0x06, 0x4a, 0x7d, 0xf8, 0xc5, 0x65, 0x90, 0x29, 0x24,
|
||||
0x59, 0x4c, 0x37, 0xa8, 0x4e, 0x2f, 0xf2, 0xf0, 0xcf, 0x8e, 0xf1, 0xd0, 0xb3, 0x65, 0x76, 0xef,
|
||||
0x5b, 0xe4, 0x03, 0x5b, 0x35, 0x9f, 0xba, 0x3c, 0x87, 0x23, 0xb5, 0x54, 0x0e, 0x9b, 0xd8, 0x8e,
|
||||
0x23, 0xe0, 0x28, 0x50, 0x92, 0x90, 0x00, 0xcd, 0x48, 0x5f, 0x2f, 0x17, 0x00, 0xf7, 0xba, 0x5d,
|
||||
0xa5, 0x50, 0x3b, 0x9e, 0xfe, 0xb5, 0x7c, 0xa9, 0x88, 0xa0, 0x40, 0xfb, 0xe0, 0x2f, 0x03, 0x53,
|
||||
0x4b, 0xcd, 0x66, 0xa9, 0x50, 0x00, 0x3a, 0x98, 0x62, 0x71, 0x62, 0x9c, 0xc9, 0x63, 0x53, 0x64,
|
||||
0x33, 0x2e, 0x2b, 0x46, 0x06, 0x90, 0xae, 0x21, 0xac, 0x93, 0x49, 0xe7, 0x37, 0x35, 0x12, 0x03,
|
||||
0x31, 0xd8, 0x90, 0x7c, 0x3e, 0xa4, 0x70, 0xc6, 0xa9, 0x88, 0x69, 0x60, 0xa2, 0x2a, 0x54, 0x66,
|
||||
0x70, 0x1c, 0xc3, 0xf4, 0x74, 0x9d, 0xef, 0xde, 0x37, 0xc5, 0x4f, 0x9e, 0xb1, 0x6c, 0x5c, 0x57,
|
||||
0xe4, 0xca, 0x8b, 0x84, 0x4d, 0x2b, 0x0d, 0xd1, 0x62, 0x15, 0xa7, 0x4b, 0x81, 0xf2, 0x40, 0x27,
|
||||
0x72, 0x88, 0x23, 0x28, 0x27, 0x2d, 0x71, 0x0c, 0xb8, 0x8e, 0xe0, 0x67, 0xec, 0xfa, 0x7f, 0xf8,
|
||||
0xf5, 0x95, 0xfd, 0x6e, 0x71, 0x59, 0x84, 0x72, 0xf3, 0x97, 0xb4, 0xa8, 0xb5, 0xe3, 0x83, 0x53,
|
||||
0x48, 0x9d, 0xd8, 0x74, 0x38, 0xad, 0xa0, 0x94, 0xa0, 0x17, 0x0f, 0xf2, 0xc4, 0x03, 0x0f, 0xf3,
|
||||
0x8f, 0x3f, 0x3b, 0xc2, 0xa4, 0x9c, 0x42, 0x57, 0x06, 0xce, 0xec, 0x1e, 0xe7, 0xaa, 0xcb, 0x37,
|
||||
0xd0, 0xbf, 0xe1, 0x5c, 0x6c, 0x26, 0x07, 0x12, 0x27, 0x66, 0x21, 0x21, 0x22, 0x21, 0x22, 0x8d,
|
||||
0xc4, 0xf4, 0x62, 0x83, 0x12, 0x83, 0x02, 0x94, 0xeb, 0x51, 0xad, 0x5a, 0xbe, 0xf5, 0xf7, 0x65,
|
||||
0x0e, 0xcd, 0xaf, 0xe1, 0x1b, 0xb7, 0x6d, 0x61, 0x53, 0xdf, 0x01, 0xe2, 0x50, 0x13, 0xeb, 0x6e,
|
||||
0xa2, 0xb9, 0x37, 0x80, 0xe3, 0x49, 0x1e, 0x91, 0x94, 0xfa, 0x6b, 0x95, 0x24, 0x0c, 0xa5, 0x40,
|
||||
0x04, 0xc7, 0x01, 0xd7, 0x91, 0x15, 0x6b, 0x86, 0x67, 0xce, 0x70, 0x73, 0xa7, 0x9e, 0xa7, 0x4d,
|
||||
0xf9, 0xd5, 0x73, 0x40, 0x27, 0x84, 0xcd, 0xc9, 0x27, 0x9a, 0x30, 0x01, 0x82, 0x49, 0xf9, 0x8f,
|
||||
0x05, 0xa5, 0xd1, 0xf5, 0xc3, 0xfc, 0xe3, 0xf7, 0x7f, 0xc8, 0x9f, 0x3c, 0xd6, 0x83, 0xb7, 0xf5,
|
||||
0xcb, 0xac, 0x1e, 0x7b, 0x0f, 0x91, 0x11, 0x1e, 0xdc, 0xf3, 0x1c, 0x6f, 0xfd, 0xcd, 0xb7, 0xf8,
|
||||
0xd2, 0x55, 0x4f, 0xd2, 0xb5, 0xe9, 0xa2, 0x94, 0xb6, 0x47, 0x69, 0x24, 0x22, 0x39, 0xd5, 0x44,
|
||||
0x7c, 0x04, 0x41, 0xa1, 0x51, 0x1e, 0xfc, 0xdd, 0x3f, 0xcf, 0x12, 0x66, 0xcf, 0x66, 0xfb, 0x6d,
|
||||
0x57, 0xd2, 0xb7, 0xf8, 0x02, 0x8b, 0x0b, 0x45, 0x0a, 0xcb, 0x47, 0xc8, 0xd6, 0xde, 0xc6, 0xb7,
|
||||
0x71, 0x12, 0xb4, 0x44, 0xb5, 0xfe, 0x17, 0x9d, 0x9a, 0x97, 0x6e, 0x93, 0x2b, 0xa5, 0xd5, 0xf2,
|
||||
0xde, 0x5e, 0xbd, 0xca, 0x9d, 0x7c, 0x65, 0x7c, 0xf8, 0x94, 0xf5, 0x3a, 0x9f, 0x14, 0x3d, 0x1a,
|
||||
0xb4, 0x9f, 0x94, 0xa5, 0x36, 0x5c, 0xc2, 0x4a, 0x1d, 0x15, 0xf0, 0xec, 0xbf, 0x3e, 0xc3, 0x77,
|
||||
0x9f, 0x1d, 0xe0, 0xcc, 0xdf, 0xbc, 0x9d, 0xf7, 0xff, 0xda, 0xc7, 0xc9, 0xf9, 0xc9, 0xb7, 0xb5,
|
||||
0xf0, 0xc3, 0x3c, 0xfe, 0xc0, 0x39, 0x7c, 0xe3, 0xfe, 0x4f, 0xf2, 0xc5, 0x55, 0x47, 0xb1, 0xc5,
|
||||
0x15, 0x2d, 0x66, 0xac, 0x50, 0x88, 0x48, 0x5a, 0x2d, 0x5a, 0x40, 0xa3, 0x5d, 0x87, 0x57, 0x5e,
|
||||
0x9d, 0x67, 0x31, 0x1a, 0xe4, 0xb7, 0x7f, 0xf3, 0x7d, 0x0c, 0x66, 0xea, 0x94, 0xe7, 0x0f, 0x53,
|
||||
0x28, 0xe6, 0x61, 0xef, 0x3f, 0x63, 0xe7, 0xf6, 0x42, 0xb7, 0x86, 0xbe, 0xde, 0xb4, 0x10, 0x63,
|
||||
0xe9, 0xd0, 0x4b, 0x88, 0xef, 0x40, 0xc6, 0x63, 0xb9, 0x8e, 0xca, 0xf3, 0x6b, 0xfd, 0x6e, 0xb7,
|
||||
0xb5, 0x2d, 0xa2, 0x96, 0x64, 0x60, 0x6c, 0x80, 0x22, 0x22, 0x9e, 0x3a, 0xc4, 0xf7, 0x1f, 0x9a,
|
||||
0x61, 0xe5, 0xa5, 0x9f, 0xe3, 0xe3, 0x9f, 0xf8, 0x38, 0xa7, 0x75, 0xc1, 0x4a, 0x0f, 0x46, 0x5d,
|
||||
0x58, 0xdb, 0x0d, 0x57, 0xfc, 0xc6, 0x65, 0x54, 0x2f, 0xde, 0xce, 0xae, 0xa7, 0x5f, 0x45, 0x3b,
|
||||
0x5e, 0xa2, 0x5d, 0x9c, 0x04, 0x8a, 0xd2, 0x9c, 0x28, 0xcd, 0xc1, 0x63, 0x96, 0xcd, 0x1b, 0x86,
|
||||
0x38, 0xed, 0xd4, 0x90, 0xf2, 0xde, 0x07, 0xf1, 0x33, 0x35, 0xd4, 0x5b, 0x8f, 0x63, 0x8f, 0xec,
|
||||
0x85, 0x48, 0x43, 0xa1, 0xa7, 0x5d, 0x49, 0xb6, 0x34, 0xd2, 0x04, 0xd5, 0xe6, 0xba, 0x4a, 0xe1,
|
||||
0x3a, 0x8e, 0xed, 0x75, 0x91, 0x60, 0xb9, 0x9b, 0xcd, 0x75, 0x14, 0x73, 0x61, 0x9b, 0x5a, 0xd0,
|
||||
0x0c, 0x9f, 0xf0, 0xe8, 0xd3, 0xfb, 0x31, 0xcb, 0xdf, 0xcb, 0x07, 0x2e, 0xfb, 0x28, 0x6b, 0x7a,
|
||||
0xa0, 0xa8, 0xc0, 0xd3, 0x90, 0x77, 0xe0, 0xde, 0x07, 0xc7, 0x79, 0xee, 0x65, 0x4d, 0x39, 0x7a,
|
||||
0x2f, 0x7f, 0xff, 0x7a, 0x89, 0xcd, 0x1f, 0xaa, 0x83, 0xca, 0xa4, 0x94, 0x5c, 0x2d, 0x31, 0x0f,
|
||||
0xc7, 0xd1, 0x1c, 0x3c, 0x5c, 0x61, 0x59, 0xaf, 0xe2, 0x8c, 0xd5, 0x75, 0xe2, 0xe3, 0xbb, 0x50,
|
||||
0xf6, 0x18, 0xba, 0x72, 0x14, 0xe2, 0xe3, 0xe8, 0x5e, 0x17, 0xfa, 0xbb, 0xc1, 0xd7, 0x69, 0x80,
|
||||
0x69, 0x96, 0xc8, 0x27, 0xf0, 0xf5, 0xe6, 0x53, 0x04, 0xa5, 0x9c, 0x6e, 0xd7, 0x71, 0x29, 0x2a,
|
||||
0xad, 0x12, 0x1c, 0x22, 0x49, 0xb4, 0x6a, 0x51, 0x03, 0x0b, 0xca, 0x42, 0x5c, 0x63, 0xe7, 0xbe,
|
||||
0x32, 0x83, 0xeb, 0x2f, 0x61, 0xeb, 0xfa, 0x15, 0x94, 0xdc, 0x64, 0x1f, 0x0d, 0xfc, 0xd5, 0xdf,
|
||||
0x1e, 0xe0, 0xc1, 0xfd, 0xfd, 0xbc, 0xbd, 0xff, 0x11, 0xf2, 0xf9, 0x5e, 0xe6, 0xb8, 0x1a, 0x6a,
|
||||
0x8f, 0x40, 0xd7, 0x8a, 0x14, 0xc0, 0xd2, 0xea, 0x47, 0x04, 0xb2, 0xae, 0x61, 0xb4, 0x77, 0x81,
|
||||
0xa2, 0xaa, 0x53, 0x3e, 0x78, 0x98, 0x4c, 0x21, 0xc6, 0xf1, 0x23, 0x18, 0xea, 0x05, 0xd7, 0x87,
|
||||
0xdc, 0x08, 0x2a, 0xbf, 0x0a, 0x2a, 0x7b, 0x90, 0xda, 0xc1, 0xd4, 0xe7, 0x4e, 0x5e, 0x49, 0x2b,
|
||||
0x25, 0xe0, 0x78, 0x59, 0xad, 0xb2, 0x5e, 0xbe, 0xb3, 0x44, 0x45, 0xea, 0x28, 0x5b, 0x69, 0x73,
|
||||
0x2c, 0x13, 0x40, 0x65, 0x96, 0xd8, 0x1f, 0xa6, 0x67, 0xf9, 0x5a, 0xfa, 0x7c, 0xc8, 0xa4, 0x7e,
|
||||
0x77, 0x64, 0x7c, 0x91, 0xe9, 0x28, 0xc7, 0x1f, 0x7d, 0xb6, 0x97, 0xb3, 0x7a, 0x9e, 0xe0, 0xa1,
|
||||
0x3f, 0xbb, 0x9c, 0x89, 0x60, 0x82, 0xf2, 0x54, 0x39, 0xd5, 0xbe, 0x24, 0x92, 0x77, 0x6c, 0x6c,
|
||||
0xad, 0xa5, 0x34, 0x90, 0xa7, 0xb4, 0x62, 0x05, 0xe2, 0x17, 0xc9, 0x14, 0x5d, 0x9c, 0x5c, 0x16,
|
||||
0xb2, 0x03, 0x90, 0x2d, 0xa2, 0xfc, 0x6e, 0xb4, 0x6b, 0x51, 0x32, 0x0f, 0x85, 0xd1, 0xa5, 0x55,
|
||||
0xa8, 0x9c, 0xa4, 0xbe, 0x15, 0x50, 0x26, 0xa8, 0x6b, 0xa9, 0xd5, 0x17, 0x97, 0xcc, 0x30, 0x21,
|
||||
0x04, 0x53, 0x60, 0x42, 0xc4, 0x34, 0x40, 0x42, 0x2a, 0x73, 0x65, 0xdc, 0xc2, 0x20, 0x7d, 0xa5,
|
||||
0xa1, 0x56, 0xf4, 0x03, 0x78, 0xf8, 0xf1, 0x69, 0x3e, 0xf8, 0x4b, 0x03, 0x0c, 0x74, 0xc1, 0x15,
|
||||
0x1f, 0xfb, 0x28, 0x71, 0x58, 0xe5, 0xe0, 0xce, 0x7f, 0x61, 0x7e, 0xa1, 0xd1, 0x2e, 0x6b, 0x91,
|
||||
0x8e, 0x67, 0xb2, 0x4f, 0xc2, 0xb1, 0x34, 0xa2, 0x32, 0x64, 0x8a, 0x79, 0x9c, 0x4c, 0x06, 0x14,
|
||||
0x58, 0xa3, 0x98, 0xde, 0x3b, 0xc3, 0x9b, 0x0f, 0xed, 0xe6, 0xc8, 0xa3, 0x4f, 0x20, 0x33, 0x2f,
|
||||
0xbe, 0xb3, 0x1a, 0x97, 0x25, 0x4b, 0x21, 0x4a, 0x63, 0x85, 0xba, 0x6b, 0x6c, 0xa6, 0x62, 0x8d,
|
||||
0x45, 0xb9, 0xa9, 0xfa, 0x24, 0x46, 0xa2, 0x69, 0x5a, 0x31, 0x4e, 0x2c, 0x36, 0xac, 0xe0, 0xe7,
|
||||
0x4e, 0xc5, 0xc9, 0x16, 0x08, 0x0c, 0xe4, 0x74, 0xe2, 0x77, 0x95, 0xc8, 0x72, 0x60, 0x41, 0x71,
|
||||
0x26, 0x70, 0xdf, 0x7d, 0xf7, 0x21, 0x22, 0xe8, 0x8c, 0x8f, 0xb4, 0xba, 0x26, 0x69, 0xb5, 0x27,
|
||||
0x36, 0xd5, 0x4c, 0x93, 0x40, 0x4a, 0x12, 0xc9, 0x9a, 0x12, 0x29, 0x01, 0x2b, 0x68, 0xad, 0x28,
|
||||
0x0e, 0x67, 0x71, 0x7d, 0x8b, 0x76, 0x84, 0xc6, 0xdc, 0x3c, 0xd9, 0x1e, 0x67, 0x29, 0x02, 0x51,
|
||||
0x4b, 0xb4, 0x2c, 0x02, 0x46, 0x54, 0x59, 0xa3, 0x33, 0x6f, 0x47, 0x35, 0xb3, 0x74, 0xb2, 0x69,
|
||||
0x40, 0x78, 0x14, 0xe2, 0x29, 0xc4, 0x2e, 0xd0, 0x95, 0x37, 0xe4, 0x3c, 0x4b, 0xb9, 0x11, 0x33,
|
||||
0x1b, 0x42, 0x35, 0x9d, 0x3e, 0x54, 0xd0, 0x3c, 0xb0, 0xc7, 0x63, 0xeb, 0x65, 0xff, 0x8d, 0x3f,
|
||||
0xf9, 0xe6, 0x9f, 0xa2, 0xbd, 0x2c, 0x6b, 0xce, 0xb9, 0x84, 0xbe, 0x81, 0x7c, 0x42, 0x1c, 0xe9,
|
||||
0xa8, 0xd3, 0x5b, 0xd9, 0xbe, 0x03, 0x80, 0x2c, 0x7d, 0x2a, 0x47, 0x98, 0x3f, 0x52, 0xa5, 0x7b,
|
||||
0xc8, 0xa7, 0xd0, 0xe7, 0xe2, 0x75, 0x79, 0x29, 0xb3, 0x4e, 0x0f, 0xd9, 0xb4, 0xe2, 0x4f, 0xe7,
|
||||
0xcf, 0x7c, 0x1c, 0xe9, 0x29, 0x37, 0x53, 0x1a, 0xde, 0x17, 0x2e, 0x8e, 0xe3, 0x17, 0x7d, 0xa4,
|
||||
0x89, 0x56, 0x35, 0x37, 0x88, 0x11, 0xd1, 0x38, 0x85, 0x2c, 0x03, 0xde, 0x14, 0xe5, 0xfa, 0x34,
|
||||
0x13, 0x01, 0xc4, 0x31, 0x04, 0x59, 0x18, 0xbb, 0x60, 0x88, 0x1f, 0x7f, 0x6b, 0x9c, 0x75, 0x1f,
|
||||
0xb9, 0x0b, 0xaf, 0x6f, 0x03, 0xc5, 0x91, 0xb3, 0xd8, 0x96, 0x7f, 0x91, 0xe2, 0xf0, 0x00, 0x56,
|
||||
0xc2, 0xa5, 0xf5, 0x7a, 0x53, 0x1b, 0x9d, 0x0d, 0x0a, 0xda, 0xc0, 0x94, 0x08, 0xb5, 0xb9, 0x00,
|
||||
0xbf, 0xe0, 0x24, 0xa6, 0xeb, 0x24, 0xb4, 0x6a, 0x09, 0xd8, 0x4e, 0x2b, 0x6d, 0x6b, 0x64, 0xaa,
|
||||
0x5a, 0xb3, 0xe3, 0xfa, 0x8c, 0xb1, 0x17, 0xa6, 0xc3, 0x9a, 0x4c, 0xb4, 0x66, 0x34, 0x4f, 0x2d,
|
||||
0x1d, 0x36, 0x88, 0x88, 0xa2, 0x2c, 0xeb, 0xbb, 0x67, 0x58, 0x19, 0xbf, 0xc4, 0xc2, 0xf4, 0x24,
|
||||
0x93, 0xb3, 0xd3, 0xec, 0x9b, 0x8d, 0xa8, 0x14, 0x0b, 0x6c, 0xdd, 0xa6, 0xc9, 0x1e, 0xb1, 0x6c,
|
||||
0x39, 0xf7, 0x26, 0xfa, 0x2a, 0xa3, 0x7c, 0xb8, 0xf7, 0x27, 0x88, 0xe3, 0x22, 0x4d, 0x9e, 0xd5,
|
||||
0xe4, 0x5e, 0x36, 0x46, 0x59, 0x83, 0xb2, 0x29, 0x53, 0xee, 0x04, 0x63, 0x0d, 0x41, 0x25, 0xa0,
|
||||
0x3a, 0x55, 0xa7, 0x6b, 0x28, 0x93, 0x36, 0x33, 0x3a, 0xb5, 0x65, 0x9b, 0x36, 0x94, 0x6a, 0x44,
|
||||
0x5a, 0x66, 0x25, 0x22, 0xc7, 0x8e, 0x1f, 0x57, 0x6f, 0x39, 0x9f, 0x1c, 0x2b, 0x69, 0x6b, 0x38,
|
||||
0xb7, 0x7b, 0x38, 0x73, 0x16, 0xa2, 0xdb, 0x6d, 0x4d, 0xad, 0x31, 0xa1, 0xa1, 0x3e, 0x5d, 0x27,
|
||||
0x8a, 0x72, 0x0c, 0xac, 0x58, 0xc3, 0x5a, 0xbd, 0x97, 0xc1, 0xa3, 0x0f, 0xe0, 0x4c, 0xbe, 0x40,
|
||||
0x50, 0x99, 0x60, 0xb6, 0x6a, 0xe9, 0x1a, 0x1d, 0x24, 0xbf, 0x26, 0x4b, 0xed, 0xd8, 0xd3, 0x9c,
|
||||
0x2b, 0xb7, 0xf3, 0x89, 0xff, 0xec, 0x63, 0x95, 0xea, 0x28, 0xb2, 0x4c, 0xda, 0x59, 0x31, 0xed,
|
||||
0x96, 0x50, 0xab, 0x49, 0x17, 0x23, 0x51, 0x9d, 0x60, 0xbe, 0x4e, 0x65, 0xaa, 0x46, 0xff, 0x68,
|
||||
0x1e, 0xc7, 0x11, 0xc4, 0x9a, 0x25, 0xcd, 0x3c, 0xac, 0x05, 0x2b, 0xa8, 0x40, 0x20, 0x48, 0xca,
|
||||
0x1e, 0x48, 0x2c, 0xa3, 0x11, 0xe8, 0xc7, 0x36, 0xdc, 0x59, 0xfe, 0xae, 0x5b, 0x9e, 0x10, 0xf1,
|
||||
0xbb, 0xd5, 0x0f, 0xa3, 0x5a, 0x7c, 0xa5, 0x9b, 0xd5, 0x09, 0x95, 0x68, 0xd6, 0x12, 0x56, 0xf0,
|
||||
0xf3, 0x21, 0xbe, 0x3f, 0x89, 0xcc, 0x1e, 0x46, 0x2a, 0x01, 0x03, 0x51, 0xcc, 0xa0, 0xa7, 0x31,
|
||||
0x95, 0x7b, 0x98, 0x9e, 0x18, 0xe1, 0x70, 0xe9, 0x6a, 0x82, 0xc6, 0x0a, 0x4e, 0x73, 0x7f, 0xc4,
|
||||
0x2f, 0xff, 0xa7, 0x59, 0xac, 0xdb, 0x9f, 0x16, 0x53, 0xd2, 0xd1, 0x98, 0x6b, 0x6a, 0xa1, 0xdd,
|
||||
0xd7, 0x52, 0xa6, 0x46, 0xb4, 0x38, 0x4f, 0xa3, 0x96, 0x25, 0x0a, 0x72, 0xf4, 0xae, 0xf0, 0x71,
|
||||
0xdc, 0x08, 0x31, 0x1d, 0x16, 0xd1, 0xaa, 0x6f, 0x04, 0x8c, 0x4d, 0x8a, 0x2a, 0x63, 0x9b, 0x14,
|
||||
0x1e, 0x63, 0x55, 0x50, 0x6b, 0xb0, 0x1b, 0x94, 0xb8, 0x47, 0x5e, 0x1d, 0x90, 0xd3, 0x2e, 0xaa,
|
||||
0x3e, 0x54, 0x9d, 0x0a, 0x83, 0xde, 0x51, 0xd7, 0x4f, 0x9c, 0x53, 0x81, 0xb5, 0x38, 0x9e, 0xc5,
|
||||
0x09, 0xe7, 0xb1, 0x13, 0x0b, 0xb0, 0x00, 0x36, 0x48, 0x42, 0xa1, 0xf8, 0x02, 0x7d, 0x9a, 0xc1,
|
||||
0xae, 0xc3, 0x2c, 0x2b, 0x3d, 0xc7, 0xba, 0x89, 0x47, 0x29, 0x8c, 0x81, 0xf5, 0x73, 0x48, 0x1c,
|
||||
0xa0, 0xb4, 0x4a, 0xc9, 0x66, 0x02, 0x46, 0x68, 0x97, 0xb3, 0xca, 0x54, 0x30, 0x95, 0x59, 0x1a,
|
||||
0x0b, 0x31, 0xb1, 0x1e, 0x41, 0xe7, 0x87, 0x28, 0x16, 0xe7, 0x70, 0x64, 0x3e, 0x05, 0x61, 0xdb,
|
||||
0x1e, 0x9d, 0x96, 0xc7, 0x88, 0x45, 0xc5, 0xa9, 0x26, 0x4c, 0x3b, 0xb1, 0x5a, 0x2b, 0xfb, 0x67,
|
||||
0x66, 0xbd, 0x47, 0x01, 0xdc, 0x8f, 0xfc, 0x78, 0x2f, 0x07, 0x3f, 0x50, 0x9c, 0xae, 0x4e, 0x67,
|
||||
0x7e, 0xd0, 0xb3, 0xc2, 0x5c, 0x93, 0x78, 0x5a, 0x47, 0x93, 0xd9, 0x2b, 0x40, 0xc1, 0x49, 0xa8,
|
||||
0x79, 0x2c, 0x28, 0xcf, 0x85, 0x42, 0x06, 0x0a, 0x3e, 0xd2, 0xb5, 0x06, 0x72, 0xc3, 0x28, 0x7f,
|
||||
0x9a, 0x6a, 0xbd, 0x8c, 0xaa, 0x96, 0xc9, 0x14, 0x32, 0x78, 0x05, 0xbf, 0x1d, 0x5a, 0x34, 0x28,
|
||||
0x53, 0x87, 0x70, 0x81, 0xb8, 0x3c, 0x4f, 0x6d, 0xc1, 0x26, 0xaf, 0x20, 0x8a, 0xa3, 0x64, 0xf3,
|
||||
0x19, 0xdc, 0xe8, 0x28, 0x04, 0x8b, 0xe0, 0x06, 0xed, 0x28, 0xd7, 0xa1, 0xcd, 0x96, 0x6f, 0x44,
|
||||
0x0a, 0x62, 0x69, 0x2d, 0x1b, 0xc7, 0xd0, 0x68, 0xa8, 0xdd, 0x63, 0x77, 0xcf, 0x3d, 0x05, 0x0a,
|
||||
0x17, 0xe0, 0xc0, 0x53, 0x9e, 0x19, 0xdd, 0xa6, 0xbe, 0x59, 0x9d, 0x0e, 0xaf, 0x29, 0x0c, 0xa6,
|
||||
0xdc, 0x48, 0x00, 0xe5, 0x42, 0xa6, 0x0b, 0xbc, 0x2e, 0x28, 0x0a, 0x0a, 0x05, 0xda, 0x05, 0x2f,
|
||||
0x03, 0x8e, 0x87, 0xf2, 0x8b, 0x94, 0x0f, 0xee, 0xa7, 0x36, 0x35, 0x89, 0x58, 0x8b, 0x97, 0xf7,
|
||||
0x71, 0x32, 0xe0, 0xc6, 0x0a, 0x31, 0x01, 0x71, 0xb5, 0x4a, 0xb0, 0xb0, 0x88, 0x09, 0x2c, 0xb8,
|
||||
0x3d, 0x38, 0xb9, 0x33, 0xf0, 0x96, 0xf5, 0xa3, 0x5c, 0x0f, 0x4f, 0x37, 0x50, 0x8d, 0x23, 0x48,
|
||||
0x5c, 0x41, 0x7b, 0x89, 0xe1, 0x4b, 0xb3, 0x9f, 0x2c, 0x69, 0xe3, 0xa1, 0xa9, 0x8d, 0x28, 0xe9,
|
||||
0x38, 0x11, 0xb7, 0xc3, 0x95, 0xb1, 0xea, 0xf8, 0xf4, 0x9c, 0x73, 0x3f, 0x28, 0x9e, 0xff, 0x5d,
|
||||
0x70, 0xdf, 0xf8, 0x0c, 0xac, 0xff, 0xe6, 0x8c, 0xec, 0x1d, 0x5b, 0xb6, 0xbb, 0x7c, 0x34, 0xbe,
|
||||
0xaf, 0x50, 0x72, 0x3f, 0x96, 0xe8, 0x2e, 0x0d, 0x73, 0xda, 0x49, 0x98, 0xac, 0xe7, 0x26, 0x86,
|
||||
0xa9, 0x9c, 0x94, 0x6b, 0x18, 0xd4, 0xe2, 0xeb, 0xd4, 0x26, 0x6b, 0xf4, 0xac, 0x1c, 0x48, 0x6a,
|
||||
0x0d, 0x2b, 0x44, 0x95, 0x06, 0xc1, 0x6c, 0x05, 0xc1, 0x26, 0x85, 0x4f, 0xbe, 0x17, 0xaf, 0xcb,
|
||||
0x07, 0xeb, 0xa2, 0x1c, 0xc1, 0x55, 0x0b, 0x10, 0xd4, 0x92, 0x5e, 0x99, 0x13, 0xa1, 0x33, 0x51,
|
||||
0x1a, 0xe6, 0x53, 0x1f, 0xb2, 0xcd, 0xca, 0x32, 0x15, 0x20, 0x16, 0x08, 0x15, 0x84, 0xd2, 0x2a,
|
||||
0x6f, 0x8c, 0x81, 0x6a, 0x4d, 0x5e, 0xdc, 0x7e, 0xcf, 0x39, 0x7f, 0x0b, 0x0f, 0x53, 0x7a, 0xdf,
|
||||
0xef, 0xa1, 0xe3, 0xd2, 0x46, 0x00, 0xfe, 0xfa, 0x8b, 0x23, 0x55, 0x13, 0x39, 0x77, 0x94, 0xc7,
|
||||
0x43, 0x51, 0xca, 0x24, 0x91, 0x43, 0x4c, 0x5a, 0x8b, 0x27, 0xe1, 0x33, 0x29, 0xb8, 0xa2, 0xf4,
|
||||
0xf7, 0x08, 0xab, 0x5c, 0x7a, 0x57, 0x14, 0xc9, 0xe4, 0x34, 0x99, 0xbc, 0xc6, 0x2f, 0x38, 0xe4,
|
||||
0x7a, 0x5d, 0xf2, 0x25, 0x9f, 0xc2, 0x60, 0x8e, 0x7c, 0x29, 0x87, 0x5f, 0xf0, 0xf0, 0x5c, 0xc1,
|
||||
0xf3, 0x02, 0x5c, 0x35, 0x8f, 0x8a, 0x27, 0x51, 0x7a, 0x1e, 0x9d, 0x09, 0x50, 0x6e, 0xd8, 0x06,
|
||||
0x61, 0x6d, 0x1b, 0x44, 0xd3, 0x37, 0x8c, 0x41, 0x85, 0xef, 0xd4, 0x46, 0x1c, 0xcb, 0xc4, 0xe4,
|
||||
0x94, 0xfb, 0xad, 0xef, 0x1d, 0x7f, 0x38, 0xde, 0xf7, 0xfb, 0xb0, 0xea, 0xb7, 0xbe, 0x83, 0xde,
|
||||
0x78, 0xcb, 0x6e, 0x0e, 0xff, 0x0f, 0xf8, 0x32, 0xcf, 0x33, 0x7b, 0x48, 0x76, 0x57, 0xa7, 0xed,
|
||||
0x2d, 0x61, 0x25, 0x4a, 0x5e, 0x0b, 0x48, 0xda, 0x50, 0xb0, 0x71, 0xaa, 0x6a, 0xb3, 0xa4, 0xbd,
|
||||
0x03, 0xe0, 0xe5, 0x55, 0x0b, 0x18, 0x12, 0xe1, 0xb8, 0x09, 0x81, 0x75, 0x3d, 0xd0, 0xda, 0xa2,
|
||||
0x74, 0x84, 0xce, 0x04, 0xe9, 0x08, 0x51, 0x5e, 0x84, 0x72, 0x62, 0x50, 0x69, 0xeb, 0xa8, 0xf3,
|
||||
0xb0, 0x3a, 0x41, 0xd8, 0x14, 0x44, 0xa0, 0x20, 0xb0, 0x2d, 0xdf, 0x30, 0x86, 0x78, 0x66, 0xce,
|
||||
0xfd, 0xf1, 0xa6, 0x1d, 0xe5, 0x1f, 0x01, 0x34, 0x4a, 0x1b, 0xda, 0x2d, 0xd3, 0x85, 0xb5, 0xbf,
|
||||
0x04, 0xc0, 0xd6, 0x3f, 0x3e, 0x5e, 0xaf, 0xcd, 0x98, 0x3f, 0x9f, 0x3f, 0x12, 0x3f, 0x91, 0x24,
|
||||
0xb3, 0xb8, 0x0d, 0xa6, 0xd9, 0xbb, 0x6a, 0x6a, 0x47, 0xe2, 0x0e, 0x60, 0x51, 0x5b, 0x63, 0x36,
|
||||
0x4c, 0xb5, 0x16, 0xb6, 0xe7, 0x49, 0x94, 0x24, 0x47, 0x96, 0x1e, 0x8c, 0xb4, 0xd6, 0x32, 0x4b,
|
||||
0x5a, 0x4b, 0x88, 0x4d, 0x4c, 0xa9, 0xa1, 0x20, 0x68, 0x9b, 0x94, 0xb5, 0x50, 0x5e, 0xe4, 0xb5,
|
||||
0xd7, 0x0f, 0x9e, 0x72, 0x2d, 0xc0, 0xae, 0xdf, 0x83, 0x4d, 0xb7, 0xbe, 0xde, 0x06, 0xb2, 0xf1,
|
||||
0xc6, 0x47, 0xd9, 0x7d, 0x73, 0xd2, 0x43, 0x3d, 0xe3, 0x96, 0xb9, 0xb7, 0x83, 0xb2, 0xbd, 0x6e,
|
||||
0xfe, 0xed, 0x70, 0x4e, 0xa9, 0x64, 0x23, 0x31, 0xa6, 0xad, 0x11, 0x1b, 0x2d, 0x05, 0x61, 0x3b,
|
||||
0xcc, 0xae, 0x25, 0x64, 0xe7, 0xf7, 0x71, 0x87, 0x69, 0x46, 0x2d, 0x8d, 0x4a, 0x6b, 0x4e, 0xc7,
|
||||
0xb0, 0x36, 0x99, 0x17, 0x5a, 0x54, 0xa0, 0xa0, 0x21, 0x09, 0xa0, 0x34, 0xad, 0xd4, 0xeb, 0x32,
|
||||
0xf9, 0xd6, 0x78, 0xee, 0x77, 0x2e, 0xfd, 0xb3, 0x3d, 0x0b, 0x00, 0xa5, 0x8f, 0xde, 0xc6, 0x3b,
|
||||
0x5e, 0x2b, 0x6c, 0xbc, 0x63, 0x9a, 0x97, 0x6f, 0x5e, 0x05, 0xc0, 0xaa, 0x6b, 0x7f, 0xfd, 0x99,
|
||||
0xea, 0xb4, 0x7c, 0xaa, 0x32, 0x11, 0xc6, 0x09, 0x1d, 0x6f, 0x6e, 0xfc, 0xef, 0x18, 0x9d, 0xfe,
|
||||
0xf4, 0x8e, 0xef, 0x92, 0x43, 0x69, 0x1f, 0x4c, 0xdc, 0x36, 0xa9, 0xe6, 0x41, 0x45, 0x92, 0x80,
|
||||
0xa8, 0xb7, 0x41, 0x00, 0x04, 0x81, 0xcc, 0x1f, 0x3a, 0x9a, 0xfb, 0x83, 0xf3, 0xbe, 0x31, 0xf3,
|
||||
0xfc, 0xee, 0x1b, 0xfa, 0x00, 0x38, 0xf5, 0xa3, 0x5f, 0x6c, 0x01, 0x71, 0x3a, 0x69, 0xe4, 0x9f,
|
||||
0x3e, 0x3e, 0xcf, 0xce, 0xeb, 0x96, 0xf1, 0x9d, 0x27, 0x1f, 0x61, 0xe0, 0xa7, 0xa5, 0xbd, 0x1b,
|
||||
0x2e, 0x0e, 0xa7, 0x9d, 0x8c, 0xf9, 0x90, 0x97, 0x4d, 0xe7, 0x75, 0x30, 0x57, 0xd5, 0x34, 0x01,
|
||||
0x75, 0x32, 0x32, 0xd8, 0xd9, 0x69, 0x34, 0xed, 0x17, 0x3e, 0x9d, 0x1d, 0x48, 0x89, 0x97, 0x6a,
|
||||
0x42, 0x6c, 0x02, 0xa2, 0xde, 0x01, 0x22, 0x4d, 0x23, 0x41, 0x28, 0x73, 0x87, 0x8e, 0xe4, 0x6e,
|
||||
0xd8, 0xb4, 0x63, 0xf6, 0xaf, 0xf6, 0xfc, 0x61, 0x2f, 0x67, 0x6e, 0x7f, 0xe7, 0x0b, 0x51, 0xe7,
|
||||
0xc4, 0x0f, 0xbe, 0xf3, 0x64, 0x95, 0x97, 0x6f, 0x2c, 0x71, 0xe5, 0x13, 0x13, 0x36, 0xff, 0x4f,
|
||||
0x63, 0x2f, 0x6d, 0xbc, 0x60, 0x7a, 0xde, 0xf5, 0xcc, 0x45, 0x9e, 0x8f, 0x9f, 0x74, 0xc3, 0xe5,
|
||||
0x24, 0x54, 0xdc, 0x2e, 0xb5, 0xef, 0xce, 0x46, 0xf4, 0x12, 0xa6, 0x7b, 0x42, 0xa3, 0xbb, 0x09,
|
||||
0xc0, 0x58, 0x08, 0x40, 0x35, 0x7d, 0x22, 0x90, 0x16, 0xc5, 0x6a, 0x34, 0xd4, 0xd1, 0x83, 0xe3,
|
||||
0xd9, 0xff, 0xb9, 0xf1, 0xae, 0xd9, 0xbf, 0xd8, 0xf7, 0x85, 0x5e, 0xb5, 0xee, 0xf6, 0xf9, 0x77,
|
||||
0xf7, 0x7a, 0x7a, 0xf7, 0x17, 0x96, 0xb3, 0xf1, 0xab, 0xc9, 0xdb, 0xd3, 0xb7, 0xee, 0xec, 0xfd,
|
||||
0xef, 0x7d, 0x23, 0xdc, 0x92, 0xeb, 0x57, 0x2b, 0xb5, 0xab, 0xd3, 0x74, 0xad, 0xda, 0x04, 0xf3,
|
||||
0xc4, 0x06, 0x41, 0x93, 0x72, 0x73, 0x32, 0xc0, 0xd2, 0xe4, 0x17, 0x69, 0x88, 0x15, 0x54, 0x90,
|
||||
0x46, 0xa7, 0x50, 0x92, 0xde, 0xae, 0x4d, 0x32, 0x77, 0xb5, 0xaa, 0x5e, 0x3c, 0x38, 0x9e, 0xfd,
|
||||
0xec, 0x39, 0xff, 0x67, 0xe6, 0xf1, 0xbd, 0x5f, 0xe8, 0x65, 0xdd, 0x57, 0xe7, 0x7f, 0xce, 0x0b,
|
||||
0x03, 0xd7, 0x0f, 0xb0, 0xf9, 0xae, 0xe4, 0xad, 0xd0, 0x6b, 0x5f, 0xec, 0x79, 0xff, 0xe0, 0x69,
|
||||
0x72, 0x73, 0xbe, 0x5f, 0x5d, 0xe2, 0xe5, 0x94, 0xa7, 0x1d, 0xdd, 0x6e, 0x21, 0x35, 0x8b, 0xe7,
|
||||
0x13, 0x8b, 0x69, 0x78, 0x27, 0x1d, 0xb7, 0x92, 0x0e, 0x20, 0x14, 0x54, 0xa8, 0x92, 0x3c, 0x11,
|
||||
0x25, 0x77, 0x55, 0x4c, 0x0c, 0x51, 0xa4, 0xa6, 0xe6, 0xcb, 0x3c, 0xf0, 0xda, 0x81, 0xbe, 0x9b,
|
||||
0x3e, 0x74, 0xcf, 0x91, 0x89, 0xd7, 0x6f, 0xea, 0x63, 0xc3, 0xf6, 0xb9, 0xff, 0xe0, 0x15, 0x8e,
|
||||
0xeb, 0x86, 0xd9, 0x9c, 0x5e, 0xa4, 0x79, 0xe4, 0xaa, 0xfe, 0xe1, 0xb5, 0x17, 0xc6, 0xbf, 0xdb,
|
||||
0x55, 0x52, 0x57, 0x78, 0x79, 0x39, 0x3b, 0x93, 0x07, 0xa5, 0x75, 0xfb, 0xf0, 0x4f, 0xd6, 0xe6,
|
||||
0x68, 0x6a, 0x47, 0x52, 0x00, 0x46, 0x52, 0x02, 0x98, 0x68, 0x40, 0x45, 0x80, 0x11, 0x6c, 0x24,
|
||||
0x04, 0x91, 0x0e, 0xc3, 0x90, 0xc7, 0xa6, 0x67, 0xf5, 0xf7, 0xd6, 0xdd, 0xbe, 0xf8, 0x97, 0xc9,
|
||||
0xfe, 0x83, 0x6c, 0xde, 0x31, 0xf5, 0x8b, 0xb9, 0x54, 0xf3, 0xc6, 0x9d, 0xef, 0x43, 0x55, 0x1e,
|
||||
0xe5, 0x8c, 0x5b, 0x13, 0x69, 0x77, 0xdf, 0xd4, 0x77, 0xce, 0xc0, 0xca, 0xf8, 0x57, 0xb2, 0xdd,
|
||||
0xea, 0x43, 0x8e, 0x6b, 0x2f, 0xf4, 0x0b, 0xe0, 0x64, 0xd4, 0xd2, 0x66, 0x87, 0x95, 0x56, 0xa1,
|
||||
0x89, 0x11, 0xc4, 0x2a, 0x54, 0x2c, 0x10, 0x2b, 0x94, 0x91, 0x94, 0xc9, 0x0a, 0x51, 0x43, 0x08,
|
||||
0x23, 0xbd, 0x18, 0xc7, 0x3c, 0x5a, 0xa9, 0xe9, 0x7f, 0x3a, 0x74, 0x34, 0x7f, 0xef, 0x7b, 0xbf,
|
||||
0x33, 0x79, 0xec, 0xdd, 0x5e, 0xbd, 0x7a, 0x57, 0xd7, 0x9c, 0x76, 0x5d, 0xb7, 0x9c, 0xcd, 0x3b,
|
||||
0xda, 0xb7, 0x0e, 0x5e, 0xbe, 0xbe, 0xef, 0xac, 0x81, 0xd1, 0x68, 0x8b, 0x9b, 0xd1, 0xe7, 0xbb,
|
||||
0xae, 0xdd, 0xe6, 0x38, 0x6c, 0xd0, 0xda, 0x16, 0xbd, 0x0c, 0xb8, 0xae, 0x4a, 0x62, 0xbb, 0x55,
|
||||
0xad, 0xca, 0x4e, 0x62, 0x88, 0x03, 0x21, 0x0a, 0x04, 0x13, 0xeb, 0xb2, 0x31, 0x6a, 0xa7, 0xb1,
|
||||
0x3c, 0xd5, 0x08, 0xd4, 0xb3, 0xe3, 0x13, 0x99, 0x67, 0x2e, 0xf8, 0xf6, 0xcc, 0xf8, 0xc9, 0xee,
|
||||
0xc1, 0xfc, 0xc2, 0x81, 0xb4, 0x6e, 0x47, 0x5c, 0x3b, 0xc4, 0xd8, 0xd7, 0x8f, 0xb7, 0xfe, 0xfe,
|
||||
0xe1, 0x65, 0x23, 0xc5, 0xd3, 0xb7, 0x2c, 0x9c, 0x5a, 0xec, 0xb7, 0x43, 0x4e, 0xd6, 0x5d, 0xae,
|
||||
0x2c, 0x23, 0x62, 0xed, 0x90, 0x42, 0x7a, 0x94, 0x98, 0x0c, 0xa2, 0xb5, 0x18, 0x09, 0xb0, 0x7a,
|
||||
0x11, 0xd4, 0x04, 0xc2, 0xdb, 0x51, 0x64, 0x8e, 0xcd, 0x96, 0x9d, 0x89, 0xe7, 0xf7, 0xac, 0x3c,
|
||||
0xf4, 0xdb, 0xf7, 0xbf, 0x12, 0xb4, 0xd6, 0xfe, 0x7c, 0x3f, 0x63, 0x7f, 0x34, 0xfb, 0xae, 0x65,
|
||||
0xfa, 0x7f, 0x4c, 0xe8, 0x21, 0x04, 0x29, 0xb0, 0x36, 0x16, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
])
|
||||
'''
|
||||
const lv_image_dsc_t image_wink_png = {
|
||||
.header.w = 50,
|
||||
.header.h = 50,
|
||||
.data_size = 5158,
|
||||
.header.cf = LV_IMAGE_CF_RAW_ALPHA,
|
||||
.data = image_wink_png_map,
|
||||
};
|
||||
|
||||
'''
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
from img_wink_png import img_wink_png_map
|
||||
|
||||
image_wink_png = lv.image_dsc_t(
|
||||
{
|
||||
"header": {"w": 50, "h": 50, "cf": lv.COLOR_FORMAT.RAW_ALPHA},
|
||||
"data_size": 5158,
|
||||
"data": img_wink_png_map,
|
||||
}
|
||||
)
|
||||
image1 = lv.image(lv.screen_active())
|
||||
image1.set_src(image_wink_png)
|
||||
image1.align(lv.ALIGN.RIGHT_MID, -250, 0)
|
||||
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('wink.png','rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find wink.png")
|
||||
sys.exit()
|
||||
|
||||
wink_argb = lv.image_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
image2 = lv.image(lv.screen_active())
|
||||
image2.set_src(wink_argb)
|
||||
image2.align(lv.ALIGN.RIGHT_MID, -150, 0)
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
|
||||
bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
|
||||
fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
|
||||
|
||||
qr = lv.qrcode(lv.screen_active())
|
||||
qr.set_size(150)
|
||||
qr.set_dark_color(fg_color)
|
||||
qr.set_light_color(bg_color)
|
||||
|
||||
# Set data
|
||||
data = "https://lvgl.io"
|
||||
qr.update(data,len(data))
|
||||
qr.center()
|
||||
|
||||
# Add a border with bg_color
|
||||
qr.set_style_border_color(bg_color, 0)
|
||||
qr.set_style_border_width(5, 0)
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
#
|
||||
# Load a lottie animation from flash
|
||||
#
|
||||
from lv_example_rlottie_approve import lv_example_rlottie_approve
|
||||
|
||||
lottie = lv.rlottie_create_from_raw(lv.screen_active(), 100, 100, lv_example_rlottie_approve)
|
||||
lottie.center()
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
|
||||
lottie = lv.rlottie_create_from_file(lv.screen_active(), 100, 100,"lv_example_rlottie_approve.json")
|
||||
lottie.center()
|
||||
@@ -1,24 +0,0 @@
|
||||
'''
|
||||
The original JSON string is converted to hex array because C99 requires support only 4096 character long strings.
|
||||
|
||||
lvgl/scripts/tohex.py is sued to convert a json file to a hex array. E.g.
|
||||
./filetohex.py my_lottie.json > output.txt
|
||||
|
||||
If your compiler support very long strings you can do
|
||||
const char * my_lottie = "JSON data here";
|
||||
But be sure to replace all " characters with \".
|
||||
|
||||
'''
|
||||
|
||||
lv_example_rlottie_approve = bytes([
|
||||
0x7b, 0x22, 0x76, 0x22, 0x3a, 0x22, 0x34, 0x2e, 0x38, 0x2e, 0x30, 0x22, 0x2c, 0x22, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x67, 0x22, 0x3a, 0x22, 0x4c, 0x6f, 0x74, 0x74, 0x69, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x41, 0x45, 0x20, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x22, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x22, 0x64, 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x22, 0x74, 0x63, 0x22, 0x3a, 0x22, 0x22, 0x7d, 0x2c, 0x22, 0x66, 0x72, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x69, 0x70, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6f, 0x70, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x77, 0x22, 0x3a, 0x37, 0x32, 0x30, 0x2c, 0x22, 0x68, 0x22, 0x3a, 0x37, 0x32, 0x30, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x2c, 0x22, 0x64, 0x64, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x2c, 0x22, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x64, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x34, 0x22, 0x2c, 0x22, 0x73, 0x72, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x31, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x30, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x33, 0x33, 0x36, 0x2c, 0x33, 0x39, 0x36, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x61, 0x6f, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x67, 0x72, 0x22, 0x2c, 0x22, 0x69, 0x74, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x68, 0x22, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x5b, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x5d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x5b, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x5d, 0x2c, 0x22, 0x76, 0x22, 0x3a, 0x5b, 0x5b, 0x2d, 0x31, 0x32, 0x33, 0x2c, 0x2d, 0x36, 0x36, 0x5d, 0x2c, 0x5b, 0x36, 0x2c, 0x34, 0x35, 0x5d, 0x2c, 0x5b, 0x33, 0x32, 0x31, 0x2c, 0x2d, 0x32, 0x36, 0x34, 0x5d, 0x5d, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x50, 0x61, 0x74, 0x68, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x74, 0x22, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x39, 0x38, 0x30, 0x33, 0x39, 0x32, 0x31, 0x35, 0x36, 0x38, 0x36, 0x2c, 0x30, 0x2e, 0x36, 0x38, 0x36, 0x32, 0x37, 0x34, 0x35, 0x30, 0x39, 0x38, 0x30, 0x34, 0x2c, 0x30, 0x2e, 0x33, 0x31, 0x33, 0x37, 0x32, 0x35,
|
||||
0x34, 0x39, 0x30, 0x31, 0x39, 0x36, 0x2c, 0x31, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x77, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x35, 0x32, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6c, 0x63, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6c, 0x6a, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x72, 0x22, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x37, 0x7d, 0x2c, 0x22, 0x73, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x73, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x7d, 0x5d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x70, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x63, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x6d, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x33, 0x36, 0x38, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x31, 0x5d, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x35, 0x31, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x22, 0x3a, 0x34, 0x35, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x39, 0x32, 0x5d, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6d, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x69, 0x6d, 0x20, 0x50, 0x61, 0x74, 0x68, 0x73, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65,
|
||||
0x63, 0x74, 0x6f, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x54, 0x72, 0x69, 0x6d, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x70, 0x22, 0x3a, 0x31, 0x30, 0x2c, 0x22, 0x6f, 0x70, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x73, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x7b, 0x22, 0x64, 0x64, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x33, 0x22, 0x2c, 0x22, 0x73, 0x72, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x31, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x30, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x33, 0x33, 0x36, 0x2c, 0x33, 0x39, 0x36, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x61, 0x6f, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x67, 0x72, 0x22, 0x2c, 0x22, 0x69, 0x74, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x68, 0x22, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x5b, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x5d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x5b, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x5d, 0x2c, 0x22, 0x76, 0x22, 0x3a, 0x5b, 0x5b, 0x2d, 0x31, 0x32, 0x33, 0x2c, 0x2d, 0x36, 0x36, 0x5d, 0x2c, 0x5b, 0x36, 0x2c, 0x34, 0x35, 0x5d, 0x2c, 0x5b, 0x33, 0x32, 0x31, 0x2c, 0x2d, 0x32, 0x36, 0x34, 0x5d, 0x5d, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x50, 0x61, 0x74, 0x68, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x74, 0x22, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x31, 0x39, 0x36, 0x30, 0x37, 0x38, 0x34, 0x33, 0x31, 0x33, 0x37, 0x2c, 0x30, 0x2e, 0x35, 0x35, 0x36, 0x38, 0x36, 0x32, 0x37, 0x34, 0x35, 0x30, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x32, 0x33, 0x35, 0x32, 0x39, 0x34, 0x31, 0x31, 0x37, 0x36, 0x34, 0x37, 0x2c, 0x31, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x77, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x34, 0x38, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6c, 0x63, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6c, 0x6a, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22,
|
||||
0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x72, 0x22, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x37, 0x7d, 0x2c, 0x22, 0x73, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x73, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x7d, 0x5d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x70, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x63, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x6d, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x33, 0x36, 0x38, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x31, 0x5d, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x35, 0x31, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x22, 0x3a, 0x34, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x5d, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6d, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x69, 0x6d, 0x20, 0x50, 0x61, 0x74, 0x68, 0x73, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x54, 0x72, 0x69, 0x6d, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x70, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6f, 0x70, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x73, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x7b, 0x22, 0x64, 0x64, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65,
|
||||
0x20, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x32, 0x22, 0x2c, 0x22, 0x73, 0x72, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x31, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x38, 0x37, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x30, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x33, 0x33, 0x36, 0x2c, 0x33, 0x36, 0x36, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x61, 0x6f, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x67, 0x72, 0x22, 0x2c, 0x22, 0x69, 0x74, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x35, 0x32, 0x30, 0x2c, 0x35, 0x32, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x20, 0x50, 0x61, 0x74, 0x68, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x20, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x74, 0x22, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x39, 0x38, 0x30, 0x33, 0x39, 0x32, 0x31, 0x35, 0x36, 0x38, 0x36, 0x2c, 0x30, 0x2e, 0x36, 0x38, 0x36, 0x32, 0x37, 0x34, 0x35, 0x30, 0x39, 0x38, 0x30, 0x34, 0x2c, 0x30, 0x2e, 0x33, 0x31, 0x33, 0x37, 0x32, 0x35, 0x34, 0x39, 0x30, 0x31, 0x39, 0x36, 0x2c, 0x31, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x77, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x35, 0x32, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6c, 0x63, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6c, 0x6a, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6c, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x72, 0x22, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c,
|
||||
0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x37, 0x7d, 0x2c, 0x22, 0x73, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x73, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x7d, 0x5d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x70, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x63, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x6d, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x33, 0x33, 0x37, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x31, 0x5d, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x33, 0x33, 0x34, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x22, 0x3a, 0x34, 0x35, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x38, 0x30, 0x5d, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6d, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x69, 0x6d, 0x20, 0x50, 0x61, 0x74, 0x68, 0x73, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x54, 0x72, 0x69, 0x6d, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x70, 0x22, 0x3a, 0x31, 0x30, 0x2c, 0x22, 0x6f, 0x70, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x73, 0x74, 0x22, 0x3a, 0x31, 0x30, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x7d, 0x2c, 0x7b, 0x22, 0x64, 0x64, 0x64, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x6e, 0x64, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x73, 0x72, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x31, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x38, 0x37, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x30, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x33, 0x33, 0x36, 0x2c, 0x33, 0x36, 0x36, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d,
|
||||
0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x7d, 0x2c, 0x22, 0x61, 0x6f, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x67, 0x72, 0x22, 0x2c, 0x22, 0x69, 0x74, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x65, 0x6c, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x35, 0x32, 0x30, 0x2c, 0x35, 0x32, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x20, 0x50, 0x61, 0x74, 0x68, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x53, 0x68, 0x61, 0x70, 0x65, 0x20, 0x2d, 0x20, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x73, 0x74, 0x22, 0x2c, 0x22, 0x63, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x31, 0x39, 0x36, 0x30, 0x37, 0x38, 0x34, 0x33, 0x31, 0x33, 0x37, 0x2c, 0x30, 0x2e, 0x35, 0x35, 0x36, 0x38, 0x36, 0x32, 0x37, 0x34, 0x35, 0x30, 0x39, 0x38, 0x2c, 0x30, 0x2e, 0x32, 0x33, 0x35, 0x32, 0x39, 0x34, 0x31, 0x31, 0x37, 0x36, 0x34, 0x37, 0x2c, 0x31, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x77, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x34, 0x38, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6c, 0x63, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6c, 0x6a, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6c, 0x22, 0x3a, 0x34, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x72, 0x22, 0x2c, 0x22, 0x70, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x30, 0x2c, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x30, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x36, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x31, 0x30, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x37, 0x7d, 0x2c, 0x22, 0x73, 0x6b, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x34, 0x7d, 0x2c, 0x22, 0x73, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x35, 0x7d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x7d, 0x5d, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x45,
|
||||
0x6c, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6e, 0x70, 0x22, 0x3a, 0x33, 0x2c, 0x22, 0x63, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x74, 0x6d, 0x22, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x31, 0x7d, 0x2c, 0x22, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x69, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x33, 0x36, 0x38, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x31, 0x5d, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x78, 0x22, 0x3a, 0x5b, 0x30, 0x2e, 0x32, 0x35, 0x31, 0x5d, 0x2c, 0x22, 0x79, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x22, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x30, 0x5d, 0x7d, 0x2c, 0x7b, 0x22, 0x74, 0x22, 0x3a, 0x34, 0x30, 0x2c, 0x22, 0x73, 0x22, 0x3a, 0x5b, 0x38, 0x34, 0x5d, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x7d, 0x2c, 0x22, 0x6f, 0x22, 0x3a, 0x7b, 0x22, 0x61, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x33, 0x7d, 0x2c, 0x22, 0x6d, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x69, 0x78, 0x22, 0x3a, 0x32, 0x2c, 0x22, 0x6e, 0x6d, 0x22, 0x3a, 0x22, 0x54, 0x72, 0x69, 0x6d, 0x20, 0x50, 0x61, 0x74, 0x68, 0x73, 0x20, 0x31, 0x22, 0x2c, 0x22, 0x6d, 0x6e, 0x22, 0x3a, 0x22, 0x41, 0x44, 0x42, 0x45, 0x20, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x54, 0x72, 0x69, 0x6d, 0x22, 0x2c, 0x22, 0x68, 0x64, 0x22, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x7d, 0x5d, 0x2c, 0x22, 0x69, 0x70, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x6f, 0x70, 0x22, 0x3a, 0x36, 0x30, 0x2c, 0x22, 0x73, 0x74, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x62, 0x6d, 0x22, 0x3a, 0x30, 0x7d, 0x5d, 0x2c, 0x22, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d,
|
||||
0x00
|
||||
])
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
from ubuntu_font import ubuntu_font
|
||||
#
|
||||
# Load a font with Tiny_TTF
|
||||
#
|
||||
#Create style with the new font
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
font = lv.font_t()
|
||||
lv.tiny_ttf_create_data(font, ubuntu_font, len(ubuntu_font), 30)
|
||||
style.set_text_font(font)
|
||||
style.set_text_align(lv.TEXT_ALIGN.CENTER)
|
||||
|
||||
# Create a label with the new style
|
||||
label = lv.label(lv.screen_active())
|
||||
label.add_style(style, 0)
|
||||
label.set_text("Hello world\nI'm a font created with Tiny TTF")
|
||||
label.center()
|
||||
@@ -1,28 +0,0 @@
|
||||
import fs_driver
|
||||
|
||||
# needed for dynamic font loading
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
# get the directory in which the script is running
|
||||
try:
|
||||
script_path = __file__[:__file__.rfind('/')] if __file__.find('/') >= 0 else '.'
|
||||
except NameError:
|
||||
script_path = ''
|
||||
|
||||
#
|
||||
# Load a font with Tiny_TTF from file
|
||||
#
|
||||
# Create style with the new font
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
font = lv.font_t()
|
||||
lv.tiny_ttf_create_file(font, "S:" + script_path + "/Ubuntu-Medium.ttf", 30)
|
||||
style.set_text_font(font)
|
||||
style.set_text_align(lv.TEXT_ALIGN.CENTER)
|
||||
|
||||
# Create a label with the new style
|
||||
label = lv.label(lv.screen_active())
|
||||
label.add_style(style, 0)
|
||||
label.set_text("Hello world\nI'm a font created with Tiny TTF")
|
||||
label.center()
|
||||
@@ -1 +0,0 @@
|
||||
pass
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +0,0 @@
|
||||
#!/opt/bin/lv_micropython -i
|
||||
import lvgl as lv
|
||||
import display_driver
|
||||
import fs_driver
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
wp = lv.image(lv.screen_active())
|
||||
# The File system is attached to letter 'S'
|
||||
|
||||
wp.set_src("S:img_lvgl_logo.jpg")
|
||||
wp.center()
|
||||
@@ -1,47 +0,0 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def file_explorer_event_handler(e) :
|
||||
|
||||
code = e.get_code()
|
||||
obj = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
# print("cur_path: " + str(cur_path), " sel_fn: " + str(sel_fn))
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
file_explorer = lv.file_explorer(lv.screen_active())
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.KIND)
|
||||
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def file_explorer_event_handler(e):
|
||||
code = e.get_code()
|
||||
obj = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
def button_event_handler(e,fe_quick_access_obj):
|
||||
|
||||
code = e.get_code()
|
||||
button = e.get_target_obj()
|
||||
# lv_obj_t * file_explorer = lv_event_get_user_data(e);
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
if button.has_state(lv.STATE.CHECKED) :
|
||||
fe_quick_access_obj.add_flag(lv.obj.FLAG.HIDDEN)
|
||||
else :
|
||||
fe_quick_access_obj.remove_flag(lv.obj.FLAG.HIDDEN)
|
||||
|
||||
def dd_event_handler(e, file_explorer):
|
||||
|
||||
code = e.get_code()
|
||||
dd = e.get_target_obj()
|
||||
# fe_quick_access_obj = lv_event_get_user_data(e);
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
buf = bytearray(32)
|
||||
lv.dropdown.get_selected_str(dd,buf,len(buf))
|
||||
|
||||
if buf[:4] == b"NONE":
|
||||
# print("set sort to NONE")
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.NONE)
|
||||
elif buf[:4] == b"KIND" :
|
||||
# print("set sort to KIND")
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.KIND)
|
||||
|
||||
file_explorer = lv.file_explorer(lv.screen_active())
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
# Quick access status control button
|
||||
fe_quick_access_obj = file_explorer.explorer_get_quick_access_area()
|
||||
fe_header_obj = file_explorer.explorer_get_header()
|
||||
button = lv.button(fe_header_obj)
|
||||
button.set_style_radius(2, 0)
|
||||
button.set_style_pad_all(4, 0)
|
||||
button.align(lv.ALIGN.LEFT_MID, 0, 0)
|
||||
button.add_flag(lv.obj.FLAG.CHECKABLE)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text(lv.SYMBOL.LIST)
|
||||
label.center()
|
||||
|
||||
button.add_event_cb(lambda evt: button_event_handler(evt,fe_quick_access_obj), lv.EVENT.VALUE_CHANGED, None)
|
||||
#button.add_event_cb(lambda evt: button_event_handler(evt,file_explorer), lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
# Sort control
|
||||
opts = "NONE\nKIND"
|
||||
|
||||
dd = lv.dropdown(fe_header_obj)
|
||||
dd.set_style_radius(4, 0)
|
||||
dd.set_style_pad_all(0, 0)
|
||||
dd.set_size(lv.pct(30), lv.SIZE_CONTENT)
|
||||
dd.set_options_static(opts)
|
||||
dd.align(lv.ALIGN.RIGHT_MID, 0, 0)
|
||||
# lv_obj_align_to(dd, button, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
|
||||
|
||||
dd.add_event_cb(lambda evt: dd_event_handler(evt,file_explorer), lv.EVENT.VALUE_CHANGED, None)
|
||||
#dd.add_event_cb(lambda evt: dd_event_handler(evt,fe_quick_access_obj), lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def exch_table_item(tb, i, j):
|
||||
tmp = tb.get_cell_value(i, 0)
|
||||
tb.set_cell_value(0, 2, tmp)
|
||||
tb.set_cell_value(i, 0, tb.get_cell_value(j, 0))
|
||||
tb.set_cell_value(j, 0, tb.get_cell_value(0, 2))
|
||||
|
||||
tmp = tb.get_cell_value(i, 1)
|
||||
tb.set_cell_value(0, 2, tmp)
|
||||
tb.set_cell_value(i, 1, tb.get_cell_value(j, 1))
|
||||
tb.set_cell_value(j, 1, tb.get_cell_value(0, 2))
|
||||
|
||||
# Quick sort 3 way
|
||||
def sort_by_file_kind(tb, lo, hi) :
|
||||
if lo >= hi:
|
||||
return;
|
||||
|
||||
lt = lo
|
||||
i = lo + 1
|
||||
gt = hi
|
||||
v = tb.get_cell_value(lo, 1)
|
||||
|
||||
while i <= gt :
|
||||
|
||||
if tb.get_cell_value(i, 1) < v :
|
||||
lt += 1
|
||||
i += 1
|
||||
exch_table_item(tb, lt, i)
|
||||
elif tb.get_cell_value(i, 1) > v:
|
||||
gt -= 1
|
||||
exch_table_item(tb, i, gt)
|
||||
else :
|
||||
i += 1
|
||||
sort_by_file_kind(tb, lo, lt - 1);
|
||||
sort_by_file_kind(tb, gt + 1, hi);
|
||||
|
||||
|
||||
def file_explorer_event_handler(e) :
|
||||
|
||||
code = e.get_code()
|
||||
obj = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
elif code == lv.EVENT.READY :
|
||||
tb = obj.explorer_get_file_table()
|
||||
sum = tb.get_row_count()
|
||||
# print("sum: ",sum)
|
||||
sort_by_file_kind(tb, 0, (sum - 1));
|
||||
|
||||
file_explorer = lv.file_explorer(lv.screen_active())
|
||||
# Before custom sort, please set the default sorting to NONE. The default is NONE.
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.NONE)
|
||||
|
||||
file_explorer = lv.file_explorer(lv.screen_active())
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# Demonstrate a a basic grid navigation
|
||||
#
|
||||
# It's assumed that the default group is set and
|
||||
# there is a keyboard indev
|
||||
|
||||
cont1 = lv.obj(lv.screen_active())
|
||||
lv.gridnav_add(cont1, lv.GRIDNAV_CTRL.NONE)
|
||||
|
||||
# Use flex here, but works with grid or manually placed objects as well
|
||||
cont1.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
cont1.set_style_bg_color(lv.palette_lighten(lv.PALETTE.BLUE, 5), lv.STATE.FOCUSED)
|
||||
cont1.set_size(lv.pct(50), lv.pct(100))
|
||||
|
||||
# Only the container needs to be in a group
|
||||
lv.group_get_default().add_obj(cont1)
|
||||
|
||||
label = lv.label(cont1)
|
||||
label.set_text("No rollover")
|
||||
|
||||
for i in range(10):
|
||||
obj = lv.button(cont1)
|
||||
obj.set_size(70, lv.SIZE_CONTENT)
|
||||
obj.add_flag(lv.obj.FLAG.CHECKABLE)
|
||||
lv.group_remove_obj(obj) # Not needed, we use the gridnav instead
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("{:d}".format(i))
|
||||
label.center()
|
||||
|
||||
# Create a second container with rollover grid nav mode.
|
||||
|
||||
cont2 = lv.obj(lv.screen_active())
|
||||
lv.gridnav_add(cont2,lv.GRIDNAV_CTRL.ROLLOVER)
|
||||
cont2.set_style_bg_color(lv.palette_lighten(lv.PALETTE.BLUE, 5), lv.STATE.FOCUSED)
|
||||
cont2.set_size(lv.pct(50), lv.pct(100))
|
||||
cont2.align(lv.ALIGN.RIGHT_MID, 0, 0)
|
||||
|
||||
label = lv.label(cont2)
|
||||
label.set_width(lv.pct(100))
|
||||
label.set_text("Rollover\nUse tab to focus the other container")
|
||||
|
||||
# Only the container needs to be in a group
|
||||
lv.group_get_default().add_obj(cont2)
|
||||
|
||||
# Add and place some children manually
|
||||
ta = lv.textarea(cont2)
|
||||
ta.set_size(lv.pct(100), 80)
|
||||
ta.set_pos(0, 80);
|
||||
lv.group_remove_obj(ta) # Not needed, we use the gridnav instead
|
||||
|
||||
cb = lv.checkbox(cont2)
|
||||
cb.set_pos(0, 170)
|
||||
lv.group_remove_obj(cb) # Not needed, we use the gridnav instead
|
||||
|
||||
sw1 = lv.switch(cont2)
|
||||
sw1.set_pos(0, 200);
|
||||
lv.group_remove_obj(sw1) # Not needed, we use the gridnav instead
|
||||
|
||||
sw2 = lv.switch(cont2)
|
||||
sw2.set_pos(lv.pct(50), 200)
|
||||
lv.group_remove_obj(sw2) # Not needed, we use the gridnav instead
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
#
|
||||
# Grid navigation on a list
|
||||
#
|
||||
# It's assumed that the default group is set and
|
||||
# there is a keyboard indev
|
||||
|
||||
list1 = lv.list(lv.screen_active())
|
||||
lv.gridnav_add(list1, lv.GRIDNAV_CTRL.NONE)
|
||||
list1.set_size(lv.pct(45), lv.pct(80))
|
||||
list1.align(lv.ALIGN.LEFT_MID, 5, 0)
|
||||
list1.set_style_bg_color(lv.palette_lighten(lv.PALETTE.BLUE, 5), lv.STATE.FOCUSED)
|
||||
lv.group_get_default().add_obj(list1)
|
||||
|
||||
for i in range(15):
|
||||
item_text = "File {:d}".format(i)
|
||||
item = list1.add_button(lv.SYMBOL.FILE, item_text)
|
||||
item.set_style_bg_opa(0, 0)
|
||||
lv.group_remove_obj(item) # Not needed, we use the gridnav instead
|
||||
|
||||
list2 = lv.list(lv.screen_active())
|
||||
lv.gridnav_add(list2, lv.GRIDNAV_CTRL.ROLLOVER)
|
||||
list2.set_size(lv.pct(45), lv.pct(80))
|
||||
list2.align(lv.ALIGN.RIGHT_MID, -5, 0)
|
||||
list2.set_style_bg_color(lv.palette_lighten(lv.PALETTE.BLUE, 5), lv.STATE.FOCUSED)
|
||||
lv.group_get_default().add_obj(list2)
|
||||
|
||||
for i in range(15):
|
||||
item_text = "Folder {:d}".format(i)
|
||||
item = list2.add_button(lv.SYMBOL.DIRECTORY, item_text)
|
||||
item.set_style_bg_opa(0, 0)
|
||||
lv.group_remove_obj(item)
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
def cont_sub_event_cb(e):
|
||||
k = e.get_key()
|
||||
obj = e.get_target_obj()
|
||||
if k == lv.KEY.ENTER:
|
||||
lv.group_focus_obj(obj)
|
||||
|
||||
elif k == lv.KEY.ESC:
|
||||
obj.get_group().focus_next()
|
||||
|
||||
#
|
||||
# Nested grid navigations
|
||||
#
|
||||
# It's assumed that the default group is set and
|
||||
# there is a keyboard indev*/
|
||||
|
||||
cont_main = lv.obj(lv.screen_active())
|
||||
lv.gridnav_add(cont_main,lv.GRIDNAV_CTRL.ROLLOVER | lv.GRIDNAV_CTRL.SCROLL_FIRST)
|
||||
|
||||
# Only the container needs to be in a group
|
||||
lv.group_get_default().add_obj(cont_main)
|
||||
|
||||
# Use flex here, but works with grid or manually placed objects as well
|
||||
cont_main.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
cont_main.set_style_bg_color(lv.palette_lighten(lv.PALETTE.BLUE, 5), lv.STATE.FOCUSED)
|
||||
cont_main.set_size(lv.pct(80), lv.SIZE_CONTENT)
|
||||
|
||||
button = lv.button(cont_main)
|
||||
lv.group_remove_obj(button)
|
||||
label = lv.label(button)
|
||||
label.set_text("Button 1")
|
||||
|
||||
button = lv.button(cont_main)
|
||||
lv.group_remove_obj(button)
|
||||
label = lv.label(button)
|
||||
label.set_text("Button 2");
|
||||
|
||||
|
||||
# Create an other container with long text to show how LV_GRIDNAV_CTRL_SCROLL_FIRST works
|
||||
cont_sub1 = lv.obj(cont_main)
|
||||
cont_sub1.set_size(lv.pct(100), 100)
|
||||
|
||||
label = lv.label(cont_sub1)
|
||||
cont_sub1.set_style_bg_color(lv.palette_lighten(lv.PALETTE.RED, 5), lv.STATE.FOCUSED)
|
||||
label.set_width(lv.pct(100));
|
||||
label.set_text(
|
||||
"""I'm a very long text which makes my container scrollable.
|
||||
As LV_GRIDNAV_FLAG_SCROLL_FIRST is enabled arrows will scroll me first
|
||||
and a new objects will be focused only when an edge is reached with the scrolling.\n
|
||||
This is only some placeholder text to be sure the parent will be scrollable. \n
|
||||
Hello world!
|
||||
Hello world!
|
||||
Hello world!
|
||||
Hello world!
|
||||
Hello world!
|
||||
Hello world!
|
||||
""")
|
||||
|
||||
# Create a third container that can be focused with ENTER and contains an other grid nav
|
||||
cont_sub2 = lv.obj(cont_main)
|
||||
lv.gridnav_add(cont_sub2, lv.GRIDNAV_CTRL.ROLLOVER)
|
||||
#Only the container needs to be in a group
|
||||
lv.group_get_default().add_obj(cont_sub2)
|
||||
|
||||
cont_sub2.add_event_cb(cont_sub_event_cb, lv.EVENT.KEY, None)
|
||||
|
||||
# Use flex here, but works with grid or manually placed objects as well
|
||||
cont_sub2.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
cont_sub2.set_style_bg_color(lv.palette_lighten(lv.PALETTE.RED, 5), lv.STATE.FOCUSED)
|
||||
cont_sub2.set_size(lv.pct(100), lv.SIZE_CONTENT)
|
||||
|
||||
label = lv.label(cont_sub2)
|
||||
label.set_text("Use ENTER/ESC to focus/defocus this container")
|
||||
label.set_width(lv.pct(100))
|
||||
|
||||
button = lv.button(cont_sub2)
|
||||
lv.group_remove_obj(button)
|
||||
label = lv.label(button)
|
||||
label.set_text("Button 3")
|
||||
|
||||
button = lv.button(cont_sub2)
|
||||
lv.group_remove_obj(button)
|
||||
label = lv.label(button)
|
||||
label.set_text("Button 4")
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
def event_handler(e):
|
||||
obj = e.get_target_obj()
|
||||
list = obj.get_parent()
|
||||
print("Clicked: " + list.get_button_text(obj))
|
||||
|
||||
|
||||
#
|
||||
# Simple navigation on a list widget
|
||||
#
|
||||
# It's assumed that the default group is set and
|
||||
# there is a keyboard indev
|
||||
|
||||
list = lv.list(lv.screen_active())
|
||||
lv.gridnav_add(list, lv.GRIDNAV_CTRL.ROLLOVER)
|
||||
list.align(lv.ALIGN.LEFT_MID, 0, 10)
|
||||
lv.group_get_default().add_obj(list)
|
||||
|
||||
for i in range(20):
|
||||
|
||||
# Add some separators too, they are not focusable by gridnav
|
||||
if i % 5 == 0:
|
||||
txt = "Section {:d}".format(i // 5 + 1)
|
||||
# lv_snprintf(buf, sizeof(buf), "Section %d", i / 5 + 1);
|
||||
list.add_text(txt)
|
||||
|
||||
txt = "File {:d}".format(i + 1)
|
||||
#lv_snprintf(buf, sizeof(buf), "File %d", i + 1);
|
||||
item = list.add_button(lv.SYMBOL.FILE, txt)
|
||||
item.add_event_cb(event_handler, lv.EVENT.CLICKED, None)
|
||||
lv.group_remove_obj(item) # The default group adds it automatically
|
||||
|
||||
button = lv.button(lv.screen_active())
|
||||
button.align(lv.ALIGN.RIGHT_MID, 0, -10)
|
||||
label = lv.label(button)
|
||||
label.set_text("Button")
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
import fs_driver
|
||||
|
||||
def ta_event_cb(e,kb):
|
||||
code = e.get_code()
|
||||
ta = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.FOCUSED:
|
||||
if lv.indev_active() != None and lv.indev_active().get_type() != lv.INDEV_TYPE.KEYPAD :
|
||||
kb.set_textarea(ta)
|
||||
kb.remove_flag(lv.obj.FLAG.HIDDEN)
|
||||
elif code == lv.EVENT.CANCEL:
|
||||
kb.add_flag(lv.obj.FLAG.HIDDEN)
|
||||
ta.remove_state(ta, LV_STATE_FOCUSED);
|
||||
lv.indev_reset(None, ta) # To forget the last clicked object to make it focusable again
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
font_simsun_16_cjk = lv.font_t()
|
||||
lv.binfont_load(font_simsun_16_cjk, "S:../../assets/font/lv_font_simsun_16_cjk.fnt")
|
||||
if font_simsun_16_cjk == None:
|
||||
print("Error when loading chinese font")
|
||||
|
||||
pinyin_ime = lv.ime_pinyin(lv.screen_active())
|
||||
pinyin_ime.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
# pinyin_ime.pinyin_set_dict(your_dict) # Use a custom dictionary. If it is not set, the built-in dictionary will be used.
|
||||
|
||||
# ta1
|
||||
ta1 = lv.textarea(lv.screen_active())
|
||||
ta1.set_one_line(True)
|
||||
ta1.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
ta1.align(lv.ALIGN.TOP_LEFT, 0, 0)
|
||||
|
||||
# Create a keyboard and add it to ime_pinyin
|
||||
kb = lv.keyboard(lv.screen_active())
|
||||
pinyin_ime.pinyin_set_keyboard(kb)
|
||||
kb.set_textarea(ta1)
|
||||
|
||||
ta1.add_event_cb(lambda evt: ta_event_cb(evt,kb), lv.EVENT.ALL, None)
|
||||
|
||||
# Get the cand_panel, and adjust its size and position
|
||||
cand_panel = pinyin_ime.pinyin_get_cand_panel()
|
||||
cand_panel.set_size(lv.pct(100), lv.pct(10))
|
||||
cand_panel.align_to(kb, lv.ALIGN.OUT_TOP_MID, 0, 0)
|
||||
|
||||
# Try using ime_pinyin to output the Chinese below in the ta1 above
|
||||
cz_label = lv.label(lv.screen_active())
|
||||
cz_label.set_text("嵌入式系统(Embedded System),\n是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。")
|
||||
cz_label.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
cz_label.set_width(310)
|
||||
cz_label.align_to(ta1, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0)
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
import fs_driver
|
||||
|
||||
def ta_event_cb(e,kb):
|
||||
code = e.get_code()
|
||||
ta = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.FOCUSED:
|
||||
if lv.indev_active() != None and lv.indev_active().get_type() != lv.INDEV_TYPE.KEYPAD :
|
||||
kb.set_textarea(ta)
|
||||
kb.remove_flag(lv.obj.FLAG.HIDDEN)
|
||||
elif code == lv.EVENT.READY:
|
||||
kb.add_flag(lv.obj.FLAG.HIDDEN)
|
||||
ta.remove_state(ta, LV_STATE_FOCUSED);
|
||||
lv.indev_reset(None, ta) # To forget the last clicked object to make it focusable again
|
||||
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
font_simsun_16_cjk = lv.font_t()
|
||||
lv.binfont_load(font_simsun_16_cjk, "S:../../assets/font/lv_font_simsun_16_cjk.fnt")
|
||||
if font_simsun_16_cjk == None:
|
||||
print("Error when loading chinese font")
|
||||
|
||||
pinyin_ime = lv.ime_pinyin(lv.screen_active())
|
||||
pinyin_ime.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
# pinyin_ime.pinyin_set_dict(your_dict) # Use a custom dictionary. If it is not set, the built-in dictionary will be used.
|
||||
|
||||
# ta1
|
||||
ta1 = lv.textarea(lv.screen_active())
|
||||
ta1.set_one_line(True)
|
||||
ta1.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
ta1.align(lv.ALIGN.TOP_LEFT, 0, 0)
|
||||
|
||||
# Create a keyboard and add it to ime_pinyin
|
||||
kb = lv.keyboard(lv.screen_active())
|
||||
kb.set_textarea(ta1)
|
||||
|
||||
pinyin_ime.pinyin_set_keyboard(kb)
|
||||
pinyin_ime.pinyin_set_mode(lv.ime_pinyin.PINYIN_MODE.K9) # Set to 9-key input mode. Default: 26-key input(k26) mode.
|
||||
|
||||
ta1.add_event_cb(lambda evt: ta_event_cb(evt,kb), lv.EVENT.ALL, None)
|
||||
|
||||
# Get the cand_panel, and adjust its size and position
|
||||
cand_panel = pinyin_ime.pinyin_get_cand_panel()
|
||||
cand_panel.set_size(lv.pct(100), lv.pct(10))
|
||||
cand_panel.align_to(kb, lv.ALIGN.OUT_TOP_MID, 0, 0)
|
||||
|
||||
# Try using ime_pinyin to output the Chinese below in the ta1 above
|
||||
cz_label = lv.label(lv.screen_active())
|
||||
cz_label.set_text("嵌入式系统(Embedded System),\n是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。")
|
||||
cz_label.set_style_text_font(font_simsun_16_cjk, 0)
|
||||
cz_label.set_width(310)
|
||||
cz_label.align_to(ta1, lv.ALIGN.OUT_BOTTOM_LEFT, 0, 0)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#TODO
|
||||
pass
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
import gc
|
||||
import lvgl as lv
|
||||
|
||||
# Measure memory usage
|
||||
gc.enable()
|
||||
gc.collect()
|
||||
mem_free = gc.mem_free()
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
label.align(lv.ALIGN.BOTTOM_MID, 0, -10)
|
||||
label.set_text(" memory free:" + str(mem_free/1024) + " kB")
|
||||
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../../assets/img_star.png','rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find star.png")
|
||||
sys.exit()
|
||||
|
||||
image_star = lv.image_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
def event_cb(e, snapshot_obj):
|
||||
image = e.get_target_obj()
|
||||
|
||||
if snapshot_obj:
|
||||
# no need to free the old source for snapshot_obj, gc will free it for us.
|
||||
|
||||
# take a new snapshot, overwrite the old one
|
||||
dsc = lv.snapshot_take(image.get_parent(), lv.COLOR_FORMAT.NATIVE_ALPHA)
|
||||
snapshot_obj.set_src(dsc)
|
||||
|
||||
gc.collect()
|
||||
mem_used = mem_free - gc.mem_free()
|
||||
label.set_text("memory used:" + str(mem_used/1024) + " kB")
|
||||
|
||||
root = lv.screen_active()
|
||||
root.set_style_bg_color(lv.palette_main(lv.PALETTE.LIGHT_BLUE), 0)
|
||||
|
||||
# Create an image object to show snapshot
|
||||
snapshot_obj = lv.image(root)
|
||||
snapshot_obj.set_style_bg_color(lv.palette_main(lv.PALETTE.PURPLE), 0)
|
||||
snapshot_obj.set_style_bg_opa(lv.OPA.COVER, 0)
|
||||
snapshot_obj.set_scale(128)
|
||||
|
||||
# Create the container and its children
|
||||
container = lv.obj(root)
|
||||
container.align(lv.ALIGN.CENTER, 0, 0)
|
||||
container.set_size(180, 180)
|
||||
container.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
|
||||
container.set_flex_align(lv.FLEX_ALIGN.SPACE_EVENLY, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER)
|
||||
container.set_style_radius(50, 0)
|
||||
|
||||
for i in range(4):
|
||||
image = lv.image(container)
|
||||
image.set_src(image_star)
|
||||
image.set_style_bg_color(lv.palette_main(lv.PALETTE.GREY), 0)
|
||||
image.set_style_bg_opa(lv.OPA.COVER, 0)
|
||||
image.set_style_transform_scale(400, lv.STATE.PRESSED)
|
||||
image.add_flag(image.FLAG.CLICKABLE)
|
||||
image.add_event_cb(lambda e: event_cb(e, snapshot_obj), lv.EVENT.PRESSED, None)
|
||||
image.add_event_cb(lambda e: event_cb(e, snapshot_obj), lv.EVENT.RELEASED, None)
|
||||
@@ -1,33 +0,0 @@
|
||||
#
|
||||
# Demonstrate how scrolling appears automatically
|
||||
#
|
||||
# Create an object with the new style
|
||||
panel = lv.obj(lv.screen_active())
|
||||
panel.set_size(200, 200)
|
||||
panel.center()
|
||||
|
||||
child = lv.obj(panel)
|
||||
child.set_pos(0, 0);
|
||||
child.set_size(70, 70)
|
||||
label = lv.label(child)
|
||||
label.set_text("Zero")
|
||||
label.center()
|
||||
|
||||
child = lv.obj(panel)
|
||||
child.set_pos(160, 80)
|
||||
child.set_size(80, 80)
|
||||
|
||||
child2 = lv.button(child)
|
||||
child2.set_size(100, 50)
|
||||
|
||||
label = lv.label(child2)
|
||||
label.set_text("Right")
|
||||
label.center()
|
||||
|
||||
child = lv.obj(panel)
|
||||
child.set_pos(40, 160)
|
||||
child.set_size(100, 70)
|
||||
label = lv.label(child)
|
||||
label.set_text("Bottom")
|
||||
label.center()
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
def sw_event_cb(e,panel):
|
||||
|
||||
code = e.get_code()
|
||||
sw = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
|
||||
if sw.has_state(lv.STATE.CHECKED):
|
||||
panel.add_flag(lv.obj.FLAG.SCROLL_ONE)
|
||||
else:
|
||||
panel.remove_flag(lv.obj.FLAG.SCROLL_ONE)
|
||||
|
||||
|
||||
#
|
||||
# Show an example to scroll snap
|
||||
#
|
||||
|
||||
panel = lv.obj(lv.screen_active())
|
||||
panel.set_size(280, 150)
|
||||
panel.set_scroll_snap_x(lv.SCROLL_SNAP.CENTER)
|
||||
panel.set_flex_flow(lv.FLEX_FLOW.ROW)
|
||||
panel.center()
|
||||
|
||||
for i in range(10):
|
||||
button = lv.button(panel)
|
||||
button.set_size(150, 100)
|
||||
|
||||
label = lv.label(button)
|
||||
if i == 3:
|
||||
label.set_text("Panel {:d}\nno snap".format(i))
|
||||
button.remove_flag(lv.obj.FLAG.SNAPPABLE)
|
||||
else:
|
||||
label.set_text("Panel {:d}".format(i))
|
||||
label.center()
|
||||
|
||||
panel.update_snap(lv.ANIM.ON)
|
||||
|
||||
|
||||
# Switch between "One scroll" and "Normal scroll" mode
|
||||
sw = lv.switch(lv.screen_active())
|
||||
sw.align(lv.ALIGN.TOP_RIGHT, -20, 10)
|
||||
sw.add_event_cb(lambda evt: sw_event_cb(evt,panel), lv.EVENT.ALL, None)
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("One scroll")
|
||||
label.align_to(sw, lv.ALIGN.OUT_BOTTOM_MID, 0, 5)
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
class ScrollExample_3():
|
||||
def __init__(self):
|
||||
self.button_cnt = 1
|
||||
#
|
||||
# Create a list with a floating button
|
||||
#
|
||||
|
||||
list = lv.list(lv.screen_active())
|
||||
list.set_size(280, 220)
|
||||
list.center()
|
||||
|
||||
for button_cnt in range(2):
|
||||
list.add_button(lv.SYMBOL.AUDIO,"Track {:d}".format(button_cnt))
|
||||
|
||||
float_button = lv.button(list)
|
||||
float_button.set_size(50, 50)
|
||||
float_button.add_flag(lv.obj.FLAG.FLOATING)
|
||||
float_button.align(lv.ALIGN.BOTTOM_RIGHT, 0, -list.get_style_pad_right(lv.PART.MAIN))
|
||||
float_button.add_event_cb(lambda evt: self.float_button_event_cb(evt,list), lv.EVENT.ALL, None)
|
||||
float_button.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
||||
float_button.set_style_bg_image_src(lv.SYMBOL.PLUS, 0)
|
||||
float_button.set_style_text_font(lv.theme_get_font_large(float_button), 0)
|
||||
|
||||
def float_button_event_cb(self,e,list):
|
||||
code = e.get_code()
|
||||
float_button = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.CLICKED:
|
||||
list_button = list.add_button(lv.SYMBOL.AUDIO, "Track {:d}".format(self.button_cnt))
|
||||
self.button_cnt += 1
|
||||
|
||||
float_button.move_foreground()
|
||||
|
||||
list_button.scroll_to_view(lv.ANIM.ON)
|
||||
|
||||
scroll_example_3 = ScrollExample_3()
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#
|
||||
# Styling the scrollbars
|
||||
#
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.set_size(200, 100)
|
||||
obj.center()
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text(
|
||||
"""
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Etiam dictum, tortor vestibulum lacinia laoreet, mi neque consectetur neque, vel mattis odio dolor egestas ligula.
|
||||
Sed vestibulum sapien nulla, id convallis ex porttitor nec.
|
||||
Duis et massa eu libero accumsan faucibus a in arcu.
|
||||
Ut pulvinar odio lorem, vel tempus turpis condimentum quis. Nam consectetur condimentum sem in auctor.
|
||||
Sed nisl augue, venenatis in blandit et, gravida ac tortor.
|
||||
Etiam dapibus elementum suscipit.
|
||||
Proin mollis sollicitudin convallis.
|
||||
Integer dapibus tempus arcu nec viverra.
|
||||
Donec molestie nulla enim, eu interdum velit placerat quis.
|
||||
Donec id efficitur risus, at molestie turpis.
|
||||
Suspendisse vestibulum consectetur nunc ut commodo.
|
||||
Fusce molestie rhoncus nisi sit amet tincidunt.
|
||||
Suspendisse a nunc ut magna ornare volutpat.
|
||||
""")
|
||||
|
||||
|
||||
# Remove the style of scrollbar to have clean start
|
||||
obj.remove_style(None, lv.PART.SCROLLBAR | lv.STATE.ANY)
|
||||
|
||||
# Create a transition the animate the some properties on state change
|
||||
props = [lv.STYLE.BG_OPA, lv.STYLE.WIDTH, 0]
|
||||
trans = lv.style_transition_dsc_t()
|
||||
trans.init(props, lv.anim_t.path_linear, 200, 0, None)
|
||||
|
||||
# Create a style for the scrollbars
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_width(4) # Width of the scrollbar
|
||||
style.set_pad_right(5) # Space from the parallel side
|
||||
style.set_pad_top(5) # Space from the perpendicular side
|
||||
|
||||
style.set_radius(2)
|
||||
style.set_bg_opa(lv.OPA._70)
|
||||
style.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_border_color(lv.palette_darken(lv.PALETTE.BLUE, 3))
|
||||
style.set_border_width(2)
|
||||
style.set_shadow_width(8)
|
||||
style.set_shadow_spread(2)
|
||||
style.set_shadow_color(lv.palette_darken(lv.PALETTE.BLUE, 1))
|
||||
|
||||
style.set_transition(trans)
|
||||
|
||||
# Make the scrollbars wider and use 100% opacity when scrolled
|
||||
style_scrolled = lv.style_t()
|
||||
style_scrolled.init()
|
||||
style_scrolled.set_width(8)
|
||||
style_scrolled.set_bg_opa(lv.OPA.COVER)
|
||||
|
||||
obj.add_style(style, lv.PART.SCROLLBAR)
|
||||
obj.add_style(style_scrolled, lv.PART.SCROLLBAR | lv.STATE.SCROLLED)
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#
|
||||
# Scrolling with Right To Left base direction
|
||||
#
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.set_style_base_dir(lv.BASE_DIR.RTL, 0)
|
||||
obj.set_size(200, 100)
|
||||
obj.center()
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("میکروکُنترولر (به انگلیسی: Microcontroller) گونهای ریزپردازنده است که دارای حافظهٔ دسترسی تصادفی (RAM) و حافظهٔ فقطخواندنی (ROM)، تایمر، پورتهای ورودی و خروجی (I/O) و درگاه ترتیبی (Serial Port پورت سریال)، درون خود تراشه است، و میتواند به تنهایی ابزارهای دیگر را کنترل کند. به عبارت دیگر یک میکروکنترلر، مدار مجتمع کوچکی است که از یک CPU کوچک و اجزای دیگری مانند تایمر، درگاههای ورودی و خروجی آنالوگ و دیجیتال و حافظه تشکیل شدهاست.")
|
||||
label.set_width(400)
|
||||
label.set_style_text_font(lv.font_dejavu_16_persian_hebrew, 0)
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
def scroll_event_cb(e):
|
||||
|
||||
cont = e.get_target_obj()
|
||||
|
||||
cont_a = lv.area_t()
|
||||
cont.get_coords(cont_a)
|
||||
cont_y_center = cont_a.y1 + cont_a.get_height() // 2
|
||||
|
||||
r = cont.get_height() * 7 // 10
|
||||
|
||||
child_cnt = cont.get_child_count()
|
||||
for i in range(child_cnt):
|
||||
child = cont.get_child(i)
|
||||
child_a = lv.area_t()
|
||||
child.get_coords(child_a)
|
||||
|
||||
child_y_center = child_a.y1 + child_a.get_height() // 2
|
||||
|
||||
diff_y = child_y_center - cont_y_center
|
||||
diff_y = abs(diff_y)
|
||||
|
||||
# Get the x of diff_y on a circle.
|
||||
|
||||
# If diff_y is out of the circle use the last point of the circle (the radius)
|
||||
if diff_y >= r:
|
||||
x = r
|
||||
else:
|
||||
# Use Pythagoras theorem to get x from radius and y
|
||||
x_sqr = r * r - diff_y * diff_y
|
||||
res = lv.sqrt_res_t()
|
||||
lv.sqrt(x_sqr, res, 0x8000) # Use lvgl's built in sqrt root function
|
||||
x = r - res.i
|
||||
|
||||
# Translate the item by the calculated X coordinate
|
||||
child.set_style_translate_x(x, 0)
|
||||
|
||||
# Use some opacity with larger translations
|
||||
opa = lv.map(x, 0, r, lv.OPA.TRANSP, lv.OPA.COVER)
|
||||
child.set_style_opa(lv.OPA.COVER - opa, 0)
|
||||
|
||||
#
|
||||
# Translate the object as they scroll
|
||||
#
|
||||
|
||||
cont = lv.obj(lv.screen_active())
|
||||
cont.set_size(200, 200)
|
||||
cont.center()
|
||||
cont.set_flex_flow(lv.FLEX_FLOW.COLUMN)
|
||||
cont.add_event_cb(scroll_event_cb, lv.EVENT.SCROLL, None)
|
||||
cont.set_style_radius(lv.RADIUS_CIRCLE, 0)
|
||||
cont.set_style_clip_corner(True, 0)
|
||||
cont.set_scroll_dir(lv.DIR.VER)
|
||||
cont.set_scroll_snap_y(lv.SCROLL_SNAP.CENTER)
|
||||
cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
|
||||
|
||||
for i in range(20):
|
||||
button = lv.button(cont)
|
||||
button.set_width(lv.pct(100))
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Button " + str(i))
|
||||
|
||||
# Update the buttons position manually for first*
|
||||
cont.send_event(lv.EVENT.SCROLL, None)
|
||||
|
||||
# Be sure the fist button is in the middle
|
||||
#lv.obj.scroll_to_view(cont.get_child(0), lv.ANIM.OFF)
|
||||
cont.get_child(0).scroll_to_view(lv.ANIM.OFF)
|
||||
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# Using the Size, Position and Padding style properties
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_radius(5)
|
||||
|
||||
# Make a gradient
|
||||
style.set_width(150)
|
||||
style.set_height(lv.SIZE_CONTENT)
|
||||
|
||||
style.set_pad_ver(20)
|
||||
style.set_pad_left(5)
|
||||
|
||||
style.set_x(lv.pct(50))
|
||||
style.set_y(80)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
|
||||
label = lv.label(obj)
|
||||
label.set_text("Hello")
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
#
|
||||
# Creating a transition
|
||||
#
|
||||
|
||||
props = [lv.STYLE.BG_COLOR, lv.STYLE.BORDER_COLOR, lv.STYLE.BORDER_WIDTH, 0]
|
||||
|
||||
# A default transition
|
||||
# Make it fast (100ms) and start with some delay (200 ms)
|
||||
|
||||
trans_def = lv.style_transition_dsc_t()
|
||||
trans_def.init(props, lv.anim_t.path_linear, 100, 200, None)
|
||||
|
||||
# A special transition when going to pressed state
|
||||
# Make it slow (500 ms) but start without delay
|
||||
|
||||
trans_pr = lv.style_transition_dsc_t()
|
||||
trans_pr.init(props, lv.anim_t.path_linear, 500, 0, None)
|
||||
|
||||
style_def = lv.style_t()
|
||||
style_def.init()
|
||||
style_def.set_transition(trans_def)
|
||||
|
||||
style_pr = lv.style_t()
|
||||
style_pr.init()
|
||||
style_pr.set_bg_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style_pr.set_border_width(6)
|
||||
style_pr.set_border_color(lv.palette_darken(lv.PALETTE.RED, 3))
|
||||
style_pr.set_transition(trans_pr)
|
||||
|
||||
# Create an object with the new style_pr
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style_def, 0)
|
||||
obj.add_style(style_pr, lv.STATE.PRESSED)
|
||||
|
||||
obj.center()
|
||||
@@ -1,43 +0,0 @@
|
||||
#
|
||||
# Using multiple styles
|
||||
#
|
||||
# A base style
|
||||
|
||||
style_base = lv.style_t()
|
||||
style_base.init()
|
||||
style_base.set_bg_color(lv.palette_main(lv.PALETTE.LIGHT_BLUE))
|
||||
style_base.set_border_color(lv.palette_darken(lv.PALETTE.LIGHT_BLUE, 3))
|
||||
style_base.set_border_width(2)
|
||||
style_base.set_radius(10)
|
||||
style_base.set_shadow_width(10)
|
||||
style_base.set_shadow_offset_y(5)
|
||||
style_base.set_shadow_opa(lv.OPA._50)
|
||||
style_base.set_text_color(lv.color_white())
|
||||
style_base.set_width(100)
|
||||
style_base.set_height(lv.SIZE_CONTENT)
|
||||
|
||||
# Set only the properties that should be different
|
||||
style_warning = lv.style_t()
|
||||
style_warning.init()
|
||||
style_warning.set_bg_color(lv.palette_main(lv.PALETTE.YELLOW))
|
||||
style_warning.set_border_color(lv.palette_darken(lv.PALETTE.YELLOW, 3))
|
||||
style_warning.set_text_color(lv.palette_darken(lv.PALETTE.YELLOW, 4))
|
||||
|
||||
# Create an object with the base style only
|
||||
obj_base = lv.obj(lv.screen_active())
|
||||
obj_base.add_style(style_base, 0)
|
||||
obj_base.align(lv.ALIGN.LEFT_MID, 20, 0)
|
||||
|
||||
label = lv.label(obj_base)
|
||||
label.set_text("Base")
|
||||
label.center()
|
||||
|
||||
# Create another object with the base style and earnings style too
|
||||
obj_warning = lv.obj(lv.screen_active())
|
||||
obj_warning.add_style(style_base, 0)
|
||||
obj_warning.add_style(style_warning, 0)
|
||||
obj_warning.align(lv.ALIGN.RIGHT_MID, -20, 0)
|
||||
|
||||
label = lv.label(obj_warning)
|
||||
label.set_text("Warning")
|
||||
label.center()
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Local styles
|
||||
#
|
||||
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_bg_color(lv.palette_main(lv.PALETTE.GREEN))
|
||||
style.set_border_color(lv.palette_lighten(lv.PALETTE.GREEN, 3))
|
||||
style.set_border_width(3)
|
||||
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
|
||||
# Overwrite the background color locally
|
||||
obj.set_style_bg_color(lv.palette_main(lv.PALETTE.ORANGE), lv.PART.MAIN)
|
||||
|
||||
obj.center()
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Add styles to parts and states
|
||||
#
|
||||
|
||||
style_indic = lv.style_t()
|
||||
style_indic.init()
|
||||
style_indic.set_bg_color(lv.palette_lighten(lv.PALETTE.RED, 3))
|
||||
style_indic.set_bg_grad_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style_indic.set_bg_grad_dir(lv.GRAD_DIR.HOR)
|
||||
|
||||
style_indic_pr = lv.style_t()
|
||||
style_indic_pr.init()
|
||||
style_indic_pr.set_shadow_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style_indic_pr.set_shadow_width(10)
|
||||
style_indic_pr.set_shadow_spread(3)
|
||||
|
||||
# Create an object with the new style_pr
|
||||
obj = lv.slider(lv.screen_active())
|
||||
obj.add_style(style_indic, lv.PART.INDICATOR)
|
||||
obj.add_style(style_indic_pr, lv.PART.INDICATOR | lv.STATE.PRESSED)
|
||||
obj.set_value(70, lv.ANIM.OFF)
|
||||
obj.center()
|
||||
@@ -1,55 +0,0 @@
|
||||
# Will be called when the styles of the base theme are already added
|
||||
# to add new styles
|
||||
|
||||
|
||||
class NewTheme(lv.theme_t):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
# Initialize the styles
|
||||
self.style_button = lv.style_t()
|
||||
self.style_button.init()
|
||||
self.style_button.set_bg_color(lv.palette_main(lv.PALETTE.GREEN))
|
||||
self.style_button.set_border_color(lv.palette_darken(lv.PALETTE.GREEN, 3))
|
||||
self.style_button.set_border_width(3)
|
||||
|
||||
# This theme is based on active theme
|
||||
th_act = lv.theme_get_from_obj(lv.screen_active())
|
||||
# This theme will be applied only after base theme is applied
|
||||
self.set_parent(th_act)
|
||||
|
||||
|
||||
class ExampleStyle_14:
|
||||
|
||||
def __init__(self):
|
||||
#
|
||||
# Extending the current theme
|
||||
#
|
||||
|
||||
button = lv.button(lv.screen_active())
|
||||
button.align(lv.ALIGN.TOP_MID, 0, 20)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Original theme")
|
||||
|
||||
self.new_theme_init_and_set()
|
||||
|
||||
button = lv.button(lv.screen_active())
|
||||
button.align(lv.ALIGN.BOTTOM_MID, 0, -20)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("New theme")
|
||||
|
||||
def new_theme_apply_cb(self, th, obj):
|
||||
print(th,obj)
|
||||
if obj.get_class() == lv.button_class:
|
||||
obj.add_style(self.th_new.style_button, 0)
|
||||
|
||||
def new_theme_init_and_set(self):
|
||||
print("new_theme_init_and_set")
|
||||
# Initialize the new theme from the current theme
|
||||
self.th_new = NewTheme()
|
||||
self.th_new.set_apply_cb(self.new_theme_apply_cb)
|
||||
lv.display_get_default().set_theme(self.th_new)
|
||||
|
||||
|
||||
exampleStyle_14 = ExampleStyle_14()
|
||||
@@ -1,39 +0,0 @@
|
||||
#
|
||||
# Opacity and Transformations
|
||||
#
|
||||
|
||||
# Normal button
|
||||
button = lv.button(lv.screen_active())
|
||||
button.set_size(100, 40)
|
||||
button.align(lv.ALIGN.CENTER, 0, -70)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Normal")
|
||||
label.center()
|
||||
|
||||
# Set opacity
|
||||
# The button and the label is rendered to a layer first and that layer is blended
|
||||
button = lv.button(lv.screen_active())
|
||||
button.set_size(100, 40)
|
||||
button.set_style_opa(lv.OPA._50, 0)
|
||||
button.align(lv.ALIGN.CENTER, 0, 0)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Opa:50%")
|
||||
label.center()
|
||||
|
||||
# Set transformations
|
||||
# The button and the label is rendered to a layer first and that layer is transformed
|
||||
button = lv.button(lv.screen_active())
|
||||
button.set_size(100, 40)
|
||||
button.set_style_transform_rotation(150, 0) # 15 deg
|
||||
button.set_style_transform_scale(256 + 64, 0) # 1.25x
|
||||
button.set_style_transform_pivot_x(50, 0)
|
||||
button.set_style_transform_pivot_y(20, 0)
|
||||
button.set_style_opa(lv.OPA._50, 0)
|
||||
button.align(lv.ALIGN.CENTER, 0, 70)
|
||||
|
||||
label = lv.label(button)
|
||||
label.set_text("Transf.")
|
||||
label.center()
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Using the background style properties
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
style.set_radius(5)
|
||||
|
||||
# Make a gradient
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1))
|
||||
style.set_bg_grad_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_bg_grad_dir(lv.GRAD_DIR.VER)
|
||||
|
||||
# Shift the gradient to the bottom
|
||||
style.set_bg_main_stop(128)
|
||||
style.set_bg_grad_stop(192)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.center()
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Using the border style properties
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
# Set a background color and a radius
|
||||
style.set_radius(10)
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1))
|
||||
|
||||
# Add border to the bottom+right
|
||||
style.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_border_width(5)
|
||||
style.set_border_opa(lv.OPA._50)
|
||||
style.set_border_side(lv.BORDER_SIDE.BOTTOM | lv.BORDER_SIDE.RIGHT)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.center()
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Using the outline style properties
|
||||
#
|
||||
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
# Set a background color and a radius
|
||||
style.set_radius(5)
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1))
|
||||
|
||||
# Add outline
|
||||
style.set_outline_width(2)
|
||||
style.set_outline_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_outline_pad(8)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.center()
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Using the Shadow style properties
|
||||
#
|
||||
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
# Set a background color and a radius
|
||||
style.set_radius(5)
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 1))
|
||||
|
||||
# Add a shadow
|
||||
style.set_shadow_width(8)
|
||||
style.set_shadow_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_shadow_offset_x(10)
|
||||
style.set_shadow_offset_y(20)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.obj(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.center()
|
||||
@@ -1,37 +0,0 @@
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../assets/img_cogwheel_argb.png', 'rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find img_cogwheel_argb.png")
|
||||
sys.exit()
|
||||
|
||||
image_cogwheel_argb = lv.image_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
#
|
||||
# Using the Image style properties
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
# Set a background color and a radius
|
||||
style.set_radius(5)
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3))
|
||||
style.set_border_width(2)
|
||||
style.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
|
||||
style.set_image_recolor(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_image_recolor_opa(lv.OPA._50)
|
||||
style.set_transform_rotation(300)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.image(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
|
||||
obj.set_src(image_cogwheel_argb)
|
||||
|
||||
obj.center()
|
||||
@@ -1,13 +0,0 @@
|
||||
#
|
||||
# Using the Arc style properties
|
||||
#
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
style.set_arc_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style.set_arc_width(4)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.arc(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.center()
|
||||
@@ -1,27 +0,0 @@
|
||||
#
|
||||
# Using the text style properties
|
||||
#
|
||||
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
style.set_radius(5)
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_lighten(lv.PALETTE.GREY, 3))
|
||||
style.set_border_width(2)
|
||||
style.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_pad_all(10)
|
||||
|
||||
style.set_text_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_text_letter_space(5)
|
||||
style.set_text_line_space(20)
|
||||
style.set_text_decor(lv.TEXT_DECOR.UNDERLINE)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.label(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
obj.set_text("Text of\n"
|
||||
"a label")
|
||||
|
||||
obj.center()
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Using the line style properties
|
||||
#
|
||||
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
style.set_line_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
style.set_line_width(6)
|
||||
style.set_line_rounded(True)
|
||||
|
||||
# Create an object with the new style
|
||||
obj = lv.line(lv.screen_active())
|
||||
obj.add_style(style, 0)
|
||||
p = [ {"x":10, "y":30},
|
||||
{"x":30, "y":50},
|
||||
{"x":100, "y":0}]
|
||||
|
||||
obj.set_points(p, 3)
|
||||
|
||||
obj.center()
|
||||
@@ -1,47 +0,0 @@
|
||||
anim_images = [None]*3
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../../assets/animimg001.png','rb') as f:
|
||||
anim001_data = f.read()
|
||||
except:
|
||||
print("Could not find animimg001.png")
|
||||
sys.exit()
|
||||
|
||||
anim_images[0] = lv.image_dsc_t({
|
||||
'data_size': len(anim001_data),
|
||||
'data': anim001_data
|
||||
})
|
||||
|
||||
try:
|
||||
with open('../../assets/animimg002.png','rb') as f:
|
||||
anim002_data = f.read()
|
||||
except:
|
||||
print("Could not find animimg002.png")
|
||||
sys.exit()
|
||||
|
||||
anim_images[1] = lv.image_dsc_t({
|
||||
'data_size': len(anim002_data),
|
||||
'data': anim002_data
|
||||
})
|
||||
|
||||
try:
|
||||
with open('../../assets/animimg003.png','rb') as f:
|
||||
anim003_data = f.read()
|
||||
except:
|
||||
print("Could not find animimg003.png")
|
||||
sys.exit()
|
||||
|
||||
anim_images[2] = lv.image_dsc_t({
|
||||
'data_size': len(anim003_data),
|
||||
'data': anim003_data
|
||||
})
|
||||
|
||||
animimage0 = lv.animimg(lv.screen_active())
|
||||
animimage0.center()
|
||||
animimage0.set_src(anim_images, 3)
|
||||
animimage0.set_duration(1000)
|
||||
animimage0.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
animimage0.start()
|
||||
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
def value_changed_event_cb(e,label):
|
||||
arc = e.get_target_obj()
|
||||
|
||||
txt = "{:d}%".format(arc.get_value())
|
||||
label.set_text(txt)
|
||||
|
||||
# Rotate the label to the current position of the arc
|
||||
arc.rotate_obj_to_angle(label, 25)
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
|
||||
# Create an Arc
|
||||
arc = lv.arc(lv.screen_active())
|
||||
arc.set_size(150, 150)
|
||||
arc.set_rotation(135)
|
||||
arc.set_bg_angles(0, 270)
|
||||
arc.set_value(10)
|
||||
arc.center()
|
||||
arc.add_event_cb(lambda e: value_changed_event_cb(e,label),lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
# Manually update the label for the first time
|
||||
arc.send_event(lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
def set_angle(obj, v):
|
||||
obj.set_value(v)
|
||||
|
||||
#
|
||||
# Create an arc which acts as a loader.
|
||||
#
|
||||
# Create an Arc
|
||||
arc = lv.arc(lv.screen_active())
|
||||
arc.set_rotation(270)
|
||||
arc.set_bg_angles(0, 360)
|
||||
arc.remove_style(None, lv.PART.KNOB) # Be sure the knob is not displayed
|
||||
arc.remove_flag(lv.obj.FLAG.CLICKABLE) #To not allow adjusting by click
|
||||
arc.center()
|
||||
|
||||
a = lv.anim_t()
|
||||
a.init()
|
||||
a.set_var(arc)
|
||||
a.set_time(1000)
|
||||
a.set_repeat_count(lv.ANIM_REPEAT_INFINITE) #Just for the demo
|
||||
a.set_repeat_delay(500)
|
||||
a.set_values(0, 100)
|
||||
a.set_custom_exec_cb(lambda a,val: set_angle(arc,val))
|
||||
lv.anim_t.start(a)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
bar1 = lv.bar(lv.screen_active())
|
||||
bar1.set_size(200, 20)
|
||||
bar1.center()
|
||||
bar1.set_value(70, lv.ANIM.OFF)
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#
|
||||
# Example of styling the bar
|
||||
#
|
||||
style_bg = lv.style_t()
|
||||
style_indic = lv.style_t()
|
||||
|
||||
style_bg.init()
|
||||
style_bg.set_border_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style_bg.set_border_width(2)
|
||||
style_bg.set_pad_all(6) # To make the indicator smaller
|
||||
style_bg.set_radius(6)
|
||||
style_bg.set_anim_time(1000)
|
||||
|
||||
style_indic.init()
|
||||
style_indic.set_bg_opa(lv.OPA.COVER)
|
||||
style_indic.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style_indic.set_radius(3)
|
||||
|
||||
bar = lv.bar(lv.screen_active())
|
||||
bar.remove_style_all() # To have a clean start
|
||||
bar.add_style(style_bg, 0)
|
||||
bar.add_style(style_indic, lv.PART.INDICATOR)
|
||||
|
||||
bar.set_size(200, 20)
|
||||
bar.center()
|
||||
bar.set_value(100, lv.ANIM.ON)
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
def set_temp(bar, temp):
|
||||
bar.set_value(temp, lv.ANIM.ON)
|
||||
|
||||
#
|
||||
# A temperature meter example
|
||||
#
|
||||
|
||||
|
||||
style_indic = lv.style_t()
|
||||
|
||||
style_indic.init()
|
||||
style_indic.set_bg_opa(lv.OPA.COVER)
|
||||
style_indic.set_bg_color(lv.palette_main(lv.PALETTE.RED))
|
||||
style_indic.set_bg_grad_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style_indic.set_bg_grad_dir(lv.GRAD_DIR.VER)
|
||||
|
||||
bar = lv.bar(lv.screen_active())
|
||||
bar.add_style(style_indic, lv.PART.INDICATOR)
|
||||
bar.set_size(20, 200)
|
||||
bar.center()
|
||||
bar.set_range(-20, 40)
|
||||
|
||||
a = lv.anim_t()
|
||||
a.init()
|
||||
a.set_time(3000)
|
||||
a.set_playback_duration(3000)
|
||||
a.set_var(bar)
|
||||
a.set_values(-20, 40)
|
||||
a.set_repeat_count(lv.ANIM_REPEAT_INFINITE)
|
||||
a.set_custom_exec_cb(lambda a, val: set_temp(bar,val))
|
||||
lv.anim_t.start(a)
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../../assets/img_strip.png','rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find img_strip.png")
|
||||
sys.exit()
|
||||
|
||||
image_skew_strip_dsc = lv.image_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
#
|
||||
# Bar with stripe pattern and ranged value
|
||||
#
|
||||
|
||||
style_indic = lv.style_t()
|
||||
|
||||
style_indic.init()
|
||||
style_indic.set_bg_image_src(image_skew_strip_dsc)
|
||||
style_indic.set_bg_image_tiled(True)
|
||||
style_indic.set_bg_image_opa(lv.OPA._30)
|
||||
|
||||
bar = lv.bar(lv.screen_active())
|
||||
bar.add_style(style_indic, lv.PART.INDICATOR)
|
||||
|
||||
bar.set_size(260, 20)
|
||||
bar.center()
|
||||
bar.set_mode(lv.bar.MODE.RANGE)
|
||||
bar.set_value(90, lv.ANIM.OFF)
|
||||
bar.set_start_value(20, lv.ANIM.OFF)
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Bar with LTR and RTL base direction
|
||||
#
|
||||
|
||||
bar_ltr = lv.bar(lv.screen_active())
|
||||
bar_ltr.set_size(200, 20)
|
||||
bar_ltr.set_value(70, lv.ANIM.OFF)
|
||||
bar_ltr.align(lv.ALIGN.CENTER, 0, -30)
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("Left to Right base direction")
|
||||
label.align_to(bar_ltr, lv.ALIGN.OUT_TOP_MID, 0, -5)
|
||||
|
||||
bar_rtl = lv.bar(lv.screen_active())
|
||||
bar_rtl.set_style_base_dir(lv.BASE_DIR.RTL,0)
|
||||
bar_rtl.set_size(200, 20)
|
||||
bar_rtl.set_value(70, lv.ANIM.OFF)
|
||||
bar_rtl.align(lv.ALIGN.CENTER, 0, 30)
|
||||
|
||||
label = lv.label(lv.screen_active())
|
||||
label.set_text("Right to Left base direction")
|
||||
label.align_to(bar_rtl, lv.ALIGN.OUT_TOP_MID, 0, -5)
|
||||
@@ -1 +0,0 @@
|
||||
pass
|
||||
@@ -1 +0,0 @@
|
||||
pass
|
||||
@@ -1,32 +0,0 @@
|
||||
def event_handler(evt):
|
||||
code = evt.get_code()
|
||||
|
||||
if code == lv.EVENT.CLICKED:
|
||||
print("Clicked event seen")
|
||||
elif code == lv.EVENT.VALUE_CHANGED:
|
||||
print("Value changed seen")
|
||||
|
||||
# create a simple button
|
||||
button1 = lv.button(lv.screen_active())
|
||||
|
||||
# attach the callback
|
||||
button1.add_event_cb(event_handler,lv.EVENT.ALL, None)
|
||||
|
||||
button1.align(lv.ALIGN.CENTER,0,-40)
|
||||
label=lv.label(button1)
|
||||
label.set_text("Button")
|
||||
|
||||
# create a toggle button
|
||||
button2 = lv.button(lv.screen_active())
|
||||
|
||||
# attach the callback
|
||||
#button2.add_event_cb(event_handler,lv.EVENT.VALUE_CHANGED,None)
|
||||
button2.add_event_cb(event_handler,lv.EVENT.ALL, None)
|
||||
|
||||
button2.align(lv.ALIGN.CENTER,0,40)
|
||||
button2.add_flag(lv.obj.FLAG.CHECKABLE)
|
||||
button2.set_height(lv.SIZE_CONTENT)
|
||||
|
||||
label=lv.label(button2)
|
||||
label.set_text("Toggle")
|
||||
label.center()
|
||||
@@ -1,60 +0,0 @@
|
||||
#
|
||||
# Style a button from scratch
|
||||
#
|
||||
|
||||
# Init the style for the default state
|
||||
style = lv.style_t()
|
||||
style.init()
|
||||
|
||||
style.set_radius(3)
|
||||
|
||||
style.set_bg_opa(lv.OPA.COVER)
|
||||
style.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
style.set_bg_grad_color(lv.palette_darken(lv.PALETTE.BLUE, 2))
|
||||
style.set_bg_grad_dir(lv.GRAD_DIR.VER)
|
||||
|
||||
style.set_border_opa(lv.OPA._40)
|
||||
style.set_border_width(2)
|
||||
style.set_border_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
|
||||
style.set_shadow_width(8)
|
||||
style.set_shadow_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
style.set_shadow_offset_y(8)
|
||||
|
||||
style.set_outline_opa(lv.OPA.COVER)
|
||||
style.set_outline_color(lv.palette_main(lv.PALETTE.BLUE))
|
||||
|
||||
style.set_text_color(lv.color_white())
|
||||
style.set_pad_all(10)
|
||||
|
||||
# Init the pressed style
|
||||
style_pr = lv.style_t()
|
||||
style_pr.init()
|
||||
|
||||
# Add a large outline when pressed
|
||||
style_pr.set_outline_width(30)
|
||||
style_pr.set_outline_opa(lv.OPA.TRANSP)
|
||||
|
||||
style_pr.set_translate_y(5)
|
||||
style_pr.set_shadow_offset_y(3)
|
||||
style_pr.set_bg_color(lv.palette_darken(lv.PALETTE.BLUE, 2))
|
||||
style_pr.set_bg_grad_color(lv.palette_darken(lv.PALETTE.BLUE, 4))
|
||||
|
||||
# Add a transition to the outline
|
||||
trans = lv.style_transition_dsc_t()
|
||||
props = [lv.STYLE.OUTLINE_WIDTH, lv.STYLE.OUTLINE_OPA, 0]
|
||||
trans.init(props, lv.anim_t.path_linear, 300, 0, None)
|
||||
|
||||
style_pr.set_transition(trans)
|
||||
|
||||
button1 = lv.button(lv.screen_active())
|
||||
button1.remove_style_all() # Remove the style coming from the theme
|
||||
button1.add_style(style, 0)
|
||||
button1.add_style(style_pr, lv.STATE.PRESSED)
|
||||
button1.set_size(lv.SIZE_CONTENT, lv.SIZE_CONTENT)
|
||||
button1.center()
|
||||
|
||||
label = lv.label(button1)
|
||||
label.set_text("Button")
|
||||
label.center()
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#
|
||||
# Create a style transition on a button to act like a gum when clicked
|
||||
#
|
||||
|
||||
# Properties to transition
|
||||
props = [lv.STYLE.TRANSFORM_WIDTH, lv.STYLE.TRANSFORM_HEIGHT, lv.STYLE.TEXT_LETTER_SPACE, 0]
|
||||
|
||||
# Transition descriptor when going back to the default state.
|
||||
# Add some delay to be sure the press transition is visible even if the press was very short*/
|
||||
transition_dsc_def = lv.style_transition_dsc_t()
|
||||
transition_dsc_def.init(props, lv.anim_t.path_overshoot, 250, 100, None)
|
||||
|
||||
# Transition descriptor when going to pressed state.
|
||||
# No delay, go to pressed state immediately
|
||||
transition_dsc_pr = lv.style_transition_dsc_t()
|
||||
transition_dsc_pr.init(props, lv.anim_t.path_ease_in_out, 250, 0, None)
|
||||
|
||||
# Add only the new transition to the default state
|
||||
style_def = lv.style_t()
|
||||
style_def.init()
|
||||
style_def.set_transition(transition_dsc_def)
|
||||
|
||||
# Add the transition and some transformation to the presses state.
|
||||
style_pr = lv.style_t()
|
||||
style_pr.init()
|
||||
style_pr.set_transform_width(10)
|
||||
style_pr.set_transform_height(-10)
|
||||
style_pr.set_text_letter_space(10)
|
||||
style_pr.set_transition(transition_dsc_pr)
|
||||
|
||||
button1 = lv.button(lv.screen_active())
|
||||
button1.align(lv.ALIGN.CENTER, 0, -80)
|
||||
button1.add_style(style_pr, lv.STATE.PRESSED)
|
||||
button1.add_style(style_def, 0)
|
||||
|
||||
label = lv.label(button1)
|
||||
label.set_text("Gum")
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
def event_handler(e):
|
||||
code = e.get_code()
|
||||
obj = e.get_target_obj()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
id = obj.get_selected_button()
|
||||
txt = obj.get_button_text(id)
|
||||
|
||||
print("%s was pressed"%txt)
|
||||
|
||||
buttonm_map = ["1", "2", "3", "4", "5", "\n",
|
||||
"6", "7", "8", "9", "0", "\n",
|
||||
"Action1", "Action2", ""]
|
||||
|
||||
buttonm1 = lv.buttonmatrix(lv.screen_active())
|
||||
buttonm1.set_map(buttonm_map)
|
||||
buttonm1.set_button_width(10, 2) # Make "Action1" twice as wide as "Action2"
|
||||
buttonm1.set_button_ctrl(10, lv.buttonmatrix.CTRL.CHECKABLE)
|
||||
buttonm1.set_button_ctrl(11, lv.buttonmatrix.CTRL.CHECKED)
|
||||
buttonm1.align(lv.ALIGN.CENTER, 0, 0)
|
||||
buttonm1.add_event_cb(event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,64 +0,0 @@
|
||||
def event_cb(e):
|
||||
obj = e.get_target_obj()
|
||||
id = obj.get_selected_button()
|
||||
if id == 0:
|
||||
prev = True
|
||||
else:
|
||||
prev = False
|
||||
if id == 6:
|
||||
next = True
|
||||
else:
|
||||
next = False
|
||||
if prev or next:
|
||||
# Find the checked butto
|
||||
for i in range(7):
|
||||
if obj.has_button_ctrl(i, lv.buttonmatrix.CTRL.CHECKED):
|
||||
break
|
||||
if prev and i > 1:
|
||||
i-=1
|
||||
elif next and i < 5:
|
||||
i+=1
|
||||
|
||||
obj.set_button_ctrl(i, lv.buttonmatrix.CTRL.CHECKED)
|
||||
|
||||
#
|
||||
# Make a button group
|
||||
#
|
||||
|
||||
style_bg = lv.style_t()
|
||||
style_bg.init()
|
||||
style_bg.set_pad_all(0)
|
||||
style_bg.set_pad_gap(0)
|
||||
style_bg.set_clip_corner(True)
|
||||
style_bg.set_radius(lv.RADIUS_CIRCLE)
|
||||
style_bg.set_border_width(0)
|
||||
|
||||
|
||||
style_button = lv.style_t()
|
||||
style_button.init()
|
||||
style_button.set_radius(0)
|
||||
style_button.set_border_width(1)
|
||||
style_button.set_border_opa(lv.OPA._50)
|
||||
style_button.set_border_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
style_button.set_border_side(lv.BORDER_SIDE.INTERNAL)
|
||||
style_button.set_radius(0)
|
||||
|
||||
map = [lv.SYMBOL.LEFT,"1","2", "3", "4", "5",lv.SYMBOL.RIGHT, ""]
|
||||
|
||||
buttonm = lv.buttonmatrix(lv.screen_active())
|
||||
buttonm.set_map(map)
|
||||
buttonm.add_style(style_bg, 0)
|
||||
buttonm.add_style(style_button, lv.PART.ITEMS)
|
||||
buttonm.add_event_cb(event_cb, lv.EVENT.VALUE_CHANGED, None)
|
||||
buttonm.set_size(225, 35)
|
||||
|
||||
# Allow selecting on one number at time
|
||||
buttonm.set_button_ctrl_all(lv.buttonmatrix.CTRL.CHECKABLE)
|
||||
buttonm.clear_button_ctrl(0, lv.buttonmatrix.CTRL.CHECKABLE)
|
||||
buttonm.clear_button_ctrl(6, lv.buttonmatrix.CTRL.CHECKABLE)
|
||||
|
||||
buttonm.set_one_checked(True)
|
||||
buttonm.set_button_ctrl(1, lv.buttonmatrix.CTRL.CHECKED)
|
||||
|
||||
buttonm.center()
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
|
||||
def event_handler(e):
|
||||
code = e.get_code()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
source = e.get_current_target_obj()
|
||||
date = lv.calendar_date_t()
|
||||
if source.get_pressed_date(date) == lv.RESULT.OK:
|
||||
calendar.set_today_date(date.year, date.month, date.day)
|
||||
print("Clicked date: %02d.%02d.%02d"%(date.day, date.month, date.year))
|
||||
|
||||
|
||||
calendar = lv.calendar(lv.screen_active())
|
||||
calendar.set_size(200, 200)
|
||||
calendar.align(lv.ALIGN.CENTER, 0, 20)
|
||||
calendar.add_event_cb(event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
calendar.set_today_date(2021, 02, 23)
|
||||
calendar.set_showed_date(2021, 02)
|
||||
|
||||
# Highlight a few days
|
||||
highlighted_days=[
|
||||
lv.calendar_date_t({'year':2021, 'month':2, 'day':6}),
|
||||
lv.calendar_date_t({'year':2021, 'month':2, 'day':11}),
|
||||
lv.calendar_date_t({'year':2021, 'month':2, 'day':22})
|
||||
]
|
||||
|
||||
calendar.set_highlighted_dates(highlighted_days, len(highlighted_days))
|
||||
|
||||
lv.calendar_header_dropdown(calendar)
|
||||
@@ -1,87 +0,0 @@
|
||||
_CANVAS_WIDTH = 200
|
||||
_CANVAS_HEIGHT = 150
|
||||
LV_IMAGE_ZOOM_NONE = 256
|
||||
|
||||
rect_dsc = lv.draw_rect_dsc_t()
|
||||
rect_dsc.init()
|
||||
rect_dsc.radius = 10
|
||||
rect_dsc.bg_opa = lv.OPA.COVER
|
||||
rect_dsc.bg_grad.dir = lv.GRAD_DIR.HOR
|
||||
|
||||
rect_dsc.bg_grad.stops = [
|
||||
lv.gradient_stop_t({'color': lv.palette_main(lv.PALETTE.RED)}),
|
||||
lv.gradient_stop_t({'color': lv.palette_main(lv.PALETTE.BLUE), 'frac':0xff})
|
||||
]
|
||||
|
||||
rect_dsc.border_width = 2
|
||||
rect_dsc.border_opa = lv.OPA._90
|
||||
rect_dsc.border_color = lv.color_white()
|
||||
rect_dsc.shadow_width = 5
|
||||
rect_dsc.shadow_offset_x = 5
|
||||
rect_dsc.shadow_offset_y = 5
|
||||
|
||||
label_dsc = lv.draw_label_dsc_t()
|
||||
label_dsc.init()
|
||||
label_dsc.color = lv.palette_main(lv.PALETTE.ORANGE)
|
||||
label_dsc.text = "Some text on text canvas"
|
||||
|
||||
cbuf = bytearray(_CANVAS_WIDTH * _CANVAS_HEIGHT * 4)
|
||||
# cbuf2 = bytearray(_CANVAS_WIDTH * _CANVAS_HEIGHT * 4)
|
||||
|
||||
canvas = lv.canvas(lv.screen_active())
|
||||
canvas.set_buffer(cbuf, _CANVAS_WIDTH, _CANVAS_HEIGHT, lv.COLOR_FORMAT.NATIVE)
|
||||
canvas.center()
|
||||
canvas.fill_bg(lv.palette_lighten(lv.PALETTE.GREY, 3), lv.OPA.COVER)
|
||||
|
||||
layer = lv.layer_t()
|
||||
canvas.init_layer(layer);
|
||||
|
||||
coords_rect = lv.area_t()
|
||||
coords_rect.x1 = 70
|
||||
coords_rect.y1 = 60
|
||||
coords_rect.x2 = 100
|
||||
coords_rect.y2 = 70
|
||||
|
||||
lv.draw_rect(layer, rect_dsc, coords_rect)
|
||||
|
||||
coords_text = lv.area_t()
|
||||
coords_text.x1 = 40
|
||||
coords_text.y1 = 80
|
||||
coords_text.x2 = 100
|
||||
coords_text.y2 = 120
|
||||
|
||||
lv.draw_label(layer, label_dsc, coords_text)
|
||||
|
||||
|
||||
|
||||
canvas.finish_layer(layer)
|
||||
|
||||
|
||||
# Test the rotation. It requires another buffer where the original image is stored.
|
||||
# So copy the current image to buffer and rotate it to the canvas
|
||||
|
||||
image = lv.image_dsc_t()
|
||||
|
||||
image.data = cbuf[:]
|
||||
image.header.cf = lv.COLOR_FORMAT.NATIVE
|
||||
image.header.w = _CANVAS_WIDTH
|
||||
image.header.h = _CANVAS_HEIGHT
|
||||
|
||||
canvas.fill_bg(lv.palette_lighten(lv.PALETTE.GREY, 3), lv.OPA.COVER)
|
||||
|
||||
|
||||
image_dsc = lv.draw_image_dsc_t()
|
||||
image_dsc.init();
|
||||
image_dsc.rotation = 120;
|
||||
image_dsc.src = image;
|
||||
image_dsc.pivot.x = _CANVAS_WIDTH // 2;
|
||||
image_dsc.pivot.y = _CANVAS_HEIGHT // 2;
|
||||
|
||||
coords_image = lv.area_t()
|
||||
coords_image.x1 = 0
|
||||
coords_image.y1 = 0
|
||||
coords_image.x2 = _CANVAS_WIDTH - 1
|
||||
coords_image.y2 = _CANVAS_HEIGHT - 1
|
||||
|
||||
lv.draw_image(layer, image_dsc, coords_image)
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
pass
|
||||
@@ -1,44 +0,0 @@
|
||||
CANVAS_WIDTH = 50
|
||||
CANVAS_HEIGHT = 50
|
||||
|
||||
LV_COLOR_SIZE = 32
|
||||
#
|
||||
# Draw a rectangle to the canvas
|
||||
#
|
||||
# Create a buffer for the canvas
|
||||
cbuf = bytearray((LV_COLOR_SIZE // 8) * CANVAS_WIDTH * CANVAS_HEIGHT)
|
||||
|
||||
# Create a canvas and initialize its palette*/
|
||||
canvas = lv.canvas(lv.screen_active())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.COLOR_FORMAT.NATIVE)
|
||||
|
||||
canvas.fill_bg(lv.color_hex3(0xccc), lv.OPA.COVER)
|
||||
canvas.center()
|
||||
|
||||
dsc = lv.draw_rect_dsc_t()
|
||||
dsc.init()
|
||||
|
||||
dsc.bg_color = lv.palette_main(lv.PALETTE.RED)
|
||||
dsc.border_color = lv.palette_main(lv.PALETTE.BLUE)
|
||||
dsc.border_width = 3
|
||||
dsc.outline_color = lv.palette_main(lv.PALETTE.GREEN)
|
||||
dsc.outline_width = 2
|
||||
dsc.outline_pad = 2
|
||||
dsc.outline_opa = lv.OPA._50
|
||||
dsc.radius = 5
|
||||
dsc.border_width = 3
|
||||
|
||||
|
||||
coords = lv.area_t()
|
||||
coords.x1 = 10
|
||||
coords.y1 = 10
|
||||
coords.x2 = 30
|
||||
coords.y2 = 20
|
||||
|
||||
layer = lv.layer_t()
|
||||
canvas.init_layer(layer);
|
||||
|
||||
lv.draw_rect(layer, dsc, coords)
|
||||
|
||||
canvas.finish_layer(layer)
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
import fs_driver
|
||||
|
||||
CANVAS_WIDTH = 50
|
||||
CANVAS_HEIGHT = 50
|
||||
|
||||
LV_COLOR_SIZE = 32
|
||||
|
||||
#
|
||||
# Draw a text to the canvas
|
||||
#
|
||||
|
||||
# Create a buffer for the canvas
|
||||
cbuf = bytearray((LV_COLOR_SIZE // 8) * CANVAS_WIDTH * CANVAS_HEIGHT)
|
||||
|
||||
# Create a canvas and initialize its palette
|
||||
canvas = lv.canvas(lv.screen_active())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.COLOR_FORMAT.NATIVE)
|
||||
canvas.fill_bg(lv.color_hex3(0xccc), lv.OPA.COVER)
|
||||
canvas.center()
|
||||
|
||||
dsc = lv.draw_label_dsc_t()
|
||||
dsc.init()
|
||||
|
||||
dsc.color = lv.palette_main(lv.PALETTE.RED)
|
||||
|
||||
# get the directory in which the script is running
|
||||
try:
|
||||
script_path = __file__[:__file__.rfind('/')] if __file__.find('/') >= 0 else '.'
|
||||
except NameError:
|
||||
print("Could not find script path")
|
||||
script_path = ''
|
||||
|
||||
if script_path != '':
|
||||
try:
|
||||
dsc.font = lv.font_montserrat_18
|
||||
except:
|
||||
# needed for dynamic font loading
|
||||
fs_drv = lv.fs_drv_t()
|
||||
fs_driver.fs_register(fs_drv, 'S')
|
||||
|
||||
print("Loading font montserrat_18")
|
||||
font_montserrat_18 = lv.font_t()
|
||||
lv.binfont_load(font_montserrat_18, "S:" + script_path + "/../../assets/font/montserrat-18.fnt")
|
||||
if not font_montserrat_18:
|
||||
print("Font loading failed")
|
||||
else:
|
||||
dsc.font = font_montserrat_18
|
||||
|
||||
dsc.decor = lv.TEXT_DECOR.UNDERLINE
|
||||
dsc.text = "Hello"
|
||||
|
||||
|
||||
layer = lv.layer_t()
|
||||
canvas.init_layer(layer);
|
||||
|
||||
|
||||
coords = lv.area_t()
|
||||
coords.x1 = 10
|
||||
coords.y1 = 10
|
||||
coords.x2 = 40
|
||||
coords.y2 = 30
|
||||
|
||||
|
||||
lv.draw_label(layer, dsc, coords)
|
||||
|
||||
canvas.finish_layer(layer)
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
CANVAS_WIDTH = 50
|
||||
CANVAS_HEIGHT = 50
|
||||
|
||||
LV_COLOR_SIZE = 32
|
||||
|
||||
#
|
||||
# Draw an arc to the canvas
|
||||
#
|
||||
|
||||
# Create a buffer for the canvas
|
||||
cbuf = bytearray((LV_COLOR_SIZE // 8) * CANVAS_WIDTH * CANVAS_HEIGHT)
|
||||
|
||||
# Create a canvas and initialize its palette
|
||||
canvas = lv.canvas(lv.screen_active())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.COLOR_FORMAT.NATIVE)
|
||||
canvas.fill_bg(lv.color_hex3(0xccc), lv.OPA.COVER)
|
||||
canvas.center()
|
||||
|
||||
dsc = lv.draw_arc_dsc_t()
|
||||
dsc.init()
|
||||
dsc.color = lv.palette_main(lv.PALETTE.RED)
|
||||
dsc.width = 5
|
||||
dsc.center.x = 25
|
||||
dsc.center.y = 25
|
||||
dsc.width = 15
|
||||
dsc.start_angle = 0
|
||||
dsc.end_angle = 220
|
||||
|
||||
layer = lv.layer_t()
|
||||
canvas.init_layer(layer);
|
||||
|
||||
lv.draw_arc(layer, dsc)
|
||||
|
||||
canvas.finish_layer(layer)
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
CANVAS_WIDTH = 50
|
||||
CANVAS_HEIGHT = 50
|
||||
|
||||
LV_COLOR_SIZE = 32
|
||||
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../../assets/img_star.png','rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find star.png")
|
||||
sys.exit()
|
||||
|
||||
image_star_argb = lv.image_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
#
|
||||
# Draw an image to the canvas
|
||||
#
|
||||
|
||||
# Create a buffer for the canvas
|
||||
cbuf = bytearray((LV_COLOR_SIZE // 8) * CANVAS_WIDTH * CANVAS_HEIGHT)
|
||||
|
||||
# Create a canvas and initialize its palette
|
||||
canvas = lv.canvas(lv.screen_active())
|
||||
canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.COLOR_FORMAT.NATIVE)
|
||||
canvas.fill_bg(lv.color_hex3(0xccc), lv.OPA.COVER)
|
||||
canvas.center()
|
||||
|
||||
dsc = lv.draw_image_dsc_t()
|
||||
dsc.init()
|
||||
dsc.src = image_star_argb
|
||||
|
||||
|
||||
|
||||
coords = lv.area_t()
|
||||
coords.x1 = 5
|
||||
coords.y1 = 5
|
||||
coords.x2 = 5 + 29
|
||||
coords.y2 = 5 + 28
|
||||
|
||||
|
||||
layer = lv.layer_t()
|
||||
canvas.init_layer(layer);
|
||||
|
||||
lv.draw_image(layer, dsc, coords)
|
||||
|
||||
canvas.finish_layer(layer)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user