summaryrefslogtreecommitdiff
path: root/src/libs/lvgl/src
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/lvgl/src')
-rw-r--r--src/libs/lvgl/src/lv_conf_checker.h851
-rw-r--r--src/libs/lvgl/src/lv_core/lv_core.mk12
-rw-r--r--src/libs/lvgl/src/lv_core/lv_debug.c193
-rw-r--r--src/libs/lvgl/src/lv_core/lv_debug.h154
-rw-r--r--src/libs/lvgl/src/lv_core/lv_disp.c178
-rw-r--r--src/libs/lvgl/src/lv_core/lv_disp.h152
-rw-r--r--src/libs/lvgl/src/lv_core/lv_group.c708
-rw-r--r--src/libs/lvgl/src/lv_core/lv_group.h293
-rw-r--r--src/libs/lvgl/src/lv_core/lv_indev.c1240
-rw-r--r--src/libs/lvgl/src/lv_core/lv_indev.h159
-rw-r--r--src/libs/lvgl/src/lv_core/lv_obj.c2649
-rw-r--r--src/libs/lvgl/src/lv_core/lv_obj.h1025
-rw-r--r--src/libs/lvgl/src/lv_core/lv_refr.c612
-rw-r--r--src/libs/lvgl/src/lv_core/lv_refr.h93
-rw-r--r--src/libs/lvgl/src/lv_core/lv_style.c353
-rw-r--r--src/libs/lvgl/src/lv_core/lv_style.h301
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw.c191
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw.h109
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw.mk15
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_arc.c251
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_arc.h52
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_basic.c783
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_basic.h82
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_img.c601
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_img.h172
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_label.c319
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_label.h80
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_line.c637
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_line.h48
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_rect.c1521
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_rect.h47
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_triangle.c343
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_draw_triangle.h58
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_img_cache.c206
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_img_cache.h78
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_img_decoder.c756
-rw-r--r--src/libs/lvgl/src/lv_draw/lv_img_decoder.h357
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font.c84
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font.h164
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font.mk12
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_fmt_txt.c479
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_fmt_txt.h235
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_12.c1628
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c3419
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_16.c2116
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_22.c3224
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_28.c4609
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c2451
-rw-r--r--src/libs/lvgl/src/lv_font/lv_font_unscii_8.c462
-rw-r--r--src/libs/lvgl/src/lv_font/lv_symbol_def.h159
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal.h40
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal.mk8
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_disp.c359
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_disp.h298
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_indev.c158
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_indev.h213
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_tick.c100
-rw-r--r--src/libs/lvgl/src/lv_hal/lv_hal_tick.h70
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_anim.c474
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_anim.h331
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_area.c210
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_area.h186
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_async.c75
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_async.h62
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_bidi.c544
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_bidi.h76
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_circ.c79
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_circ.h77
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_color.c171
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_color.h526
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_fs.c642
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_fs.h299
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_gc.c51
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_gc.h77
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_ll.c422
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_ll.h160
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_log.c78
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_log.h144
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_math.c203
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_math.h85
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_mem.c481
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_mem.h113
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_misc.mk22
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_printf.c852
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_printf.h75
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_task.c382
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_task.h177
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_templ.c40
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_templ.h37
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_txt.c845
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_txt.h211
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_types.h64
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_utils.c115
-rw-r--r--src/libs/lvgl/src/lv_misc/lv_utils.h66
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_arc.c305
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_arc.h123
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_bar.c548
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_bar.h193
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_btn.c723
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_btn.h329
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_btnm.c1125
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_btnm.h276
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_calendar.c983
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_calendar.h229
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_canvas.c870
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_canvas.h265
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cb.c338
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cb.h173
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_chart.c1557
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_chart.h395
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cont.c710
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cont.h210
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cpicker.c1068
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_cpicker.h263
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_ddlist.c1032
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_ddlist.h269
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_gauge.c473
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_gauge.h233
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_img.c435
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_img.h179
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_imgbtn.c437
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_imgbtn.h230
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_kb.c471
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_kb.h207
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_label.c1441
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_label.h351
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_led.c258
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_led.h126
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_line.c308
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_line.h147
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_list.c1067
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_list.h359
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_lmeter.c422
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_lmeter.h179
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_mbox.c573
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_mbox.h212
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_objx.mk37
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_objx_templ.c229
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_objx_templ.h108
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_page.c1263
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_page.h416
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_preload.c444
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_preload.h197
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_roller.c733
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_roller.h212
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_slider.c620
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_slider.h216
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_spinbox.c479
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_spinbox.h188
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_sw.c403
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_sw.h159
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_ta.c1948
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_ta.h478
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_table.c894
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_table.h268
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_tabview.c1175
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_tabview.h231
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_tileview.c584
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_tileview.h178
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_win.c618
-rw-r--r--src/libs/lvgl/src/lv_objx/lv_win.h302
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme.c124
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme.h382
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_alien.c958
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_alien.h59
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_default.c477
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_default.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_material.c936
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_material.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_mono.c525
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_mono.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_nemo.c929
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_nemo.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_night.c847
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_night.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_templ.c473
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_templ.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_zen.c902
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_theme_zen.h60
-rw-r--r--src/libs/lvgl/src/lv_themes/lv_themes.mk14
-rw-r--r--src/libs/lvgl/src/lv_version.h66
181 files changed, 0 insertions, 84003 deletions
diff --git a/src/libs/lvgl/src/lv_conf_checker.h b/src/libs/lvgl/src/lv_conf_checker.h
deleted file mode 100644
index 4b0d9a67..00000000
--- a/src/libs/lvgl/src/lv_conf_checker.h
+++ /dev/null
@@ -1,851 +0,0 @@
-/**
- * GENERATED FILE, DO NOT EDIT IT!
- * @file lv_conf_checker.h
- * Make sure all the defines of lv_conf.h have a default value
-**/
-
-#ifndef LV_CONF_CHECKER_H
-#define LV_CONF_CHECKER_H
-/* clang-format off */
-
-#include <stdint.h>
-
-/*====================
- Graphical settings
- *====================*/
-
-/* Maximal horizontal and vertical resolution to support by the library.*/
-#ifndef LV_HOR_RES_MAX
-#define LV_HOR_RES_MAX (480)
-#endif
-#ifndef LV_VER_RES_MAX
-#define LV_VER_RES_MAX (320)
-#endif
-
-/* Color depth:
- * - 1: 1 byte per pixel
- * - 8: RGB233
- * - 16: RGB565
- * - 32: ARGB8888
- */
-#ifndef LV_COLOR_DEPTH
-#define LV_COLOR_DEPTH 16
-#endif
-
-/* Swap the 2 bytes of RGB565 color.
- * Useful if the display has a 8 bit interface (e.g. SPI)*/
-#ifndef LV_COLOR_16_SWAP
-#define LV_COLOR_16_SWAP 0
-#endif
-
-/* 1: Enable screen transparency.
- * Useful for OSD or other overlapping GUIs.
- * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be modified: `style.body.opa = ...`*/
-#ifndef LV_COLOR_SCREEN_TRANSP
-#define LV_COLOR_SCREEN_TRANSP 0
-#endif
-
-/*Images pixels with this color will not be drawn (with chroma keying)*/
-#ifndef LV_COLOR_TRANSP
-#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/
-#endif
-
-/* Enable chroma keying for indexed images. */
-#ifndef LV_INDEXED_CHROMA
-#define LV_INDEXED_CHROMA 1
-#endif
-
-/* Enable anti-aliasing (lines, and radiuses will be smoothed) */
-#ifndef LV_ANTIALIAS
-#define LV_ANTIALIAS 1
-#endif
-
-/* Default display refresh period.
- * Can be changed in the display driver (`lv_disp_drv_t`).*/
-#ifndef LV_DISP_DEF_REFR_PERIOD
-#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/
-#endif
-
-/* Dot Per Inch: used to initialize default sizes.
- * E.g. a button with width = LV_DPI / 2 -> half inch wide
- * (Not so important, you can adjust it to modify default sizes and spaces)*/
-#ifndef LV_DPI
-#define LV_DPI 100 /*[px]*/
-#endif
-
-/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */
-
-/*=========================
- Memory manager settings
- *=========================*/
-
-/* LittelvGL's internal memory manager's settings.
- * The graphical objects and other related data are stored here. */
-
-/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and `lv_mem_free` */
-#ifndef LV_MEM_CUSTOM
-#define LV_MEM_CUSTOM 0
-#endif
-#if LV_MEM_CUSTOM == 0
-/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
-#ifndef LV_MEM_SIZE
-# define LV_MEM_SIZE (32U * 1024U)
-#endif
-
-/* Complier prefix for a big array declaration */
-#ifndef LV_MEM_ATTR
-# define LV_MEM_ATTR
-#endif
-
-/* Set an address for the memory pool instead of allocating it as an array.
- * Can be in external SRAM too. */
-#ifndef LV_MEM_ADR
-# define LV_MEM_ADR 0
-#endif
-
-/* Automatically defrag. on free. Defrag. means joining the adjacent free cells. */
-#ifndef LV_MEM_AUTO_DEFRAG
-# define LV_MEM_AUTO_DEFRAG 1
-#endif
-#else /*LV_MEM_CUSTOM*/
-#ifndef LV_MEM_CUSTOM_INCLUDE
-# define LV_MEM_CUSTOM_INCLUDE <stdlib.h> /*Header for the dynamic memory function*/
-#endif
-#ifndef LV_MEM_CUSTOM_ALLOC
-# define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/
-#endif
-#ifndef LV_MEM_CUSTOM_FREE
-# define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/
-#endif
-#endif /*LV_MEM_CUSTOM*/
-
-/* Garbage Collector settings
- * Used if lvgl is binded to higher level language and the memory is managed by that language */
-#ifndef LV_ENABLE_GC
-#define LV_ENABLE_GC 0
-#endif
-#if LV_ENABLE_GC != 0
-#ifndef LV_GC_INCLUDE
-# define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/
-#endif
-#ifndef LV_MEM_CUSTOM_REALLOC
-# define LV_MEM_CUSTOM_REALLOC your_realloc /*Wrapper to realloc*/
-#endif
-#ifndef LV_MEM_CUSTOM_GET_SIZE
-# define LV_MEM_CUSTOM_GET_SIZE your_mem_get_size /*Wrapper to lv_mem_get_size*/
-#endif
-#endif /* LV_ENABLE_GC */
-
-/*=======================
- Input device settings
- *=======================*/
-
-/* Input device default settings.
- * Can be changed in the Input device driver (`lv_indev_drv_t`)*/
-
-/* Input device read period in milliseconds */
-#ifndef LV_INDEV_DEF_READ_PERIOD
-#define LV_INDEV_DEF_READ_PERIOD 30
-#endif
-
-/* Drag threshold in pixels */
-#ifndef LV_INDEV_DEF_DRAG_LIMIT
-#define LV_INDEV_DEF_DRAG_LIMIT 10
-#endif
-
-/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
-#ifndef LV_INDEV_DEF_DRAG_THROW
-#define LV_INDEV_DEF_DRAG_THROW 20
-#endif
-
-/* Long press time in milliseconds.
- * Time to send `LV_EVENT_LONG_PRESSSED`) */
-#ifndef LV_INDEV_DEF_LONG_PRESS_TIME
-#define LV_INDEV_DEF_LONG_PRESS_TIME 400
-#endif
-
-/* Repeated trigger period in long press [ms]
- * Time between `LV_EVENT_LONG_PRESSED_REPEAT */
-#ifndef LV_INDEV_DEF_LONG_PRESS_REP_TIME
-#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100
-#endif
-
-/*==================
- * Feature usage
- *==================*/
-
-/*1: Enable the Animations */
-#ifndef LV_USE_ANIMATION
-#define LV_USE_ANIMATION 1
-#endif
-#if LV_USE_ANIMATION
-
-/*Declare the type of the user data of animations (can be e.g. `void *`, `int`, `struct`)*/
-
-#endif
-
-/* 1: Enable shadow drawing*/
-#ifndef LV_USE_SHADOW
-#define LV_USE_SHADOW 1
-#endif
-
-/* 1: Enable object groups (for keyboard/encoder navigation) */
-#ifndef LV_USE_GROUP
-#define LV_USE_GROUP 1
-#endif
-#if LV_USE_GROUP
-#endif /*LV_USE_GROUP*/
-
-/* 1: Enable GPU interface*/
-#ifndef LV_USE_GPU
-#define LV_USE_GPU 1
-#endif
-
-/* 1: Enable file system (might be required for images */
-#ifndef LV_USE_FILESYSTEM
-#define LV_USE_FILESYSTEM 1
-#endif
-#if LV_USE_FILESYSTEM
-/*Declare the type of the user data of file system drivers (can be e.g. `void *`, `int`, `struct`)*/
-#endif
-
-/*1: Add a `user_data` to drivers and objects*/
-#ifndef LV_USE_USER_DATA
-#define LV_USE_USER_DATA 0
-#endif
-
-/*========================
- * Image decoder and cache
- *========================*/
-
-/* 1: Enable indexed (palette) images */
-#ifndef LV_IMG_CF_INDEXED
-#define LV_IMG_CF_INDEXED 1
-#endif
-
-/* 1: Enable alpha indexed images */
-#ifndef LV_IMG_CF_ALPHA
-#define LV_IMG_CF_ALPHA 1
-#endif
-
-/* Default image cache size. Image caching keeps the images opened.
- * If only the built-in image formats are used there is no real advantage of caching.
- * (I.e. no new image decoder is added)
- * With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images.
- * However the opened images might consume additional RAM.
- * LV_IMG_CACHE_DEF_SIZE must be >= 1 */
-#ifndef LV_IMG_CACHE_DEF_SIZE
-#define LV_IMG_CACHE_DEF_SIZE 1
-#endif
-
-/*Declare the type of the user data of image decoder (can be e.g. `void *`, `int`, `struct`)*/
-
-/*=====================
- * Compiler settings
- *====================*/
-/* Define a custom attribute to `lv_tick_inc` function */
-#ifndef LV_ATTRIBUTE_TICK_INC
-#define LV_ATTRIBUTE_TICK_INC
-#endif
-
-/* Define a custom attribute to `lv_task_handler` function */
-#ifndef LV_ATTRIBUTE_TASK_HANDLER
-#define LV_ATTRIBUTE_TASK_HANDLER
-#endif
-
-/* With size optimization (-Os) the compiler might not align data to
- * 4 or 8 byte boundary. This alignment will be explicitly applied where needed.
- * E.g. __attribute__((aligned(4))) */
-#ifndef LV_ATTRIBUTE_MEM_ALIGN
-#define LV_ATTRIBUTE_MEM_ALIGN
-#endif
-
-/* Attribute to mark large constant arrays for example
- * font's bitmaps */
-#ifndef LV_ATTRIBUTE_LARGE_CONST
-#define LV_ATTRIBUTE_LARGE_CONST
-#endif
-
-/* Export integer constant to binding.
- * This macro is used with constants in the form of LV_<CONST> that
- * should also appear on lvgl binding API such as Micropython
- *
- * The default value just prevents a GCC warning.
- */
-#ifndef LV_EXPORT_CONST_INT
-#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning
-#endif
-
-/*===================
- * HAL settings
- *==================*/
-
-/* 1: use a custom tick source.
- * It removes the need to manually update the tick with `lv_tick_inc`) */
-#ifndef LV_TICK_CUSTOM
-#define LV_TICK_CUSTOM 0
-#endif
-#if LV_TICK_CUSTOM == 1
-#ifndef LV_TICK_CUSTOM_INCLUDE
-#define LV_TICK_CUSTOM_INCLUDE "something.h" /*Header for the sys time function*/
-#endif
-#ifndef LV_TICK_CUSTOM_SYS_TIME_EXPR
-#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current systime in ms*/
-#endif
-#endif /*LV_TICK_CUSTOM*/
-
-
-/*================
- * Log settings
- *===============*/
-
-/*1: Enable the log module*/
-#ifndef LV_USE_LOG
-#define LV_USE_LOG 0
-#endif
-#if LV_USE_LOG
-/* How important log should be added:
- * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information
- * LV_LOG_LEVEL_INFO Log important events
- * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem
- * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
- * LV_LOG_LEVEL_NONE Do not log anything
- */
-#ifndef LV_LOG_LEVEL
-# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
-#endif
-
-/* 1: Print the log with 'printf';
- * 0: user need to register a callback with `lv_log_register_print_cb`*/
-#ifndef LV_LOG_PRINTF
-# define LV_LOG_PRINTF 0
-#endif
-#endif /*LV_USE_LOG*/
-
-/*=================
- * Debug settings
- *================*/
-
-/* If Debug is enabled LittelvGL validates the parameters of the functions.
- * If an invalid parameter is found an error log message is printed and
- * the MCU halts at the error. (`LV_USE_LOG` should be enabled)
- * If you are debugging the MCU you can pause
- * the debugger to see exactly where the issue is.
- *
- * The behavior of asserts can be overwritten by redefining them here.
- * E.g. #define LV_ASSERT_MEM(p) <my_assert_code>
- */
-#ifndef LV_USE_DEBUG
-#define LV_USE_DEBUG 1
-#endif
-#if LV_USE_DEBUG
-
-/*Check if the parameter is NULL. (Quite fast) */
-#ifndef LV_USE_ASSERT_NULL
-#define LV_USE_ASSERT_NULL 1
-#endif
-
-/*Checks is the memory is successfully allocated or no. (Quite fast)*/
-#ifndef LV_USE_ASSERT_MEM
-#define LV_USE_ASSERT_MEM 1
-#endif
-
-/* Check the strings.
- * Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow)
- * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
-#ifndef LV_USE_ASSERT_STR
-#define LV_USE_ASSERT_STR 0
-#endif
-
-/* Check NULL, the object's type and existence (e.g. not deleted). (Quite slow)
- * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
-#ifndef LV_USE_ASSERT_OBJ
-#define LV_USE_ASSERT_OBJ 0
-#endif
-
-/*Check if the styles are properly initialized. (Fast)*/
-#ifndef LV_USE_ASSERT_STYLE
-#define LV_USE_ASSERT_STYLE 1
-#endif
-
-#endif /*LV_USE_DEBUG*/
-
-/*================
- * THEME USAGE
- *================*/
-#ifndef LV_THEME_LIVE_UPDATE
-#define LV_THEME_LIVE_UPDATE 0 /*1: Allow theme switching at run time. Uses 8..10 kB of RAM*/
-#endif
-
-#ifndef LV_USE_THEME_TEMPL
-#define LV_USE_THEME_TEMPL 0 /*Just for test*/
-#endif
-#ifndef LV_USE_THEME_DEFAULT
-#define LV_USE_THEME_DEFAULT 0 /*Built mainly from the built-in styles. Consumes very few RAM*/
-#endif
-#ifndef LV_USE_THEME_ALIEN
-#define LV_USE_THEME_ALIEN 0 /*Dark futuristic theme*/
-#endif
-#ifndef LV_USE_THEME_NIGHT
-#define LV_USE_THEME_NIGHT 0 /*Dark elegant theme*/
-#endif
-#ifndef LV_USE_THEME_MONO
-#define LV_USE_THEME_MONO 0 /*Mono color theme for monochrome displays*/
-#endif
-#ifndef LV_USE_THEME_MATERIAL
-#define LV_USE_THEME_MATERIAL 0 /*Flat theme with bold colors and light shadows*/
-#endif
-#ifndef LV_USE_THEME_ZEN
-#define LV_USE_THEME_ZEN 0 /*Peaceful, mainly light theme */
-#endif
-#ifndef LV_USE_THEME_NEMO
-#define LV_USE_THEME_NEMO 0 /*Water-like theme based on the movie "Finding Nemo"*/
-#endif
-
-/*==================
- * FONT USAGE
- *===================*/
-
-/* The built-in fonts contains the ASCII range and some Symbols with 4 bit-per-pixel.
- * The symbols are available via `LV_SYMBOL_...` defines
- * More info about fonts: https://docs.littlevgl.com/#Fonts
- * To create a new font go to: https://littlevgl.com/ttf-font-to-c-array
- */
-
-/* Robot fonts with bpp = 4
- * https://fonts.google.com/specimen/Roboto */
-#ifndef LV_FONT_ROBOTO_12
-#define LV_FONT_ROBOTO_12 0
-#endif
-#ifndef LV_FONT_ROBOTO_16
-#define LV_FONT_ROBOTO_16 1
-#endif
-#ifndef LV_FONT_ROBOTO_22
-#define LV_FONT_ROBOTO_22 0
-#endif
-#ifndef LV_FONT_ROBOTO_28
-#define LV_FONT_ROBOTO_28 0
-#endif
-
-/* Demonstrate special features */
-#ifndef LV_FONT_ROBOTO_12_SUBPX
-#define LV_FONT_ROBOTO_12_SUBPX 1
-#endif
-#ifndef LV_FONT_ROBOTO_28_COMPRESSED
-#define LV_FONT_ROBOTO_28_COMPRESSED 1 /*bpp = 3*/
-#endif
-
-/*Pixel perfect monospace font
- * http://pelulamu.net/unscii/ */
-#ifndef LV_FONT_UNSCII_8
-#define LV_FONT_UNSCII_8 0
-#endif
-
-/* Optionally declare your custom fonts here.
- * You can use these fonts as default font too
- * and they will be available globally. E.g.
- * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
- * LV_FONT_DECLARE(my_font_2)
- */
-#ifndef LV_FONT_CUSTOM_DECLARE
-#define LV_FONT_CUSTOM_DECLARE
-#endif
-
-/*Always set a default font from the built-in fonts*/
-#ifndef LV_FONT_DEFAULT
-#define LV_FONT_DEFAULT &lv_font_roboto_16
-#endif
-
-/* Enable it if you have fonts with a lot of characters.
- * The limit depends on the font size, font face and bpp
- * but with > 10,000 characters if you see issues probably you need to enable it.*/
-#ifndef LV_FONT_FMT_TXT_LARGE
-#define LV_FONT_FMT_TXT_LARGE 0
-#endif
-
-/* Set the pixel order of the display.
- * Important only if "subpx fonts" are used.
- * With "normal" font it doesn't matter.
- */
-#ifndef LV_FONT_SUBPX_BGR
-#define LV_FONT_SUBPX_BGR 0
-#endif
-
-/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/
-
-/*=================
- * Text settings
- *=================*/
-
-/* Select a character encoding for strings.
- * Your IDE or editor should have the same character encoding
- * - LV_TXT_ENC_UTF8
- * - LV_TXT_ENC_ASCII
- * */
-#ifndef LV_TXT_ENC
-#define LV_TXT_ENC LV_TXT_ENC_UTF8
-#endif
-
- /*Can break (wrap) texts on these chars*/
-#ifndef LV_TXT_BREAK_CHARS
-#define LV_TXT_BREAK_CHARS " ,.;:-_"
-#endif
-
-/* If a word is at least this long, will break wherever "prettiest"
- * To disable, set to a value <= 0 */
-#ifndef LV_TXT_LINE_BREAK_LONG_LEN
-#define LV_TXT_LINE_BREAK_LONG_LEN 12
-#endif
-
-/* Minimum number of characters in a long word to put on a line before a break.
- * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
-#ifndef LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN
-#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3
-#endif
-
-/* Minimum number of characters in a long word to put on a line after a break.
- * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
-#ifndef LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN
-#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3
-#endif
-
-/* The control character to use for signalling text recoloring. */
-#ifndef LV_TXT_COLOR_CMD
-#define LV_TXT_COLOR_CMD "#"
-#endif
-
-/* Support bidirectional texts.
- * Allows mixing Left-to-Right and Right-to-Left texts.
- * The direction will be processed according to the Unicode Bidirectioanl Algorithm:
- * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
-#ifndef LV_USE_BIDI
-#define LV_USE_BIDI 0
-#endif
-#if LV_USE_BIDI
-/* Set the default direction. Supported values:
- * `LV_BIDI_DIR_LTR` Left-to-Right
- * `LV_BIDI_DIR_RTL` Right-to-Left
- * `LV_BIDI_DIR_AUTO` detect texts base direction */
-#ifndef LV_BIDI_BASE_DIR_DEF
-#define LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO
-#endif
-#endif
-
-/*Change the built in (v)snprintf functions*/
-#ifndef LV_SPRINTF_CUSTOM
-#define LV_SPRINTF_CUSTOM 0
-#endif
-#if LV_SPRINTF_CUSTOM
-#ifndef LV_SPRINTF_INCLUDE
-# define LV_SPRINTF_INCLUDE <stdio.h>
-#endif
-#ifndef lv_snprintf
-# define lv_snprintf snprintf
-#endif
-#ifndef lv_vsnprintf
-# define lv_vsnprintf vsnprintf
-#endif
-#endif /*LV_SPRINTF_CUSTOM*/
-
-/*===================
- * LV_OBJ SETTINGS
- *==================*/
-
-/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/
-
-/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/
-#ifndef LV_USE_OBJ_REALIGN
-#define LV_USE_OBJ_REALIGN 1
-#endif
-
-/* Enable to make the object clickable on a larger area.
- * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature
- * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and vertically (0..255 px)
- * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions (-32k..+32k px)
- */
-#ifndef LV_USE_EXT_CLICK_AREA
-#define LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_OFF
-#endif
-
-/*==================
- * LV OBJ X USAGE
- *================*/
-/*
- * Documentation of the object types: https://docs.littlevgl.com/#Object-types
- */
-
-/*Arc (dependencies: -)*/
-#ifndef LV_USE_ARC
-#define LV_USE_ARC 1
-#endif
-
-/*Bar (dependencies: -)*/
-#ifndef LV_USE_BAR
-#define LV_USE_BAR 1
-#endif
-
-/*Button (dependencies: lv_cont*/
-#ifndef LV_USE_BTN
-#define LV_USE_BTN 1
-#endif
-#if LV_USE_BTN != 0
-/*Enable button-state animations - draw a circle on click (dependencies: LV_USE_ANIMATION)*/
-#ifndef LV_BTN_INK_EFFECT
-# define LV_BTN_INK_EFFECT 0
-#endif
-#endif
-
-/*Button matrix (dependencies: -)*/
-#ifndef LV_USE_BTNM
-#define LV_USE_BTNM 1
-#endif
-
-/*Calendar (dependencies: -)*/
-#ifndef LV_USE_CALENDAR
-#define LV_USE_CALENDAR 1
-#endif
-
-/*Canvas (dependencies: lv_img)*/
-#ifndef LV_USE_CANVAS
-#define LV_USE_CANVAS 1
-#endif
-
-/*Check box (dependencies: lv_btn, lv_label)*/
-#ifndef LV_USE_CB
-#define LV_USE_CB 1
-#endif
-
-/*Chart (dependencies: -)*/
-#ifndef LV_USE_CHART
-#define LV_USE_CHART 1
-#endif
-#if LV_USE_CHART
-#ifndef LV_CHART_AXIS_TICK_LABEL_MAX_LEN
-# define LV_CHART_AXIS_TICK_LABEL_MAX_LEN 20
-#endif
-#endif
-
-/*Container (dependencies: -*/
-#ifndef LV_USE_CONT
-#define LV_USE_CONT 1
-#endif
-
-/*Color picker (dependencies: -*/
-#ifndef LV_USE_CPICKER
-#define LV_USE_CPICKER 1
-#endif
-
-/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
-#ifndef LV_USE_DDLIST
-#define LV_USE_DDLIST 1
-#endif
-#if LV_USE_DDLIST != 0
-/*Open and close default animation time [ms] (0: no animation)*/
-#ifndef LV_DDLIST_DEF_ANIM_TIME
-# define LV_DDLIST_DEF_ANIM_TIME 200
-#endif
-#endif
-
-/*Gauge (dependencies:lv_bar, lv_lmeter)*/
-#ifndef LV_USE_GAUGE
-#define LV_USE_GAUGE 1
-#endif
-
-/*Image (dependencies: lv_label*/
-#ifndef LV_USE_IMG
-#define LV_USE_IMG 1
-#endif
-
-/*Image Button (dependencies: lv_btn*/
-#ifndef LV_USE_IMGBTN
-#define LV_USE_IMGBTN 1
-#endif
-#if LV_USE_IMGBTN
-/*1: The imgbtn requires left, mid and right parts and the width can be set freely*/
-#ifndef LV_IMGBTN_TILED
-# define LV_IMGBTN_TILED 0
-#endif
-#endif
-
-/*Keyboard (dependencies: lv_btnm)*/
-#ifndef LV_USE_KB
-#define LV_USE_KB 1
-#endif
-
-/*Label (dependencies: -*/
-#ifndef LV_USE_LABEL
-#define LV_USE_LABEL 1
-#endif
-#if LV_USE_LABEL != 0
-/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/
-#ifndef LV_LABEL_DEF_SCROLL_SPEED
-# define LV_LABEL_DEF_SCROLL_SPEED 25
-#endif
-
-/* Waiting period at beginning/end of animation cycle */
-#ifndef LV_LABEL_WAIT_CHAR_COUNT
-# define LV_LABEL_WAIT_CHAR_COUNT 3
-#endif
-
-/*Enable selecting text of the label */
-#ifndef LV_LABEL_TEXT_SEL
-# define LV_LABEL_TEXT_SEL 0
-#endif
-
-/*Store extra some info in labels (12 bytes) to speed up drawing of very long texts*/
-#ifndef LV_LABEL_LONG_TXT_HINT
-# define LV_LABEL_LONG_TXT_HINT 0
-#endif
-#endif
-
-/*LED (dependencies: -)*/
-#ifndef LV_USE_LED
-#define LV_USE_LED 1
-#endif
-
-/*Line (dependencies: -*/
-#ifndef LV_USE_LINE
-#define LV_USE_LINE 1
-#endif
-
-/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons ))*/
-#ifndef LV_USE_LIST
-#define LV_USE_LIST 1
-#endif
-#if LV_USE_LIST != 0
-/*Default animation time of focusing to a list element [ms] (0: no animation) */
-#ifndef LV_LIST_DEF_ANIM_TIME
-# define LV_LIST_DEF_ANIM_TIME 100
-#endif
-#endif
-
-/*Line meter (dependencies: *;)*/
-#ifndef LV_USE_LMETER
-#define LV_USE_LMETER 1
-#endif
-
-/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
-#ifndef LV_USE_MBOX
-#define LV_USE_MBOX 1
-#endif
-
-/*Page (dependencies: lv_cont)*/
-#ifndef LV_USE_PAGE
-#define LV_USE_PAGE 1
-#endif
-#if LV_USE_PAGE != 0
-/*Focus default animation time [ms] (0: no animation)*/
-#ifndef LV_PAGE_DEF_ANIM_TIME
-# define LV_PAGE_DEF_ANIM_TIME 400
-#endif
-#endif
-
-/*Preload (dependencies: lv_arc, lv_anim)*/
-#ifndef LV_USE_PRELOAD
-#define LV_USE_PRELOAD 1
-#endif
-#if LV_USE_PRELOAD != 0
-#ifndef LV_PRELOAD_DEF_ARC_LENGTH
-# define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/
-#endif
-#ifndef LV_PRELOAD_DEF_SPIN_TIME
-# define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/
-#endif
-#ifndef LV_PRELOAD_DEF_ANIM
-# define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC
-#endif
-#endif
-
-/*Roller (dependencies: lv_ddlist)*/
-#ifndef LV_USE_ROLLER
-#define LV_USE_ROLLER 1
-#endif
-#if LV_USE_ROLLER != 0
-/*Focus animation time [ms] (0: no animation)*/
-#ifndef LV_ROLLER_DEF_ANIM_TIME
-# define LV_ROLLER_DEF_ANIM_TIME 200
-#endif
-
-/*Number of extra "pages" when the roller is infinite*/
-#ifndef LV_ROLLER_INF_PAGES
-# define LV_ROLLER_INF_PAGES 7
-#endif
-#endif
-
-/*Slider (dependencies: lv_bar)*/
-#ifndef LV_USE_SLIDER
-#define LV_USE_SLIDER 1
-#endif
-
-/*Spinbox (dependencies: lv_ta)*/
-#ifndef LV_USE_SPINBOX
-#define LV_USE_SPINBOX 1
-#endif
-
-/*Switch (dependencies: lv_slider)*/
-#ifndef LV_USE_SW
-#define LV_USE_SW 1
-#endif
-
-/*Text area (dependencies: lv_label, lv_page)*/
-#ifndef LV_USE_TA
-#define LV_USE_TA 1
-#endif
-#if LV_USE_TA != 0
-#ifndef LV_TA_DEF_CURSOR_BLINK_TIME
-# define LV_TA_DEF_CURSOR_BLINK_TIME 400 /*ms*/
-#endif
-#ifndef LV_TA_DEF_PWD_SHOW_TIME
-# define LV_TA_DEF_PWD_SHOW_TIME 1500 /*ms*/
-#endif
-#endif
-
-/*Table (dependencies: lv_label)*/
-#ifndef LV_USE_TABLE
-#define LV_USE_TABLE 1
-#endif
-#if LV_USE_TABLE
-#ifndef LV_TABLE_COL_MAX
-# define LV_TABLE_COL_MAX 12
-#endif
-#endif
-
-/*Tab (dependencies: lv_page, lv_btnm)*/
-#ifndef LV_USE_TABVIEW
-#define LV_USE_TABVIEW 1
-#endif
-# if LV_USE_TABVIEW != 0
-/*Time of slide animation [ms] (0: no animation)*/
-#ifndef LV_TABVIEW_DEF_ANIM_TIME
-# define LV_TABVIEW_DEF_ANIM_TIME 300
-#endif
-#endif
-
-/*Tileview (dependencies: lv_page) */
-#ifndef LV_USE_TILEVIEW
-#define LV_USE_TILEVIEW 1
-#endif
-#if LV_USE_TILEVIEW
-/*Time of slide animation [ms] (0: no animation)*/
-#ifndef LV_TILEVIEW_DEF_ANIM_TIME
-# define LV_TILEVIEW_DEF_ANIM_TIME 300
-#endif
-#endif
-
-/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/
-#ifndef LV_USE_WIN
-#define LV_USE_WIN 1
-#endif
-
-/*==================
- * Non-user section
- *==================*/
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) /* Disable warnings for Visual Studio*/
-#ifndef _CRT_SECURE_NO_WARNINGS
-# define _CRT_SECURE_NO_WARNINGS
-#endif
-#endif
-
-
-#endif /*LV_CONF_CHECKER_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_core.mk b/src/libs/lvgl/src/lv_core/lv_core.mk
deleted file mode 100644
index eb1c5e0c..00000000
--- a/src/libs/lvgl/src/lv_core/lv_core.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-CSRCS += lv_group.c
-CSRCS += lv_indev.c
-CSRCS += lv_disp.c
-CSRCS += lv_obj.c
-CSRCS += lv_refr.c
-CSRCS += lv_style.c
-CSRCS += lv_debug.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_core
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_core
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_core"
diff --git a/src/libs/lvgl/src/lv_core/lv_debug.c b/src/libs/lvgl/src/lv_core/lv_debug.c
deleted file mode 100644
index 83071af5..00000000
--- a/src/libs/lvgl/src/lv_core/lv_debug.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * @file lv_debug.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-#include "lv_debug.h"
-
-#if LV_USE_DEBUG
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_DEBUG_STR_MAX_LENGTH
-#define LV_DEBUG_STR_MAX_LENGTH (1024 * 8)
-#endif
-
-#ifndef LV_DEBUG_STR_MAX_REPEAT
-#define LV_DEBUG_STR_MAX_REPEAT 8
-#endif
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool obj_valid_child(const lv_obj_t * parent, const lv_obj_t * obj_to_find);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-bool lv_debug_check_null(const void * p)
-{
- if(p) return true;
-
- return false;
-}
-
-bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type)
-{
- if(obj_type[0] == '\0') return true;
-
- lv_obj_type_t types;
- lv_obj_get_type((lv_obj_t *)obj, &types);
-
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM; i++) {
- if(strcmp(types.type[i], obj_type) == 0) return true;
- }
-
- return false;
-}
-
-bool lv_debug_check_obj_valid(const lv_obj_t * obj)
-{
- lv_disp_t * disp = lv_disp_get_next(NULL);
- while(disp) {
- lv_obj_t * scr;
- LV_LL_READ(disp->scr_ll, scr) {
-
- if(scr == obj) return true;
- bool found = obj_valid_child(scr, obj);
- if(found) return true;
- }
-
- disp = lv_disp_get_next(disp);
- }
-
- return false;
-}
-
-bool lv_debug_check_style(const lv_style_t * style)
-{
- if(style == NULL) return true; /*NULL style is still valid*/
-
-#if LV_USE_ASSERT_STYLE
- if(style->debug_sentinel != LV_STYLE_DEGUG_SENTINEL_VALUE) {
- LV_LOG_WARN("Invalid style (local variable or not initialized?)");
- return false;
- }
-#endif
-
- return true;
-}
-
-bool lv_debug_check_str(const void * str)
-{
- const uint8_t * s = (const uint8_t *)str;
- uint8_t last_byte = 0;
- uint32_t rep = 0;
- uint32_t i;
-
- for(i = 0; s[i] != '\0' && i < LV_DEBUG_STR_MAX_LENGTH; i++) {
- if(s[i] != last_byte) {
- last_byte = s[i];
- rep = 1;
- } else if(s[i] > 0x7F){
- rep++;
- if(rep > LV_DEBUG_STR_MAX_REPEAT) {
- LV_LOG_WARN("lv_debug_check_str: a non-ASCII char has repeated more than LV_DEBUG_STR_MAX_REPEAT times)");
- return false;
- }
- }
-
- if(s[i] < 10) {
- LV_LOG_WARN("lv_debug_check_str: invalid char in the string (< 10 value)");
- return false; /*Shouldn't occur in strings*/
- }
- }
-
- if(s[i] == '\0') return true;
-
- LV_LOG_WARN("lv_debug_check_str: string is longer than LV_DEBUG_STR_MAX_LENGTH");
- return false;
-}
-
-void lv_debug_log_error(const char * msg, uint64_t value)
-{
- static const char hex[] = "0123456789ABCDEF";
-
- size_t msg_len = strlen(msg);
- uint32_t value_len = sizeof(unsigned long int);
-
- if(msg_len < 230) {
- char buf[255];
- char * bufp = buf;
-
- /*Add the function name*/
- memcpy(bufp, msg, msg_len);
- bufp += msg_len;
-
- /*Add value in hey*/
- *bufp = ' ';
- bufp ++;
- *bufp = '(';
- bufp ++;
- *bufp = '0';
- bufp ++;
- *bufp = 'x';
- bufp ++;
-
- int8_t i;
- for(i = value_len * 2 - 1; i >= 0; i--) {
- uint8_t x = (unsigned long int)((unsigned long int)value >> (i * 4)) & 0xF;
-
- *bufp = hex[x];
- bufp++;
- }
-
- *bufp = ')';
- bufp ++;
-
- *bufp = '\0';
- LV_LOG_ERROR(buf);
- } else {
- LV_LOG_ERROR(msg);
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static bool obj_valid_child(const lv_obj_t * parent, const lv_obj_t * obj_to_find)
-{
- /*Check all children of `parent`*/
- lv_obj_t * child;
- LV_LL_READ(parent->child_ll, child) {
- if(child == obj_to_find) return true;
-
- /*Check the children*/
- bool found = obj_valid_child(child, obj_to_find);
- if(found) return true;
- }
-
- return false;
-}
-
-#endif /*LV_USE_DEBUG*/
-
diff --git a/src/libs/lvgl/src/lv_core/lv_debug.h b/src/libs/lvgl/src/lv_core/lv_debug.h
deleted file mode 100644
index a932004e..00000000
--- a/src/libs/lvgl/src/lv_core/lv_debug.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * @file lv_debug.h
- *
- */
-
-#ifndef LV_DEBUG_H
-#define LV_DEBUG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-
-#if LV_USE_DEBUG
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-bool lv_debug_check_null(const void * p);
-
-bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type);
-
-bool lv_debug_check_obj_valid(const lv_obj_t * obj);
-
-bool lv_debug_check_style(const lv_style_t * style);
-
-bool lv_debug_check_str(const void * str);
-
-void lv_debug_log_error(const char * msg, uint64_t value);
-
-/**********************
- * MACROS
- **********************/
-
-#ifndef LV_DEBUG_ASSERT
-#define LV_DEBUG_ASSERT(expr, msg, value) \
-{ \
- if(!(expr)) { \
- LV_LOG_ERROR(__func__); \
- lv_debug_log_error(msg, (uint64_t)((uintptr_t)value)); \
- while(1); \
- } \
-}
-#endif
-
-/*----------------
- * CHECKS
- *----------------*/
-
-#ifndef LV_DEBUG_IS_NULL
-#define LV_DEBUG_IS_NULL(p) (lv_debug_check_null(p))
-#endif
-
-#ifndef LV_DEBUG_IS_STR
-#define LV_DEBUG_IS_STR(str) (lv_debug_check_null(str) && \
- lv_debug_check_str(str))
-#endif
-
-#ifndef LV_DEBUG_IS_OBJ
-#define LV_DEBUG_IS_OBJ(obj_p, obj_type) (lv_debug_check_null(obj_p) && \
- lv_debug_check_obj_valid(obj_p) && \
- lv_debug_check_obj_type(obj_p, obj_type))
-#endif
-
-#ifndef LV_DEBUG_IS_STYLE
-#define LV_DEBUG_IS_STYLE(style_p) (lv_debug_check_style(style_p))
-#endif
-
-/*-----------------
- * ASSERTS
- *-----------------*/
-
-/*clang-format off*/
-
-#if LV_USE_ASSERT_NULL
-# ifndef LV_ASSERT_NULL
-# define LV_ASSERT_NULL(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "NULL pointer", p);
-# endif
-#else
-# define LV_ASSERT_NULL(p) true
-#endif
-
-#if LV_USE_ASSERT_MEM
-# ifndef LV_ASSERT_MEM
-# define LV_ASSERT_MEM(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "Out of memory", p);
-# endif
-#else
-# define LV_ASSERT_MEM(p) true
-#endif
-
-#if LV_USE_ASSERT_STR
-# ifndef LV_ASSERT_STR
-# define LV_ASSERT_STR(str) LV_DEBUG_ASSERT(LV_DEBUG_IS_STR(str), "Strange or invalid string", str);
-# endif
-#else /* LV_USE_ASSERT_OBJ == 0 */
-# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
-# define LV_ASSERT_STR(str) LV_ASSERT_NULL(str)
-# else
-# define LV_ASSERT_STR(str) true
-# endif
-#endif
-
-
-#if LV_USE_ASSERT_OBJ
-# ifndef LV_ASSERT_OBJ
-# define LV_ASSERT_OBJ(obj_p, obj_type) LV_DEBUG_ASSERT(LV_DEBUG_IS_OBJ(obj_p, obj_type), "Invalid object", obj_p);
-# endif
-#else /* LV_USE_ASSERT_OBJ == 0 */
-# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
-# define LV_ASSERT_OBJ(obj_p, obj_type) LV_ASSERT_NULL(obj_p)
-# else
-# define LV_ASSERT_OBJ(obj_p, obj_type) true
-# endif
-#endif
-
-
-#if LV_USE_ASSERT_STYLE
-# ifndef LV_ASSERT_STYLE
-# define LV_ASSERT_STYLE(style_p) LV_DEBUG_ASSERT(LV_DEBUG_IS_STYLE(style_p), "Invalid style", style_p);
-# endif
-#else
-# define LV_ASSERT_STYLE(style) true
-#endif
-
-#else /* LV_USE_DEBUG == 0 */
-
-#define LV_DEBUG_ASSERT(expr, msg, value) do{}while(0)
-
-#define LV_ASSERT_NULL(p) true
-#define LV_ASSERT_MEM(p) true
-#define LV_ASSERT_STR(p) true
-#define LV_ASSERT_OBJ(obj, obj_type) true
-#define LV_ASSERT_STYLE(p) true
-
-#endif /* LV_USE_DEBUG */
-/*clang-format on*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DEBUG_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_disp.c b/src/libs/lvgl/src/lv_core/lv_disp.c
deleted file mode 100644
index bcb73829..00000000
--- a/src/libs/lvgl/src/lv_core/lv_disp.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * @file lv_disp.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_disp.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Return with a pointer to the active screen
- * @param disp pointer to display which active screen should be get. (NULL to use the default
- * screen)
- * @return pointer to the active screen object (loaded by 'lv_scr_load()')
- */
-lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_scr_act: no display registered to get its top layer");
- return NULL;
- }
-
- return disp->act_scr;
-}
-
-/**
- * Make a screen active
- * @param scr pointer to a screen
- */
-void lv_disp_load_scr(lv_obj_t * scr)
-{
- lv_disp_t * d = lv_obj_get_disp(scr);
-
- d->act_scr = scr;
-
- lv_obj_invalidate(scr);
-}
-
-/**
- * Return with the top layer. (Same on every screen and it is above the normal screen layer)
- * @param disp pointer to display which top layer should be get. (NULL to use the default screen)
- * @return pointer to the top layer object (transparent screen sized lv_obj)
- */
-lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_layer_top: no display registered to get its top layer");
- return NULL;
- }
-
- return disp->top_layer;
-}
-
-/**
- * Return with the sys. layer. (Same on every screen and it is above the normal screen and the top
- * layer)
- * @param disp pointer to display which sys. layer should be get. (NULL to use the default screen)
- * @return pointer to the sys layer object (transparent screen sized lv_obj)
- */
-lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_layer_sys: no display registered to get its top layer");
- return NULL;
- }
-
- return disp->sys_layer;
-}
-
-/**
- * Assign a screen to a display.
- * @param disp pointer to a display where to assign the screen
- * @param scr pointer to a screen object to assign
- */
-void lv_disp_assign_screen(lv_disp_t * disp, lv_obj_t * scr)
-{
- if(lv_obj_get_parent(scr) != NULL) {
- LV_LOG_WARN("lv_disp_assign_screen: try to assign a non-screen object");
- return;
- }
-
- lv_disp_t * old_disp = lv_obj_get_disp(scr);
-
- if(old_disp == disp) return;
-
- lv_ll_chg_list(&old_disp->scr_ll, &disp->scr_ll, scr, true);
-}
-
-/**
- * Get a pointer to the screen refresher task to
- * modify its parameters with `lv_task_...` functions.
- * @param disp pointer to a display
- * @return pointer to the display refresher task. (NULL on error)
- */
-lv_task_t * lv_disp_get_refr_task(lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_disp_get_refr_task: no display registered");
- return NULL;
- }
-
- return disp->refr_task;
-}
-
-/**
- * Get elapsed time since last user activity on a display (e.g. click)
- * @param disp pointer to an display (NULL to get the overall smallest inactivity)
- * @return elapsed ticks (milliseconds) since the last activity
- */
-uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_disp_get_inactive_time: no display registered");
- return 0;
- }
-
- if(disp) return lv_tick_elaps(disp->last_activity_time);
-
- lv_disp_t * d;
- uint32_t t = UINT32_MAX;
- d = lv_disp_get_next(NULL);
- while(d) {
- t = LV_MATH_MIN(t, lv_tick_elaps(d->last_activity_time));
- d = lv_disp_get_next(d);
- }
-
- return t;
-}
-
-/**
- * Manually trigger an activity on a display
- * @param disp pointer to an display (NULL to use the default display)
- */
-void lv_disp_trig_activity(lv_disp_t * disp)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_disp_trig_activity: no display registered");
- return;
- }
-
- disp->last_activity_time = lv_tick_get();
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_core/lv_disp.h b/src/libs/lvgl/src/lv_core/lv_disp.h
deleted file mode 100644
index 30471543..00000000
--- a/src/libs/lvgl/src/lv_core/lv_disp.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * @file lv_disp.h
- *
- */
-
-#ifndef LV_DISP_H
-#define LV_DISP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "../lv_hal/lv_hal.h"
-#include "lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Return with a pointer to the active screen
- * @param disp pointer to display which active screen should be get. (NULL to use the default
- * screen)
- * @return pointer to the active screen object (loaded by 'lv_scr_load()')
- */
-lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp);
-
-/**
- * Make a screen active
- * @param scr pointer to a screen
- */
-void lv_disp_load_scr(lv_obj_t * scr);
-
-/**
- * Return with the top layer. (Same on every screen and it is above the normal screen layer)
- * @param disp pointer to display which top layer should be get. (NULL to use the default screen)
- * @return pointer to the top layer object (transparent screen sized lv_obj)
- */
-lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp);
-
-/**
- * Return with the sys. layer. (Same on every screen and it is above the normal screen and the top
- * layer)
- * @param disp pointer to display which sys. layer should be get. (NULL to use the default screen)
- * @return pointer to the sys layer object (transparent screen sized lv_obj)
- */
-lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp);
-
-/**
- * Assign a screen to a display.
- * @param disp pointer to a display where to assign the screen
- * @param scr pointer to a screen object to assign
- */
-void lv_disp_assign_screen(lv_disp_t * disp, lv_obj_t * scr);
-
-/**
- * Get a pointer to the screen refresher task to
- * modify its parameters with `lv_task_...` functions.
- * @param disp pointer to a display
- * @return pointer to the display refresher task. (NULL on error)
- */
-lv_task_t * lv_disp_get_refr_task(lv_disp_t * disp);
-
-/**
- * Get elapsed time since last user activity on a display (e.g. click)
- * @param disp pointer to an display (NULL to get the overall smallest inactivity)
- * @return elapsed ticks (milliseconds) since the last activity
- */
-uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp);
-
-/**
- * Manually trigger an activity on a display
- * @param disp pointer to an display (NULL to use the default display)
- */
-void lv_disp_trig_activity(lv_disp_t * disp);
-
-/*------------------------------------------------
- * To improve backward compatibility
- * Recommended only if you have one display
- *------------------------------------------------*/
-
-/**
- * Get the active screen of the default display
- * @return pointer to the active screen
- */
-static inline lv_obj_t * lv_scr_act(void)
-{
- return lv_disp_get_scr_act(lv_disp_get_default());
-}
-
-/**
- * Get the top layer of the default display
- * @return pointer to the top layer
- */
-static inline lv_obj_t * lv_layer_top(void)
-{
- return lv_disp_get_layer_top(lv_disp_get_default());
-}
-
-/**
- * Get the active screen of the default display
- * @return pointer to the sys layer
- */
-static inline lv_obj_t * lv_layer_sys(void)
-{
- return lv_disp_get_layer_sys(lv_disp_get_default());
-}
-
-static inline void lv_scr_load(lv_obj_t * scr)
-{
- lv_disp_load_scr(scr);
-}
-
-/**********************
- * MACROS
- **********************/
-
-/*------------------------------------------------
- * To improve backward compatibility
- * Recommended only if you have one display
- *------------------------------------------------*/
-
-#ifndef LV_HOR_RES
-/**
- * The horizontal resolution of the currently active display.
- */
-#define LV_HOR_RES lv_disp_get_hor_res(lv_disp_get_default())
-#endif
-
-#ifndef LV_VER_RES
-/**
- * The vertical resolution of the currently active display.
- */
-#define LV_VER_RES lv_disp_get_ver_res(lv_disp_get_default())
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_group.c b/src/libs/lvgl/src/lv_core/lv_group.c
deleted file mode 100644
index b26de56e..00000000
--- a/src/libs/lvgl/src/lv_core/lv_group.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/**
- * @file lv_group.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_group.h"
-#if LV_USE_GROUP != 0
-#include <stddef.h>
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void style_mod_def(lv_group_t * group, lv_style_t * style);
-static void style_mod_edit_def(lv_group_t * group, lv_style_t * style);
-static void refresh_theme(lv_group_t * g, lv_theme_t * th);
-static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *),
- void * (*move)(const lv_ll_t *, const void *));
-static void lv_group_refocus(lv_group_t * g);
-static void obj_to_foreground(lv_obj_t * obj);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Init. the group module
- */
-void lv_group_init(void)
-{
- lv_ll_init(&LV_GC_ROOT(_lv_group_ll), sizeof(lv_group_t));
-}
-
-/**
- * Create a new object group
- * @return pointer to the new object group
- */
-lv_group_t * lv_group_create(void)
-{
- lv_group_t * group = lv_ll_ins_head(&LV_GC_ROOT(_lv_group_ll));
- LV_ASSERT_MEM(group);
- if(group == NULL) return NULL;
- lv_ll_init(&group->obj_ll, sizeof(lv_obj_t *));
-
- group->obj_focus = NULL;
- group->frozen = 0;
- group->focus_cb = NULL;
- group->click_focus = 1;
- group->editing = 0;
- group->refocus_policy = LV_GROUP_REFOCUS_POLICY_PREV;
- group->wrap = 1;
-
-#if LV_USE_USER_DATA
- memset(&group->user_data, 0, sizeof(lv_group_user_data_t));
-#endif
-
- /*Initialize style modification callbacks from current theme*/
- refresh_theme(group, lv_theme_get_current());
-
- return group;
-}
-
-/**
- * Delete a group object
- * @param group pointer to a group
- */
-void lv_group_del(lv_group_t * group)
-{
- /*Defocus the the currently focused object*/
- if(group->obj_focus != NULL) {
- (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
- lv_obj_invalidate(*group->obj_focus);
- }
-
- /*Remove the objects from the group*/
- lv_obj_t ** obj;
- LV_LL_READ(group->obj_ll, obj)
- {
- (*obj)->group_p = NULL;
- }
-
- lv_ll_clear(&(group->obj_ll));
- lv_ll_rem(&LV_GC_ROOT(_lv_group_ll), group);
- lv_mem_free(group);
-}
-
-/**
- * Add an object to a group
- * @param group pointer to a group
- * @param obj pointer to an object to add
- */
-void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
-{
- if(group == NULL) return;
-
- /*Do not add the object twice*/
- lv_obj_t ** obj_i;
- LV_LL_READ(group->obj_ll, obj_i)
- {
- if((*obj_i) == obj) {
- LV_LOG_INFO("lv_group_add_obj: the object is already added to this group");
- return;
- }
- }
-
- /*If the object is already in a group and focused then defocus it*/
- if(obj->group_p) {
- if(lv_obj_is_focused(obj)) {
- lv_group_refocus(obj->group_p);
-
- LV_LOG_INFO("lv_group_add_obj: assign object to an other group");
- }
- }
-
- obj->group_p = group;
- lv_obj_t ** next = lv_ll_ins_tail(&group->obj_ll);
- LV_ASSERT_MEM(next);
- if(next == NULL) return;
- *next = obj;
-
- /* If the head and the tail is equal then there is only one object in the linked list.
- * In this case automatically activate it*/
- if(lv_ll_get_head(&group->obj_ll) == next) {
- lv_group_refocus(group);
- }
-}
-
-/**
- * Remove an object from its group
- * @param obj pointer to an object to remove
- */
-void lv_group_remove_obj(lv_obj_t * obj)
-{
- lv_group_t * g = obj->group_p;
- if(g == NULL) return;
- if(g->obj_focus == NULL) return; /*Just to be sure (Not possible if there is at least one object in the group)*/
-
- /*Focus on the next object*/
- if(*g->obj_focus == obj) {
- /*If this is the only object in the group then focus to nothing.*/
- if(lv_ll_get_head(&g->obj_ll) == g->obj_focus && lv_ll_get_tail(&g->obj_ll) == g->obj_focus) {
- (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
- }
- /*If there more objects in the group then focus to the next/prev object*/
- else {
- lv_group_refocus(g);
- }
- }
-
- /* If the focuses object is still the same then it was the only object in the group but it will
- * be deleted. Set the `obj_focus` to NULL to get back to the initial state of the group with
- * zero objects*/
- if(*g->obj_focus == obj) {
- g->obj_focus = NULL;
- }
-
- /*Search the object and remove it from its group */
- lv_obj_t ** i;
- LV_LL_READ(g->obj_ll, i)
- {
- if(*i == obj) {
- lv_ll_rem(&g->obj_ll, i);
- lv_mem_free(i);
- obj->group_p = NULL;
- break;
- }
- }
-}
-
-/**
- * Remove all objects from a group
- * @param group pointer to a group
- */
-void lv_group_remove_all_objs(lv_group_t * group)
-{
- /*Defocus the the currently focused object*/
- if(group->obj_focus != NULL) {
- (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
- lv_obj_invalidate(*group->obj_focus);
- group->obj_focus = NULL;
- }
-
- /*Remove the objects from the group*/
- lv_obj_t ** obj;
- LV_LL_READ(group->obj_ll, obj)
- {
- (*obj)->group_p = NULL;
- }
-
- lv_ll_clear(&(group->obj_ll));
-}
-
-/**
- * Focus on an object (defocus the current)
- * @param obj pointer to an object to focus on
- */
-void lv_group_focus_obj(lv_obj_t * obj)
-{
- if(obj == NULL) return;
- lv_group_t * g = obj->group_p;
- if(g == NULL) return;
-
- if(g->frozen != 0) return;
-
- /*On defocus edit mode must be leaved*/
- lv_group_set_editing(g, false);
-
- lv_obj_t ** i;
- LV_LL_READ(g->obj_ll, i)
- {
- if(*i == obj) {
- if(g->obj_focus != NULL) {
- (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
- lv_res_t res = lv_event_send(*g->obj_focus, LV_EVENT_DEFOCUSED, NULL);
- if(res != LV_RES_OK) return;
- lv_obj_invalidate(*g->obj_focus);
- }
-
- g->obj_focus = i;
-
- if(g->obj_focus != NULL) {
- (*g->obj_focus)->signal_cb(*g->obj_focus, LV_SIGNAL_FOCUS, NULL);
- if(g->focus_cb) g->focus_cb(g);
- lv_res_t res = lv_event_send(*g->obj_focus, LV_EVENT_FOCUSED, NULL);
- if(res != LV_RES_OK) return;
- lv_obj_invalidate(*g->obj_focus);
-
- /*If the object or its parent has `top == true` bring it to the foregorund*/
- obj_to_foreground(*g->obj_focus);
- }
- break;
- }
- }
-}
-
-/**
- * Focus the next object in a group (defocus the current)
- * @param group pointer to a group
- */
-void lv_group_focus_next(lv_group_t * group)
-{
- focus_next_core(group, lv_ll_get_head, lv_ll_get_next);
-}
-
-/**
- * Focus the previous object in a group (defocus the current)
- * @param group pointer to a group
- */
-void lv_group_focus_prev(lv_group_t * group)
-{
- focus_next_core(group, lv_ll_get_tail, lv_ll_get_prev);
-}
-
-/**
- * Do not let to change the focus from the current object
- * @param group pointer to a group
- * @param en true: freeze, false: release freezing (normal mode)
- */
-void lv_group_focus_freeze(lv_group_t * group, bool en)
-{
- if(en == false)
- group->frozen = 0;
- else
- group->frozen = 1;
-}
-
-/**
- * Send a control character to the focuses object of a group
- * @param group pointer to a group
- * @param c a character (use LV_KEY_.. to navigate)
- * @return result of focused object in group.
- */
-lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c)
-{
- lv_obj_t * act = lv_group_get_focused(group);
- if(act == NULL) return LV_RES_OK;
-
- lv_res_t res;
-
- res = act->signal_cb(act, LV_SIGNAL_CONTROL, &c);
- if(res != LV_RES_OK) return res;
-
- res = lv_event_send(act, LV_EVENT_KEY, &c);
- if(res != LV_RES_OK) return res;
-
- return res;
-}
-
-/**
- * Set a function for a group which will modify the object's style if it is in focus
- * @param group pointer to a group
- * @param style_mod_cb the style modifier function pointer
- */
-void lv_group_set_style_mod_cb(lv_group_t * group, lv_group_style_mod_cb_t style_mod_cb)
-{
- group->style_mod_cb = style_mod_cb;
- if(group->obj_focus != NULL) lv_obj_invalidate(*group->obj_focus);
-}
-
-/**
- * Set a function for a group which will modify the object's style if it is in focus in edit mode
- * @param group pointer to a group
- * @param style_mod_func the style modifier function pointer
- */
-void lv_group_set_style_mod_edit_cb(lv_group_t * group, lv_group_style_mod_cb_t style_mod_edit_cb)
-{
- group->style_mod_edit_cb = style_mod_edit_cb;
- if(group->obj_focus != NULL) lv_obj_invalidate(*group->obj_focus);
-}
-
-/**
- * Set a function for a group which will be called when a new object is focused
- * @param group pointer to a group
- * @param focus_cb the call back function or NULL if unused
- */
-void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus_cb)
-{
- group->focus_cb = focus_cb;
-}
-
-/**
- * Manually set the current mode (edit or navigate).
- * @param group pointer to group
- * @param edit: true: edit mode; false: navigate mode
- */
-void lv_group_set_editing(lv_group_t * group, bool edit)
-{
- uint8_t en_val = edit ? 1 : 0;
-
- if(en_val == group->editing) return; /*Do not set the same mode again*/
-
- group->editing = en_val;
- lv_obj_t * focused = lv_group_get_focused(group);
-
- if(focused) {
- focused->signal_cb(focused, LV_SIGNAL_FOCUS, NULL); /*Focus again to properly leave/open edit/navigate mode*/
- lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_FOCUSED, NULL);
- if(res != LV_RES_OK) return;
- }
-
- lv_obj_invalidate(focused);
-}
-
-/**
- * Set the `click_focus` attribute. If enabled then the object will be focused then it is clicked.
- * @param group pointer to group
- * @param en: true: enable `click_focus`
- */
-void lv_group_set_click_focus(lv_group_t * group, bool en)
-{
- group->click_focus = en ? 1 : 0;
-}
-
-void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t policy)
-{
- group->refocus_policy = policy & 0x01;
-}
-
-/**
- * Set whether focus next/prev will allow wrapping from first->last or last->first.
- * @param group pointer to group
- * @param en: true: enable `wrap`
- */
-void lv_group_set_wrap(lv_group_t * group, bool en)
-{
- group->wrap = en ? 1 : 0;
-}
-
-/**
- * Modify a style with the set 'style_mod' function. The input style remains unchanged.
- * @param group pointer to group
- * @param style pointer to a style to modify
- * @return a copy of the input style but modified with the 'style_mod' function
- */
-lv_style_t * lv_group_mod_style(lv_group_t * group, const lv_style_t * style)
-{
- /*Load the current style. It will be modified by the callback*/
- lv_style_copy(&group->style_tmp, style);
-
- if(group->editing) {
- if(group->style_mod_edit_cb) group->style_mod_edit_cb(group, &group->style_tmp);
- } else {
- if(group->style_mod_cb) group->style_mod_cb(group, &group->style_tmp);
- }
- return &group->style_tmp;
-}
-
-/**
- * Get the focused object or NULL if there isn't one
- * @param group pointer to a group
- * @return pointer to the focused object
- */
-lv_obj_t * lv_group_get_focused(const lv_group_t * group)
-{
- if(!group) return NULL;
- if(group->obj_focus == NULL) return NULL;
-
- return *group->obj_focus;
-}
-
-#if LV_USE_USER_DATA
-/**
- * Get a pointer to the group's user data
- * @param group pointer to an group
- * @return pointer to the user data
- */
-lv_group_user_data_t * lv_group_get_user_data(lv_group_t * group)
-{
- return &group->user_data;
-}
-#endif
-
-/**
- * Get a the style modifier function of a group
- * @param group pointer to a group
- * @return pointer to the style modifier function
- */
-lv_group_style_mod_cb_t lv_group_get_style_mod_cb(const lv_group_t * group)
-{
- if(!group) return false;
- return group->style_mod_cb;
-}
-
-/**
- * Get a the style modifier function of a group in edit mode
- * @param group pointer to a group
- * @return pointer to the style modifier function
- */
-lv_group_style_mod_cb_t lv_group_get_style_mod_edit_cb(const lv_group_t * group)
-{
- if(!group) return false;
- return group->style_mod_edit_cb;
-}
-
-/**
- * Get the focus callback function of a group
- * @param group pointer to a group
- * @return the call back function or NULL if not set
- */
-lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group)
-{
- if(!group) return false;
- return group->focus_cb;
-}
-
-/**
- * Get the current mode (edit or navigate).
- * @param group pointer to group
- * @return true: edit mode; false: navigate mode
- */
-bool lv_group_get_editing(const lv_group_t * group)
-{
- if(!group) return false;
- return group->editing ? true : false;
-}
-
-/**
- * Get the `click_focus` attribute.
- * @param group pointer to group
- * @return true: `click_focus` is enabled; false: disabled
- */
-bool lv_group_get_click_focus(const lv_group_t * group)
-{
- if(!group) return false;
- return group->click_focus ? true : false;
-}
-
-/**
- * Get whether focus next/prev will allow wrapping from first->last or last->first object.
- * @param group pointer to group
- * @param en: true: wrapping enabled; false: wrapping disabled
- */
-bool lv_group_get_wrap(lv_group_t * group)
-{
- if(!group) return false;
- return group->wrap ? true : false;
-}
-
-/**
- * Notify the group that current theme changed and style modification callbacks need to be
- * refreshed.
- * @param group pointer to group. If NULL then all groups are notified.
- */
-void lv_group_report_style_mod(lv_group_t * group)
-{
- lv_theme_t * th = lv_theme_get_current();
-
- if(group != NULL) {
- refresh_theme(group, th);
- return;
- }
-
- lv_group_t * i;
- LV_LL_READ(LV_GC_ROOT(_lv_group_ll), i)
- {
- refresh_theme(i, th);
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void lv_group_refocus(lv_group_t * g)
-{
- /*Refocus must temporarily allow wrapping to work correctly*/
- uint8_t temp_wrap = g->wrap;
- g->wrap = 1;
-
- if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_NEXT)
- lv_group_focus_next(g);
- else if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_PREV)
- lv_group_focus_prev(g);
- /*Restore wrap property*/
- g->wrap = temp_wrap;
-}
-
-/**
- * Default style modifier function
- * @param group pointer to the caller group
- * @param style pointer to a style to modify. (Typically group.style_tmp) It will be OVERWRITTEN.
- */
-static void style_mod_def(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
-
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_ORANGE;
-
- /*If not transparent or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
-
- /*Add some recolor to the images*/
- if(style->image.intense < LV_OPA_MIN) {
- style->image.color = LV_COLOR_ORANGE;
- style->image.intense = LV_OPA_40;
- }
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-
-#endif
-}
-
-/**
- * Default style modifier function
- * @param group pointer to the caller group
- * @param style pointer to a style to modify. (Typically group.style_tmp) It will be OVERWRITTEN.
- */
-static void style_mod_edit_def(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
-
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-
- /*Add some recolor to the images*/
- if(style->image.intense < LV_OPA_MIN) {
- style->image.color = LV_COLOR_GREEN;
- style->image.intense = LV_OPA_40;
- }
-
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-
-#endif
-}
-
-static void refresh_theme(lv_group_t * g, lv_theme_t * th)
-{
- g->style_mod_cb = style_mod_def;
- g->style_mod_edit_cb = style_mod_edit_def;
- if(th) {
- if(th->group.style_mod_xcb) g->style_mod_cb = th->group.style_mod_xcb;
- if(th->group.style_mod_edit_xcb) g->style_mod_edit_cb = th->group.style_mod_edit_xcb;
- }
-}
-
-static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *),
- void * (*move)(const lv_ll_t *, const void *))
-{
- if(group->frozen) return;
-
- lv_obj_t ** obj_next = group->obj_focus;
- lv_obj_t ** obj_sentinel = NULL;
- bool can_move = true;
- bool can_begin = true;
-
- for(;;) {
- if(obj_next == NULL) {
- if(group->wrap || obj_sentinel == NULL) {
- if(!can_begin) return;
- obj_next = begin(&group->obj_ll);
- can_move = false;
- can_begin = false;
- } else {
- /*Currently focused object is the last/first in the group, keep it that way*/
- return;
- }
- }
-
- if(obj_sentinel == NULL) {
- obj_sentinel = obj_next;
- if(obj_sentinel == NULL) return; /*Group is empty*/
- }
-
- if(can_move) {
- obj_next = move(&group->obj_ll, obj_next);
-
- /*Give up if we walked the entire list and haven't found another visible object*/
- if(obj_next == obj_sentinel) return;
- }
-
- can_move = true;
-
- if(obj_next == NULL) continue;
-
- /*Hidden objects don't receive focus*/
- if(!lv_obj_get_hidden(*obj_next)) break;
- }
-
- if(obj_next == group->obj_focus) return; /*There's only one visible object and it's already focused*/
-
- if(group->obj_focus) {
- (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_DEFOCUS, NULL);
- lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_DEFOCUSED, NULL);
- if(res != LV_RES_OK) return;
- lv_obj_invalidate(*group->obj_focus);
- }
-
- group->obj_focus = obj_next;
-
- (*group->obj_focus)->signal_cb(*group->obj_focus, LV_SIGNAL_FOCUS, NULL);
- lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_FOCUSED, NULL);
- if(res != LV_RES_OK) return;
-
- /*If the object or its parent has `top == true` bring it to the foregorund*/
- obj_to_foreground(*group->obj_focus);
-
- lv_obj_invalidate(*group->obj_focus);
-
- if(group->focus_cb) group->focus_cb(group);
-}
-
-static void obj_to_foreground(lv_obj_t * obj)
-{
- /*Search for 'top' attribute*/
- lv_obj_t * i = obj;
- lv_obj_t * last_top = NULL;
- while(i != NULL) {
- if(i->top != 0) last_top = i;
- i = lv_obj_get_parent(i);
- }
-
- if(last_top != NULL) {
- /*Move the last_top object to the foreground*/
- lv_obj_move_foreground(last_top);
- }
-}
-
-#endif /*LV_USE_GROUP != 0*/
diff --git a/src/libs/lvgl/src/lv_core/lv_group.h b/src/libs/lvgl/src/lv_core/lv_group.h
deleted file mode 100644
index c27f7693..00000000
--- a/src/libs/lvgl/src/lv_core/lv_group.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * @file lv_group.h
- *
- */
-
-#ifndef LV_GROUP_H
-#define LV_GROUP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-/*Predefined keys to control the focused object via lv_group_send(group, c)*/
-/*For compatibility in signal function define the keys regardless to `LV_USE_GROUP`*/
-
-enum {
- LV_KEY_UP = 17, /*0x11*/
- LV_KEY_DOWN = 18, /*0x12*/
- LV_KEY_RIGHT = 19, /*0x13*/
- LV_KEY_LEFT = 20, /*0x14*/
- LV_KEY_ESC = 27, /*0x1B*/
- LV_KEY_DEL = 127, /*0x7F*/
- LV_KEY_BACKSPACE = 8, /*0x08*/
- LV_KEY_ENTER = 10, /*0x0A, '\n'*/
- LV_KEY_NEXT = 9, /*0x09, '\t'*/
- LV_KEY_PREV = 11, /*0x0B, '*/
- LV_KEY_HOME = 2, /*0x02, STX*/
- LV_KEY_END = 3, /*0x03, ETX*/
-};
-typedef uint8_t lv_key_t;
-
-#if LV_USE_GROUP != 0
-/**********************
- * TYPEDEFS
- **********************/
-struct _lv_group_t;
-
-typedef void (*lv_group_style_mod_cb_t)(struct _lv_group_t *, lv_style_t *);
-typedef void (*lv_group_focus_cb_t)(struct _lv_group_t *);
-
-/**
- * Groups can be used to logically hold objects so that they can be individually focused.
- * They are NOT for laying out objects on a screen (try `lv_cont` for that).
- */
-typedef struct _lv_group_t
-{
- lv_ll_t obj_ll; /**< Linked list to store the objects in the group */
- lv_obj_t ** obj_focus; /**< The object in focus*/
-
- lv_group_style_mod_cb_t style_mod_cb; /**< A function to modifies the style of the focused object*/
- lv_group_style_mod_cb_t style_mod_edit_cb; /**< A function which modifies the style of the edited object*/
- lv_group_focus_cb_t focus_cb; /**< A function to call when a new object is focused (optional)*/
- lv_style_t style_tmp; /**< Stores the modified style of the focused object */
-#if LV_USE_USER_DATA
- lv_group_user_data_t user_data;
-#endif
-
- uint8_t frozen : 1; /**< 1: can't focus to new object*/
- uint8_t editing : 1; /**< 1: Edit mode, 0: Navigate mode*/
- uint8_t click_focus : 1; /**< 1: If an object in a group is clicked by an indev then it will be
- focused */
- uint8_t refocus_policy : 1; /**< 1: Focus prev if focused on deletion. 0: Focus next if focused on
- deletion.*/
- uint8_t wrap : 1; /**< 1: Focus next/prev can wrap at end of list. 0: Focus next/prev stops at end
- of list.*/
-} lv_group_t;
-
-enum { LV_GROUP_REFOCUS_POLICY_NEXT = 0, LV_GROUP_REFOCUS_POLICY_PREV = 1 };
-typedef uint8_t lv_group_refocus_policy_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Init. the group module
- * @remarks Internal function, do not call directly.
- */
-void lv_group_init(void);
-
-/**
- * Create a new object group
- * @return pointer to the new object group
- */
-lv_group_t * lv_group_create(void);
-
-/**
- * Delete a group object
- * @param group pointer to a group
- */
-void lv_group_del(lv_group_t * group);
-
-/**
- * Add an object to a group
- * @param group pointer to a group
- * @param obj pointer to an object to add
- */
-void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj);
-
-/**
- * Remove an object from its group
- * @param obj pointer to an object to remove
- */
-void lv_group_remove_obj(lv_obj_t * obj);
-
-/**
- * Remove all objects from a group
- * @param group pointer to a group
- */
-void lv_group_remove_all_objs(lv_group_t * group);
-
-/**
- * Focus on an object (defocus the current)
- * @param obj pointer to an object to focus on
- */
-void lv_group_focus_obj(lv_obj_t * obj);
-
-/**
- * Focus the next object in a group (defocus the current)
- * @param group pointer to a group
- */
-void lv_group_focus_next(lv_group_t * group);
-
-/**
- * Focus the previous object in a group (defocus the current)
- * @param group pointer to a group
- */
-void lv_group_focus_prev(lv_group_t * group);
-
-/**
- * Do not let to change the focus from the current object
- * @param group pointer to a group
- * @param en true: freeze, false: release freezing (normal mode)
- */
-void lv_group_focus_freeze(lv_group_t * group, bool en);
-
-/**
- * Send a control character to the focuses object of a group
- * @param group pointer to a group
- * @param c a character (use LV_KEY_.. to navigate)
- * @return result of focused object in group.
- */
-lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c);
-
-/**
- * Set a function for a group which will modify the object's style if it is in focus
- * @param group pointer to a group
- * @param style_mod_cb the style modifier function pointer
- */
-void lv_group_set_style_mod_cb(lv_group_t * group, lv_group_style_mod_cb_t style_mod_cb);
-
-/**
- * Set a function for a group which will modify the object's style if it is in focus in edit mode
- * @param group pointer to a group
- * @param style_mod_edit_cb the style modifier function pointer
- */
-void lv_group_set_style_mod_edit_cb(lv_group_t * group, lv_group_style_mod_cb_t style_mod_edit_cb);
-
-/**
- * Set a function for a group which will be called when a new object is focused
- * @param group pointer to a group
- * @param focus_cb the call back function or NULL if unused
- */
-void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus_cb);
-
-/**
- * Set whether the next or previous item in a group is focused if the currently focussed obj is
- * deleted.
- * @param group pointer to a group
- * @param new refocus policy enum
- */
-void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t policy);
-
-/**
- * Manually set the current mode (edit or navigate).
- * @param group pointer to group
- * @param edit: true: edit mode; false: navigate mode
- */
-void lv_group_set_editing(lv_group_t * group, bool edit);
-
-/**
- * Set the `click_focus` attribute. If enabled then the object will be focused then it is clicked.
- * @param group pointer to group
- * @param en: true: enable `click_focus`
- */
-void lv_group_set_click_focus(lv_group_t * group, bool en);
-
-/**
- * Set whether focus next/prev will allow wrapping from first->last or last->first object.
- * @param group pointer to group
- * @param en: true: wrapping enabled; false: wrapping disabled
- */
-void lv_group_set_wrap(lv_group_t * group, bool en);
-
-/**
- * Modify a style with the set 'style_mod' function. The input style remains unchanged.
- * @param group pointer to group
- * @param style pointer to a style to modify
- * @return a copy of the input style but modified with the 'style_mod' function
- */
-lv_style_t * lv_group_mod_style(lv_group_t * group, const lv_style_t * style);
-
-/**
- * Get the focused object or NULL if there isn't one
- * @param group pointer to a group
- * @return pointer to the focused object
- */
-lv_obj_t * lv_group_get_focused(const lv_group_t * group);
-
-#if LV_USE_USER_DATA
-/**
- * Get a pointer to the group's user data
- * @param group pointer to an group
- * @return pointer to the user data
- */
-lv_group_user_data_t * lv_group_get_user_data(lv_group_t * group);
-
-#endif
-
-/**
- * Get a the style modifier function of a group
- * @param group pointer to a group
- * @return pointer to the style modifier function
- */
-lv_group_style_mod_cb_t lv_group_get_style_mod_cb(const lv_group_t * group);
-
-/**
- * Get a the style modifier function of a group in edit mode
- * @param group pointer to a group
- * @return pointer to the style modifier function
- */
-lv_group_style_mod_cb_t lv_group_get_style_mod_edit_cb(const lv_group_t * group);
-
-/**
- * Get the focus callback function of a group
- * @param group pointer to a group
- * @return the call back function or NULL if not set
- */
-lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group);
-
-/**
- * Get the current mode (edit or navigate).
- * @param group pointer to group
- * @return true: edit mode; false: navigate mode
- */
-bool lv_group_get_editing(const lv_group_t * group);
-
-/**
- * Get the `click_focus` attribute.
- * @param group pointer to group
- * @return true: `click_focus` is enabled; false: disabled
- */
-bool lv_group_get_click_focus(const lv_group_t * group);
-
-/**
- * Get whether focus next/prev will allow wrapping from first->last or last->first object.
- * @param group pointer to group
- * @param en: true: wrapping enabled; false: wrapping disabled
- */
-bool lv_group_get_wrap(lv_group_t * group);
-
-/**
- * Notify the group that current theme changed and style modification callbacks need to be
- * refreshed.
- * @param group pointer to group. If NULL then all groups are notified.
- */
-void lv_group_report_style_mod(lv_group_t * group);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_GROUP != 0*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_GROUP_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_indev.c b/src/libs/lvgl/src/lv_core/lv_indev.c
deleted file mode 100644
index 6ec59bda..00000000
--- a/src/libs/lvgl/src/lv_core/lv_indev.c
+++ /dev/null
@@ -1,1240 +0,0 @@
-/**
- * @file lv_indev.c
- *
- */
-
-/*********************
- * INCLUDES
- ********************/
-#include "lv_indev.h"
-#include "lv_disp.h"
-#include "lv_obj.h"
-
-#include "../lv_hal/lv_hal_tick.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_misc/lv_task.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-#if LV_INDEV_DEF_DRAG_THROW <= 0
-#warning "LV_INDEV_DRAG_THROW must be greater than 0"
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data);
-static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data);
-static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data);
-static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data);
-static void indev_proc_press(lv_indev_proc_t * proc);
-static void indev_proc_release(lv_indev_proc_t * proc);
-static void indev_proc_reset_query_handler(lv_indev_t * indev);
-static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj);
-static void indev_drag(lv_indev_proc_t * state);
-static void indev_drag_throw(lv_indev_proc_t * proc);
-static bool indev_reset_check(lv_indev_proc_t * proc);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_indev_t * indev_act;
-static lv_obj_t * indev_obj_act = NULL;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the display input device subsystem
- */
-void lv_indev_init(void)
-{
- lv_indev_reset(NULL); /*Reset all input devices*/
-}
-
-/**
- * Called periodically to read the input devices
- * @param param pointer to and input device to read
- */
-void lv_indev_read_task(lv_task_t * task)
-{
- LV_LOG_TRACE("indev read task started");
-
- lv_indev_data_t data;
-
- indev_act = task->user_data;
-
- /*Read and process all indevs*/
- if(indev_act->driver.disp == NULL) return; /*Not assigned to any displays*/
-
- /*Handle reset query before processing the point*/
- indev_proc_reset_query_handler(indev_act);
-
- if(indev_act->proc.disabled) return;
- bool more_to_read;
- do {
- /*Read the data*/
- more_to_read = lv_indev_read(indev_act, &data);
-
- /*The active object might deleted even in the read function*/
- indev_proc_reset_query_handler(indev_act);
- indev_obj_act = NULL;
-
- indev_act->proc.state = data.state;
-
- /*Save the last activity time*/
- if(indev_act->proc.state == LV_INDEV_STATE_PR) {
- indev_act->driver.disp->last_activity_time = lv_tick_get();
- } else if(indev_act->driver.type == LV_INDEV_TYPE_ENCODER && data.enc_diff) {
- indev_act->driver.disp->last_activity_time = lv_tick_get();
- }
-
- if(indev_act->driver.type == LV_INDEV_TYPE_POINTER) {
- indev_pointer_proc(indev_act, &data);
- } else if(indev_act->driver.type == LV_INDEV_TYPE_KEYPAD) {
- indev_keypad_proc(indev_act, &data);
- } else if(indev_act->driver.type == LV_INDEV_TYPE_ENCODER) {
- indev_encoder_proc(indev_act, &data);
- } else if(indev_act->driver.type == LV_INDEV_TYPE_BUTTON) {
- indev_button_proc(indev_act, &data);
- }
- /*Handle reset query if it happened in during processing*/
- indev_proc_reset_query_handler(indev_act);
- } while(more_to_read);
-
- /*End of indev processing, so no act indev*/
- indev_act = NULL;
- indev_obj_act = NULL;
-
- LV_LOG_TRACE("indev read task finished");
-}
-
-/**
- * Get the currently processed input device. Can be used in action functions too.
- * @return pointer to the currently processed input device or NULL if no input device processing
- * right now
- */
-lv_indev_t * lv_indev_get_act(void)
-{
- return indev_act;
-}
-
-/**
- * Get the type of an input device
- * @param indev pointer to an input device
- * @return the type of the input device from `lv_hal_indev_type_t` (`LV_INDEV_TYPE_...`)
- */
-lv_indev_type_t lv_indev_get_type(const lv_indev_t * indev)
-{
- if(indev == NULL) return LV_INDEV_TYPE_NONE;
-
- return indev->driver.type;
-}
-/**
- * Reset one or all input devices
- * @param indev pointer to an input device to reset or NULL to reset all of them
- */
-void lv_indev_reset(lv_indev_t * indev)
-{
- if(indev)
- indev->proc.reset_query = 1;
- else {
- lv_indev_t * i = lv_indev_get_next(NULL);
- while(i) {
- i->proc.reset_query = 1;
-
- i = lv_indev_get_next(i);
- }
- }
-}
-
-/**
- * Reset the long press state of an input device
- * @param indev pointer to an input device
- */
-void lv_indev_reset_long_press(lv_indev_t * indev)
-{
- indev->proc.long_pr_sent = 0;
- indev->proc.longpr_rep_timestamp = lv_tick_get();
- indev->proc.pr_timestamp = lv_tick_get();
-}
-
-/**
- * Enable or disable an input devices
- * @param indev pointer to an input device
- * @param en true: enable; false: disable
- */
-void lv_indev_enable(lv_indev_t * indev, bool en)
-{
- if(!indev) return;
-
- indev->proc.disabled = en ? 0 : 1;
-}
-
-/**
- * Set a cursor for a pointer input device (for LV_INPUT_TYPE_POINTER and LV_INPUT_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param cur_obj pointer to an object to be used as cursor
- */
-void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj)
-{
- if(indev->driver.type != LV_INDEV_TYPE_POINTER) return;
-
- indev->cursor = cur_obj;
- lv_obj_set_parent(indev->cursor, lv_disp_get_layer_sys(indev->driver.disp));
- lv_obj_set_pos(indev->cursor, indev->proc.types.pointer.act_point.x, indev->proc.types.pointer.act_point.y);
-}
-
-#if LV_USE_GROUP
-/**
- * Set a destination group for a keypad input device (for LV_INDEV_TYPE_KEYPAD)
- * @param indev pointer to an input device
- * @param group point to a group
- */
-void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group)
-{
- if(indev->driver.type == LV_INDEV_TYPE_KEYPAD || indev->driver.type == LV_INDEV_TYPE_ENCODER) {
- indev->group = group;
- }
-}
-#endif
-
-/**
- * Set the an array of points for LV_INDEV_TYPE_BUTTON.
- * These points will be assigned to the buttons to press a specific point on the screen
- * @param indev pointer to an input device
- * @param group point to a group
- */
-void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * points)
-{
- if(indev->driver.type == LV_INDEV_TYPE_BUTTON) {
- indev->btn_points = points;
- }
-}
-
-/**
- * Get the last point of an input device (for LV_INDEV_TYPE_POINTER and LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param point pointer to a point to store the result
- */
-void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point)
-{
- if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != LV_INDEV_TYPE_BUTTON) {
- point->x = -1;
- point->y = -1;
- } else {
- point->x = indev->proc.types.pointer.act_point.x;
- point->y = indev->proc.types.pointer.act_point.y;
- }
-}
-
-/**
- * Get the last pressed key of an input device (for LV_INDEV_TYPE_KEYPAD)
- * @param indev pointer to an input device
- * @return the last pressed key (0 on error)
- */
-uint32_t lv_indev_get_key(const lv_indev_t * indev)
-{
- if(indev->driver.type != LV_INDEV_TYPE_KEYPAD)
- return 0;
- else
- return indev->proc.types.keypad.last_key;
-}
-
-/**
- * Check if there is dragging with an input device or not (for LV_INDEV_TYPE_POINTER and
- * LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @return true: drag is in progress
- */
-bool lv_indev_is_dragging(const lv_indev_t * indev)
-{
- if(indev == NULL) return false;
- if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != LV_INDEV_TYPE_BUTTON) return false;
- return indev->proc.types.pointer.drag_in_prog == 0 ? false : true;
-}
-
-/**
- * Get the types.pointer.vector of dragging of an input device (for LV_INDEV_TYPE_POINTER and
- * LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param point pointer to a point to store the types.pointer.vector
- */
-void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point)
-{
- if(indev == NULL) {
- point->x = 0;
- point->y = 0;
- return;
- }
-
- if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != LV_INDEV_TYPE_BUTTON) {
- point->x = 0;
- point->y = 0;
- } else {
- point->x = indev->proc.types.pointer.vect.x;
- point->y = indev->proc.types.pointer.vect.y;
- }
-}
-
-/**
- * Do nothing until the next release
- * @param indev pointer to an input device
- */
-void lv_indev_wait_release(lv_indev_t * indev)
-{
- indev->proc.wait_until_release = 1;
-}
-
-/**
- * Get a pointer to the indev read task to
- * modify its parameters with `lv_task_...` functions.
- * @param indev pointer to an input device
- * @return pointer to the indev read refresher task. (NULL on error)
- */
-lv_task_t * lv_indev_get_read_task(lv_disp_t * indev)
-{
- if(!indev) {
- LV_LOG_WARN("lv_indev_get_read_task: indev was NULL");
- return NULL;
- }
-
- return indev->refr_task;
-}
-
-/**
- * Gets a pointer to the currently active object in the currently processed input device.
- * @return pointer to currently active object or NULL if no active object
- */
-lv_obj_t * lv_indev_get_obj_act(void)
-{
- return indev_obj_act;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Process a new point from LV_INDEV_TYPE_POINTER input device
- * @param i pointer to an input device
- * @param data pointer to the data read from the input device
- */
-static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data)
-{
- /*Move the cursor if set and moved*/
- if(i->cursor != NULL &&
- (i->proc.types.pointer.last_point.x != data->point.x || i->proc.types.pointer.last_point.y != data->point.y)) {
- lv_obj_set_pos(i->cursor, data->point.x, data->point.y);
- }
-
- i->proc.types.pointer.act_point.x = data->point.x;
- i->proc.types.pointer.act_point.y = data->point.y;
-
- if(i->proc.state == LV_INDEV_STATE_PR) {
- indev_proc_press(&i->proc);
- } else {
- indev_proc_release(&i->proc);
- }
-
- i->proc.types.pointer.last_point.x = i->proc.types.pointer.act_point.x;
- i->proc.types.pointer.last_point.y = i->proc.types.pointer.act_point.y;
-}
-
-/**
- * Process a new point from LV_INDEV_TYPE_KEYPAD input device
- * @param i pointer to an input device
- * @param data pointer to the data read from the input device
- */
-static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
-{
-#if LV_USE_GROUP
- if(data->state == LV_INDEV_STATE_PR && i->proc.wait_until_release) return;
-
- if(i->proc.wait_until_release) {
- i->proc.wait_until_release = 0;
- i->proc.pr_timestamp = 0;
- i->proc.long_pr_sent = 0;
- i->proc.types.keypad.last_state = LV_INDEV_STATE_REL; /*To skip the processing of release*/
- }
-
- lv_group_t * g = i->group;
- if(g == NULL) return;
-
- indev_obj_act = lv_group_get_focused(g);
- if(indev_obj_act == NULL) return;
-
- /*Save the last key to compare it with the current latter on RELEASE*/
- uint32_t prev_key = i->proc.types.keypad.last_key;
-
- /* Save the last key.
- * It must be done here else `lv_indev_get_key` will return the last key in events and signals*/
- i->proc.types.keypad.last_key = data->key;
-
- /* Save the previous state so we can detect state changes below and also set the last state now
- * so if any signal/event handler on the way returns `LV_RES_INV` the last state is remembered
- * for the next time*/
- uint32_t prev_state = i->proc.types.keypad.last_state;
- i->proc.types.keypad.last_state = data->state;
-
- /*Key press happened*/
- if(data->state == LV_INDEV_STATE_PR && prev_state == LV_INDEV_STATE_REL) {
- i->proc.pr_timestamp = lv_tick_get();
-
- /*Simulate a press on the object if ENTER was pressed*/
- if(data->key == LV_KEY_ENTER) {
- /*Send the ENTER as a normal KEY*/
- lv_group_send_data(g, LV_KEY_ENTER);
-
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
- } else if(data->key == LV_KEY_ESC) {
- /*Send the ESC as a normal KEY*/
- lv_group_send_data(g, LV_KEY_ESC);
-
- lv_event_send(indev_obj_act, LV_EVENT_CANCEL, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Move the focus on NEXT*/
- else if(data->key == LV_KEY_NEXT) {
- lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is be sure it is disabled*/
- lv_group_focus_next(g);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Move the focus on PREV*/
- else if(data->key == LV_KEY_PREV) {
- lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is be sure it is disabled*/
- lv_group_focus_prev(g);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Just send other keys to the object (e.g. 'A' or `LV_GROUP_KEY_RIGHT`)*/
- else {
- lv_group_send_data(g, data->key);
- }
- }
- /*Pressing*/
- else if(data->state == LV_INDEV_STATE_PR && prev_state == LV_INDEV_STATE_PR) {
- /*Long press time has elapsed?*/
- if(i->proc.long_pr_sent == 0 && lv_tick_elaps(i->proc.pr_timestamp) > i->driver.long_press_time) {
- i->proc.long_pr_sent = 1;
- if(data->key == LV_KEY_ENTER) {
- i->proc.longpr_rep_timestamp = lv_tick_get();
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, NULL);
- if(indev_reset_check(&i->proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- }
- /*Long press repeated time has elapsed?*/
- else if(i->proc.long_pr_sent != 0 &&
- lv_tick_elaps(i->proc.longpr_rep_timestamp) > i->driver.long_press_rep_time) {
-
- i->proc.longpr_rep_timestamp = lv_tick_get();
-
- /*Send LONG_PRESS_REP on ENTER*/
- if(data->key == LV_KEY_ENTER) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS_REP, NULL);
- if(indev_reset_check(&i->proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED_REPEAT, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Move the focus on NEXT again*/
- else if(data->key == LV_KEY_NEXT) {
- lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is be sure it is disabled*/
- lv_group_focus_next(g);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Move the focus on PREV again*/
- else if(data->key == LV_KEY_PREV) {
- lv_group_set_editing(g, false); /*Editing is not used by KEYPAD is be sure it is disabled*/
- lv_group_focus_prev(g);
- if(indev_reset_check(&i->proc)) return;
- }
- /*Just send other keys again to the object (e.g. 'A' or `LV_GORUP_KEY_RIGHT)*/
- else {
- lv_group_send_data(g, data->key);
- if(indev_reset_check(&i->proc)) return;
- }
- }
- }
- /*Release happened*/
- else if(data->state == LV_INDEV_STATE_REL && prev_state == LV_INDEV_STATE_PR) {
- /*The user might clear the key when it was released. Always release the pressed key*/
- data->key = prev_key;
- if(data->key == LV_KEY_ENTER) {
-
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- if(i->proc.long_pr_sent == 0) {
- lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
-
- lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- i->proc.pr_timestamp = 0;
- i->proc.long_pr_sent = 0;
- }
- indev_obj_act = NULL;
-#else
- (void)data; /*Unused*/
- (void)i; /*Unused*/
-#endif
-}
-
-/**
- * Process a new point from LV_INDEV_TYPE_ENCODER input device
- * @param i pointer to an input device
- * @param data pointer to the data read from the input device
- */
-static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
-{
-#if LV_USE_GROUP
-
- if(data->state == LV_INDEV_STATE_PR && i->proc.wait_until_release) return;
-
- if(i->proc.wait_until_release) {
- i->proc.wait_until_release = 0;
- i->proc.pr_timestamp = 0;
- i->proc.long_pr_sent = 0;
- i->proc.types.keypad.last_state = LV_INDEV_STATE_REL; /*To skip the processing of release*/
- }
-
- /* Save the last keys before anything else.
- * They need to be already saved if the the function returns for any reason*/
- lv_indev_state_t last_state = i->proc.types.keypad.last_state;
- i->proc.types.keypad.last_state = data->state;
- i->proc.types.keypad.last_key = data->key;
-
- lv_group_t * g = i->group;
- if(g == NULL) return;
-
- indev_obj_act = lv_group_get_focused(g);
- if(indev_obj_act == NULL) return;
-
- /*Process the steps first. They are valid only with released button*/
- if(data->state == LV_INDEV_STATE_REL) {
- /*In edit mode send LEFT/RIGHT keys*/
- if(lv_group_get_editing(g)) {
- int32_t s;
- if(data->enc_diff < 0) {
- for(s = 0; s < -data->enc_diff; s++) lv_group_send_data(g, LV_KEY_LEFT);
- } else if(data->enc_diff > 0) {
- for(s = 0; s < data->enc_diff; s++) lv_group_send_data(g, LV_KEY_RIGHT);
- }
- }
- /*In navigate mode focus on the next/prev objects*/
- else {
- int32_t s;
- if(data->enc_diff < 0) {
- for(s = 0; s < -data->enc_diff; s++) lv_group_focus_prev(g);
- } else if(data->enc_diff > 0) {
- for(s = 0; s < data->enc_diff; s++) lv_group_focus_next(g);
- }
- }
- }
-
- /*Refresh the focused object. It might change due to lv_group_focus_prev/next*/
- indev_obj_act = lv_group_get_focused(g);
- if(indev_obj_act == NULL) return;
-
- /*Button press happened*/
- if(data->state == LV_INDEV_STATE_PR && last_state == LV_INDEV_STATE_REL) {
- bool editable = false;
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, &editable);
-
- i->proc.pr_timestamp = lv_tick_get();
- if(lv_group_get_editing(g) == true || editable == false) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- }
- /*Pressing*/
- else if(data->state == LV_INDEV_STATE_PR && last_state == LV_INDEV_STATE_PR) {
- if(i->proc.long_pr_sent == 0 && lv_tick_elaps(i->proc.pr_timestamp) > i->driver.long_press_time) {
- bool editable = false;
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, &editable);
-
- /*On enter long press toggle edit mode.*/
- if(editable) {
- /*Don't leave edit mode if there is only one object (nowhere to navigate)*/
- if(lv_ll_is_empty(&g->obj_ll) == false) {
- lv_group_set_editing(g, lv_group_get_editing(g) ? false : true); /*Toggle edit mode on long press*/
- }
- }
- /*If not editable then just send a long press signal*/
- else {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, NULL);
- if(indev_reset_check(&i->proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- i->proc.long_pr_sent = 1;
- }
- }
- /*Release happened*/
- else if(data->state == LV_INDEV_STATE_REL && last_state == LV_INDEV_STATE_PR) {
-
- bool editable = false;
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_GET_EDITABLE, &editable);
-
- /*The button was released on a non-editable object. Just send enter*/
- if(editable == false) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- if(i->proc.long_pr_sent == 0) lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
- }
- /*An object is being edited and the button is released. */
- else if(g->editing) {
- /*Ignore long pressed enter release because it comes from mode switch*/
- if(!i->proc.long_pr_sent || lv_ll_is_empty(&g->obj_ll)) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
- if(indev_reset_check(&i->proc)) return;
-
- lv_group_send_data(g, LV_KEY_ENTER);
- }
- }
- /*If the focused object is editable and now in navigate mode then on enter switch edit
- mode*/
- else if(editable && !g->editing && !i->proc.long_pr_sent) {
- lv_group_set_editing(g, true); /*Set edit mode*/
- }
-
- i->proc.pr_timestamp = 0;
- i->proc.long_pr_sent = 0;
- }
- indev_obj_act = NULL;
-#else
- (void)data; /*Unused*/
- (void)i; /*Unused*/
-#endif
-}
-
-/**
- * Process new points from a input device. indev->state.pressed has to be set
- * @param indev pointer to an input device state
- * @param x x coordinate of the next point
- * @param y y coordinate of the next point
- */
-static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data)
-{
- i->proc.types.pointer.act_point.x = i->btn_points[data->btn_id].x;
- i->proc.types.pointer.act_point.y = i->btn_points[data->btn_id].y;
-
- /*Still the same point is pressed*/
- if(i->proc.types.pointer.last_point.x == i->proc.types.pointer.act_point.x &&
- i->proc.types.pointer.last_point.y == i->proc.types.pointer.act_point.y && data->state == LV_INDEV_STATE_PR) {
- indev_proc_press(&i->proc);
- } else {
- /*If a new point comes always make a release*/
- indev_proc_release(&i->proc);
- }
-
- i->proc.types.pointer.last_point.x = i->proc.types.pointer.act_point.x;
- i->proc.types.pointer.last_point.y = i->proc.types.pointer.act_point.y;
-}
-
-/**
- * Process the pressed state of LV_INDEV_TYPE_POINER input devices
- * @param indev pointer to an input device 'proc'
- * @return LV_RES_OK: no indev reset required; LV_RES_INV: indev reset is required
- */
-static void indev_proc_press(lv_indev_proc_t * proc)
-{
- indev_obj_act = proc->types.pointer.act_obj;
-
- if(proc->wait_until_release != 0) return;
-
- lv_disp_t * disp = indev_act->driver.disp;
- bool new_obj_searched = false;
-
- /*If there is no last object then search*/
- if(indev_obj_act == NULL) {
- indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_sys(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_top(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_scr_act(disp));
- new_obj_searched = true;
- }
- /*If there is last object but it is not dragged and not protected also search*/
- else if(proc->types.pointer.drag_in_prog == 0 &&
- lv_obj_is_protected(indev_obj_act, LV_PROTECT_PRESS_LOST) == false) {
- indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_sys(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_top(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_scr_act(disp));
- new_obj_searched = true;
- }
- /*If a dragable or a protected object was the last then keep it*/
- else {
- }
-
- /*The last object might have drag throw. Stop it manually*/
- if(new_obj_searched && proc->types.pointer.last_obj) {
- proc->types.pointer.drag_throw_vect.x = 0;
- proc->types.pointer.drag_throw_vect.y = 0;
- indev_drag_throw(proc);
- }
-
- /*If a new object was found reset some variables and send a pressed signal*/
- if(indev_obj_act != proc->types.pointer.act_obj) {
- proc->types.pointer.last_point.x = proc->types.pointer.act_point.x;
- proc->types.pointer.last_point.y = proc->types.pointer.act_point.y;
-
- /*If a new object found the previous was lost, so send a signal*/
- if(proc->types.pointer.act_obj != NULL) {
- /*Save the obj because in special cases `act_obj` can change in the signal function*/
- lv_obj_t * last_obj = proc->types.pointer.act_obj;
-
- last_obj->signal_cb(last_obj, LV_SIGNAL_PRESS_LOST, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(last_obj, LV_EVENT_PRESS_LOST, NULL);
- if(indev_reset_check(proc)) return;
-
- }
-
- proc->types.pointer.act_obj = indev_obj_act; /*Save the pressed object*/
- proc->types.pointer.last_obj = indev_obj_act;
-
- if(indev_obj_act != NULL) {
- /* Save the time when the obj pressed.
- * It is necessary to count the long press time.*/
- proc->pr_timestamp = lv_tick_get();
- proc->long_pr_sent = 0;
- proc->types.pointer.drag_limit_out = 0;
- proc->types.pointer.drag_in_prog = 0;
- proc->types.pointer.drag_sum.x = 0;
- proc->types.pointer.drag_sum.y = 0;
- proc->types.pointer.vect.x = 0;
- proc->types.pointer.vect.y = 0;
-
- /*Search for 'top' attribute*/
- lv_obj_t * i = indev_obj_act;
- lv_obj_t * last_top = NULL;
- while(i != NULL) {
- if(i->top) last_top = i;
- i = lv_obj_get_parent(i);
- }
-
- if(last_top != NULL) {
- /*Move the last_top object to the foreground*/
- lv_obj_move_foreground(last_top);
- }
-
- /*Send a signal about the press*/
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSED, indev_act);
- if(indev_reset_check(proc)) return;
-
- lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
- if(indev_reset_check(proc)) return;
- }
- }
-
- /*Calculate the types.pointer.vector*/
- proc->types.pointer.vect.x = proc->types.pointer.act_point.x - proc->types.pointer.last_point.x;
- proc->types.pointer.vect.y = proc->types.pointer.act_point.y - proc->types.pointer.last_point.y;
-
- proc->types.pointer.drag_throw_vect.x = (proc->types.pointer.drag_throw_vect.x * 5) >> 3;
- proc->types.pointer.drag_throw_vect.y = (proc->types.pointer.drag_throw_vect.y * 5) >> 3;
-
- if(proc->types.pointer.drag_throw_vect.x < 0)
- proc->types.pointer.drag_throw_vect.x++;
- else if(proc->types.pointer.drag_throw_vect.x > 0)
- proc->types.pointer.drag_throw_vect.x--;
-
- if(proc->types.pointer.drag_throw_vect.y < 0)
- proc->types.pointer.drag_throw_vect.y++;
- else if(proc->types.pointer.drag_throw_vect.y > 0)
- proc->types.pointer.drag_throw_vect.y--;
-
- proc->types.pointer.drag_throw_vect.x += (proc->types.pointer.vect.x * 4) >> 3;
- proc->types.pointer.drag_throw_vect.y += (proc->types.pointer.vect.y * 4) >> 3;
-
- /*If there is active object and it can be dragged run the drag*/
- if(indev_obj_act != NULL) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSING, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_PRESSING, NULL);
- if(indev_reset_check(proc)) return;
-
- indev_drag(proc);
- if(indev_reset_check(proc)) return;
-
- /*If there is no drag then check for long press time*/
- if(proc->types.pointer.drag_in_prog == 0 && proc->long_pr_sent == 0) {
- /*Send a signal about the long press if enough time elapsed*/
- if(lv_tick_elaps(proc->pr_timestamp) > indev_act->driver.long_press_time) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED, NULL);
- if(indev_reset_check(proc)) return;
-
- /*Mark the signal sending to do not send it again*/
- proc->long_pr_sent = 1;
-
- /*Save the long press time stamp for the long press repeat handler*/
- proc->longpr_rep_timestamp = lv_tick_get();
- }
- }
- /*Send long press repeated signal*/
- if(proc->types.pointer.drag_in_prog == 0 && proc->long_pr_sent == 1) {
- /*Send a signal about the long press repeat if enough time elapsed*/
- if(lv_tick_elaps(proc->longpr_rep_timestamp) > indev_act->driver.long_press_rep_time) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_LONG_PRESS_REP, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(indev_obj_act, LV_EVENT_LONG_PRESSED_REPEAT, NULL);
- if(indev_reset_check(proc)) return;
- proc->longpr_rep_timestamp = lv_tick_get();
- }
- }
- }
-}
-
-/**
- * Process the released state of LV_INDEV_TYPE_POINER input devices
- * @param proc pointer to an input device 'proc'
- */
-static void indev_proc_release(lv_indev_proc_t * proc)
-{
- if(proc->wait_until_release != 0) {
- proc->types.pointer.act_obj = NULL;
- proc->types.pointer.last_obj = NULL;
- proc->pr_timestamp = 0;
- proc->longpr_rep_timestamp = 0;
- proc->wait_until_release = 0;
- }
- indev_obj_act = proc->types.pointer.act_obj;
-
- /*Forget the act obj and send a released signal */
- if(indev_obj_act) {
- /* If the object was protected against press lost then it possible that
- * the object is already not pressed but still it is the `act_obj`.
- * In this case send the `LV_SIGNAL_RELEASED/CLICKED` instead of `LV_SIGNAL_PRESS_LOST` if
- * the indev is ON the `types.pointer.act_obj` */
- if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_PRESS_LOST)) {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, indev_act);
- if(indev_reset_check(proc)) return;
-
- if(proc->types.pointer.drag_in_prog == 0) {
- if(proc->long_pr_sent == 0) {
- lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
- if(indev_reset_check(proc)) return;
- }
-
- lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
- if(indev_reset_check(proc)) return;
- }
-
- lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
- if(indev_reset_check(proc)) return;
- }
- /* The simple case: `act_obj` was not protected against press lost.
- * If it is already not pressed then `indev_proc_press` would set `indev_obj_act = NULL`*/
- else {
- indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_RELEASED, indev_act);
- if(indev_reset_check(proc)) return;
-
- if(proc->long_pr_sent == 0 && proc->types.pointer.drag_in_prog == 0) {
- lv_event_send(indev_obj_act, LV_EVENT_SHORT_CLICKED, NULL);
- if(indev_reset_check(proc)) return;
- }
-
- if(proc->types.pointer.drag_in_prog == 0) {
- lv_event_send(indev_obj_act, LV_EVENT_CLICKED, NULL);
- if(indev_reset_check(proc)) return;
- }
-
- lv_event_send(indev_obj_act, LV_EVENT_RELEASED, NULL);
- if(indev_reset_check(proc)) return;
- }
-
- if(indev_reset_check(proc)) return;
-
- /*Handle click focus*/
- bool click_focus_sent = false;
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(indev_obj_act);
-
- /*Check, if the parent is in a group and focus on it.*/
- /*Respect the click focus protection*/
- if(lv_obj_is_protected(indev_obj_act, LV_PROTECT_CLICK_FOCUS) == false) {
- lv_obj_t * parent = indev_obj_act;
-
- while(g == NULL) {
- parent = lv_obj_get_parent(parent);
- if(parent == NULL) break;
-
- /*Ignore is the protected against click focus*/
- if(lv_obj_is_protected(parent, LV_PROTECT_CLICK_FOCUS)) {
- parent = NULL;
- break;
- }
- g = lv_obj_get_group(parent);
- }
-
- /* If a parent is in a group make it focused.
- * `LV_EVENT_FOCUSED/DEFOCUSED` will be sent by `lv_group_focus_obj`*/
- if(g && parent) {
- if(lv_group_get_click_focus(g)) {
- click_focus_sent = true;
- lv_group_focus_obj(parent);
- }
- }
- }
-#endif
-
- /* Send defocus to the lastly "active" object and foucus to the new one.
- * DO not sent the events if they was sent by the click focus*/
- if(proc->types.pointer.last_pressed != indev_obj_act && click_focus_sent == false) {
- lv_event_send(proc->types.pointer.last_pressed, LV_EVENT_DEFOCUSED, NULL);
- if(indev_reset_check(proc)) return;
-
- lv_event_send(proc->types.pointer.act_obj, LV_EVENT_FOCUSED, NULL);
- if(indev_reset_check(proc)) return;
-
- proc->types.pointer.last_pressed = indev_obj_act;
- }
-
- if(indev_reset_check(proc)) return;
-
- /*Send LV_EVENT_DRAG_THROW_BEGIN if required */
- /*If drag parent is active check recursively the drag_parent attribute*/
- lv_obj_t * drag_obj = indev_obj_act;
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
-
- if(drag_obj) {
- if(lv_obj_get_drag_throw(drag_obj) && proc->types.pointer.drag_in_prog) {
- lv_event_send(drag_obj, LV_EVENT_DRAG_THROW_BEGIN, NULL);
- if(indev_reset_check(proc)) return;
- }
- }
-
- proc->types.pointer.act_obj = NULL;
- proc->pr_timestamp = 0;
- proc->longpr_rep_timestamp = 0;
- }
-
- /*The reset can be set in the signal function.
- * In case of reset query ignore the remaining parts.*/
- if(proc->types.pointer.last_obj != NULL && proc->reset_query == 0) {
- indev_drag_throw(proc);
- if(indev_reset_check(proc)) return;
- }
-}
-
-/**
- * Process a new point from LV_INDEV_TYPE_BUTTON input device
- * @param i pointer to an input device
- * @param data pointer to the data read from the input device
- * Reset input device if a reset query has been sent to it
- * @param indev pointer to an input device
- */
-static void indev_proc_reset_query_handler(lv_indev_t * indev)
-{
- if(indev->proc.reset_query) {
- indev->proc.types.pointer.act_obj = NULL;
- indev->proc.types.pointer.last_obj = NULL;
- indev->proc.types.pointer.last_pressed = NULL;
- indev->proc.types.pointer.drag_limit_out = 0;
- indev->proc.types.pointer.drag_in_prog = 0;
- indev->proc.long_pr_sent = 0;
- indev->proc.pr_timestamp = 0;
- indev->proc.longpr_rep_timestamp = 0;
- indev->proc.types.pointer.drag_sum.x = 0;
- indev->proc.types.pointer.drag_sum.y = 0;
- indev->proc.types.pointer.drag_throw_vect.x = 0;
- indev->proc.types.pointer.drag_throw_vect.y = 0;
- indev->proc.reset_query = 0;
- indev_obj_act = NULL;
- }
-}
-/**
- * Search the most top, clickable object on the last point of an input device
- * @param proc pointer to the `lv_indev_proc_t` part of the input device
- * @param obj pointer to a start object, typically the screen
- * @return pointer to the found object or NULL if there was no suitable object
- */
-static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj)
-{
- lv_obj_t * found_p = NULL;
-
- /*If the point is on this object check its children too*/
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- lv_area_t ext_area;
- ext_area.x1 = obj->coords.x1 - obj->ext_click_pad_hor;
- ext_area.x2 = obj->coords.x2 + obj->ext_click_pad_hor;
- ext_area.y1 = obj->coords.y1 - obj->ext_click_pad_ver;
- ext_area.y2 = obj->coords.y2 + obj->ext_click_pad_ver;
-
- if(lv_area_is_point_on(&ext_area, &proc->types.pointer.act_point)) {
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- lv_area_t ext_area;
- ext_area.x1 = obj->coords.x1 - obj->ext_click_pad.x1;
- ext_area.x2 = obj->coords.x2 + obj->ext_click_pad.x2;
- ext_area.y1 = obj->coords.y1 - obj->ext_click_pad.y1;
- ext_area.y2 = obj->coords.y2 + obj->ext_click_pad.y2;
-
- if(lv_area_is_point_on(&ext_area, &proc->types.pointer.act_point)) {
-#else
- if(lv_area_is_point_on(&obj->coords, &proc->types.pointer.act_point)) {
-#endif
- lv_obj_t * i;
-
- LV_LL_READ(obj->child_ll, i)
- {
- found_p = indev_search_obj(proc, i);
-
- /*If a child was found then break*/
- if(found_p != NULL) {
- break;
- }
- }
-
- /*If then the children was not ok, and this obj is clickable
- * and it or its parent is not hidden then save this object*/
- if(found_p == NULL && lv_obj_get_click(obj) != false) {
- lv_obj_t * hidden_i = obj;
- while(hidden_i != NULL) {
- if(lv_obj_get_hidden(hidden_i) == true) break;
- hidden_i = lv_obj_get_parent(hidden_i);
- }
- /*No parent found with hidden == true*/
- if(hidden_i == NULL) found_p = obj;
- }
- }
-
- return found_p;
-}
-
-/**
- * Handle the dragging of indev_proc_p->types.pointer.act_obj
- * @param indev pointer to a input device state
- */
-static void indev_drag(lv_indev_proc_t * state)
-{
- lv_obj_t * drag_obj = state->types.pointer.act_obj;
- bool drag_just_started = false;
-
- /*If drag parent is active check recursively the drag_parent attribute*/
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
-
- if(drag_obj == NULL) return;
-
- if(lv_obj_get_drag(drag_obj) == false) return;
-
- lv_drag_dir_t allowed_dirs = lv_obj_get_drag_dir(drag_obj);
-
- /*Count the movement by drag*/
- state->types.pointer.drag_sum.x += state->types.pointer.vect.x;
- state->types.pointer.drag_sum.y += state->types.pointer.vect.y;
-
- /*Enough move?*/
- if(state->types.pointer.drag_limit_out == 0) {
- /*If a move is greater then LV_DRAG_LIMIT then begin the drag*/
- if(((allowed_dirs & LV_DRAG_DIR_HOR) &&
- LV_MATH_ABS(state->types.pointer.drag_sum.x) >= indev_act->driver.drag_limit) ||
- ((allowed_dirs & LV_DRAG_DIR_VER) &&
- LV_MATH_ABS(state->types.pointer.drag_sum.y) >= indev_act->driver.drag_limit)) {
- state->types.pointer.drag_limit_out = 1;
- drag_just_started = true;
- }
- }
-
- /*If the drag limit is exceeded handle the dragging*/
- if(state->types.pointer.drag_limit_out != 0) {
- /*Set new position if the vector is not zero*/
- if(state->types.pointer.vect.x != 0 || state->types.pointer.vect.y != 0) {
-
- uint16_t inv_buf_size =
- lv_disp_get_inv_buf_size(indev_act->driver.disp); /*Get the number of currently invalidated areas*/
-
- lv_coord_t prev_x = drag_obj->coords.x1;
- lv_coord_t prev_y = drag_obj->coords.y1;
- lv_coord_t prev_par_w = lv_obj_get_width(lv_obj_get_parent(drag_obj));
- lv_coord_t prev_par_h = lv_obj_get_height(lv_obj_get_parent(drag_obj));
-
- /*Get the coordinates of the object and modify them*/
- lv_coord_t act_x = lv_obj_get_x(drag_obj);
- lv_coord_t act_y = lv_obj_get_y(drag_obj);
-
- if(allowed_dirs == LV_DRAG_DIR_ALL) {
- if(drag_just_started) {
- act_x += state->types.pointer.drag_sum.x;
- act_y += state->types.pointer.drag_sum.y;
- }
- lv_obj_set_pos(drag_obj, act_x + state->types.pointer.vect.x, act_y + state->types.pointer.vect.y);
- } else if(allowed_dirs & LV_DRAG_DIR_HOR) {
- if(drag_just_started) {
- act_x += state->types.pointer.drag_sum.x;
- }
- lv_obj_set_x(drag_obj, act_x + state->types.pointer.vect.x);
- } else if(allowed_dirs & LV_DRAG_DIR_VER) {
- if(drag_just_started) {
- act_y += state->types.pointer.drag_sum.y;
- }
- lv_obj_set_y(drag_obj, act_y + state->types.pointer.vect.y);
- }
-
- /*If the object didn't moved then clear the invalidated areas*/
- if(drag_obj->coords.x1 == prev_x && drag_obj->coords.y1 == prev_y) {
-// state->types.pointer.drag_in_prog = 0;
- /*In a special case if the object is moved on a page and
- * the scrollable has fit == true and the object is dragged of the page then
- * while its coordinate is not changing only the parent's size is reduced */
- lv_coord_t act_par_w = lv_obj_get_width(lv_obj_get_parent(drag_obj));
- lv_coord_t act_par_h = lv_obj_get_height(lv_obj_get_parent(drag_obj));
- if(act_par_w == prev_par_w && act_par_h == prev_par_h) {
- uint16_t new_inv_buf_size = lv_disp_get_inv_buf_size(indev_act->driver.disp);
- lv_disp_pop_from_inv_buf(indev_act->driver.disp, new_inv_buf_size - inv_buf_size);
- }
- } else {
- state->types.pointer.drag_in_prog = 1;
- /*Set the drag in progress flag*/
- /*Send the drag begin signal on first move*/
- if(drag_just_started) {
- drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_BEGIN, indev_act);
- if(indev_reset_check(state)) return;
- lv_event_send(drag_obj, LV_EVENT_DRAG_BEGIN, NULL);
- if(indev_reset_check(state)) return;
- }
- }
- }
- }
-}
-
-/**
- * Handle throwing by drag if the drag is ended
- * @param indev pointer to an input device state
- */
-static void indev_drag_throw(lv_indev_proc_t * proc)
-{
- if(proc->types.pointer.drag_in_prog == 0) return;
-
- lv_obj_t * drag_obj = proc->types.pointer.last_obj;
-
- /*If drag parent is active check recursively the drag_parent attribute*/
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
-
- if(drag_obj == NULL) {
- return;
- }
-
- /*Return if the drag throw is not enabled*/
- if(lv_obj_get_drag_throw(drag_obj) == false) {
- proc->types.pointer.drag_in_prog = 0;
- drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, indev_act);
- lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
- if(indev_reset_check(proc)) return;
-
- lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
- return;
- }
-
- lv_drag_dir_t allowed_dirs = lv_obj_get_drag_dir(drag_obj);
-
- /*Reduce the vectors*/
- proc->types.pointer.drag_throw_vect.x =
- proc->types.pointer.drag_throw_vect.x * (100 - indev_act->driver.drag_throw) / 100;
- proc->types.pointer.drag_throw_vect.y =
- proc->types.pointer.drag_throw_vect.y * (100 - indev_act->driver.drag_throw) / 100;
-
- if(proc->types.pointer.drag_throw_vect.x != 0 || proc->types.pointer.drag_throw_vect.y != 0) {
- /*Get the coordinates and modify them*/
- lv_area_t coords_ori;
- lv_obj_get_coords(drag_obj, &coords_ori);
- lv_coord_t act_x = lv_obj_get_x(drag_obj) + proc->types.pointer.drag_throw_vect.x;
- lv_coord_t act_y = lv_obj_get_y(drag_obj) + proc->types.pointer.drag_throw_vect.y;
-
- if(allowed_dirs == LV_DRAG_DIR_ALL)
- lv_obj_set_pos(drag_obj, act_x, act_y);
- else if(allowed_dirs & LV_DRAG_DIR_HOR)
- lv_obj_set_x(drag_obj, act_x);
- else if(allowed_dirs & LV_DRAG_DIR_VER)
- lv_obj_set_y(drag_obj, act_y);
-
- lv_area_t coord_new;
- lv_obj_get_coords(drag_obj, &coord_new);
-
- /*If non of the coordinates are changed then do not continue throwing*/
- if((coords_ori.x1 == coord_new.x1 || proc->types.pointer.drag_throw_vect.x == 0) &&
- (coords_ori.y1 == coord_new.y1 || proc->types.pointer.drag_throw_vect.y == 0)) {
- proc->types.pointer.drag_in_prog = 0;
- proc->types.pointer.vect.x = 0;
- proc->types.pointer.vect.y = 0;
- proc->types.pointer.drag_throw_vect.x = 0;
- proc->types.pointer.drag_throw_vect.y = 0;
- drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
- if(indev_reset_check(proc)) return;
- }
- }
- /*If the types.pointer.vectors become 0 -> types.pointer.drag_in_prog = 0 and send a drag end
- signal*/
- else {
- proc->types.pointer.drag_in_prog = 0;
- drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, indev_act);
- if(indev_reset_check(proc)) return;
- lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
- if(indev_reset_check(proc)) return;
- }
-}
-
-/**
- * Checks if the reset_query flag has been set. If so, perform necessary global indev cleanup actions
- * @param proc pointer to an input device 'proc'
- * return true if indev query should be immediately truncated.
- */
-static bool indev_reset_check(lv_indev_proc_t * proc)
-{
- if(proc->reset_query) {
- indev_obj_act = NULL;
- }
-
- return proc->reset_query ? true : false;
-}
diff --git a/src/libs/lvgl/src/lv_core/lv_indev.h b/src/libs/lvgl/src/lv_core/lv_indev.h
deleted file mode 100644
index 69ab5a41..00000000
--- a/src/libs/lvgl/src/lv_core/lv_indev.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * @file lv_indev.h
- *
- */
-
-#ifndef LV_INDEV_H
-#define LV_INDEV_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-#include "../lv_hal/lv_hal_indev.h"
-#include "../lv_core/lv_group.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the display input device subsystem
- */
-void lv_indev_init(void);
-
-/**
- * Called periodically to read the input devices
- * @param task pointer to the task itself
- */
-void lv_indev_read_task(lv_task_t * task);
-
-/**
- * Get the currently processed input device. Can be used in action functions too.
- * @return pointer to the currently processed input device or NULL if no input device processing
- * right now
- */
-lv_indev_t * lv_indev_get_act(void);
-
-/**
- * Get the type of an input device
- * @param indev pointer to an input device
- * @return the type of the input device from `lv_hal_indev_type_t` (`LV_INDEV_TYPE_...`)
- */
-lv_indev_type_t lv_indev_get_type(const lv_indev_t * indev);
-
-/**
- * Reset one or all input devices
- * @param indev pointer to an input device to reset or NULL to reset all of them
- */
-void lv_indev_reset(lv_indev_t * indev);
-
-/**
- * Reset the long press state of an input device
- * @param indev_proc pointer to an input device
- */
-void lv_indev_reset_long_press(lv_indev_t * indev);
-
-/**
- * Enable or disable an input devices
- * @param indev pointer to an input device
- * @param en true: enable; false: disable
- */
-void lv_indev_enable(lv_indev_t * indev, bool en);
-
-/**
- * Set a cursor for a pointer input device (for LV_INPUT_TYPE_POINTER and LV_INPUT_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param cur_obj pointer to an object to be used as cursor
- */
-void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj);
-
-#if LV_USE_GROUP
-/**
- * Set a destination group for a keypad input device (for LV_INDEV_TYPE_KEYPAD)
- * @param indev pointer to an input device
- * @param group point to a group
- */
-void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group);
-#endif
-
-/**
- * Set the an array of points for LV_INDEV_TYPE_BUTTON.
- * These points will be assigned to the buttons to press a specific point on the screen
- * @param indev pointer to an input device
- * @param group point to a group
- */
-void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * points);
-
-/**
- * Get the last point of an input device (for LV_INDEV_TYPE_POINTER and LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param point pointer to a point to store the result
- */
-void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point);
-
-/**
- * Get the last pressed key of an input device (for LV_INDEV_TYPE_KEYPAD)
- * @param indev pointer to an input device
- * @return the last pressed key (0 on error)
- */
-uint32_t lv_indev_get_key(const lv_indev_t * indev);
-
-/**
- * Check if there is dragging with an input device or not (for LV_INDEV_TYPE_POINTER and
- * LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @return true: drag is in progress
- */
-bool lv_indev_is_dragging(const lv_indev_t * indev);
-
-/**
- * Get the vector of dragging of an input device (for LV_INDEV_TYPE_POINTER and
- * LV_INDEV_TYPE_BUTTON)
- * @param indev pointer to an input device
- * @param point pointer to a point to store the vector
- */
-void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point);
-
-/**
- * Do nothing until the next release
- * @param indev pointer to an input device
- */
-void lv_indev_wait_release(lv_indev_t * indev);
-
-/**
- * Get a pointer to the indev read task to
- * modify its parameters with `lv_task_...` functions.
- * @param indev pointer to an inout device
- * @return pointer to the indev read refresher task. (NULL on error)
- */
-lv_task_t * lv_indev_get_read_task(lv_disp_t * indev);
-
-/**
- * Gets a pointer to the currently active object in indev proc functions.
- * NULL if no object is currently being handled or if groups aren't used.
- * @return pointer to currently active object
- */
-lv_obj_t * lv_indev_get_obj_act(void);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_INDEV_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_obj.c b/src/libs/lvgl/src/lv_core/lv_obj.c
deleted file mode 100644
index 511e72db..00000000
--- a/src/libs/lvgl/src/lv_core/lv_obj.c
+++ /dev/null
@@ -1,2649 +0,0 @@
-/**
- * @file lv_base_obj.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-#include "lv_indev.h"
-#include "lv_refr.h"
-#include "lv_group.h"
-#include "lv_disp.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_task.h"
-#include "../lv_misc/lv_async.h"
-#include "../lv_misc/lv_fs.h"
-#include "../lv_hal/lv_hal.h"
-#include <stdint.h>
-#include <string.h>
-#include "../lv_misc/lv_gc.h"
-#include "../lv_misc/lv_math.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_obj"
-#define LV_OBJ_DEF_WIDTH (LV_DPI)
-#define LV_OBJ_DEF_HEIGHT (2 * LV_DPI / 3)
-
-/**********************
- * TYPEDEFS
- **********************/
-typedef struct _lv_event_temp_data
-{
- lv_obj_t * obj;
- bool deleted;
- struct _lv_event_temp_data * prev;
-} lv_event_temp_data_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff);
-static void report_style_mod_core(void * style_p, lv_obj_t * obj);
-static void refresh_children_style(lv_obj_t * obj);
-static void delete_children(lv_obj_t * obj);
-static void base_dir_refr_children(lv_obj_t * obj);
-static void lv_event_mark_deleted(lv_obj_t * obj);
-static void lv_obj_del_async_cb(void * obj);
-static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode);
-static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static bool lv_initialized = false;
-static lv_event_temp_data_t * event_temp_data_head;
-static const void * event_act_data;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Init. the 'lv' library.
- */
-void lv_init(void)
-{
- /* Do nothing if already initialized */
- if(lv_initialized) {
- LV_LOG_WARN("lv_init: already inited");
- return;
- }
-
- LV_LOG_TRACE("lv_init started");
-
- /*Initialize the lv_misc modules*/
- lv_mem_init();
- lv_task_core_init();
-
-#if LV_USE_FILESYSTEM
- lv_fs_init();
-#endif
-
-#if LV_USE_ANIMATION
- lv_anim_core_init();
-#endif
-
-#if LV_USE_GROUP
- lv_group_init();
-#endif
-
- /*Init. the sstyles*/
- lv_style_init();
-
- /*Initialize the screen refresh system*/
- lv_refr_init();
-
- lv_ll_init(&LV_GC_ROOT(_lv_disp_ll), sizeof(lv_disp_t));
- lv_ll_init(&LV_GC_ROOT(_lv_indev_ll), sizeof(lv_indev_t));
-
- /*Init the input device handling*/
- lv_indev_init();
-
- lv_img_decoder_init();
- lv_img_cache_set_size(LV_IMG_CACHE_DEF_SIZE);
-
- lv_initialized = true;
- LV_LOG_INFO("lv_init ready");
-}
-
-#if LV_ENABLE_GC || !LV_MEM_CUSTOM
-void lv_deinit(void)
-{
- lv_gc_clear_roots();
-#if LV_USE_LOG
- lv_log_register_print_cb(NULL);
-#endif
- lv_disp_set_default(NULL);
- lv_mem_deinit();
- lv_initialized = false;
- LV_LOG_INFO("lv_deinit done");
-}
-#endif
-
-/*--------------------
- * Create and delete
- *-------------------*/
-
-/**
- * Create a basic object
- * @param parent pointer to a parent object.
- * If NULL then a screen will be created
- * @param copy pointer to a base object, if not NULL then the new object will be copied from it
- * @return pointer to the new object
- */
-lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
-{
-
- lv_obj_t * new_obj = NULL;
- /*Create a screen if the parent is NULL*/
- if(parent == NULL) {
- LV_LOG_TRACE("Screen create started");
- lv_disp_t * disp = lv_disp_get_default();
- if(!disp) {
- LV_LOG_WARN("lv_obj_create: not display created to so far. No place to assign the new screen");
- return NULL;
- }
-
- new_obj = lv_ll_ins_head(&disp->scr_ll);
- LV_ASSERT_MEM(new_obj);
- if(new_obj == NULL) return NULL;
-
- new_obj->par = NULL; /*screens has no a parent*/
- lv_ll_init(&(new_obj->child_ll), sizeof(lv_obj_t));
-
- /*Set the callbacks*/
- new_obj->signal_cb = lv_obj_signal;
- new_obj->design_cb = lv_obj_design;
- new_obj->event_cb = NULL;
-
- /*Set coordinates to full screen size*/
- new_obj->coords.x1 = 0;
- new_obj->coords.y1 = 0;
- new_obj->coords.x2 = lv_disp_get_hor_res(NULL) - 1;
- new_obj->coords.y2 = lv_disp_get_ver_res(NULL) - 1;
- new_obj->ext_draw_pad = 0;
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- memset(&new_obj->ext_click_pad, 0, sizeof(new_obj->ext_click_pad));
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- new_obj->ext_click_pad_hor = 0;
- new_obj->ext_click_pad_ver = 0;
-#endif
-
- /*Init realign*/
-#if LV_USE_OBJ_REALIGN
- new_obj->realign.align = LV_ALIGN_CENTER;
- new_obj->realign.xofs = 0;
- new_obj->realign.yofs = 0;
- new_obj->realign.base = NULL;
- new_obj->realign.auto_realign = 0;
-#endif
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- new_obj->style_p = th->style.scr;
- } else {
- new_obj->style_p = &lv_style_scr;
- }
-
- /*Init. user date*/
-#if LV_USE_USER_DATA
- memset(&new_obj->user_data, 0, sizeof(lv_obj_user_data_t));
-#endif
-
-#if LV_USE_GROUP
- new_obj->group_p = NULL;
-#endif
- /*Set attributes*/
- new_obj->click = 0;
- new_obj->drag = 0;
- new_obj->drag_throw = 0;
- new_obj->drag_parent = 0;
- new_obj->hidden = 0;
- new_obj->top = 0;
- new_obj->protect = LV_PROTECT_NONE;
- new_obj->opa_scale_en = 0;
- new_obj->opa_scale = LV_OPA_COVER;
- new_obj->parent_event = 0;
-#if LV_USE_BIDI
- new_obj->base_dir = LV_BIDI_BASE_DIR_DEF;
-#else
- new_obj->base_dir = LV_BIDI_DIR_LTR;
-#endif
-
- new_obj->reserved = 0;
-
- new_obj->ext_attr = NULL;
-
- LV_LOG_INFO("Screen create ready");
- }
- /*parent != NULL create normal obj. on a parent*/
- else {
- LV_LOG_TRACE("Object create started");
- LV_ASSERT_OBJ(parent, LV_OBJX_NAME);
-
- new_obj = lv_ll_ins_head(&parent->child_ll);
- LV_ASSERT_MEM(new_obj);
- if(new_obj == NULL) return NULL;
-
- new_obj->par = parent; /*Set the parent*/
- lv_ll_init(&(new_obj->child_ll), sizeof(lv_obj_t));
-
- /*Set the callbacks*/
- new_obj->signal_cb = lv_obj_signal;
- new_obj->design_cb = lv_obj_design;
- new_obj->event_cb = NULL;
-
-#if LV_USE_BIDI
- new_obj->base_dir = LV_BIDI_DIR_INHERIT;
-#else
- new_obj->base_dir = LV_BIDI_DIR_LTR;
-#endif
-
- /*Set coordinates left top corner of parent*/
- new_obj->coords.y1 = parent->coords.y1;
- new_obj->coords.y2 = parent->coords.y1 + LV_OBJ_DEF_HEIGHT;
- if(lv_obj_get_base_dir(new_obj) == LV_BIDI_DIR_RTL) {
- new_obj->coords.x2 = parent->coords.x2;
- new_obj->coords.x1 = parent->coords.x2 - LV_OBJ_DEF_WIDTH;
- } else {
- new_obj->coords.x1 = parent->coords.x1;
- new_obj->coords.x2 = parent->coords.x1 + LV_OBJ_DEF_WIDTH;
- }
- new_obj->ext_draw_pad = 0;
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- memset(&new_obj->ext_click_pad, 0, sizeof(new_obj->ext_click_pad));
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- new_obj->ext_click_pad_hor = 0;
- new_obj->ext_click_pad_ver = 0;
-#endif
-
- /*Init realign*/
-#if LV_USE_OBJ_REALIGN
- new_obj->realign.align = LV_ALIGN_CENTER;
- new_obj->realign.xofs = 0;
- new_obj->realign.yofs = 0;
- new_obj->realign.base = NULL;
- new_obj->realign.auto_realign = 0;
-#endif
- /*Set appearance*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- new_obj->style_p = th->style.panel;
- } else {
- new_obj->style_p = &lv_style_plain_color;
- }
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- memset(&new_obj->ext_click_pad, 0, sizeof(new_obj->ext_click_pad));
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- new_obj->ext_click_pad_hor = 0;
- new_obj->ext_click_pad_ver = 0;
-#endif
-
- /*Init. user date*/
-#if LV_USE_USER_DATA
- memset(&new_obj->user_data, 0, sizeof(lv_obj_user_data_t));
-#endif
-
-#if LV_USE_GROUP
- new_obj->group_p = NULL;
-#endif
-
- /*Set attributes*/
- new_obj->click = 1;
- new_obj->drag = 0;
- new_obj->drag_dir = LV_DRAG_DIR_ALL;
- new_obj->drag_throw = 0;
- new_obj->drag_parent = 0;
- new_obj->hidden = 0;
- new_obj->top = 0;
- new_obj->protect = LV_PROTECT_NONE;
- new_obj->opa_scale = LV_OPA_COVER;
- new_obj->opa_scale_en = 0;
- new_obj->parent_event = 0;
- new_obj->reserved = 0;
-
- new_obj->ext_attr = NULL;
- }
-
- /*Copy the attributes if required*/
- if(copy != NULL) {
- LV_ASSERT_OBJ(copy, LV_OBJX_NAME);
- lv_area_copy(&new_obj->coords, &copy->coords);
- new_obj->ext_draw_pad = copy->ext_draw_pad;
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- lv_area_copy(&new_obj->ext_click_pad, &copy->ext_click_pad);
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- new_obj->ext_click_pad_hor = copy->ext_click_pad_hor;
- new_obj->ext_click_pad_ver = copy->ext_click_pad_ver;
-#endif
-
- /*Set free data*/
-#if LV_USE_USER_DATA
- memcpy(&new_obj->user_data, &copy->user_data, sizeof(lv_obj_user_data_t));
-#endif
- /*Copy realign*/
-#if LV_USE_OBJ_REALIGN
- new_obj->realign.align = copy->realign.align;
- new_obj->realign.xofs = copy->realign.xofs;
- new_obj->realign.yofs = copy->realign.yofs;
- new_obj->realign.base = copy->realign.base;
- new_obj->realign.auto_realign = copy->realign.auto_realign;
-#endif
-
- /*Only copy the `event_cb`. `signal_cb` and `design_cb` will be copied in the derived
- * object type (e.g. `lv_btn`)*/
- new_obj->event_cb = copy->event_cb;
-
- /*Copy attributes*/
- new_obj->click = copy->click;
- new_obj->drag = copy->drag;
- new_obj->drag_dir = copy->drag_dir;
- new_obj->drag_throw = copy->drag_throw;
- new_obj->drag_parent = copy->drag_parent;
- new_obj->hidden = copy->hidden;
- new_obj->top = copy->top;
- new_obj->parent_event = copy->parent_event;
-
- new_obj->opa_scale_en = copy->opa_scale_en;
- new_obj->protect = copy->protect;
- new_obj->opa_scale = copy->opa_scale;
-
- new_obj->style_p = copy->style_p;
-
-#if LV_USE_GROUP
- /*Add to the same group*/
- if(copy->group_p != NULL) {
- lv_group_add_obj(copy->group_p, new_obj);
- }
-#endif
-
- /*Set the same coordinates for non screen objects*/
- if(lv_obj_get_parent(copy) != NULL && parent != NULL) {
- lv_obj_set_pos(new_obj, lv_obj_get_x(copy), lv_obj_get_y(copy));
- } else {
- lv_obj_set_pos(new_obj, 0, 0);
- }
-
- LV_LOG_INFO("Object create ready");
- }
-
- /*Send a signal to the parent to notify it about the new child*/
- if(parent != NULL) {
- parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, new_obj);
-
- /*Invalidate the area if not screen created*/
- lv_obj_invalidate(new_obj);
- }
-
- return new_obj;
-}
-
-/**
- * Delete 'obj' and all of its children
- * @param obj pointer to an object to delete
- * @return LV_RES_INV because the object is deleted
- */
-lv_res_t lv_obj_del(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- lv_obj_invalidate(obj);
-
- /*Delete from the group*/
-#if LV_USE_GROUP
- lv_group_t * group = lv_obj_get_group(obj);
- if(group) lv_group_remove_obj(obj);
-#endif
-
- /*Remove the animations from this object*/
-#if LV_USE_ANIMATION
- lv_anim_del(obj, NULL);
-#endif
-
- /*Recursively delete the children*/
- lv_obj_t * i;
- lv_obj_t * i_next;
- i = lv_ll_get_head(&(obj->child_ll));
- while(i != NULL) {
- /*Get the next object before delete this*/
- i_next = lv_ll_get_next(&(obj->child_ll), i);
-
- /*Call the recursive del to the child too*/
- delete_children(i);
-
- /*Set i to the next node*/
- i = i_next;
- }
-
- /*Let the user free the resources used in `LV_EVENT_DELETE`*/
- lv_event_send(obj, LV_EVENT_DELETE, NULL);
-
- lv_event_mark_deleted(obj);
-
- /* Reset all input devices if the object to delete is used*/
- lv_indev_t * indev = lv_indev_get_next(NULL);
- while(indev) {
- if(indev->proc.types.pointer.act_obj == obj || indev->proc.types.pointer.last_obj == obj) {
- lv_indev_reset(indev);
- }
- if(indev->proc.types.pointer.last_pressed == obj) {
- indev->proc.types.pointer.last_pressed = NULL;
- }
-
-#if LV_USE_GROUP
- if(indev->group == group && obj == lv_indev_get_obj_act()) {
- lv_indev_reset(indev);
- }
-#endif
- indev = lv_indev_get_next(indev);
- }
-
- /* All children deleted.
- * Now clean up the object specific data*/
- obj->signal_cb(obj, LV_SIGNAL_CLEANUP, NULL);
-
- /*Remove the object from parent's children list*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- if(par == NULL) { /*It is a screen*/
- lv_disp_t * d = lv_obj_get_disp(obj);
- lv_ll_rem(&d->scr_ll, obj);
- } else {
- lv_ll_rem(&(par->child_ll), obj);
- }
-
- /*Delete the base objects*/
- if(obj->ext_attr != NULL) lv_mem_free(obj->ext_attr);
- lv_mem_free(obj); /*Free the object itself*/
-
- /*Send a signal to the parent to notify it about the child delete*/
- if(par != NULL) {
- par->signal_cb(par, LV_SIGNAL_CHILD_CHG, NULL);
- }
-
- return LV_RES_INV;
-}
-
-/**
- * Helper function for asynchronously deleting objects.
- * Useful for cases where you can't delete an object directly in an `LV_EVENT_DELETE` handler (i.e. parent).
- * @param obj object to delete
- * @see lv_async_call
- */
-void lv_obj_del_async(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- lv_async_call(lv_obj_del_async_cb, obj);
-}
-
-/**
- * Delete all children of an object
- * @param obj pointer to an object
- */
-void lv_obj_clean(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- lv_obj_t * child = lv_obj_get_child(obj, NULL);
- lv_obj_t * child_next;
- while(child) {
- /* Read the next child before deleting the current
- * because the next couldn't be read from a deleted (invalid) node*/
- child_next = lv_obj_get_child(obj, child);
- lv_obj_del(child);
- child = child_next;
- }
-}
-
-/**
- * Mark an area of an object as invalid.
- * This area will be redrawn by 'lv_refr_task'
- * @param obj pointer to an object
- * @param area the area to redraw
- */
-void lv_obj_invalidate_area(const lv_obj_t * obj, const lv_area_t * area)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- if(lv_obj_get_hidden(obj)) return;
-
- /*Invalidate the object only if it belongs to the 'LV_GC_ROOT(_lv_act_scr)'*/
- lv_obj_t * obj_scr = lv_obj_get_screen(obj);
- lv_disp_t * disp = lv_obj_get_disp(obj_scr);
- if(obj_scr == lv_disp_get_scr_act(disp) || obj_scr == lv_disp_get_layer_top(disp) ||
- obj_scr == lv_disp_get_layer_sys(disp)) {
-
- /*Truncate the area to the object*/
- lv_area_t obj_coords;
- lv_coord_t ext_size = obj->ext_draw_pad;
- lv_area_copy(&obj_coords, &obj->coords);
- obj_coords.x1 -= ext_size;
- obj_coords.y1 -= ext_size;
- obj_coords.x2 += ext_size;
- obj_coords.y2 += ext_size;
-
- bool is_common;
- lv_area_t area_trunc;
-
- is_common = lv_area_intersect(&area_trunc, area, &obj_coords);
- if(is_common == false) return; /*The area is not on the object*/
-
- /*Truncate recursively to the parents*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- while(par != NULL) {
- is_common = lv_area_intersect(&area_trunc, &area_trunc, &par->coords);
- if(is_common == false) break; /*If no common parts with parent break;*/
- if(lv_obj_get_hidden(par)) return; /*If the parent is hidden then the child is hidden and won't be drawn*/
-
- par = lv_obj_get_parent(par);
- }
-
- if(is_common) lv_inv_area(disp, &area_trunc);
- }
-}
-
-/**
- * Mark the object as invalid therefore its current position will be redrawn by 'lv_refr_task'
- * @param obj pointer to an object
- */
-void lv_obj_invalidate(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- /*Truncate the area to the object*/
- lv_area_t obj_coords;
- lv_coord_t ext_size = obj->ext_draw_pad;
- lv_area_copy(&obj_coords, &obj->coords);
- obj_coords.x1 -= ext_size;
- obj_coords.y1 -= ext_size;
- obj_coords.x2 += ext_size;
- obj_coords.y2 += ext_size;
-
- lv_obj_invalidate_area(obj, &obj_coords);
-
-}
-/*=====================
- * Setter functions
- *====================*/
-
-/*--------------------
- * Parent/children set
- *--------------------*/
-
-/**
- * Set a new parent for an object. Its relative position will be the same.
- * @param obj pointer to an object. Can't be a screen.
- * @param parent pointer to the new parent object. (Can't be NULL)
- */
-void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- LV_ASSERT_OBJ(parent, LV_OBJX_NAME);
-
- if(obj->par == NULL) {
- LV_LOG_WARN("Can't set the parent of a screen");
- return;
- }
-
- if(parent == NULL) {
- LV_LOG_WARN("Can't set parent == NULL to an object");
- return;
- }
-
- lv_obj_invalidate(obj);
-
- lv_point_t old_pos;
- old_pos.x = lv_obj_get_x(obj);
- old_pos.y = lv_obj_get_y(obj);
-
- lv_obj_t * old_par = obj->par;
-
- lv_ll_chg_list(&obj->par->child_ll, &parent->child_ll, obj, true);
- obj->par = parent;
- lv_obj_set_pos(obj, old_pos.x, old_pos.y);
-
- /*Notify the original parent because one of its children is lost*/
- old_par->signal_cb(old_par, LV_SIGNAL_CHILD_CHG, NULL);
-
- /*Notify the new parent about the child*/
- parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
-
- lv_obj_invalidate(obj);
-}
-
-/**
- * Move and object to the foreground
- * @param obj pointer to an object
- */
-void lv_obj_move_foreground(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * parent = lv_obj_get_parent(obj);
-
- /*Do nothing of already in the foreground*/
- if(lv_ll_get_head(&parent->child_ll) == obj) return;
-
- lv_obj_invalidate(parent);
-
- lv_ll_chg_list(&parent->child_ll, &parent->child_ll, obj, true);
-
- /*Notify the new parent about the child*/
- parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
-
- lv_obj_invalidate(parent);
-}
-
-/**
- * Move and object to the background
- * @param obj pointer to an object
- */
-void lv_obj_move_background(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * parent = lv_obj_get_parent(obj);
-
- /*Do nothing of already in the background*/
- if(lv_ll_get_tail(&parent->child_ll) == obj) return;
-
- lv_obj_invalidate(parent);
-
- lv_ll_chg_list(&parent->child_ll, &parent->child_ll, obj, false);
-
- /*Notify the new parent about the child*/
- parent->signal_cb(parent, LV_SIGNAL_CHILD_CHG, obj);
-
- lv_obj_invalidate(parent);
-}
-
-/*--------------------
- * Coordinate set
- * ------------------*/
-
-/**
- * Set relative the position of an object (relative to the parent)
- * @param obj pointer to an object
- * @param x new distance from the left side of the parent
- * @param y new distance from the top of the parent
- */
-void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- /*Convert x and y to absolute coordinates*/
- lv_obj_t * par = obj->par;
-
- x = x + par->coords.x1;
- y = y + par->coords.y1;
-
- /*Calculate and set the movement*/
- lv_point_t diff;
- diff.x = x - obj->coords.x1;
- diff.y = y - obj->coords.y1;
-
- /* Do nothing if the position is not changed */
- /* It is very important else recursive positioning can
- * occur without position change*/
- if(diff.x == 0 && diff.y == 0) return;
-
- /*Invalidate the original area*/
- lv_obj_invalidate(obj);
-
- /*Save the original coordinates*/
- lv_area_t ori;
- lv_obj_get_coords(obj, &ori);
-
- obj->coords.x1 += diff.x;
- obj->coords.y1 += diff.y;
- obj->coords.x2 += diff.x;
- obj->coords.y2 += diff.y;
-
- refresh_children_position(obj, diff.x, diff.y);
-
- /*Inform the object about its new coordinates*/
- obj->signal_cb(obj, LV_SIGNAL_CORD_CHG, &ori);
-
- /*Send a signal to the parent too*/
- par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
-
- /*Invalidate the new area*/
- lv_obj_invalidate(obj);
-}
-
-/**
- * Set the x coordinate of a object
- * @param obj pointer to an object
- * @param x new distance from the left side from the parent
- */
-void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_set_pos(obj, x, lv_obj_get_y(obj));
-}
-
-/**
- * Set the y coordinate of a object
- * @param obj pointer to an object
- * @param y new distance from the top of the parent
- */
-void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_set_pos(obj, lv_obj_get_x(obj), y);
-}
-
-/**
- * Set the size of an object
- * @param obj pointer to an object
- * @param w new width
- * @param h new height
- */
-void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-
- /* Do nothing if the size is not changed */
- /* It is very important else recursive resizing can
- * occur without size change*/
- if(lv_obj_get_width(obj) == w && lv_obj_get_height(obj) == h) {
- return;
- }
-
- /*Invalidate the original area*/
- lv_obj_invalidate(obj);
-
- /*Save the original coordinates*/
- lv_area_t ori;
- lv_obj_get_coords(obj, &ori);
-
- /*Set the length and height*/
- obj->coords.y2 = obj->coords.y1 + h - 1;
- if(lv_obj_get_base_dir(obj) == LV_BIDI_DIR_RTL) {
- obj->coords.x1 = obj->coords.x2 - w + 1;
- } else {
- obj->coords.x2 = obj->coords.x1 + w - 1;
- }
-
- /*Send a signal to the object with its new coordinates*/
- obj->signal_cb(obj, LV_SIGNAL_CORD_CHG, &ori);
-
- /*Send a signal to the parent too*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- if(par != NULL) par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
-
- /*Tell the children the parent's size has changed*/
- lv_obj_t * i;
- LV_LL_READ(obj->child_ll, i)
- {
- i->signal_cb(i, LV_SIGNAL_PARENT_SIZE_CHG, NULL);
- }
-
- /*Invalidate the new area*/
- lv_obj_invalidate(obj);
-
- /*Automatically realign the object if required*/
-#if LV_USE_OBJ_REALIGN
- if(obj->realign.auto_realign) lv_obj_realign(obj);
-#endif
-}
-
-/**
- * Set the width of an object
- * @param obj pointer to an object
- * @param w new width
- */
-void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_set_size(obj, w, lv_obj_get_height(obj));
-}
-
-/**
- * Set the height of an object
- * @param obj pointer to an object
- * @param h new height
- */
-void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_set_size(obj, lv_obj_get_width(obj), h);
-}
-
-/**
- * Align an object to an other object.
- * @param obj pointer to an object to align
- * @param base pointer to an object (if NULL the parent is used). 'obj' will be aligned to it.
- * @param align type of alignment (see 'lv_align_t' enum)
- * @param x_mod x coordinate shift after alignment
- * @param y_mod y coordinate shift after alignment
- */
-void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_coord_t new_x = lv_obj_get_x(obj);
- lv_coord_t new_y = lv_obj_get_y(obj);
-
- if(base == NULL) {
- base = lv_obj_get_parent(obj);
- }
-
- LV_ASSERT_OBJ(base, LV_OBJX_NAME);
-
-
- switch(align) {
- case LV_ALIGN_CENTER:
- new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
- new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
- break;
-
- case LV_ALIGN_IN_TOP_LEFT:
- new_x = 0;
- new_y = 0;
- break;
- case LV_ALIGN_IN_TOP_MID:
- new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
- new_y = 0;
- break;
-
- case LV_ALIGN_IN_TOP_RIGHT:
- new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
- new_y = 0;
- break;
-
- case LV_ALIGN_IN_BOTTOM_LEFT:
- new_x = 0;
- new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
- break;
- case LV_ALIGN_IN_BOTTOM_MID:
- new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
- new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_IN_BOTTOM_RIGHT:
- new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
- new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_IN_LEFT_MID:
- new_x = 0;
- new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
- break;
-
- case LV_ALIGN_IN_RIGHT_MID:
- new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
- new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
- break;
-
- case LV_ALIGN_OUT_TOP_LEFT:
- new_x = 0;
- new_y = -lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_OUT_TOP_MID:
- new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
- new_y = -lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_OUT_TOP_RIGHT:
- new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
- new_y = -lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_OUT_BOTTOM_LEFT:
- new_x = 0;
- new_y = lv_obj_get_height(base);
- break;
-
- case LV_ALIGN_OUT_BOTTOM_MID:
- new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
- new_y = lv_obj_get_height(base);
- break;
-
- case LV_ALIGN_OUT_BOTTOM_RIGHT:
- new_x = lv_obj_get_width(base) - lv_obj_get_width(obj);
- new_y = lv_obj_get_height(base);
- break;
-
- case LV_ALIGN_OUT_LEFT_TOP:
- new_x = -lv_obj_get_width(obj);
- new_y = 0;
- break;
-
- case LV_ALIGN_OUT_LEFT_MID:
- new_x = -lv_obj_get_width(obj);
- new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
- break;
-
- case LV_ALIGN_OUT_LEFT_BOTTOM:
- new_x = -lv_obj_get_width(obj);
- new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
- break;
-
- case LV_ALIGN_OUT_RIGHT_TOP:
- new_x = lv_obj_get_width(base);
- new_y = 0;
- break;
-
- case LV_ALIGN_OUT_RIGHT_MID:
- new_x = lv_obj_get_width(base);
- new_y = lv_obj_get_height(base) / 2 - lv_obj_get_height(obj) / 2;
- break;
-
- case LV_ALIGN_OUT_RIGHT_BOTTOM:
- new_x = lv_obj_get_width(base);
- new_y = lv_obj_get_height(base) - lv_obj_get_height(obj);
- break;
- }
-
- /*Bring together the coordination system of base and obj*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- lv_coord_t base_abs_x = base->coords.x1;
- lv_coord_t base_abs_y = base->coords.y1;
- lv_coord_t par_abs_x = par->coords.x1;
- lv_coord_t par_abs_y = par->coords.y1;
- new_x += x_mod + base_abs_x;
- new_y += y_mod + base_abs_y;
- new_x -= par_abs_x;
- new_y -= par_abs_y;
-
- lv_obj_set_pos(obj, new_x, new_y);
-
-#if LV_USE_OBJ_REALIGN
- /*Save the last align parameters to use them in `lv_obj_realign`*/
- obj->realign.align = align;
- obj->realign.xofs = x_mod;
- obj->realign.yofs = y_mod;
- obj->realign.base = base;
- obj->realign.origo_align = 0;
-#endif
-}
-
-/**
- * Align an object's middle point to an other object.
- * @param obj pointer to an object to align
- * @param base pointer to an object (if NULL the parent is used). 'obj' will be aligned to it.
- * @param align type of alignment (see 'lv_align_t' enum)
- * @param x_mod x coordinate shift after alignment
- * @param y_mod y coordinate shift after alignment
- */
-void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_coord_t new_x = lv_obj_get_x(obj);
- lv_coord_t new_y = lv_obj_get_y(obj);
-
- lv_coord_t obj_w_half = lv_obj_get_width(obj) / 2;
- lv_coord_t obj_h_half = lv_obj_get_height(obj) / 2;
-
- if(base == NULL) {
- base = lv_obj_get_parent(obj);
- }
-
- LV_ASSERT_OBJ(base, LV_OBJX_NAME);
-
-
- switch(align) {
- case LV_ALIGN_CENTER:
- new_x = lv_obj_get_width(base) / 2 - obj_w_half;
- new_y = lv_obj_get_height(base) / 2 - obj_h_half;
- break;
-
- case LV_ALIGN_IN_TOP_LEFT:
- new_x = -obj_w_half;
- new_y = -obj_h_half;
- break;
- case LV_ALIGN_IN_TOP_MID:
- new_x = lv_obj_get_width(base) / 2 - obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_IN_TOP_RIGHT:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_IN_BOTTOM_LEFT:
- new_x = -obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
- case LV_ALIGN_IN_BOTTOM_MID:
- new_x = lv_obj_get_width(base) / 2 - obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_IN_BOTTOM_RIGHT:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_IN_LEFT_MID:
- new_x = -obj_w_half;
- new_y = lv_obj_get_height(base) / 2 - obj_h_half;
- break;
-
- case LV_ALIGN_IN_RIGHT_MID:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = lv_obj_get_height(base) / 2 - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_TOP_LEFT:
- new_x = -obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_OUT_TOP_MID:
- new_x = lv_obj_get_width(base) / 2 - obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_OUT_TOP_RIGHT:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_OUT_BOTTOM_LEFT:
- new_x = -obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_BOTTOM_MID:
- new_x = lv_obj_get_width(base) / 2 - obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_BOTTOM_RIGHT:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_LEFT_TOP:
- new_x = -obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_OUT_LEFT_MID:
- new_x = -obj_w_half;
- new_y = lv_obj_get_height(base) / 2 - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_LEFT_BOTTOM:
- new_x = -obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_RIGHT_TOP:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = -obj_h_half;
- break;
-
- case LV_ALIGN_OUT_RIGHT_MID:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = lv_obj_get_height(base) / 2 - obj_h_half;
- break;
-
- case LV_ALIGN_OUT_RIGHT_BOTTOM:
- new_x = lv_obj_get_width(base) - obj_w_half;
- new_y = lv_obj_get_height(base) - obj_h_half;
- break;
- }
-
- /*Bring together the coordination system of base and obj*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- lv_coord_t base_abs_x = base->coords.x1;
- lv_coord_t base_abs_y = base->coords.y1;
- lv_coord_t par_abs_x = par->coords.x1;
- lv_coord_t par_abs_y = par->coords.y1;
- new_x += x_mod + base_abs_x;
- new_y += y_mod + base_abs_y;
- new_x -= par_abs_x;
- new_y -= par_abs_y;
-
- lv_obj_set_pos(obj, new_x, new_y);
-
-#if LV_USE_OBJ_REALIGN
- /*Save the last align parameters to use them in `lv_obj_realign`*/
- obj->realign.align = align;
- obj->realign.xofs = x_mod;
- obj->realign.yofs = y_mod;
- obj->realign.base = base;
- obj->realign.origo_align = 1;
-#endif
-}
-
-/**
- * Realign the object based on the last `lv_obj_align` parameters.
- * @param obj pointer to an object
- */
-void lv_obj_realign(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_OBJ_REALIGN
- if(obj->realign.origo_align)
- lv_obj_align_origo(obj, obj->realign.base, obj->realign.align, obj->realign.xofs, obj->realign.yofs);
- else
- lv_obj_align(obj, obj->realign.base, obj->realign.align, obj->realign.xofs, obj->realign.yofs);
-#else
- (void)obj;
- LV_LOG_WARN("lv_obj_realaign: no effect because LV_USE_OBJ_REALIGN = 0");
-#endif
-}
-
-/**
- * Enable the automatic realign of the object when its size has changed based on the last
- * `lv_obj_align` parameters.
- * @param obj pointer to an object
- * @param en true: enable auto realign; false: disable auto realign
- */
-void lv_obj_set_auto_realign(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_OBJ_REALIGN
- obj->realign.auto_realign = en ? 1 : 0;
-#else
- (void)obj;
- (void)en;
- LV_LOG_WARN("lv_obj_set_auto_realign: no effect because LV_USE_OBJ_REALIGN = 0");
-#endif
-}
-
-
-/**
- * Set the size of an extended clickable area
- * If TINY mode is used, only the largest of the horizontal and vertical padding
- * values are considered.
- * @param obj pointer to an object
- * @param left extended clickable are on the left [px]
- * @param right extended clickable are on the right [px]
- * @param top extended clickable are on the top [px]
- * @param bottom extended clickable are on the bottom [px]
- */
-void lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t left, lv_coord_t right, lv_coord_t top, lv_coord_t bottom)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- obj->ext_click_pad.x1 = left;
- obj->ext_click_pad.x2 = right;
- obj->ext_click_pad.y1 = top;
- obj->ext_click_pad.y2 = bottom;
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- obj->ext_click_pad_hor = LV_MATH_MAX(left, right);
- obj->ext_click_pad_ver = LV_MATH_MAX(top, bottom);
-#else
- (void)obj; /*Unused*/
- (void)left; /*Unused*/
- (void)right; /*Unused*/
- (void)top; /*Unused*/
- (void)bottom; /*Unused*/
-#endif
-}
-
-/*---------------------
- * Appearance set
- *--------------------*/
-
-/**
- * Set a new style for an object
- * @param obj pointer to an object
- * @param style_p pointer to the new style
- */
-void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- LV_ASSERT_STYLE(style);
-
- obj->style_p = style;
-
- /*Send a signal about style change to every children with NULL style*/
- refresh_children_style(obj);
-
- /*Notify the object about the style change too*/
- lv_obj_refresh_style(obj);
-}
-
-/**
- * Notify an object about its style is modified
- * @param obj pointer to an object
- */
-void lv_obj_refresh_style(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_invalidate(obj);
- obj->signal_cb(obj, LV_SIGNAL_STYLE_CHG, NULL);
- lv_obj_invalidate(obj);
-}
-
-/**
- * Notify all object if a style is modified
- * @param style pointer to a style. Only the objects with this style will be notified
- * (NULL to notify all objects)
- */
-void lv_obj_report_style_mod(lv_style_t * style)
-{
- LV_ASSERT_STYLE(style);
-
- lv_disp_t * d = lv_disp_get_next(NULL);
-
- while(d) {
- lv_obj_t * i;
- LV_LL_READ(d->scr_ll, i)
- {
- if(i->style_p == style || style == NULL) {
- lv_obj_refresh_style(i);
- }
-
- report_style_mod_core(style, i);
- }
- d = lv_disp_get_next(d);
- }
-}
-
-/*-----------------
- * Attribute set
- *----------------*/
-
-/**
- * Hide an object. It won't be visible and clickable.
- * @param obj pointer to an object
- * @param en true: hide the object
- */
-void lv_obj_set_hidden(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- if(!obj->hidden) lv_obj_invalidate(obj); /*Invalidate when not hidden (hidden objects are ignored) */
-
- obj->hidden = en == false ? 0 : 1;
-
- if(!obj->hidden) lv_obj_invalidate(obj); /*Invalidate when not hidden (hidden objects are ignored) */
-
- lv_obj_t * par = lv_obj_get_parent(obj);
- par->signal_cb(par, LV_SIGNAL_CHILD_CHG, obj);
-}
-
-/**
- * Enable or disable the clicking of an object
- * @param obj pointer to an object
- * @param en true: make the object clickable
- */
-void lv_obj_set_click(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->click = (en == true ? 1 : 0);
-}
-
-/**
- * Enable to bring this object to the foreground if it
- * or any of its children is clicked
- * @param obj pointer to an object
- * @param en true: enable the auto top feature
- */
-void lv_obj_set_top(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->top = (en == true ? 1 : 0);
-}
-
-/**
- * Enable the dragging of an object
- * @param obj pointer to an object
- * @param en true: make the object dragable
- */
-void lv_obj_set_drag(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- if(en == true) lv_obj_set_click(obj, true); /*Drag is useless without enabled clicking*/
- obj->drag = (en == true ? 1 : 0);
-}
-
-/**
- * Set the directions an object can be dragged in
- * @param obj pointer to an object
- * @param drag_dir bitwise OR of allowed directions an object can be dragged in
- */
-void lv_obj_set_drag_dir(lv_obj_t * obj, lv_drag_dir_t drag_dir)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->drag_dir = drag_dir;
-
- if(obj->drag_dir != 0) lv_obj_set_drag(obj, true); /*Drag direction requires drag*/
-}
-
-/**
- * Enable the throwing of an object after is is dragged
- * @param obj pointer to an object
- * @param en true: enable the drag throw
- */
-void lv_obj_set_drag_throw(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->drag_throw = (en == true ? 1 : 0);
-}
-
-/**
- * Enable to use parent for drag related operations.
- * If trying to drag the object the parent will be moved instead
- * @param obj pointer to an object
- * @param en true: enable the 'drag parent' for the object
- */
-void lv_obj_set_drag_parent(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->drag_parent = (en == true ? 1 : 0);
-}
-
-/**
- * Propagate the events to the parent too
- * @param obj pointer to an object
- * @param en true: enable the event propagation
- */
-void lv_obj_set_parent_event(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->parent_event = (en == true ? 1 : 0);
-}
-
-void lv_obj_set_base_dir(lv_obj_t * obj, lv_bidi_dir_t dir)
-{
- if(dir != LV_BIDI_DIR_LTR && dir != LV_BIDI_DIR_RTL &&
- dir != LV_BIDI_DIR_AUTO && dir != LV_BIDI_DIR_INHERIT) {
-
- LV_LOG_WARN("lv_obj_set_base_dir: invalid base dir");
- return;
- }
-
- obj->base_dir = dir;
- lv_signal_send(obj, LV_SIGNAL_BASE_DIR_CHG, NULL);
-
- /* Notify the children about the parent base dir has changed.
- * (The children might have `LV_BIDI_DIR_INHERIT`)*/
- base_dir_refr_children(obj);
-}
-
-/**
- * Set the opa scale enable parameter (required to set opa_scale with `lv_obj_set_opa_scale()`)
- * @param obj pointer to an object
- * @param en true: opa scaling is enabled for this object and all children; false: no opa scaling
- */
-void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->opa_scale_en = en ? 1 : 0;
-}
-
-/**
- * Set the opa scale of an object.
- * The opacity of this object and all it's children will be scaled down with this factor.
- * `lv_obj_set_opa_scale_enable(obj, true)` needs to be called to enable it.
- * (not for all children just for the parent where to start the opa scaling)
- * @param obj pointer to an object
- * @param opa_scale a factor to scale down opacity [0..255]
- */
-void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->opa_scale = opa_scale;
- lv_obj_invalidate(obj);
-}
-
-/**
- * Set a bit or bits in the protect filed
- * @param obj pointer to an object
- * @param prot 'OR'-ed values from `lv_protect_t`
- */
-void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->protect |= prot;
-}
-
-/**
- * Clear a bit or bits in the protect filed
- * @param obj pointer to an object
- * @param prot 'OR'-ed values from `lv_protect_t`
- */
-void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- prot = (~prot) & 0xFF;
- obj->protect &= prot;
-}
-
-/**
- * Set a an event handler function for an object.
- * Used by the user to react on event which happens with the object.
- * @param obj pointer to an object
- * @param event_cb the new event function
- */
-void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->event_cb = event_cb;
-}
-
-/**
- * Send an event to the object
- * @param obj pointer to an object
- * @param event the type of the event from `lv_event_t`
- * @param data arbitrary data depending on the object type and the event. (Usually `NULL`)
- * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` was deleted in the event
- */
-lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data)
-{
- if(obj == NULL) return LV_RES_OK;
-
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_res_t res;
- res = lv_event_send_func(obj->event_cb, obj, event, data);
- return res;
-}
-
-/**
- * Call an event function with an object, event, and data.
- * @param event_xcb an event callback function. If `NULL` `LV_RES_OK` will return without any actions.
- * (the 'x' in the argument name indicates that its not a fully generic function because it not follows
- * the `func_name(object, callback, ...)` convention)
- * @param obj pointer to an object to associate with the event (can be `NULL` to simply call the `event_cb`)
- * @param event an event
- * @param data pointer to a custom data
- * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` was deleted in the event
- */
-lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, lv_event_t event, const void * data)
-{
- if(obj != NULL) {
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
- }
-
- /* Build a simple linked list from the objects used in the events
- * It's important to know if an this object was deleted by a nested event
- * called from this `even_cb`. */
- lv_event_temp_data_t event_temp_data;
- event_temp_data.obj = obj;
- event_temp_data.deleted = false;
- event_temp_data.prev = NULL;
-
- if(event_temp_data_head) {
- event_temp_data.prev = event_temp_data_head;
- }
- event_temp_data_head = &event_temp_data;
-
- const void * event_act_data_save = event_act_data;
- event_act_data = data;
-
- /*Call the input device's feedback callback if set*/
- lv_indev_t * indev_act = lv_indev_get_act();
- if(indev_act) {
- if(indev_act->driver.feedback_cb) indev_act->driver.feedback_cb(&indev_act->driver, event);
- }
-
- /*Call the event callback itself*/
- if(event_xcb) event_xcb(obj, event);
-
- /*Restore the event data*/
- event_act_data = event_act_data_save;
-
- /*Remove this element from the list*/
- event_temp_data_head = event_temp_data_head->prev;
-
- if(event_temp_data.deleted) {
- return LV_RES_INV;
- }
-
- if(obj) {
- if(obj->parent_event && obj->par) {
- lv_res_t res = lv_event_send(obj->par, event, data);
- if(res != LV_RES_OK) {
- return LV_RES_INV;
- }
- }
- }
-
- return LV_RES_OK;
-}
-
-/**
- * Get the `data` parameter of the current event
- * @return the `data` parameter
- */
-const void * lv_event_get_data(void)
-{
- return event_act_data;
-}
-
-/**
- * Set the a signal function of an object. Used internally by the library.
- * Always call the previous signal function in the new.
- * @param obj pointer to an object
- * @param cb the new signal function
- */
-void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->signal_cb = signal_cb;
-}
-
-/**
- * Send an event to the object
- * @param obj pointer to an object
- * @param event the type of the event from `lv_event_t`.
- */
-void lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- if(obj->signal_cb) obj->signal_cb(obj, signal, param);
-}
-
-/**
- * Set a new design function for an object
- * @param obj pointer to an object
- * @param design_cb the new design function
- */
-void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->design_cb = design_cb;
-}
-
-/*----------------
- * Other set
- *--------------*/
-
-/**
- * Allocate a new ext. data for an object
- * @param obj pointer to an object
- * @param ext_size the size of the new ext. data
- * @return Normal pointer to the allocated ext
- */
-void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->ext_attr = lv_mem_realloc(obj->ext_attr, ext_size);
-
- return (void *)obj->ext_attr;
-}
-
-/**
- * Send a 'LV_SIGNAL_REFR_EXT_SIZE' signal to the object
- * @param obj pointer to an object
- */
-void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- obj->ext_draw_pad = 0;
- obj->signal_cb(obj, LV_SIGNAL_REFR_EXT_DRAW_PAD, NULL);
-
- lv_obj_invalidate(obj);
-}
-
-/*=======================
- * Getter functions
- *======================*/
-
-/**
- * Return with the screen of an object
- * @param obj pointer to an object
- * @return pointer to a screen
- */
-lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_obj_t * par = obj;
- const lv_obj_t * act_p;
-
- do {
- act_p = par;
- par = lv_obj_get_parent(act_p);
- } while(par != NULL);
-
- return (lv_obj_t *)act_p;
-}
-
-/**
- * Get the display of an object
- * @param scr pointer to an object
- * @return pointer the object's display
- */
-lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_obj_t * scr;
-
- if(obj->par == NULL)
- scr = obj; /*`obj` is a screen*/
- else
- scr = lv_obj_get_screen(obj); /*get the screen of `obj`*/
-
- lv_disp_t * d;
- LV_LL_READ(LV_GC_ROOT(_lv_disp_ll), d)
- {
- lv_obj_t * s;
- LV_LL_READ(d->scr_ll, s)
- {
- if(s == scr) return d;
- }
- }
-
- LV_LOG_WARN("lv_scr_get_disp: screen not found")
- return NULL;
-}
-
-/*---------------------
- * Parent/children get
- *--------------------*/
-
-/**
- * Returns with the parent of an object
- * @param obj pointer to an object
- * @return pointer to the parent of 'obj'
- */
-lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->par;
-}
-
-/**
- * Iterate through the children of an object (start from the "youngest")
- * @param obj pointer to an object
- * @param child NULL at first call to get the next children
- * and the previous return value later
- * @return the child after 'act_child' or NULL if no more child
- */
-lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * result = NULL;
-
- if(child == NULL) {
- result = lv_ll_get_head(&obj->child_ll);
- } else {
- result = lv_ll_get_next(&obj->child_ll, child);
- }
-
- return result;
-}
-
-/**
- * Iterate through the children of an object (start from the "oldest")
- * @param obj pointer to an object
- * @param child NULL at first call to get the next children
- * and the previous return value later
- * @return the child after 'act_child' or NULL if no more child
- */
-lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * result = NULL;
-
- if(child == NULL) {
- result = lv_ll_get_tail(&obj->child_ll);
- } else {
- result = lv_ll_get_prev(&obj->child_ll, child);
- }
-
- return result;
-}
-
-/**
- * Count the children of an object (only children directly on 'obj')
- * @param obj pointer to an object
- * @return children number of 'obj'
- */
-uint16_t lv_obj_count_children(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * i;
- uint16_t cnt = 0;
-
- LV_LL_READ(obj->child_ll, i) cnt++;
-
- return cnt;
-}
-
-/** Recursively count the children of an object
- * @param obj pointer to an object
- * @return children number of 'obj'
- */
-uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_t * i;
- uint16_t cnt = 0;
-
- LV_LL_READ(obj->child_ll, i)
- {
- cnt++; /*Count the child*/
- cnt += lv_obj_count_children_recursive(i); /*recursively count children's children*/
- }
-
- return cnt;
-}
-
-/*---------------------
- * Coordinate get
- *--------------------*/
-
-/**
- * Copy the coordinates of an object to an area
- * @param obj pointer to an object
- * @param cords_p pointer to an area to store the coordinates
- */
-void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_area_copy(cords_p, &obj->coords);
-}
-
-/**
- * Reduce area retried by `lv_obj_get_coords()` the get graphically usable area of an object.
- * (Without the size of the border or other extra graphical elements)
- * @param coords_p store the result area here
- */
-void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.border.part & LV_BORDER_LEFT) coords_p->x1 += style->body.border.width;
-
- if(style->body.border.part & LV_BORDER_RIGHT) coords_p->x2 -= style->body.border.width;
-
- if(style->body.border.part & LV_BORDER_TOP) coords_p->y1 += style->body.border.width;
-
- if(style->body.border.part & LV_BORDER_BOTTOM) coords_p->y2 -= style->body.border.width;
-}
-
-/**
- * Get the x coordinate of object
- * @param obj pointer to an object
- * @return distance of 'obj' from the left side of its parent
- */
-lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_coord_t rel_x;
- lv_obj_t * parent = lv_obj_get_parent(obj);
- if(parent) {
- rel_x = obj->coords.x1 - parent->coords.x1;
- } else {
- rel_x = obj->coords.x1;
- }
- return rel_x;
-}
-
-/**
- * Get the y coordinate of object
- * @param obj pointer to an object
- * @return distance of 'obj' from the top of its parent
- */
-lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_coord_t rel_y;
- lv_obj_t * parent = lv_obj_get_parent(obj);
- if(parent) {
- rel_y = obj->coords.y1 - parent->coords.y1;
- } else {
- rel_y = obj->coords.y1;
- }
- return rel_y;
-}
-
-/**
- * Get the width of an object
- * @param obj pointer to an object
- * @return the width
- */
-lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return lv_area_get_width(&obj->coords);
-}
-
-/**
- * Get the height of an object
- * @param obj pointer to an object
- * @return the height
- */
-lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return lv_area_get_height(&obj->coords);
-}
-
-/**
- * Get that width reduced by the left and right padding.
- * @param obj pointer to an object
- * @return the width which still fits into the container
- */
-lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_style_t * style = lv_obj_get_style(obj);
-
- return lv_obj_get_width(obj) - style->body.padding.left - style->body.padding.right;
-}
-
-/**
- * Get that height reduced by the top an bottom padding.
- * @param obj pointer to an object
- * @return the height which still fits into the container
- */
-lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_style_t * style = lv_obj_get_style(obj);
-
- return lv_obj_get_height(obj) - style->body.padding.top - style->body.padding.bottom;
-}
-
-/**
- * Get the automatic realign property of the object.
- * @param obj pointer to an object
- * @return true: auto realign is enabled; false: auto realign is disabled
- */
-bool lv_obj_get_auto_realign(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_OBJ_REALIGN
- return obj->realign.auto_realign ? true : false;
-#else
- (void)obj;
- return false;
-#endif
-}
-
-/**
- * Get the left padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended left padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_left(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- return obj->ext_click_pad_hor;
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- return obj->ext_click_pad.x1;
-#else
- (void)obj; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the right padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended right padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_right(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- return obj->ext_click_pad_hor;
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- return obj->ext_click_pad.x2;
-#else
- (void)obj; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the top padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended top padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_top(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- return obj->ext_click_pad_ver;
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- return obj->ext_click_pad.y1;
-#else
- (void)obj; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the bottom padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended bottom padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- return obj->ext_click_pad_ver;
-#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- return obj->ext_click_pad.y2;
-#else
- (void)obj; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the extended size attribute of an object
- * @param obj pointer to an object
- * @return the extended size attribute
- */
-lv_coord_t lv_obj_get_ext_draw_pad(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->ext_draw_pad;
-}
-
-/*-----------------
- * Appearance get
- *---------------*/
-
-/**
- * Get the style pointer of an object (if NULL get style of the parent)
- * @param obj pointer to an object
- * @return pointer to a style
- */
-const lv_style_t * lv_obj_get_style(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_style_t * style_act = obj->style_p;
- if(style_act == NULL) {
- lv_obj_t * par = obj->par;
-
- while(par) {
- if(par->style_p) {
- if(par->style_p->glass == 0) {
-#if LV_USE_GROUP == 0
- style_act = par->style_p;
-#else
- /*If a parent is focused then use then focused style*/
- lv_group_t * g = lv_obj_get_group(par);
- if(lv_group_get_focused(g) == par) {
- style_act = lv_group_mod_style(g, par->style_p);
- } else {
- style_act = par->style_p;
- }
-#endif
- break;
- }
- }
- par = par->par;
- }
- }
-#if LV_USE_GROUP
- if(obj->group_p) {
- if(lv_group_get_focused(obj->group_p) == obj) {
- style_act = lv_group_mod_style(obj->group_p, style_act);
- }
- }
-#endif
-
- if(style_act == NULL) style_act = &lv_style_plain;
-
- return style_act;
-}
-
-/*-----------------
- * Attribute get
- *----------------*/
-
-/**
- * Get the hidden attribute of an object
- * @param obj pointer to an object
- * @return true: the object is hidden
- */
-bool lv_obj_get_hidden(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->hidden == 0 ? false : true;
-}
-
-/**
- * Get the click enable attribute of an object
- * @param obj pointer to an object
- * @return true: the object is clickable
- */
-bool lv_obj_get_click(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->click == 0 ? false : true;
-}
-
-/**
- * Get the top enable attribute of an object
- * @param obj pointer to an object
- * @return true: the auto top feture is enabled
- */
-bool lv_obj_get_top(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->top == 0 ? false : true;
-}
-
-/**
- * Get the drag enable attribute of an object
- * @param obj pointer to an object
- * @return true: the object is dragable
- */
-bool lv_obj_get_drag(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->drag == 0 ? false : true;
-}
-
-/**
- * Get the directions an object can be dragged
- * @param obj pointer to an object
- * @return bitwise OR of allowed directions an object can be dragged in
- */
-lv_drag_dir_t lv_obj_get_drag_dir(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->drag_dir;
-}
-
-/**
- * Get the drag throw enable attribute of an object
- * @param obj pointer to an object
- * @return true: drag throw is enabled
- */
-bool lv_obj_get_drag_throw(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->drag_throw == 0 ? false : true;
-}
-
-/**
- * Get the drag parent attribute of an object
- * @param obj pointer to an object
- * @return true: drag parent is enabled
- */
-bool lv_obj_get_drag_parent(const lv_obj_t * obj)
-{
- return obj->drag_parent == 0 ? false : true;
-}
-
-/**
- * Get the drag parent attribute of an object
- * @param obj pointer to an object
- * @return true: drag parent is enabled
- */
-bool lv_obj_get_parent_event(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->parent_event == 0 ? false : true;
-}
-
-
-lv_bidi_dir_t lv_obj_get_base_dir(const lv_obj_t * obj)
-{
-#if LV_USE_BIDI
- const lv_obj_t * parent = obj;
-
- while(parent) {
- if(parent->base_dir != LV_BIDI_DIR_INHERIT) return parent->base_dir;
-
- parent = lv_obj_get_parent(parent);
- }
-
- return LV_BIDI_BASE_DIR_DEF;
-#else
- (void) obj; /*Unused*/
- return LV_BIDI_DIR_LTR;
-#endif
-}
-
-
-/**
- * Get the opa scale enable parameter
- * @param obj pointer to an object
- * @return true: opa scaling is enabled for this object and all children; false: no opa scaling
- */
-lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->opa_scale_en == 0 ? false : true;
-}
-
-/**
- * Get the opa scale parameter of an object
- * @param obj pointer to an object
- * @return opa scale [0..255]
- */
-lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- const lv_obj_t * parent = obj;
-
- while(parent) {
- if(parent->opa_scale_en) return parent->opa_scale;
- parent = lv_obj_get_parent(parent);
- }
-
- return LV_OPA_COVER;
-}
-
-/**
- * Get the protect field of an object
- * @param obj pointer to an object
- * @return protect field ('OR'ed values of `lv_protect_t`)
- */
-uint8_t lv_obj_get_protect(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->protect;
-}
-
-/**
- * Check at least one bit of a given protect bitfield is set
- * @param obj pointer to an object
- * @param prot protect bits to test ('OR'ed values of `lv_protect_t`)
- * @return false: none of the given bits are set, true: at least one bit is set
- */
-bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return (obj->protect & prot) == 0 ? false : true;
-}
-
-/**
- * Get the signal function of an object
- * @param obj pointer to an object
- * @return the signal function
- */
-lv_signal_cb_t lv_obj_get_signal_cb(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->signal_cb;
-}
-
-/**
- * Get the design function of an object
- * @param obj pointer to an object
- * @return the design function
- */
-lv_design_cb_t lv_obj_get_design_cb(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->design_cb;
-}
-
-/**
- * Get the event function of an object
- * @param obj pointer to an object
- * @return the event function
- */
-lv_event_cb_t lv_obj_get_event_cb(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->event_cb;
-}
-
-/*------------------
- * Other get
- *-----------------*/
-
-/**
- * Get the ext pointer
- * @param obj pointer to an object
- * @return the ext pointer but not the dynamic version
- * Use it as ext->data1, and NOT da(ext)->data1
- */
-void * lv_obj_get_ext_attr(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->ext_attr;
-}
-
-/**
- * Get object's and its ancestors type. Put their name in `type_buf` starting with the current type.
- * E.g. buf.type[0]="lv_btn", buf.type[1]="lv_cont", buf.type[2]="lv_obj"
- * @param obj pointer to an object which type should be get
- * @param buf pointer to an `lv_obj_type_t` buffer to store the types
- */
-void lv_obj_get_type(const lv_obj_t * obj, lv_obj_type_t * buf)
-{
- LV_ASSERT_NULL(buf);
- LV_ASSERT_NULL(obj);
-
- lv_obj_type_t tmp;
-
- memset(buf, 0, sizeof(lv_obj_type_t));
- memset(&tmp, 0, sizeof(lv_obj_type_t));
-
- obj->signal_cb((lv_obj_t *)obj, LV_SIGNAL_GET_TYPE, &tmp);
-
- uint8_t cnt;
- for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
- if(tmp.type[cnt] == NULL) break;
- }
-
- /*Swap the order. The real type comes first*/
- uint8_t i;
- for(i = 0; i < cnt; i++) {
- buf->type[i] = tmp.type[cnt - 1 - i];
- }
-}
-
-#if LV_USE_USER_DATA
-
-/**
- * Get the object's user data
- * @param obj pointer to an object
- * @return user data
- */
-lv_obj_user_data_t lv_obj_get_user_data(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->user_data;
-}
-
-/**
- * Get a pointer to the object's user data
- * @param obj pointer to an object
- * @return pointer to the user data
- */
-lv_obj_user_data_t * lv_obj_get_user_data_ptr(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return (lv_obj_user_data_t *)&obj->user_data;
-}
-
-/**
- * Set the object's user data. The data will be copied.
- * @param obj pointer to an object
- * @param data user data
- */
-void lv_obj_set_user_data(lv_obj_t * obj, lv_obj_user_data_t data)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- memcpy(&obj->user_data, &data, sizeof(lv_obj_user_data_t));
-}
-#endif
-
-#if LV_USE_GROUP
-/**
- * Get the group of the object
- * @param obj pointer to an object
- * @return the pointer to group of the object
- */
-void * lv_obj_get_group(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- return obj->group_p;
-}
-
-/**
- * Tell whether the object is the focused object of a group or not.
- * @param obj pointer to an object
- * @return true: the object is focused, false: the object is not focused or not in a group
- */
-bool lv_obj_is_focused(const lv_obj_t * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- if(obj->group_p) {
- if(lv_group_get_focused(obj->group_p) == obj) return true;
- }
-
- return false;
-}
-#endif
-
-
-/*-------------------
- * OTHER FUNCTIONS
- *------------------*/
-
-/**
- * Used in the signal callback to handle `LV_SIGNAL_GET_TYPE` signal
- * @param obj pointer to an object
- * @param buf pointer to `lv_obj_type_t`. (`param` in the signal callback)
- * @param name name of the object. E.g. "lv_btn". (Only the pointer is saved)
- * @return LV_RES_OK
- */
-lv_res_t lv_obj_handle_get_type_signal(lv_obj_type_t * buf, const char * name)
-{
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = name;
-
- return LV_RES_OK;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void lv_obj_del_async_cb(void * obj)
-{
- LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
-
- lv_obj_del(obj);
-}
-
-/**
- * Handle the drawing related tasks of the base objects.
- * @param obj pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * @param return true/false, depends on 'mode'
- */
-static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
-
- /*Most trivial test. Is the mask fully IN the object? If no it surely doesn't cover it*/
- if(lv_area_is_in(mask_p, &obj->coords) == false) return false;
-
- /*Can cover the area only if fully solid (no opacity)*/
- const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.opa < LV_OPA_MAX) return false;
-
- /* Because of the radius it is not sure the area is covered
- * Check the areas where there is no radius*/
- lv_coord_t r = style->body.radius;
-
- if(r == LV_RADIUS_CIRCLE) return false;
-
- lv_area_t area_tmp;
-
- /*Check horizontally without radius*/
- lv_obj_get_coords(obj, &area_tmp);
- area_tmp.x1 += r;
- area_tmp.x2 -= r;
- if(lv_area_is_in(mask_p, &area_tmp) == false) return false;
-
- /*Check vertically without radius*/
- lv_obj_get_coords(obj, &area_tmp);
- area_tmp.y1 += r;
- area_tmp.y2 -= r;
- if(lv_area_is_in(mask_p, &area_tmp) == false) return false;
-
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- const lv_style_t * style = lv_obj_get_style(obj);
- lv_draw_rect(&obj->coords, mask_p, style, lv_obj_get_opa_scale(obj));
- }
-
- return true;
-}
-
-/**
- * Signal function of the basic object
- * @param obj pointer to an object
- * @param sign signal type
- * @param param parameter for the signal (depends on signal type)
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
-{
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_res_t res = LV_RES_OK;
-
- if(sign == LV_SIGNAL_CHILD_CHG) {
- /*Return 'invalid' if the child change signal is not enabled*/
- if(lv_obj_is_protected(obj, LV_PROTECT_CHILD_CHG) != false) res = LV_RES_INV;
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.shadow.width > obj->ext_draw_pad) obj->ext_draw_pad = style->body.shadow.width;
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- lv_obj_refresh_ext_draw_pad(obj);
- }
- return res;
-}
-
-/**
- * Reposition the children of an object. (Called recursively)
- * @param obj pointer to an object which children will be repositioned
- * @param x_diff x coordinate shift
- * @param y_diff y coordinate shift
- */
-static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff)
-{
- lv_obj_t * i;
- LV_LL_READ(obj->child_ll, i)
- {
- i->coords.x1 += x_diff;
- i->coords.y1 += y_diff;
- i->coords.x2 += x_diff;
- i->coords.y2 += y_diff;
-
- refresh_children_position(i, x_diff, y_diff);
- }
-}
-
-/**
- * Refresh the style of all children of an object. (Called recursively)
- * @param style_p refresh objects only with this style.
- * @param obj pointer to an object
- */
-static void report_style_mod_core(void * style_p, lv_obj_t * obj)
-{
- lv_obj_t * i;
- LV_LL_READ(obj->child_ll, i)
- {
- if(i->style_p == style_p || style_p == NULL) {
- refresh_children_style(i);
- lv_obj_refresh_style(i);
- }
-
- report_style_mod_core(style_p, i);
- }
-}
-
-/**
- * Recursively refresh the style of the children. Go deeper until a not NULL style is found
- * because the NULL styles are inherited from the parent
- * @param obj pointer to an object
- */
-static void refresh_children_style(lv_obj_t * obj)
-{
- lv_obj_t * child = lv_obj_get_child(obj, NULL);
- while(child != NULL) {
- if(child->style_p == NULL) {
- refresh_children_style(child); /*Check children too*/
- lv_obj_refresh_style(child); /*Notify the child about the style change*/
- } else if(child->style_p->glass) {
- /*Children with 'glass' parent might be effected if their style == NULL*/
- refresh_children_style(child);
- }
- child = lv_obj_get_child(obj, child);
- }
-}
-
-/**
- * Called by 'lv_obj_del' to delete the children objects
- * @param obj pointer to an object (all of its children will be deleted)
- */
-static void delete_children(lv_obj_t * obj)
-{
- lv_obj_t * i;
- lv_obj_t * i_next;
- i = lv_ll_get_head(&(obj->child_ll));
-
- /*Remove from the group; remove before transversing children so that
- * the object still has access to all children during the
- * LV_SIGNAL_DEFOCUS call*/
-#if LV_USE_GROUP
- lv_group_t * group = lv_obj_get_group(obj);
- if(group) lv_group_remove_obj(obj);
-#endif
-
- while(i != NULL) {
- /*Get the next object before delete this*/
- i_next = lv_ll_get_next(&(obj->child_ll), i);
-
- /*Call the recursive del to the child too*/
- delete_children(i);
-
- /*Set i to the next node*/
- i = i_next;
- }
-
- /*Let the suer free the resources used in `LV_EVENT_DELETE`*/
- lv_event_send(obj, LV_EVENT_DELETE, NULL);
-
- lv_event_mark_deleted(obj);
-
- /*Remove the animations from this object*/
-#if LV_USE_ANIMATION
- lv_anim_del(obj, NULL);
-#endif
-
- /* Reset the input devices if
- * the object to delete is used*/
- lv_indev_t * indev = lv_indev_get_next(NULL);
- while(indev) {
- if(indev->proc.types.pointer.act_obj == obj || indev->proc.types.pointer.last_obj == obj) {
- lv_indev_reset(indev);
- }
-
- if(indev->proc.types.pointer.last_pressed == obj) {
- indev->proc.types.pointer.last_pressed = NULL;
- }
-#if LV_USE_GROUP
- if(indev->group == group && obj == lv_indev_get_obj_act()) {
- lv_indev_reset(indev);
- }
-#endif
- indev = lv_indev_get_next(indev);
- }
-
- /* Clean up the object specific data*/
- obj->signal_cb(obj, LV_SIGNAL_CLEANUP, NULL);
-
- /*Remove the object from parent's children list*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- lv_ll_rem(&(par->child_ll), obj);
-
- /*Delete the base objects*/
- if(obj->ext_attr != NULL) lv_mem_free(obj->ext_attr);
- lv_mem_free(obj); /*Free the object itself*/
-}
-
-static void base_dir_refr_children(lv_obj_t * obj)
-{
- lv_obj_t * child;
- child = lv_obj_get_child(obj, NULL);
-
- while(child) {
- if(child->base_dir == LV_BIDI_DIR_INHERIT) {
- lv_signal_send(child, LV_SIGNAL_BASE_DIR_CHG, NULL);
- base_dir_refr_children(child);
- }
-
- child = lv_obj_get_child(obj, child);
- }
-}
-
-
-static void lv_event_mark_deleted(lv_obj_t * obj)
-{
- lv_event_temp_data_t * t = event_temp_data_head;
-
- while(t) {
- if(t->obj == obj) t->deleted = true;
- t = t->prev;
- }
-}
diff --git a/src/libs/lvgl/src/lv_core/lv_obj.h b/src/libs/lvgl/src/lv_core/lv_obj.h
deleted file mode 100644
index 24517241..00000000
--- a/src/libs/lvgl/src/lv_core/lv_obj.h
+++ /dev/null
@@ -1,1025 +0,0 @@
-/**
- * @file lv_obj.h
- *
- */
-
-#ifndef LV_OBJ_H
-#define LV_OBJ_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stddef.h>
-#include <stdbool.h>
-#include "lv_style.h"
-#include "../lv_misc/lv_types.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_ll.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_log.h"
-#include "../lv_misc/lv_bidi.h"
-#include "../lv_hal/lv_hal.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/*Error check of lv_conf.h*/
-#if LV_HOR_RES_MAX == 0 || LV_VER_RES_MAX == 0
-#error "LittlevGL: LV_HOR_RES_MAX and LV_VER_RES_MAX must be greater than 0"
-#endif
-
-#if LV_ANTIALIAS > 1
-#error "LittlevGL: LV_ANTIALIAS can be only 0 or 1"
-#endif
-
-#define LV_MAX_ANCESTOR_NUM 8
-
-#define LV_EXT_CLICK_AREA_OFF 0
-#define LV_EXT_CLICK_AREA_TINY 1
-#define LV_EXT_CLICK_AREA_FULL 2
-
-/**********************
- * TYPEDEFS
- **********************/
-
-struct _lv_obj_t;
-
-
-/** Design modes */
-enum {
- LV_DESIGN_DRAW_MAIN, /**< Draw the main portion of the object */
- LV_DESIGN_DRAW_POST, /**< Draw extras on the object */
- LV_DESIGN_COVER_CHK, /**< Check if the object fully covers the 'mask_p' area */
-};
-typedef uint8_t lv_design_mode_t;
-
-/**
- * The design callback is used to draw the object on the screen.
- * It accepts the object, a mask area, and the mode in which to draw the object.
- */
-typedef bool (*lv_design_cb_t)(struct _lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode);
-
-enum {
- LV_EVENT_PRESSED, /**< The object has been pressed*/
- LV_EVENT_PRESSING, /**< The object is being pressed (called continuously while pressing)*/
- LV_EVENT_PRESS_LOST, /**< User is still pressing but slid cursor/finger off of the object */
- LV_EVENT_SHORT_CLICKED, /**< User pressed object for a short period of time, then released it. Not called if dragged. */
- LV_EVENT_LONG_PRESSED, /**< Object has been pressed for at least `LV_INDEV_LONG_PRESS_TIME`. Not called if dragged.*/
- LV_EVENT_LONG_PRESSED_REPEAT, /**< Called after `LV_INDEV_LONG_PRESS_TIME` in every
- `LV_INDEV_LONG_PRESS_REP_TIME` ms. Not called if dragged.*/
- LV_EVENT_CLICKED, /**< Called on release if not dragged (regardless to long press)*/
- LV_EVENT_RELEASED, /**< Called in every cases when the object has been released*/
- LV_EVENT_DRAG_BEGIN,
- LV_EVENT_DRAG_END,
- LV_EVENT_DRAG_THROW_BEGIN,
- LV_EVENT_KEY,
- LV_EVENT_FOCUSED,
- LV_EVENT_DEFOCUSED,
- LV_EVENT_VALUE_CHANGED, /**< The object's value has changed (i.e. slider moved) */
- LV_EVENT_INSERT,
- LV_EVENT_REFRESH,
- LV_EVENT_APPLY, /**< "Ok", "Apply" or similar specific button has clicked*/
- LV_EVENT_CANCEL, /**< "Close", "Cancel" or similar specific button has clicked*/
- LV_EVENT_DELETE, /**< Object is being deleted */
-};
-typedef uint8_t lv_event_t; /**< Type of event being sent to the object. */
-
-/**
- * @brief Event callback.
- * Events are used to notify the user of some action being taken on the object.
- * For details, see ::lv_event_t.
- */
-typedef void (*lv_event_cb_t)(struct _lv_obj_t * obj, lv_event_t event);
-
-/** Signals are for use by the object itself or to extend the object's functionality.
- * Applications should use ::lv_obj_set_event_cb to be notified of events that occur
- * on the object. */
-enum {
- /*General signals*/
- LV_SIGNAL_CLEANUP, /**< Object is being deleted */
- LV_SIGNAL_CHILD_CHG, /**< Child was removed/added */
- LV_SIGNAL_CORD_CHG, /**< Object coordinates/size have changed */
- LV_SIGNAL_PARENT_SIZE_CHG, /**< Parent's size has changed */
- LV_SIGNAL_STYLE_CHG, /**< Object's style has changed */
- LV_SIGNAL_BASE_DIR_CHG, /**<The base dir has changed*/
- LV_SIGNAL_REFR_EXT_DRAW_PAD, /**< Object's extra padding has changed */
- LV_SIGNAL_GET_TYPE, /**< LittlevGL needs to retrieve the object's type */
-
- /*Input device related*/
- LV_SIGNAL_PRESSED, /**< The object has been pressed*/
- LV_SIGNAL_PRESSING, /**< The object is being pressed (called continuously while pressing)*/
- LV_SIGNAL_PRESS_LOST, /**< User is still pressing but slid cursor/finger off of the object */
- LV_SIGNAL_RELEASED, /**< User pressed object for a short period of time, then released it. Not called if dragged. */
- LV_SIGNAL_LONG_PRESS, /**< Object has been pressed for at least `LV_INDEV_LONG_PRESS_TIME`. Not called if dragged.*/
- LV_SIGNAL_LONG_PRESS_REP, /**< Called after `LV_INDEV_LONG_PRESS_TIME` in every `LV_INDEV_LONG_PRESS_REP_TIME` ms. Not called if dragged.*/
- LV_SIGNAL_DRAG_BEGIN,
- LV_SIGNAL_DRAG_END,
-
- /*Group related*/
- LV_SIGNAL_FOCUS,
- LV_SIGNAL_DEFOCUS,
- LV_SIGNAL_CONTROL,
- LV_SIGNAL_GET_EDITABLE,
-};
-typedef uint8_t lv_signal_t;
-
-typedef lv_res_t (*lv_signal_cb_t)(struct _lv_obj_t * obj, lv_signal_t sign, void * param);
-
-/** Object alignment. */
-enum {
- LV_ALIGN_CENTER = 0,
- LV_ALIGN_IN_TOP_LEFT,
- LV_ALIGN_IN_TOP_MID,
- LV_ALIGN_IN_TOP_RIGHT,
- LV_ALIGN_IN_BOTTOM_LEFT,
- LV_ALIGN_IN_BOTTOM_MID,
- LV_ALIGN_IN_BOTTOM_RIGHT,
- LV_ALIGN_IN_LEFT_MID,
- LV_ALIGN_IN_RIGHT_MID,
- LV_ALIGN_OUT_TOP_LEFT,
- LV_ALIGN_OUT_TOP_MID,
- LV_ALIGN_OUT_TOP_RIGHT,
- LV_ALIGN_OUT_BOTTOM_LEFT,
- LV_ALIGN_OUT_BOTTOM_MID,
- LV_ALIGN_OUT_BOTTOM_RIGHT,
- LV_ALIGN_OUT_LEFT_TOP,
- LV_ALIGN_OUT_LEFT_MID,
- LV_ALIGN_OUT_LEFT_BOTTOM,
- LV_ALIGN_OUT_RIGHT_TOP,
- LV_ALIGN_OUT_RIGHT_MID,
- LV_ALIGN_OUT_RIGHT_BOTTOM,
-};
-typedef uint8_t lv_align_t;
-
-#if LV_USE_OBJ_REALIGN
-typedef struct
-{
- const struct _lv_obj_t * base;
- lv_coord_t xofs;
- lv_coord_t yofs;
- lv_align_t align;
- uint8_t auto_realign : 1;
- uint8_t origo_align : 1; /**< 1: the origo (center of the object) was aligned with
- `lv_obj_align_origo`*/
-} lv_reailgn_t;
-#endif
-
-enum {
- LV_DRAG_DIR_HOR = 0x1, /**< Object can be dragged horizontally. */
- LV_DRAG_DIR_VER = 0x2, /**< Object can be dragged vertically. */
- LV_DRAG_DIR_ALL = 0x3, /**< Object can be dragged in all directions. */
-};
-
-typedef uint8_t lv_drag_dir_t;
-
-typedef struct _lv_obj_t
-{
- struct _lv_obj_t * par; /**< Pointer to the parent object*/
- lv_ll_t child_ll; /**< Linked list to store the children objects*/
-
- lv_area_t coords; /**< Coordinates of the object (x1, y1, x2, y2)*/
-
- lv_event_cb_t event_cb; /**< Event callback function */
- lv_signal_cb_t signal_cb; /**< Object type specific signal function*/
- lv_design_cb_t design_cb; /**< Object type specific design function*/
-
- void * ext_attr; /**< Object type specific extended data*/
- const lv_style_t * style_p; /**< Pointer to the object's style*/
-
-#if LV_USE_GROUP != 0
- void * group_p; /**< Pointer to the group of the object*/
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- uint8_t ext_click_pad_hor; /**< Extra click padding in horizontal direction */
- uint8_t ext_click_pad_ver; /**< Extra click padding in vertical direction */
-#endif
-
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
- lv_area_t ext_click_pad; /**< Extra click padding area. */
-#endif
-
- /*Attributes and states*/
- uint8_t click : 1; /**< 1: Can be pressed by an input device*/
- uint8_t drag : 1; /**< 1: Enable the dragging*/
- uint8_t drag_throw : 1; /**< 1: Enable throwing with drag*/
- uint8_t drag_parent : 1; /**< 1: Parent will be dragged instead*/
- uint8_t hidden : 1; /**< 1: Object is hidden*/
- uint8_t top : 1; /**< 1: If the object or its children is clicked it goes to the foreground*/
- uint8_t opa_scale_en : 1; /**< 1: opa_scale is set*/
- uint8_t parent_event : 1; /**< 1: Send the object's events to the parent too. */
- lv_drag_dir_t drag_dir : 2; /**< Which directions the object can be dragged in */
- lv_bidi_dir_t base_dir : 2; /**< Base direction of texts related to this object */
- uint8_t reserved : 3; /**< Reserved for future use*/
- uint8_t protect; /**< Automatically happening actions can be prevented. 'OR'ed values from
- `lv_protect_t`*/
- lv_opa_t opa_scale; /**< Scale down the opacity by this factor. Effects all children as well*/
-
- lv_coord_t ext_draw_pad; /**< EXTtend the size in every direction for drawing. */
-
-#if LV_USE_OBJ_REALIGN
- lv_reailgn_t realign; /**< Information about the last call to ::lv_obj_align. */
-#endif
-
-#if LV_USE_USER_DATA
- lv_obj_user_data_t user_data; /**< Custom user data for object. */
-#endif
-
-} lv_obj_t;
-
-/*Protect some attributes (max. 8 bit)*/
-enum {
- LV_PROTECT_NONE = 0x00,
- LV_PROTECT_CHILD_CHG = 0x01, /**< Disable the child change signal. Used by the library*/
- LV_PROTECT_PARENT = 0x02, /**< Prevent automatic parent change (e.g. in lv_page)*/
- LV_PROTECT_POS = 0x04, /**< Prevent automatic positioning (e.g. in lv_cont layout)*/
- LV_PROTECT_FOLLOW = 0x08, /**< Prevent the object be followed in automatic ordering (e.g. in
- lv_cont PRETTY layout)*/
- LV_PROTECT_PRESS_LOST = 0x10, /**< If the `indev` was pressing this object but swiped out while
- pressing do not search other object.*/
- LV_PROTECT_CLICK_FOCUS = 0x20, /**< Prevent focusing the object by clicking on it*/
-};
-typedef uint8_t lv_protect_t;
-
-/** Used by `lv_obj_get_type()`. The object's and its ancestor types are stored here*/
-typedef struct
-{
- const char * type[LV_MAX_ANCESTOR_NUM]; /**< [0]: the actual type, [1]: ancestor, [2] #1's ancestor
- ... [x]: "lv_obj" */
-} lv_obj_type_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Init. the 'lv' library.
- */
-void lv_init(void);
-
-
-/**
- * Deinit the 'lv' library
- * Currently only implemented when not using custorm allocators, or GC is enabled.
- */
-#if LV_ENABLE_GC || !LV_MEM_CUSTOM
-void lv_deinit(void);
-#endif
-
-/*--------------------
- * Create and delete
- *-------------------*/
-
-/**
- * Create a basic object
- * @param parent pointer to a parent object.
- * If NULL then a screen will be created
- * @param copy pointer to a base object, if not NULL then the new object will be copied from it
- * @return pointer to the new object
- */
-lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy);
-
-/**
- * Delete 'obj' and all of its children
- * @param obj pointer to an object to delete
- * @return LV_RES_INV because the object is deleted
- */
-lv_res_t lv_obj_del(lv_obj_t * obj);
-
-/**
- * Helper function for asynchronously deleting objects.
- * Useful for cases where you can't delete an object directly in an `LV_EVENT_DELETE` handler (i.e. parent).
- * @param obj object to delete
- * @see lv_async_call
- */
-void lv_obj_del_async(struct _lv_obj_t *obj);
-
-/**
- * Delete all children of an object
- * @param obj pointer to an object
- */
-void lv_obj_clean(lv_obj_t * obj);
-
-
-/**
- * Mark an area of an object as invalid.
- * This area will be redrawn by 'lv_refr_task'
- * @param obj pointer to an object
- * @param area the area to redraw
- */
-void lv_obj_invalidate_area(const lv_obj_t * obj, const lv_area_t * area);
-
-/**
- * Mark the object as invalid therefore its current position will be redrawn by 'lv_refr_task'
- * @param obj pointer to an object
- */
-void lv_obj_invalidate(const lv_obj_t * obj);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/*--------------------
- * Parent/children set
- *--------------------*/
-
-/**
- * Set a new parent for an object. Its relative position will be the same.
- * @param obj pointer to an object. Can't be a screen.
- * @param parent pointer to the new parent object. (Can't be NULL)
- */
-void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent);
-
-/**
- * Move and object to the foreground
- * @param obj pointer to an object
- */
-void lv_obj_move_foreground(lv_obj_t * obj);
-
-/**
- * Move and object to the background
- * @param obj pointer to an object
- */
-void lv_obj_move_background(lv_obj_t * obj);
-
-/*--------------------
- * Coordinate set
- * ------------------*/
-
-/**
- * Set relative the position of an object (relative to the parent)
- * @param obj pointer to an object
- * @param x new distance from the left side of the parent
- * @param y new distance from the top of the parent
- */
-void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
-
-/**
- * Set the x coordinate of a object
- * @param obj pointer to an object
- * @param x new distance from the left side from the parent
- */
-void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x);
-
-/**
- * Set the y coordinate of a object
- * @param obj pointer to an object
- * @param y new distance from the top of the parent
- */
-void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y);
-
-/**
- * Set the size of an object
- * @param obj pointer to an object
- * @param w new width
- * @param h new height
- */
-void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h);
-
-/**
- * Set the width of an object
- * @param obj pointer to an object
- * @param w new width
- */
-void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w);
-
-/**
- * Set the height of an object
- * @param obj pointer to an object
- * @param h new height
- */
-void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h);
-
-/**
- * Align an object to an other object.
- * @param obj pointer to an object to align
- * @param base pointer to an object (if NULL the parent is used). 'obj' will be aligned to it.
- * @param align type of alignment (see 'lv_align_t' enum)
- * @param x_mod x coordinate shift after alignment
- * @param y_mod y coordinate shift after alignment
- */
-void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod);
-
-/**
- * Align an object to an other object.
- * @param obj pointer to an object to align
- * @param base pointer to an object (if NULL the parent is used). 'obj' will be aligned to it.
- * @param align type of alignment (see 'lv_align_t' enum)
- * @param x_mod x coordinate shift after alignment
- * @param y_mod y coordinate shift after alignment
- */
-void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod);
-
-/**
- * Realign the object based on the last `lv_obj_align` parameters.
- * @param obj pointer to an object
- */
-void lv_obj_realign(lv_obj_t * obj);
-
-/**
- * Enable the automatic realign of the object when its size has changed based on the last
- * `lv_obj_align` parameters.
- * @param obj pointer to an object
- * @param en true: enable auto realign; false: disable auto realign
- */
-void lv_obj_set_auto_realign(lv_obj_t * obj, bool en);
-
-/**
- * Set the size of an extended clickable area
- * @param obj pointer to an object
- * @param left extended clickable are on the left [px]
- * @param right extended clickable are on the right [px]
- * @param top extended clickable are on the top [px]
- * @param bottom extended clickable are on the bottom [px]
- */
-void lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t left, lv_coord_t right, lv_coord_t top, lv_coord_t bottom);
-
-/*---------------------
- * Appearance set
- *--------------------*/
-
-/**
- * Set a new style for an object
- * @param obj pointer to an object
- * @param style_p pointer to the new style
- */
-void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style);
-
-/**
- * Notify an object about its style is modified
- * @param obj pointer to an object
- */
-void lv_obj_refresh_style(lv_obj_t * obj);
-
-/**
- * Notify all object if a style is modified
- * @param style pointer to a style. Only the objects with this style will be notified
- * (NULL to notify all objects)
- */
-void lv_obj_report_style_mod(lv_style_t * style);
-
-/*-----------------
- * Attribute set
- *----------------*/
-
-/**
- * Hide an object. It won't be visible and clickable.
- * @param obj pointer to an object
- * @param en true: hide the object
- */
-void lv_obj_set_hidden(lv_obj_t * obj, bool en);
-
-/**
- * Enable or disable the clicking of an object
- * @param obj pointer to an object
- * @param en true: make the object clickable
- */
-void lv_obj_set_click(lv_obj_t * obj, bool en);
-
-/**
- * Enable to bring this object to the foreground if it
- * or any of its children is clicked
- * @param obj pointer to an object
- * @param en true: enable the auto top feature
- */
-void lv_obj_set_top(lv_obj_t * obj, bool en);
-
-/**
- * Enable the dragging of an object
- * @param obj pointer to an object
- * @param en true: make the object dragable
- */
-void lv_obj_set_drag(lv_obj_t * obj, bool en);
-
-/**
- * Set the directions an object can be dragged in
- * @param obj pointer to an object
- * @param drag_dir bitwise OR of allowed drag directions
- */
-void lv_obj_set_drag_dir(lv_obj_t * obj, lv_drag_dir_t drag_dir);
-
-/**
- * Enable the throwing of an object after is is dragged
- * @param obj pointer to an object
- * @param en true: enable the drag throw
- */
-void lv_obj_set_drag_throw(lv_obj_t * obj, bool en);
-
-/**
- * Enable to use parent for drag related operations.
- * If trying to drag the object the parent will be moved instead
- * @param obj pointer to an object
- * @param en true: enable the 'drag parent' for the object
- */
-void lv_obj_set_drag_parent(lv_obj_t * obj, bool en);
-
-/**
- * Propagate the events to the parent too
- * @param obj pointer to an object
- * @param en true: enable the event propagation
- */
-void lv_obj_set_parent_event(lv_obj_t * obj, bool en);
-
-void lv_obj_set_base_dir(lv_obj_t * obj, lv_bidi_dir_t dir);
-/**
- * Set the opa scale enable parameter (required to set opa_scale with `lv_obj_set_opa_scale()`)
- * @param obj pointer to an object
- * @param en true: opa scaling is enabled for this object and all children; false: no opa scaling
- */
-void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en);
-
-/**
- * Set the opa scale of an object.
- * The opacity of this object and all it's children will be scaled down with this factor.
- * `lv_obj_set_opa_scale_enable(obj, true)` needs to be called to enable it.
- * (not for all children just for the parent where to start the opa scaling)
- * @param obj pointer to an object
- * @param opa_scale a factor to scale down opacity [0..255]
- */
-void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale);
-
-/**
- * Set a bit or bits in the protect filed
- * @param obj pointer to an object
- * @param prot 'OR'-ed values from `lv_protect_t`
- */
-void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot);
-
-/**
- * Clear a bit or bits in the protect filed
- * @param obj pointer to an object
- * @param prot 'OR'-ed values from `lv_protect_t`
- */
-void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot);
-
-/**
- * Set a an event handler function for an object.
- * Used by the user to react on event which happens with the object.
- * @param obj pointer to an object
- * @param event_cb the new event function
- */
-void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb);
-
-/**
- * Send an event to the object
- * @param obj pointer to an object
- * @param event the type of the event from `lv_event_t`.
- * @param data arbitrary data depending on the object type and the event. (Usually `NULL`)
- * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` was deleted in the event
- */
-lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data);
-
-/**
- * Call an event function with an object, event, and data.
- * @param event_xcb an event callback function. If `NULL` `LV_RES_OK` will return without any actions.
- * (the 'x' in the argument name indicates that its not a fully generic function because it not follows
- * the `func_name(object, callback, ...)` convention)
- * @param obj pointer to an object to associate with the event (can be `NULL` to simply call the `event_cb`)
- * @param event an event
- * @param data pointer to a custom data
- * @return LV_RES_OK: `obj` was not deleted in the event; LV_RES_INV: `obj` was deleted in the event
- */
-lv_res_t lv_event_send_func(lv_event_cb_t event_xcb, lv_obj_t * obj, lv_event_t event, const void * data);
-
-/**
- * Get the `data` parameter of the current event
- * @return the `data` parameter
- */
-const void * lv_event_get_data(void);
-
-/**
- * Set the a signal function of an object. Used internally by the library.
- * Always call the previous signal function in the new.
- * @param obj pointer to an object
- * @param signal_cb the new signal function
- */
-void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb);
-
-/**
- * Send an event to the object
- * @param obj pointer to an object
- * @param event the type of the event from `lv_event_t`.
- */
-void lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param);
-
-/**
- * Set a new design function for an object
- * @param obj pointer to an object
- * @param design_cb the new design function
- */
-void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb);
-
-/*----------------
- * Other set
- *--------------*/
-
-/**
- * Allocate a new ext. data for an object
- * @param obj pointer to an object
- * @param ext_size the size of the new ext. data
- * @return pointer to the allocated ext
- */
-void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size);
-
-/**
- * Send a 'LV_SIGNAL_REFR_EXT_SIZE' signal to the object
- * @param obj pointer to an object
- */
-void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj);
-
-/*=======================
- * Getter functions
- *======================*/
-
-/**
- * Return with the screen of an object
- * @param obj pointer to an object
- * @return pointer to a screen
- */
-lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj);
-
-/**
- * Get the display of an object
- * @param scr pointer to an object
- * @return pointer the object's display
- */
-lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj);
-
-/*---------------------
- * Parent/children get
- *--------------------*/
-
-/**
- * Returns with the parent of an object
- * @param obj pointer to an object
- * @return pointer to the parent of 'obj'
- */
-lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj);
-
-/**
- * Iterate through the children of an object (start from the "youngest, lastly created")
- * @param obj pointer to an object
- * @param child NULL at first call to get the next children
- * and the previous return value later
- * @return the child after 'act_child' or NULL if no more child
- */
-lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child);
-
-/**
- * Iterate through the children of an object (start from the "oldest", firstly created)
- * @param obj pointer to an object
- * @param child NULL at first call to get the next children
- * and the previous return value later
- * @return the child after 'act_child' or NULL if no more child
- */
-lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child);
-
-/**
- * Count the children of an object (only children directly on 'obj')
- * @param obj pointer to an object
- * @return children number of 'obj'
- */
-uint16_t lv_obj_count_children(const lv_obj_t * obj);
-
-/** Recursively count the children of an object
- * @param obj pointer to an object
- * @return children number of 'obj'
- */
-uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj);
-
-/*---------------------
- * Coordinate get
- *--------------------*/
-
-/**
- * Copy the coordinates of an object to an area
- * @param obj pointer to an object
- * @param cords_p pointer to an area to store the coordinates
- */
-void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p);
-
-/**
- * Reduce area retried by `lv_obj_get_coords()` the get graphically usable area of an object.
- * (Without the size of the border or other extra graphical elements)
- * @param coords_p store the result area here
- */
-void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p);
-
-/**
- * Get the x coordinate of object
- * @param obj pointer to an object
- * @return distance of 'obj' from the left side of its parent
- */
-lv_coord_t lv_obj_get_x(const lv_obj_t * obj);
-
-/**
- * Get the y coordinate of object
- * @param obj pointer to an object
- * @return distance of 'obj' from the top of its parent
- */
-lv_coord_t lv_obj_get_y(const lv_obj_t * obj);
-
-/**
- * Get the width of an object
- * @param obj pointer to an object
- * @return the width
- */
-lv_coord_t lv_obj_get_width(const lv_obj_t * obj);
-
-/**
- * Get the height of an object
- * @param obj pointer to an object
- * @return the height
- */
-lv_coord_t lv_obj_get_height(const lv_obj_t * obj);
-
-/**
- * Get that width reduced by the left and right padding.
- * @param obj pointer to an object
- * @return the width which still fits into the container
- */
-lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj);
-
-/**
- * Get that height reduced by the top an bottom padding.
- * @param obj pointer to an object
- * @return the height which still fits into the container
- */
-lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj);
-
-/**
- * Get the automatic realign property of the object.
- * @param obj pointer to an object
- * @return true: auto realign is enabled; false: auto realign is disabled
- */
-bool lv_obj_get_auto_realign(const lv_obj_t * obj);
-
-/**
- * Get the left padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended left padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_left(const lv_obj_t * obj);
-
-/**
- * Get the right padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended right padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_right(const lv_obj_t * obj);
-
-/**
- * Get the top padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended top padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_top(const lv_obj_t * obj);
-
-/**
- * Get the bottom padding of extended clickable area
- * @param obj pointer to an object
- * @return the extended bottom padding
- */
-lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj);
-
-/**
- * Get the extended size attribute of an object
- * @param obj pointer to an object
- * @return the extended size attribute
- */
-lv_coord_t lv_obj_get_ext_draw_pad(const lv_obj_t * obj);
-
-/*-----------------
- * Appearance get
- *---------------*/
-
-/**
- * Get the style pointer of an object (if NULL get style of the parent)
- * @param obj pointer to an object
- * @return pointer to a style
- */
-const lv_style_t * lv_obj_get_style(const lv_obj_t * obj);
-
-/*-----------------
- * Attribute get
- *----------------*/
-
-/**
- * Get the hidden attribute of an object
- * @param obj pointer to an object
- * @return true: the object is hidden
- */
-bool lv_obj_get_hidden(const lv_obj_t * obj);
-
-/**
- * Get the click enable attribute of an object
- * @param obj pointer to an object
- * @return true: the object is clickable
- */
-bool lv_obj_get_click(const lv_obj_t * obj);
-
-/**
- * Get the top enable attribute of an object
- * @param obj pointer to an object
- * @return true: the auto top feature is enabled
- */
-bool lv_obj_get_top(const lv_obj_t * obj);
-
-/**
- * Get the drag enable attribute of an object
- * @param obj pointer to an object
- * @return true: the object is dragable
- */
-bool lv_obj_get_drag(const lv_obj_t * obj);
-
-/**
- * Get the directions an object can be dragged
- * @param obj pointer to an object
- * @return bitwise OR of allowed directions an object can be dragged in
- */
-lv_drag_dir_t lv_obj_get_drag_dir(const lv_obj_t * obj);
-
-/**
- * Get the drag throw enable attribute of an object
- * @param obj pointer to an object
- * @return true: drag throw is enabled
- */
-bool lv_obj_get_drag_throw(const lv_obj_t * obj);
-
-/**
- * Get the drag parent attribute of an object
- * @param obj pointer to an object
- * @return true: drag parent is enabled
- */
-bool lv_obj_get_drag_parent(const lv_obj_t * obj);
-
-/**
- * Get the drag parent attribute of an object
- * @param obj pointer to an object
- * @return true: drag parent is enabled
- */
-bool lv_obj_get_parent_event(const lv_obj_t * obj);
-
-
-lv_bidi_dir_t lv_obj_get_base_dir(const lv_obj_t * obj);
-
-/**
- * Get the opa scale enable parameter
- * @param obj pointer to an object
- * @return true: opa scaling is enabled for this object and all children; false: no opa scaling
- */
-lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj);
-
-/**
- * Get the opa scale parameter of an object
- * @param obj pointer to an object
- * @return opa scale [0..255]
- */
-lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj);
-
-/**
- * Get the protect field of an object
- * @param obj pointer to an object
- * @return protect field ('OR'ed values of `lv_protect_t`)
- */
-uint8_t lv_obj_get_protect(const lv_obj_t * obj);
-
-/**
- * Check at least one bit of a given protect bitfield is set
- * @param obj pointer to an object
- * @param prot protect bits to test ('OR'ed values of `lv_protect_t`)
- * @return false: none of the given bits are set, true: at least one bit is set
- */
-bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot);
-
-/**
- * Get the signal function of an object
- * @param obj pointer to an object
- * @return the signal function
- */
-lv_signal_cb_t lv_obj_get_signal_cb(const lv_obj_t * obj);
-
-/**
- * Get the design function of an object
- * @param obj pointer to an object
- * @return the design function
- */
-lv_design_cb_t lv_obj_get_design_cb(const lv_obj_t * obj);
-
-/**
- * Get the event function of an object
- * @param obj pointer to an object
- * @return the event function
- */
-lv_event_cb_t lv_obj_get_event_cb(const lv_obj_t * obj);
-
-/*------------------
- * Other get
- *-----------------*/
-
-/**
- * Get the ext pointer
- * @param obj pointer to an object
- * @return the ext pointer but not the dynamic version
- * Use it as ext->data1, and NOT da(ext)->data1
- */
-void * lv_obj_get_ext_attr(const lv_obj_t * obj);
-
-/**
- * Get object's and its ancestors type. Put their name in `type_buf` starting with the current type.
- * E.g. buf.type[0]="lv_btn", buf.type[1]="lv_cont", buf.type[2]="lv_obj"
- * @param obj pointer to an object which type should be get
- * @param buf pointer to an `lv_obj_type_t` buffer to store the types
- */
-void lv_obj_get_type(const lv_obj_t * obj, lv_obj_type_t * buf);
-
-#if LV_USE_USER_DATA
-/**
- * Get the object's user data
- * @param obj pointer to an object
- * @return user data
- */
-lv_obj_user_data_t lv_obj_get_user_data(const lv_obj_t * obj);
-
-/**
- * Get a pointer to the object's user data
- * @param obj pointer to an object
- * @return pointer to the user data
- */
-lv_obj_user_data_t * lv_obj_get_user_data_ptr(const lv_obj_t * obj);
-
-/**
- * Set the object's user data. The data will be copied.
- * @param obj pointer to an object
- * @param data user data
- */
-void lv_obj_set_user_data(lv_obj_t * obj, lv_obj_user_data_t data);
-
-#endif
-
-#if LV_USE_GROUP
-/**
- * Get the group of the object
- * @param obj pointer to an object
- * @return the pointer to group of the object
- */
-void * lv_obj_get_group(const lv_obj_t * obj);
-
-/**
- * Tell whether the object is the focused object of a group or not.
- * @param obj pointer to an object
- * @return true: the object is focused, false: the object is not focused or not in a group
- */
-bool lv_obj_is_focused(const lv_obj_t * obj);
-
-#endif
-
-/*-------------------
- * OTHER FUNCTIONS
- *------------------*/
-
-/**
- * Used in the signal callback to handle `LV_SIGNAL_GET_TYPE` signal
- * @param buf pointer to `lv_obj_type_t`. (`param` in the signal callback)
- * @param name name of the object. E.g. "lv_btn". (Only the pointer is saved)
- * @return LV_RES_OK
- */
-lv_res_t lv_obj_handle_get_type_signal(lv_obj_type_t * buf, const char * name);
-
-/**********************
- * MACROS
- **********************/
-
-/**
- * Helps to quickly declare an event callback function.
- * Will be expanded to: `void <name> (lv_obj_t * obj, lv_event_t e)`
- *
- * Examples:
- * static LV_EVENT_CB_DECLARE(my_event1); //Protoype declaration
- *
- * static LV_EVENT_CB_DECLARE(my_event1)
- * {
- * if(e == LV_EVENT_CLICKED) {
- * lv_obj_set_hidden(obj ,true);
- * }
- * }
- */
-#define LV_EVENT_CB_DECLARE(name) void name(lv_obj_t * obj, lv_event_t e)
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_OBJ_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_refr.c b/src/libs/lvgl/src/lv_core/lv_refr.c
deleted file mode 100644
index e71e1629..00000000
--- a/src/libs/lvgl/src/lv_core/lv_refr.c
+++ /dev/null
@@ -1,612 +0,0 @@
-/**
- * @file lv_refr.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stddef.h>
-#include "lv_refr.h"
-#include "lv_disp.h"
-#include "../lv_hal/lv_hal_tick.h"
-#include "../lv_hal/lv_hal_disp.h"
-#include "../lv_misc/lv_task.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_gc.h"
-#include "../lv_draw/lv_draw.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-/* Draw translucent random colored areas on the invalidated (redrawn) areas*/
-#define MASK_AREA_DEBUG 0
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void lv_refr_join_area(void);
-static void lv_refr_areas(void);
-static void lv_refr_area(const lv_area_t * area_p);
-static void lv_refr_area_part(const lv_area_t * area_p);
-static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj);
-static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * mask_p);
-static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p);
-static void lv_refr_vdb_flush(void);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint32_t px_num;
-static lv_disp_t * disp_refr; /*Display being refreshed*/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the screen refresh subsystem
- */
-void lv_refr_init(void)
-{
- /*Nothing to do*/
-}
-
-/**
- * Redraw the invalidated areas now.
- * Normally the redrawing is periodically executed in `lv_task_handler` but a long blocking process
- * can prevent the call of `lv_task_handler`. In this case if the the GUI is updated in the process
- * (e.g. progress bar) this function can be called when the screen should be updated.
- * @param disp pointer to display to refresh. NULL to refresh all displays.
- */
-void lv_refr_now(lv_disp_t * disp)
-{
- if(disp) {
- lv_disp_refr_task(disp->refr_task);
- } else {
- lv_disp_t * d;
- d = lv_disp_get_next(NULL);
- while(d) {
- lv_disp_refr_task(d->refr_task);
- d = lv_disp_get_next(d);
- }
- }
-}
-
-/**
- * Invalidate an area on display to redraw it
- * @param area_p pointer to area which should be invalidated (NULL: delete the invalidated areas)
- * @param disp pointer to display where the area should be invalidated (NULL can be used if there is
- * only one display)
- */
-void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p)
-{
- if(!disp) disp = lv_disp_get_default();
- if(!disp) return;
-
- /*Clear the invalidate buffer if the parameter is NULL*/
- if(area_p == NULL) {
- disp->inv_p = 0;
- return;
- }
-
- lv_area_t scr_area;
- scr_area.x1 = 0;
- scr_area.y1 = 0;
- scr_area.x2 = lv_disp_get_hor_res(disp) - 1;
- scr_area.y2 = lv_disp_get_ver_res(disp) - 1;
-
- lv_area_t com_area;
- bool suc;
-
- suc = lv_area_intersect(&com_area, area_p, &scr_area);
-
- /*The area is truncated to the screen*/
- if(suc != false) {
- if(disp->driver.rounder_cb) disp->driver.rounder_cb(&disp->driver, &com_area);
-
- /*Save only if this area is not in one of the saved areas*/
- uint16_t i;
- for(i = 0; i < disp->inv_p; i++) {
- if(lv_area_is_in(&com_area, &disp->inv_areas[i]) != false) return;
- }
-
- /*Save the area*/
- if(disp->inv_p < LV_INV_BUF_SIZE) {
- lv_area_copy(&disp->inv_areas[disp->inv_p], &com_area);
- } else { /*If no place for the area add the screen*/
- disp->inv_p = 0;
- lv_area_copy(&disp->inv_areas[disp->inv_p], &scr_area);
- }
- disp->inv_p++;
- }
-}
-
-/**
- * Get the display which is being refreshed
- * @return the display being refreshed
- */
-lv_disp_t * lv_refr_get_disp_refreshing(void)
-{
- return disp_refr;
-}
-
-/**
- * Set the display which is being refreshed.
- * It shouldn1t be used directly by the user.
- * It can be used to trick the drawing functions about there is an active display.
- * @param the display being refreshed
- */
-void lv_refr_set_disp_refreshing(lv_disp_t * disp)
-{
- disp_refr = disp;
-}
-
-/**
- * Called periodically to handle the refreshing
- * @param task pointer to the task itself
- */
-void lv_disp_refr_task(lv_task_t * task)
-{
- LV_LOG_TRACE("lv_refr_task: started");
-
- uint32_t start = lv_tick_get();
-
- disp_refr = task->user_data;
-
- lv_refr_join_area();
-
- lv_refr_areas();
-
- /*If refresh happened ...*/
- if(disp_refr->inv_p != 0) {
- /*In true double buffered mode copy the refreshed areas to the new VDB to keep it up to
- * date*/
- if(lv_disp_is_true_double_buf(disp_refr)) {
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
-
- /*Flush the content of the VDB*/
- lv_refr_vdb_flush();
-
- /* With true double buffering the flushing should be only the address change of the
- * current frame buffer. Wait until the address change is ready and copy the changed
- * content to the other frame buffer (new active VDB) to keep the buffers synchronized*/
- while(vdb->flushing)
- ;
-
- uint8_t * buf_act = (uint8_t *)vdb->buf_act;
- uint8_t * buf_ina = (uint8_t *)vdb->buf_act == vdb->buf1 ? vdb->buf2 : vdb->buf1;
-
- lv_coord_t hres = lv_disp_get_hor_res(disp_refr);
- uint16_t a;
- for(a = 0; a < disp_refr->inv_p; a++) {
- if(disp_refr->inv_area_joined[a] == 0) {
- lv_coord_t y;
- uint32_t start_offs =
- (hres * disp_refr->inv_areas[a].y1 + disp_refr->inv_areas[a].x1) * sizeof(lv_color_t);
- uint32_t line_length = lv_area_get_width(&disp_refr->inv_areas[a]) * sizeof(lv_color_t);
-
- for(y = disp_refr->inv_areas[a].y1; y <= disp_refr->inv_areas[a].y2; y++) {
- memcpy(buf_act + start_offs, buf_ina + start_offs, line_length);
- start_offs += hres * sizeof(lv_color_t);
- }
- }
- }
- } /*End of true double buffer handling*/
-
- /*Clean up*/
- memset(disp_refr->inv_areas, 0, sizeof(disp_refr->inv_areas));
- memset(disp_refr->inv_area_joined, 0, sizeof(disp_refr->inv_area_joined));
- disp_refr->inv_p = 0;
-
- /*Call monitor cb if present*/
- if(disp_refr->driver.monitor_cb) {
- disp_refr->driver.monitor_cb(&disp_refr->driver, lv_tick_elaps(start), px_num);
- }
- }
-
- lv_draw_free_buf();
-
- LV_LOG_TRACE("lv_refr_task: ready");
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Join the areas which has got common parts
- */
-static void lv_refr_join_area(void)
-{
- uint32_t join_from;
- uint32_t join_in;
- lv_area_t joined_area;
- for(join_in = 0; join_in < disp_refr->inv_p; join_in++) {
- if(disp_refr->inv_area_joined[join_in] != 0) continue;
-
- /*Check all areas to join them in 'join_in'*/
- for(join_from = 0; join_from < disp_refr->inv_p; join_from++) {
- /*Handle only unjoined areas and ignore itself*/
- if(disp_refr->inv_area_joined[join_from] != 0 || join_in == join_from) {
- continue;
- }
-
- /*Check if the areas are on each other*/
- if(lv_area_is_on(&disp_refr->inv_areas[join_in], &disp_refr->inv_areas[join_from]) == false) {
- continue;
- }
-
- lv_area_join(&joined_area, &disp_refr->inv_areas[join_in], &disp_refr->inv_areas[join_from]);
-
- /*Join two area only if the joined area size is smaller*/
- if(lv_area_get_size(&joined_area) < (lv_area_get_size(&disp_refr->inv_areas[join_in]) +
- lv_area_get_size(&disp_refr->inv_areas[join_from]))) {
- lv_area_copy(&disp_refr->inv_areas[join_in], &joined_area);
-
- /*Mark 'join_form' is joined into 'join_in'*/
- disp_refr->inv_area_joined[join_from] = 1;
- }
- }
- }
-}
-
-/**
- * Refresh the joined areas
- */
-static void lv_refr_areas(void)
-{
- px_num = 0;
- uint32_t i;
-
- for(i = 0; i < disp_refr->inv_p; i++) {
- /*Refresh the unjoined areas*/
- if(disp_refr->inv_area_joined[i] == 0) {
-
- lv_refr_area(&disp_refr->inv_areas[i]);
-
- if(disp_refr->driver.monitor_cb) px_num += lv_area_get_size(&disp_refr->inv_areas[i]);
- }
- }
-}
-
-/**
- * Refresh an area if there is Virtual Display Buffer
- * @param area_p pointer to an area to refresh
- */
-static void lv_refr_area(const lv_area_t * area_p)
-{
- /*True double buffering: there are two screen sized buffers. Just redraw directly into a
- * buffer*/
- if(lv_disp_is_true_double_buf(disp_refr)) {
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
- vdb->area.x1 = 0;
- vdb->area.x2 = lv_disp_get_hor_res(disp_refr) - 1;
- vdb->area.y1 = 0;
- vdb->area.y2 = lv_disp_get_ver_res(disp_refr) - 1;
- lv_refr_area_part(area_p);
- }
- /*The buffer is smaller: refresh the area in parts*/
- else {
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
- /*Calculate the max row num*/
- lv_coord_t w = lv_area_get_width(area_p);
- lv_coord_t h = lv_area_get_height(area_p);
- lv_coord_t y2 =
- area_p->y2 >= lv_disp_get_ver_res(disp_refr) ? y2 = lv_disp_get_ver_res(disp_refr) - 1 : area_p->y2;
-
- int32_t max_row = (uint32_t)vdb->size / w;
-
- if(max_row > h) max_row = h;
-
- /*Round down the lines of VDB if rounding is added*/
- if(disp_refr->driver.rounder_cb) {
- lv_area_t tmp;
- tmp.x1 = 0;
- tmp.x2 = 0;
- tmp.y1 = 0;
-
- lv_coord_t h_tmp = max_row;
- do {
- tmp.y2 = h_tmp - 1;
- disp_refr->driver.rounder_cb(&disp_refr->driver, &tmp);
-
- /*If this height fits into `max_row` then fine*/
- if(lv_area_get_height(&tmp) <= max_row) break;
-
- /*Decrement the height of the area until it fits into `max_row` after rounding*/
- h_tmp--;
- } while(h_tmp > 0);
-
- if(h_tmp <= 0) {
- LV_LOG_WARN("Can't set VDB height using the round function. (Wrong round_cb or to "
- "small VDB)");
- return;
- } else {
- max_row = tmp.y2 + 1;
- }
- }
-
- if (disp_refr->render_direction) {
- /*Always use the full row*/
- lv_coord_t row;
- lv_coord_t row_last = y2;
- for(row = area_p->y2; row > max_row - 1 + area_p->y1; row -= max_row) {
- /*Calc. the next y coordinates of VDB*/
- vdb->area.x1 = area_p->x1;
- vdb->area.x2 = area_p->x2;
- vdb->area.y1 = row - max_row + 1;
- vdb->area.y2 = row;
- if(vdb->area.y2 > y2) vdb->area.y2 = y2;
- row_last = vdb->area.y1;
- lv_refr_area_part(area_p);
- }
-
- /*If the last (first) y coordinates are not handled yet ...*/
- if(area_p->y1 != row_last) {
- /*Calc. the next y coordinates of VDB*/
- vdb->area.x1 = area_p->x1;
- vdb->area.x2 = area_p->x2;
- vdb->area.y1 = area_p->y1;
- vdb->area.y2 = row;
-
- /*Refresh this part too*/
- lv_refr_area_part(area_p);
- }
- }
- else {
- /*Always use the full row*/
- lv_coord_t row;
- lv_coord_t row_last = 0;
- for(row = area_p->y1; row + max_row - 1 <= y2; row += max_row) {
- /*Calc. the next y coordinates of VDB*/
- vdb->area.x1 = area_p->x1;
- vdb->area.x2 = area_p->x2;
- vdb->area.y1 = row;
- vdb->area.y2 = row + max_row - 1;
- if(vdb->area.y2 > y2) vdb->area.y2 = y2;
- row_last = vdb->area.y2;
- lv_refr_area_part(area_p);
- }
-
- /*If the last y coordinates are not handled yet ...*/
- if(y2 != row_last) {
- /*Calc. the next y coordinates of VDB*/
- vdb->area.x1 = area_p->x1;
- vdb->area.x2 = area_p->x2;
- vdb->area.y1 = row;
- vdb->area.y2 = y2;
-
- /*Refresh this part too*/
- lv_refr_area_part(area_p);
- }
- }
- }
-}
-
-/**
- * Refresh a part of an area which is on the actual Virtual Display Buffer
- * @param area_p pointer to an area to refresh
- */
-static void lv_refr_area_part(const lv_area_t * area_p)
-{
-
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
-
- /*In non double buffered mode, before rendering the next part wait until the previous image is
- * flushed*/
- if(lv_disp_is_double_buf(disp_refr) == false) {
- while(vdb->flushing)
- ;
- }
-
- lv_obj_t * top_p;
-
- /*Get the new mask from the original area and the act. VDB
- It will be a part of 'area_p'*/
- lv_area_t start_mask;
- lv_area_intersect(&start_mask, area_p, &vdb->area);
-
- /*Get the most top object which is not covered by others*/
- top_p = lv_refr_get_top_obj(&start_mask, lv_disp_get_scr_act(disp_refr));
-
- /*Do the refreshing from the top object*/
- lv_refr_obj_and_children(top_p, &start_mask);
-
- /*Also refresh top and sys layer unconditionally*/
- lv_refr_obj_and_children(lv_disp_get_layer_top(disp_refr), &start_mask);
- lv_refr_obj_and_children(lv_disp_get_layer_sys(disp_refr), &start_mask);
-
- /* In true double buffered mode flush only once when all areas were rendered.
- * In normal mode flush after every area */
- if(lv_disp_is_true_double_buf(disp_refr) == false) {
- lv_refr_vdb_flush();
- }
-}
-
-/**
- * Search the most top object which fully covers an area
- * @param area_p pointer to an area
- * @param obj the first object to start the searching (typically a screen)
- * @return
- */
-static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj)
-{
- lv_obj_t * found_p = NULL;
-
- /*If this object is fully cover the draw area check the children too */
- if(lv_area_is_in(area_p, &obj->coords) && obj->hidden == 0) {
- lv_obj_t * i;
- LV_LL_READ(obj->child_ll, i)
- {
- found_p = lv_refr_get_top_obj(area_p, i);
-
- /*If a children is ok then break*/
- if(found_p != NULL) {
- break;
- }
- }
-
- /*If no better children check this object*/
- if(found_p == NULL) {
- const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.opa == LV_OPA_COVER && obj->design_cb(obj, area_p, LV_DESIGN_COVER_CHK) != false &&
- lv_obj_get_opa_scale(obj) == LV_OPA_COVER) {
- found_p = obj;
- }
- }
- }
-
- return found_p;
-}
-
-/**
- * Make the refreshing from an object. Draw all its children and the youngers too.
- * @param top_p pointer to an objects. Start the drawing from it.
- * @param mask_p pointer to an area, the objects will be drawn only here
- */
-static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * mask_p)
-{
- /* Normally always will be a top_obj (at least the screen)
- * but in special cases (e.g. if the screen has alpha) it won't.
- * In this case use the screen directly */
- if(top_p == NULL) top_p = lv_disp_get_scr_act(disp_refr);
-
- /*Refresh the top object and its children*/
- lv_refr_obj(top_p, mask_p);
-
- /*Draw the 'younger' sibling objects because they can be on top_obj */
- lv_obj_t * par;
- lv_obj_t * border_p = top_p;
-
- par = lv_obj_get_parent(top_p);
-
- /*Do until not reach the screen*/
- while(par != NULL) {
- /*object before border_p has to be redrawn*/
- lv_obj_t * i = lv_ll_get_prev(&(par->child_ll), border_p);
-
- while(i != NULL) {
- /*Refresh the objects*/
- lv_refr_obj(i, mask_p);
- i = lv_ll_get_prev(&(par->child_ll), i);
- }
-
- /*Call the post draw design function of the parents of the to object*/
- par->design_cb(par, mask_p, LV_DESIGN_DRAW_POST);
-
- /*The new border will be there last parents,
- *so the 'younger' brothers of parent will be refreshed*/
- border_p = par;
- /*Go a level deeper*/
- par = lv_obj_get_parent(par);
- }
-}
-
-/**
- * Refresh an object an all of its children. (Called recursively)
- * @param obj pointer to an object to refresh
- * @param mask_ori_p pointer to an area, the objects will be drawn only here
- */
-static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
-{
- /*Do not refresh hidden objects*/
- if(obj->hidden != 0) return;
-
- bool union_ok; /* Store the return value of area_union */
- /* Truncate the original mask to the coordinates of the parent
- * because the parent and its children are visible only here */
- lv_area_t obj_mask;
- lv_area_t obj_ext_mask;
- lv_area_t obj_area;
- lv_coord_t ext_size = obj->ext_draw_pad;
- lv_obj_get_coords(obj, &obj_area);
- obj_area.x1 -= ext_size;
- obj_area.y1 -= ext_size;
- obj_area.x2 += ext_size;
- obj_area.y2 += ext_size;
- union_ok = lv_area_intersect(&obj_ext_mask, mask_ori_p, &obj_area);
-
- /*Draw the parent and its children only if they ore on 'mask_parent'*/
- if(union_ok != false) {
-
- /* Redraw the object */
- obj->design_cb(obj, &obj_ext_mask, LV_DESIGN_DRAW_MAIN);
-
-#if MASK_AREA_DEBUG
- static lv_color_t debug_color = LV_COLOR_RED;
- lv_draw_fill(&obj_ext_mask, &obj_ext_mask, debug_color, LV_OPA_50);
- debug_color.full *= 17;
- debug_color.full += 0xA1;
-#endif
- /*Create a new 'obj_mask' without 'ext_size' because the children can't be visible there*/
- lv_obj_get_coords(obj, &obj_area);
- union_ok = lv_area_intersect(&obj_mask, mask_ori_p, &obj_area);
- if(union_ok != false) {
- lv_area_t mask_child; /*Mask from obj and its child*/
- lv_obj_t * child_p;
- lv_area_t child_area;
- LV_LL_READ_BACK(obj->child_ll, child_p)
- {
- lv_obj_get_coords(child_p, &child_area);
- ext_size = child_p->ext_draw_pad;
- child_area.x1 -= ext_size;
- child_area.y1 -= ext_size;
- child_area.x2 += ext_size;
- child_area.y2 += ext_size;
- /* Get the union (common parts) of original mask (from obj)
- * and its child */
- union_ok = lv_area_intersect(&mask_child, &obj_mask, &child_area);
-
- /*If the parent and the child has common area then refresh the child */
- if(union_ok) {
- /*Refresh the next children*/
- lv_refr_obj(child_p, &mask_child);
- }
- }
- }
-
- /* If all the children are redrawn make 'post draw' design */
- obj->design_cb(obj, &obj_ext_mask, LV_DESIGN_DRAW_POST);
- }
-}
-
-/**
- * Flush the content of the VDB
- */
-static void lv_refr_vdb_flush(void)
-{
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);
-
- /*In double buffered mode wait until the other buffer is flushed before flushing the current
- * one*/
- if(lv_disp_is_double_buf(disp_refr)) {
- while(vdb->flushing)
- ;
- }
-
- vdb->flushing = 1;
-
- /*Flush the rendered content to the display*/
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- if(disp->driver.flush_cb) disp->driver.flush_cb(&disp->driver, &vdb->area, vdb->buf_act);
-
- if(vdb->buf1 && vdb->buf2) {
- if(vdb->buf_act == vdb->buf1)
- vdb->buf_act = vdb->buf2;
- else
- vdb->buf_act = vdb->buf1;
- }
-}
diff --git a/src/libs/lvgl/src/lv_core/lv_refr.h b/src/libs/lvgl/src/lv_core/lv_refr.h
deleted file mode 100644
index 8c0ed03e..00000000
--- a/src/libs/lvgl/src/lv_core/lv_refr.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * @file lv_refr.h
- *
- */
-
-#ifndef LV_REFR_H
-#define LV_REFR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-#include <stdbool.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the screen refresh subsystem
- */
-void lv_refr_init(void);
-
-/**
- * Redraw the invalidated areas now.
- * Normally the redrawing is periodically executed in `lv_task_handler` but a long blocking process
- * can prevent the call of `lv_task_handler`. In this case if the the GUI is updated in the process
- * (e.g. progress bar) this function can be called when the screen should be updated.
- * @param disp pointer to display to refresh. NULL to refresh all displays.
- */
-void lv_refr_now(lv_disp_t * disp);
-
-/**
- * Invalidate an area on display to redraw it
- * @param area_p pointer to area which should be invalidated (NULL: delete the invalidated areas)
- * @param disp pointer to display where the area should be invalidated (NULL can be used if there is
- * only one display)
- */
-void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p);
-
-/**
- * Get the display which is being refreshed
- * @return the display being refreshed
- */
-lv_disp_t * lv_refr_get_disp_refreshing(void);
-
-/**
- * Set the display which is being refreshed.
- * It shouldn1t be used directly by the user.
- * It can be used to trick the drawing functions about there is an active display.
- * @param the display being refreshed
- */
-void lv_refr_set_disp_refreshing(lv_disp_t * disp);
-
-/**
- * Called periodically to handle the refreshing
- * @param task pointer to the task itself
- */
-void lv_disp_refr_task(lv_task_t * task);
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_REFR_H*/
diff --git a/src/libs/lvgl/src/lv_core/lv_style.c b/src/libs/lvgl/src/lv_core/lv_style.c
deleted file mode 100644
index 718fa6b3..00000000
--- a/src/libs/lvgl/src/lv_core/lv_style.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/**
- * @file lv_style.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_obj.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_anim.h"
-
-/*********************
- * DEFINES
- *********************/
-#define STYLE_MIX_MAX 256
-#define STYLE_MIX_SHIFT 8 /*log2(STYLE_MIX_MAX)*/
-
-#define VAL_PROP(v1, v2, r) v1 + (((v2 - v1) * r) >> STYLE_MIX_SHIFT)
-#define STYLE_ATTR_MIX(attr, r) \
- if(start->attr != end->attr) { \
- res->attr = VAL_PROP(start->attr, end->attr, r); \
- } else { \
- res->attr = start->attr; \
- }
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-#if LV_USE_ANIMATION
-static void style_animator(lv_style_anim_dsc_t * dsc, lv_anim_value_t val);
-static void style_animation_common_end_cb(lv_anim_t * a);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-lv_style_t lv_style_scr;
-lv_style_t lv_style_transp;
-lv_style_t lv_style_transp_fit;
-lv_style_t lv_style_transp_tight;
-lv_style_t lv_style_plain;
-lv_style_t lv_style_plain_color;
-lv_style_t lv_style_pretty;
-lv_style_t lv_style_pretty_color;
-lv_style_t lv_style_btn_rel;
-lv_style_t lv_style_btn_pr;
-lv_style_t lv_style_btn_tgl_rel;
-lv_style_t lv_style_btn_tgl_pr;
-lv_style_t lv_style_btn_ina;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Init the basic styles
- */
-void lv_style_init(void)
-{
- /* Not White/Black/Gray colors are created by HSV model with
- * HUE = 210*/
-
- /*Screen style*/
- lv_style_scr.glass = 0;
- lv_style_scr.body.opa = LV_OPA_COVER;
- lv_style_scr.body.main_color = LV_COLOR_WHITE;
- lv_style_scr.body.grad_color = LV_COLOR_WHITE;
- lv_style_scr.body.radius = 0;
- lv_style_scr.body.padding.left = 0;
- lv_style_scr.body.padding.right = 0;
- lv_style_scr.body.padding.top = 0;
- lv_style_scr.body.padding.bottom = 0;
- lv_style_scr.body.padding.inner = LV_DPI / 20;
-
- lv_style_scr.body.border.color = LV_COLOR_BLACK;
- lv_style_scr.body.border.opa = LV_OPA_COVER;
- lv_style_scr.body.border.width = 0;
- lv_style_scr.body.border.part = LV_BORDER_FULL;
-
- lv_style_scr.body.shadow.color = LV_COLOR_GRAY;
- lv_style_scr.body.shadow.type = LV_SHADOW_FULL;
- lv_style_scr.body.shadow.width = 0;
-
- lv_style_scr.text.opa = LV_OPA_COVER;
- lv_style_scr.text.color = lv_color_make(0x30, 0x30, 0x30);
- lv_style_scr.text.sel_color = lv_color_make(0x55, 0x96, 0xd8);
- lv_style_scr.text.font = LV_FONT_DEFAULT;
- lv_style_scr.text.letter_space = 0;
- lv_style_scr.text.line_space = 2;
-
- lv_style_scr.image.opa = LV_OPA_COVER;
- lv_style_scr.image.color = lv_color_make(0x20, 0x20, 0x20);
- lv_style_scr.image.intense = LV_OPA_TRANSP;
-
- lv_style_scr.line.opa = LV_OPA_COVER;
- lv_style_scr.line.color = lv_color_make(0x20, 0x20, 0x20);
- lv_style_scr.line.width = 2;
- lv_style_scr.line.rounded = 0;
-
-#if LV_USE_DEBUG
-#if LV_USE_ASSERT_STYLE
- lv_style_scr.debug_sentinel = LV_STYLE_DEGUG_SENTINEL_VALUE;
-#endif
-#endif
-
- /*Plain style (by default near the same as the screen style)*/
- lv_style_copy(&lv_style_plain, &lv_style_scr);
- lv_style_plain.body.padding.left = LV_DPI / 20;
- lv_style_plain.body.padding.right = LV_DPI / 20;
- lv_style_plain.body.padding.top = LV_DPI / 20;
- lv_style_plain.body.padding.bottom = LV_DPI / 20;
-
- /*Plain color style*/
- lv_style_copy(&lv_style_plain_color, &lv_style_plain);
- lv_style_plain_color.text.color = lv_color_make(0xf0, 0xf0, 0xf0);
- lv_style_plain_color.image.color = lv_color_make(0xf0, 0xf0, 0xf0);
- lv_style_plain_color.line.color = lv_color_make(0xf0, 0xf0, 0xf0);
- lv_style_plain_color.body.main_color = lv_color_make(0x55, 0x96, 0xd8);
- lv_style_plain_color.body.grad_color = lv_style_plain_color.body.main_color;
-
- /*Pretty style */
- lv_style_copy(&lv_style_pretty, &lv_style_plain);
- lv_style_pretty.text.color = lv_color_make(0x20, 0x20, 0x20);
- lv_style_pretty.image.color = lv_color_make(0x20, 0x20, 0x20);
- lv_style_pretty.line.color = lv_color_make(0x20, 0x20, 0x20);
- lv_style_pretty.body.main_color = LV_COLOR_WHITE;
- lv_style_pretty.body.grad_color = LV_COLOR_SILVER;
- lv_style_pretty.body.radius = LV_DPI / 15;
- lv_style_pretty.body.border.color = lv_color_make(0x40, 0x40, 0x40);
- lv_style_pretty.body.border.width = LV_DPI / 50 >= 1 ? LV_DPI / 50 : 1;
- lv_style_pretty.body.border.opa = LV_OPA_30;
-
- /*Pretty color style*/
- lv_style_copy(&lv_style_pretty_color, &lv_style_pretty);
- lv_style_pretty_color.text.color = lv_color_make(0xe0, 0xe0, 0xe0);
- lv_style_pretty_color.image.color = lv_color_make(0xe0, 0xe0, 0xe0);
- lv_style_pretty_color.line.color = lv_color_make(0xc0, 0xc0, 0xc0);
- lv_style_pretty_color.body.main_color = lv_color_make(0x6b, 0x9a, 0xc7);
- lv_style_pretty_color.body.grad_color = lv_color_make(0x2b, 0x59, 0x8b);
- lv_style_pretty_color.body.border.color = lv_color_make(0x15, 0x2c, 0x42);
-
- /*Transparent style*/
- lv_style_copy(&lv_style_transp, &lv_style_plain);
- lv_style_transp.glass = 1;
- lv_style_transp.body.border.width = 0;
- lv_style_transp.body.opa = LV_OPA_TRANSP;
-
- /*Transparent fitting size*/
- lv_style_copy(&lv_style_transp_fit, &lv_style_transp);
- lv_style_transp_fit.body.padding.left = 0;
- lv_style_transp_fit.body.padding.right = 0;
- lv_style_transp_fit.body.padding.top = 0;
- lv_style_transp_fit.body.padding.bottom = 0;
-
- /*Transparent tight style*/
- lv_style_copy(&lv_style_transp_tight, &lv_style_transp_fit);
- lv_style_transp_tight.body.padding.inner = 0;
-
- /*Button released style*/
- lv_style_copy(&lv_style_btn_rel, &lv_style_plain);
- lv_style_btn_rel.body.main_color = lv_color_make(0x76, 0xa2, 0xd0);
- lv_style_btn_rel.body.grad_color = lv_color_make(0x19, 0x3a, 0x5d);
- lv_style_btn_rel.body.radius = LV_DPI / 15;
- lv_style_btn_rel.body.padding.left = LV_DPI / 4;
- lv_style_btn_rel.body.padding.right = LV_DPI / 4;
- lv_style_btn_rel.body.padding.top = LV_DPI / 6;
- lv_style_btn_rel.body.padding.bottom = LV_DPI / 6;
- lv_style_btn_rel.body.padding.inner = LV_DPI / 10;
- lv_style_btn_rel.body.border.color = lv_color_make(0x0b, 0x19, 0x28);
- lv_style_btn_rel.body.border.width = LV_DPI / 50 >= 1 ? LV_DPI / 50 : 1;
- lv_style_btn_rel.body.border.opa = LV_OPA_70;
- lv_style_btn_rel.body.shadow.color = LV_COLOR_GRAY;
- lv_style_btn_rel.body.shadow.width = 0;
- lv_style_btn_rel.text.color = lv_color_make(0xff, 0xff, 0xff);
- lv_style_btn_rel.image.color = lv_color_make(0xff, 0xff, 0xff);
-
- /*Button pressed style*/
- lv_style_copy(&lv_style_btn_pr, &lv_style_btn_rel);
- lv_style_btn_pr.body.main_color = lv_color_make(0x33, 0x62, 0x94);
- lv_style_btn_pr.body.grad_color = lv_color_make(0x10, 0x26, 0x3c);
- lv_style_btn_pr.text.color = lv_color_make(0xa4, 0xb5, 0xc6);
- lv_style_btn_pr.image.color = lv_color_make(0xa4, 0xb5, 0xc6);
- lv_style_btn_pr.line.color = lv_color_make(0xa4, 0xb5, 0xc6);
-
- /*Button toggle released style*/
- lv_style_copy(&lv_style_btn_tgl_rel, &lv_style_btn_rel);
- lv_style_btn_tgl_rel.body.main_color = lv_color_make(0x0a, 0x11, 0x22);
- lv_style_btn_tgl_rel.body.grad_color = lv_color_make(0x37, 0x62, 0x90);
- lv_style_btn_tgl_rel.body.border.color = lv_color_make(0x01, 0x07, 0x0d);
- lv_style_btn_tgl_rel.text.color = lv_color_make(0xc8, 0xdd, 0xf4);
- lv_style_btn_tgl_rel.image.color = lv_color_make(0xc8, 0xdd, 0xf4);
- lv_style_btn_tgl_rel.line.color = lv_color_make(0xc8, 0xdd, 0xf4);
-
- /*Button toggle pressed style*/
- lv_style_copy(&lv_style_btn_tgl_pr, &lv_style_btn_tgl_rel);
- lv_style_btn_tgl_pr.body.main_color = lv_color_make(0x02, 0x14, 0x27);
- lv_style_btn_tgl_pr.body.grad_color = lv_color_make(0x2b, 0x4c, 0x70);
- lv_style_btn_tgl_pr.text.color = lv_color_make(0xa4, 0xb5, 0xc6);
- lv_style_btn_tgl_pr.image.color = lv_color_make(0xa4, 0xb5, 0xc6);
- lv_style_btn_tgl_pr.line.color = lv_color_make(0xa4, 0xb5, 0xc6);
-
- /*Button inactive style*/
- lv_style_copy(&lv_style_btn_ina, &lv_style_btn_rel);
- lv_style_btn_ina.body.main_color = lv_color_make(0xd8, 0xd8, 0xd8);
- lv_style_btn_ina.body.grad_color = lv_color_make(0xd8, 0xd8, 0xd8);
- lv_style_btn_ina.body.border.color = lv_color_make(0x90, 0x90, 0x90);
- lv_style_btn_ina.text.color = lv_color_make(0x70, 0x70, 0x70);
- lv_style_btn_ina.image.color = lv_color_make(0x70, 0x70, 0x70);
- lv_style_btn_ina.line.color = lv_color_make(0x70, 0x70, 0x70);
-}
-
-/**
- * Copy a style to an other
- * @param dest pointer to the destination style
- * @param src pointer to the source style
- */
-void lv_style_copy(lv_style_t * dest, const lv_style_t * src)
-{
- memcpy(dest, src, sizeof(lv_style_t));
-}
-
-/**
- * Mix two styles according to a given ratio
- * @param start start style
- * @param end end style
- * @param res store the result style here
- * @param ratio the ratio of mix [0..256]; 0: `start` style; 256: `end` style
- */
-void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t * res, uint16_t ratio)
-{
- STYLE_ATTR_MIX(body.opa, ratio);
- STYLE_ATTR_MIX(body.radius, ratio);
- STYLE_ATTR_MIX(body.border.width, ratio);
- STYLE_ATTR_MIX(body.border.opa, ratio);
- STYLE_ATTR_MIX(body.shadow.width, ratio);
- STYLE_ATTR_MIX(body.padding.left, ratio);
- STYLE_ATTR_MIX(body.padding.right, ratio);
- STYLE_ATTR_MIX(body.padding.top, ratio);
- STYLE_ATTR_MIX(body.padding.bottom, ratio);
- STYLE_ATTR_MIX(body.padding.inner, ratio);
- STYLE_ATTR_MIX(text.line_space, ratio);
- STYLE_ATTR_MIX(text.letter_space, ratio);
- STYLE_ATTR_MIX(text.opa, ratio);
- STYLE_ATTR_MIX(line.width, ratio);
- STYLE_ATTR_MIX(line.opa, ratio);
- STYLE_ATTR_MIX(image.intense, ratio);
- STYLE_ATTR_MIX(image.opa, ratio);
-
- lv_opa_t opa = ratio == STYLE_MIX_MAX ? LV_OPA_COVER : ratio;
-
- res->body.main_color = lv_color_mix(end->body.main_color, start->body.main_color, opa);
- res->body.grad_color = lv_color_mix(end->body.grad_color, start->body.grad_color, opa);
- res->body.border.color = lv_color_mix(end->body.border.color, start->body.border.color, opa);
- res->body.shadow.color = lv_color_mix(end->body.shadow.color, start->body.shadow.color, opa);
- res->text.color = lv_color_mix(end->text.color, start->text.color, opa);
- res->image.color = lv_color_mix(end->image.color, start->image.color, opa);
- res->line.color = lv_color_mix(end->line.color, start->line.color, opa);
-
- if(ratio < (STYLE_MIX_MAX >> 1)) {
- res->body.border.part = start->body.border.part;
- res->glass = start->glass;
- res->text.font = start->text.font;
- res->body.shadow.type = start->body.shadow.type;
- res->line.rounded = start->line.rounded;
- } else {
- res->body.border.part = end->body.border.part;
- res->glass = end->glass;
- res->text.font = end->text.font;
- res->body.shadow.type = end->body.shadow.type;
- res->line.rounded = end->line.rounded;
- }
-}
-
-#if LV_USE_ANIMATION
-
-void lv_style_anim_init(lv_anim_t * a)
-{
- lv_anim_init(a);
- a->start = 0;
- a->end = STYLE_MIX_MAX;
- a->exec_cb = (lv_anim_exec_xcb_t)style_animator;
- a->path_cb = lv_anim_path_linear;
- a->ready_cb = style_animation_common_end_cb;
-
- lv_style_anim_dsc_t * dsc;
- dsc = lv_mem_alloc(sizeof(lv_style_anim_dsc_t));
- LV_ASSERT_MEM(dsc);
- if(dsc == NULL) return;
- dsc->ready_cb = NULL;
- dsc->style_anim = NULL;
- lv_style_copy(&dsc->style_start, &lv_style_plain);
- lv_style_copy(&dsc->style_end, &lv_style_plain);
-
- a->var = (void *)dsc;
-}
-
-void lv_style_anim_set_styles(lv_anim_t * a, lv_style_t * to_anim, const lv_style_t * start, const lv_style_t * end)
-{
-
- lv_style_anim_dsc_t * dsc = a->var;
- dsc->style_anim = to_anim;
- memcpy(&dsc->style_start, start, sizeof(lv_style_t));
- memcpy(&dsc->style_end, end, sizeof(lv_style_t));
- memcpy(dsc->style_anim, start, sizeof(lv_style_t));
-}
-#endif
-/**********************
- * STATIC FUNCTIONS
- **********************/
-#if LV_USE_ANIMATION
-/**
- * Used by the style animations to set the values of a style according to start and end style.
- * @param dsc the 'animated variable' set by lv_style_anim_create()
- * @param val the current state of the animation between 0 and LV_ANIM_RESOLUTION
- */
-static void style_animator(lv_style_anim_dsc_t * dsc, lv_anim_value_t val)
-{
- const lv_style_t * start = &dsc->style_start;
- const lv_style_t * end = &dsc->style_end;
- lv_style_t * act = dsc->style_anim;
-
- lv_style_mix(start, end, act, val);
-
- lv_obj_report_style_mod(dsc->style_anim);
-}
-
-/**
- * Called when a style animation is ready
- * It called the user defined call back and free the allocated memories
- * @param a pointer to the animation
- */
-static void style_animation_common_end_cb(lv_anim_t * a)
-{
-
- (void)a; /*Unused*/
- lv_style_anim_dsc_t * dsc = a->var; /*To avoid casting*/
-
- if(dsc->ready_cb) dsc->ready_cb(a);
-
- lv_mem_free(dsc);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_core/lv_style.h b/src/libs/lvgl/src/lv_core/lv_style.h
deleted file mode 100644
index e002b2ea..00000000
--- a/src/libs/lvgl/src/lv_core/lv_style.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * @file lv_style.h
- *
- */
-
-#ifndef LV_STYLE_H
-#define LV_STYLE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdbool.h>
-#include "../lv_font/lv_font.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_anim.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_RADIUS_CIRCLE (LV_COORD_MAX) /**< A very big radius to always draw as circle*/
-#define LV_STYLE_DEGUG_SENTINEL_VALUE 0x12345678
-
-LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Border types (Use 'OR'ed values)*/
-enum {
- LV_BORDER_NONE = 0x00,
- LV_BORDER_BOTTOM = 0x01,
- LV_BORDER_TOP = 0x02,
- LV_BORDER_LEFT = 0x04,
- LV_BORDER_RIGHT = 0x08,
- LV_BORDER_FULL = 0x0F,
- LV_BORDER_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button matrix)*/
-};
-typedef uint8_t lv_border_part_t;
-
-/*Shadow types*/
-enum {
- LV_SHADOW_BOTTOM = 0, /**< Only draw bottom shadow */
- LV_SHADOW_FULL, /**< Draw shadow on all sides */
-};
-typedef uint8_t lv_shadow_type_t;
-
-/**
- * Objects in LittlevGL can be assigned a style - which holds information about
- * how the object should be drawn.
- *
- * This allows for easy customization without having to modify the object's design
- * function.
- */
-typedef struct
-{
- uint8_t glass : 1; /**< 1: Do not inherit this style*/
-
- /** Object background. */
- struct
- {
- lv_color_t main_color; /**< Object's main background color. */
- lv_color_t grad_color; /**< Second color. If not equal to `main_color` a gradient will be drawn for the background. */
- lv_coord_t radius; /**< Object's corner radius. You can use #LV_RADIUS_CIRCLE if you want to draw a circle. */
- lv_opa_t opa; /**< Object's opacity (0-255). */
-
- struct
- {
- lv_color_t color; /**< Border color */
- lv_coord_t width; /**< Border width */
- lv_border_part_t part; /**< Which borders to draw */
- lv_opa_t opa; /**< Border opacity. */
- } border;
-
-
- struct
- {
- lv_color_t color;
- lv_coord_t width;
- lv_shadow_type_t type; /**< Which parts of the shadow to draw */
- } shadow;
-
- struct
- {
- lv_coord_t top;
- lv_coord_t bottom;
- lv_coord_t left;
- lv_coord_t right;
- lv_coord_t inner;
- } padding;
- } body;
-
- /** Style for text drawn by this object. */
- struct
- {
- lv_color_t color; /**< Text color */
- lv_color_t sel_color; /**< Text selection background color. */
- const lv_font_t * font;
- lv_coord_t letter_space; /**< Space between letters */
- lv_coord_t line_space; /**< Space between lines (vertical) */
- lv_opa_t opa; /**< Text opacity */
- } text;
-
- /**< Style of images. */
- struct
- {
- lv_color_t color; /**< Color to recolor the image with */
- lv_opa_t intense; /**< Opacity of recoloring (0 means no recoloring) */
- lv_opa_t opa; /**< Opacity of whole image */
- } image;
-
- /**< Style of lines (not borders). */
- struct
- {
- lv_color_t color;
- lv_coord_t width;
- lv_opa_t opa;
- uint8_t rounded : 1; /**< 1: rounded line endings*/
- } line;
-
-#if LV_USE_DEBUG
-#if LV_USE_ASSERT_STYLE
- uint32_t debug_sentinel; /**<Should `LV_STYLE_DEGUG_SENTINEL_VALUE` to indicate that the style is valid*/
-#endif
-#endif
-
-} lv_style_t;
-
-#if LV_USE_ANIMATION
-/** Data structure for style animations. */
-typedef struct
-{
- lv_style_t style_start; /*Save not only pointers because can be same as 'style_anim' then it
- will be modified too*/
- lv_style_t style_end;
- lv_style_t * style_anim;
- lv_anim_ready_cb_t ready_cb;
-} lv_style_anim_dsc_t;
-#endif
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Init the basic styles
- */
-void lv_style_init(void);
-
-/**
- * Copy a style to an other
- * @param dest pointer to the destination style
- * @param src pointer to the source style
- */
-void lv_style_copy(lv_style_t * dest, const lv_style_t * src);
-
-/**
- * Mix two styles according to a given ratio
- * @param start start style
- * @param end end style
- * @param res store the result style here
- * @param ratio the ratio of mix [0..256]; 0: `start` style; 256: `end` style
- */
-void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t * res, uint16_t ratio);
-
-#if LV_USE_ANIMATION
-
-/**
- * Initialize an animation variable.
- * E.g.:
- * lv_anim_t a;
- * lv_style_anim__init(&a);
- * lv_style_anim_set_...(&a);
- * lv_style_anim_create(&a);
- * @param a pointer to an `lv_anim_t` variable to initialize
- */
-void lv_style_anim_init(lv_anim_t * a);
-
-/**
- *
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param to_anim pointer to the style to animate
- * @param start pointer to a style to animate from (start value)
- * @param end pointer to a style to animate to (end value)
- */
-void lv_style_anim_set_styles(lv_anim_t * a, lv_style_t * to_anim, const lv_style_t * start, const lv_style_t * end);
-
-/**
- * Set the duration and delay of an animation
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param duration duration of the animation in milliseconds
- * @param delay delay before the animation in milliseconds
- */
-static inline void lv_style_anim_set_time(lv_anim_t * a, uint16_t duration, int16_t delay)
-{
- lv_anim_set_time(a, duration, delay);
-}
-
-/**
- * Set a function call when the animation is ready
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param ready_cb a function call when the animation is ready
- */
-static inline void lv_style_anim_set_ready_cb(lv_anim_t * a, lv_anim_ready_cb_t ready_cb)
-{
- lv_style_anim_dsc_t * dsc = (lv_style_anim_dsc_t *)a->var;
- dsc->ready_cb = ready_cb;
-}
-
-/**
- * Make the animation to play back to when the forward direction is ready
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param wait_time time in milliseconds to wait before starting the back direction
- */
-static inline void lv_style_anim_set_playback(lv_anim_t * a, uint16_t wait_time)
-{
- lv_anim_set_playback(a, wait_time);
-}
-
-/**
- * Disable playback. (Disabled after `lv_anim_init()`)
- * @param a pointer to an initialized `lv_anim_t` variable
- */
-static inline void lv_style_anim_clear_playback(lv_anim_t * a)
-{
- lv_anim_clear_playback(a);
-}
-
-/**
- * Make the animation to start again when ready.
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param wait_time time in milliseconds to wait before starting the animation again
- */
-static inline void lv_style_anim_set_repeat(lv_anim_t * a, uint16_t wait_time)
-{
- lv_anim_set_repeat(a, wait_time);
-}
-
-/**
- * Disable repeat. (Disabled after `lv_anim_init()`)
- * @param a pointer to an initialized `lv_anim_t` variable
- */
-static inline void lv_style_anim_clear_repeat(lv_anim_t * a)
-{
- lv_anim_clear_repeat(a);
-}
-
-/**
- * Create an animation
- * @param a an initialized 'anim_t' variable. Not required after call.
- */
-static inline void lv_style_anim_create(lv_anim_t * a)
-{
- lv_anim_create(a);
-}
-
-#endif
-
-/*************************
- * GLOBAL VARIABLES
- *************************/
-extern lv_style_t lv_style_scr;
-extern lv_style_t lv_style_transp;
-extern lv_style_t lv_style_transp_fit;
-extern lv_style_t lv_style_transp_tight;
-extern lv_style_t lv_style_plain;
-extern lv_style_t lv_style_plain_color;
-extern lv_style_t lv_style_pretty;
-extern lv_style_t lv_style_pretty_color;
-extern lv_style_t lv_style_btn_rel;
-extern lv_style_t lv_style_btn_pr;
-extern lv_style_t lv_style_btn_tgl_rel;
-extern lv_style_t lv_style_btn_tgl_pr;
-extern lv_style_t lv_style_btn_ina;
-
-/**********************
- * MACROS
- **********************/
-
-/**
- * Create and initialize a `static` style
- * Example:
- * LV_STYLE_CREATE(my_style, &lv_style_plain);
- * is equivalent to
- * static lv_style_t my_style;
- * lv_style_copy(my_style, &lv_style_plain);
- *
- * If the style to copy is `NULL` `lv_style_plain` will be used.
- */
-#define LV_STYLE_CREATE(name, copy_p) static lv_style_t name; lv_style_copy(&name, copy_p == NULL ? &lv_style_plain : copy_p);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_STYLE_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw.c b/src/libs/lvgl/src/lv_draw/lv_draw.c
deleted file mode 100644
index 45eaff65..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * @file lv_draw.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include <stdio.h>
-#include <stdbool.h>
-#include "lv_draw.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_log.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint32_t draw_buf_size = 0;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Give a buffer with the given to use during drawing.
- * Be careful to not use the buffer while other processes are using it.
- * @param size the required size
- */
-void * lv_draw_get_buf(uint32_t size)
-{
- if(size <= draw_buf_size) return LV_GC_ROOT(_lv_draw_buf);
-
- LV_LOG_TRACE("lv_draw_get_buf: allocate");
-
- draw_buf_size = size;
-
- if(LV_GC_ROOT(_lv_draw_buf) == NULL) {
- LV_GC_ROOT(_lv_draw_buf) = lv_mem_alloc(size);
- LV_ASSERT_MEM(LV_GC_ROOT(_lv_draw_buf));
- return LV_GC_ROOT(_lv_draw_buf);
- }
-
- LV_GC_ROOT(_lv_draw_buf) = lv_mem_realloc(LV_GC_ROOT(_lv_draw_buf), size);
- LV_ASSERT_MEM(LV_GC_ROOT(_lv_draw_buf));
- return LV_GC_ROOT(_lv_draw_buf);
-}
-
-/**
- * Free the draw buffer
- */
-void lv_draw_free_buf(void)
-{
- if(LV_GC_ROOT(_lv_draw_buf)) {
- lv_mem_free(LV_GC_ROOT(_lv_draw_buf));
- LV_GC_ROOT(_lv_draw_buf) = NULL;
- draw_buf_size = 0;
- }
-}
-
-#if LV_ANTIALIAS
-
-/**
- * Get the opacity of a pixel based it's position in a line segment
- * @param seg segment length
- * @param px_id position of of a pixel which opacity should be get [0..seg-1]
- * @param base_opa the base opacity
- * @return the opacity of the given pixel
- */
-lv_opa_t lv_draw_aa_get_opa(lv_coord_t seg, lv_coord_t px_id, lv_opa_t base_opa)
-{
- /* How to calculate the opacity of pixels on the edges which makes the anti-aliasing?
- * For example we have a line like this (y = -0.5 * x):
- *
- * | _ _
- * * * |
- *
- * Anti-aliased pixels come to the '*' characters
- * Calculate what percentage of the pixels should be covered if real line (not rasterized) would
- * be drawn:
- * 1. A real line should start on (0;0) and end on (2;1)
- * 2. So the line intersection coordinates on the first pixel: (0;0) (1;0.5) -> 25% covered
- * pixel in average
- * 3. For the second pixel: (1;0.5) (2;1) -> 75% covered pixel in average
- * 4. The equation: (px_id * 2 + 1) / (segment_width * 2)
- * segment_width: the line segment which is being anti-aliased (was 2 in the
- * example) px_id: pixel ID from 0 to (segment_width - 1) result: [0..1] coverage of the pixel
- */
-
- /*Accelerate the common segment sizes to avoid division*/
- static const lv_opa_t seg1[1] = {128};
- static const lv_opa_t seg2[2] = {64, 192};
- static const lv_opa_t seg3[3] = {42, 128, 212};
- static const lv_opa_t seg4[4] = {32, 96, 159, 223};
- static const lv_opa_t seg5[5] = {26, 76, 128, 178, 230};
- static const lv_opa_t seg6[6] = {21, 64, 106, 148, 191, 234};
- static const lv_opa_t seg7[7] = {18, 55, 91, 128, 164, 200, 237};
- static const lv_opa_t seg8[8] = {16, 48, 80, 112, 143, 175, 207, 239};
-
- static const lv_opa_t * seg_map[] = {seg1, seg2, seg3, seg4, seg5, seg6, seg7, seg8};
-
- if(seg == 0)
- return LV_OPA_TRANSP;
- else if(seg < 8)
- return (uint32_t)((uint32_t)seg_map[seg - 1][px_id] * base_opa) >> 8;
- else {
- return ((px_id * 2 + 1) * base_opa) / (2 * seg);
- }
-}
-
-/**
- * Add a vertical anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_ver_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa)
-{
- bool aa_inv = false;
- if(length < 0) {
- aa_inv = true;
- length = -length;
- }
-
- lv_coord_t i;
- for(i = 0; i < length; i++) {
- lv_opa_t px_opa = lv_draw_aa_get_opa(length, i, opa);
- if(aa_inv) px_opa = opa - px_opa;
- lv_draw_px(x, y + i, mask, color, px_opa);
- }
-}
-
-/**
- * Add a horizontal anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa)
-{
- bool aa_inv = false;
- if(length < 0) {
- aa_inv = true;
- length = -length;
- }
-
- lv_coord_t i;
- for(i = 0; i < length; i++) {
- lv_opa_t px_opa = lv_draw_aa_get_opa(length, i, opa);
- if(aa_inv) px_opa = opa - px_opa;
- lv_draw_px(x + i, y, mask, color, px_opa);
- }
-}
-
-#endif
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw.h b/src/libs/lvgl/src/lv_draw/lv_draw.h
deleted file mode 100644
index a9fa58d9..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * @file lv_draw.h
- *
- */
-
-#ifndef LV_DRAW_H
-#define LV_DRAW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "../lv_core/lv_style.h"
-#include "../lv_misc/lv_txt.h"
-#include "lv_img_decoder.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Give a buffer with the given to use during drawing.
- * Be careful to not use the buffer while other processes are using it.
- * @param size the required size
- */
-void * lv_draw_get_buf(uint32_t size);
-
-/**
- * Free the draw buffer
- */
-void lv_draw_free_buf(void);
-
-#if LV_ANTIALIAS
-
-/**
- * Get the opacity of a pixel based it's position in a line segment
- * @param seg segment length
- * @param px_id position of of a pixel which opacity should be get [0..seg-1]
- * @param base_opa the base opacity
- * @return the opacity of the given pixel
- */
-lv_opa_t lv_draw_aa_get_opa(lv_coord_t seg, lv_coord_t px_id, lv_opa_t base_opa);
-
-/**
- * Add a vertical anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_ver_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa);
-
-/**
- * Add a horizontal anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa);
-#endif
-
-/**********************
- * GLOBAL VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * POST INCLUDES
- *********************/
-#include "lv_draw_basic.h"
-#include "lv_draw_rect.h"
-#include "lv_draw_label.h"
-#include "lv_draw_img.h"
-#include "lv_draw_line.h"
-#include "lv_draw_triangle.h"
-#include "lv_draw_arc.h"
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw.mk b/src/libs/lvgl/src/lv_draw/lv_draw.mk
deleted file mode 100644
index c879ebe6..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-CSRCS += lv_draw_basic.c
-CSRCS += lv_draw.c
-CSRCS += lv_draw_rect.c
-CSRCS += lv_draw_label.c
-CSRCS += lv_draw_line.c
-CSRCS += lv_draw_img.c
-CSRCS += lv_draw_arc.c
-CSRCS += lv_draw_triangle.c
-CSRCS += lv_img_decoder.c
-CSRCS += lv_img_cache.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_draw
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_draw
-
-CFLAGS += "-I$(LVGL_DIR)lvgl/src/lv_draw"
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_arc.c b/src/libs/lvgl/src/lv_draw/lv_draw_arc.c
deleted file mode 100644
index 5b19a127..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_arc.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/**
- * @file lv_draw_arc.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw_arc.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void ver_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color,
- lv_opa_t opa);
-static void hor_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color,
- lv_opa_t opa);
-static bool deg_test_norm(uint16_t deg, uint16_t start, uint16_t end);
-static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Draw an arc. (Can draw pie too with great thickness.)
- * @param center_x the x coordinate of the center of the arc
- * @param center_y the y coordinate of the center of the arc
- * @param radius the radius of the arc
- * @param mask the arc will be drawn only in this mask
- * @param start_angle the start angle of the arc (0 deg on the bottom, 90 deg on the right)
- * @param end_angle the end angle of the arc
- * @param style style of the arc (`body.thickness`, `body.main_color`, `body.opa` is used)
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, const lv_area_t * mask,
- uint16_t start_angle, uint16_t end_angle, const lv_style_t * style, lv_opa_t opa_scale)
-{
- lv_coord_t thickness = style->line.width;
- if(thickness > radius) thickness = radius;
-
-#if LV_ANTIALIAS
- thickness--;
- radius--;
-#endif
-
- lv_coord_t r_out = radius;
- lv_coord_t r_in = r_out - thickness;
- int16_t deg_base;
- int16_t deg;
- lv_coord_t x_start[4];
- lv_coord_t x_end[4];
-
- lv_color_t color = style->line.color;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
-
- bool (*deg_test)(uint16_t, uint16_t, uint16_t);
- if(start_angle <= end_angle)
- deg_test = deg_test_norm;
- else
- deg_test = deg_test_inv;
-
- int middle_r_out = r_out;
-#if !LV_ANTIALIAS
- thickness--;
- middle_r_out = r_out - 1;
-#endif
- if(deg_test(270, start_angle, end_angle))
- hor_line(center_x - middle_r_out, center_y, mask, thickness, color, opa); /*Left Middle*/
- if(deg_test(90, start_angle, end_angle))
- hor_line(center_x + r_in, center_y, mask, thickness, color, opa); /*Right Middle*/
- if(deg_test(180, start_angle, end_angle))
- ver_line(center_x, center_y - middle_r_out, mask, thickness, color, opa); /*Top Middle*/
- if(deg_test(0, start_angle, end_angle))
- ver_line(center_x, center_y + r_in, mask, thickness, color, opa); /*Bottom middle*/
-
- uint32_t r_out_sqr = r_out * r_out;
- uint32_t r_in_sqr = r_in * r_in;
-#if LV_ANTIALIAS
- uint32_t r_out_aa_sqr = (r_out + 1) * (r_out + 1);
- uint32_t r_in_aa_sqr = (r_in - 1) * (r_in - 1);
-#endif
- int16_t xi;
- int16_t yi;
- for(yi = -r_out; yi < 0; yi++) {
- x_start[0] = LV_COORD_MIN;
- x_start[1] = LV_COORD_MIN;
- x_start[2] = LV_COORD_MIN;
- x_start[3] = LV_COORD_MIN;
- x_end[0] = LV_COORD_MIN;
- x_end[1] = LV_COORD_MIN;
- x_end[2] = LV_COORD_MIN;
- x_end[3] = LV_COORD_MIN;
- int xe = 0;
- for(xi = -r_out; xi < 0; xi++) {
-
- uint32_t r_act_sqr = xi * xi + yi * yi;
-#if LV_ANTIALIAS
- if(r_act_sqr > r_out_aa_sqr) {
- continue;
- }
-#else
- if(r_act_sqr > r_out_sqr) continue;
-#endif
-
- deg_base = lv_atan2(xi, yi) - 180;
-
-#if LV_ANTIALIAS
- int opa2 = -1;
- if(r_act_sqr > r_out_sqr) {
- opa2 = LV_OPA_100 * (r_out + 1) - lv_sqrt(LV_OPA_100 * LV_OPA_100 * r_act_sqr);
- if(opa2 < LV_OPA_0)
- opa2 = LV_OPA_0;
- else if(opa2 > LV_OPA_100)
- opa2 = LV_OPA_100;
- } else if(r_act_sqr < r_in_sqr) {
- if(xe == 0) xe = xi;
- opa2 = lv_sqrt(LV_OPA_100 * LV_OPA_100 * r_act_sqr) - LV_OPA_100 * (r_in - 1);
- if(opa2 < LV_OPA_0)
- opa2 = LV_OPA_0;
- else if(opa2 > LV_OPA_100)
- opa2 = LV_OPA_100;
- if(r_act_sqr < r_in_aa_sqr)
- break; /*No need to continue the iteration in x once we found the inner edge of the
- arc*/
- }
- if(opa2 != -1) {
- if(deg_test(180 + deg_base, start_angle, end_angle)) {
- lv_draw_px(center_x + xi, center_y + yi, mask, color, opa2);
- }
- if(deg_test(360 - deg_base, start_angle, end_angle)) {
- lv_draw_px(center_x + xi, center_y - yi, mask, color, opa2);
- }
- if(deg_test(180 - deg_base, start_angle, end_angle)) {
- lv_draw_px(center_x - xi, center_y + yi, mask, color, opa2);
- }
- if(deg_test(deg_base, start_angle, end_angle)) {
- lv_draw_px(center_x - xi, center_y - yi, mask, color, opa2);
- }
- continue;
- }
-#endif
-
- deg = 180 + deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[0] == LV_COORD_MIN) x_start[0] = xi;
- } else if(x_start[0] != LV_COORD_MIN && x_end[0] == LV_COORD_MIN) {
- x_end[0] = xi - 1;
- }
-
- deg = 360 - deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[1] == LV_COORD_MIN) x_start[1] = xi;
- } else if(x_start[1] != LV_COORD_MIN && x_end[1] == LV_COORD_MIN) {
- x_end[1] = xi - 1;
- }
-
- deg = 180 - deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[2] == LV_COORD_MIN) x_start[2] = xi;
- } else if(x_start[2] != LV_COORD_MIN && x_end[2] == LV_COORD_MIN) {
- x_end[2] = xi - 1;
- }
-
- deg = deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[3] == LV_COORD_MIN) x_start[3] = xi;
- } else if(x_start[3] != LV_COORD_MIN && x_end[3] == LV_COORD_MIN) {
- x_end[3] = xi - 1;
- }
-
- if(r_act_sqr < r_in_sqr) {
- xe = xi;
- break; /*No need to continue the iteration in x once we found the inner edge of the
- arc*/
- }
- }
-
- if(x_start[0] != LV_COORD_MIN) {
- if(x_end[0] == LV_COORD_MIN) x_end[0] = xe - 1;
- hor_line(center_x + x_start[0], center_y + yi, mask, x_end[0] - x_start[0], color, opa);
- }
-
- if(x_start[1] != LV_COORD_MIN) {
- if(x_end[1] == LV_COORD_MIN) x_end[1] = xe - 1;
- hor_line(center_x + x_start[1], center_y - yi, mask, x_end[1] - x_start[1], color, opa);
- }
-
- if(x_start[2] != LV_COORD_MIN) {
- if(x_end[2] == LV_COORD_MIN) x_end[2] = xe - 1;
- hor_line(center_x - x_end[2], center_y + yi, mask, LV_MATH_ABS(x_end[2] - x_start[2]), color, opa);
- }
-
- if(x_start[3] != LV_COORD_MIN) {
- if(x_end[3] == LV_COORD_MIN) x_end[3] = xe - 1;
- hor_line(center_x - x_end[3], center_y - yi, mask, LV_MATH_ABS(x_end[3] - x_start[3]), color, opa);
- }
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-static void ver_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color, lv_opa_t opa)
-{
- lv_area_t area;
- lv_area_set(&area, x, y, x, y + len);
-
- lv_draw_fill(&area, mask, color, opa);
-}
-
-static void hor_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color, lv_opa_t opa)
-{
- lv_area_t area;
- lv_area_set(&area, x, y, x + len, y);
-
- lv_draw_fill(&area, mask, color, opa);
-}
-
-static bool deg_test_norm(uint16_t deg, uint16_t start, uint16_t end)
-{
- if(deg >= start && deg <= end)
- return true;
- else
- return false;
-}
-
-static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end)
-{
- if(deg >= start || deg <= end) {
- return true;
- } else
- return false;
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_arc.h b/src/libs/lvgl/src/lv_draw/lv_draw_arc.h
deleted file mode 100644
index 98d0f0bc..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_arc.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * @file lv_draw_arc.h
- *
- */
-
-#ifndef LV_DRAW_ARC_H
-#define LV_DRAW_ARC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Draw an arc. (Can draw pie too with great thickness.)
- * @param center_x the x coordinate of the center of the arc
- * @param center_y the y coordinate of the center of the arc
- * @param radius the radius of the arc
- * @param mask the arc will be drawn only in this mask
- * @param start_angle the start angle of the arc (0 deg on the bottom, 90 deg on the right)
- * @param end_angle the end angle of the arc
- * @param style style of the arc (`body.thickness`, `body.main_color`, `body.opa` is used)
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, const lv_area_t * mask,
- uint16_t start_angle, uint16_t end_angle, const lv_style_t * style, lv_opa_t opa_scale);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_ARC*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_basic.c b/src/libs/lvgl/src/lv_draw/lv_draw_basic.c
deleted file mode 100644
index 462e1522..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_basic.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/**
- * @file lv_draw_basic.c
- *
- */
-
-#include "lv_draw_basic.h"
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "../lv_core/lv_refr.h"
-#include "../lv_hal/lv_hal.h"
-#include "../lv_font/lv_font.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_log.h"
-
-#include <stddef.h>
-#include "lv_draw.h"
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-
-/*Always fill < 50 px with 'sw_color_fill' because of the hw. init overhead*/
-#define VFILL_HW_ACC_SIZE_LIMIT 50
-
-#ifndef LV_ATTRIBUTE_MEM_ALIGN
-#define LV_ATTRIBUTE_MEM_ALIGN
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void sw_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa);
-static void sw_color_fill(lv_color_t * mem, lv_coord_t mem_width, const lv_area_t * fill_area, lv_color_t color,
- lv_opa_t opa);
-
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
-static inline lv_color_t color_mix_2_alpha(lv_color_t bg_color, lv_opa_t bg_opa, lv_color_t fg_color, lv_opa_t fg_opa);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Put a pixel in the Virtual Display Buffer
- * @param x pixel x coordinate
- * @param y pixel y coordinate
- * @param mask_p fill only on this mask (truncated to VDB area)
- * @param color pixel color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_px(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa)
-{
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- /*Pixel out of the mask*/
- if(x < mask_p->x1 || x > mask_p->x2 || y < mask_p->y1 || y > mask_p->y2) {
- return;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
- uint32_t vdb_width = lv_area_get_width(&vdb->area);
-
- /*Make the coordinates relative to VDB*/
- x -= vdb->area.x1;
- y -= vdb->area.y1;
-
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, x, y, color, opa);
- } else {
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- lv_color_t * vdb_px_p = vdb->buf_act;
- vdb_px_p += y * vdb_width + x;
-
- if(scr_transp == false) {
- if(opa == LV_OPA_COVER) {
- *vdb_px_p = color;
- } else {
- *vdb_px_p = lv_color_mix(color, *vdb_px_p, opa);
- }
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- *vdb_px_p = color_mix_2_alpha(*vdb_px_p, (*vdb_px_p).ch.alpha, color, opa);
-#endif
- }
- }
-}
-
-/**
- * Fill an area in the Virtual Display Buffer
- * @param cords_p coordinates of the area to fill
- * @param mask_p fill only o this mask (truncated to VDB area)
- * @param color fill color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa)
-{
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- lv_area_t res_a;
- bool union_ok;
-
- /*Get the union of cord and mask*/
- /* The mask is already truncated to the vdb size
- * in 'lv_refr_area_with_vdb' function */
- union_ok = lv_area_intersect(&res_a, cords_p, mask_p);
-
- /*If there are common part of the three area then draw to the vdb*/
- if(union_ok == false) {
- return;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- lv_area_t vdb_rel_a; /*Stores relative coordinates on vdb*/
- vdb_rel_a.x1 = res_a.x1 - vdb->area.x1;
- vdb_rel_a.y1 = res_a.y1 - vdb->area.y1;
- vdb_rel_a.x2 = res_a.x2 - vdb->area.x1;
- vdb_rel_a.y2 = res_a.y2 - vdb->area.y1;
-
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- uint32_t vdb_width = lv_area_get_width(&vdb->area);
- /*Move the vdb_tmp to the first row*/
- vdb_buf_tmp += vdb_width * vdb_rel_a.y1;
-
-#if LV_USE_GPU
- static LV_ATTRIBUTE_MEM_ALIGN lv_color_t color_array_tmp[LV_HOR_RES_MAX]; /*Used by 'lv_disp_mem_blend'*/
- static lv_coord_t last_width = -1;
-
- lv_coord_t w = lv_area_get_width(&vdb_rel_a);
- /*Don't use hw. acc. for every small fill (because of the init overhead)*/
- if(w < VFILL_HW_ACC_SIZE_LIMIT) {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
- /*Not opaque fill*/
- else if(opa == LV_OPA_COVER) {
- /*Use hw fill if present*/
- if(disp->driver.gpu_fill_cb) {
- disp->driver.gpu_fill_cb(&disp->driver, vdb->buf_act, vdb_width, &vdb_rel_a, color);
- }
- /*Use hw blend if present and the area is not too small*/
- else if(lv_area_get_height(&vdb_rel_a) > VFILL_HW_ACC_SIZE_LIMIT && disp->driver.gpu_blend_cb) {
- /*Fill a one line sized buffer with a color and blend this later*/
- if(color_array_tmp[0].full != color.full || last_width != w) {
- uint16_t i;
- for(i = 0; i < w; i++) {
- color_array_tmp[i].full = color.full;
- }
- last_width = w;
- }
-
- /*Blend the filled line to every line VDB line-by-line*/
- lv_coord_t row;
- for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) {
- disp->driver.gpu_blend_cb(&disp->driver, &vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa);
- vdb_buf_tmp += vdb_width;
- }
-
- }
- /*Else use sw fill if no better option*/
- else {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
-
- }
- /*Fill with opacity*/
- else {
- /*Use hw blend if present*/
- if(disp->driver.gpu_blend_cb) {
- if(color_array_tmp[0].full != color.full || last_width != w) {
- uint16_t i;
- for(i = 0; i < w; i++) {
- color_array_tmp[i].full = color.full;
- }
-
- last_width = w;
- }
- lv_coord_t row;
- for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) {
- disp->driver.gpu_blend_cb(&disp->driver, &vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa);
- vdb_buf_tmp += vdb_width;
- }
-
- }
- /*Use sw fill with opa if no better option*/
- else {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
- }
-#else
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
-#endif
-}
-
-/**
- * Draw a letter in the Virtual Display Buffer
- * @param pos_p left-top coordinate of the latter
- * @param mask_p the letter will be drawn only on this area (truncated to VDB area)
- * @param font_p pointer to font
- * @param letter a letter to draw
- * @param color color of letter
- * @param opa opacity of letter (0..255)
- */
-void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * mask_p, const lv_font_t * font_p, uint32_t letter,
- lv_color_t color, lv_opa_t opa)
-{
- /*clang-format off*/
- const uint8_t bpp1_opa_table[2] = {0, 255}; /*Opacity mapping with bpp = 1 (Just for compatibility)*/
- const uint8_t bpp2_opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
- const uint8_t bpp4_opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
- 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
- /*clang-format on*/
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- if(font_p == NULL) {
- LV_LOG_WARN("Font: character's bitmap not found");
- return;
- }
-
- lv_font_glyph_dsc_t g;
- bool g_ret = lv_font_get_glyph_dsc(font_p, &g, letter, '\0');
- if(g_ret == false) return;
-
-
- lv_coord_t pos_x = pos_p->x + g.ofs_x;
- lv_coord_t pos_y = pos_p->y + (font_p->line_height - font_p->base_line) - g.box_h - g.ofs_y;
-
- const uint8_t * bpp_opa_table;
- uint8_t bitmask_init;
- uint8_t bitmask;
-
- /*bpp = 3 should be converted to bpp = 4 in lv_font_get_glyph_bitmap */
- if(g.bpp == 3) g.bpp = 4;
-
- switch(g.bpp) {
- case 1:
- bpp_opa_table = bpp1_opa_table;
- bitmask_init = 0x80;
- break;
- case 2:
- bpp_opa_table = bpp2_opa_table;
- bitmask_init = 0xC0;
- break;
- case 4:
- bpp_opa_table = bpp4_opa_table;
- bitmask_init = 0xF0;
- break;
- case 8:
- bpp_opa_table = NULL;
- bitmask_init = 0xFF;
- break; /*No opa table, pixel value will be used directly*/
- default: return; /*Invalid bpp. Can't render the letter*/
- }
-
- const uint8_t * map_p = lv_font_get_glyph_bitmap(font_p, letter);
-
- if(map_p == NULL) return;
-
- /*If the letter is completely out of mask don't draw it */
- if(pos_x + g.box_w < mask_p->x1 || pos_x > mask_p->x2 || pos_y + g.box_h < mask_p->y1 || pos_y > mask_p->y2) return;
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- lv_coord_t col, row;
-
- uint8_t width_byte_scr = g.box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
- if(g.box_w & 0x7) width_byte_scr++;
- uint16_t width_bit = g.box_w * g.bpp; /*Letter width in bits*/
-
- bool subpx = font_p->subpx == LV_FONT_SUBPX_NONE ? false : true;
-
- /* Calculate the col/row start/end on the map*/
- lv_coord_t col_start;
- lv_coord_t col_end;
- lv_coord_t row_start;
- lv_coord_t row_end;
-
- if(subpx == false) {
- col_start = pos_x >= mask_p->x1 ? 0 : mask_p->x1 - pos_x;
- col_end = pos_x + g.box_w <= mask_p->x2 ? g.box_w : mask_p->x2 - pos_x + 1;
- row_start = pos_y >= mask_p->y1 ? 0 : mask_p->y1 - pos_y;
- row_end = pos_y + g.box_h <= mask_p->y2 ? g.box_h : mask_p->y2 - pos_y + 1;
- } else {
- col_start = pos_x >= mask_p->x1 ? 0 : (mask_p->x1 - pos_x) * 3;
- col_end = pos_x + g.box_w / 3 <= mask_p->x2 ? g.box_w : (mask_p->x2 - pos_x + 1) * 3;
- row_start = pos_y >= mask_p->y1 ? 0 : mask_p->y1 - pos_y;
- row_end = pos_y + g.box_h <= mask_p->y2 ? g.box_h : mask_p->y2 - pos_y + 1;
- }
-
- /*Set a pointer on VDB to the first pixel of the letter*/
- vdb_buf_tmp += ((pos_y - vdb->area.y1) * vdb_width) + pos_x - vdb->area.x1;
-
- /*If the letter is partially out of mask the move there on VDB*/
- if(subpx) vdb_buf_tmp += (row_start * vdb_width) + col_start / 3;
- else vdb_buf_tmp += (row_start * vdb_width) + col_start;
-
- /*Move on the map too*/
- uint32_t bit_ofs = (row_start * width_bit) + (col_start * g.bpp);
- map_p += bit_ofs >> 3;
-
- uint8_t letter_px;
- lv_opa_t px_opa = 0;
- uint16_t col_bit;
- col_bit = bit_ofs & 0x7; /* "& 0x7" equals to "% 8" just faster */
-
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- uint8_t font_rgb[3];
- uint8_t txt_rgb[3] = {LV_COLOR_GET_R(color), LV_COLOR_GET_G(color), LV_COLOR_GET_B(color)};
-
- for(row = row_start; row < row_end; row++) {
- bitmask = bitmask_init >> col_bit;
- uint8_t sub_px_cnt = 0;
- for(col = col_start; col < col_end; col++) {
- letter_px = (*map_p & bitmask) >> (8 - col_bit - g.bpp);
-
- /*subpx == 0*/
- if(subpx == false) {
- if(letter_px != 0) {
- if(opa == LV_OPA_COVER) {
- px_opa = g.bpp == 8 ? letter_px : bpp_opa_table[letter_px];
- } else {
- px_opa = g.bpp == 8 ? (uint16_t)((uint16_t)letter_px * opa) >> 8
- : (uint16_t)((uint16_t)bpp_opa_table[letter_px] * opa) >> 8;
- }
-
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width,
- (col + pos_x) - vdb->area.x1, (row + pos_y) - vdb->area.y1, color, px_opa);
- } else if(vdb_buf_tmp->full != color.full) {
- if(px_opa > LV_OPA_MAX) {
- *vdb_buf_tmp = color;
- } else if(px_opa > LV_OPA_MIN) {
- if(scr_transp == false) {
- *vdb_buf_tmp = lv_color_mix(color, *vdb_buf_tmp, px_opa);
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- *vdb_buf_tmp = color_mix_2_alpha(*vdb_buf_tmp, (*vdb_buf_tmp).ch.alpha, color, px_opa);
-#endif
- }
- }
- }
- }
- vdb_buf_tmp++;
- }
- /*Handle subpx drawing*/
- else {
- if(letter_px != 0) {
- if(opa == LV_OPA_COVER) {
- px_opa = g.bpp == 8 ? letter_px : bpp_opa_table[letter_px];
- } else {
- px_opa = g.bpp == 8 ? (uint16_t)((uint16_t)letter_px * opa) >> 8
- : (uint16_t)((uint16_t)bpp_opa_table[letter_px] * opa) >> 8;
- }
-
- font_rgb[sub_px_cnt] = px_opa;
- } else {
- font_rgb[sub_px_cnt] = 0;
- }
- sub_px_cnt ++;
-
- if(sub_px_cnt == 3) {
- lv_color_t res_color;
-
- if(font_rgb[0] == 0 && font_rgb[1] == 0 && font_rgb[2] == 0) {
- res_color = *vdb_buf_tmp;
- } else {
-
- uint8_t bg_rgb[3] = {LV_COLOR_GET_R(*vdb_buf_tmp), LV_COLOR_GET_G(*vdb_buf_tmp), LV_COLOR_GET_B(*vdb_buf_tmp)};
-
-#if LV_FONT_SUBPX_BGR
- LV_COLOR_SET_B(res_color, (uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[2] * (255 - font_rgb[0]))) >> 8);
- LV_COLOR_SET_R(res_color, (uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[0] * (255 - font_rgb[2]))) >> 8);
-#else
- LV_COLOR_SET_R(res_color, (uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - font_rgb[0]))) >> 8);
- LV_COLOR_SET_B(res_color, (uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - font_rgb[2]))) >> 8);
-#endif
- LV_COLOR_SET_G(res_color, (uint16_t)((uint16_t)txt_rgb[1] * font_rgb[1] + (bg_rgb[1] * (255 - font_rgb[1]))) >> 8);
- }
- if(scr_transp == false) {
- vdb_buf_tmp->full = res_color.full;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- } else {
- *vdb_buf_tmp = color_mix_2_alpha(*vdb_buf_tmp, (*vdb_buf_tmp).ch.alpha, color, px_opa);
-#endif
- }
- sub_px_cnt = 0;
- vdb_buf_tmp++;
- }
- }
-
-
- if(col_bit < 8 - g.bpp) {
- col_bit += g.bpp;
- bitmask = bitmask >> g.bpp;
- } else {
- col_bit = 0;
- bitmask = bitmask_init;
- map_p++;
- }
- }
-
- col_bit += ((g.box_w - col_end) + col_start) * g.bpp;
-
- map_p += (col_bit >> 3);
- col_bit = col_bit & 0x7;
-
- /*Next row in VDB*/
- if(subpx) vdb_buf_tmp += vdb_width - (col_end - col_start) / 3;
- else vdb_buf_tmp += vdb_width - (col_end - col_start);
- }
-}
-
-/**
- * Draw a color map to the display (image)
- * @param cords_p coordinates the color map
- * @param mask_p the map will drawn only on this area (truncated to VDB area)
- * @param map_p pointer to a lv_color_t array
- * @param opa opacity of the map
- * @param chroma_keyed true: enable transparency of LV_IMG_LV_COLOR_TRANSP color pixels
- * @param alpha_byte true: extra alpha byte is inserted for every pixel
- * @param recolor mix the pixels with this color
- * @param recolor_opa the intense of recoloring
- */
-void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p, const uint8_t * map_p, lv_opa_t opa,
- bool chroma_key, bool alpha_byte, lv_color_t recolor, lv_opa_t recolor_opa)
-{
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- lv_area_t masked_a;
- bool union_ok;
-
- /*Get the union of map size and mask*/
- /* The mask is already truncated to the vdb size
- * in 'lv_refr_area_with_vdb' function */
- union_ok = lv_area_intersect(&masked_a, cords_p, mask_p);
-
- /*If there are common part of the three area then draw to the vdb*/
- if(union_ok == false) return;
-
- /*The pixel size in byte is different if an alpha byte is added too*/
- uint8_t px_size_byte = alpha_byte ? LV_IMG_PX_SIZE_ALPHA_BYTE : sizeof(lv_color_t);
-
- /*If the map starts OUT of the masked area then calc. the first pixel*/
- lv_coord_t map_width = lv_area_get_width(cords_p);
- if(cords_p->y1 < masked_a.y1) {
- map_p += (uint32_t)map_width * ((masked_a.y1 - cords_p->y1)) * px_size_byte;
- }
- if(cords_p->x1 < masked_a.x1) {
- map_p += (masked_a.x1 - cords_p->x1) * px_size_byte;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- /*Stores coordinates relative to the current VDB*/
- masked_a.x1 = masked_a.x1 - vdb->area.x1;
- masked_a.y1 = masked_a.y1 - vdb->area.y1;
- masked_a.x2 = masked_a.x2 - vdb->area.x1;
- masked_a.y2 = masked_a.y2 - vdb->area.y1;
-
- lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- vdb_buf_tmp += (uint32_t)vdb_width * masked_a.y1; /*Move to the first row*/
- vdb_buf_tmp += (uint32_t)masked_a.x1; /*Move to the first col*/
-
- lv_coord_t row;
- lv_coord_t map_useful_w = lv_area_get_width(&masked_a);
-
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- /*The simplest case just copy the pixels into the VDB*/
- if(chroma_key == false && alpha_byte == false && opa == LV_OPA_COVER && recolor_opa == LV_OPA_TRANSP) {
-
- /*Use the custom VDB write function is exists*/
- if(disp->driver.set_px_cb) {
- lv_coord_t col;
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
- for(col = 0; col < map_useful_w; col++) {
- lv_color_t px_color = *((lv_color_t *)&map_p[(uint32_t)col * px_size_byte]);
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1, row,
- px_color, opa);
- }
- map_p += map_width * px_size_byte; /*Next row on the map*/
- }
- }
- /*Normal native VDB*/
- else {
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
-#if LV_USE_GPU
- if(disp->driver.gpu_blend_cb == false) {
- sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
- } else {
- disp->driver.gpu_blend_cb(&disp->driver, vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
- }
-#else
- sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
-#endif
- map_p += map_width * px_size_byte; /*Next row on the map*/
- vdb_buf_tmp += vdb_width; /*Next row on the VDB*/
- }
- }
- }
-
- /*In the other cases every pixel need to be checked one-by-one*/
- else {
-
- lv_coord_t col;
- lv_color_t last_img_px = LV_COLOR_BLACK;
- lv_color_t recolored_px = lv_color_mix(recolor, last_img_px, recolor_opa);
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
- for(col = 0; col < map_useful_w; col++) {
- lv_opa_t opa_result = opa;
- uint8_t * px_color_p = (uint8_t *)&map_p[(uint32_t)col * px_size_byte];
- lv_color_t px_color;
-
- /*Calculate with the pixel level alpha*/
- if(alpha_byte) {
-#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
- px_color.full = px_color_p[0];
-#elif LV_COLOR_DEPTH == 16
- /*Because of Alpha byte 16 bit color can start on odd address which can cause
- * crash*/
- px_color.full = px_color_p[0] + (px_color_p[1] << 8);
-#elif LV_COLOR_DEPTH == 32
- px_color = *((lv_color_t *)px_color_p);
-#endif
- lv_opa_t px_opa = *(px_color_p + LV_IMG_PX_SIZE_ALPHA_BYTE - 1);
- if(px_opa == LV_OPA_TRANSP)
- continue;
- else if(px_opa != LV_OPA_COVER)
- opa_result = (uint32_t)((uint32_t)px_opa * opa_result) >> 8;
- } else {
- px_color = *((lv_color_t *)px_color_p);
- }
-
- /*Handle chroma key*/
- if(chroma_key && px_color.full == disp->driver.color_chroma_key.full) continue;
-
- /*Re-color the pixel if required*/
- if(recolor_opa != LV_OPA_TRANSP) {
- if(last_img_px.full != px_color.full) { /*Minor acceleration: calculate only for
- new colors (save the last)*/
- last_img_px = px_color;
- recolored_px = lv_color_mix(recolor, last_img_px, recolor_opa);
- }
- /*Handle custom VDB write is present*/
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1,
- row, recolored_px, opa_result);
- }
- /*Normal native VDB write*/
- else {
- if(opa_result == LV_OPA_COVER)
- vdb_buf_tmp[col].full = recolored_px.full;
- else
- vdb_buf_tmp[col] = lv_color_mix(recolored_px, vdb_buf_tmp[col], opa_result);
- }
- } else {
- /*Handle custom VDB write is present*/
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1,
- row, px_color, opa_result);
- }
- /*Normal native VDB write*/
- else {
-
- if(opa_result == LV_OPA_COVER)
- vdb_buf_tmp[col] = px_color;
- else {
- if(scr_transp == false) {
- vdb_buf_tmp[col] = lv_color_mix(px_color, vdb_buf_tmp[col], opa_result);
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- vdb_buf_tmp[col] = color_mix_2_alpha(vdb_buf_tmp[col], vdb_buf_tmp[col].ch.alpha,
- px_color, opa_result);
-#endif
- }
- }
- }
- }
- }
-
- map_p += map_width * px_size_byte; /*Next row on the map*/
- vdb_buf_tmp += vdb_width; /*Next row on the VDB*/
- }
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Blend pixels to destination memory using opacity
- * @param dest a memory address. Copy 'src' here.
- * @param src pointer to pixel map. Copy it to 'dest'.
- * @param length number of pixels in 'src'
- * @param opa opacity (0, LV_OPA_TRANSP: transparent ... 255, LV_OPA_COVER, fully cover)
- */
-static void sw_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)
-{
- if(opa == LV_OPA_COVER) {
- memcpy(dest, src, length * sizeof(lv_color_t));
- } else {
- uint32_t col;
- for(col = 0; col < length; col++) {
- dest[col] = lv_color_mix(src[col], dest[col], opa);
- }
- }
-}
-
-/**
- * Fill an area with a color
- * @param mem a memory address. Considered to a rectangular window according to 'mem_area'
- * @param mem_width width of the 'mem' buffer
- * @param fill_area coordinates of an area to fill. Relative to 'mem_area'.
- * @param color fill color
- * @param opa opacity (0, LV_OPA_TRANSP: transparent ... 255, LV_OPA_COVER, fully cover)
- */
-static void sw_color_fill(lv_color_t * mem, lv_coord_t mem_width, const lv_area_t * fill_area, lv_color_t color,
- lv_opa_t opa)
-{
- /*Set all row in vdb to the given color*/
- lv_coord_t row;
- lv_coord_t col;
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- if(disp->driver.set_px_cb) {
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- for(row = fill_area->y1; row <= fill_area->y2; row++) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)mem, mem_width, col, row, color, opa);
- }
- }
- } else {
- mem += fill_area->y1 * mem_width; /*Go to the first row*/
-
- /*Run simpler function without opacity*/
- if(opa == LV_OPA_COVER) {
-
- /*Fill the first row with 'color'*/
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- mem[col] = color;
- }
-
- /*Copy the first row to all other rows*/
- lv_color_t * mem_first = &mem[fill_area->x1];
- lv_coord_t copy_size = (fill_area->x2 - fill_area->x1 + 1) * sizeof(lv_color_t);
- mem += mem_width;
-
- for(row = fill_area->y1 + 1; row <= fill_area->y2; row++) {
- memcpy(&mem[fill_area->x1], mem_first, copy_size);
- mem += mem_width;
- }
- }
- /*Calculate with alpha too*/
- else {
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- lv_color_t bg_tmp = LV_COLOR_BLACK;
- lv_color_t opa_tmp = lv_color_mix(color, bg_tmp, opa);
- for(row = fill_area->y1; row <= fill_area->y2; row++) {
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- if(scr_transp == false) {
- /*If the bg color changed recalculate the result color*/
- if(mem[col].full != bg_tmp.full) {
- bg_tmp = mem[col];
- opa_tmp = lv_color_mix(color, bg_tmp, opa);
- }
-
- mem[col] = opa_tmp;
-
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- mem[col] = color_mix_2_alpha(mem[col], mem[col].ch.alpha, color, opa);
-#endif
- }
- }
- mem += mem_width;
- }
- }
- }
-}
-
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
-/**
- * Mix two colors. Both color can have alpha value. It requires ARGB888 colors.
- * @param bg_color background color
- * @param bg_opa alpha of the background color
- * @param fg_color foreground color
- * @param fg_opa alpha of the foreground color
- * @return the mixed color. the alpha channel (color.alpha) contains the result alpha
- */
-static inline lv_color_t color_mix_2_alpha(lv_color_t bg_color, lv_opa_t bg_opa, lv_color_t fg_color, lv_opa_t fg_opa)
-{
- /* Pick the foreground if it's fully opaque or the Background is fully transparent*/
- if(fg_opa > LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
- fg_color.ch.alpha = fg_opa;
- return fg_color;
- }
- /*Transparent foreground: use the Background*/
- else if(fg_opa <= LV_OPA_MIN) {
- return bg_color;
- }
- /*Opaque background: use simple mix*/
- else if(bg_opa >= LV_OPA_MAX) {
- return lv_color_mix(fg_color, bg_color, fg_opa);
- }
- /*Both colors have alpha. Expensive calculation need to be applied*/
- else {
- /*Save the parameters and the result. If they will be asked again don't compute again*/
- static lv_opa_t fg_opa_save = 0;
- static lv_opa_t bg_opa_save = 0;
- static lv_color_t fg_color_save = {{0}};
- static lv_color_t bg_color_save = {{0}};
- static lv_color_t c = {{0}};
-
- if(fg_opa != fg_opa_save || bg_opa != bg_opa_save || fg_color.full != fg_color_save.full ||
- bg_color.full != bg_color_save.full) {
- fg_opa_save = fg_opa;
- bg_opa_save = bg_opa;
- fg_color_save.full = fg_color.full;
- bg_color_save.full = bg_color.full;
- /*Info:
- * https://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator*/
- lv_opa_t alpha_res = 255 - ((uint16_t)((uint16_t)(255 - fg_opa) * (255 - bg_opa)) >> 8);
- if(alpha_res == 0) {
- while(1)
- ;
- }
- lv_opa_t ratio = (uint16_t)((uint16_t)fg_opa * 255) / alpha_res;
- c = lv_color_mix(fg_color, bg_color, ratio);
- c.ch.alpha = alpha_res;
- }
- return c;
- }
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_basic.h b/src/libs/lvgl/src/lv_draw/lv_draw_basic.h
deleted file mode 100644
index 266b0c6c..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_basic.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * @file lv_draw_basic.h
- *
- */
-
-#ifndef LV_DRAW_BASIC_H
-#define LV_DRAW_BASIC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "../lv_font/lv_font.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_area.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-void lv_draw_px(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa);
-/**
- * Fill an area in the Virtual Display Buffer
- * @param cords_p coordinates of the area to fill
- * @param mask_p fill only o this mask
- * @param color fill color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa);
-
-/**
- * Draw a letter in the Virtual Display Buffer
- * @param pos_p left-top coordinate of the latter
- * @param mask_p the letter will be drawn only on this area
- * @param font_p pointer to font
- * @param letter a letter to draw
- * @param color color of letter
- * @param opa opacity of letter (0..255)
- */
-void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * mask_p, const lv_font_t * font_p, uint32_t letter,
- lv_color_t color, lv_opa_t opa);
-
-/**
- * Draw a color map to the display (image)
- * @param cords_p coordinates the color map
- * @param mask_p the map will drawn only on this area (truncated to VDB area)
- * @param map_p pointer to a lv_color_t array
- * @param opa opacity of the map
- * @param chroma_keyed true: enable transparency of LV_IMG_LV_COLOR_TRANSP color pixels
- * @param alpha_byte true: extra alpha byte is inserted for every pixel
- * @param recolor mix the pixels with this color
- * @param recolor_opa the intense of recoloring
- */
-void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p, const uint8_t * map_p, lv_opa_t opa,
- bool chroma_key, bool alpha_byte, lv_color_t recolor, lv_opa_t recolor_opa);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_BASIC_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_img.c b/src/libs/lvgl/src/lv_draw/lv_draw_img.c
deleted file mode 100644
index e19ba015..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_img.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/**
- * @file lv_draw_img.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw_img.h"
-#include "lv_img_cache.h"
-#include "../lv_misc/lv_log.h"
-#include "../lv_misc/lv_mem.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mask, const void * src,
- const lv_style_t * style, lv_opa_t opa_scale);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Draw an image
- * @param coords the coordinates of the image
- * @param mask the image will be drawn only in this area
- * @param src pointer to a lv_color_t array which contains the pixels of the image
- * @param style style of the image
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * src, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- if(src == NULL) {
- LV_LOG_WARN("Image draw: src is NULL");
- lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
- return;
- }
-
- lv_res_t res;
- res = lv_img_draw_core(coords, mask, src, style, opa_scale);
-
- if(res == LV_RES_INV) {
- LV_LOG_WARN("Image draw error");
- lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
- return;
- }
-}
-
-/**
- * Get the color of an image's pixel
- * @param dsc an image descriptor
- * @param x x coordinate of the point to get
- * @param y x coordinate of the point to get
- * @param style style of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` `style->image.color` shows
- * the color. Can be `NULL` but for `ALPHA` images black will be returned. In other cases it is not
- * used.
- * @return color of the point
- */
-lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, const lv_style_t * style)
-{
- lv_color_t p_color = LV_COLOR_BLACK;
- if(x >= (lv_coord_t)dsc->header.w) {
- x = dsc->header.w - 1;
- LV_LOG_WARN("lv_canvas_get_px: x is too large (out of canvas)");
- } else if(x < 0) {
- x = 0;
- LV_LOG_WARN("lv_canvas_get_px: x is < 0 (out of canvas)");
- }
-
- if(y >= (lv_coord_t)dsc->header.h) {
- y = dsc->header.h - 1;
- LV_LOG_WARN("lv_canvas_get_px: y is too large (out of canvas)");
- } else if(y < 0) {
- y = 0;
- LV_LOG_WARN("lv_canvas_get_px: y is < 0 (out of canvas)");
- }
-
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED ||
- dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&p_color, &buf_u8[px], sizeof(lv_color_t));
-#if LV_COLOR_SIZE == 32
- p_color.ch.alpha = 0xFF; /*Only the color should be get so use a deafult alpha value*/
-#endif
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
- buf_u8 += 4 * 2;
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8, 16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- p_color.full = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
- buf_u8 += 4 * 4;
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
- * so the possible real width are 4, 8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- p_color.full = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
- buf_u8 += 4 * 16;
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
- * so the possible real width are 2, 4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- p_color.full = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
- buf_u8 += 4 * 256;
- uint32_t px = dsc->header.w * y + x;
- p_color.full = buf_u8[px];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT || dsc->header.cf == LV_IMG_CF_ALPHA_2BIT ||
- dsc->header.cf == LV_IMG_CF_ALPHA_4BIT || dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- if(style)
- p_color = style->image.color;
- else
- p_color = LV_COLOR_BLACK;
- }
- return p_color;
-}
-
-/**
- * Get the alpha value of an image's pixel
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return alpha value of the point
- */
-lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y)
-{
- if(x >= (lv_coord_t)dsc->header.w) {
- x = dsc->header.w - 1;
- LV_LOG_WARN("lv_canvas_get_px: x is too large (out of canvas)");
- } else if(x < 0) {
- x = 0;
- LV_LOG_WARN("lv_canvas_get_px: x is < 0 (out of canvas)");
- }
-
- if(y >= (lv_coord_t)dsc->header.h) {
- y = dsc->header.h - 1;
- LV_LOG_WARN("lv_canvas_get_px: y is too large (out of canvas)");
- } else if(y < 0) {
- y = 0;
- LV_LOG_WARN("lv_canvas_get_px: y is < 0 (out of canvas)");
- }
-
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint32_t px = dsc->header.w * y * LV_IMG_PX_SIZE_ALPHA_BYTE + x * LV_IMG_PX_SIZE_ALPHA_BYTE;
- return buf_u8[px + LV_IMG_PX_SIZE_ALPHA_BYTE - 1];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- uint8_t px_opa = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
- return px_opa ? LV_OPA_TRANSP : LV_OPA_COVER;
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
- const uint8_t opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
-
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 4 ,8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- uint8_t px_opa = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
- return opa_table[px_opa];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
- const uint8_t opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
- 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
-
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- uint8_t px_opa = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
- return opa_table[px_opa];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- uint32_t px = dsc->header.w * y + x;
- return buf_u8[px];
- }
-
- return LV_OPA_COVER;
-}
-
-/**
- * Set the color of a pixel of an image. The alpha channel won't be affected.
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c)
-{
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&buf_u8[px], &c, px_size);
- } else if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&buf_u8[px], &c, px_size - 1); /*-1 to not overwrite the alpha value*/
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
- buf_u8 += sizeof(lv_color32_t) * 2; /*Skip the palette*/
-
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0x1) << (7 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
- buf_u8 += sizeof(lv_color32_t) * 4; /*Skip the palette*/
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
- * so the possible real width are 4, 8 ,12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
-
- buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0x3) << (6 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
- buf_u8 += sizeof(lv_color32_t) * 16; /*Skip the palette*/
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0xF) << (4 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
- buf_u8 += sizeof(lv_color32_t) * 256; /*Skip the palette*/
- uint32_t px = dsc->header.w * y + x;
- buf_u8[px] = c.full;
- }
-}
-
-/**
- * Set the alpha value of a pixel of an image. The color won't be affected
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param opa the desired opacity
- */
-void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa)
-{
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- buf_u8[px + px_size - 1] = opa;
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
- opa = opa >> 7; /*opa -> [0,1]*/
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0x1) << (7 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
- opa = opa >> 6; /*opa -> [0,3]*/
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 4 ,8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0x3) << (6 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
- opa = opa >> 4; /*opa -> [0,15]*/
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0xF) << (4 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- uint32_t px = dsc->header.w * y + x;
- buf_u8[px] = opa;
- }
-}
-
-/**
- * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param dsc pointer to an image descriptor
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c)
-{
- if((dsc->header.cf == LV_IMG_CF_ALPHA_1BIT && id > 1) || (dsc->header.cf == LV_IMG_CF_ALPHA_2BIT && id > 3) ||
- (dsc->header.cf == LV_IMG_CF_ALPHA_4BIT && id > 15) || (dsc->header.cf == LV_IMG_CF_ALPHA_8BIT)) {
- LV_LOG_WARN("lv_img_buf_set_px_alpha: invalid 'id'");
- return;
- }
-
- lv_color32_t c32;
- c32.full = lv_color_to32(c);
- uint8_t * buf = (uint8_t *)dsc->data;
- memcpy(&buf[id * sizeof(c32)], &c32, sizeof(c32));
-}
-
-/**
- * Get the pixel size of a color format in bits
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return the pixel size in bits
- */
-uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf)
-{
- uint8_t px_size = 0;
-
- switch(cf) {
- case LV_IMG_CF_UNKNOWN:
- case LV_IMG_CF_RAW: px_size = 0; break;
- case LV_IMG_CF_TRUE_COLOR:
- case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: px_size = LV_COLOR_SIZE; break;
- case LV_IMG_CF_TRUE_COLOR_ALPHA: px_size = LV_IMG_PX_SIZE_ALPHA_BYTE << 3; break;
- case LV_IMG_CF_INDEXED_1BIT:
- case LV_IMG_CF_ALPHA_1BIT: px_size = 1; break;
- case LV_IMG_CF_INDEXED_2BIT:
- case LV_IMG_CF_ALPHA_2BIT: px_size = 2; break;
- case LV_IMG_CF_INDEXED_4BIT:
- case LV_IMG_CF_ALPHA_4BIT: px_size = 4; break;
- case LV_IMG_CF_INDEXED_8BIT:
- case LV_IMG_CF_ALPHA_8BIT: px_size = 8; break;
- default: px_size = 0; break;
- }
-
- return px_size;
-}
-
-/**
- * Check if a color format is chroma keyed or not
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return true: chroma keyed; false: not chroma keyed
- */
-bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf)
-{
- bool is_chroma_keyed = false;
-
- switch(cf) {
- case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED:
- case LV_IMG_CF_RAW_CHROMA_KEYED:
-#if LV_INDEXED_CHROMA
- case LV_IMG_CF_INDEXED_1BIT:
- case LV_IMG_CF_INDEXED_2BIT:
- case LV_IMG_CF_INDEXED_4BIT:
- case LV_IMG_CF_INDEXED_8BIT:
-#endif
- is_chroma_keyed = true; break;
-
- default: is_chroma_keyed = false; break;
- }
-
- return is_chroma_keyed;
-}
-
-/**
- * Check if a color format has alpha channel or not
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return true: has alpha channel; false: doesn't have alpha channel
- */
-bool lv_img_color_format_has_alpha(lv_img_cf_t cf)
-{
- bool has_alpha = false;
-
- switch(cf) {
- case LV_IMG_CF_TRUE_COLOR_ALPHA:
- case LV_IMG_CF_RAW_ALPHA:
- case LV_IMG_CF_INDEXED_1BIT:
- case LV_IMG_CF_INDEXED_2BIT:
- case LV_IMG_CF_INDEXED_4BIT:
- case LV_IMG_CF_INDEXED_8BIT:
- case LV_IMG_CF_ALPHA_1BIT:
- case LV_IMG_CF_ALPHA_2BIT:
- case LV_IMG_CF_ALPHA_4BIT:
- case LV_IMG_CF_ALPHA_8BIT: has_alpha = true; break;
- default: has_alpha = false; break;
- }
-
- return has_alpha;
-}
-
-/**
- * Get the type of an image source
- * @param src pointer to an image source:
- * - pointer to an 'lv_img_t' variable (image stored internally and compiled into the code)
- * - a path to a file (e.g. "S:/folder/image.bin")
- * - or a symbol (e.g. LV_SYMBOL_CLOSE)
- * @return type of the image source LV_IMG_SRC_VARIABLE/FILE/SYMBOL/UNKNOWN
- */
-lv_img_src_t lv_img_src_get_type(const void * src)
-{
- lv_img_src_t img_src_type = LV_IMG_SRC_UNKNOWN;
-
- if(src == NULL) return img_src_type;
- const uint8_t * u8_p = src;
-
- /*The first byte shows the type of the image source*/
- if(u8_p[0] >= 0x20 && u8_p[0] <= 0x7F) {
- img_src_type = LV_IMG_SRC_FILE; /*If it's an ASCII character then it's file name*/
- } else if(u8_p[0] >= 0x80) {
- img_src_type = LV_IMG_SRC_SYMBOL; /*Symbols begins after 0x7F*/
- } else {
- img_src_type = LV_IMG_SRC_VARIABLE; /*`lv_img_dsc_t` is design to the first byte < 0x20*/
- }
-
- if(LV_IMG_SRC_UNKNOWN == img_src_type) {
- LV_LOG_WARN("lv_img_src_get_type: unknown image type");
- }
-
- return img_src_type;
-}
-
-lv_img_dsc_t *lv_img_buf_alloc(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
-{
- /* Allocate image descriptor */
- lv_img_dsc_t *dsc = lv_mem_alloc(sizeof(lv_img_dsc_t));
- if(dsc == NULL)
- return NULL;
-
- memset(dsc, 0, sizeof(lv_img_dsc_t));
-
- /* Get image data size */
- dsc->data_size = lv_img_buf_get_img_size(w, h, cf);
- if(dsc->data_size == 0) {
- lv_mem_free(dsc);
- return NULL;
- }
-
- /* Allocate raw buffer */
- dsc->data = lv_mem_alloc(dsc->data_size);
- if(dsc->data == NULL) {
- lv_mem_free(dsc);
- return NULL;
- }
- memset((uint8_t *)dsc->data, 0, dsc->data_size);
-
- /* Fill in header */
- dsc->header.always_zero = 0;
- dsc->header.w = w;
- dsc->header.h = h;
- dsc->header.cf = cf;
- return dsc;
-}
-
-void lv_img_buf_free(lv_img_dsc_t *dsc)
-{
- if(dsc != NULL) {
- if(dsc->data != NULL)
- lv_mem_free(dsc->data);
-
- lv_mem_free(dsc);
- }
-}
-
-uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
-{
- switch(cf) {
- case LV_IMG_CF_TRUE_COLOR: return LV_IMG_BUF_SIZE_TRUE_COLOR(w, h);
- case LV_IMG_CF_TRUE_COLOR_ALPHA: return LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h);
- case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: return LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h);
- case LV_IMG_CF_ALPHA_1BIT: return LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h);
- case LV_IMG_CF_ALPHA_2BIT: return LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h);
- case LV_IMG_CF_ALPHA_4BIT: return LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h);
- case LV_IMG_CF_ALPHA_8BIT: return LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h);
- case LV_IMG_CF_INDEXED_1BIT: return LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h);
- case LV_IMG_CF_INDEXED_2BIT: return LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h);
- case LV_IMG_CF_INDEXED_4BIT: return LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h);
- case LV_IMG_CF_INDEXED_8BIT: return LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h);
- default: return 0;
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mask, const void * src,
- const lv_style_t * style, lv_opa_t opa_scale)
-{
-
- lv_area_t mask_com; /*Common area of mask and coords*/
- bool union_ok;
- union_ok = lv_area_intersect(&mask_com, mask, coords);
- if(union_ok == false) {
- return LV_RES_OK; /*Out of mask. There is nothing to draw so the image is drawn
- successfully.*/
- }
-
- lv_opa_t opa =
- opa_scale == LV_OPA_COVER ? style->image.opa : (uint16_t)((uint16_t)style->image.opa * opa_scale) >> 8;
-
- lv_img_cache_entry_t * cdsc = lv_img_cache_open(src, style);
-
- if(cdsc == NULL) return LV_RES_INV;
-
- bool chroma_keyed = lv_img_color_format_is_chroma_keyed(cdsc->dec_dsc.header.cf);
- bool alpha_byte = lv_img_color_format_has_alpha(cdsc->dec_dsc.header.cf);
-
- if(cdsc->dec_dsc.error_msg != NULL) {
- LV_LOG_WARN("Image draw error");
- lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, cdsc->dec_dsc.error_msg, LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
- }
- /* The decoder open could open the image and gave the entire uncompressed image.
- * Just draw it!*/
- else if(cdsc->dec_dsc.img_data) {
- lv_draw_map(coords, mask, cdsc->dec_dsc.img_data, opa, chroma_keyed, alpha_byte, style->image.color,
- style->image.intense);
- }
- /* The whole uncompressed image is not available. Try to read it line-by-line*/
- else {
- lv_coord_t width = lv_area_get_width(&mask_com);
-
- uint8_t * buf = lv_draw_get_buf(lv_area_get_width(&mask_com) * LV_IMG_PX_SIZE_ALPHA_BYTE); /*space for the possible alpha byte*/
-
- lv_area_t line;
- lv_area_copy(&line, &mask_com);
- lv_area_set_height(&line, 1);
- lv_coord_t x = mask_com.x1 - coords->x1;
- lv_coord_t y = mask_com.y1 - coords->y1;
- lv_coord_t row;
- lv_res_t read_res;
- for(row = mask_com.y1; row <= mask_com.y2; row++) {
- read_res = lv_img_decoder_read_line(&cdsc->dec_dsc, x, y, width, buf);
- if(read_res != LV_RES_OK) {
- lv_img_decoder_close(&cdsc->dec_dsc);
- LV_LOG_WARN("Image draw can't read the line");
- return LV_RES_INV;
- }
- lv_draw_map(&line, mask, buf, opa, chroma_keyed, alpha_byte, style->image.color, style->image.intense);
- line.y1++;
- line.y2++;
- y++;
- }
- }
-
- return LV_RES_OK;
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_img.h b/src/libs/lvgl/src/lv_draw/lv_draw_img.h
deleted file mode 100644
index 794dd79e..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_img.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * @file lv_draw_img.h
- *
- */
-
-#ifndef LV_DRAW_IMG_H
-#define LV_DRAW_IMG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw.h"
-#include "lv_img_decoder.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * MACROS
- **********************/
-
-#define LV_IMG_BUF_SIZE_TRUE_COLOR(w, h) ((LV_COLOR_SIZE / 8) * w * h)
-#define LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h) ((LV_COLOR_SIZE / 8) * w * h)
-#define LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h) (LV_IMG_PX_SIZE_ALPHA_BYTE * w * h)
-
-/*+ 1: to be sure no fractional row*/
-#define LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) ((((w / 8) + 1) * h))
-#define LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h) ((((w / 4) + 1) * h))
-#define LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h) ((((w / 2) + 1) * h))
-#define LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h) ((w * h))
-
-/*4 * X: for palette*/
-#define LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) + 4 * 2)
-#define LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h) + 4 * 4)
-#define LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h) + 4 * 16)
-#define LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h) + 4 * 256)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Draw an image
- * @param coords the coordinates of the image
- * @param mask the image will be drawn only in this area
- * @param src pointer to a lv_color_t array which contains the pixels of the image
- * @param style style of the image
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * src, const lv_style_t * style,
- lv_opa_t opa_scale);
-
-/**
- * Get the type of an image source
- * @param src pointer to an image source:
- * - pointer to an 'lv_img_t' variable (image stored internally and compiled into the code)
- * - a path to a file (e.g. "S:/folder/image.bin")
- * - or a symbol (e.g. LV_SYMBOL_CLOSE)
- * @return type of the image source LV_IMG_SRC_VARIABLE/FILE/SYMBOL/UNKNOWN
- */
-lv_img_src_t lv_img_src_get_type(const void * src);
-
-/**
- * Get the color of an image's pixel
- * @param dsc an image descriptor
- * @param x x coordinate of the point to get
- * @param y x coordinate of the point to get
- * @param style style of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` `style->image.color` shows
- * the color. Can be `NULL` but for `ALPHA` images black will be returned. In other cases it is not
- * used.
- * @return color of the point
- */
-lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, const lv_style_t * style);
-/**
- * Get the alpha value of an image's pixel
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return alpha value of the point
- */
-lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
-
-/**
- * Set the color of a pixel of an image. The alpha channel won't be affected.
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c);
-
-/**
- * Set the alpha value of a pixel of an image. The color won't be affected
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param opa the desired opacity
- */
-void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa);
-
-/**
- * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param dsc pointer to an image descriptor
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c);
-
-/**
- * Get the pixel size of a color format in bits
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return the pixel size in bits
- */
-uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf);
-
-/**
- * Check if a color format is chroma keyed or not
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return true: chroma keyed; false: not chroma keyed
- */
-bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf);
-
-/**
- * Check if a color format has alpha channel or not
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return true: has alpha channel; false: doesn't have alpha channel
- */
-bool lv_img_color_format_has_alpha(lv_img_cf_t cf);
-
-/**
- * Allocate an image buffer in RAM
- * @param w width of image
- * @param h height of image
- * @param cf a color format (`LV_IMG_CF_...`)
- * @return an allocated image, or NULL on failure
- */
-lv_img_dsc_t *lv_img_buf_alloc(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
-
-/**
- * Free an allocated image buffer
- * @param dsc image buffer to free
- */
-void lv_img_buf_free(lv_img_dsc_t *dsc);
-
-/**
- * Get the memory consumption of a raw bitmap, given color format and dimensions.
- * @param w width
- * @param h height
- * @param cf color format
- * @return size in bytes
- */
-uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_label.c b/src/libs/lvgl/src/lv_draw/lv_draw_label.c
deleted file mode 100644
index bf75411d..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_label.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- * @file lv_draw_label.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw_label.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_bidi.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LABEL_RECOLOR_PAR_LENGTH 6
-#define LV_LABEL_HINT_UPDATE_TH 1024 /*Update the "hint" if the label's y coordinates have changed more then this*/
-
-/**********************
- * TYPEDEFS
- **********************/
-enum {
- CMD_STATE_WAIT,
- CMD_STATE_PAR,
- CMD_STATE_IN,
-};
-typedef uint8_t cmd_state_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static uint8_t hex_char_to_num(char hex);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Write a text
- * @param coords coordinates of the label
- * @param mask the label will be drawn only in this area
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- * @param txt 0 terminated text to write
- * @param flag settings for the text from 'txt_flag_t' enum
- * @param offset text offset in x and y direction (NULL if unused)
- * @param sel make the text selected in the range by drawing a background there
- */
-void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale,
- const char * txt, lv_txt_flag_t flag, lv_point_t * offset, lv_draw_label_txt_sel_t * sel,
- lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir)
-{
- const lv_font_t * font = style->text.font;
- lv_coord_t w;
-
- /*No need to waste processor time if string is empty*/
- if (txt[0] == '\0') return;
-
- if((flag & LV_TXT_FLAG_EXPAND) == 0) {
- /*Normally use the label's width as width*/
- w = lv_area_get_width(coords);
- } else {
- /*If EXAPND is enabled then not limit the text's width to the object's width*/
- lv_point_t p;
- lv_txt_get_size(&p, txt, style->text.font, style->text.letter_space, style->text.line_space, LV_COORD_MAX,
- flag);
- w = p.x;
- }
-
- lv_coord_t line_height = lv_font_get_line_height(font) + style->text.line_space;
-
- /*Init variables for the first line*/
- lv_coord_t line_width = 0;
- lv_point_t pos;
- pos.x = coords->x1;
- pos.y = coords->y1;
-
- lv_coord_t x_ofs = 0;
- lv_coord_t y_ofs = 0;
- if(offset != NULL) {
- x_ofs = offset->x;
- y_ofs = offset->y;
- pos.y += y_ofs;
- }
-
- uint32_t line_start = 0;
- int32_t last_line_start = -1;
-
- /*Check the hint to use the cached info*/
- if(hint && y_ofs == 0 && coords->y1 < 0) {
- /*If the label changed too much recalculate the hint.*/
- if(LV_MATH_ABS(hint->coord_y - coords->y1) > LV_LABEL_HINT_UPDATE_TH - 2 * line_height) {
- hint->line_start = -1;
- }
- last_line_start = hint->line_start;
- }
-
- /*Use the hint if it's valid*/
- if(hint && last_line_start >= 0) {
- line_start = last_line_start;
- pos.y += hint->y;
- }
-
-
- uint32_t line_end = line_start + lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, w, flag);
-
- /*Go the first visible line*/
- while(pos.y + line_height < mask->y1) {
- /*Go to next line*/
- line_start = line_end;
- line_end += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, w, flag);
- pos.y += line_height;
-
- /*Save at the threshold coordinate*/
- if(hint && pos.y >= -LV_LABEL_HINT_UPDATE_TH && hint->line_start < 0) {
- hint->line_start = line_start;
- hint->y = pos.y - coords->y1;
- hint->coord_y = coords->y1;
- }
-
- if(txt[line_start] == '\0') return;
- }
-
- /*Align to middle*/
- if(flag & LV_TXT_FLAG_CENTER) {
- line_width = lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
-
- pos.x += (lv_area_get_width(coords) - line_width) / 2;
-
- }
- /*Align to the right*/
- else if(flag & LV_TXT_FLAG_RIGHT) {
- line_width = lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
- pos.x += lv_area_get_width(coords) - line_width;
- }
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->text.opa : (uint16_t)((uint16_t)style->text.opa * opa_scale) >> 8;
-
- uint16_t sel_start = 0xFFFF;
- uint16_t sel_end = 0xFFFF;
- if(sel) {
- sel_start = sel->start;
- sel_end = sel->end;
- if(sel_start > sel_end) {
- uint16_t tmp = sel_start;
- sel_start = sel_end;
- sel_end = tmp;
- }
- }
-
- cmd_state_t cmd_state = CMD_STATE_WAIT;
- uint32_t i;
- uint16_t par_start = 0;
- lv_color_t recolor;
- lv_coord_t letter_w;
- lv_style_t sel_style;
- lv_style_copy(&sel_style, &lv_style_plain_color);
- sel_style.body.main_color = sel_style.body.grad_color = style->text.sel_color;
-
- /*Write out all lines*/
- while(txt[line_start] != '\0') {
- if(offset != NULL) {
- pos.x += x_ofs;
- }
- /*Write all letter of a line*/
- cmd_state = CMD_STATE_WAIT;
- i = 0;
- uint32_t letter;
- uint32_t letter_next;
-#if LV_USE_BIDI
- char *bidi_txt = lv_draw_get_buf(line_end - line_start + 1);
- lv_bidi_process_paragraph(txt + line_start, bidi_txt, line_end - line_start, bidi_dir, NULL, 0);
-#else
- (void)bidi_dir;
- const char *bidi_txt = txt + line_start;
-#endif
-
- while(i < line_end - line_start) {
- uint16_t logical_char_pos = 0;
- if(sel_start != 0xFFFF && sel_end != 0xFFFF) {
-#if LV_USE_BIDI
- logical_char_pos = lv_txt_encoded_get_char_id(txt, line_start);
- uint16_t t = lv_txt_encoded_get_char_id(bidi_txt, i);
- logical_char_pos += lv_bidi_get_logical_pos(bidi_txt, NULL, line_end - line_start, bidi_dir, t, NULL);
-#else
- logical_char_pos = lv_txt_encoded_get_char_id(txt, line_start + i);
-#endif
- }
-
- letter = lv_txt_encoded_next(bidi_txt, &i);
- letter_next = lv_txt_encoded_next(&bidi_txt[i], NULL);
-
-
- /*Handle the re-color command*/
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(letter == (uint32_t)LV_TXT_COLOR_CMD[0]) {
- if(cmd_state == CMD_STATE_WAIT) { /*Start char*/
- par_start = i;
- cmd_state = CMD_STATE_PAR;
- continue;
- } else if(cmd_state == CMD_STATE_PAR) { /*Other start char in parameter escaped cmd. char */
- cmd_state = CMD_STATE_WAIT;
- } else if(cmd_state == CMD_STATE_IN) { /*Command end */
- cmd_state = CMD_STATE_WAIT;
- continue;
- }
- }
-
- /*Skip the color parameter and wait the space after it*/
- if(cmd_state == CMD_STATE_PAR) {
- if(letter == ' ') {
- /*Get the parameter*/
- if(i - par_start == LABEL_RECOLOR_PAR_LENGTH + 1) {
- char buf[LABEL_RECOLOR_PAR_LENGTH + 1];
- memcpy(buf, &bidi_txt[par_start], LABEL_RECOLOR_PAR_LENGTH);
- buf[LABEL_RECOLOR_PAR_LENGTH] = '\0';
- int r, g, b;
- r = (hex_char_to_num(buf[0]) << 4) + hex_char_to_num(buf[1]);
- g = (hex_char_to_num(buf[2]) << 4) + hex_char_to_num(buf[3]);
- b = (hex_char_to_num(buf[4]) << 4) + hex_char_to_num(buf[5]);
- recolor = lv_color_make(r, g, b);
- } else {
- recolor.full = style->text.color.full;
- }
- cmd_state = CMD_STATE_IN; /*After the parameter the text is in the command*/
- }
- continue;
- }
- }
-
- lv_color_t color = style->text.color;
-
- if(cmd_state == CMD_STATE_IN) color = recolor;
-
- letter_w = lv_font_get_glyph_width(font, letter, letter_next);
-
- if(sel_start != 0xFFFF && sel_end != 0xFFFF) {
- if(logical_char_pos >= sel_start && logical_char_pos < sel_end) {
- lv_area_t sel_coords;
- sel_coords.x1 = pos.x;
- sel_coords.y1 = pos.y;
- sel_coords.x2 = pos.x + letter_w + style->text.letter_space - 1;
- sel_coords.y2 = pos.y + line_height - 1;
- lv_draw_rect(&sel_coords, mask, &sel_style, opa);
- }
- }
-
- lv_draw_letter(&pos, mask, font, letter, color, opa);
-
- if(letter_w > 0) {
- pos.x += letter_w + style->text.letter_space;
- }
- }
- /*Go to next line*/
- line_start = line_end;
- line_end += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, w, flag);
-
- pos.x = coords->x1;
- /*Align to middle*/
- if(flag & LV_TXT_FLAG_CENTER) {
- line_width =
- lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
-
- pos.x += (lv_area_get_width(coords) - line_width) / 2;
-
- }
- /*Align to the right*/
- else if(flag & LV_TXT_FLAG_RIGHT) {
- line_width =
- lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
- pos.x += lv_area_get_width(coords) - line_width;
- }
-
- /*Go the next line position*/
- pos.y += line_height;
-
- if(pos.y > mask->y2) return;
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Convert a hexadecimal characters to a number (0..15)
- * @param hex Pointer to a hexadecimal character (0..9, A..F)
- * @return the numerical value of `hex` or 0 on error
- */
-static uint8_t hex_char_to_num(char hex)
-{
- uint8_t result = 0;
-
- if(hex >= '0' && hex <= '9') {
- result = hex - '0';
- } else {
- if(hex >= 'a') hex -= 'a' - 'A'; /*Convert to upper case*/
-
- switch(hex) {
- case 'A': result = 10; break;
- case 'B': result = 11; break;
- case 'C': result = 12; break;
- case 'D': result = 13; break;
- case 'E': result = 14; break;
- case 'F': result = 15; break;
- default: result = 0; break;
- }
- }
-
- return result;
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_label.h b/src/libs/lvgl/src/lv_draw/lv_draw_label.h
deleted file mode 100644
index 6dc4d646..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_label.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * @file lv_draw_label.h
- *
- */
-
-#ifndef LV_DRAW_LABEL_H
-#define LV_DRAW_LABEL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw.h"
-#include "../lv_misc/lv_bidi.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_DRAW_LABEL_NO_TXT_SEL (0xFFFF)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-typedef struct
-{
- uint16_t start;
- uint16_t end;
-}lv_draw_label_txt_sel_t;
-
-
-/** Store some info to speed up drawing of very large texts
- * It takes a lot of time to get the first visible character because
- * all the previous characters needs to be checked to calculate the positions.
- * This structure stores an earlier (e.g. at -1000 px) coordinate and the index of that line.
- * Therefore the calculations can start from here.*/
-typedef struct {
- /** Index of the line at `y` coordinate*/
- int32_t line_start;
-
- /** Give the `y` coordinate of the first letter at `line start` index. Relative to the label's coordinates*/
- int32_t y;
-
- /** The 'y1' coordinate of the label when the hint was saved.
- * Used to invalidate the hint if the label has moved too much. */
- int32_t coord_y;
-}lv_draw_label_hint_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Write a text
- * @param coords coordinates of the label
- * @param mask the label will be drawn only in this area
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- * @param txt 0 terminated text to write
- * @param flag settings for the text from 'txt_flag_t' enum
- * @param offset text offset in x and y direction (NULL if unused)
- * @param sel_start start index of selected area (`LV_LABEL_TXT_SEL_OFF` if none)
- * @param bidi_dir base direction of the text
- */
-void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale,
- const char * txt, lv_txt_flag_t flag, lv_point_t * offset, lv_draw_label_txt_sel_t * sel,
- lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_LABEL_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_line.c b/src/libs/lvgl/src/lv_draw/lv_draw_line.c
deleted file mode 100644
index a522a4b5..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_line.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/**
- * @file lv_draw_line.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdio.h>
-#include <stdbool.h>
-#include "lv_draw.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-typedef struct
-{
- lv_point_t p1;
- lv_point_t p2;
- lv_point_t p_act;
- lv_coord_t dx;
- lv_coord_t sx; /*-1: x1 < x2; 1: x2 >= x1*/
- lv_coord_t dy;
- lv_coord_t sy; /*-1: y1 < y2; 1: y2 >= y1*/
- lv_coord_t err;
- lv_coord_t e2;
- bool hor; /*Rather horizontal or vertical*/
-} line_draw_t;
-
-typedef struct
-{
- lv_coord_t width;
- lv_coord_t width_1;
- lv_coord_t width_half;
-} line_width_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void line_draw_hor(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_draw_ver(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_draw_skew(line_draw_t * main_line, bool dir_ori, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_init(line_draw_t * line, const lv_point_t * p1, const lv_point_t * p2);
-static bool line_next(line_draw_t * line);
-static bool line_next_y(line_draw_t * line);
-static bool line_next_x(line_draw_t * line);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Draw a line
- * @param point1 first point of the line
- * @param point2 second point of the line
- * @param mask the line will be drawn only on this area
- * @param style pointer to a line's style
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * mask,
- const lv_style_t * style, lv_opa_t opa_scale)
-{
-
- if(style->line.width == 0) return;
- if(point1->x == point2->x && point1->y == point2->y) return;
-
- /*Return if the points are out of the mask*/
- if(point1->x < mask->x1 - style->line.width && point2->x < mask->x1 - style->line.width) return;
- if(point1->x > mask->x2 + style->line.width && point2->x > mask->x2 + style->line.width) return;
- if(point1->y < mask->y1 - style->line.width && point2->y < mask->y1 - style->line.width) return;
- if(point1->y > mask->y2 + style->line.width && point2->y > mask->y2 + style->line.width) return;
-
- line_draw_t main_line;
- lv_point_t p1;
- lv_point_t p2;
-
- /*If the line if rather vertical then be sure y1 < y2 else x1 < x2*/
-
- if(LV_MATH_ABS(point1->x - point2->x) > LV_MATH_ABS(point1->y - point2->y)) {
-
- /*Steps less in y then x -> rather horizontal*/
- if(point1->x < point2->x) {
- p1.x = point1->x;
- p1.y = point1->y;
- p2.x = point2->x;
- p2.y = point2->y;
- } else {
- p1.x = point2->x;
- p1.y = point2->y;
- p2.x = point1->x;
- p2.y = point1->y;
- }
- } else {
- /*Steps less in x then y -> rather vertical*/
- if(point1->y < point2->y) {
- p1.x = point1->x;
- p1.y = point1->y;
- p2.x = point2->x;
- p2.y = point2->y;
- } else {
- p1.x = point2->x;
- p1.y = point2->y;
- p2.x = point1->x;
- p2.y = point1->y;
- }
- }
-
- line_init(&main_line, &p1, &p2);
-
- /*Special case draw a horizontal line*/
- if(main_line.p1.y == main_line.p2.y) {
- line_draw_hor(&main_line, mask, style, opa_scale);
- }
- /*Special case draw a vertical line*/
- else if(main_line.p1.x == main_line.p2.x) {
- line_draw_ver(&main_line, mask, style, opa_scale);
- }
- /*Arbitrary skew line*/
- else {
- bool dir_ori = false;
-#if LV_ANTIALIAS
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- if(aa) {
- lv_point_t p_tmp;
-
- if(main_line.hor) {
- if(main_line.p1.y < main_line.p2.y) {
- dir_ori = true;
- p_tmp.x = main_line.p2.x;
- p_tmp.y = main_line.p2.y - 1;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sy = LV_MATH_ABS(main_line.sy); /*The sign can change if the line becomes horizontal*/
- } else if(main_line.p1.y > main_line.p2.y) {
- dir_ori = false;
- p_tmp.x = main_line.p2.x;
- p_tmp.y = main_line.p2.y + 1;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sy = -LV_MATH_ABS(main_line.sy); /*The sign can change if the line becomes horizontal*/
- }
- } else {
- if(main_line.p1.x < main_line.p2.x) {
- dir_ori = true;
- p_tmp.x = main_line.p2.x - 1;
- p_tmp.y = main_line.p2.y;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sx = LV_MATH_ABS(main_line.sx); /*The sign can change if the line becomes vertical*/
- } else if(main_line.p1.x > main_line.p2.x) {
- dir_ori = false;
- p_tmp.x = main_line.p2.x + 1;
- p_tmp.y = main_line.p2.y;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sx = -LV_MATH_ABS(main_line.sx); /*The sign can change if the line becomes vertical*/
- }
- }
- }
-#endif
- line_draw_skew(&main_line, dir_ori, mask, style, opa_scale);
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void line_draw_hor(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
-{
- lv_coord_t width = style->line.width - 1;
- lv_coord_t width_half = width >> 1;
- lv_coord_t width_1 = width & 0x1;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
-
- lv_area_t act_area;
- act_area.x1 = main_line->p1.x;
- act_area.x2 = main_line->p2.x;
- act_area.y1 = main_line->p1.y - width_half - width_1;
- act_area.y2 = main_line->p2.y + width_half;
-
- lv_area_t draw_area;
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2);
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-}
-
-static void line_draw_ver(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
-{
- lv_coord_t width = style->line.width - 1;
- lv_coord_t width_half = width >> 1;
- lv_coord_t width_1 = width & 0x1;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
-
- lv_area_t act_area;
- act_area.x1 = main_line->p1.x - width_half;
- act_area.x2 = main_line->p2.x + width_half + width_1;
- act_area.y1 = main_line->p1.y;
- act_area.y2 = main_line->p2.y;
-
- lv_area_t draw_area;
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2);
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-}
-
-static void line_draw_skew(line_draw_t * main_line, bool dir_ori, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
-#if LV_ANTIALIAS
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-#endif
- lv_point_t vect_main, vect_norm;
- vect_main.x = main_line->p2.x - main_line->p1.x;
- vect_main.y = main_line->p2.y - main_line->p1.y;
-
- if(main_line->hor) {
- if(main_line->p1.y < main_line->p2.y + dir_ori) {
- vect_norm.x = -vect_main.y;
- vect_norm.y = vect_main.x;
- } else {
- vect_norm.x = vect_main.y;
- vect_norm.y = -vect_main.x;
- }
- } else {
- if(main_line->p1.x < main_line->p2.x + dir_ori) {
- vect_norm.x = vect_main.y;
- vect_norm.y = -vect_main.x;
- } else {
- vect_norm.x = -vect_main.y;
- vect_norm.y = vect_main.x;
- }
- }
-
- /* In case of a short but tick line the perpendicular ending is longer then the real line.
- * it would break the calculations so make the normal vector larger*/
- vect_norm.x = vect_norm.x << 4;
- vect_norm.y = vect_norm.y << 4;
-
- lv_coord_t width;
- width = style->line.width;
-
- /* The pattern stores the points of the line ending. It has the good direction and length.
- * The worth case is the 45° line where pattern can have 1.41 x `width` points*/
-
- lv_coord_t pattern_size = width * 2;
- lv_point_t * pattern = lv_draw_get_buf(pattern_size * sizeof(lv_point_t));
- lv_coord_t i = 0;
-
- /*Create a perpendicular pattern (a small line)*/
- if(width != 0) {
- line_draw_t pattern_line;
- lv_point_t p0 = {0, 0};
- line_init(&pattern_line, &p0, &vect_norm);
-
- uint32_t width_sqr = width * width;
- /* Run for a lot of times. Meanwhile the real width will be determined as well */
- for(i = 0; i < (lv_coord_t)pattern_size - 1; i++) {
- pattern[i].x = pattern_line.p_act.x;
- pattern[i].y = pattern_line.p_act.y;
-
- /*Finish the pattern line if it's length equal to the desired width (Use Pythagoras
- * theorem)*/
- uint32_t sqr = pattern_line.p_act.x * pattern_line.p_act.x + pattern_line.p_act.y * pattern_line.p_act.y;
- if(sqr >= width_sqr) {
- width = i;
-#if LV_ANTIALIAS
- if(aa) width--;
-#endif
- break;
- }
-
- line_next(&pattern_line);
- }
- }
-
-#if LV_ANTIALIAS
- lv_coord_t aa_last_corner;
- lv_coord_t width_safe = width;
- if(aa) {
- if(width == 0) width_safe = 1;
-
- aa_last_corner = 0;
- }
-#endif
-
- lv_coord_t x_center_ofs = 0;
- lv_coord_t y_center_ofs = 0;
-
- if(width != 0) {
- x_center_ofs = pattern[width - 1].x / 2;
- y_center_ofs = pattern[width - 1].y / 2;
- } else {
- if(main_line->hor && main_line->p1.y >= main_line->p2.y + dir_ori) pattern[0].y--;
- if(!main_line->hor && main_line->p1.x >= main_line->p2.x + dir_ori) pattern[0].x--;
- }
-
- /* Make the coordinates relative to the center */
- for(i = 0; i < width; i++) {
- pattern[i].x -= x_center_ofs;
- pattern[i].y -= y_center_ofs;
-#if LV_ANTIALIAS
- if(aa) {
- if(i != 0) {
- if(main_line->hor) {
- if(pattern[i - 1].x != pattern[i].x) {
- lv_coord_t seg_w = pattern[i].y - pattern[aa_last_corner].y;
- if(main_line->sy < 0) {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y + seg_w + 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y + seg_w + 1, -seg_w, mask,
- style->line.color, opa);
- } else {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y, -seg_w, mask,
- style->line.color, opa);
- }
- aa_last_corner = i;
- }
- } else {
- if(pattern[i - 1].y != pattern[i].y) {
- lv_coord_t seg_w = pattern[i].x - pattern[aa_last_corner].x;
- if(main_line->sx < 0) {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x + seg_w + 1,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x + seg_w + 1,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -seg_w, mask,
- style->line.color, opa);
- } else {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -seg_w, mask,
- style->line.color, opa);
- }
- aa_last_corner = i;
- }
- }
- }
- }
-#endif
- }
-
-#if LV_ANTIALIAS
- /*Add the last part of anti-aliasing for the perpendicular ending*/
- if(width != 0 && aa) { /*Due to rounding error with very thin lines it looks ugly*/
- if(main_line->hor) {
- lv_coord_t seg_w = pattern[width_safe - 1].y - pattern[aa_last_corner].y;
- if(main_line->sy < 0) {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y + seg_w, seg_w + main_line->sy, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y + seg_w, -(seg_w + main_line->sy), mask,
- style->line.color, opa);
-
- } else {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y, seg_w + main_line->sy, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y, -(seg_w + main_line->sy), mask,
- style->line.color, opa);
- }
- } else {
- lv_coord_t seg_w = pattern[width_safe - 1].x - pattern[aa_last_corner].x;
- if(main_line->sx < 0) {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x + seg_w,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w + main_line->sx, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x + seg_w,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -(seg_w + main_line->sx), mask,
- style->line.color, opa);
-
- } else {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w + main_line->sx, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -(seg_w + main_line->sx), mask,
- style->line.color, opa);
- }
- }
- }
-#endif
-
-#if LV_ANTIALIAS
-
- /*Shift the anti aliasing on the edges (-1, 1 or 0 (zero only in case width == 0))*/
- lv_coord_t aa_shift1 = 0;
- lv_coord_t aa_shift2 = 0;
- if(aa) {
- if(main_line->hor == false) {
- if(main_line->sx < 0) {
- aa_shift1 = -1;
- aa_shift2 = width == 0 ? 0 : aa_shift1;
- } else {
- aa_shift2 = 1;
- aa_shift1 = width == 0 ? 0 : aa_shift2;
- }
- } else {
- if(main_line->sy < 0) {
- aa_shift1 = -1;
- aa_shift2 = width == 0 ? 0 : aa_shift1;
- } else {
- aa_shift2 = 1;
- aa_shift1 = width == 0 ? 0 : aa_shift2;
- }
- }
- }
-#endif
-
- volatile lv_point_t prev_p;
- prev_p.x = main_line->p1.x;
- prev_p.y = main_line->p1.y;
- lv_area_t draw_area;
- bool first_run = true;
-
- if(main_line->hor) {
- while(line_next_y(main_line)) {
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1 + main_line->p_act.x - prev_p.x - 1;
- draw_area.y2 = draw_area.y1;
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in y one pixel remains empty on every corner (don't do this on the
- * first segment ) */
- if(i != 0 && pattern[i].x != pattern[i - 1].x && !first_run) {
- lv_draw_px(draw_area.x1, draw_area.y1 - main_line->sy, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_hor_seg(prev_p.x + pattern[0].x, prev_p.y + pattern[0].y - aa_shift1,
- -(main_line->p_act.x - prev_p.x), mask, style->line.color, opa);
- lv_draw_aa_hor_seg(prev_p.x + pattern[width_safe - 1].x,
- prev_p.y + pattern[width_safe - 1].y + aa_shift2, main_line->p_act.x - prev_p.x,
- mask, style->line.color, opa);
- }
-#endif
-
- first_run = false;
-
- prev_p.x = main_line->p_act.x;
- prev_p.y = main_line->p_act.y;
- }
-
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1 + main_line->p_act.x - prev_p.x;
- draw_area.y2 = draw_area.y1;
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in y one pixel remains empty on every corner */
- if(i != 0 && pattern[i].x != pattern[i - 1].x && !first_run) {
- lv_draw_px(draw_area.x1, draw_area.y1 - main_line->sy, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_hor_seg(prev_p.x + pattern[0].x, prev_p.y + pattern[0].y - aa_shift1,
- -(main_line->p_act.x - prev_p.x + 1), mask, style->line.color, opa);
- lv_draw_aa_hor_seg(prev_p.x + pattern[width_safe - 1].x, prev_p.y + pattern[width_safe - 1].y + aa_shift2,
- main_line->p_act.x - prev_p.x + 1, mask, style->line.color, opa);
- }
-#endif
- }
- /*Rather a vertical line*/
- else {
-
- while(line_next_x(main_line)) {
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1;
- draw_area.y2 = draw_area.y1 + main_line->p_act.y - prev_p.y - 1;
-
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in x one pixel remains empty on every corner (don't do this on the
- * first segment ) */
- if(i != 0 && pattern[i].y != pattern[i - 1].y && !first_run) {
- lv_draw_px(draw_area.x1 - main_line->sx, draw_area.y1, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_ver_seg(prev_p.x + pattern[0].x - aa_shift1, prev_p.y + pattern[0].y,
- -(main_line->p_act.y - prev_p.y), mask, style->line.color, opa);
- lv_draw_aa_ver_seg(prev_p.x + pattern[width_safe - 1].x + aa_shift2,
- prev_p.y + pattern[width_safe - 1].y, main_line->p_act.y - prev_p.y, mask,
- style->line.color, opa);
- }
-#endif
-
- first_run = false;
-
- prev_p.x = main_line->p_act.x;
- prev_p.y = main_line->p_act.y;
- }
-
- /*Draw the last part*/
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1;
- draw_area.y2 = draw_area.y1 + main_line->p_act.y - prev_p.y;
-
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in x one pixel remains empty on every corner */
- if(i != 0 && pattern[i].y != pattern[i - 1].y && !first_run) {
- lv_draw_px(draw_area.x1 - main_line->sx, draw_area.y1, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_ver_seg(prev_p.x + pattern[0].x - aa_shift1, prev_p.y + pattern[0].y,
- -(main_line->p_act.y - prev_p.y + 1), mask, style->line.color, opa);
- lv_draw_aa_ver_seg(prev_p.x + pattern[width_safe - 1].x + aa_shift2, prev_p.y + pattern[width_safe - 1].y,
- main_line->p_act.y - prev_p.y + 1, mask, style->line.color, opa);
- }
-#endif
- }
-}
-
-static void line_init(line_draw_t * line, const lv_point_t * p1, const lv_point_t * p2)
-{
- line->p1.x = p1->x;
- line->p1.y = p1->y;
- line->p2.x = p2->x;
- line->p2.y = p2->y;
-
- line->dx = LV_MATH_ABS(line->p2.x - line->p1.x);
- line->sx = line->p1.x < line->p2.x ? 1 : -1;
- line->dy = LV_MATH_ABS(line->p2.y - line->p1.y);
- line->sy = line->p1.y < line->p2.y ? 1 : -1;
- line->err = (line->dx > line->dy ? line->dx : -line->dy) / 2;
- line->e2 = 0;
- line->hor = line->dx > line->dy ? true : false; /*Rather horizontal or vertical*/
-
- line->p_act.x = line->p1.x;
- line->p_act.y = line->p1.y;
-}
-
-static bool line_next(line_draw_t * line)
-{
- if(line->p_act.x == line->p2.x && line->p_act.y == line->p2.y) return false;
- line->e2 = line->err;
- if(line->e2 > -line->dx) {
- line->err -= line->dy;
- line->p_act.x += line->sx;
- }
- if(line->e2 < line->dy) {
- line->err += line->dx;
- line->p_act.y += line->sy;
- }
- return true;
-}
-
-/**
- * Iterate until step one in y direction.
- * @param line
- * @return
- */
-static bool line_next_y(line_draw_t * line)
-{
- lv_coord_t last_y = line->p_act.y;
-
- do {
- if(!line_next(line)) return false;
- } while(last_y == line->p_act.y);
-
- return true;
-}
-
-/**
- * Iterate until step one in x direction.
- * @param line
- * @return
- */
-static bool line_next_x(line_draw_t * line)
-{
- lv_coord_t last_x = line->p_act.x;
-
- do {
- if(!line_next(line)) return false;
- } while(last_x == line->p_act.x);
-
- return true;
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_line.h b/src/libs/lvgl/src/lv_draw/lv_draw_line.h
deleted file mode 100644
index 208bd051..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_line.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * @file lv_draw_line.h
- *
- */
-
-#ifndef LV_DRAW_LINE_H
-#define LV_DRAW_LINE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Draw a line
- * @param point1 first point of the line
- * @param point2 second point of the line
- * @param mask the line will be drawn only on this area
- * @param style pointer to a line's style
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * mask,
- const lv_style_t * style, lv_opa_t opa_scale);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_LINE_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_rect.c b/src/libs/lvgl/src/lv_draw/lv_draw_rect.c
deleted file mode 100644
index 0964a46a..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_rect.c
+++ /dev/null
@@ -1,1521 +0,0 @@
-/**
- * @file lv_draw_rect.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw_rect.h"
-#include "../lv_misc/lv_circ.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_core/lv_refr.h"
-
-/*********************
- * DEFINES
- *********************/
-/*Circle segment greater then this value will be anti-aliased by a non-linear (cos) opacity
- * mapping*/
-#define CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD 1
-
-/*Calculate with 2^x bigger shadow opacity values to avoid rounding errors*/
-#define SHADOW_OPA_EXTRA_PRECISION 8
-
-/*Add extra radius with LV_SHADOW_BOTTOM to cover anti-aliased corners*/
-#define SHADOW_BOTTOM_AA_EXTRA_RADIUS 3
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void lv_draw_rect_main_mid(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_main_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_border_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_border_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-
-#if LV_USE_SHADOW
-static void lv_draw_shadow(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_full(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_bottom(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_full_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- const lv_opa_t * map);
-#endif
-
-static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_coord_t h);
-
-#if LV_ANTIALIAS
-static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id, lv_opa_t opa);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Draw a rectangle
- * @param coords the coordinates of the rectangle
- * @param mask the rectangle will be drawn only in this mask
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
-{
- if(lv_area_get_height(coords) < 1 || lv_area_get_width(coords) < 1) return;
-
-#if LV_USE_SHADOW
- if(style->body.shadow.width != 0) {
- lv_draw_shadow(coords, mask, style, opa_scale);
- }
-#endif
-
- /* If the object is out of the mask there is nothing to draw.
- * Draw shadow before it because the shadow is out of `coords`*/
- if(lv_area_is_on(coords, mask) == false) return;
-
- if(style->body.opa > LV_OPA_MIN) {
- lv_draw_rect_main_mid(coords, mask, style, opa_scale);
-
- if(style->body.radius != 0) {
- lv_draw_rect_main_corner(coords, mask, style, opa_scale);
- }
- }
-
- if(style->body.border.width != 0 && style->body.border.part != LV_BORDER_NONE &&
- style->body.border.opa >= LV_OPA_MIN) {
- lv_draw_rect_border_straight(coords, mask, style, opa_scale);
-
- if(style->body.radius != 0) {
- lv_draw_rect_border_corner(coords, mask, style, opa_scale);
- }
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Draw the middle part (rectangular) of a rectangle
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param rects_p pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_main_mid(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- lv_color_t mcolor = style->body.main_color;
- lv_color_t gcolor = style->body.grad_color;
- uint8_t mix;
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t width = lv_area_get_width(coords);
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- /*If the radius is too big then there is no body*/
- if(radius > height / 2) return;
-
- lv_area_t work_area;
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
-
- if(mcolor.full == gcolor.full) {
- work_area.y1 = coords->y1 + radius;
- work_area.y2 = coords->y2 - radius;
-
- if(style->body.radius != 0) {
-
- if(aa) {
- work_area.y1 += 2;
- work_area.y2 -= 2;
- } else {
- work_area.y1 += 1;
- work_area.y2 -= 1;
- }
- }
-
- lv_draw_fill(&work_area, mask, mcolor, opa);
- } else {
- lv_coord_t row;
- lv_coord_t row_start = coords->y1 + radius;
- lv_coord_t row_end = coords->y2 - radius;
- lv_color_t act_color;
-
- if(style->body.radius != 0) {
- if(aa) {
- row_start += 2;
- row_end -= 2;
- } else {
- row_start += 1;
- row_end -= 1;
- }
- }
- if(row_start < 0) row_start = 0;
-
- for(row = row_start; row <= row_end; row++) {
- work_area.y1 = row;
- work_area.y2 = row;
- mix = (uint32_t)((uint32_t)(coords->y2 - work_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
-
- lv_draw_fill(&work_area, mask, act_color, opa);
- }
- }
-}
-/**
- * Draw the top and bottom parts (corners) of a rectangle
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param rects_p pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_main_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- lv_color_t mcolor = style->body.main_color;
- lv_color_t gcolor = style->body.grad_color;
- lv_color_t act_color;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- uint8_t mix;
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t width = lv_area_get_width(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- lv_point_t lt_origo; /*Left Top origo*/
- lv_point_t lb_origo; /*Left Bottom origo*/
- lv_point_t rt_origo; /*Right Top origo*/
- lv_point_t rb_origo; /*Left Bottom origo*/
-
- lt_origo.x = coords->x1 + radius + aa;
- lt_origo.y = coords->y1 + radius + aa;
-
- lb_origo.x = coords->x1 + radius + aa;
- lb_origo.y = coords->y2 - radius - aa;
-
- rt_origo.x = coords->x2 - radius - aa;
- rt_origo.y = coords->y1 + radius + aa;
-
- rb_origo.x = coords->x2 - radius - aa;
- rb_origo.y = coords->y2 - radius - aa;
-
- lv_area_t edge_top_area;
- lv_area_t mid_top_area;
- lv_area_t mid_bot_area;
- lv_area_t edge_bot_area;
-
- lv_point_t cir;
- lv_coord_t cir_tmp;
- lv_circ_init(&cir, &cir_tmp, radius);
-
- /*Init the areas*/
- lv_area_set(&mid_bot_area, lb_origo.x + LV_CIRC_OCT4_X(cir), lb_origo.y + LV_CIRC_OCT4_Y(cir),
- rb_origo.x + LV_CIRC_OCT1_X(cir), rb_origo.y + LV_CIRC_OCT1_Y(cir));
-
- lv_area_set(&edge_bot_area, lb_origo.x + LV_CIRC_OCT3_X(cir), lb_origo.y + LV_CIRC_OCT3_Y(cir),
- rb_origo.x + LV_CIRC_OCT2_X(cir), rb_origo.y + LV_CIRC_OCT2_Y(cir));
-
- lv_area_set(&mid_top_area, lt_origo.x + LV_CIRC_OCT5_X(cir), lt_origo.y + LV_CIRC_OCT5_Y(cir),
- rt_origo.x + LV_CIRC_OCT8_X(cir), rt_origo.y + LV_CIRC_OCT8_Y(cir));
-
- lv_area_set(&edge_top_area, lt_origo.x + LV_CIRC_OCT6_X(cir), lt_origo.y + LV_CIRC_OCT6_Y(cir),
- rt_origo.x + LV_CIRC_OCT7_X(cir), rt_origo.y + LV_CIRC_OCT7_Y(cir));
-#if LV_ANTIALIAS
- /*Store some internal states for anti-aliasing*/
- lv_coord_t out_y_seg_start = 0;
- lv_coord_t out_y_seg_end = 0;
- lv_coord_t out_x_last = radius;
-
- lv_color_t aa_color_hor_top;
- lv_color_t aa_color_hor_bottom;
- lv_color_t aa_color_ver;
-#endif
-
- while(lv_circ_cont(&cir)) {
-#if LV_ANTIALIAS
- if(aa) {
- /*New step in y on the outter circle*/
- if(out_x_last != cir.x) {
- out_y_seg_end = cir.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- mix = (uint32_t)((uint32_t)(radius - out_x_last) * 255) / height;
- aa_color_hor_top = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_bottom = lv_color_mix(mcolor, gcolor, mix);
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- }
-
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- aa_color_hor_top, aa_opa);
-
- mix = (uint32_t)((uint32_t)(radius - out_y_seg_start + i) * 255) / height;
- aa_color_ver = lv_color_mix(mcolor, gcolor, mix);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- aa_color_ver, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- aa_color_ver, aa_opa);
-
- aa_color_ver = lv_color_mix(gcolor, mcolor, mix);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- aa_color_ver, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- aa_color_ver, aa_opa);
- }
-
- out_x_last = cir.x;
- out_y_seg_start = out_y_seg_end;
- }
- }
-#endif
- uint8_t edge_top_refr = 0;
- uint8_t mid_top_refr = 0;
- uint8_t mid_bot_refr = 0;
- uint8_t edge_bot_refr = 0;
-
- /* If a new row coming draw the previous
- * The y coordinate can remain the same so wait for a new*/
- if(mid_bot_area.y1 != LV_CIRC_OCT4_Y(cir) + lb_origo.y) mid_bot_refr = 1;
-
- if(edge_bot_area.y1 != LV_CIRC_OCT2_Y(cir) + lb_origo.y) edge_bot_refr = 1;
-
- if(mid_top_area.y1 != LV_CIRC_OCT8_Y(cir) + lt_origo.y) mid_top_refr = 1;
-
- if(edge_top_area.y1 != LV_CIRC_OCT7_Y(cir) + lt_origo.y) edge_top_refr = 1;
-
- /*Draw the areas which are not disabled*/
- if(edge_top_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_top_area, mask, act_color, opa);
- }
-
- if(mid_top_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_top_area, mask, act_color, opa);
- }
-
- if(mid_bot_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_bot_area, mask, act_color, opa);
- }
-
- if(edge_bot_refr != 0) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_bot_area, mask, act_color, opa);
- }
-
- /*Save the current coordinates*/
- lv_area_set(&mid_bot_area, lb_origo.x + LV_CIRC_OCT4_X(cir), lb_origo.y + LV_CIRC_OCT4_Y(cir),
- rb_origo.x + LV_CIRC_OCT1_X(cir), rb_origo.y + LV_CIRC_OCT1_Y(cir));
-
- lv_area_set(&edge_bot_area, lb_origo.x + LV_CIRC_OCT3_X(cir), lb_origo.y + LV_CIRC_OCT3_Y(cir),
- rb_origo.x + LV_CIRC_OCT2_X(cir), rb_origo.y + LV_CIRC_OCT2_Y(cir));
-
- lv_area_set(&mid_top_area, lt_origo.x + LV_CIRC_OCT5_X(cir), lt_origo.y + LV_CIRC_OCT5_Y(cir),
- rt_origo.x + LV_CIRC_OCT8_X(cir), rt_origo.y + LV_CIRC_OCT8_Y(cir));
-
- lv_area_set(&edge_top_area, lt_origo.x + LV_CIRC_OCT6_X(cir), lt_origo.y + LV_CIRC_OCT6_Y(cir),
- rt_origo.x + LV_CIRC_OCT7_X(cir), rt_origo.y + LV_CIRC_OCT7_Y(cir));
-
- lv_circ_next(&cir, &cir_tmp);
- }
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_top_area, mask, act_color, opa);
-
- if(edge_top_area.y1 != mid_top_area.y1) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_top_area, mask, act_color, opa);
- }
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_bot_area, mask, act_color, opa);
-
- if(edge_bot_area.y1 != mid_bot_area.y1) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_bot_area, mask, act_color, opa);
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*The first and the last line is not drawn*/
- edge_top_area.x1 = coords->x1 + radius + 2;
- edge_top_area.x2 = coords->x2 - radius - 2;
- edge_top_area.y1 = coords->y1;
- edge_top_area.y2 = coords->y1;
- lv_draw_fill(&edge_top_area, mask, style->body.main_color, opa);
-
- edge_top_area.y1 = coords->y2;
- edge_top_area.y2 = coords->y2;
- lv_draw_fill(&edge_top_area, mask, style->body.grad_color, opa);
-
- /*Last parts of the anti-alias*/
- out_y_seg_end = cir.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- mix = (uint32_t)((uint32_t)(radius - out_x_last) * 255) / height;
- aa_color_hor_bottom = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_top = lv_color_mix(mcolor, gcolor, mix);
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- aa_color_hor_bottom, aa_opa);
-
- mix = (uint32_t)((uint32_t)(radius - out_y_seg_start + i) * 255) / height;
- aa_color_ver = lv_color_mix(mcolor, gcolor, mix);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask, aa_color_ver,
- aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask, aa_color_ver,
- aa_opa);
-
- aa_color_ver = lv_color_mix(gcolor, mcolor, mix);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask, aa_color_ver,
- aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask, aa_color_ver,
- aa_opa);
- }
-
- /*In some cases the last pixel is not drawn*/
- if(LV_MATH_ABS(aa_p.x - aa_p.y) == seg_size) {
- aa_p.x = out_x_last;
- aa_p.y = out_x_last;
-
- mix = (uint32_t)((uint32_t)(out_x_last)*255) / height;
- aa_color_hor_top = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_bottom = lv_color_mix(mcolor, gcolor, mix);
-
- lv_opa_t aa_opa = opa >> 1;
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p), rb_origo.y + LV_CIRC_OCT2_Y(aa_p), mask, aa_color_hor_bottom,
- aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p), lb_origo.y + LV_CIRC_OCT4_Y(aa_p), mask, aa_color_hor_bottom,
- aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p), lt_origo.y + LV_CIRC_OCT6_Y(aa_p), mask, aa_color_hor_top,
- aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p), rt_origo.y + LV_CIRC_OCT8_Y(aa_p), mask, aa_color_hor_top,
- aa_opa);
- }
- }
-#endif
-}
-
-/**
- * Draw the straight parts of a rectangle border
- * @param coords the coordinates of the original rectangle
- * @param mask_ the rectangle will be drawn only on this area
- * @param rstyle pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_border_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t bwidth = style->body.border.width;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.border.opa
- : (uint16_t)((uint16_t)style->body.border.opa * opa_scale) >> 8;
- lv_border_part_t part = style->body.border.part;
- lv_color_t color = style->body.border.color;
- lv_area_t work_area;
- lv_coord_t length_corr = 0;
- lv_coord_t corner_size = 0;
-
- /*the 0 px border width drawn as 1 px, so decrement the b_width*/
- bwidth--;
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- if(radius < bwidth) {
- length_corr = bwidth - radius - aa;
- corner_size = bwidth;
- } else {
- corner_size = radius + aa;
- }
-
- /*If radius == 0 is a special case*/
- if(style->body.radius == 0) {
- /*Left top corner*/
- if(part & LV_BORDER_TOP) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right top corner*/
- if(part & LV_BORDER_RIGHT) {
- work_area.x1 = coords->x2 - bwidth;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1 + (part & LV_BORDER_TOP ? bwidth + 1 : 0);
- work_area.y2 = coords->y2 - (part & LV_BORDER_BOTTOM ? bwidth + 1 : 0);
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Left bottom corner*/
- if(part & LV_BORDER_LEFT) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + bwidth;
- work_area.y1 = coords->y1 + (part & LV_BORDER_TOP ? bwidth + 1 : 0);
- work_area.y2 = coords->y2 - (part & LV_BORDER_BOTTOM ? bwidth + 1 : 0);
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right bottom corner*/
- if(part & LV_BORDER_BOTTOM) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
- }
- return;
- }
-
- /* Modify the corner_size if corner is drawn */
- corner_size++;
-
- /*Depending one which part's are drawn modify the area lengths */
- if(part & LV_BORDER_TOP)
- work_area.y1 = coords->y1 + corner_size;
- else
- work_area.y1 = coords->y1 + radius;
-
- if(part & LV_BORDER_BOTTOM)
- work_area.y2 = coords->y2 - corner_size;
- else
- work_area.y2 = coords->y2 - radius;
-
- /*Left border*/
- if(part & LV_BORDER_LEFT) {
- work_area.x1 = coords->x1;
- work_area.x2 = work_area.x1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right border*/
- if(part & LV_BORDER_RIGHT) {
- work_area.x2 = coords->x2;
- work_area.x1 = work_area.x2 - bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- work_area.x1 = coords->x1 + corner_size - length_corr;
- work_area.x2 = coords->x2 - corner_size + length_corr;
-
- /*Upper border*/
- if(part & LV_BORDER_TOP) {
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Lower border*/
- if(part & LV_BORDER_BOTTOM) {
- work_area.y2 = coords->y2;
- work_area.y1 = work_area.y2 - bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Draw the a remaining rectangles if the radius is smaller then bwidth */
- if(length_corr != 0) {
- /*Left top correction*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + radius + aa;
- work_area.y1 = coords->y1 + radius + 1 + aa;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right top correction*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - radius - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1 + radius + 1 + aa;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Left bottom correction*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + radius + aa;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2 - radius - 1 - aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right bottom correction*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - radius - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2 - radius - 1 - aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
- }
-
- /*If radius == 0 one px on the corners are not drawn by main drawer*/
- if(style->body.radius == 0) {
- /*Left top corner*/
- if(part & (LV_BORDER_TOP | LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + aa;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right top corner*/
- if(part & (LV_BORDER_TOP | LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Left bottom corner*/
- if(part & (LV_BORDER_BOTTOM | LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + aa;
- work_area.y1 = coords->y2 - aa;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right bottom corner*/
- if(part & (LV_BORDER_BOTTOM | LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - aa;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
- }
- }
-}
-
-/**
- * Draw the corners of a rectangle border
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_border_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t bwidth = style->body.border.width;
- lv_color_t color = style->body.border.color;
- lv_border_part_t part = style->body.border.part;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.border.opa
- : (uint16_t)((uint16_t)style->body.border.opa * opa_scale) >> 8;
- /*0 px border width drawn as 1 px, so decrement the bwidth*/
- bwidth--;
-
-#if LV_ANTIALIAS
- if(aa) bwidth--; /*Because of anti-aliasing the border seems one pixel ticker*/
-#endif
-
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- lv_point_t lt_origo; /*Left Top origo*/
- lv_point_t lb_origo; /*Left Bottom origo*/
- lv_point_t rt_origo; /*Right Top origo*/
- lv_point_t rb_origo; /*Left Bottom origo*/
-
- lt_origo.x = coords->x1 + radius + aa;
- lt_origo.y = coords->y1 + radius + aa;
-
- lb_origo.x = coords->x1 + radius + aa;
- lb_origo.y = coords->y2 - radius - aa;
-
- rt_origo.x = coords->x2 - radius - aa;
- rt_origo.y = coords->y1 + radius + aa;
-
- rb_origo.x = coords->x2 - radius - aa;
- rb_origo.y = coords->y2 - radius - aa;
-
- lv_point_t cir_out;
- lv_coord_t tmp_out;
- lv_circ_init(&cir_out, &tmp_out, radius);
-
- lv_point_t cir_in;
- lv_coord_t tmp_in;
- lv_coord_t radius_in = radius - bwidth;
-
- if(radius_in < 0) {
- radius_in = 0;
- }
-
- lv_circ_init(&cir_in, &tmp_in, radius_in);
-
- lv_area_t circ_area;
- lv_coord_t act_w1;
- lv_coord_t act_w2;
-
-#if LV_ANTIALIAS
- /*Store some internal states for anti-aliasing*/
- lv_coord_t out_y_seg_start = 0;
- lv_coord_t out_y_seg_end = 0;
- lv_coord_t out_x_last = radius;
-
- lv_coord_t in_y_seg_start = 0;
- lv_coord_t in_y_seg_end = 0;
- lv_coord_t in_x_last = radius - bwidth;
-#endif
-
- while(cir_out.y <= cir_out.x) {
-
- /*Calculate the actual width to avoid overwriting pixels*/
- if(cir_in.y < cir_in.x) {
- act_w1 = cir_out.x - cir_in.x;
- act_w2 = act_w1;
- } else {
- act_w1 = cir_out.x - cir_out.y;
- act_w2 = act_w1 - 1;
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*New step in y on the outter circle*/
- if(out_x_last != cir_out.x) {
- out_y_seg_end = cir_out.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
-
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
- }
-
- out_x_last = cir_out.x;
- out_y_seg_start = out_y_seg_end;
- }
-
- /*New step in y on the inner circle*/
- if(in_x_last != cir_in.x) {
- in_y_seg_end = cir_out.y;
- lv_coord_t seg_size = in_y_seg_end - in_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = in_x_last;
- aa_p.y = in_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
-
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = opa - antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = lv_draw_aa_get_opa(seg_size, i, opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) - 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) + 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- /*Be sure the pixels on the middle are not drawn twice*/
- if(LV_CIRC_OCT1_X(aa_p) - 1 != LV_CIRC_OCT2_X(aa_p) + i) {
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) - 1,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) + 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) + 1,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) - 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i,
- mask, style->body.border.color, aa_opa);
- }
- }
- }
-
- in_x_last = cir_in.x;
- in_y_seg_start = in_y_seg_end;
- }
- }
-#endif
-
- /*Draw the octets to the right bottom corner*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- circ_area.x1 = rb_origo.x + LV_CIRC_OCT1_X(cir_out) - act_w2;
- circ_area.x2 = rb_origo.x + LV_CIRC_OCT1_X(cir_out);
- circ_area.y1 = rb_origo.y + LV_CIRC_OCT1_Y(cir_out);
- circ_area.y2 = rb_origo.y + LV_CIRC_OCT1_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
-
- circ_area.x1 = rb_origo.x + LV_CIRC_OCT2_X(cir_out);
- circ_area.x2 = rb_origo.x + LV_CIRC_OCT2_X(cir_out);
- circ_area.y1 = rb_origo.y + LV_CIRC_OCT2_Y(cir_out) - act_w1;
- circ_area.y2 = rb_origo.y + LV_CIRC_OCT2_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the left bottom corner*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- circ_area.x1 = lb_origo.x + LV_CIRC_OCT3_X(cir_out);
- circ_area.x2 = lb_origo.x + LV_CIRC_OCT3_X(cir_out);
- circ_area.y1 = lb_origo.y + LV_CIRC_OCT3_Y(cir_out) - act_w2;
- circ_area.y2 = lb_origo.y + LV_CIRC_OCT3_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
-
- circ_area.x1 = lb_origo.x + LV_CIRC_OCT4_X(cir_out);
- circ_area.x2 = lb_origo.x + LV_CIRC_OCT4_X(cir_out) + act_w1;
- circ_area.y1 = lb_origo.y + LV_CIRC_OCT4_Y(cir_out);
- circ_area.y2 = lb_origo.y + LV_CIRC_OCT4_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the left top corner*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- if(lb_origo.y + LV_CIRC_OCT4_Y(cir_out) > lt_origo.y + LV_CIRC_OCT5_Y(cir_out)) {
- /*Don't draw if the lines are common in the middle*/
- circ_area.x1 = lt_origo.x + LV_CIRC_OCT5_X(cir_out);
- circ_area.x2 = lt_origo.x + LV_CIRC_OCT5_X(cir_out) + act_w2;
- circ_area.y1 = lt_origo.y + LV_CIRC_OCT5_Y(cir_out);
- circ_area.y2 = lt_origo.y + LV_CIRC_OCT5_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- circ_area.x1 = lt_origo.x + LV_CIRC_OCT6_X(cir_out);
- circ_area.x2 = lt_origo.x + LV_CIRC_OCT6_X(cir_out);
- circ_area.y1 = lt_origo.y + LV_CIRC_OCT6_Y(cir_out);
- circ_area.y2 = lt_origo.y + LV_CIRC_OCT6_Y(cir_out) + act_w1;
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the right top corner*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- circ_area.x1 = rt_origo.x + LV_CIRC_OCT7_X(cir_out);
- circ_area.x2 = rt_origo.x + LV_CIRC_OCT7_X(cir_out);
- circ_area.y1 = rt_origo.y + LV_CIRC_OCT7_Y(cir_out);
- circ_area.y2 = rt_origo.y + LV_CIRC_OCT7_Y(cir_out) + act_w2;
- lv_draw_fill(&circ_area, mask, color, opa);
-
- /*Don't draw if the lines are common in the middle*/
- if(rb_origo.y + LV_CIRC_OCT1_Y(cir_out) > rt_origo.y + LV_CIRC_OCT8_Y(cir_out)) {
- circ_area.x1 = rt_origo.x + LV_CIRC_OCT8_X(cir_out) - act_w1;
- circ_area.x2 = rt_origo.x + LV_CIRC_OCT8_X(cir_out);
- circ_area.y1 = rt_origo.y + LV_CIRC_OCT8_Y(cir_out);
- circ_area.y2 = rt_origo.y + LV_CIRC_OCT8_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
- }
- lv_circ_next(&cir_out, &tmp_out);
-
- /*The internal circle will be ready faster
- * so check it! */
- if(cir_in.y < cir_in.x) {
- lv_circ_next(&cir_in, &tmp_in);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*Last parts of the outer anti-alias*/
- out_y_seg_end = cir_out.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
- }
-
- /*In some cases the last pixel in the outer middle is not drawn*/
- if(LV_MATH_ABS(aa_p.x - aa_p.y) == seg_size) {
- aa_p.x = out_x_last;
- aa_p.y = out_x_last;
-
- lv_opa_t aa_opa = opa >> 1;
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p), rb_origo.y + LV_CIRC_OCT2_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p), lb_origo.y + LV_CIRC_OCT4_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p), lt_origo.y + LV_CIRC_OCT6_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p), rt_origo.y + LV_CIRC_OCT8_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
- }
-
- /*Last parts of the inner anti-alias*/
- in_y_seg_end = cir_in.y;
- aa_p.x = in_x_last;
- aa_p.y = in_y_seg_start;
- seg_size = in_y_seg_end - in_y_seg_start;
-
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = lv_draw_aa_get_opa(seg_size, i, opa);
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) - 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) + 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if(LV_CIRC_OCT1_X(aa_p) - 1 != LV_CIRC_OCT2_X(aa_p) + i) {
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) + 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) - 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
- }
- }
- }
-#endif
-}
-
-#if LV_USE_SHADOW
-
-/**
- * Draw a shadow
- * @param rect pointer to rectangle object
- * @param mask pointer to a mask area (from the design functions)
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_shadow(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- /* If mask is in the middle of cords do not draw shadow*/
- lv_coord_t radius = style->body.radius;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
- radius = lv_draw_cont_radius_corr(radius, width, height);
- lv_area_t area_tmp;
-
- /*Check horizontally without radius*/
- lv_area_copy(&area_tmp, coords);
- area_tmp.x1 += radius;
- area_tmp.x2 -= radius;
- if(lv_area_is_in(mask, &area_tmp) != false) return;
-
- /*Check vertically without radius*/
- lv_area_copy(&area_tmp, coords);
- area_tmp.y1 += radius;
- area_tmp.y2 -= radius;
- if(lv_area_is_in(mask, &area_tmp) != false) return;
-
- if(style->body.shadow.type == LV_SHADOW_FULL) {
- lv_draw_shadow_full(coords, mask, style, opa_scale);
- } else if(style->body.shadow.type == LV_SHADOW_BOTTOM) {
- lv_draw_shadow_bottom(coords, mask, style, opa_scale);
- }
-}
-
-static void lv_draw_shadow_full(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
-
- /* KNOWN ISSUE
- * The algorithm calculates the shadow only above the middle point of the radius (speaking about
- * the left top corner). It causes an error because it doesn't consider how long the straight
- * edge is which effects the value of bottom of the corner shadow. In addition the straight
- * shadow is drawn from the middles point of the radius however the ends of the straight parts
- * still should be effected by the corner shadow. It also causes an issue in opacity. A smaller
- * radius means smaller average shadow opacity. The solution should be to start `line` from `-
- * swidth` and handle if the straight part is short (or zero) and the value is taken from the
- * other corner. `col` also should start from `- swidth`
- */
-
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
-
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- radius += aa;
-
- /*Allocate a draw buffer the buffer required to draw the shadow*/
- int16_t filter_width = 2 * swidth + 1;
- uint32_t curve_x_size = ((radius + swidth + 1) + 3) & ~0x3; /*Round to 4*/
- curve_x_size *= sizeof(lv_coord_t);
- uint32_t line_1d_blur_size = (filter_width + 3) & ~0x3; /*Round to 4*/
- line_1d_blur_size *= sizeof(uint32_t);
- uint32_t line_2d_blur_size = ((radius + swidth + 1) + 3) & ~0x3; /*Round to 4*/
- line_2d_blur_size *= sizeof(lv_opa_t);
-
- uint8_t * draw_buf = lv_draw_get_buf(curve_x_size + line_1d_blur_size + line_2d_blur_size);
-
- /*Divide the draw buffer*/
- lv_coord_t * curve_x = (lv_coord_t *)&draw_buf[0]; /*Stores the 'x' coordinates of a quarter circle.*/
- uint32_t * line_1d_blur = (uint32_t *)&draw_buf[curve_x_size];
- lv_opa_t * line_2d_blur = (lv_opa_t *)&draw_buf[curve_x_size + line_1d_blur_size];
-
- memset(curve_x, 0, curve_x_size);
- lv_point_t circ;
- lv_coord_t circ_tmp;
- lv_circ_init(&circ, &circ_tmp, radius);
- while(lv_circ_cont(&circ)) {
- curve_x[LV_CIRC_OCT1_Y(circ)] = LV_CIRC_OCT1_X(circ);
- curve_x[LV_CIRC_OCT2_Y(circ)] = LV_CIRC_OCT2_X(circ);
- lv_circ_next(&circ, &circ_tmp);
- }
- int16_t line;
- /*1D Blur horizontally*/
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- for(line = 0; line < filter_width; line++) {
- line_1d_blur[line] = (uint32_t)((uint32_t)(filter_width - line) * (opa * 2) << SHADOW_OPA_EXTRA_PRECISION) /
- (filter_width * filter_width);
- }
-
- uint16_t col;
-
- lv_point_t point_rt;
- lv_point_t point_rb;
- lv_point_t point_lt;
- lv_point_t point_lb;
- lv_point_t ofs_rb;
- lv_point_t ofs_rt;
- lv_point_t ofs_lb;
- lv_point_t ofs_lt;
- ofs_rb.x = coords->x2 - radius - aa;
- ofs_rb.y = coords->y2 - radius - aa;
-
- ofs_rt.x = coords->x2 - radius - aa;
- ofs_rt.y = coords->y1 + radius + aa;
-
- ofs_lb.x = coords->x1 + radius + aa;
- ofs_lb.y = coords->y2 - radius - aa;
-
- ofs_lt.x = coords->x1 + radius + aa;
- ofs_lt.y = coords->y1 + radius + aa;
- bool line_ready;
- for(line = 0; line <= radius + swidth; line++) { /*Check all rows and make the 1D blur to 2D*/
- line_ready = false;
- for(col = 0; col <= radius + swidth; col++) { /*Check all pixels in a 1D blur line (from the origo to last
- shadow pixel (radius + swidth))*/
-
- /*Sum the opacities from the lines above and below this 'row'*/
- int16_t line_rel;
- uint32_t px_opa_sum = 0;
- for(line_rel = -swidth; line_rel <= swidth; line_rel++) {
- /*Get the relative x position of the 'line_rel' to 'line'*/
- int16_t col_rel;
- if(line + line_rel < 0) { /*Below the radius, here is the blur of the edge */
- col_rel = radius - curve_x[line] - col;
- } else if(line + line_rel > radius) { /*Above the radius, here won't be more 1D blur*/
- break;
- } else { /*Blur from the curve*/
- col_rel = curve_x[line + line_rel] - curve_x[line] - col;
- }
-
- /*Add the value of the 1D blur on 'col_rel' position*/
- if(col_rel < -swidth) { /*Outside of the blurred area. */
- if(line_rel == -swidth)
- line_ready = true; /*If no data even on the very first line then it wont't
- be anything else in this line*/
- break; /*Break anyway because only smaller 'col_rel' values will come */
- } else if(col_rel > swidth)
- px_opa_sum += line_1d_blur[0]; /*Inside the not blurred area*/
- else
- px_opa_sum += line_1d_blur[swidth - col_rel]; /*On the 1D blur (+ swidth to align to the center)*/
- }
-
- line_2d_blur[col] = px_opa_sum >> SHADOW_OPA_EXTRA_PRECISION;
- if(line_ready) {
- col++; /*To make this line to the last one ( drawing will go to '< col')*/
- break;
- }
- }
-
- /*Flush the line*/
- point_rt.x = curve_x[line] + ofs_rt.x + 1;
- point_rt.y = ofs_rt.y - line;
-
- point_rb.x = curve_x[line] + ofs_rb.x + 1;
- point_rb.y = ofs_rb.y + line;
-
- point_lt.x = ofs_lt.x - curve_x[line] - 1;
- point_lt.y = ofs_lt.y - line;
-
- point_lb.x = ofs_lb.x - curve_x[line] - 1;
- point_lb.y = ofs_lb.y + line;
-
- uint16_t d;
- for(d = 1; d < col; d++) {
-
- if(point_lt.x < ofs_lt.x && point_lt.y < ofs_lt.y) {
- lv_draw_px(point_lt.x, point_lt.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- if(point_lb.x < ofs_lb.x && point_lb.y > ofs_lb.y) {
- lv_draw_px(point_lb.x, point_lb.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- if(point_rt.x > ofs_rt.x && point_rt.y < ofs_rt.y) {
- lv_draw_px(point_rt.x, point_rt.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- if(point_rb.x > ofs_rb.x && point_rb.y > ofs_rb.y) {
- lv_draw_px(point_rb.x, point_rb.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- point_rb.x++;
- point_lb.x--;
-
- point_rt.x++;
- point_lt.x--;
- }
-
- /* Put the first line to the edges too.
- * It is not correct because blur should be done below the corner too
- * but is is simple, fast and gives a good enough result*/
- if(line == 0) lv_draw_shadow_full_straight(coords, mask, style, line_2d_blur);
- }
-}
-
-static void lv_draw_shadow_bottom(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
- radius += aa * SHADOW_BOTTOM_AA_EXTRA_RADIUS;
- swidth += aa;
-
- uint32_t curve_x_size = ((radius + 1) + 3) & ~0x3; /*Round to 4*/
- curve_x_size *= sizeof(lv_coord_t);
- lv_opa_t line_1d_blur_size = (swidth + 3) & ~0x3; /*Round to 4*/
- line_1d_blur_size *= sizeof(lv_opa_t);
-
- uint8_t * draw_buf = lv_draw_get_buf(curve_x_size + line_1d_blur_size);
-
- /*Divide the draw buffer*/
- lv_coord_t * curve_x = (lv_coord_t *)&draw_buf[0]; /*Stores the 'x' coordinates of a quarter circle.*/
- lv_opa_t * line_1d_blur = (lv_opa_t *)&draw_buf[curve_x_size];
-
- lv_point_t circ;
- lv_coord_t circ_tmp;
- lv_circ_init(&circ, &circ_tmp, radius);
- while(lv_circ_cont(&circ)) {
- curve_x[LV_CIRC_OCT1_Y(circ)] = LV_CIRC_OCT1_X(circ);
- curve_x[LV_CIRC_OCT2_Y(circ)] = LV_CIRC_OCT2_X(circ);
- lv_circ_next(&circ, &circ_tmp);
- }
-
- int16_t col;
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- for(col = 0; col < swidth; col++) {
- line_1d_blur[col] = (uint32_t)((uint32_t)(swidth - col) * opa / 2) / (swidth);
- }
-
- lv_point_t point_l;
- lv_point_t point_r;
- lv_area_t area_mid;
- lv_point_t ofs_l;
- lv_point_t ofs_r;
-
- ofs_l.x = coords->x1 + radius;
- ofs_l.y = coords->y2 - radius + 1 - aa;
-
- ofs_r.x = coords->x2 - radius;
- ofs_r.y = coords->y2 - radius + 1 - aa;
-
- for(col = 0; col <= radius; col++) {
- point_l.x = ofs_l.x - col;
- point_l.y = ofs_l.y + curve_x[col];
-
- point_r.x = ofs_r.x + col;
- point_r.y = ofs_r.y + curve_x[col];
-
- lv_opa_t px_opa;
- int16_t diff = col == 0 ? 0 : curve_x[col - 1] - curve_x[col];
- uint16_t d;
- for(d = 0; d < swidth; d++) {
- /*When stepping a pixel in y calculate the average with the pixel from the prev. column
- * to make a blur */
- if(diff == 0) {
- px_opa = line_1d_blur[d];
- } else {
- px_opa = (uint16_t)((uint16_t)line_1d_blur[d] + line_1d_blur[d - diff]) >> 1;
- }
- lv_draw_px(point_l.x, point_l.y, mask, style->body.shadow.color, px_opa);
- point_l.y++;
-
- /*Don't overdraw the pixel on the middle*/
- if(point_r.x > ofs_l.x) {
- lv_draw_px(point_r.x, point_r.y, mask, style->body.shadow.color, px_opa);
- }
- point_r.y++;
- }
- }
-
- area_mid.x1 = ofs_l.x + 1;
- area_mid.y1 = ofs_l.y + radius;
- area_mid.x2 = ofs_r.x - 1;
- area_mid.y2 = area_mid.y1;
-
- uint16_t d;
- for(d = 0; d < swidth; d++) {
- lv_draw_fill(&area_mid, mask, style->body.shadow.color, line_1d_blur[d]);
- area_mid.y1++;
- area_mid.y2++;
- }
-}
-
-static void lv_draw_shadow_full_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- const lv_opa_t * map)
-{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
- radius += aa;
-
- lv_area_t right_area;
- right_area.x1 = coords->x2 + 1 - aa;
- right_area.y1 = coords->y1 + radius + aa;
- right_area.x2 = right_area.x1;
- right_area.y2 = coords->y2 - radius - aa;
-
- lv_area_t left_area;
- left_area.x1 = coords->x1 - 1 + aa;
- left_area.y1 = coords->y1 + radius + aa;
- left_area.x2 = left_area.x1;
- left_area.y2 = coords->y2 - radius - aa;
-
- lv_area_t top_area;
- top_area.x1 = coords->x1 + radius + aa;
- top_area.y1 = coords->y1 - 1 + aa;
- top_area.x2 = coords->x2 - radius - aa;
- top_area.y2 = top_area.y1;
-
- lv_area_t bottom_area;
- bottom_area.x1 = coords->x1 + radius + aa;
- bottom_area.y1 = coords->y2 + 1 - aa;
- bottom_area.x2 = coords->x2 - radius - aa;
- bottom_area.y2 = bottom_area.y1;
-
- lv_opa_t opa_act;
- int16_t d;
- for(d = 1 /*+ LV_ANTIALIAS*/; d <= swidth /* - LV_ANTIALIAS*/; d++) {
- opa_act = map[d];
-
- lv_draw_fill(&right_area, mask, style->body.shadow.color, opa_act);
- right_area.x1++;
- right_area.x2++;
-
- lv_draw_fill(&left_area, mask, style->body.shadow.color, opa_act);
- left_area.x1--;
- left_area.x2--;
-
- lv_draw_fill(&top_area, mask, style->body.shadow.color, opa_act);
- top_area.y1--;
- top_area.y2--;
-
- lv_draw_fill(&bottom_area, mask, style->body.shadow.color, opa_act);
- bottom_area.y1++;
- bottom_area.y2++;
- }
-}
-
-#endif
-
-static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_coord_t h)
-{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- if(r >= (w >> 1)) {
- r = (w >> 1);
- if(r != 0) r--;
- }
- if(r >= (h >> 1)) {
- r = (h >> 1);
- if(r != 0) r--;
- }
-
- if(r > 0) r -= aa;
-
- return r;
-}
-
-#if LV_ANTIALIAS
-
-/**
- * Approximate the opacity for anti-aliasing.
- * Used the first segment of a circle which is the longest and have the most non-linearity (cos)
- * @param seg length of the line segment
- * @param px_id index of pixel on the line segment
- * @param line_opa opacity of the lien (it will be the max opacity)
- * @return the desired opacity of the pixel
- */
-static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id, lv_opa_t opa)
-{
- /*Empirical non-linear values anti-aliasing values*/
- static const lv_opa_t opa_map2[2] = {210, 80};
- static const lv_opa_t opa_map3[3] = {230, 150, 60};
- static const lv_opa_t opa_map4[4] = {235, 185, 125, 50};
- static const lv_opa_t opa_map8[8] = {250, 242, 219, 191, 158, 117, 76, 40};
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 1
- if(seg == 1) return 170;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 2
- if(seg == 2) return (opa_map2[px_id] * opa) >> 8;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 3
- if(seg == 3) return (opa_map3[px_id] * opa) >> 8;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 4
- if(seg == 4) return (opa_map4[px_id] * opa) >> 8;
-#endif
-
- uint8_t id = (uint32_t)((uint32_t)px_id * (sizeof(opa_map8) - 1)) / (seg - 1);
- return (uint32_t)((uint32_t)opa_map8[id] * opa) >> 8;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_rect.h b/src/libs/lvgl/src/lv_draw/lv_draw_rect.h
deleted file mode 100644
index 852b7291..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_rect.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * @file lv_draw_rect.h
- *
- */
-
-#ifndef LV_DRAW_RECT_H
-#define LV_DRAW_RECT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Draw a rectangle
- * @param coords the coordinates of the rectangle
- * @param mask the rectangle will be drawn only in this mask
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- */
-void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_RECT_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_triangle.c b/src/libs/lvgl/src/lv_draw/lv_draw_triangle.c
deleted file mode 100644
index 1c8939ad..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_triangle.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/**
- * @file lv_draw_triangle.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw_triangle.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-void tri_draw_flat(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa);
-void tri_draw_tall(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa);
-static void point_swap(lv_point_t * p1, lv_point_t * p2);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- *
- * @param points pointer to an array with 3 points
- * @param mask the triangle will be drawn only in this mask
- * @param style style for of the triangle
- * @param opa_scale scale down all opacities by the factor (0..255)
- */
-void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
-{
- /*Return if the triangle is degenerated*/
- if(points[0].x == points[1].x && points[0].y == points[1].y) return;
- if(points[1].x == points[2].x && points[1].y == points[2].y) return;
- if(points[0].x == points[2].x && points[0].y == points[2].y) return;
-
- if(points[0].x == points[1].x && points[1].x == points[2].x) return;
- if(points[0].y == points[1].y && points[1].y == points[2].y) return;
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
-
- /*Is the triangle flat or tall?*/
- lv_coord_t x_min = LV_MATH_MIN(LV_MATH_MIN(points[0].x, points[1].x), points[2].x);
- lv_coord_t x_max = LV_MATH_MAX(LV_MATH_MAX(points[0].x, points[1].x), points[2].x);
- lv_coord_t y_min = LV_MATH_MIN(LV_MATH_MIN(points[0].y, points[1].y), points[2].y);
- lv_coord_t y_max = LV_MATH_MAX(LV_MATH_MAX(points[0].y, points[1].y), points[2].y);
-
- /* Draw the tall rectangles from vertical lines
- * and from the flat triangles from horizontal lines
- * to minimize the number of lines.
- * Some pixels are overdrawn on the common edges of the triangles
- * so use it only if the triangle has no opacity*/
-
- /* Draw from horizontal lines*/
- if(x_max - x_min < y_max - y_min) {
- tri_draw_tall(points, mask, style, opa);
- }
- /*Else flat so draw from vertical lines*/
- else {
- tri_draw_flat(points, mask, style, opa);
- }
-}
-
-/**
- * Draw a polygon from triangles. Only convex polygons are supported
- * @param points an array of points
- * @param point_cnt number of points
- * @param mask polygon will be drawn only in this mask
- * @param style style of the polygon
- * @param opa_scale scale down all opacities by the factor (0..255)
- */
-void lv_draw_polygon(const lv_point_t * points, uint32_t point_cnt, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- if(point_cnt < 3) return;
- if(points == NULL) return;
-
- uint32_t i;
- lv_point_t tri[3];
- tri[0].x = points[0].x;
- tri[0].y = points[0].y;
- for(i = 0; i < point_cnt - 1; i++) {
- tri[1].x = points[i].x;
- tri[1].y = points[i].y;
- tri[2].x = points[i + 1].x;
- tri[2].y = points[i + 1].y;
- lv_draw_triangle(tri, mask, style, opa_scale);
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-void tri_draw_flat(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa)
-{
- /*Return if the points are out of the mask*/
- if(points[0].x < mask->x1 && points[1].x < mask->x1 && points[2].x < mask->x1) {
- return;
- }
-
- if(points[0].x > mask->x2 && points[1].x > mask->x2 && points[2].x > mask->x2) {
- return;
- }
-
- if(points[0].y < mask->y1 && points[1].y < mask->y1 && points[2].y < mask->y1) {
- return;
- }
-
- if(points[0].y > mask->y2 && points[1].y > mask->y2 && points[2].y > mask->y2) {
- return;
- }
-
- lv_point_t tri[3];
-
- memcpy(tri, points, sizeof(tri));
-
- /*Sort the vertices according to their y coordinate (0: y max, 1: y mid, 2:y min)*/
- if(tri[1].y < tri[0].y) point_swap(&tri[1], &tri[0]);
- if(tri[2].y < tri[1].y) point_swap(&tri[2], &tri[1]);
- if(tri[1].y < tri[0].y) point_swap(&tri[1], &tri[0]);
-
- /*Draw the triangle*/
- lv_point_t edge1;
- lv_coord_t dx1 = LV_MATH_ABS(tri[0].x - tri[1].x);
- lv_coord_t sx1 = tri[0].x < tri[1].x ? 1 : -1;
- lv_coord_t dy1 = LV_MATH_ABS(tri[0].y - tri[1].y);
- lv_coord_t sy1 = tri[0].y < tri[1].y ? 1 : -1;
- lv_coord_t err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- lv_coord_t err_tmp1;
-
- lv_point_t edge2;
- lv_coord_t dx2 = LV_MATH_ABS(tri[0].x - tri[2].x);
- lv_coord_t sx2 = tri[0].x < tri[2].x ? 1 : -1;
- lv_coord_t dy2 = LV_MATH_ABS(tri[0].y - tri[2].y);
- lv_coord_t sy2 = tri[0].y < tri[2].y ? 1 : -1;
- lv_coord_t err2 = (dx1 > dy2 ? dx2 : -dy2) / 2;
- lv_coord_t err_tmp2;
-
- lv_coord_t y1_tmp;
- lv_coord_t y2_tmp;
-
- edge1.x = tri[0].x;
- edge1.y = tri[0].y;
- edge2.x = tri[0].x;
- edge2.y = tri[0].y;
- lv_area_t act_area;
- lv_area_t draw_area;
-
- while(1) {
- act_area.x1 = edge1.x;
- act_area.x2 = edge2.x;
- act_area.y1 = edge1.y;
- act_area.y2 = edge2.y;
-
- /* Get the area of a line.
- * Adjust it a little bit to perfectly match (no redrawn pixels) with the adjacent triangles*/
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2) + 1;
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2) - 1;
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2) - 1;
-
- lv_draw_fill(&draw_area, mask, style->body.main_color, opa);
-
- /*Calc. the next point of edge1*/
- y1_tmp = edge1.y;
- do {
- if(edge1.x == tri[1].x && edge1.y == tri[1].y) {
-
- dx1 = LV_MATH_ABS(tri[1].x - tri[2].x);
- sx1 = tri[1].x < tri[2].x ? 1 : -1;
- dy1 = LV_MATH_ABS(tri[1].y - tri[2].y);
- sy1 = tri[1].y < tri[2].y ? 1 : -1;
- err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- } else if(edge1.x == tri[2].x && edge1.y == tri[2].y) {
- return;
- }
- err_tmp1 = err1;
- if(err_tmp1 > -dx1) {
- err1 -= dy1;
- edge1.x += sx1;
- }
- if(err_tmp1 < dy1) {
- err1 += dx1;
- edge1.y += sy1;
- }
- } while(edge1.y == y1_tmp);
-
- /*Calc. the next point of edge2*/
- y2_tmp = edge2.y;
- do {
- if(edge2.x == tri[2].x && edge2.y == tri[2].y) return;
- err_tmp2 = err2;
- if(err_tmp2 > -dx2) {
- err2 -= dy2;
- edge2.x += sx2;
- }
- if(err_tmp2 < dy2) {
- err2 += dx2;
- edge2.y += sy2;
- }
- } while(edge2.y == y2_tmp);
- }
-}
-
-void tri_draw_tall(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa)
-{
- /*
- * Better to draw from vertical lines
- * |\
- * | |
- * | |
- * | \
- * | |
- * |___|
- */
-
- lv_point_t tri[3];
-
- memcpy(tri, points, sizeof(tri));
-
- /*Sort the vertices according to their x coordinate (0: x max, 1: x mid, 2:x min)*/
- if(tri[1].x < tri[0].x) point_swap(&tri[1], &tri[0]);
- if(tri[2].x < tri[1].x) point_swap(&tri[2], &tri[1]);
- if(tri[1].x < tri[0].x) point_swap(&tri[1], &tri[0]);
-
- /*Draw the triangle*/
- lv_point_t edge1;
- lv_coord_t dx1 = LV_MATH_ABS(tri[0].x - tri[1].x);
- lv_coord_t sx1 = tri[0].x < tri[1].x ? 1 : -1;
- lv_coord_t dy1 = LV_MATH_ABS(tri[0].y - tri[1].y);
- lv_coord_t sy1 = tri[0].y < tri[1].y ? 1 : -1;
- lv_coord_t err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- lv_coord_t err_tmp1;
-
- lv_point_t edge2;
- lv_coord_t dx2 = LV_MATH_ABS(tri[0].x - tri[2].x);
- lv_coord_t sx2 = tri[0].x < tri[2].x ? 1 : -1;
- lv_coord_t dy2 = LV_MATH_ABS(tri[0].y - tri[2].y);
- lv_coord_t sy2 = tri[0].y < tri[2].y ? 1 : -1;
- lv_coord_t err2 = (dx1 > dy2 ? dx2 : -dy2) / 2;
- lv_coord_t err_tmp2;
-
- lv_coord_t x1_tmp;
- lv_coord_t x2_tmp;
-
- edge1.x = tri[0].x;
- edge1.y = tri[0].y;
- edge2.x = tri[0].x;
- edge2.y = tri[0].y;
- lv_area_t act_area;
- lv_area_t draw_area;
-
- while(1) {
- act_area.x1 = edge1.x;
- act_area.x2 = edge2.x;
- act_area.y1 = edge1.y;
- act_area.y2 = edge2.y;
-
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2) - 1;
-
- lv_draw_fill(&draw_area, mask, style->body.main_color, opa);
-
- /*Calc. the next point of edge1*/
- x1_tmp = edge1.x;
- do {
- if(edge1.y == tri[1].y && edge1.x == tri[1].x) {
-
- dx1 = LV_MATH_ABS(tri[1].x - tri[2].x);
- sx1 = tri[1].x < tri[2].x ? 1 : -1;
- dy1 = LV_MATH_ABS(tri[1].y - tri[2].y);
- sy1 = tri[1].y < tri[2].y ? 1 : -1;
- err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- } else if(edge1.y == tri[2].y && edge1.x == tri[2].x) {
- return;
- }
- err_tmp1 = err1;
- if(err_tmp1 > -dx1) {
- err1 -= dy1;
- edge1.x += sx1;
- }
- if(err_tmp1 < dy1) {
- err1 += dx1;
- edge1.y += sy1;
- }
- } while(edge1.x == x1_tmp);
-
- /*Calc. the next point of edge2*/
- x2_tmp = edge2.x;
- do {
- if(edge2.y == tri[2].y && edge2.x == tri[2].x) {
- return;
- }
-
- err_tmp2 = err2;
- if(err_tmp2 > -dx2) {
- err2 -= dy2;
- edge2.x += sx2;
- }
- if(err_tmp2 < dy2) {
- err2 += dx2;
- edge2.y += sy2;
- }
- } while(edge2.x == x2_tmp);
- }
-}
-
-/**
- * Swap two points
- * p1 pointer to the first point
- * p2 pointer to the second point
- */
-static void point_swap(lv_point_t * p1, lv_point_t * p2)
-{
- lv_point_t tmp;
- tmp.x = p1->x;
- tmp.y = p1->y;
-
- p1->x = p2->x;
- p1->y = p2->y;
-
- p2->x = tmp.x;
- p2->y = tmp.y;
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_draw_triangle.h b/src/libs/lvgl/src/lv_draw/lv_draw_triangle.h
deleted file mode 100644
index b6b230d9..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_draw_triangle.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * @file lv_draw_triangle.h
- *
- */
-
-#ifndef LV_DRAW_TRIANGLE_H
-#define LV_DRAW_TRIANGLE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- *
- * @param points pointer to an array with 3 points
- * @param mask the triangle will be drawn only in this mask
- * @param style style for of the triangle
- * @param opa_scale scale down all opacities by the factor (0..255)
- */
-void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale);
-
-/**
- * Draw a polygon from triangles. Only convex polygons are supported
- * @param points an array of points
- * @param point_cnt number of points
- * @param mask polygon will be drawn only in this mask
- * @param style style of the polygon
- * @param opa_scale scale down all opacities by the factor (0..255)
- */
-void lv_draw_polygon(const lv_point_t * points, uint32_t point_cnt, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_TRIANGLE_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_img_cache.c b/src/libs/lvgl/src/lv_draw/lv_img_cache.c
deleted file mode 100644
index 841e1169..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_img_cache.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * @file lv_img_cache.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "../lv_core/lv_debug.h"
-#include "lv_img_cache.h"
-#include "lv_img_decoder.h"
-#include "lv_draw_img.h"
-#include "../lv_hal/lv_hal_tick.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-/*********************
- * DEFINES
- *********************/
-/*Decrement life with this value in every open*/
-#define LV_IMG_CACHE_AGING 1
-
-/*Boost life by this factor (multiply time_to_open with this value)*/
-#define LV_IMG_CACHE_LIFE_GAIN 1
-
-/*Don't let life to be greater than this limit because it would require a lot of time to
- * "die" from very high values */
-#define LV_IMG_CACHE_LIFE_LIMIT 1000
-
-#if LV_IMG_CACHE_DEF_SIZE < 1
-#error "LV_IMG_CACHE_DEF_SIZE must be >= 1. See lv_conf.h"
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint16_t entry_cnt;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Open an image using the image decoder interface and cache it.
- * The image will be left open meaning if the image decoder open callback allocated memory then it will remain.
- * The image is closed if a new image is opened and the new image takes its place in the cache.
- * @param src source of the image. Path to file or pointer to an `lv_img_dsc_t` variable
- * @param style style of the image
- * @return pointer to the cache entry or NULL if can open the image
- */
-lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * style)
-{
- if(entry_cnt == 0) {
- LV_LOG_WARN("lv_img_cache_open: the cache size is 0");
- return NULL;
- }
-
- lv_img_cache_entry_t * cache = LV_GC_ROOT(_lv_img_cache_array);
-
- /*Decrement all lifes. Make the entries older*/
- uint16_t i;
- for(i = 0; i < entry_cnt; i++) {
- if(cache[i].life > INT32_MIN + LV_IMG_CACHE_AGING) {
- cache[i].life -= LV_IMG_CACHE_AGING;
- }
- }
-
- /*Is the image cached?*/
- lv_img_cache_entry_t * cached_src = NULL;
- for(i = 0; i < entry_cnt; i++) {
- bool match = false;
- lv_img_src_t src_type = lv_img_src_get_type(cache[i].dec_dsc.src);
- if(src_type == LV_IMG_SRC_VARIABLE) {
- if(cache[i].dec_dsc.src == src && cache[i].dec_dsc.style == style) match = true;
- } else if(src_type == LV_IMG_SRC_FILE) {
- if(strcmp(cache[i].dec_dsc.src, src) == 0) match = true;
- }
-
- if(match) {
- /* If opened increment its life.
- * Image difficult to open should live longer to keep avoid frequent their recaching.
- * Therefore increase `life` with `time_to_open`*/
- cached_src = &cache[i];
- cached_src->life += cached_src->dec_dsc.time_to_open * LV_IMG_CACHE_LIFE_GAIN;
- if(cached_src->life > LV_IMG_CACHE_LIFE_LIMIT) cached_src->life = LV_IMG_CACHE_LIFE_LIMIT;
- LV_LOG_TRACE("image draw: image found in the cache");
- break;
- }
- }
-
- /*The image is not cached then cache it now*/
- if(cached_src == NULL) {
- /*Find an entry to reuse. Select the entry with the least life*/
- cached_src = &cache[0];
- for(i = 1; i < entry_cnt; i++) {
- if(cache[i].life < cached_src->life) {
- cached_src = &cache[i];
- }
- }
-
- /*Close the decoder to reuse if it was opened (has a valid source)*/
- if(cached_src->dec_dsc.src) {
- lv_img_decoder_close(&cached_src->dec_dsc);
- LV_LOG_INFO("image draw: cache miss, close and reuse an entry");
- } else {
- LV_LOG_INFO("image draw: cache miss, cached to an empty entry");
- }
-
- /*Open the image and measure the time to open*/
- uint32_t t_start;
- t_start = lv_tick_get();
- cached_src->dec_dsc.time_to_open = 0;
- lv_res_t open_res = lv_img_decoder_open(&cached_src->dec_dsc, src, style);
- if(open_res == LV_RES_INV) {
- LV_LOG_WARN("Image draw cannot open the image resource");
- lv_img_decoder_close(&cached_src->dec_dsc);
- memset(&cached_src->dec_dsc, 0, sizeof(lv_img_decoder_dsc_t));
- memset(cached_src, 0, sizeof(lv_img_cache_entry_t));
- cached_src->life = INT32_MIN; /*Make the empty entry very "weak" to force its use */
- return NULL;
- }
-
- cached_src->life = 0;
-
- /*If `time_to_open` was not set in the open function set it here*/
- if(cached_src->dec_dsc.time_to_open == 0) {
- cached_src->dec_dsc.time_to_open = lv_tick_elaps(t_start);
- }
-
- if(cached_src->dec_dsc.time_to_open == 0) cached_src->dec_dsc.time_to_open = 1;
- }
-
- return cached_src;
-}
-
-/**
- * Set the number of images to be cached.
- * More cached images mean more opened image at same time which might mean more memory usage.
- * E.g. if 20 PNG or JPG images are open in the RAM they consume memory while opened in the cache.
- * @param new_entry_cnt number of image to cache
- */
-void lv_img_cache_set_size(uint16_t new_entry_cnt)
-{
- if(LV_GC_ROOT(_lv_img_cache_array) != NULL) {
- /*Clean the cache before free it*/
- lv_img_cache_invalidate_src(NULL);
- lv_mem_free(LV_GC_ROOT(_lv_img_cache_array));
- }
-
- /*Reallocate the cache*/
- LV_GC_ROOT(_lv_img_cache_array) = lv_mem_alloc(sizeof(lv_img_cache_entry_t) * new_entry_cnt);
- LV_ASSERT_MEM(LV_GC_ROOT(_lv_img_cache_array));
- if(LV_GC_ROOT(_lv_img_cache_array) == NULL) {
- entry_cnt = 0;
- return;
- }
- entry_cnt = new_entry_cnt;
-
- /*Clean the cache*/
- uint16_t i;
- for(i = 0; i < entry_cnt; i++) {
- memset(&LV_GC_ROOT(_lv_img_cache_array)[i].dec_dsc, 0, sizeof(lv_img_decoder_dsc_t));
- memset(&LV_GC_ROOT(_lv_img_cache_array)[i], 0, sizeof(lv_img_cache_entry_t));
- }
-}
-
-/**
- * Invalidate an image source in the cache.
- * Useful if the image source is updated therefore it needs to be cached again.
- * @param src an image source path to a file or pointer to an `lv_img_dsc_t` variable.
- */
-void lv_img_cache_invalidate_src(const void * src)
-{
-
- lv_img_cache_entry_t * cache = LV_GC_ROOT(_lv_img_cache_array);
-
- uint16_t i;
- for(i = 0; i < entry_cnt; i++) {
- if(cache[i].dec_dsc.src == src || src == NULL) {
- if(cache[i].dec_dsc.src != NULL) {
- lv_img_decoder_close(&cache[i].dec_dsc);
- }
-
- memset(&cache[i].dec_dsc, 0, sizeof(lv_img_decoder_dsc_t));
- memset(&cache[i], 0, sizeof(lv_img_cache_entry_t));
- }
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_draw/lv_img_cache.h b/src/libs/lvgl/src/lv_draw/lv_img_cache.h
deleted file mode 100644
index 859b4b8d..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_img_cache.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * @file lv_img_cache.h
- *
- */
-
-#ifndef LV_IMG_CACHE_H
-#define LV_IMG_CACHE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_img_decoder.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * When loading images from the network it can take a long time to download and decode the image.
- *
- * To avoid repeating this heavy load images can be cached.
- */
-typedef struct
-{
- lv_img_decoder_dsc_t dec_dsc; /**< Image information */
-
- /** Count the cache entries's life. Add `time_tio_open` to `life` when the entry is used.
- * Decrement all lifes by one every in every ::lv_img_cache_open.
- * If life == 0 the entry can be reused */
- int32_t life;
-} lv_img_cache_entry_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Open an image using the image decoder interface and cache it.
- * The image will be left open meaning if the image decoder open callback allocated memory then it will remain.
- * The image is closed if a new image is opened and the new image takes its place in the cache.
- * @param src source of the image. Path to file or pointer to an `lv_img_dsc_t` variable
- * @param style style of the image
- * @return pointer to the cache entry or NULL if can open the image
- */
-lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * style);
-
-/**
- * Set the number of images to be cached.
- * More cached images mean more opened image at same time which might mean more memory usage.
- * E.g. if 20 PNG or JPG images are open in the RAM they consume memory while opened in the cache.
- * @param new_entry_cnt number of image to cache
- */
-void lv_img_cache_set_size(uint16_t new_slot_num);
-
-/**
- * Invalidate an image source in the cache.
- * Useful if the image source is updated therefore it needs to be cached again.
- * @param src an image source path to a file or pointer to an `lv_img_dsc_t` variable.
- */
-void lv_img_cache_invalidate_src(const void * src);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_IMG_CACHE_H*/
diff --git a/src/libs/lvgl/src/lv_draw/lv_img_decoder.c b/src/libs/lvgl/src/lv_draw/lv_img_decoder.c
deleted file mode 100644
index b3c9d9c8..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_img_decoder.c
+++ /dev/null
@@ -1,756 +0,0 @@
-/**
- * @file lv_img_decoder.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_img_decoder.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw_img.h"
-#include "../lv_misc/lv_ll.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-#define CF_BUILT_IN_FIRST LV_IMG_CF_TRUE_COLOR
-#define CF_BUILT_IN_LAST LV_IMG_CF_ALPHA_8BIT
-
-/**********************
- * TYPEDEFS
- **********************/
-typedef struct
-{
-#if LV_USE_FILESYSTEM
- lv_fs_file_t * f;
-#endif
- lv_color_t * palette;
- lv_opa_t * opa;
-} lv_img_decoder_built_in_data_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_img_decoder_built_in_line_true_color(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf);
-static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf);
-static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the image decoder module
- * */
-void lv_img_decoder_init(void)
-{
- lv_ll_init(&LV_GC_ROOT(_lv_img_defoder_ll), sizeof(lv_img_decoder_t));
-
- lv_img_decoder_t * decoder;
-
- /*Create a decoder for the built in color format*/
- decoder = lv_img_decoder_create();
- if(decoder == NULL) {
- LV_LOG_WARN("lv_img_decoder_init: out of memory");
- LV_ASSERT_MEM(decoder);
- return;
- }
-
- lv_img_decoder_set_info_cb(decoder, lv_img_decoder_built_in_info);
- lv_img_decoder_set_open_cb(decoder, lv_img_decoder_built_in_open);
- lv_img_decoder_set_read_line_cb(decoder, lv_img_decoder_built_in_read_line);
- lv_img_decoder_set_close_cb(decoder, lv_img_decoder_built_in_close);
-}
-
-/**
- * Get information about an image.
- * Try the created image decoder one by one. Once one is able to get info that info will be used.
- * @param src the image source. E.g. file name or variable.
- * @param header the image info will be stored here
- * @return LV_RES_OK: success; LV_RES_INV: wasn't able to get info about the image
- */
-lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header)
-{
- header->always_zero = 0;
-
- lv_res_t res = LV_RES_INV;
- lv_img_decoder_t * d;
- LV_LL_READ(LV_GC_ROOT(_lv_img_defoder_ll), d)
- {
- res = LV_RES_INV;
- if(d->info_cb) {
- res = d->info_cb(d, src, header);
- if(res == LV_RES_OK) break;
- }
- }
-
- return res;
-}
-
-/**
- * Open an image.
- * Try the created image decoder one by one. Once one is able to open the image that decoder is save in `dsc`
- * @param dsc describe a decoding session. Simply a pointer to an `lv_img_decoder_dsc_t` variable.
- * @param src the image source. Can be
- * 1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered via `lv_fs_add_drv()`)
- * 2) Variable: Pointer to an `lv_img_dsc_t` variable
- * 3) Symbol: E.g. `LV_SYMBOL_OK`
- * @param style the style of the image
- * @return LV_RES_OK: opened the image. `dsc->img_data` and `dsc->header` are set.
- * LV_RES_INV: none of the registered image decoders were able to open the image.
- */
-lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
-{
- dsc->style = style;
- dsc->src_type = lv_img_src_get_type(src);
- dsc->user_data = NULL;
-
- if(dsc->src_type == LV_IMG_SRC_FILE) {
- size_t fnlen = strlen(src);
- dsc->src = lv_mem_alloc(fnlen + 1);
- strcpy((char *)dsc->src, src);
- } else {
- dsc->src = src;
- }
-
- lv_res_t res = LV_RES_INV;
-
- lv_img_decoder_t * d;
- LV_LL_READ(LV_GC_ROOT(_lv_img_defoder_ll), d)
- {
- /*Info an Open callbacks are required*/
- if(d->info_cb == NULL || d->open_cb == NULL) continue;
-
- res = d->info_cb(d, src, &dsc->header);
- if(res != LV_RES_OK) continue;
-
- dsc->error_msg = NULL;
- dsc->img_data = NULL;
- dsc->decoder = d;
-
- res = d->open_cb(d, dsc);
-
- /*Opened successfully. It is a good decoder to for this image source*/
- if(res == LV_RES_OK) break;
- }
-
- if(res == LV_RES_INV) {
- memset(dsc, 0, sizeof(lv_img_decoder_dsc_t));
- }
-
- return res;
-}
-
-/**
- * Read a line from an opened image
- * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
- * @param x start X coordinate (from left)
- * @param y start Y coordinate (from top)
- * @param len number of pixels to read
- * @param buf store the data here
- * @return LV_RES_OK: success; LV_RES_INV: an error occurred
- */
-lv_res_t lv_img_decoder_read_line(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_coord_t len, uint8_t * buf)
-{
- lv_res_t res = LV_RES_INV;
- if(dsc->decoder->read_line_cb) res = dsc->decoder->read_line_cb(dsc->decoder, dsc, x, y, len, buf);
-
- return res;
-}
-
-/**
- * Close a decoding session
- * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
- */
-void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc)
-{
- if(dsc->decoder) {
- if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
-
- if(dsc->src_type == LV_IMG_SRC_FILE) {
- lv_mem_free(dsc->src);
- dsc->src = NULL;
- }
- }
-}
-
-/**
- * Create a new image decoder
- * @return pointer to the new image decoder
- */
-lv_img_decoder_t * lv_img_decoder_create(void)
-{
- lv_img_decoder_t * decoder;
- decoder = lv_ll_ins_head(&LV_GC_ROOT(_lv_img_defoder_ll));
- LV_ASSERT_MEM(decoder);
- if(decoder == NULL) return NULL;
-
- memset(decoder, 0, sizeof(lv_img_decoder_t));
-
- return decoder;
-}
-
-/**
- * Delete an image decoder
- * @param decoder pointer to an image decoder
- */
-void lv_img_decoder_delete(lv_img_decoder_t * decoder)
-{
- lv_ll_rem(&LV_GC_ROOT(_lv_img_defoder_ll), decoder);
- lv_mem_free(decoder);
-}
-
-/**
- * Set a callback to get information about the image
- * @param decoder pointer to an image decoder
- * @param info_cb a function to collect info about an image (fill an `lv_img_header_t` struct)
- */
-void lv_img_decoder_set_info_cb(lv_img_decoder_t * decoder, lv_img_decoder_info_f_t info_cb)
-{
- decoder->info_cb = info_cb;
-}
-
-/**
- * Set a callback to open an image
- * @param decoder pointer to an image decoder
- * @param open_cb a function to open an image
- */
-void lv_img_decoder_set_open_cb(lv_img_decoder_t * decoder, lv_img_decoder_open_f_t open_cb)
-{
- decoder->open_cb = open_cb;
-}
-
-/**
- * Set a callback to a decoded line of an image
- * @param decoder pointer to an image decoder
- * @param read_line_cb a function to read a line of an image
- */
-void lv_img_decoder_set_read_line_cb(lv_img_decoder_t * decoder, lv_img_decoder_read_line_f_t read_line_cb)
-{
- decoder->read_line_cb = read_line_cb;
-}
-
-/**
- * Set a callback to close a decoding session. E.g. close files and free other resources.
- * @param decoder pointer to an image decoder
- * @param close_cb a function to close a decoding session
- */
-void lv_img_decoder_set_close_cb(lv_img_decoder_t * decoder, lv_img_decoder_close_f_t close_cb)
-{
- decoder->close_cb = close_cb;
-}
-
-/**
- * Get info about a built-in image
- * @param decoder the decoder where this function belongs
- * @param src the image source: pointer to an `lv_img_dsc_t` variable, a file path or a symbol
- * @param header store the image data here
- * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: unknown format or other error.
- */
-lv_res_t lv_img_decoder_built_in_info(lv_img_decoder_t * decoder, const void * src, lv_img_header_t * header)
-{
- (void)decoder; /*Unused*/
-
- lv_img_src_t src_type = lv_img_src_get_type(src);
- if(src_type == LV_IMG_SRC_VARIABLE) {
- lv_img_cf_t cf = ((lv_img_dsc_t *)src)->header.cf;
- if(cf < CF_BUILT_IN_FIRST || cf > CF_BUILT_IN_LAST) return LV_RES_INV;
-
- header->w = ((lv_img_dsc_t *)src)->header.w;
- header->h = ((lv_img_dsc_t *)src)->header.h;
- header->cf = ((lv_img_dsc_t *)src)->header.cf;
- }
-#if LV_USE_FILESYSTEM
- else if(src_type == LV_IMG_SRC_FILE) {
- lv_fs_file_t file;
- lv_fs_res_t res;
- uint32_t rn;
- res = lv_fs_open(&file, src, LV_FS_MODE_RD);
- if(res == LV_FS_RES_OK) {
- res = lv_fs_read(&file, header, sizeof(lv_img_header_t), &rn);
- lv_fs_close(&file);
- }
-
- if(header->cf < CF_BUILT_IN_FIRST || header->cf > CF_BUILT_IN_LAST) return LV_RES_INV;
-
- }
-#endif
- else if(src_type == LV_IMG_SRC_SYMBOL) {
- /*The size depend on the font but it is unknown here. It should be handled outside of the
- * function*/
- header->w = 1;
- header->h = 1;
- /* Symbols always have transparent parts. Important because of cover check in the design
- * function. The actual value doesn't matter because lv_draw_label will draw it*/
- header->cf = LV_IMG_CF_ALPHA_1BIT;
- } else {
- LV_LOG_WARN("Image get info found unknown src type");
- return LV_RES_INV;
- }
- return LV_RES_OK;
-}
-
-/**
- * Open a built in image
- * @param decoder the decoder where this function belongs
- * @param dsc pointer to decoder descriptor. `src`, `style` are already initialized in it.
- * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: unknown format or other error.
- */
-lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc)
-{
- /*Open the file if it's a file*/
- if(dsc->src_type == LV_IMG_SRC_FILE) {
-#if LV_USE_FILESYSTEM
-
- /*Support only "*.bin" files*/
- if(strcmp(lv_fs_get_ext(dsc->src), "bin")) return LV_RES_INV;
-
- lv_fs_file_t f;
- lv_fs_res_t res = lv_fs_open(&f, dsc->src, LV_FS_MODE_RD);
- if(res != LV_FS_RES_OK) {
- LV_LOG_WARN("Built-in image decoder can't open the file");
- return LV_RES_INV;
- }
-
- /*If the file was open successfully save the file descriptor*/
- if(dsc->user_data == NULL) {
- dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
- if(dsc->user_data == NULL) {
- LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- LV_ASSERT_MEM(dsc->user_data);
- }
- memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
- }
-
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- user_data->f = lv_mem_alloc(sizeof(f));
- if(user_data->f == NULL) {
- LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- LV_ASSERT_MEM(user_data->f);
- }
-
- memcpy(user_data->f, &f, sizeof(f));
-
-#else
- LV_LOG_WARN("Image built-in decoder cannot read file because LV_USE_FILESYSTEM = 0");
- return LV_RES_INV;
-#endif
- }
-
- lv_img_cf_t cf = dsc->header.cf;
- /*Process true color formats*/
- if(cf == LV_IMG_CF_TRUE_COLOR || cf == LV_IMG_CF_TRUE_COLOR_ALPHA || cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
- if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
- /* In case of uncompressed formats the image stored in the ROM/RAM.
- * So simply give its pointer*/
- dsc->img_data = ((lv_img_dsc_t *)dsc->src)->data;
- return LV_RES_OK;
- } else {
- /*If it's a file it need to be read line by line later*/
- dsc->img_data = NULL;
- return LV_RES_OK;
- }
- }
- /*Process indexed images. Build a palette*/
- else if(cf == LV_IMG_CF_INDEXED_1BIT || cf == LV_IMG_CF_INDEXED_2BIT || cf == LV_IMG_CF_INDEXED_4BIT ||
- cf == LV_IMG_CF_INDEXED_8BIT) {
-
-#if LV_IMG_CF_INDEXED
- uint8_t px_size = lv_img_color_format_get_px_size(cf);
- uint32_t palette_size = 1 << px_size;
-
- /*Allocate the palette*/
- if(dsc->user_data == NULL) {
- dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
- if(dsc->user_data == NULL) {
- LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- LV_ASSERT_MEM(dsc->user_data);
- }
- memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
- }
-
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- user_data->palette = lv_mem_alloc(palette_size * sizeof(lv_color_t));
- user_data->opa = lv_mem_alloc(palette_size * sizeof(lv_opa_t));
- if(user_data->palette == NULL || user_data->opa == NULL) {
- LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
-#if LV_USE_FILESYSTEM
- LV_ASSERT_MEM(user_data->f);
-#endif
- }
-
- if(dsc->src_type == LV_IMG_SRC_FILE) {
- /*Read the palette from file*/
-#if LV_USE_FILESYSTEM
- lv_fs_seek(user_data->f, 4); /*Skip the header*/
- lv_color32_t cur_color;
- uint32_t i;
- for(i = 0; i < palette_size; i++) {
- lv_fs_read(user_data->f, &cur_color, sizeof(lv_color32_t), NULL);
- user_data->palette[i] = lv_color_make(cur_color.ch.red, cur_color.ch.green, cur_color.ch.blue);
- user_data->opa[i] = cur_color.ch.alpha;
- }
-#else
- LV_LOG_WARN("Image built-in decoder can read the palette because LV_USE_FILESYSTEM = 0");
- return LV_RES_INV;
-#endif
- } else {
- /*The palette begins in the beginning of the image data. Just point to it.*/
- lv_color32_t * palette_p = (lv_color32_t *)((lv_img_dsc_t *)dsc->src)->data;
-
- uint32_t i;
- for(i = 0; i < palette_size; i++) {
- user_data->palette[i] = lv_color_make(palette_p[i].ch.red, palette_p[i].ch.green, palette_p[i].ch.blue);
- user_data->opa[i] = palette_p[i].ch.alpha;
- }
- }
-
- dsc->img_data = NULL;
- return LV_RES_OK;
-#else
- LV_LOG_WARN("Indexed (palette) images are not enabled in lv_conf.h. See LV_IMG_CF_INDEXED");
- return LV_RES_INV;
-#endif
- }
- /*Alpha indexed images. */
- else if(cf == LV_IMG_CF_ALPHA_1BIT || cf == LV_IMG_CF_ALPHA_2BIT || cf == LV_IMG_CF_ALPHA_4BIT ||
- cf == LV_IMG_CF_ALPHA_8BIT) {
-#if LV_IMG_CF_ALPHA
- dsc->img_data = NULL;
- return LV_RES_OK; /*Nothing to process*/
-#else
- LV_LOG_WARN("Alpha indexed images are not enabled in lv_conf.h. See LV_IMG_CF_ALPHA");
- return LV_RES_INV;
-#endif
- }
- /*Unknown format. Can't decode it.*/
- else {
- /*Free the potentially allocated memories*/
- lv_img_decoder_built_in_close(decoder, dsc);
-
- LV_LOG_WARN("Image decoder open: unknown color format")
- return LV_RES_INV;
- }
-}
-
-/**
- * Decode `len` pixels starting from the given `x`, `y` coordinates and store them in `buf`.
- * Required only if the "open" function can't return with the whole decoded pixel array.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- * @param x start x coordinate
- * @param y start y coordinate
- * @param len number of pixels to decode
- * @param buf a buffer to store the decoded pixels
- * @return LV_RES_OK: ok; LV_RES_INV: failed
- */
-lv_res_t lv_img_decoder_built_in_read_line(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc, lv_coord_t x,
- lv_coord_t y, lv_coord_t len, uint8_t * buf)
-{
- (void)decoder; /*Unused*/
-
- lv_res_t res = LV_RES_INV;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA ||
- dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
- /* For TRUE_COLOR images read line required only for files.
- * For variables the image data was returned in `open`*/
- if(dsc->src_type == LV_IMG_SRC_FILE) {
- res = lv_img_decoder_built_in_line_true_color(dsc, x, y, len, buf);
- }
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT || dsc->header.cf == LV_IMG_CF_ALPHA_2BIT ||
- dsc->header.cf == LV_IMG_CF_ALPHA_4BIT || dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
-
- res = lv_img_decoder_built_in_line_alpha(dsc, x, y, len, buf);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT || dsc->header.cf == LV_IMG_CF_INDEXED_2BIT ||
- dsc->header.cf == LV_IMG_CF_INDEXED_4BIT || dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
- res = lv_img_decoder_built_in_line_indexed(dsc, x, y, len, buf);
- } else {
- LV_LOG_WARN("Built-in image decoder read not supports the color format");
- return LV_RES_INV;
- }
-
- return res;
-}
-
-/**
- * Close the pending decoding. Free resources etc.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- */
-void lv_img_decoder_built_in_close(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc)
-{
- (void)decoder; /*Unused*/
-
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- if(user_data) {
-#if LV_USE_FILESYSTEM
- if(user_data->f) {
- lv_fs_close(user_data->f);
- lv_mem_free(user_data->f);
- }
-#endif
- if(user_data->palette) lv_mem_free(user_data->palette);
- if(user_data->opa) lv_mem_free(user_data->opa);
-
- lv_mem_free(user_data);
-
- dsc->user_data = NULL;
- }
-}
-
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static lv_res_t lv_img_decoder_built_in_line_true_color(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf)
-{
-#if LV_USE_FILESYSTEM
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- lv_fs_res_t res;
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
-
- uint32_t pos = ((y * dsc->header.w + x) * px_size) >> 3;
- pos += 4; /*Skip the header*/
- res = lv_fs_seek(user_data->f, pos);
- if(res != LV_FS_RES_OK) {
- LV_LOG_WARN("Built-in image decoder seek failed");
- return LV_RES_INV;
- }
- uint32_t btr = len * (px_size >> 3);
- uint32_t br = 0;
- lv_fs_read(user_data->f, buf, btr, &br);
- if(res != LV_FS_RES_OK || btr != br) {
- LV_LOG_WARN("Built-in image decoder read failed");
- return LV_RES_INV;
- }
-
- return LV_RES_OK;
-#else
- LV_LOG_WARN("Image built-in decoder cannot read file because LV_USE_FILESYSTEM = 0");
- return LV_RES_INV;
-#endif
-}
-
-static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf)
-{
-
-#if LV_IMG_CF_ALPHA
- const lv_opa_t alpha1_opa_table[2] = {0, 255}; /*Opacity mapping with bpp = 1 (Just for compatibility)*/
- const lv_opa_t alpha2_opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
- const lv_opa_t alpha4_opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
- 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
-
- /*Simply fill the buffer with the color. Later only the alpha value will be modified.*/
- lv_color_t bg_color = dsc->style->image.color;
- lv_coord_t i;
- for(i = 0; i < len; i++) {
-#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = bg_color.full;
-#elif LV_COLOR_DEPTH == 16
- /*Because of Alpha byte 16 bit color can start on odd address which can cause crash*/
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = bg_color.full & 0xFF;
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + 1] = (bg_color.full >> 8) & 0xFF;
-#elif LV_COLOR_DEPTH == 32
- *((uint32_t *)&buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE]) = bg_color.full;
-#else
-#error "Invalid LV_COLOR_DEPTH. Check it in lv_conf.h"
-#endif
- }
-
- const lv_opa_t * opa_table = NULL;
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
- uint16_t mask = (1 << px_size) - 1; /*E.g. px_size = 2; mask = 0x03*/
-
- lv_coord_t w = 0;
- uint32_t ofs = 0;
- int8_t pos = 0;
- switch(dsc->header.cf) {
- case LV_IMG_CF_ALPHA_1BIT:
- w = (dsc->header.w >> 3); /*E.g. w = 20 -> w = 2 + 1*/
- if(dsc->header.w & 0x7) w++;
- ofs += w * y + (x >> 3); /*First pixel*/
- pos = 7 - (x & 0x7);
- opa_table = alpha1_opa_table;
- break;
- case LV_IMG_CF_ALPHA_2BIT:
- w = (dsc->header.w >> 2); /*E.g. w = 13 -> w = 3 + 1 (bytes)*/
- if(dsc->header.w & 0x3) w++;
- ofs += w * y + (x >> 2); /*First pixel*/
- pos = 6 - ((x & 0x3) * 2);
- opa_table = alpha2_opa_table;
- break;
- case LV_IMG_CF_ALPHA_4BIT:
- w = (dsc->header.w >> 1); /*E.g. w = 13 -> w = 6 + 1 (bytes)*/
- if(dsc->header.w & 0x1) w++;
- ofs += w * y + (x >> 1); /*First pixel*/
- pos = 4 - ((x & 0x1) * 4);
- opa_table = alpha4_opa_table;
- break;
- case LV_IMG_CF_ALPHA_8BIT:
- w = dsc->header.w; /*E.g. x = 7 -> w = 7 (bytes)*/
- ofs += w * y + x; /*First pixel*/
- pos = 0;
- break;
- }
-
-#if LV_USE_FILESYSTEM
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- uint8_t fs_buf[LV_HOR_RES_MAX];
-#endif
-
- const uint8_t * data_tmp = NULL;
- if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
- const lv_img_dsc_t * img_dsc = dsc->src;
-
- data_tmp = img_dsc->data + ofs;
- } else {
-#if LV_USE_FILESYSTEM
- lv_fs_seek(user_data->f, ofs + 4); /*+4 to skip the header*/
- lv_fs_read(user_data->f, fs_buf, w, NULL);
- data_tmp = fs_buf;
-#else
- LV_LOG_WARN("Image built-in alpha line reader can't read file because LV_USE_FILESYSTEM = 0");
- data_tmp = NULL; /*To avoid warnings*/
- return LV_RES_INV;
-#endif
- }
-
- uint8_t byte_act = 0;
- uint8_t val_act;
- for(i = 0; i < len; i++) {
- val_act = (data_tmp[byte_act] & (mask << pos)) >> pos;
-
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + LV_IMG_PX_SIZE_ALPHA_BYTE - 1] =
- dsc->header.cf == LV_IMG_CF_ALPHA_8BIT ? val_act : opa_table[val_act];
-
- pos -= px_size;
- if(pos < 0) {
- pos = 8 - px_size;
- data_tmp++;
- }
- }
-
- return LV_RES_OK;
-
-#else
- LV_LOG_WARN("Image built-in alpha line reader failed because LV_IMG_CF_ALPHA is 0 in lv_conf.h");
- return LV_RES_INV;
-#endif
-}
-
-static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y,
- lv_coord_t len, uint8_t * buf)
-{
-
-#if LV_IMG_CF_INDEXED
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
- uint16_t mask = (1 << px_size) - 1; /*E.g. px_size = 2; mask = 0x03*/
-
- lv_coord_t w = 0;
- int8_t pos = 0;
- uint32_t ofs = 0;
- switch(dsc->header.cf) {
- case LV_IMG_CF_INDEXED_1BIT:
- w = (dsc->header.w >> 3); /*E.g. w = 20 -> w = 2 + 1*/
- if(dsc->header.w & 0x7) w++;
- ofs += w * y + (x >> 3); /*First pixel*/
- ofs += 8; /*Skip the palette*/
- pos = 7 - (x & 0x7);
- break;
- case LV_IMG_CF_INDEXED_2BIT:
- w = (dsc->header.w >> 2); /*E.g. w = 13 -> w = 3 + 1 (bytes)*/
- if(dsc->header.w & 0x3) w++;
- ofs += w * y + (x >> 2); /*First pixel*/
- ofs += 16; /*Skip the palette*/
- pos = 6 - ((x & 0x3) * 2);
- break;
- case LV_IMG_CF_INDEXED_4BIT:
- w = (dsc->header.w >> 1); /*E.g. w = 13 -> w = 6 + 1 (bytes)*/
- if(dsc->header.w & 0x1) w++;
- ofs += w * y + (x >> 1); /*First pixel*/
- ofs += 64; /*Skip the palette*/
- pos = 4 - ((x & 0x1) * 4);
- break;
- case LV_IMG_CF_INDEXED_8BIT:
- w = dsc->header.w; /*E.g. x = 7 -> w = 7 (bytes)*/
- ofs += w * y + x; /*First pixel*/
- ofs += 1024; /*Skip the palette*/
- pos = 0;
- break;
- }
-
- lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
-
-#if LV_USE_FILESYSTEM
- uint8_t fs_buf[LV_HOR_RES_MAX];
-#endif
- const uint8_t * data_tmp = NULL;
- if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
- const lv_img_dsc_t * img_dsc = dsc->src;
- data_tmp = img_dsc->data + ofs;
- } else {
-#if LV_USE_FILESYSTEM
- lv_fs_seek(user_data->f, ofs + 4); /*+4 to skip the header*/
- lv_fs_read(user_data->f, fs_buf, w, NULL);
- data_tmp = fs_buf;
-#else
- LV_LOG_WARN("Image built-in indexed line reader can't read file because LV_USE_FILESYSTEM = 0");
- data_tmp = NULL; /*To avoid warnings*/
- return LV_RES_INV;
-#endif
- }
-
- uint8_t val_act;
- lv_coord_t i;
- for(i = 0; i < len; i++) {
- val_act = (*data_tmp & (mask << pos)) >> pos;
-
- lv_color_t color = user_data->palette[val_act];
-#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = color.full;
-#elif LV_COLOR_DEPTH == 16
- /*Because of Alpha byte 16 bit color can start on odd address which can cause crash*/
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = color.full & 0xFF;
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + 1] = (color.full >> 8) & 0xFF;
-#elif LV_COLOR_DEPTH == 32
- *((uint32_t *)&buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE]) = color.full;
-#else
-#error "Invalid LV_COLOR_DEPTH. Check it in lv_conf.h"
-#endif
- buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + LV_IMG_PX_SIZE_ALPHA_BYTE - 1] = user_data->opa[val_act];
-
- pos -= px_size;
- if(pos < 0) {
- pos = 8 - px_size;
- data_tmp++;
- }
- }
-
- return LV_RES_OK;
-#else
- LV_LOG_WARN("Image built-in indexed line reader failed because LV_IMG_CF_INDEXED is 0 in lv_conf.h");
- return LV_RES_INV;
-#endif
-}
diff --git a/src/libs/lvgl/src/lv_draw/lv_img_decoder.h b/src/libs/lvgl/src/lv_draw/lv_img_decoder.h
deleted file mode 100644
index fb7af832..00000000
--- a/src/libs/lvgl/src/lv_draw/lv_img_decoder.h
+++ /dev/null
@@ -1,357 +0,0 @@
-/**
- * @file lv_img_decoder.h
- *
- */
-
-#ifndef LV_IMG_DEOCER_H
-#define LV_IMG_DEOCER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include "../lv_misc/lv_fs.h"
-#include "../lv_misc/lv_types.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_core/lv_style.h"
-
-/*********************
- * DEFINES
- *********************/
-/*If image pixels contains alpha we need to know how much byte is a pixel*/
-#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 2
-#elif LV_COLOR_DEPTH == 16
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 3
-#elif LV_COLOR_DEPTH == 32
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 4
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Source of image. */
-enum {
- LV_IMG_SRC_VARIABLE, /** Binary/C variable */
- LV_IMG_SRC_FILE, /** File in filesystem */
- LV_IMG_SRC_SYMBOL, /** Symbol (@ref lv_symbol_def.h) */
- LV_IMG_SRC_UNKNOWN, /** Unknown source */
-};
-
-typedef uint8_t lv_img_src_t;
-/**
- * LittlevGL image header
- */
-typedef struct
-{
-
- /* The first 8 bit is very important to distinguish the different source types.
- * For more info see `lv_img_get_src_type()` in lv_img.c */
- uint32_t cf : 5; /* Color format: See `lv_img_color_format_t`*/
- uint32_t always_zero : 3; /*It the upper bits of the first byte. Always zero to look like a
- non-printable character*/
-
- uint32_t reserved : 2; /*Reserved to be used later*/
-
- uint32_t w : 11; /*Width of the image map*/
- uint32_t h : 11; /*Height of the image map*/
-} lv_img_header_t;
-
-/*Image color format*/
-enum {
- LV_IMG_CF_UNKNOWN = 0,
-
- LV_IMG_CF_RAW, /**< Contains the file as it is. Needs custom decoder function*/
- LV_IMG_CF_RAW_ALPHA, /**< Contains the file as it is. The image has alpha. Needs custom decoder
- function*/
- LV_IMG_CF_RAW_CHROMA_KEYED, /**< Contains the file as it is. The image is chroma keyed. Needs
- custom decoder function*/
-
- LV_IMG_CF_TRUE_COLOR, /**< Color format and depth should match with LV_COLOR settings*/
- LV_IMG_CF_TRUE_COLOR_ALPHA, /**< Same as `LV_IMG_CF_TRUE_COLOR` but every pixel has an alpha byte*/
- LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, /**< Same as `LV_IMG_CF_TRUE_COLOR` but LV_COLOR_TRANSP pixels
- will be transparent*/
-
- LV_IMG_CF_INDEXED_1BIT, /**< Can have 2 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_2BIT, /**< Can have 4 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_4BIT, /**< Can have 16 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_8BIT, /**< Can have 256 different colors in a palette (always chroma keyed)*/
-
- LV_IMG_CF_ALPHA_1BIT, /**< Can have one color and it can be drawn or not*/
- LV_IMG_CF_ALPHA_2BIT, /**< Can have one color but 4 different alpha value*/
- LV_IMG_CF_ALPHA_4BIT, /**< Can have one color but 16 different alpha value*/
- LV_IMG_CF_ALPHA_8BIT, /**< Can have one color but 256 different alpha value*/
-
- LV_IMG_CF_RESERVED_15, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_16, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_17, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_18, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_19, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_20, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_21, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_22, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_23, /**< Reserved for further use. */
-
- LV_IMG_CF_USER_ENCODED_0, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_1, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_2, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_3, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_4, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_5, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_6, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_7, /**< User holder encoding format. */
-};
-typedef uint8_t lv_img_cf_t;
-
-/** Image header it is compatible with
- * the result from image converter utility*/
-typedef struct
-{
- lv_img_header_t header;
- uint32_t data_size;
- const uint8_t * data;
-} lv_img_dsc_t;
-
-/* Decoder function definitions */
-
-struct _lv_img_decoder;
-struct _lv_img_decoder_dsc;
-
-/**
- * Get info from an image and store in the `header`
- * @param src the image source. Can be a pointer to a C array or a file name (Use
- * `lv_img_src_get_type` to determine the type)
- * @param header store the info here
- * @return LV_RES_OK: info written correctly; LV_RES_INV: failed
- */
-typedef lv_res_t (*lv_img_decoder_info_f_t)(struct _lv_img_decoder * decoder, const void * src,
- lv_img_header_t * header);
-
-/**
- * Open an image for decoding. Prepare it as it is required to read it later
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor. `src`, `style` are already initialized in it.
- */
-typedef lv_res_t (*lv_img_decoder_open_f_t)(struct _lv_img_decoder * decoder, struct _lv_img_decoder_dsc * dsc);
-
-/**
- * Decode `len` pixels starting from the given `x`, `y` coordinates and store them in `buf`.
- * Required only if the "open" function can't return with the whole decoded pixel array.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- * @param x start x coordinate
- * @param y start y coordinate
- * @param len number of pixels to decode
- * @param buf a buffer to store the decoded pixels
- * @return LV_RES_OK: ok; LV_RES_INV: failed
- */
-typedef lv_res_t (*lv_img_decoder_read_line_f_t)(struct _lv_img_decoder * decoder, struct _lv_img_decoder_dsc * dsc,
- lv_coord_t x, lv_coord_t y, lv_coord_t len, uint8_t * buf);
-
-/**
- * Close the pending decoding. Free resources etc.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- */
-typedef void (*lv_img_decoder_close_f_t)(struct _lv_img_decoder * decoder, struct _lv_img_decoder_dsc * dsc);
-
-typedef struct _lv_img_decoder
-{
- lv_img_decoder_info_f_t info_cb;
- lv_img_decoder_open_f_t open_cb;
- lv_img_decoder_read_line_f_t read_line_cb;
- lv_img_decoder_close_f_t close_cb;
-
-#if LV_USE_USER_DATA
- lv_img_decoder_user_data_t user_data;
-#endif
-} lv_img_decoder_t;
-
-/**Describe an image decoding session. Stores data about the decoding*/
-typedef struct _lv_img_decoder_dsc
-{
- /**The decoder which was able to open the image source*/
- lv_img_decoder_t * decoder;
-
- /**The image source. A file path like "S:my_img.png" or pointer to an `lv_img_dsc_t` variable*/
- const void * src;
-
- /**Style to draw the image.*/
- const lv_style_t * style;
-
- /**Type of the source: file or variable. Can be set in `open` function if required*/
- lv_img_src_t src_type;
-
- /**Info about the opened image: color format, size, etc. MUST be set in `open` function*/
- lv_img_header_t header;
-
- /** Pointer to a buffer where the image's data (pixels) are stored in a decoded, plain format.
- * MUST be set in `open` function*/
- const uint8_t * img_data;
-
- /** How much time did it take to open the image. [ms]
- * If not set `lv_img_cache` will measure and set the time to open*/
- uint32_t time_to_open;
-
- /**A text to display instead of the image when the image can't be opened.
- * Can be set in `open` function or set NULL. */
- const char * error_msg;
-
- /**Store any custom data here is required*/
- void * user_data;
-} lv_img_decoder_dsc_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the image decoder module
- */
-void lv_img_decoder_init(void);
-
-/**
- * Get information about an image.
- * Try the created image decoder one by one. Once one is able to get info that info will be used.
- * @param src the image source. Can be
- * 1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered via `lv_fs_add_drv()`)
- * 2) Variable: Pointer to an `lv_img_dsc_t` variable
- * 3) Symbol: E.g. `LV_SYMBOL_OK`
- * @param header the image info will be stored here
- * @return LV_RES_OK: success; LV_RES_INV: wasn't able to get info about the image
- */
-lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header);
-
-/**
- * Open an image.
- * Try the created image decoder one by one. Once one is able to open the image that decoder is save in `dsc`
- * @param dsc describe a decoding session. Simply a pointer to an `lv_img_decoder_dsc_t` variable.
- * @param src the image source. Can be
- * 1) File name: E.g. "S:folder/img1.png" (The drivers needs to registered via `lv_fs_add_drv()`)
- * 2) Variable: Pointer to an `lv_img_dsc_t` variable
- * 3) Symbol: E.g. `LV_SYMBOL_OK`
- * @param style the style of the image
- * @return LV_RES_OK: opened the image. `dsc->img_data` and `dsc->header` are set.
- * LV_RES_INV: none of the registered image decoders were able to open the image.
- */
-lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style);
-
-/**
- * Read a line from an opened image
- * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
- * @param x start X coordinate (from left)
- * @param y start Y coordinate (from top)
- * @param len number of pixels to read
- * @param buf store the data here
- * @return LV_RES_OK: success; LV_RES_INV: an error occurred
- */
-lv_res_t lv_img_decoder_read_line(lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_coord_t len,
- uint8_t * buf);
-
-/**
- * Close a decoding session
- * @param dsc pointer to `lv_img_decoder_dsc_t` used in `lv_img_decoder_open`
- */
-void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc);
-
-/**
- * Create a new image decoder
- * @return pointer to the new image decoder
- */
-lv_img_decoder_t * lv_img_decoder_create(void);
-
-/**
- * Delete an image decoder
- * @param decoder pointer to an image decoder
- */
-void lv_img_decoder_delete(lv_img_decoder_t * decoder);
-
-/**
- * Set a callback to get information about the image
- * @param decoder pointer to an image decoder
- * @param info_cb a function to collect info about an image (fill an `lv_img_header_t` struct)
- */
-void lv_img_decoder_set_info_cb(lv_img_decoder_t * decoder, lv_img_decoder_info_f_t info_cb);
-
-/**
- * Set a callback to open an image
- * @param decoder pointer to an image decoder
- * @param open_cb a function to open an image
- */
-void lv_img_decoder_set_open_cb(lv_img_decoder_t * decoder, lv_img_decoder_open_f_t open_cb);
-
-/**
- * Set a callback to a decoded line of an image
- * @param decoder pointer to an image decoder
- * @param read_line_cb a function to read a line of an image
- */
-void lv_img_decoder_set_read_line_cb(lv_img_decoder_t * decoder, lv_img_decoder_read_line_f_t read_line_cb);
-
-/**
- * Set a callback to close a decoding session. E.g. close files and free other resources.
- * @param decoder pointer to an image decoder
- * @param close_cb a function to close a decoding session
- */
-void lv_img_decoder_set_close_cb(lv_img_decoder_t * decoder, lv_img_decoder_close_f_t close_cb);
-
-
-
-/**
- * Get info about a built-in image
- * @param decoder the decoder where this function belongs
- * @param src the image source: pointer to an `lv_img_dsc_t` variable, a file path or a symbol
- * @param header store the image data here
- * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: unknown format or other error.
- */
-lv_res_t lv_img_decoder_built_in_info(lv_img_decoder_t * decoder, const void * src, lv_img_header_t * header);
-
-/**
- * Open a built in image
- * @param decoder the decoder where this function belongs
- * @param dsc pointer to decoder descriptor. `src`, `style` are already initialized in it.
- * @return LV_RES_OK: the info is successfully stored in `header`; LV_RES_INV: unknown format or other error.
- */
-lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc);
-
-/**
- * Decode `len` pixels starting from the given `x`, `y` coordinates and store them in `buf`.
- * Required only if the "open" function can't return with the whole decoded pixel array.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- * @param x start x coordinate
- * @param y start y coordinate
- * @param len number of pixels to decode
- * @param buf a buffer to store the decoded pixels
- * @return LV_RES_OK: ok; LV_RES_INV: failed
- */
-lv_res_t lv_img_decoder_built_in_read_line(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc, lv_coord_t x,
- lv_coord_t y, lv_coord_t len, uint8_t * buf);
-
-/**
- * Close the pending decoding. Free resources etc.
- * @param decoder pointer to the decoder the function associated with
- * @param dsc pointer to decoder descriptor
- */
-void lv_img_decoder_built_in_close(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_font/lv_font.c b/src/libs/lvgl/src/lv_font/lv_font.c
deleted file mode 100644
index c2d6eac8..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * @file lv_font.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_font.h"
-#include "../lv_misc/lv_utils.h"
-#include "../lv_misc/lv_log.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Return with the bitmap of a font.
- * @param font_p pointer to a font
- * @param letter an UNICODE character code
- * @return pointer to the bitmap of the letter
- */
-const uint8_t * lv_font_get_glyph_bitmap(const lv_font_t * font_p, uint32_t letter)
-{
- return font_p->get_glyph_bitmap(font_p, letter);
-}
-
-/**
- * Get the descriptor of a glyph
- * @param font_p pointer to font
- * @param dsc_out store the result descriptor here
- * @param letter an UNICODE letter code
- * @return true: descriptor is successfully loaded into `dsc_out`.
- * false: the letter was not found, no data is loaded to `dsc_out`
- */
-bool lv_font_get_glyph_dsc(const lv_font_t * font_p, lv_font_glyph_dsc_t * dsc_out, uint32_t letter, uint32_t letter_next)
-{
- return font_p->get_glyph_dsc(font_p, dsc_out, letter, letter_next);
-}
-
-/**
- * Get the width of a glyph with kerning
- * @param font pointer to a font
- * @param letter an UNICODE letter
- * @param letter_next the next letter after `letter`. Used for kerning
- * @return the width of the glyph
- */
-uint16_t lv_font_get_glyph_width(const lv_font_t * font, uint32_t letter, uint32_t letter_next)
-{
- lv_font_glyph_dsc_t g;
- bool ret;
- ret = lv_font_get_glyph_dsc(font, &g, letter, letter_next);
- if(ret) return g.adv_w;
- else return 0;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_font/lv_font.h b/src/libs/lvgl/src/lv_font/lv_font.h
deleted file mode 100644
index ee3300b8..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * @file lv_font.h
- *
- */
-
-#ifndef LV_FONT_H
-#define LV_FONT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stddef.h>
-#include <stdbool.h>
-
-#include "lv_symbol_def.h"
-
-/*********************
- * DEFINES
- *********************/
-/*Number of fractional digits in the advanced width (`adv_w`) field of `lv_font_glyph_dsc_t`*/
-#define LV_FONT_WIDTH_FRACT_DIGIT 4
-
-#define LV_FONT_KERN_POSITIVE 0
-#define LV_FONT_KERN_NEGATIVE 1
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*------------------
- * General types
- *-----------------*/
-
-/** Describes the properties of a glyph. */
-typedef struct
-{
- uint16_t adv_w; /**< The glyph needs this space. Draw the next glyph after this width. 8 bit integer, 4 bit fractional */
- uint8_t box_w; /**< Width of the glyph's bounding box*/
- uint8_t box_h; /**< Height of the glyph's bounding box*/
- int8_t ofs_x; /**< x offset of the bounding box*/
- int8_t ofs_y; /**< y offset of the bounding box*/
- uint8_t bpp; /**< Bit-per-pixel: 1, 2, 4, 8*/
-}lv_font_glyph_dsc_t;
-
-
-/** The bitmaps might be upscaled by 3 to achieve subpixel rendering. */
-enum {
- LV_FONT_SUBPX_NONE,
- LV_FONT_SUBPX_HOR,
- LV_FONT_SUBPX_VER,
- LV_FONT_SUBPX_BOTH,
-};
-
-typedef uint8_t lv_font_subpx_t;
-
-/** Describe the properties of a font*/
-typedef struct _lv_font_struct
-{
- /** Get a glyph's descriptor from a font*/
- bool (*get_glyph_dsc)(const struct _lv_font_struct *, lv_font_glyph_dsc_t *, uint32_t letter, uint32_t letter_next);
-
- /** Get a glyph's bitmap from a font*/
- const uint8_t * (*get_glyph_bitmap)(const struct _lv_font_struct *, uint32_t);
-
- /*Pointer to the font in a font pack (must have the same line height)*/
- uint8_t line_height; /**< The real line height where any text fits*/
- int8_t base_line; /**< Base line measured from the top of the line_height*/
- uint8_t subpx :2; /**< An element of `lv_font_subpx_t`*/
- void * dsc; /**< Store implementation specific or run_time data or caching here*/
-#if LV_USE_USER_DATA
- lv_font_user_data_t user_data; /**< Custom user data for font. */
-#endif
-
-
-} lv_font_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Return with the bitmap of a font.
- * @param font_p pointer to a font
- * @param letter an UNICODE character code
- * @return pointer to the bitmap of the letter
- */
-const uint8_t * lv_font_get_glyph_bitmap(const lv_font_t * font_p, uint32_t letter);
-
-/**
- * Get the descriptor of a glyph
- * @param font_p pointer to font
- * @param dsc_out store the result descriptor here
- * @param letter an UNICODE letter code
- * @return true: descriptor is successfully loaded into `dsc_out`.
- * false: the letter was not found, no data is loaded to `dsc_out`
- */
-bool lv_font_get_glyph_dsc(const lv_font_t * font_p, lv_font_glyph_dsc_t * dsc_out, uint32_t letter, uint32_t letter_next);
-
-/**
- * Get the width of a glyph with kerning
- * @param font pointer to a font
- * @param letter an UNICODE letter
- * @param letter_next the next letter after `letter`. Used for kerning
- * @return the width of the glyph
- */
-uint16_t lv_font_get_glyph_width(const lv_font_t * font, uint32_t letter, uint32_t letter_next);
-
-/**
- * Get the line height of a font. All characters fit into this height
- * @param font_p pointer to a font
- * @return the height of a font
- */
-static inline uint8_t lv_font_get_line_height(const lv_font_t * font_p)
-{
- return font_p->line_height;
-}
-
-/**********************
- * MACROS
- **********************/
-
-#define LV_FONT_DECLARE(font_name) extern lv_font_t font_name;
-
-#if LV_FONT_ROBOTO_12
-LV_FONT_DECLARE(lv_font_roboto_12)
-#endif
-
-#if LV_FONT_ROBOTO_16
-LV_FONT_DECLARE(lv_font_roboto_16)
-#endif
-
-#if LV_FONT_ROBOTO_22
-LV_FONT_DECLARE(lv_font_roboto_22)
-#endif
-
-#if LV_FONT_ROBOTO_28
-LV_FONT_DECLARE(lv_font_roboto_28)
-#endif
-
-#if LV_FONT_UNSCII_8
-LV_FONT_DECLARE(lv_font_unscii_8)
-#endif
-
-/*Declare the custom (user defined) fonts*/
-#ifdef LV_FONT_CUSTOM_DECLARE
-LV_FONT_CUSTOM_DECLARE
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*USE_FONT*/
diff --git a/src/libs/lvgl/src/lv_font/lv_font.mk b/src/libs/lvgl/src/lv_font/lv_font.mk
deleted file mode 100644
index 836d86a6..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-CSRCS += lv_font.c
-CSRCS += lv_font_fmt_txt.c
-CSRCS += lv_font_roboto_12.c
-CSRCS += lv_font_roboto_16.c
-CSRCS += lv_font_roboto_22.c
-CSRCS += lv_font_roboto_28.c
-CSRCS += lv_font_unscii_8.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_font
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_font
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_font"
diff --git a/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.c b/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.c
deleted file mode 100644
index 78fcccdd..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/**
- * @file lv_font.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_font.h"
-#include "lv_font_fmt_txt.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_misc/lv_types.h"
-#include "../lv_misc/lv_log.h"
-#include "../lv_misc/lv_utils.h"
-#include "../lv_misc/lv_mem.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-typedef enum {
- RLE_STATE_SINGLE = 0,
- RLE_STATE_REPEATE,
- RLE_STATE_COUNTER,
-}rle_state_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter);
-static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, uint32_t gid_right);
-static int32_t unicode_list_compare(const void * ref, const void * element);
-static int32_t kern_pair_8_compare(const void * ref, const void * element);
-static int32_t kern_pair_16_compare(const void * ref, const void * element);
-
-static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp);
-static void decompress_line(uint8_t * out, lv_coord_t w);
-static uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len);
-static void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len);
-static void rle_init(const uint8_t * in, uint8_t bpp);
-static uint8_t rle_next(void);
-
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-static uint32_t rle_rdp;
-static const uint8_t * rle_in;
-static uint8_t rle_bpp;
-static uint8_t rle_prev_v;
-static uint8_t rle_cnt;
-static rle_state_t rle_state;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Used as `get_glyph_bitmap` callback in LittelvGL's native font format if the font is uncompressed.
- * @param font pointer to font
- * @param unicode_letter an unicode letter which bitmap should be get
- * @return pointer to the bitmap or NULL if not found
- */
-const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t unicode_letter)
-{
- lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
- uint32_t gid = get_glyph_dsc_id(font, unicode_letter);
- if(!gid) return NULL;
-
- const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
-
- if(fdsc->bitmap_format == LV_FONT_FMT_TXT_PLAIN) {
- if(gdsc) return &fdsc->glyph_bitmap[gdsc->bitmap_index];
- }
- /*Handle compressed bitmap*/
- else
- {
- static uint8_t * buf = NULL;
-
- uint32_t gsize = gdsc->box_w * gdsc->box_h;
- if(gsize == 0) return NULL;
-
- uint32_t buf_size = gsize;
- switch(fdsc->bpp) {
- case 1: buf_size = gsize >> 3; break;
- case 2: buf_size = gsize >> 2; break;
- case 3: buf_size = gsize >> 1; break;
- case 4: buf_size = gsize >> 1; break;
- }
-
- if(lv_mem_get_size(buf) < buf_size) {
- buf = lv_mem_realloc(buf, buf_size);
- LV_ASSERT_MEM(buf);
- if(buf == NULL) return NULL;
- }
-
- decompress(&fdsc->glyph_bitmap[gdsc->bitmap_index], buf, gdsc->box_w , gdsc->box_h, (uint8_t)fdsc->bpp);
- return buf;
- }
-
- /*If not returned earlier then the letter is not found in this font*/
- return NULL;
-}
-
-/**
- * Used as `get_glyph_dsc` callback in LittelvGL's native font format if the font is uncompressed.
- * @param font_p pointer to font
- * @param dsc_out store the result descriptor here
- * @param letter an UNICODE letter code
- * @return true: descriptor is successfully loaded into `dsc_out`.
- * false: the letter was not found, no data is loaded to `dsc_out`
- */
-bool lv_font_get_glyph_dsc_fmt_txt(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next)
-{
- lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
- uint32_t gid = get_glyph_dsc_id(font, unicode_letter);
- if(!gid) return false;
-
- int8_t kvalue = 0;
- if(fdsc->kern_dsc) {
- uint32_t gid_next = get_glyph_dsc_id(font, unicode_letter_next);
- if(gid_next) {
- kvalue = get_kern_value(font, gid, gid_next);
- }
- }
-
- /*Put together a glyph dsc*/
- const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
-
- int32_t kv = ((int32_t)((int32_t)kvalue * fdsc->kern_scale) >> 4);
-
- uint32_t adv_w = gdsc->adv_w + kv;
- adv_w = (adv_w + (1 << 3)) >> 4;
-
- dsc_out->adv_w = adv_w;
- dsc_out->box_h = gdsc->box_h;
- dsc_out->box_w = gdsc->box_w;
- dsc_out->ofs_x = gdsc->ofs_x;
- dsc_out->ofs_y = gdsc->ofs_y;
- dsc_out->bpp = (uint8_t)fdsc->bpp;
-
- return true;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter)
-{
- if(letter == '\0') return 0;
-
- lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
-
- /*Check the cache first*/
- if(letter == fdsc->last_letter) return fdsc->last_glyph_id;
-
- uint16_t i;
- for(i = 0; i < fdsc->cmap_num; i++) {
-
- /*Relative code point*/
- uint32_t rcp = letter - fdsc->cmaps[i].range_start;
- if(rcp > fdsc->cmaps[i].range_length) continue;
- uint32_t glyph_id = 0;
- if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY) {
- glyph_id = fdsc->cmaps[i].glyph_id_start + rcp;
- }
- else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL) {
- const uint8_t * gid_ofs_8 = fdsc->cmaps[i].glyph_id_ofs_list;
- glyph_id = fdsc->cmaps[i].glyph_id_start + gid_ofs_8[rcp];
- }
- else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_SPARSE_TINY) {
- uint8_t * p = lv_utils_bsearch(&rcp, fdsc->cmaps[i].unicode_list, fdsc->cmaps[i].list_length, sizeof(fdsc->cmaps[i].unicode_list[0]), unicode_list_compare);
-
- if(p) {
- lv_uintptr_t ofs = (lv_uintptr_t)(p - (uint8_t *) fdsc->cmaps[i].unicode_list);
- ofs = ofs >> 1; /*The list stores `uint16_t` so the get the index divide by 2*/
- glyph_id = fdsc->cmaps[i].glyph_id_start + ofs;
- }
- }
- else if(fdsc->cmaps[i].type == LV_FONT_FMT_TXT_CMAP_SPARSE_FULL) {
- uint8_t * p = lv_utils_bsearch(&rcp, fdsc->cmaps[i].unicode_list, fdsc->cmaps[i].list_length, sizeof(fdsc->cmaps[i].unicode_list[0]), unicode_list_compare);
-
- if(p) {
- lv_uintptr_t ofs = (lv_uintptr_t)(p - (uint8_t*) fdsc->cmaps[i].unicode_list);
- ofs = ofs >> 1; /*The list stores `uint16_t` so the get the index divide by 2*/
- const uint8_t * gid_ofs_16 = fdsc->cmaps[i].glyph_id_ofs_list;
- glyph_id = fdsc->cmaps[i].glyph_id_start + gid_ofs_16[ofs];
- }
- }
-
- /*Update the cache*/
- fdsc->last_letter = letter;
- fdsc->last_glyph_id = glyph_id;
- return glyph_id;
- }
-
- fdsc->last_letter = letter;
- fdsc->last_glyph_id = 0;
- return 0;
-
-}
-
-static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, uint32_t gid_right)
-{
- lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
-
- int8_t value = 0;
-
- if(fdsc->kern_classes == 0) {
- /*Kern pairs*/
- const lv_font_fmt_txt_kern_pair_t * kdsc = fdsc->kern_dsc;
- if(kdsc->glyph_ids_size == 0) {
- /* Use binary search to find the kern value.
- * The pairs are ordered left_id first, then right_id secondly. */
- const uint8_t * g_ids = kdsc->glyph_ids;
- uint16_t g_id_both = (gid_right << 8) + gid_left; /*Create one number from the ids*/
- uint8_t * kid_p = lv_utils_bsearch(&g_id_both, g_ids, kdsc->pair_cnt, 2, kern_pair_8_compare);
-
- /*If the `g_id_both` were found get its index from the pointer*/
- if(kid_p) {
- lv_uintptr_t ofs = (lv_uintptr_t)(kid_p - g_ids);
- ofs = ofs >> 1; /*ofs is for pair, divide by 2 to refer as a single value*/
- value = kdsc->values[ofs];
- }
- } else if(kdsc->glyph_ids_size == 1) {
- /* Use binary search to find the kern value.
- * The pairs are ordered left_id first, then right_id secondly. */
- const uint16_t * g_ids = kdsc->glyph_ids;
- lv_uintptr_t g_id_both = (uint32_t)((uint32_t)gid_right << 8) + gid_left; /*Create one number from the ids*/
- uint8_t * kid_p = lv_utils_bsearch(&g_id_both, g_ids, kdsc->pair_cnt, 4, kern_pair_16_compare);
-
- /*If the `g_id_both` were found get its index from the pointer*/
- if(kid_p) {
- lv_uintptr_t ofs = (lv_uintptr_t) (kid_p - (const uint8_t *)g_ids);
- ofs = ofs >> 4; /*ofs is 4 byte pairs, divide by 4 to refer as a single value*/
- value = kdsc->values[ofs];
- }
-
- } else {
- /*Invalid value*/
- }
- } else {
- /*Kern classes*/
- const lv_font_fmt_txt_kern_classes_t * kdsc = fdsc->kern_dsc;
- uint8_t left_class = kdsc->left_class_mapping[gid_left];
- uint8_t right_class = kdsc->right_class_mapping[gid_right];
-
- /* If class = 0, kerning not exist for that glyph
- * else got the value form `class_pair_values` 2D array*/
- if(left_class > 0 && right_class > 0) {
- value = kdsc->class_pair_values[(left_class-1)* kdsc->right_class_cnt + (right_class-1)];
- }
-
- }
- return value;
-}
-
-static int32_t kern_pair_8_compare(const void * ref, const void * element)
-{
- const uint8_t * ref8_p = ref;
- const uint8_t * element8_p = element;
-
- /*If the MSB is different it will matter. If not return the diff. of the LSB*/
- if(ref8_p[0] != element8_p[0]) return (int32_t)ref8_p[0] - element8_p[0];
- else return (int32_t) ref8_p[1] - element8_p[1];
-
-}
-
-static int32_t kern_pair_16_compare(const void * ref, const void * element)
-{
- const uint16_t * ref16_p = ref;
- const uint16_t * element16_p = element;
-
- /*If the MSB is different it will matter. If not return the diff. of the LSB*/
- if(ref16_p[0] != element16_p[0]) return (int32_t)ref16_p[0] - element16_p[0];
- else return (int32_t) ref16_p[1] - element16_p[1];
-}
-
-/**
- * The compress a glyph's bitmap
- * @param in the compressed bitmap
- * @param out buffer to store the result
- * @param px_num number of pixels in the glyph (width * height)
- * @param bpp bit per pixel (bpp = 3 will be converted to bpp = 4)
- */
-static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp)
-{
- uint32_t wrp = 0;
- uint8_t wr_size = bpp;
- if(bpp == 3) wr_size = 4;
-
- rle_init(in, bpp);
-
- uint8_t * line_buf = lv_draw_get_buf(w * 2);
- uint8_t * line_buf1 = line_buf;
- uint8_t * line_buf2 = line_buf + w;
-
- decompress_line(line_buf1, w);
-
- lv_coord_t y;
- lv_coord_t x;
- for(x = 0; x < w; x++) {
- bits_write(out,wrp, line_buf1[x], bpp);
- wrp += wr_size;
- }
-
- for(y = 1; y < h; y++) {
- decompress_line(line_buf2, w);
-
- for(x = 0; x < w; x++) {
- line_buf1[x] = line_buf2[x] ^ line_buf1[x];
- bits_write(out,wrp, line_buf1[x], bpp);
- wrp += wr_size;
- }
- }
-}
-
-/**
- * Decompress one line. Store one pixel per byte
- * @param out output buffer
- * @param w width of the line in pixel count
- */
-static void decompress_line(uint8_t * out, lv_coord_t w)
-{
- lv_coord_t i;
- for(i = 0; i < w; i++) {
- out[i] = rle_next();
- }
-}
-
-/**
- * Read bits from an input buffer. The read can cross byte boundary.
- * @param in the input buffer to read from.
- * @param bit_pos index of teh first bit to read.
- * @param len number of bits to read (must be <= 8).
- * @return the read bits
- */
-static uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len)
-{
- uint8_t res = 0;
- uint32_t byte_pos = bit_pos >> 3;
- bit_pos = bit_pos & 0x7;
- uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
- uint16_t in16 = (in[byte_pos] << 8) + in[byte_pos + 1];
-
- res = (in16 >> (16 - bit_pos - len)) & bit_mask;
- return res;
-}
-
-/**
- * Write `val` data to `bit_pos` position of `out`. The write can NOT cross byte boundary.
- * @param out buffer where to write
- * @param bit_pos bit index to write
- * @param val value to write
- * @param len length of bits to write from `val`. (Counted from the LSB).
- * @note `len == 3` will be converted to `len = 4` and `val` will be upscaled too
- */
-static void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len)
-{
- if(len == 3) {
- len = 4;
- switch(val) {
- case 0: val = 0; break;
- case 1: val = 2; break;
- case 2: val = 4; break;
- case 3: val = 6; break;
- case 4: val = 9; break;
- case 5: val = 11; break;
- case 6: val = 13; break;
- case 7: val = 15; break;
- }
- }
-
- uint16_t byte_pos = bit_pos >> 3;
- bit_pos = bit_pos & 0x7;
- bit_pos = 8 - bit_pos - len;
-
- uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
- out[byte_pos] &= ((~bit_mask) << bit_pos);
- out[byte_pos] |= (val << bit_pos);
-}
-
-static void rle_init(const uint8_t * in, uint8_t bpp)
-{
- rle_in = in;
- rle_bpp = bpp;
- rle_state = RLE_STATE_SINGLE;
- rle_rdp = 0;
- rle_prev_v = 0;
- rle_cnt = 0;
-}
-
-static uint8_t rle_next(void)
-{
- uint8_t v = 0;
- uint8_t ret = 0;
-
- if(rle_state == RLE_STATE_SINGLE) {
- ret = get_bits(rle_in, rle_rdp, rle_bpp);
- if(rle_rdp != 0 && rle_prev_v == ret) {
- rle_cnt = 0;
- rle_state = RLE_STATE_REPEATE;
- }
-
- rle_prev_v = ret;
- rle_rdp += rle_bpp;
- }
- else if(rle_state == RLE_STATE_REPEATE) {
- v = get_bits(rle_in, rle_rdp, 1);
- rle_cnt++;
- rle_rdp += 1;
- if(v == 1) {
- ret = rle_prev_v;
- if(rle_cnt == 11) {
- rle_cnt = get_bits(rle_in, rle_rdp, 6);
- rle_rdp += 6;
- if(rle_cnt != 0) {
- rle_state = RLE_STATE_COUNTER;
- } else {
- ret = get_bits(rle_in, rle_rdp, rle_bpp);
- rle_prev_v = ret;
- rle_rdp += rle_bpp;
- rle_state = RLE_STATE_SINGLE;
- }
- }
- } else {
- ret = get_bits(rle_in, rle_rdp, rle_bpp);
- rle_prev_v = ret;
- rle_rdp += rle_bpp;
- rle_state = RLE_STATE_SINGLE;
- }
-
-
- }
- else if(rle_state == RLE_STATE_COUNTER) {
- ret = rle_prev_v;
- rle_cnt--;
- if(rle_cnt == 0) {
- ret = get_bits(rle_in, rle_rdp, rle_bpp);
- rle_prev_v = ret;
- rle_rdp += rle_bpp;
- rle_state = RLE_STATE_SINGLE;
- }
- }
-
- return ret;
-}
-
-/** Code Comparator.
- *
- * Compares the value of both input arguments.
- *
- * @param[in] pRef Pointer to the reference.
- * @param[in] pElement Pointer to the element to compare.
- *
- * @return Result of comparison.
- * @retval < 0 Reference is greater than element.
- * @retval = 0 Reference is equal to element.
- * @retval > 0 Reference is less than element.
- *
- */
-static int32_t unicode_list_compare(const void * ref, const void * element)
-{
- return ((int32_t)(*(uint16_t *)ref)) - ((int32_t)(*(uint16_t *)element));
-}
diff --git a/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.h b/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.h
deleted file mode 100644
index 58c8b592..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_fmt_txt.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * @file lv_font.h
- *
- */
-
-#ifndef LV_FONT_FMT_TXT_H
-#define LV_FONT_FMT_TXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include "lv_font.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** This describes a glyph. */
-typedef struct
-{
-#if LV_FONT_FMT_TXT_LARGE == 0
- uint32_t bitmap_index : 20; /**< Start index of the bitmap. A font can be max 1 MB. */
- uint32_t adv_w :12; /**< Draw the next glyph after this width. 8.4 format (real_value * 16 is stored). */
-#else
- uint32_t bitmap_index; /**< Start index of the bitmap. A font can be max 4 GB. */
- uint32_t adv_w; /**< Draw the next glyph after this width. 28.4 format (real_value * 16 is stored). */
-#endif
- uint8_t box_w; /**< Width of the glyph's bounding box*/
- uint8_t box_h; /**< Height of the glyph's bounding box*/
- int8_t ofs_x; /**< x offset of the bounding box*/
- int8_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
-}lv_font_fmt_txt_glyph_dsc_t;
-
-
-/** Format of font character map. */
-enum {
- LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL,
- LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
- LV_FONT_FMT_TXT_CMAP_SPARSE_FULL,
-};
-
-typedef uint8_t lv_font_fmt_txt_cmap_type_t;
-
-
-/* Map codepoints to a `glyph_dsc`s
- * Several formats are supported to optimize memory usage
- * See https://github.com/littlevgl/lv_font_conv/blob/master/doc/font_spec.md
- */
-typedef struct {
- /** First Unicode character for this range */
- uint32_t range_start;
-
- /** Number of Unicode characters related to this range.
- * Last Unicode character = range_start + range_length - 1*/
- uint16_t range_length;
-
- /** First glyph ID (array index of `glyph_dsc`) for this range */
- uint16_t glyph_id_start;
-
- /*
- According the specification there are 4 formats:
- https://github.com/littlevgl/lv_font_conv/blob/master/doc/font_spec.md
-
- For simplicity introduce "relative code point":
- rcp = codepoint - range_start
-
- and a search function:
- search a "value" in an "array" and returns the index of "value".
-
- Format 0 tiny
- unicode_list == NULL && glyph_id_ofs_list == NULL
- glyph_id = glyph_id_start + rcp
-
- Format 0 full
- unicode_list == NULL && glyph_id_ofs_list != NULL
- glyph_id = glyph_id_start + glyph_id_ofs_list[rcp]
-
- Sparse tiny
- unicode_list != NULL && glyph_id_ofs_list == NULL
- glyph_id = glyph_id_start + search(unicode_list, rcp)
-
- Sparse full
- unicode_list != NULL && glyph_id_ofs_list != NULL
- glyph_id = glyph_id_start + glyph_id_ofs_list[search(unicode_list, rcp)]
- */
-
- const uint16_t * unicode_list;
-
- /** if(type == LV_FONT_FMT_TXT_CMAP_FORMAT0_...) it's `uint8_t *`
- * if(type == LV_FONT_FMT_TXT_CMAP_SPARSE_...) it's `uint16_t *`
- */
- const void * glyph_id_ofs_list;
-
- /** Length of `unicode_list` and/or `glyph_id_ofs_list`*/
- uint16_t list_length;
-
- /** Type of this character map*/
- lv_font_fmt_txt_cmap_type_t type;
-}lv_font_fmt_txt_cmap_t;
-
-/** A simple mapping of kern values from pairs*/
-typedef struct {
- /*To get a kern value of two code points:
- 1. Get the `glyph_id_left` and `glyph_id_right` from `lv_font_fmt_txt_cmap_t
- 2 for(i = 0; i < pair_cnt * 2; i+2)
- if(gylph_ids[i] == glyph_id_left &&
- gylph_ids[i+1] == glyph_id_right)
- return values[i / 2];
- */
- const void * glyph_ids;
- const int8_t * values;
- uint32_t pair_cnt :24;
- uint32_t glyph_ids_size :2; /*0: `glyph_ids` is stored as `uint8_t`; 1: as `uint16_t`*/
-}lv_font_fmt_txt_kern_pair_t;
-
-/** More complex but more optimal class based kern value storage*/
-typedef struct {
- /*To get a kern value of two code points:
- 1. Get the `glyph_id_left` and `glyph_id_right` from `lv_font_fmt_txt_cmap_t
- 2 Get the class of the left and right glyphs as `left_class` and `right_class`
- left_class = left_class_mapping[glyph_id_left];
- right_class = right_class_mapping[glyph_id_right];
- 3. value = class_pair_values[(left_class-1)*right_class_cnt + (righ_class-1)]
- */
-
- const int8_t * class_pair_values; /*left_class_num * right_class_num value*/
- const uint8_t * left_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
- const uint8_t * right_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
- uint8_t left_class_cnt;
- uint8_t right_class_cnt;
-}lv_font_fmt_txt_kern_classes_t;
-
-
-/** Bitmap formats*/
-typedef enum {
- LV_FONT_FMT_TXT_PLAIN = 0,
- LV_FONT_FMT_TXT_COMPRESSED = 1,
-}lv_font_fmt_txt_bitmap_format_t;
-
-
-/*Describe store additional data for fonts */
-typedef struct {
- /*The bitmaps os all glyphs*/
- const uint8_t * glyph_bitmap;
-
- /*Describe the glyphs*/
- const lv_font_fmt_txt_glyph_dsc_t * glyph_dsc;
-
- /* Map the glyphs to Unicode characters.
- * Array of `lv_font_cmap_fmt_txt_t` variables*/
- const lv_font_fmt_txt_cmap_t * cmaps;
-
- /* Store kerning values.
- * Can be `lv_font_fmt_txt_kern_pair_t * or `lv_font_kern_classes_fmt_txt_t *`
- * depending on `kern_classes`
- */
- const void * kern_dsc;
-
- /*Scale kern values in 12.4 format*/
- uint16_t kern_scale;
-
- /*Number of cmap tables*/
- uint16_t cmap_num :10;
-
- /*Bit per pixel: 1, 2, 3, 4*/
- uint16_t bpp :3;
-
- /*Type of `kern_dsc`*/
- uint16_t kern_classes :1;
-
- /*
- * storage format of the bitmap
- * from `lv_font_fmt_txt_bitmap_format_t`
- */
- uint16_t bitmap_format :2;
-
- /*Cache the last letter and is glyph id*/
- uint32_t last_letter;
- uint32_t last_glyph_id;
-
-}lv_font_fmt_txt_dsc_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Used as `get_glyph_bitmap` callback in LittelvGL's native font format if the font is uncompressed.
- * @param font pointer to font
- * @param unicode_letter an unicode letter which bitmap should be get
- * @return pointer to the bitmap or NULL if not found
- */
-const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t letter);
-
-/**
- * Used as `get_glyph_dsc` callback in LittelvGL's native font format if the font is uncompressed.
- * @param font_p pointer to font
- * @param dsc_out store the result descriptor here
- * @param letter an UNICODE letter code
- * @return true: descriptor is successfully loaded into `dsc_out`.
- * false: the letter was not found, no data is loaded to `dsc_out`
- */
-bool lv_font_get_glyph_dsc_fmt_txt(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next);
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * ADD BUILT IN FONTS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_FONT_FMT_TXT_H*/
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_12.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_12.c
deleted file mode 100644
index 3da8e899..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_12.c
+++ /dev/null
@@ -1,1628 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 12 px
- * Bpp: 4
- * Opts: --no-compress --no-prefilter --bpp 4 --size 12 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_12.c --force-fast-kern-format
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_12
-#define LV_FONT_ROBOTO_12 1
-#endif
-
-#if LV_FONT_ROBOTO_12
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0xf, 0x10, 0xf1, 0xf, 0x10, 0xf1, 0xf, 0x0,
- 0xf0, 0x9, 0x0, 0x30, 0xe, 0x10,
-
- /* U+22 "\"" */
- 0x39, 0x93, 0x39, 0x92, 0x38, 0x91, 0x1, 0x10,
-
- /* U+23 "#" */
- 0x0, 0x1b, 0xb, 0x10, 0x5, 0x70, 0xd0, 0x1e,
- 0xfe, 0xef, 0xd0, 0xb, 0x15, 0x70, 0x0, 0xd0,
- 0x84, 0x8, 0xef, 0xef, 0xe7, 0x4, 0x90, 0xd0,
- 0x0, 0x66, 0xc, 0x0, 0x9, 0x43, 0xa0, 0x0,
-
- /* U+24 "$" */
- 0x0, 0xd, 0x0, 0x0, 0x6, 0xf6, 0x0, 0xa,
- 0xc7, 0xd8, 0x0, 0xf2, 0x3, 0xe0, 0xe, 0x30,
- 0x5, 0x0, 0x6f, 0x81, 0x0, 0x0, 0x3a, 0xf5,
- 0x0, 0x0, 0x4, 0xe0, 0x4d, 0x0, 0xf, 0x0,
- 0xe7, 0x4a, 0xc0, 0x2, 0xaf, 0x91, 0x0, 0x0,
- 0xd0, 0x0,
-
- /* U+25 "%" */
- 0xb, 0xc8, 0x0, 0x0, 0x5, 0x70, 0xc0, 0x28,
- 0x0, 0x58, 0xc, 0xb, 0x10, 0x0, 0x9c, 0x65,
- 0x70, 0x0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0,
- 0x94, 0x8c, 0x80, 0x0, 0x3a, 0x2b, 0xa, 0x30,
- 0xb, 0x12, 0xa0, 0x93, 0x0, 0x0, 0x9, 0xca,
- 0x0,
-
- /* U+26 "&" */
- 0x2, 0xcf, 0xa0, 0x0, 0x9, 0x90, 0xb6, 0x0,
- 0xa, 0x80, 0xc4, 0x0, 0x3, 0xec, 0x70, 0x0,
- 0x5, 0xee, 0x0, 0x30, 0x2f, 0x29, 0xb2, 0xd0,
- 0x5b, 0x0, 0xcc, 0x90, 0x2e, 0x10, 0x5f, 0x50,
- 0x5, 0xdd, 0xc7, 0xe1,
-
- /* U+27 "'" */
- 0x67, 0x67, 0x66, 0x0,
-
- /* U+28 "(" */
- 0x0, 0x2, 0x0, 0x5a, 0x1, 0xd0, 0x8, 0x70,
- 0xd, 0x30, 0x1f, 0x0, 0x2e, 0x0, 0x3e, 0x0,
- 0x2f, 0x0, 0xf, 0x10, 0xb, 0x50, 0x5, 0xa0,
- 0x0, 0xc4, 0x0, 0x19,
-
- /* U+29 ")" */
- 0x20, 0x0, 0x87, 0x0, 0xd, 0x20, 0x6, 0x90,
- 0x2, 0xe0, 0x0, 0xe2, 0x0, 0xd4, 0x0, 0xc4,
- 0x0, 0xd3, 0x0, 0xf1, 0x3, 0xd0, 0x9, 0x60,
- 0x2c, 0x0, 0x82, 0x0,
-
- /* U+2A "*" */
- 0x0, 0xd0, 0x4, 0x1c, 0x4, 0x7d, 0xfe, 0x90,
- 0x6e, 0x80, 0x1d, 0x1d, 0x20, 0x10, 0x10,
-
- /* U+2B "+" */
- 0x0, 0x1b, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0,
- 0x2e, 0x0, 0x8, 0xff, 0xff, 0xf4, 0x12, 0x4e,
- 0x22, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e, 0x0,
- 0x0,
-
- /* U+2C "," */
- 0x4c, 0x5b, 0xa5, 0x0,
-
- /* U+2D "-" */
- 0xbf, 0xf1,
-
- /* U+2E "." */
- 0x4, 0x1, 0xe1,
-
- /* U+2F "/" */
- 0x0, 0x8, 0x60, 0x0, 0xd1, 0x0, 0x3b, 0x0,
- 0x9, 0x50, 0x0, 0xd0, 0x0, 0x4a, 0x0, 0xa,
- 0x40, 0x0, 0xd0, 0x0, 0x59, 0x0, 0xb, 0x30,
- 0x0,
-
- /* U+30 "0" */
- 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x9, 0xa0, 0x3d,
- 0x0, 0x2f, 0x5, 0xc0, 0x0, 0xf0, 0x5c, 0x0,
- 0xf, 0x14, 0xc0, 0x0, 0xf0, 0x3e, 0x0, 0x2f,
- 0x0, 0xe5, 0x9, 0xa0, 0x3, 0xdf, 0xb1, 0x0,
-
- /* U+31 "1" */
- 0x5, 0xc4, 0xea, 0xe4, 0x10, 0xd4, 0x0, 0xd4,
- 0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4,
- 0x0, 0xd4,
-
- /* U+32 "2" */
- 0x5, 0xdf, 0xb2, 0x2, 0xe3, 0x9, 0xb0, 0x48,
- 0x0, 0x3d, 0x0, 0x0, 0x7, 0x90, 0x0, 0x2,
- 0xe1, 0x0, 0x1, 0xd4, 0x0, 0x0, 0xc6, 0x0,
- 0x0, 0xb8, 0x0, 0x0, 0x4f, 0xff, 0xff, 0x40,
-
- /* U+33 "3" */
- 0x5, 0xdf, 0xb1, 0x2e, 0x20, 0x99, 0x25, 0x0,
- 0x4c, 0x0, 0x0, 0xa8, 0x0, 0xbf, 0xd1, 0x0,
- 0x0, 0x9a, 0x24, 0x0, 0x2e, 0x3e, 0x20, 0x8b,
- 0x6, 0xef, 0xb1,
-
- /* U+34 "4" */
- 0x0, 0x3, 0xf4, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x6a, 0xc4, 0x0, 0x1d, 0x1c, 0x40, 0x9, 0x70,
- 0xc4, 0x3, 0xd0, 0xc, 0x40, 0xaf, 0xff, 0xff,
- 0x70, 0x0, 0xc, 0x40, 0x0, 0x0, 0xc4, 0x0,
-
- /* U+35 "5" */
- 0x6, 0xff, 0xff, 0x0, 0x88, 0x11, 0x10, 0x9,
- 0x60, 0x0, 0x0, 0xbc, 0xec, 0x30, 0x6, 0x62,
- 0x8e, 0x0, 0x0, 0x0, 0xe2, 0x7, 0x0, 0xd,
- 0x30, 0xd6, 0x5, 0xe0, 0x2, 0xcf, 0xc3, 0x0,
-
- /* U+36 "6" */
- 0x0, 0x4c, 0xe0, 0x0, 0x4e, 0x51, 0x0, 0xd,
- 0x40, 0x0, 0x1, 0xf9, 0xec, 0x20, 0x3f, 0x60,
- 0x7d, 0x3, 0xe0, 0x0, 0xf1, 0x1f, 0x0, 0xf,
- 0x10, 0xb8, 0x7, 0xc0, 0x1, 0xcf, 0xc2, 0x0,
-
- /* U+37 "7" */
- 0x8f, 0xff, 0xff, 0x30, 0x0, 0x2, 0xd0, 0x0,
- 0x0, 0x97, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x7,
- 0x90, 0x0, 0x0, 0xe2, 0x0, 0x0, 0x5b, 0x0,
- 0x0, 0xc, 0x50, 0x0, 0x3, 0xe0, 0x0, 0x0,
-
- /* U+38 "8" */
- 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x9, 0xa0, 0x1f,
- 0x0, 0x3d, 0x0, 0xd5, 0x9, 0x90, 0x4, 0xff,
- 0xe1, 0x1, 0xe4, 0x7, 0xb0, 0x4c, 0x0, 0xf,
- 0x2, 0xf3, 0x6, 0xd0, 0x5, 0xdf, 0xc3, 0x0,
-
- /* U+39 "9" */
- 0x4, 0xdf, 0x90, 0x1f, 0x31, 0xc7, 0x5b, 0x0,
- 0x4d, 0x5b, 0x0, 0x2e, 0x1f, 0x30, 0xae, 0x5,
- 0xde, 0x8d, 0x0, 0x0, 0x79, 0x0, 0x6, 0xe2,
- 0x3, 0xeb, 0x30,
-
- /* U+3A ":" */
- 0x1e, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x40, 0x1e, 0x0,
-
- /* U+3B ";" */
- 0x3d, 0x4, 0x0, 0x0, 0x0, 0x18, 0x3d, 0x79,
- 0x51,
-
- /* U+3C "<" */
- 0x0, 0x2, 0x93, 0x2, 0x9f, 0x91, 0x6e, 0x71,
- 0x0, 0x4d, 0xa3, 0x0, 0x0, 0x6e, 0xc1, 0x0,
- 0x0, 0x62,
-
- /* U+3D "=" */
- 0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x0, 0x0,
- 0x0, 0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11,
-
- /* U+3E ">" */
- 0x3a, 0x20, 0x0, 0x8, 0xea, 0x30, 0x0, 0x6,
- 0xd9, 0x0, 0x3a, 0xe6, 0x1c, 0xe7, 0x0, 0x26,
- 0x0, 0x0,
-
- /* U+3F "?" */
- 0x9, 0xfe, 0x60, 0x6c, 0x13, 0xf0, 0x11, 0x0,
- 0xe2, 0x0, 0x5, 0xd0, 0x0, 0x4e, 0x20, 0x0,
- 0xc5, 0x0, 0x0, 0x51, 0x0, 0x0, 0x30, 0x0,
- 0x0, 0xc3, 0x0,
-
- /* U+40 "@" */
- 0x0, 0x6, 0xcd, 0xda, 0x10, 0x0, 0xa, 0x81,
- 0x0, 0x4c, 0x10, 0x5, 0x90, 0x0, 0x0, 0x39,
- 0x0, 0xc1, 0x5, 0xcb, 0x20, 0xb0, 0x1c, 0x2,
- 0xc0, 0x86, 0xa, 0x14, 0x90, 0x95, 0x9, 0x40,
- 0x92, 0x58, 0xc, 0x20, 0xa2, 0xb, 0x14, 0x90,
- 0xb3, 0xe, 0x21, 0xb0, 0x1c, 0x4, 0xda, 0x5d,
- 0xc2, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xd3, 0x0, 0x11, 0x0, 0x0, 0x2, 0xad, 0xcc,
- 0x30, 0x0,
-
- /* U+41 "A" */
- 0x0, 0xc, 0x90, 0x0, 0x0, 0x2e, 0xe0, 0x0,
- 0x0, 0x79, 0xc4, 0x0, 0x0, 0xd4, 0x7a, 0x0,
- 0x3, 0xe0, 0x1f, 0x10, 0x9, 0xa0, 0xc, 0x60,
- 0xe, 0xff, 0xff, 0xc0, 0x4e, 0x0, 0x1, 0xf2,
- 0xa8, 0x0, 0x0, 0xb7,
-
- /* U+42 "B" */
- 0xf, 0xff, 0xe8, 0x0, 0xf1, 0x2, 0xd5, 0xf,
- 0x10, 0x9, 0x80, 0xf1, 0x2, 0xe4, 0xf, 0xff,
- 0xfb, 0x0, 0xf1, 0x1, 0xb8, 0xf, 0x10, 0x5,
- 0xc0, 0xf1, 0x1, 0xb9, 0xf, 0xff, 0xea, 0x0,
-
- /* U+43 "C" */
- 0x0, 0x8e, 0xea, 0x10, 0x9, 0xb2, 0x19, 0xc0,
- 0x1f, 0x10, 0x0, 0xe2, 0x3e, 0x0, 0x0, 0x0,
- 0x4d, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0,
- 0x1f, 0x10, 0x0, 0xe2, 0x9, 0xb2, 0x18, 0xc0,
- 0x0, 0x9f, 0xea, 0x10,
-
- /* U+44 "D" */
- 0xf, 0xff, 0xd4, 0x0, 0xf, 0x10, 0x4e, 0x40,
- 0xf, 0x10, 0x4, 0xd0, 0xf, 0x10, 0x0, 0xf1,
- 0xf, 0x10, 0x0, 0xf2, 0xf, 0x10, 0x0, 0xf1,
- 0xf, 0x10, 0x5, 0xd0, 0xf, 0x10, 0x4e, 0x40,
- 0xf, 0xff, 0xd4, 0x0,
-
- /* U+45 "E" */
- 0xf, 0xff, 0xff, 0x50, 0xf1, 0x0, 0x0, 0xf,
- 0x10, 0x0, 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff,
- 0xfd, 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0,
- 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff, 0xff, 0x60,
-
- /* U+46 "F" */
- 0xf, 0xff, 0xff, 0x40, 0xf1, 0x0, 0x0, 0xf,
- 0x10, 0x0, 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff,
- 0xfa, 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0,
- 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0, 0x0,
-
- /* U+47 "G" */
- 0x0, 0x8e, 0xfb, 0x20, 0x9, 0xb2, 0x7, 0xe0,
- 0x1f, 0x20, 0x0, 0x61, 0x3e, 0x0, 0x0, 0x0,
- 0x4d, 0x0, 0xcf, 0xf4, 0x3e, 0x0, 0x0, 0xd4,
- 0xf, 0x20, 0x0, 0xd4, 0x8, 0xd2, 0x4, 0xf3,
- 0x0, 0x7e, 0xfd, 0x60,
-
- /* U+48 "H" */
- 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
- 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
- 0xf, 0xff, 0xff, 0xf8, 0xf, 0x10, 0x0, 0x98,
- 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
- 0xf, 0x10, 0x0, 0x98,
-
- /* U+49 "I" */
- 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
- 0xe3,
-
- /* U+4A "J" */
- 0x0, 0x0, 0x7b, 0x0, 0x0, 0x7b, 0x0, 0x0,
- 0x7b, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x7b, 0x0,
- 0x0, 0x7b, 0x64, 0x0, 0x7a, 0x7c, 0x12, 0xd6,
- 0x9, 0xee, 0x90,
-
- /* U+4B "K" */
- 0xf, 0x10, 0x8, 0xc0, 0xf, 0x10, 0x5e, 0x10,
- 0xf, 0x13, 0xe3, 0x0, 0xf, 0x4e, 0x40, 0x0,
- 0xf, 0xef, 0x40, 0x0, 0xf, 0x85, 0xe1, 0x0,
- 0xf, 0x10, 0x9b, 0x0, 0xf, 0x10, 0xd, 0x70,
- 0xf, 0x10, 0x3, 0xf3,
-
- /* U+4C "L" */
- 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
- 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20,
- 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20, 0x0,
- 0x0, 0xf2, 0x0, 0x0, 0xf, 0xff, 0xff, 0x20,
-
- /* U+4D "M" */
- 0xf, 0xa0, 0x0, 0x2, 0xf7, 0xf, 0xf0, 0x0,
- 0x8, 0xf7, 0xf, 0xb6, 0x0, 0xe, 0xb7, 0xf,
- 0x5c, 0x0, 0x4c, 0x97, 0xf, 0x1e, 0x20, 0xb6,
- 0x97, 0xf, 0x18, 0x81, 0xe0, 0xa7, 0xf, 0x12,
- 0xe7, 0x90, 0xa7, 0xf, 0x10, 0xcf, 0x30, 0xa7,
- 0xf, 0x10, 0x6d, 0x0, 0xa7,
-
- /* U+4E "N" */
- 0xf, 0x60, 0x0, 0x98, 0xf, 0xf1, 0x0, 0x98,
- 0xf, 0xba, 0x0, 0x98, 0xf, 0x3e, 0x40, 0x98,
- 0xf, 0x25, 0xd0, 0x98, 0xf, 0x20, 0xb8, 0x98,
- 0xf, 0x20, 0x2f, 0xb8, 0xf, 0x20, 0x8, 0xf8,
- 0xf, 0x20, 0x0, 0xd8,
-
- /* U+4F "O" */
- 0x0, 0x8e, 0xfa, 0x10, 0x8, 0xc3, 0x29, 0xc0,
- 0xf, 0x20, 0x0, 0xd4, 0x3e, 0x0, 0x0, 0xa7,
- 0x4d, 0x0, 0x0, 0x98, 0x3e, 0x0, 0x0, 0xa7,
- 0xf, 0x20, 0x0, 0xd4, 0x8, 0xc2, 0x19, 0xc0,
- 0x0, 0x8e, 0xfa, 0x10,
-
- /* U+50 "P" */
- 0xf, 0xff, 0xfb, 0x20, 0xf, 0x10, 0x8, 0xd0,
- 0xf, 0x10, 0x0, 0xf1, 0xf, 0x10, 0x7, 0xe0,
- 0xf, 0xff, 0xfc, 0x30, 0xf, 0x10, 0x0, 0x0,
- 0xf, 0x10, 0x0, 0x0, 0xf, 0x10, 0x0, 0x0,
- 0xf, 0x10, 0x0, 0x0,
-
- /* U+51 "Q" */
- 0x0, 0x9e, 0xfa, 0x10, 0x9, 0xc2, 0x2a, 0xc0,
- 0x1f, 0x10, 0x0, 0xe3, 0x4d, 0x0, 0x0, 0xb6,
- 0x5c, 0x0, 0x0, 0xa7, 0x4d, 0x0, 0x0, 0xb7,
- 0x1f, 0x10, 0x0, 0xe3, 0x9, 0xb2, 0x19, 0xc0,
- 0x0, 0x8e, 0xff, 0x50, 0x0, 0x0, 0x5, 0xf3,
- 0x0, 0x0, 0x0, 0x20,
-
- /* U+52 "R" */
- 0xf, 0xff, 0xe9, 0x0, 0xf, 0x10, 0x1b, 0x80,
- 0xf, 0x10, 0x6, 0xc0, 0xf, 0x10, 0x1c, 0x80,
- 0xf, 0xff, 0xf9, 0x0, 0xf, 0x10, 0xa8, 0x0,
- 0xf, 0x10, 0x2e, 0x0, 0xf, 0x10, 0xb, 0x70,
- 0xf, 0x10, 0x4, 0xe0,
-
- /* U+53 "S" */
- 0x3, 0xcf, 0xd6, 0x1, 0xf5, 0x3, 0xe4, 0x3e,
- 0x0, 0x5, 0x60, 0xd9, 0x20, 0x0, 0x1, 0x8e,
- 0xc4, 0x0, 0x0, 0x5, 0xe4, 0x57, 0x0, 0x8,
- 0x93, 0xf4, 0x2, 0xc7, 0x4, 0xcf, 0xe8, 0x0,
-
- /* U+54 "T" */
- 0xbf, 0xff, 0xff, 0xe0, 0x0, 0xf2, 0x0, 0x0,
- 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
- 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20,
- 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20, 0x0,
-
- /* U+55 "U" */
- 0x2f, 0x0, 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x2f,
- 0x0, 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x2f, 0x0,
- 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x1f, 0x0, 0x3,
- 0xe0, 0xc8, 0x1, 0xb9, 0x2, 0xbf, 0xe9, 0x0,
-
- /* U+56 "V" */
- 0xa8, 0x0, 0x0, 0xe4, 0x4d, 0x0, 0x3, 0xe0,
- 0xe, 0x20, 0x8, 0x90, 0x9, 0x80, 0xd, 0x40,
- 0x4, 0xd0, 0x3e, 0x0, 0x0, 0xe2, 0x88, 0x0,
- 0x0, 0x87, 0xd3, 0x0, 0x0, 0x3e, 0xd0, 0x0,
- 0x0, 0xd, 0x70, 0x0,
-
- /* U+57 "W" */
- 0x89, 0x0, 0x3f, 0x0, 0xd, 0x44, 0xc0, 0x7,
- 0xf4, 0x1, 0xf0, 0x1f, 0x0, 0xca, 0x80, 0x4d,
- 0x0, 0xd3, 0xe, 0x3c, 0x7, 0x90, 0x9, 0x74,
- 0xb0, 0xe0, 0xb5, 0x0, 0x6a, 0x86, 0xa, 0x5e,
- 0x20, 0x2, 0xed, 0x20, 0x6a, 0xe0, 0x0, 0xe,
- 0xd0, 0x1, 0xfa, 0x0, 0x0, 0xb9, 0x0, 0xd,
- 0x70, 0x0,
-
- /* U+58 "X" */
- 0x4e, 0x10, 0x7, 0xd0, 0xb, 0x90, 0x1f, 0x30,
- 0x2, 0xf2, 0x9a, 0x0, 0x0, 0x7d, 0xe1, 0x0,
- 0x0, 0x1f, 0x90, 0x0, 0x0, 0x8d, 0xf1, 0x0,
- 0x2, 0xf2, 0x9a, 0x0, 0xc, 0x90, 0x1e, 0x40,
- 0x5e, 0x0, 0x6, 0xd0,
-
- /* U+59 "Y" */
- 0xa9, 0x0, 0x6, 0xd0, 0x2f, 0x10, 0xe, 0x40,
- 0x9, 0x90, 0x6c, 0x0, 0x1, 0xe1, 0xd4, 0x0,
- 0x0, 0x9c, 0xb0, 0x0, 0x0, 0x1f, 0x40, 0x0,
- 0x0, 0xf, 0x20, 0x0, 0x0, 0xf, 0x20, 0x0,
- 0x0, 0xf, 0x20, 0x0,
-
- /* U+5A "Z" */
- 0x6f, 0xff, 0xff, 0x80, 0x0, 0x2, 0xf2, 0x0,
- 0x0, 0xc7, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x2f,
- 0x20, 0x0, 0xc, 0x70, 0x0, 0x7, 0xc0, 0x0,
- 0x2, 0xf2, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0,
-
- /* U+5B "[" */
- 0x2f, 0xf0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
- 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
- 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
- 0x2f, 0xf0,
-
- /* U+5C "\\" */
- 0x97, 0x0, 0x3, 0xc0, 0x0, 0xd, 0x20, 0x0,
- 0x88, 0x0, 0x2, 0xd0, 0x0, 0xc, 0x30, 0x0,
- 0x79, 0x0, 0x1, 0xe0, 0x0, 0xb, 0x40, 0x0,
- 0x6a,
-
- /* U+5D "]" */
- 0xef, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40,
- 0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd,
- 0x40, 0xd4, 0xef, 0x40,
-
- /* U+5E "^" */
- 0x0, 0x70, 0x0, 0x4f, 0x40, 0xa, 0x9a, 0x1,
- 0xe0, 0xe1, 0x69, 0x9, 0x60,
-
- /* U+5F "_" */
- 0xef, 0xff, 0xf5,
-
- /* U+60 "`" */
- 0x4e, 0x0, 0x87,
-
- /* U+61 "a" */
- 0x4, 0xde, 0xb0, 0x1f, 0x30, 0xb7, 0x2, 0x0,
- 0x7a, 0x5, 0xcd, 0xea, 0x3e, 0x10, 0x7a, 0x4e,
- 0x12, 0xca, 0x9, 0xfd, 0x9b,
-
- /* U+62 "b" */
- 0x2e, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e,
- 0x0, 0x0, 0x2, 0xe9, 0xec, 0x20, 0x2f, 0x50,
- 0x8c, 0x2, 0xe0, 0x0, 0xf1, 0x2e, 0x0, 0xe,
- 0x22, 0xe0, 0x0, 0xf1, 0x2f, 0x50, 0x8c, 0x2,
- 0xd9, 0xec, 0x20,
-
- /* U+63 "c" */
- 0x3, 0xdf, 0xb1, 0x1e, 0x40, 0x99, 0x5b, 0x0,
- 0x16, 0x6a, 0x0, 0x0, 0x5b, 0x0, 0x3, 0x1e,
- 0x40, 0x8a, 0x3, 0xdf, 0xa1,
-
- /* U+64 "d" */
- 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2e, 0x0, 0x0,
- 0x2e, 0x4, 0xde, 0x9e, 0x1f, 0x50, 0x8e, 0x5c,
- 0x0, 0x2e, 0x6a, 0x0, 0x2e, 0x5b, 0x0, 0x2e,
- 0x1e, 0x30, 0x7e, 0x4, 0xdd, 0x9e,
-
- /* U+65 "e" */
- 0x3, 0xcf, 0xa0, 0xe, 0x50, 0xa8, 0x4c, 0x0,
- 0x3d, 0x6f, 0xff, 0xfe, 0x5b, 0x0, 0x0, 0x1e,
- 0x40, 0x47, 0x3, 0xcf, 0xc3,
-
- /* U+66 "f" */
- 0x1, 0xcf, 0x20, 0x8a, 0x0, 0xa, 0x70, 0x9,
- 0xff, 0xb0, 0xa, 0x70, 0x0, 0xa7, 0x0, 0xa,
- 0x70, 0x0, 0xa7, 0x0, 0xa, 0x70, 0x0, 0xa7,
- 0x0,
-
- /* U+67 "g" */
- 0x4, 0xde, 0x8e, 0x1f, 0x50, 0x8e, 0x5c, 0x0,
- 0x2e, 0x6a, 0x0, 0x2e, 0x5c, 0x0, 0x2e, 0x1f,
- 0x50, 0x9e, 0x4, 0xde, 0x9e, 0x0, 0x0, 0x4d,
- 0xb, 0x20, 0xb9, 0x6, 0xee, 0xa1,
-
- /* U+68 "h" */
- 0x2e, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2e, 0x0,
- 0x0, 0x2e, 0x8f, 0xd2, 0x2f, 0x60, 0x9a, 0x2e,
- 0x0, 0x4c, 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d,
- 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d,
-
- /* U+69 "i" */
- 0x1e, 0x0, 0x30, 0x1f, 0x1, 0xf0, 0x1f, 0x1,
- 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0,
-
- /* U+6A "j" */
- 0x2, 0xd0, 0x0, 0x30, 0x2, 0xf0, 0x2, 0xf0,
- 0x2, 0xf0, 0x2, 0xf0, 0x2, 0xf0, 0x2, 0xf0,
- 0x2, 0xf0, 0x2, 0xe0, 0x4, 0xd0, 0x5f, 0x60,
-
- /* U+6B "k" */
- 0x2e, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e,
- 0x0, 0x0, 0x2, 0xe0, 0x1d, 0x50, 0x2e, 0xc,
- 0x80, 0x2, 0xea, 0xa0, 0x0, 0x2f, 0xfb, 0x0,
- 0x2, 0xf2, 0xd6, 0x0, 0x2e, 0x3, 0xe1, 0x2,
- 0xe0, 0x8, 0xb0,
-
- /* U+6C "l" */
- 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
- 0x1f, 0x1f,
-
- /* U+6D "m" */
- 0x3e, 0x9e, 0xd3, 0xbf, 0xc1, 0x3f, 0x50, 0x9f,
- 0x40, 0xa8, 0x3e, 0x0, 0x4d, 0x0, 0x6b, 0x3e,
- 0x0, 0x4c, 0x0, 0x6b, 0x3e, 0x0, 0x4c, 0x0,
- 0x6b, 0x3e, 0x0, 0x4c, 0x0, 0x6b, 0x3e, 0x0,
- 0x4c, 0x0, 0x6b,
-
- /* U+6E "n" */
- 0x2d, 0x8f, 0xd2, 0x2f, 0x60, 0x9a, 0x2e, 0x0,
- 0x4c, 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d, 0x2e,
- 0x0, 0x4d, 0x2e, 0x0, 0x4d,
-
- /* U+6F "o" */
- 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x7, 0xc0, 0x5c,
- 0x0, 0xe, 0x27, 0xa0, 0x0, 0xc4, 0x5c, 0x0,
- 0xe, 0x20, 0xe5, 0x7, 0xc0, 0x3, 0xcf, 0xb2,
- 0x0,
-
- /* U+70 "p" */
- 0x2e, 0xae, 0xc2, 0x2, 0xf3, 0x7, 0xc0, 0x2e,
- 0x0, 0xf, 0x12, 0xe0, 0x0, 0xe2, 0x2e, 0x0,
- 0xf, 0x2, 0xf4, 0x8, 0xc0, 0x2e, 0xae, 0xc2,
- 0x2, 0xe0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2,
- 0xe0, 0x0, 0x0,
-
- /* U+71 "q" */
- 0x4, 0xde, 0x8e, 0x1f, 0x50, 0x8e, 0x5c, 0x0,
- 0x3e, 0x6a, 0x0, 0x3e, 0x5c, 0x0, 0x3e, 0x1f,
- 0x40, 0x8e, 0x4, 0xde, 0xae, 0x0, 0x0, 0x3e,
- 0x0, 0x0, 0x3e, 0x0, 0x0, 0x3e,
-
- /* U+72 "r" */
- 0x2e, 0xbd, 0x2f, 0x50, 0x2e, 0x0, 0x2e, 0x0,
- 0x2e, 0x0, 0x2e, 0x0, 0x2e, 0x0,
-
- /* U+73 "s" */
- 0x6, 0xee, 0x90, 0x1f, 0x21, 0xc6, 0x1f, 0x40,
- 0x0, 0x4, 0xbe, 0x80, 0x12, 0x1, 0xb7, 0x4e,
- 0x10, 0xa7, 0x7, 0xee, 0xa0,
-
- /* U+74 "t" */
- 0x6, 0x20, 0xc, 0x40, 0xdf, 0xe6, 0xc, 0x40,
- 0xc, 0x40, 0xc, 0x40, 0xc, 0x40, 0xc, 0x60,
- 0x5, 0xf7,
-
- /* U+75 "u" */
- 0x3e, 0x0, 0x4c, 0x3e, 0x0, 0x4c, 0x3e, 0x0,
- 0x4c, 0x3e, 0x0, 0x4c, 0x2e, 0x0, 0x4c, 0x1f,
- 0x31, 0xbc, 0x7, 0xee, 0x9c,
-
- /* U+76 "v" */
- 0xa7, 0x0, 0xa6, 0x5c, 0x0, 0xf1, 0xf, 0x14,
- 0xc0, 0xa, 0x59, 0x70, 0x5, 0xad, 0x20, 0x0,
- 0xfc, 0x0, 0x0, 0xa7, 0x0,
-
- /* U+77 "w" */
- 0x97, 0x1, 0xf1, 0x7, 0x95, 0xa0, 0x5f, 0x50,
- 0xb5, 0x1e, 0xa, 0x8a, 0xe, 0x10, 0xd2, 0xd0,
- 0xe2, 0xc0, 0x9, 0x9a, 0xb, 0x98, 0x0, 0x4f,
- 0x60, 0x6f, 0x40, 0x0, 0xf1, 0x2, 0xf0, 0x0,
-
- /* U+78 "x" */
- 0x6d, 0x0, 0xe5, 0xc, 0x67, 0xb0, 0x3, 0xee,
- 0x20, 0x0, 0xcb, 0x0, 0x4, 0xde, 0x20, 0xd,
- 0x56, 0xc0, 0x7c, 0x0, 0xd6,
-
- /* U+79 "y" */
- 0xb7, 0x0, 0xc6, 0x6c, 0x1, 0xf1, 0x1f, 0x15,
- 0xc0, 0xc, 0x6a, 0x70, 0x6, 0xbe, 0x20, 0x1,
- 0xfd, 0x0, 0x0, 0xc8, 0x0, 0x0, 0xc3, 0x0,
- 0x4, 0xd0, 0x0, 0x7e, 0x30, 0x0,
-
- /* U+7A "z" */
- 0x6f, 0xff, 0xf5, 0x0, 0x5, 0xd0, 0x0, 0x1e,
- 0x40, 0x0, 0xb9, 0x0, 0x6, 0xd0, 0x0, 0x1e,
- 0x30, 0x0, 0x7f, 0xff, 0xf8,
-
- /* U+7B "{" */
- 0x0, 0x27, 0x0, 0xe4, 0x4, 0xc0, 0x5, 0xb0,
- 0x6, 0xa0, 0xa, 0x70, 0x9f, 0x10, 0xa, 0x70,
- 0x6, 0xa0, 0x5, 0xb0, 0x4, 0xc0, 0x0, 0xd4,
- 0x0, 0x27,
-
- /* U+7C "|" */
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xe0,
-
- /* U+7D "}" */
- 0x72, 0x0, 0x3e, 0x0, 0xb, 0x50, 0xa, 0x60,
- 0xa, 0x60, 0x6, 0xb0, 0x0, 0xea, 0x6, 0xb0,
- 0xa, 0x60, 0xa, 0x60, 0xb, 0x50, 0x4e, 0x0,
- 0x72, 0x0,
-
- /* U+7E "~" */
- 0x5, 0xd9, 0x0, 0x85, 0xe, 0x3a, 0x90, 0xc2,
- 0x2a, 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0,
- 0x0, 0x3, 0x7c, 0xff, 0x0, 0x0, 0x59, 0xef,
- 0xff, 0xff, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xf, 0xff, 0xfd, 0x84, 0x8f, 0x0, 0xf,
- 0xd7, 0x20, 0x0, 0x8f, 0x0, 0xf, 0x80, 0x0,
- 0x0, 0x8f, 0x0, 0xf, 0x80, 0x0, 0x0, 0x8f,
- 0x0, 0xf, 0x80, 0x0, 0x7b, 0xdf, 0x2, 0x3f,
- 0x80, 0x6, 0xff, 0xff, 0xaf, 0xff, 0x80, 0x2,
- 0xef, 0xf9, 0xef, 0xff, 0x60, 0x0, 0x2, 0x10,
- 0x29, 0xa7, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F008 "" */
- 0xb4, 0xdf, 0xff, 0xff, 0xfd, 0x4b, 0xe8, 0xe7,
- 0x22, 0x22, 0x7e, 0x8e, 0xc0, 0xc5, 0x0, 0x0,
- 0x6c, 0xc, 0xfc, 0xf6, 0x11, 0x11, 0x7f, 0xcf,
- 0xc0, 0xcf, 0xff, 0xff, 0xfb, 0xc, 0xfc, 0xf6,
- 0x11, 0x11, 0x7f, 0xcf, 0xc0, 0xc5, 0x0, 0x0,
- 0x6c, 0xc, 0xe8, 0xe7, 0x22, 0x22, 0x7e, 0x8e,
- 0xb4, 0xdf, 0xff, 0xff, 0xfd, 0x4b,
-
- /* U+F00B "" */
- 0xdf, 0xf6, 0x9f, 0xff, 0xff, 0xfd, 0xff, 0xf8,
- 0xcf, 0xff, 0xff, 0xff, 0xef, 0xf6, 0xaf, 0xff,
- 0xff, 0xfe, 0x13, 0x20, 0x3, 0x33, 0x33, 0x31,
- 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff,
- 0xff, 0xff, 0x13, 0x20, 0x3, 0x33, 0x33, 0x31,
- 0xef, 0xf6, 0xaf, 0xff, 0xff, 0xfe, 0xff, 0xf8,
- 0xcf, 0xff, 0xff, 0xff, 0xdf, 0xf6, 0xaf, 0xff,
- 0xff, 0xfd,
-
- /* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xd4, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0xf4, 0x4d, 0x30, 0x0, 0x3f, 0xff, 0x40,
- 0xef, 0xf3, 0x3, 0xff, 0xf4, 0x0, 0x4f, 0xff,
- 0x6f, 0xff, 0x40, 0x0, 0x4, 0xff, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x4f, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x3, 0xd3, 0x0, 0x0, 0x0,
-
- /* U+F00D "" */
- 0x14, 0x0, 0x0, 0x22, 0xd, 0xf7, 0x0, 0x4f,
- 0xf1, 0x9f, 0xf7, 0x4f, 0xfd, 0x0, 0xaf, 0xff,
- 0xfd, 0x10, 0x0, 0xbf, 0xfe, 0x10, 0x0, 0x4f,
- 0xff, 0xf7, 0x0, 0x4f, 0xfd, 0xaf, 0xf7, 0xe,
- 0xfd, 0x10, 0xaf, 0xf2, 0x5b, 0x10, 0x0, 0x99,
- 0x0,
-
- /* U+F011 "" */
- 0x0, 0x0, 0x7, 0x70, 0x0, 0x0, 0x0, 0x32,
- 0xf, 0xf0, 0x24, 0x0, 0x5, 0xfc, 0xf, 0xf0,
- 0xcf, 0x50, 0x1f, 0xf4, 0xf, 0xf0, 0x5f, 0xf1,
- 0x7f, 0x80, 0xf, 0xf0, 0x8, 0xf7, 0xbf, 0x20,
- 0xf, 0xf0, 0x2, 0xfb, 0xcf, 0x10, 0xe, 0xe0,
- 0x1, 0xfc, 0xaf, 0x40, 0x1, 0x10, 0x4, 0xfa,
- 0x5f, 0xb0, 0x0, 0x0, 0xb, 0xf6, 0xd, 0xfa,
- 0x10, 0x1, 0xaf, 0xd0, 0x2, 0xdf, 0xfc, 0xcf,
- 0xfd, 0x20, 0x0, 0x8, 0xef, 0xfe, 0x91, 0x0,
- 0x0, 0x0, 0x1, 0x10, 0x0, 0x0,
-
- /* U+F013 "" */
- 0x0, 0x0, 0x14, 0x41, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf7, 0x0, 0x0, 0x3, 0x43, 0xdf, 0xfd,
- 0x34, 0x30, 0xe, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x6f, 0xff, 0xfb, 0xbf, 0xff, 0xf6, 0x1b, 0xff,
- 0x70, 0x7, 0xff, 0xb1, 0x7, 0xff, 0x20, 0x2,
- 0xff, 0x70, 0x1b, 0xff, 0x70, 0x7, 0xff, 0xb1,
- 0x6f, 0xff, 0xfb, 0xbf, 0xff, 0xf6, 0xe, 0xff,
- 0xff, 0xff, 0xff, 0xe0, 0x3, 0x42, 0xcf, 0xfc,
- 0x23, 0x30, 0x0, 0x0, 0x7f, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0x41, 0x0, 0x0,
-
- /* U+F015 "" */
- 0x0, 0x0, 0x0, 0x73, 0x3, 0x83, 0x0, 0x0,
- 0x0, 0x1d, 0xff, 0x67, 0xf7, 0x0, 0x0, 0x3,
- 0xee, 0x5a, 0xfe, 0xf7, 0x0, 0x0, 0x6f, 0xd3,
- 0xb5, 0x7f, 0xf7, 0x0, 0x9, 0xfb, 0x3d, 0xff,
- 0x85, 0xfe, 0x30, 0xbf, 0x95, 0xff, 0xff, 0xfb,
- 0x3e, 0xf4, 0x76, 0x6f, 0xff, 0xff, 0xff, 0xd2,
- 0xa1, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0xcf, 0xfa, 0x2, 0xff, 0xf4, 0x0, 0x0,
- 0xcf, 0xfa, 0x2, 0xff, 0xf4, 0x0, 0x0, 0xaf,
- 0xf8, 0x1, 0xff, 0xf3, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x27, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x0, 0xdf,
- 0xff, 0xff, 0xfd, 0x0, 0x0, 0x4f, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x4, 0xff, 0xff, 0x40, 0x0,
- 0x23, 0x33, 0x5f, 0xf5, 0x33, 0x32, 0xff, 0xff,
- 0xa4, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, 0x8f,
- 0x9a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8,
-
- /* U+F01C "" */
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x1,
- 0xed, 0x88, 0x88, 0x89, 0xf8, 0x0, 0xa, 0xf2,
- 0x0, 0x0, 0x0, 0xaf, 0x30, 0x5f, 0x70, 0x0,
- 0x0, 0x0, 0x1e, 0xc0, 0xef, 0x88, 0x60, 0x0,
- 0x28, 0x8b, 0xf6, 0xff, 0xff, 0xf3, 0x0, 0xbf,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x1, 0x10, 0x0, 0x59, 0x0, 0x19,
- 0xef, 0xfd, 0x70, 0x9f, 0x3, 0xef, 0xda, 0x9d,
- 0xfe, 0xbf, 0xe, 0xf6, 0x0, 0x0, 0x5f, 0xff,
- 0x7f, 0x70, 0x0, 0x3f, 0xff, 0xff, 0x69, 0x0,
- 0x0, 0x2a, 0xaa, 0xa9, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaa, 0xaa, 0xa2, 0x0, 0x0, 0xa6,
- 0xff, 0xfe, 0xf3, 0x0, 0x7, 0xf7, 0xff, 0xf5,
- 0x0, 0x0, 0x7f, 0xe0, 0xfb, 0xef, 0xd9, 0xad,
- 0xfe, 0x30, 0xfa, 0x8, 0xef, 0xfe, 0x91, 0x0,
- 0x95, 0x0, 0x1, 0x10, 0x0, 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x2a, 0x0, 0x2, 0xef, 0x78, 0x8e,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xdf, 0xff, 0xff, 0x0, 0x7, 0xff,
- 0x0, 0x0, 0x7f, 0x0, 0x0, 0x1,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x2e, 0xf0,
- 0x0, 0x78, 0x8e, 0xff, 0x3, 0xf, 0xff, 0xff,
- 0xf0, 0xba, 0xff, 0xff, 0xff, 0x3, 0xff, 0xff,
- 0xff, 0xf0, 0xaa, 0xdf, 0xff, 0xff, 0x4, 0x0,
- 0x0, 0x8f, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0x0,
- 0x0, 0x0, 0x0, 0x10, 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xd2, 0x0, 0x0, 0x0,
- 0x2a, 0x0, 0x11, 0x8e, 0x10, 0x0, 0x2, 0xef,
- 0x0, 0x7d, 0x2b, 0x90, 0x78, 0x8e, 0xff, 0x3,
- 0xa, 0xb3, 0xf0, 0xff, 0xff, 0xff, 0xb, 0xa1,
- 0xf1, 0xe3, 0xff, 0xff, 0xff, 0x3, 0xf0, 0xe3,
- 0xc5, 0xff, 0xff, 0xff, 0xb, 0xa1, 0xf1, 0xe3,
- 0xdf, 0xff, 0xff, 0x3, 0xa, 0xb3, 0xf0, 0x0,
- 0x7, 0xff, 0x0, 0x7d, 0x2b, 0x90, 0x0, 0x0,
- 0x7f, 0x0, 0x11, 0x9e, 0x10, 0x0, 0x0, 0x1,
- 0x0, 0x6, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F03E "" */
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0x5b,
- 0xff, 0xff, 0xff, 0xff, 0xf5, 0x1, 0xff, 0xff,
- 0xef, 0xff, 0xfb, 0x18, 0xff, 0xf6, 0x1c, 0xff,
- 0xff, 0xfc, 0xff, 0x60, 0x1, 0xdf, 0xff, 0x60,
- 0x96, 0x0, 0x0, 0x8f, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xfc, 0x88, 0x88, 0x88, 0x88, 0xcf,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
-
- /* U+F048 "" */
- 0x58, 0x0, 0x0, 0x35, 0x9f, 0x10, 0x5, 0xfe,
- 0x9f, 0x10, 0x6f, 0xfe, 0x9f, 0x17, 0xff, 0xfe,
- 0x9f, 0x9f, 0xff, 0xfe, 0x9f, 0xff, 0xff, 0xfe,
- 0x9f, 0xef, 0xff, 0xfe, 0x9f, 0x2d, 0xff, 0xfe,
- 0x9f, 0x10, 0xcf, 0xfe, 0x9f, 0x10, 0xb, 0xfe,
- 0x8f, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04B "" */
- 0x46, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0x40,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xa1, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xfd, 0x50, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff,
- 0xff, 0xff, 0xff, 0xb1, 0xff, 0xff, 0xff, 0xfd,
- 0x40, 0xf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0xff,
- 0xff, 0xa1, 0x0, 0x0, 0xf, 0xfd, 0x40, 0x0,
- 0x0, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0xaf, 0xfe, 0x30, 0xaf, 0xfe, 0x3f, 0xff, 0xf7,
- 0xf, 0xff, 0xf7, 0xff, 0xff, 0x80, 0xff, 0xff,
- 0x8f, 0xff, 0xf8, 0xf, 0xff, 0xf8, 0xff, 0xff,
- 0x80, 0xff, 0xff, 0x8f, 0xff, 0xf8, 0xf, 0xff,
- 0xf8, 0xff, 0xff, 0x80, 0xff, 0xff, 0x8f, 0xff,
- 0xf8, 0xf, 0xff, 0xf8, 0xff, 0xff, 0x80, 0xff,
- 0xff, 0x8f, 0xff, 0xf7, 0xf, 0xff, 0xf7, 0x48,
- 0x98, 0x10, 0x48, 0x98, 0x10,
-
- /* U+F04D "" */
- 0x48, 0x88, 0x88, 0x88, 0x88, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xaf,
- 0xff, 0xff, 0xff, 0xfe, 0x30,
-
- /* U+F051 "" */
- 0x26, 0x0, 0x0, 0x58, 0x7f, 0xa0, 0x0, 0xbf,
- 0x8f, 0xfb, 0x0, 0xbf, 0x8f, 0xff, 0xc1, 0xbf,
- 0x8f, 0xff, 0xfd, 0xcf, 0x8f, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xef, 0x8f, 0xff, 0xf4, 0xbf,
- 0x8f, 0xff, 0x40, 0xbf, 0x8f, 0xe3, 0x0, 0xbf,
- 0x5d, 0x20, 0x0, 0xae, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x3, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xfa, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff,
- 0x90, 0x0, 0x0, 0x1e, 0xff, 0xff, 0xf8, 0x0,
- 0x1, 0xdf, 0xff, 0xff, 0xff, 0x70, 0xc, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xd, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x1, 0x34, 0x44, 0x44, 0x44, 0x30,
- 0xd, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xf5,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x3, 0x10, 0x0, 0x5, 0xfb, 0x0,
- 0x5, 0xff, 0x40, 0x5, 0xff, 0x40, 0x5, 0xff,
- 0x50, 0x3, 0xff, 0x50, 0x0, 0xb, 0xfc, 0x10,
- 0x0, 0xb, 0xfc, 0x10, 0x0, 0xc, 0xfc, 0x10,
- 0x0, 0xc, 0xfb, 0x0, 0x0, 0xa, 0x50,
-
- /* U+F054 "" */
- 0x3, 0x10, 0x0, 0x3, 0xfc, 0x10, 0x0, 0xb,
- 0xfc, 0x10, 0x0, 0xb, 0xfc, 0x10, 0x0, 0xb,
- 0xfc, 0x10, 0x0, 0xd, 0xfb, 0x0, 0x5, 0xff,
- 0x50, 0x5, 0xff, 0x50, 0x5, 0xff, 0x50, 0x3,
- 0xff, 0x50, 0x0, 0xa, 0x50, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x69, 0x10, 0x0, 0x0, 0x0, 0xd,
- 0xf5, 0x0, 0x0, 0x0, 0x0, 0xef, 0x60, 0x0,
- 0x0, 0x0, 0xe, 0xf6, 0x0, 0x0, 0x58, 0x88,
- 0xff, 0xb8, 0x88, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0x9b, 0xbb, 0xff, 0xdb, 0xbb, 0x30, 0x0,
- 0xe, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xef, 0x60,
- 0x0, 0x0, 0x0, 0xe, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x9d, 0x20, 0x0, 0x0,
-
- /* U+F068 "" */
- 0x46, 0x66, 0x66, 0x66, 0x66, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0xad, 0xdd, 0xdd, 0xdd, 0xdd,
- 0x40,
-
- /* U+F06E "" */
- 0x0, 0x3, 0xad, 0xff, 0xc7, 0x0, 0x0, 0x0,
- 0x9f, 0xe6, 0x24, 0xaf, 0xe3, 0x0, 0xb, 0xff,
- 0x20, 0x77, 0x9, 0xff, 0x40, 0x7f, 0xf9, 0x0,
- 0xcf, 0xa1, 0xff, 0xe1, 0xef, 0xf6, 0x7f, 0xff,
- 0xf0, 0xef, 0xf7, 0x8f, 0xf9, 0x3f, 0xff, 0xc1,
- 0xff, 0xe1, 0xb, 0xff, 0x26, 0xca, 0x19, 0xff,
- 0x40, 0x0, 0x9f, 0xe6, 0x24, 0xaf, 0xe3, 0x0,
- 0x0, 0x3, 0x9d, 0xff, 0xc7, 0x0, 0x0,
-
- /* U+F070 "" */
- 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1c, 0xf8, 0x4a, 0xef, 0xeb, 0x50, 0x0, 0x0,
- 0x0, 0x9f, 0xfd, 0x52, 0x5d, 0xfc, 0x10, 0x0,
- 0x0, 0x5, 0xfe, 0x4a, 0x70, 0xcf, 0xe1, 0x0,
- 0xb, 0x80, 0x2d, 0xff, 0xf7, 0x4f, 0xfb, 0x0,
- 0x2f, 0xfb, 0x0, 0xaf, 0xfb, 0x2f, 0xff, 0x30,
- 0xb, 0xff, 0x50, 0x7, 0xfe, 0x7f, 0xfb, 0x0,
- 0x1, 0xdf, 0xc0, 0x0, 0x3e, 0xff, 0xe1, 0x0,
- 0x0, 0x1b, 0xfc, 0x42, 0x1, 0xbf, 0xa0, 0x0,
- 0x0, 0x0, 0x5b, 0xef, 0xb0, 0x8, 0xfc, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x40,
-
- /* U+F071 "" */
- 0x0, 0x0, 0x0, 0x3, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xfd, 0xef, 0xa0, 0x0, 0x0, 0x0, 0xb,
- 0xfb, 0x3, 0xff, 0x30, 0x0, 0x0, 0x4, 0xff,
- 0xc0, 0x4f, 0xfc, 0x0, 0x0, 0x0, 0xdf, 0xfd,
- 0x5, 0xff, 0xf6, 0x0, 0x0, 0x7f, 0xff, 0xf8,
- 0xcf, 0xff, 0xe1, 0x0, 0x1f, 0xff, 0xfc, 0x4,
- 0xff, 0xff, 0x90, 0xa, 0xff, 0xff, 0xd2, 0x7f,
- 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf6, 0x4, 0x78, 0x88, 0x88, 0x88, 0x88,
- 0x87, 0x0,
-
- /* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x6, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xc1, 0xff, 0xf8, 0x0, 0x2e,
- 0xff, 0xfc, 0xcd, 0xff, 0x62, 0xef, 0xdf, 0xf9,
- 0x0, 0x2c, 0x4e, 0xf9, 0xf, 0x90, 0x0, 0x2,
- 0xef, 0x90, 0x7, 0x0, 0x0, 0x2e, 0xf8, 0x88,
- 0xf, 0xa0, 0xcd, 0xff, 0x80, 0xdf, 0xdf, 0xf9,
- 0xff, 0xf8, 0x0, 0x1e, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0x10,
-
- /* U+F077 "" */
- 0x0, 0x0, 0x27, 0x0, 0x0, 0x0, 0x0, 0x2e,
- 0xf9, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf9, 0x0,
- 0x0, 0x2e, 0xf9, 0x2e, 0xf9, 0x0, 0x2e, 0xf9,
- 0x0, 0x2e, 0xf9, 0xb, 0xf9, 0x0, 0x0, 0x2e,
- 0xf4, 0x27, 0x0, 0x0, 0x0, 0x27, 0x0,
-
- /* U+F078 "" */
- 0x27, 0x0, 0x0, 0x0, 0x27, 0xb, 0xf9, 0x0,
- 0x0, 0x2e, 0xf4, 0x2e, 0xf9, 0x0, 0x2e, 0xf9,
- 0x0, 0x2e, 0xf9, 0x2e, 0xf9, 0x0, 0x0, 0x2e,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x2e, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x26, 0x0, 0x0, 0x0,
-
- /* U+F079 "" */
- 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xc0, 0x7, 0x77, 0x77, 0x72, 0x0,
- 0x3, 0xff, 0xfc, 0x2e, 0xff, 0xff, 0xf9, 0x0,
- 0xf, 0xcf, 0xcf, 0xa0, 0x0, 0x0, 0xe9, 0x0,
- 0x4, 0x1e, 0x93, 0x20, 0x0, 0x0, 0xe9, 0x0,
- 0x0, 0xe, 0x90, 0x0, 0x0, 0x0, 0xe9, 0x0,
- 0x0, 0xe, 0x90, 0x0, 0x0, 0xb5, 0xe9, 0x97,
- 0x0, 0xe, 0xc7, 0x77, 0x73, 0xbf, 0xff, 0xf6,
- 0x0, 0xd, 0xff, 0xff, 0xfd, 0xb, 0xff, 0x70,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x0,
-
- /* U+F07B "" */
- 0xbf, 0xff, 0xf6, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x98, 0x88, 0x74, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x3e, 0xe3, 0x0, 0x0, 0x0, 0x3, 0xef, 0xfe,
- 0x30, 0x0, 0x0, 0x3e, 0xff, 0xff, 0xe3, 0x0,
- 0x0, 0xef, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x8f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0,
- 0x23, 0x32, 0x8f, 0xf8, 0x23, 0x32, 0xff, 0xfe,
- 0x39, 0x93, 0xef, 0xff, 0xff, 0xff, 0xc9, 0x9c,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, 0x8f,
- 0x9a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8,
-
- /* U+F095 "" */
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x62, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x9,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x1,
- 0x0, 0x9, 0xff, 0x40, 0x1, 0x8e, 0xe1, 0x1a,
- 0xff, 0x70, 0x0, 0xef, 0xff, 0xde, 0xff, 0x90,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x8f, 0xff, 0xe9, 0x10, 0x0, 0x0, 0x2, 0x76,
- 0x30, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0C4 "" */
- 0x7, 0x93, 0x0, 0x0, 0x22, 0xa, 0xff, 0xf2,
- 0x0, 0x8f, 0xf5, 0xf9, 0x1f, 0x70, 0x8f, 0xf9,
- 0xc, 0xfc, 0xf8, 0x8f, 0xf9, 0x0, 0x1a, 0xef,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0,
- 0x0, 0x7, 0xbf, 0xff, 0xf6, 0x0, 0xa, 0xff,
- 0xfa, 0xbf, 0xf6, 0x0, 0xf9, 0x1f, 0x70, 0xbf,
- 0xf6, 0xc, 0xfc, 0xf4, 0x0, 0xbf, 0xf4, 0x1a,
- 0xc6, 0x0, 0x0, 0x56, 0x0,
-
- /* U+F0C5 "" */
- 0x0, 0x3, 0x44, 0x41, 0x20, 0x0, 0x0, 0xff,
- 0xff, 0x5e, 0x40, 0x24, 0x1f, 0xff, 0xf5, 0xee,
- 0x2f, 0xf4, 0xff, 0xff, 0xc8, 0x82, 0xff, 0x4f,
- 0xff, 0xff, 0xff, 0x5f, 0xf4, 0xff, 0xff, 0xff,
- 0xf5, 0xff, 0x4f, 0xff, 0xff, 0xff, 0x5f, 0xf4,
- 0xff, 0xff, 0xff, 0xf5, 0xff, 0x4f, 0xff, 0xff,
- 0xff, 0x5f, 0xf4, 0xff, 0xff, 0xff, 0xf4, 0xff,
- 0x93, 0x44, 0x44, 0x43, 0xf, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x68, 0x88, 0x88, 0x71, 0x0, 0x0,
-
- /* U+F0C7 "" */
- 0x48, 0x88, 0x88, 0x87, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xfb, 0x0, 0xf8, 0x0, 0x0, 0xb, 0xfb,
- 0xf, 0x80, 0x0, 0x0, 0xbf, 0xf3, 0xfb, 0x77,
- 0x77, 0x7d, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0xff, 0xff, 0x42, 0xdf, 0xff, 0x4f, 0xff,
- 0xc0, 0x8, 0xff, 0xf4, 0xff, 0xfe, 0x0, 0xaf,
- 0xff, 0x4f, 0xff, 0xfc, 0xaf, 0xff, 0xf4, 0xaf,
- 0xff, 0xff, 0xff, 0xfd, 0x10,
-
- /* U+F0E7 "" */
- 0x1, 0xbb, 0xba, 0x10, 0x0, 0x5f, 0xff, 0xf1,
- 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x9f, 0xff,
- 0x60, 0x0, 0xb, 0xff, 0xff, 0xff, 0x60, 0xef,
- 0xff, 0xff, 0xf1, 0xe, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0xc, 0xfe, 0x0, 0x0, 0x0, 0xff, 0x50,
- 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, 0xf3,
- 0x0, 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0, 0x2,
- 0x0, 0x0, 0x0,
-
- /* U+F0EA "" */
- 0x0, 0x2a, 0x50, 0x0, 0x0, 0xe, 0xff, 0x8f,
- 0xff, 0x20, 0x0, 0xff, 0xf8, 0xff, 0xf4, 0x0,
- 0xf, 0xff, 0xeb, 0xbb, 0x30, 0x0, 0xff, 0xf4,
- 0x99, 0x92, 0x60, 0xf, 0xff, 0x5f, 0xff, 0x4f,
- 0xa0, 0xff, 0xf5, 0xff, 0xf5, 0x56, 0x1f, 0xff,
- 0x5f, 0xff, 0xff, 0xf4, 0xff, 0xf5, 0xff, 0xff,
- 0xff, 0x4e, 0xff, 0x5f, 0xff, 0xff, 0xf4, 0x0,
- 0x5, 0xff, 0xff, 0xff, 0x40, 0x0, 0x5f, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x44, 0x44, 0x44, 0x0,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x15, 0x0, 0x0, 0x0, 0x0, 0x9,
- 0xf1, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xf7, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xd0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0x0, 0xa, 0xff, 0xff, 0xff, 0xf2, 0x0, 0xdf,
- 0xff, 0xff, 0xff, 0x50, 0x6f, 0xff, 0xff, 0xff,
- 0xfd, 0xe, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x24,
- 0x44, 0x44, 0x44, 0x43, 0x0, 0x0, 0x2f, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x46, 0x0, 0x0, 0x0,
-
- /* U+F11C "" */
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xfc,
- 0x8e, 0x8e, 0x8e, 0x88, 0xe8, 0xf7, 0xf8, 0xc,
- 0xc, 0xb, 0x0, 0xb0, 0xf8, 0xff, 0xec, 0xfc,
- 0xec, 0xee, 0xcf, 0xf8, 0xff, 0xa0, 0xc0, 0xa0,
- 0x77, 0x2f, 0xf8, 0xff, 0xec, 0xfc, 0xec, 0xee,
- 0xcf, 0xf8, 0xf8, 0xc, 0x0, 0x0, 0x0, 0xb0,
- 0xf8, 0xfc, 0x8e, 0x88, 0x88, 0x88, 0xe8, 0xf7,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x18, 0xef, 0xe0, 0x0, 0x0,
- 0x0, 0x29, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x3a,
- 0xff, 0xff, 0xff, 0x30, 0x0, 0x4c, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff,
- 0xf5, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x0, 0x1, 0x34, 0x44, 0xdf, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
- 0x0, 0x0, 0x0,
-
- /* U+F15B "" */
- 0x9b, 0xbb, 0xb2, 0x70, 0xf, 0xff, 0xff, 0x4f,
- 0x90, 0xff, 0xff, 0xf4, 0xff, 0x9f, 0xff, 0xff,
- 0x54, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44,
- 0x44, 0x44, 0x30,
-
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0x9b, 0xcb, 0x95, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xef,
- 0xfa, 0x53, 0x23, 0x5a, 0xff, 0xe3, 0xdf, 0xa1,
- 0x0, 0x0, 0x0, 0x1, 0xaf, 0xd2, 0x60, 0x5,
- 0xbe, 0xfe, 0xb5, 0x0, 0x52, 0x0, 0x1c, 0xff,
- 0xfe, 0xff, 0xfc, 0x10, 0x0, 0x2, 0xec, 0x40,
- 0x0, 0x4c, 0xe2, 0x0, 0x0, 0x1, 0x0, 0x1,
- 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd6, 0x0,
- 0x0, 0x0,
-
- /* U+F240 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
- 0x34, 0x44, 0x44, 0x44, 0x44, 0x4f, 0xdf, 0x8c,
- 0xff, 0xff, 0xff, 0xff, 0xf2, 0xcf, 0xf8, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0x8, 0xff, 0x89, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xc3, 0xff, 0xfb, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F241 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
- 0x34, 0x44, 0x44, 0x43, 0x0, 0x4f, 0xdf, 0x8c,
- 0xff, 0xff, 0xff, 0xc0, 0x2, 0xcf, 0xf8, 0xcf,
- 0xff, 0xff, 0xfc, 0x0, 0x8, 0xff, 0x89, 0xcc,
- 0xcc, 0xcc, 0x90, 0x3, 0xff, 0xfb, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F242 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
- 0x34, 0x44, 0x42, 0x0, 0x0, 0x4f, 0xdf, 0x8c,
- 0xff, 0xff, 0x80, 0x0, 0x2, 0xcf, 0xf8, 0xcf,
- 0xff, 0xf8, 0x0, 0x0, 0x8, 0xff, 0x89, 0xcc,
- 0xcc, 0x60, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F243 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
- 0x34, 0x41, 0x0, 0x0, 0x0, 0x4f, 0xdf, 0x8c,
- 0xff, 0x40, 0x0, 0x0, 0x2, 0xcf, 0xf8, 0xcf,
- 0xf4, 0x0, 0x0, 0x0, 0x8, 0xff, 0x89, 0xcc,
- 0x30, 0x0, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F244 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xdf, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xcf, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x80, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F287 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x25, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xcb, 0xfe, 0x0, 0x0, 0x0,
- 0x1, 0x0, 0xd, 0x10, 0x42, 0x0, 0x0, 0x0,
- 0x9f, 0xd1, 0x68, 0x0, 0x0, 0x0, 0x68, 0x0,
- 0xff, 0xfe, 0xee, 0xed, 0xdd, 0xdd, 0xef, 0xc0,
- 0x9f, 0xd1, 0x0, 0xb3, 0x0, 0x0, 0x68, 0x0,
- 0x1, 0x0, 0x0, 0x3b, 0x5, 0x74, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xbe, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F293 "" */
- 0x0, 0x0, 0x34, 0x20, 0x0, 0x0, 0x6e, 0xfe,
- 0xfd, 0x20, 0x4, 0xff, 0xf3, 0xff, 0xd0, 0xc,
- 0xff, 0xf0, 0x4f, 0xf5, 0xf, 0xd5, 0xf2, 0x95,
- 0xf8, 0x2f, 0xf7, 0x41, 0x3c, 0xfa, 0x3f, 0xff,
- 0x60, 0xaf, 0xfb, 0x3f, 0xfe, 0x20, 0x4f, 0xfb,
- 0x2f, 0xe2, 0x92, 0x75, 0xfa, 0xf, 0xeb, 0xf1,
- 0x49, 0xf8, 0x9, 0xff, 0xf0, 0x9f, 0xf2, 0x1,
- 0xdf, 0xf9, 0xff, 0x90, 0x0, 0x6, 0xab, 0x95,
- 0x0,
-
- /* U+F2ED "" */
- 0x0, 0x4, 0x88, 0x70, 0x0, 0xb, 0xcc, 0xff,
- 0xff, 0xdc, 0xc5, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0x52, 0x88, 0x88, 0x88, 0x88, 0x60, 0x4f, 0xff,
- 0xff, 0xff, 0xfc, 0x4, 0xfa, 0xae, 0x6f, 0x5f,
- 0xc0, 0x4f, 0xaa, 0xe6, 0xf4, 0xfc, 0x4, 0xfa,
- 0xae, 0x6f, 0x4f, 0xc0, 0x4f, 0xaa, 0xe6, 0xf4,
- 0xfc, 0x4, 0xfa, 0xae, 0x6f, 0x4f, 0xc0, 0x4f,
- 0xaa, 0xe6, 0xf5, 0xfc, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0xb0, 0x6, 0x88, 0x88, 0x88, 0x72, 0x0,
-
- /* U+F304 "" */
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x71, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xd1, 0x0, 0x0, 0x0,
- 0x1, 0x5f, 0xff, 0xc0, 0x0, 0x0, 0x2, 0xea,
- 0x5f, 0xfd, 0x0, 0x0, 0x2, 0xef, 0xfa, 0x5d,
- 0x20, 0x0, 0x2, 0xef, 0xff, 0xf8, 0x0, 0x0,
- 0x2, 0xef, 0xff, 0xfe, 0x20, 0x0, 0x2, 0xef,
- 0xff, 0xfe, 0x20, 0x0, 0x2, 0xef, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0xbf, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0xd, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x6, 0x64,
- 0x10, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F55A "" */
- 0x0, 0x5, 0xef, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5,
- 0xff, 0xff, 0x91, 0xdd, 0x19, 0xff, 0xf5, 0xff,
- 0xff, 0xfd, 0x11, 0x11, 0xdf, 0xff, 0xef, 0xff,
- 0xff, 0xfb, 0x0, 0xbf, 0xff, 0xf5, 0xff, 0xff,
- 0xfd, 0x11, 0x11, 0xdf, 0xff, 0x5, 0xff, 0xff,
- 0x91, 0xdd, 0x19, 0xff, 0xf0, 0x5, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x4, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F7C2 "" */
- 0x0, 0x17, 0x88, 0x87, 0x20, 0x2d, 0xff, 0xff,
- 0xfd, 0x2e, 0xa0, 0xb3, 0x78, 0xfe, 0xfa, 0xb,
- 0x37, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x4, 0x44,
- 0x44, 0x44, 0x0,
-
- /* U+F8A2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x69, 0x0,
- 0x0, 0x0, 0xdf, 0x0, 0x7f, 0xc0, 0x0, 0x0,
- 0xd, 0xf0, 0x8f, 0xff, 0xdd, 0xdd, 0xdd, 0xff,
- 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xb,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 48, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 49, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14, .adv_w = 61, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 22, .adv_w = 120, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 54, .adv_w = 108, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 96, .adv_w = 141, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 137, .adv_w = 119, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 173, .adv_w = 33, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 177, .adv_w = 66, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 205, .adv_w = 67, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 233, .adv_w = 83, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 248, .adv_w = 109, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 273, .adv_w = 38, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 277, .adv_w = 53, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 279, .adv_w = 51, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 282, .adv_w = 79, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 307, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 339, .adv_w = 108, .box_w = 4, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 357, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 389, .adv_w = 108, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 416, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 448, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 480, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 512, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 544, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 576, .adv_w = 108, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 603, .adv_w = 47, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 614, .adv_w = 41, .box_w = 2, .box_h = 9, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 623, .adv_w = 98, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 641, .adv_w = 105, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 656, .adv_w = 100, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 674, .adv_w = 91, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 701, .adv_w = 172, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 767, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 803, .adv_w = 120, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 835, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 871, .adv_w = 126, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 907, .adv_w = 109, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 939, .adv_w = 106, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 971, .adv_w = 131, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1007, .adv_w = 137, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1043, .adv_w = 52, .box_w = 2, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1052, .adv_w = 106, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1079, .adv_w = 120, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1115, .adv_w = 103, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1147, .adv_w = 168, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1192, .adv_w = 137, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1228, .adv_w = 132, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1264, .adv_w = 121, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1300, .adv_w = 132, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1344, .adv_w = 118, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1380, .adv_w = 114, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1412, .adv_w = 115, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1444, .adv_w = 125, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1476, .adv_w = 122, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1512, .adv_w = 170, .box_w = 11, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1562, .adv_w = 120, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1598, .adv_w = 115, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1634, .adv_w = 115, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1666, .adv_w = 51, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1692, .adv_w = 79, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1717, .adv_w = 51, .box_w = 3, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1737, .adv_w = 80, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 1750, .adv_w = 87, .box_w = 6, .box_h = 1, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1753, .adv_w = 59, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 1756, .adv_w = 104, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1777, .adv_w = 108, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1812, .adv_w = 101, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1833, .adv_w = 108, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1863, .adv_w = 102, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1884, .adv_w = 67, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1909, .adv_w = 108, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 1939, .adv_w = 106, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1969, .adv_w = 47, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1983, .adv_w = 46, .box_w = 4, .box_h = 12, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 2007, .adv_w = 97, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2042, .adv_w = 47, .box_w = 2, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2052, .adv_w = 168, .box_w = 10, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2087, .adv_w = 106, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2108, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2133, .adv_w = 108, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2168, .adv_w = 109, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2198, .adv_w = 65, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2212, .adv_w = 99, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2233, .adv_w = 63, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2251, .adv_w = 106, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2272, .adv_w = 93, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2293, .adv_w = 144, .box_w = 9, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2325, .adv_w = 95, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2346, .adv_w = 91, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2376, .adv_w = 95, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2397, .adv_w = 65, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2423, .adv_w = 47, .box_w = 1, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 2429, .adv_w = 65, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2455, .adv_w = 131, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 2471, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2549, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2603, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2669, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2723, .adv_w = 132, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2764, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2842, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2920, .adv_w = 216, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2997, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 3075, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3138, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 3216, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3246, .adv_w = 144, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3291, .adv_w = 216, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 3382, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3436, .adv_w = 168, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 3484, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 3556, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3617, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3678, .adv_w = 168, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 3726, .adv_w = 168, .box_w = 12, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 3792, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3831, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3870, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3931, .adv_w = 168, .box_w = 11, .box_h = 3, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 3948, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4011, .adv_w = 240, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4115, .adv_w = 216, .box_w = 15, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 4213, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4279, .adv_w = 168, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 4318, .adv_w = 168, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 4357, .adv_w = 240, .box_w = 16, .box_h = 10, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 4437, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4491, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4569, .adv_w = 192, .box_w = 13, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 4654, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4715, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4787, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4848, .adv_w = 120, .box_w = 9, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 4907, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4979, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5051, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5114, .adv_w = 192, .box_w = 14, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 5205, .adv_w = 144, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5264, .adv_w = 240, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5354, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5422, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5490, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5558, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5626, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5694, .adv_w = 240, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5782, .adv_w = 168, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5847, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5919, .adv_w = 192, .box_w = 13, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 6004, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6072, .adv_w = 144, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6131, .adv_w = 193, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = 0}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -10, 0, 0, 0,
- 0, 0, 0, 0, -11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -5, -6, 0, -2, -6, 0, -7, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -21, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -11, 0, 0, 0, 0, 0, 0, -6,
- 0, -1, 0, 0, -12, -2, -8, -6,
- 0, -9, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, -2, -1, -5, -3, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -3,
- 0, -2, 0, 0, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -3, 0, 0, 0, 0, 0,
- 0, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, -10, 0, 0,
- 0, -2, 0, 0, 0, -3, 0, -2,
- 0, -2, -4, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, -2, -2, 0, -2, 0, 0, 0,
- -2, -2, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, -22, 0, 0, 0, -16,
- 0, -25, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, -3, -2, 0, 0, -2,
- -2, 0, 0, -2, -2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, -3, 0,
- 0, 0, 2, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -6, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, -2,
- -3, 0, 0, 0, -2, -4, -6, 0,
- 0, 0, 0, -31, 0, 0, 0, 0,
- 0, 0, 0, 2, -6, 0, 0, -26,
- -5, -16, -13, 0, -22, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- -12, -9, 0, 0, 0, 0, 0, 0,
- 0, 0, -30, 0, 0, 0, -13, 0,
- -19, 0, 0, 0, 0, 0, -3, 0,
- -2, 0, -1, -1, 0, 0, -1, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, -3,
- -2, 0, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -7, 0, -2, 0, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -4, 0,
- 0, 0, 0, -20, -22, 0, 0, -7,
- -3, -22, -1, 2, 0, 2, 1, 0,
- 2, 0, 0, -11, -9, 0, -10, -9,
- -7, -11, 0, -9, -7, -5, -7, -6,
- 0, 0, 0, 0, 2, 0, -21, -3,
- 0, 0, -7, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, -4, -4,
- 0, 0, -4, -3, 0, 0, -3, -1,
- 0, 0, 0, 2, 0, 0, 0, 1,
- 0, -12, -6, 0, 0, -4, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, -3, -3, 0, 0, -3, -2, 0,
- 0, -2, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- 0, -2, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- -2, 0, 0, 0, -2, -3, 0, 0,
- 0, 0, 0, 0, -3, 2, -5, -20,
- -5, 0, 0, -9, -3, -9, -1, 2,
- -9, 2, 2, 1, 2, 0, 2, -7,
- -6, -2, -4, -6, -4, -5, -2, -4,
- -2, 0, -2, -3, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, -2, 0,
- 0, 0, -2, -3, -3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, -2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -1, 0, 0, 0, 0, 0, -3,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -1, 0, -1, -1,
- 0, 0, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -1, 0, 0, 0, 0, 0,
- 2, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, -10, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -13, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, 0,
- -2, -1, 0, 0, 2, 0, 0, 0,
- -12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -4, -2, 1, 0, -2, 0, 0, 5,
- 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, -10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, -1,
- 1, 0, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- -2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 4,
- .kern_classes = 1,
- .bitmap_format = 0
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_12 = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 14, /*The maximum line height required by the font*/
- .base_line = 3, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_NONE,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_12*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c
deleted file mode 100644
index 4565b99c..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_12_subpx.c
+++ /dev/null
@@ -1,3419 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 12 px
- * Bpp: 4
- * Opts: --no-compress --no-prefilter --bpp 4 --size 12 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_12_subpx.c --force-fast-kern-format --lcd
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_12_SUBPX
-#define LV_FONT_ROBOTO_12_SUBPX 1
-#endif
-
-#if LV_FONT_ROBOTO_12_SUBPX
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0x0, 0x5a, 0xfc, 0x61, 0x0, 0x5, 0xaf, 0xc6,
- 0x10, 0x0, 0x5a, 0xfb, 0x61, 0x0, 0x4, 0xaf,
- 0xb6, 0x10, 0x0, 0x4a, 0xfb, 0x60, 0x0, 0x4,
- 0x9f, 0xb5, 0x0, 0x0, 0x26, 0x97, 0x30, 0x0,
- 0x0, 0x23, 0x21, 0x0, 0x0, 0x49, 0xeb, 0x61,
- 0x0,
-
- /* U+22 "\"" */
- 0x3, 0x8d, 0x94, 0x49, 0xc8, 0x30, 0x3, 0x8c,
- 0x93, 0x49, 0xc7, 0x20, 0x3, 0x8b, 0x82, 0x49,
- 0xb6, 0x10, 0x0, 0x11, 0x10, 0x1, 0x10, 0x0,
-
- /* U+23 "#" */
- 0x0, 0x0, 0x0, 0x1, 0x7c, 0xb6, 0x0, 0x16,
- 0xbc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xac, 0x72, 0x0, 0x4a, 0xd8, 0x30, 0x0, 0x0,
- 0x1, 0x6b, 0xee, 0xef, 0xff, 0xee, 0xee, 0xff,
- 0xfe, 0xed, 0x83, 0x0, 0x0, 0x0, 0x1, 0x6b,
- 0xc6, 0x10, 0x5, 0xbc, 0x72, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0x9d, 0x93, 0x0, 0x38, 0xd9,
- 0x40, 0x0, 0x0, 0x0, 0x38, 0xce, 0xee, 0xff,
- 0xee, 0xee, 0xef, 0xfe, 0xee, 0xb7, 0x20, 0x0,
- 0x0, 0x0, 0x49, 0xd9, 0x30, 0x3, 0x8d, 0xa4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xb6,
- 0x10, 0x5, 0xbc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x9d, 0x94, 0x0, 0x38, 0xda, 0x50,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+24 "$" */
- 0x0, 0x0, 0x0, 0x0, 0x49, 0xd9, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x69, 0xdf,
- 0xd9, 0x63, 0x10, 0x0, 0x0, 0x0, 0x5, 0xae,
- 0xec, 0x97, 0x77, 0xad, 0xfd, 0x83, 0x0, 0x0,
- 0x4, 0xaf, 0xc7, 0x20, 0x0, 0x0, 0x38, 0xde,
- 0x94, 0x0, 0x0, 0x49, 0xee, 0x93, 0x0, 0x0,
- 0x0, 0x23, 0x53, 0x10, 0x0, 0x0, 0x26, 0xbe,
- 0xfd, 0xa8, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x68, 0xad, 0xef, 0xda, 0x52,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x49, 0xee, 0x94, 0x0, 0x4, 0x9f, 0xd7, 0x20,
- 0x0, 0x0, 0x0, 0x5b, 0xfb, 0x50, 0x0, 0x4,
- 0xae, 0xeb, 0x75, 0x44, 0x46, 0xad, 0xfc, 0x72,
- 0x0, 0x0, 0x0, 0x25, 0x8a, 0xce, 0xfd, 0xb9,
- 0x74, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xbd, 0x82, 0x0, 0x0, 0x0, 0x0,
-
- /* U+25 "%" */
- 0x0, 0x37, 0xbc, 0xcc, 0xcb, 0x84, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xc7,
- 0x20, 0x1, 0x7c, 0xb6, 0x0, 0x2, 0x7a, 0x83,
- 0x0, 0x0, 0x0, 0x5, 0xad, 0x83, 0x0, 0x27,
- 0xcb, 0x50, 0x16, 0xbb, 0x61, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x59, 0xbc, 0xcb, 0xa6, 0x21, 0x5a,
- 0xb7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x14, 0xac, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xc9, 0x42, 0x48, 0xab, 0xcc, 0xb8, 0x41,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xa5, 0x12,
- 0x7c, 0xb5, 0x0, 0x5, 0xac, 0x83, 0x0, 0x0,
- 0x0, 0x17, 0xbb, 0x61, 0x0, 0x28, 0xca, 0x50,
- 0x0, 0x49, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x15, 0x9c, 0xcc, 0xcc, 0xa6,
- 0x20, 0x0,
-
- /* U+26 "&" */
- 0x0, 0x0, 0x25, 0x9c, 0xee, 0xfe, 0xda, 0x63,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd9,
- 0x40, 0x1, 0x6b, 0xfb, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xaf, 0xd8, 0x20, 0x2, 0x7c, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde,
- 0xcb, 0xcd, 0xc7, 0x31, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x59, 0xde, 0xff, 0xe9, 0x40, 0x0,
- 0x1, 0x33, 0x20, 0x0, 0x2, 0x7c, 0xfc, 0x72,
- 0x14, 0x9d, 0xeb, 0x51, 0x27, 0xdd, 0x82, 0x0,
- 0x5, 0xbf, 0xb6, 0x0, 0x0, 0x2, 0x7c, 0xed,
- 0xcd, 0xe9, 0x40, 0x0, 0x2, 0x7d, 0xea, 0x51,
- 0x0, 0x0, 0x15, 0xaf, 0xff, 0xb5, 0x10, 0x0,
- 0x0, 0x2, 0x59, 0xbd, 0xdd, 0xde, 0xdc, 0xa8,
- 0x7a, 0xde, 0xb5, 0x10,
-
- /* U+27 "'" */
- 0x16, 0xbc, 0x72, 0x16, 0xbc, 0x71, 0x16, 0xbb,
- 0x60, 0x0, 0x0, 0x0,
-
- /* U+28 "(" */
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x5a, 0xda, 0x51, 0x0, 0x0,
- 0x0, 0x15, 0xbd, 0xa4, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xdd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x28,
- 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf,
- 0xa5, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xe8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde, 0x83,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfa, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xb6, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf, 0xa5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xa5, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x6c, 0xd9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x99, 0x61,
- 0x0,
-
- /* U+29 ")" */
- 0x0, 0x1, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x38, 0xcb, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8d, 0xc7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x6b, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xde, 0x83, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xaf, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x3, 0x9e,
- 0xd7, 0x20, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xc6,
- 0x10, 0x0, 0x0, 0x0, 0x27, 0xcc, 0x83, 0x0,
- 0x0, 0x0, 0x0, 0x58, 0xa5, 0x20, 0x0, 0x0,
- 0x0,
-
- /* U+2A "*" */
- 0x0, 0x0, 0x0, 0x0, 0x28, 0xdb, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x24, 0x53, 0x12, 0x7c,
- 0xa5, 0x2, 0x44, 0x30, 0x0, 0x0, 0x3, 0x7a,
- 0xcd, 0xef, 0xff, 0xee, 0xdc, 0x95, 0x20, 0x0,
- 0x0, 0x0, 0x2, 0x6b, 0xde, 0xdc, 0x83, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x15, 0xbd, 0xa4, 0x13,
- 0x8d, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x11, 0x0, 0x0, 0x12, 0x10, 0x0, 0x0,
-
- /* U+2B "+" */
- 0x0, 0x0, 0x0, 0x1, 0x59, 0xb7, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7d, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x3,
- 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x40, 0x1, 0x12, 0x22, 0x24, 0x8d, 0xea,
- 0x52, 0x22, 0x22, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xde, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x7d, 0xe9, 0x40, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+2C "," */
- 0x0, 0x0, 0x49, 0xec, 0x72, 0x0, 0x0, 0x0,
- 0x5a, 0xfb, 0x60, 0x0, 0x0, 0x5, 0xad, 0xa5,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+2D "-" */
- 0x0, 0x16, 0xbf, 0xff, 0xff, 0xfb, 0x61, 0x0,
-
- /* U+2E "." */
- 0x0, 0x13, 0x43, 0x10, 0x0, 0x15, 0xbe, 0xb6,
- 0x10,
-
- /* U+2F "/" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdb,
- 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
- 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xdb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x9d, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xda, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9d, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5a, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xad, 0x93, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5a, 0xd9, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x16, 0xbd, 0x83, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+30 "0" */
- 0x0, 0x1, 0x37, 0xbd, 0xee, 0xfe, 0xdb, 0x84,
- 0x10, 0x0, 0x0, 0x4, 0x9e, 0xea, 0x51, 0x0,
- 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x3, 0x8e, 0xd8,
- 0x30, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0,
- 0x5a, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x6, 0xbf,
- 0xb6, 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0,
- 0x0, 0x5b, 0xfb, 0x61, 0x0, 0x4a, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x6, 0xbf, 0xb5, 0x0, 0x3,
- 0x8e, 0xe8, 0x30, 0x0, 0x0, 0x2, 0x7d, 0xf9,
- 0x40, 0x0, 0x4, 0x9e, 0xea, 0x52, 0x0, 0x14,
- 0x9d, 0xfa, 0x50, 0x0, 0x0, 0x1, 0x37, 0xad,
- 0xef, 0xfe, 0xdb, 0x84, 0x10, 0x0, 0x0,
-
- /* U+31 "1" */
- 0x0, 0x0, 0x1, 0x35, 0x7a, 0xcd, 0x84, 0x0,
- 0x4, 0x9e, 0xec, 0xaa, 0xce, 0xf9, 0x40, 0x0,
- 0x1, 0x10, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0x94, 0x0,
-
- /* U+32 "2" */
- 0x0, 0x2, 0x59, 0xbd, 0xef, 0xfe, 0xdb, 0x95,
- 0x20, 0x0, 0x0, 0x27, 0xde, 0xb7, 0x31, 0x0,
- 0x14, 0x9d, 0xfb, 0x61, 0x0, 0x4, 0x8b, 0x84,
- 0x0, 0x0, 0x0, 0x3, 0x8e, 0xd8, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xce, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x15, 0xad, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8c, 0xeb, 0x62, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x6b, 0xdc, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
-
- /* U+33 "3" */
- 0x0, 0x2, 0x59, 0xcd, 0xef, 0xfe, 0xdb, 0x84,
- 0x10, 0x0, 0x0, 0x27, 0xce, 0xb7, 0x20, 0x0,
- 0x14, 0x9d, 0xe9, 0x40, 0x0, 0x2, 0x47, 0x53,
- 0x0, 0x0, 0x0, 0x4, 0x9f, 0xc7, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xff, 0xff,
- 0xfd, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x24, 0x9d, 0xea, 0x51, 0x0, 0x2,
- 0x46, 0x42, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xe9,
- 0x30, 0x0, 0x38, 0xee, 0xa5, 0x20, 0x0, 0x13,
- 0x8c, 0xeb, 0x61, 0x0, 0x0, 0x3, 0x6a, 0xce,
- 0xef, 0xfe, 0xdb, 0x84, 0x10, 0x0, 0x0,
-
- /* U+34 "4" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
- 0xff, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x7c, 0xef, 0xff, 0x94, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xda, 0x78,
- 0xcf, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xdb, 0x61, 0x27, 0xcf, 0x94, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x49, 0xdc, 0x72, 0x0, 0x27,
- 0xcf, 0x94, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdd,
- 0x83, 0x0, 0x0, 0x27, 0xcf, 0x94, 0x0, 0x0,
- 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x27, 0xcf, 0x94, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xcf, 0x94, 0x0, 0x0,
-
- /* U+35 "5" */
- 0x0, 0x1, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfb, 0x50, 0x0, 0x0, 0x28, 0xdd, 0x83, 0x11,
- 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, 0x4, 0x9e,
- 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6b, 0xfd, 0xcc, 0xde, 0xed, 0xca, 0x63,
- 0x0, 0x0, 0x0, 0x3, 0x69, 0x86, 0x32, 0x23,
- 0x58, 0xcf, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x9e, 0xd8, 0x20, 0x0,
- 0x25, 0x74, 0x20, 0x0, 0x0, 0x0, 0x38, 0xdd,
- 0x83, 0x0, 0x2, 0x7d, 0xea, 0x62, 0x0, 0x2,
- 0x5a, 0xee, 0x94, 0x0, 0x0, 0x0, 0x26, 0xac,
- 0xee, 0xfe, 0xec, 0xa7, 0x31, 0x0, 0x0,
-
- /* U+36 "6" */
- 0x0, 0x0, 0x0, 0x24, 0x7a, 0xcd, 0xee, 0x94,
- 0x0, 0x0, 0x0, 0x0, 0x14, 0x9e, 0xeb, 0x85,
- 0x32, 0x10, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x16, 0xcf, 0xca, 0x9c, 0xde, 0xee, 0xca, 0x62,
- 0x0, 0x0, 0x3, 0x8d, 0xfe, 0xa6, 0x31, 0x1,
- 0x37, 0xcf, 0xd8, 0x20, 0x0, 0x38, 0xee, 0x83,
- 0x0, 0x0, 0x0, 0x4, 0xaf, 0xc6, 0x10, 0x1,
- 0x6c, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x4a, 0xfb,
- 0x61, 0x0, 0x1, 0x6b, 0xfc, 0x83, 0x10, 0x2,
- 0x7b, 0xec, 0x72, 0x0, 0x0, 0x0, 0x14, 0x8c,
- 0xef, 0xfe, 0xdc, 0x95, 0x20, 0x0, 0x0,
-
- /* U+37 "7" */
- 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x49, 0xec, 0x71, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xea, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c,
- 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x15, 0xbe, 0xb6, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xce, 0xa5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xee,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+38 "8" */
- 0x0, 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xdb, 0x84,
- 0x10, 0x0, 0x0, 0x3, 0x9e, 0xea, 0x51, 0x0,
- 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x1, 0x6c, 0xfa,
- 0x40, 0x0, 0x0, 0x3, 0x9e, 0xd8, 0x20, 0x0,
- 0x3, 0x8d, 0xda, 0x52, 0x0, 0x14, 0x9d, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x49, 0xdf, 0xff, 0xff,
- 0xfe, 0xa4, 0x10, 0x0, 0x0, 0x15, 0xbe, 0xc8,
- 0x41, 0x0, 0x13, 0x7c, 0xeb, 0x61, 0x0, 0x4,
- 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x6b, 0xfb,
- 0x50, 0x0, 0x27, 0xcf, 0xc7, 0x30, 0x0, 0x2,
- 0x6b, 0xed, 0x83, 0x0, 0x0, 0x2, 0x59, 0xbd,
- 0xef, 0xfe, 0xdc, 0xa6, 0x30, 0x0, 0x0,
-
- /* U+39 "9" */
- 0x0, 0x1, 0x48, 0xbd, 0xef, 0xfe, 0xc9, 0x52,
- 0x0, 0x0, 0x0, 0x16, 0xbf, 0xc8, 0x31, 0x1,
- 0x37, 0xce, 0xc7, 0x20, 0x0, 0x5, 0xaf, 0xb6,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0,
- 0x5a, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x27, 0xde,
- 0x94, 0x0, 0x1, 0x6c, 0xfc, 0x83, 0x10, 0x2,
- 0x5a, 0xdf, 0xe9, 0x40, 0x0, 0x0, 0x25, 0x9c,
- 0xde, 0xfe, 0xc9, 0x8a, 0xed, 0x82, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xce, 0x94,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x36, 0x9d,
- 0xec, 0x62, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde,
- 0xed, 0xb9, 0x63, 0x10, 0x0, 0x0, 0x0,
-
- /* U+3A ":" */
- 0x1, 0x6b, 0xea, 0x50, 0x0, 0x1, 0x34, 0x31,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x34, 0x31, 0x0, 0x1, 0x6b, 0xea, 0x50, 0x0,
-
- /* U+3B ";" */
- 0x0, 0x0, 0x38, 0xdd, 0x83, 0x0, 0x0, 0x0,
- 0x2, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x15, 0x88, 0x51, 0x0, 0x0, 0x0, 0x38, 0xed,
- 0x82, 0x0, 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0,
- 0x0, 0x2, 0x56, 0x41, 0x0, 0x0,
-
- /* U+3C "<" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x79, 0xa7,
- 0x30, 0x0, 0x0, 0x24, 0x79, 0xce, 0xfd, 0xb9,
- 0x63, 0x10, 0x26, 0xbe, 0xec, 0xa7, 0x52, 0x10,
- 0x0, 0x0, 0x0, 0x14, 0x8b, 0xde, 0xda, 0x86,
- 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x36,
- 0x9b, 0xef, 0xec, 0x95, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x36, 0x75, 0x20,
-
- /* U+3D "=" */
- 0x1, 0x6b, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
- 0xb6, 0x10, 0x0, 0x0, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x16, 0xbe, 0xee, 0xee, 0xee, 0xee, 0xee, 0xeb,
- 0x61, 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x10, 0x0, 0x0,
-
- /* U+3E ">" */
- 0x3, 0x7a, 0xa7, 0x52, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x58, 0xad, 0xee, 0xda,
- 0x85, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x68, 0xbd, 0xed, 0x95, 0x10, 0x0,
- 0x0, 0x0, 0x1, 0x35, 0x7a, 0xce, 0xec, 0xa6,
- 0x30, 0x0, 0x1, 0x59, 0xce, 0xfe, 0xc9, 0x74,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x25, 0x76, 0x31,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+3F "?" */
- 0x0, 0x25, 0x9c, 0xef, 0xff, 0xec, 0xa6, 0x20,
- 0x0, 0x16, 0xbf, 0xc8, 0x31, 0x1, 0x38, 0xdf,
- 0xb5, 0x0, 0x1, 0x22, 0x10, 0x0, 0x0, 0x4,
- 0x9e, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xed, 0x82, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x9d, 0xeb, 0x62, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x7c, 0xfb, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x35, 0x53, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x31, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x7c, 0xd8, 0x30, 0x0, 0x0,
- 0x0,
-
- /* U+40 "@" */
- 0x0, 0x0, 0x0, 0x0, 0x13, 0x69, 0xbc, 0xdd,
- 0xdd, 0xdd, 0xdb, 0xa7, 0x41, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x15, 0xac, 0xc8, 0x52, 0x10,
- 0x0, 0x0, 0x0, 0x24, 0x7b, 0xca, 0x51, 0x0,
- 0x0, 0x0, 0x1, 0x5b, 0xc9, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0x94,
- 0x0, 0x0, 0x2, 0x7c, 0xb6, 0x10, 0x0, 0x2,
- 0x59, 0xbc, 0xdc, 0xba, 0x62, 0x0, 0x2, 0x7b,
- 0x94, 0x0, 0x1, 0x6c, 0xc7, 0x10, 0x0, 0x27,
- 0xcc, 0x83, 0x0, 0x28, 0xdb, 0x60, 0x0, 0x4,
- 0xab, 0x71, 0x0, 0x49, 0xe9, 0x40, 0x0, 0x39,
- 0xea, 0x50, 0x0, 0x4, 0x9d, 0x94, 0x0, 0x0,
- 0x49, 0xc7, 0x20, 0x5, 0xad, 0x83, 0x0, 0x16,
- 0xcd, 0x82, 0x0, 0x0, 0x5a, 0xd8, 0x20, 0x0,
- 0x5, 0xbb, 0x61, 0x0, 0x49, 0xd9, 0x40, 0x0,
- 0x6b, 0xe9, 0x30, 0x0, 0x4a, 0xed, 0x82, 0x0,
- 0x16, 0xbb, 0x71, 0x0, 0x1, 0x6c, 0xc7, 0x10,
- 0x1, 0x48, 0xcd, 0xcb, 0xa7, 0x45, 0x9c, 0xdc,
- 0xcc, 0xa6, 0x20, 0x0, 0x0, 0x1, 0x6b, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
- 0xcd, 0xb6, 0x31, 0x0, 0x0, 0x0, 0x1, 0x22,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x25, 0x8a, 0xcc, 0xdc, 0xcc, 0xcd, 0xcb,
- 0x63, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+41 "A" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xfe,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x7c, 0xee, 0xee, 0x94, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x7c, 0xe9, 0x67, 0xcf, 0xa4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x40,
- 0x17, 0xcf, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8d, 0xea, 0x40, 0x0, 0x17, 0xcf,
- 0xb5, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e,
- 0xea, 0x40, 0x0, 0x0, 0x17, 0xcf, 0xb6, 0x10,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc6, 0x10, 0x0, 0x0,
- 0x4, 0x9e, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x16, 0xcf, 0xc7, 0x20, 0x0, 0x5, 0xaf, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf,
- 0xd7, 0x20,
-
- /* U+42 "B" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdb,
- 0x85, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x2, 0x49, 0xdf, 0xa5, 0x10, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x4,
- 0x9e, 0xd8, 0x30, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x2, 0x5a, 0xee, 0x94, 0x0, 0x0,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xb6, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x1, 0x26, 0xbe, 0xd8, 0x30, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x5b, 0xfc, 0x61, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x1, 0x37, 0xbe, 0xe9, 0x30, 0x0,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xec,
- 0xa6, 0x30, 0x0, 0x0,
-
- /* U+43 "C" */
- 0x0, 0x0, 0x1, 0x48, 0xbd, 0xef, 0xfe, 0xec,
- 0xa8, 0x41, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xeb,
- 0x74, 0x21, 0x1, 0x24, 0x9c, 0xfc, 0x72, 0x0,
- 0x1, 0x6b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9e, 0xc7, 0x20, 0x3, 0x8e, 0xe8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9f, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xe8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x6b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9e, 0xc7, 0x20, 0x0, 0x4, 0x9e, 0xeb,
- 0x74, 0x21, 0x1, 0x24, 0x8c, 0xfc, 0x72, 0x0,
- 0x0, 0x0, 0x2, 0x59, 0xbd, 0xff, 0xfe, 0xdc,
- 0xa7, 0x41, 0x0, 0x0,
-
- /* U+44 "D" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xed, 0xb8,
- 0x41, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x1, 0x24, 0x7b, 0xee, 0xa4, 0x10, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x4a, 0xed, 0x82, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xc6, 0x10,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xc6, 0x10,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x5a, 0xed, 0x82, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x1, 0x24, 0x7b, 0xee, 0xa4, 0x10, 0x0,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xed, 0xa7,
- 0x41, 0x0, 0x0, 0x0,
-
- /* U+45 "E" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xb5, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
- 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd7, 0x20, 0x0, 0x5, 0xbf, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x10,
-
- /* U+46 "F" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x94, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
- 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5, 0xbf, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+47 "G" */
- 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xed,
- 0xb9, 0x62, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xeb,
- 0x74, 0x21, 0x0, 0x13, 0x7b, 0xee, 0x94, 0x0,
- 0x1, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x46, 0x63, 0x10, 0x3, 0x8d, 0xe9, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9f, 0xd8, 0x20, 0x0, 0x2, 0x7c, 0xff,
- 0xff, 0xff, 0xfa, 0x40, 0x3, 0x8e, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xfa, 0x40,
- 0x0, 0x5a, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x8d, 0xfa, 0x40, 0x0, 0x3, 0x8d, 0xfd,
- 0x95, 0x21, 0x0, 0x1, 0x47, 0xcf, 0xe9, 0x30,
- 0x0, 0x0, 0x1, 0x37, 0xac, 0xef, 0xff, 0xfe,
- 0xdb, 0x96, 0x30, 0x0,
-
- /* U+48 "H" */
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x83, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xee, 0x83,
-
- /* U+49 "I" */
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x4, 0x9e, 0xe8,
- 0x30, 0x0, 0x49, 0xee, 0x83, 0x0, 0x4, 0x9e,
- 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83, 0x0, 0x4,
- 0x9e, 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83, 0x0,
- 0x4, 0x9e, 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83,
- 0x0,
-
- /* U+4A "J" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
- 0x0, 0x3, 0x69, 0x74, 0x10, 0x0, 0x0, 0x2,
- 0x7d, 0xfa, 0x50, 0x0, 0x0, 0x2, 0x7c, 0xfc,
- 0x83, 0x10, 0x2, 0x49, 0xdf, 0xb6, 0x10, 0x0,
- 0x0, 0x0, 0x2, 0x69, 0xcd, 0xef, 0xfe, 0xdb,
- 0x95, 0x20, 0x0, 0x0,
-
- /* U+4B "K" */
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x3,
- 0x8c, 0xec, 0x83, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x25, 0xbe, 0xea, 0x51, 0x0, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x38, 0xde, 0xc7,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x74,
- 0x6b, 0xee, 0xa4, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5b, 0xfe, 0xee, 0xff, 0xfe, 0x94, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xc8,
- 0x32, 0x5a, 0xee, 0xa5, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x49, 0xee,
- 0xb6, 0x10, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x39, 0xdf, 0xc7, 0x20, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xdf, 0xc7, 0x30,
-
- /* U+4C "L" */
- 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
- 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xbf, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf, 0xc7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
-
- /* U+4D "M" */
- 0x0, 0x5b, 0xff, 0xea, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfd, 0x72, 0x0,
- 0x5b, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8d, 0xff, 0xfd, 0x72, 0x0, 0x5b,
- 0xfc, 0xbb, 0xfb, 0x61, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xed, 0xbb, 0xed, 0x72, 0x0, 0x5b, 0xfb,
- 0x65, 0xae, 0xc7, 0x10, 0x0, 0x0, 0x4, 0xae,
- 0xc7, 0x59, 0xed, 0x72, 0x0, 0x5b, 0xfc, 0x61,
- 0x49, 0xed, 0x72, 0x0, 0x0, 0x5b, 0xfb, 0x61,
- 0x49, 0xfd, 0x72, 0x0, 0x5b, 0xfc, 0x61, 0x3,
- 0x8d, 0xd8, 0x30, 0x16, 0xbe, 0xa5, 0x0, 0x4a,
- 0xfd, 0x72, 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x27,
- 0xde, 0x95, 0x7c, 0xe9, 0x40, 0x0, 0x5a, 0xfd,
- 0x72, 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x1, 0x7c,
- 0xff, 0xfe, 0x83, 0x0, 0x0, 0x5a, 0xfd, 0x72,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x16, 0xbf,
- 0xd8, 0x20, 0x0, 0x0, 0x5a, 0xfd, 0x72,
-
- /* U+4E "N" */
- 0x0, 0x5b, 0xff, 0xc6, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xff, 0xff,
- 0xb6, 0x10, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfd, 0xbb, 0xee, 0xa5, 0x10, 0x0,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x73,
- 0x5a, 0xee, 0x94, 0x0, 0x0, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfc, 0x72, 0x1, 0x5b, 0xed, 0x93,
- 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x72,
- 0x0, 0x1, 0x6b, 0xfd, 0x83, 0x49, 0xee, 0x83,
- 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x2, 0x7c,
- 0xfc, 0xbb, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x72,
- 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xfe, 0x83,
- 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x8d, 0xfe, 0x83,
-
- /* U+4F "O" */
- 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xed,
- 0xa8, 0x41, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xec,
- 0x85, 0x31, 0x12, 0x35, 0x9d, 0xfc, 0x72, 0x0,
- 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x8d, 0xe9, 0x40, 0x3, 0x8e, 0xe9, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
- 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x39, 0xed, 0x83, 0x3, 0x8e, 0xe9, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
- 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x8d, 0xe9, 0x40, 0x0, 0x3, 0x8d, 0xec,
- 0x84, 0x21, 0x11, 0x35, 0x9c, 0xfc, 0x72, 0x0,
- 0x0, 0x0, 0x1, 0x48, 0xbd, 0xef, 0xff, 0xed,
- 0xa7, 0x31, 0x0, 0x0,
-
- /* U+50 "P" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
- 0xb9, 0x52, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x24, 0x8c, 0xfd, 0x83, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xbf, 0xb6, 0x10, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x13, 0x7b, 0xee, 0x83, 0x0,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
- 0xca, 0x63, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+51 "Q" */
- 0x0, 0x0, 0x2, 0x59, 0xbd, 0xef, 0xff, 0xec,
- 0xa7, 0x41, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xec,
- 0x84, 0x21, 0x12, 0x36, 0xad, 0xfc, 0x61, 0x0,
- 0x1, 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9e, 0xe8, 0x30, 0x4, 0x9e, 0xd8, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfb, 0x61,
- 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4a, 0xfd, 0x72, 0x4, 0x9e, 0xd8, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfc, 0x71,
- 0x1, 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x9e, 0xe9, 0x30, 0x0, 0x4, 0x9e, 0xeb,
- 0x74, 0x21, 0x11, 0x36, 0x9d, 0xec, 0x72, 0x0,
- 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xff,
- 0xfe, 0xa5, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x5a, 0xdf, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x12, 0x32, 0x0,
-
- /* U+52 "R" */
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdc,
- 0x96, 0x30, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x1, 0x37, 0xbe, 0xe8, 0x30, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x1, 0x37, 0xce, 0xd8, 0x30, 0x0,
- 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x95, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x5a, 0xed, 0x83, 0x0, 0x0, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x2, 0x8d,
- 0xea, 0x50, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x16, 0xbf, 0xc7, 0x20, 0x0,
- 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xee, 0x94, 0x0,
-
- /* U+53 "S" */
- 0x0, 0x1, 0x37, 0xac, 0xde, 0xff, 0xed, 0xb9,
- 0x63, 0x0, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x10,
- 0x1, 0x36, 0xae, 0xea, 0x41, 0x3, 0x8e, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x2, 0x59, 0x96, 0x20,
- 0x3, 0x8d, 0xfd, 0x96, 0x32, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x13, 0x68, 0xbd, 0xef,
- 0xec, 0xa7, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x12, 0x58, 0xbe, 0xea, 0x41, 0x15,
- 0x8a, 0x73, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
- 0xf9, 0x40, 0x38, 0xdf, 0xc8, 0x42, 0x10, 0x0,
- 0x24, 0x8c, 0xfc, 0x72, 0x0, 0x2, 0x48, 0xac,
- 0xef, 0xff, 0xfe, 0xdb, 0x85, 0x20, 0x0,
-
- /* U+54 "T" */
- 0x0, 0x6, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd,
- 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4a, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf,
- 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+55 "U" */
- 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
- 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
- 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
- 0x1, 0x6c, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xee, 0x93, 0x0, 0x0, 0x27, 0xcf, 0xc8,
- 0x42, 0x0, 0x1, 0x37, 0xbe, 0xe9, 0x40, 0x0,
- 0x0, 0x0, 0x24, 0x8b, 0xce, 0xff, 0xfe, 0xdb,
- 0x95, 0x20, 0x0, 0x0,
-
- /* U+56 "V" */
- 0x0, 0x5, 0xaf, 0xd8, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x39, 0xef, 0xa4, 0x0, 0x0, 0x4,
- 0xaf, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xee, 0xa4, 0x0, 0x0, 0x0, 0x4, 0xae, 0xd8,
- 0x20, 0x0, 0x0, 0x0, 0x38, 0xee, 0x94, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd8, 0x20, 0x0,
- 0x0, 0x38, 0xde, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x38, 0xde,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x9e, 0xc7, 0x20, 0x28, 0xdd, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xc7,
- 0x48, 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8d, 0xee, 0xed, 0x82,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x8d, 0xfd, 0x72, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+57 "W" */
- 0x38, 0xde, 0x94, 0x0, 0x0, 0x0, 0x3, 0x8e,
- 0xfa, 0x50, 0x0, 0x0, 0x0, 0x28, 0xdf, 0x94,
- 0x0, 0x4a, 0xfc, 0x72, 0x0, 0x0, 0x2, 0x7c,
- 0xff, 0xe9, 0x40, 0x0, 0x0, 0x16, 0xbf, 0xb5,
- 0x0, 0x1, 0x6b, 0xfb, 0x50, 0x0, 0x1, 0x6c,
- 0xea, 0xac, 0xd8, 0x30, 0x0, 0x4, 0x9f, 0xd7,
- 0x20, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x5b,
- 0xea, 0x43, 0x8d, 0xc7, 0x10, 0x2, 0x7d, 0xe9,
- 0x40, 0x0, 0x0, 0x4, 0x9e, 0xc7, 0x20, 0x49,
- 0xeb, 0x50, 0x3, 0x9e, 0xb6, 0x0, 0x6b, 0xfa,
- 0x50, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xa5, 0x48,
- 0xeb, 0x61, 0x0, 0x5, 0xae, 0xa5, 0x49, 0xec,
- 0x72, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde, 0xbb,
- 0xdd, 0x72, 0x0, 0x0, 0x16, 0xbd, 0xaa, 0xce,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
- 0xfd, 0x83, 0x0, 0x0, 0x0, 0x16, 0xcf, 0xff,
- 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b,
- 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdf,
- 0xc7, 0x10, 0x0, 0x0, 0x0,
-
- /* U+58 "X" */
- 0x4, 0x9e, 0xea, 0x51, 0x0, 0x0, 0x0, 0x2,
- 0x7c, 0xfd, 0x82, 0x0, 0x0, 0x15, 0xbe, 0xe9,
- 0x40, 0x0, 0x1, 0x6b, 0xfd, 0x93, 0x0, 0x0,
- 0x0, 0x0, 0x26, 0xcf, 0xd7, 0x21, 0x49, 0xee,
- 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xcf, 0xdd, 0xde, 0xb5, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x6b, 0xff, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xdf, 0xdd, 0xef, 0xb6, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x27, 0xcf, 0xd7, 0x21, 0x49, 0xee,
- 0xa5, 0x10, 0x0, 0x0, 0x0, 0x26, 0xcf, 0xd9,
- 0x30, 0x0, 0x1, 0x5b, 0xee, 0x94, 0x0, 0x0,
- 0x15, 0xbf, 0xea, 0x40, 0x0, 0x0, 0x0, 0x2,
- 0x6c, 0xfd, 0x93, 0x0,
-
- /* U+59 "Y" */
- 0x0, 0x5, 0xae, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x16, 0xcf, 0xd8, 0x20, 0x0, 0x0, 0x2,
- 0x7c, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x39, 0xee,
- 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee,
- 0x93, 0x0, 0x1, 0x6b, 0xfc, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x16, 0xce, 0xb6, 0x13,
- 0x8d, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0x9d, 0xdc, 0xce, 0xb6, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x6b, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf,
- 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+5A "Z" */
- 0x16, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc,
- 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c,
- 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfb, 0x60, 0x0,
-
- /* U+5B "[" */
- 0x2, 0x7c, 0xff, 0xff, 0xb6, 0x0, 0x2, 0x7d,
- 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
- 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
- 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d,
- 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
- 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
- 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d,
- 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
- 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
- 0x2, 0x7c, 0xff, 0xff, 0xb6, 0x0,
-
- /* U+5C "\\" */
- 0x0, 0x4, 0x9e, 0xc7, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xc7, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x8d, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0x8d, 0xd8, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7c, 0xe8, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c,
- 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x6b, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xea, 0x50,
- 0x0,
-
- /* U+5D "]" */
- 0x0, 0x49, 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0,
- 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
- 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
- 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
- 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
- 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
- 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
- 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
- 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
- 0x0, 0x49, 0xef, 0xff, 0xe9, 0x40,
-
- /* U+5E "^" */
- 0x0, 0x0, 0x2, 0x57, 0x52, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x9e, 0xfe, 0x94, 0x0, 0x0, 0x0,
- 0x5, 0xae, 0xa9, 0xae, 0xa5, 0x0, 0x0, 0x15,
- 0xbe, 0x94, 0x4, 0x9e, 0xb5, 0x10, 0x16, 0xce,
- 0x93, 0x0, 0x3, 0x9e, 0xc6, 0x10,
-
- /* U+5F "_" */
- 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0,
-
- /* U+60 "`" */
- 0x14, 0x9e, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x3,
- 0x8d, 0xc7, 0x20, 0x0,
-
- /* U+61 "a" */
- 0x0, 0x1, 0x48, 0xbd, 0xee, 0xee, 0xdb, 0x73,
- 0x0, 0x0, 0x0, 0x15, 0xbf, 0xc8, 0x30, 0x0,
- 0x26, 0xbf, 0xd7, 0x20, 0x0, 0x0, 0x12, 0x21,
- 0x0, 0x0, 0x0, 0x27, 0xcf, 0xa5, 0x0, 0x0,
- 0x0, 0x25, 0x8a, 0xcc, 0xdd, 0xdd, 0xef, 0xfa,
- 0x50, 0x0, 0x3, 0x8d, 0xea, 0x51, 0x0, 0x0,
- 0x17, 0xcf, 0xa5, 0x0, 0x0, 0x49, 0xfe, 0xa4,
- 0x10, 0x12, 0x48, 0xce, 0xfa, 0x50, 0x0, 0x0,
- 0x25, 0x9c, 0xef, 0xff, 0xdb, 0x89, 0xad, 0xb6,
- 0x10, 0x0,
-
- /* U+62 "b" */
- 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x28, 0xde, 0xb9, 0x9c, 0xee, 0xee, 0xca, 0x62,
- 0x0, 0x0, 0x2, 0x8d, 0xfd, 0xa5, 0x20, 0x1,
- 0x48, 0xcf, 0xc7, 0x10, 0x0, 0x28, 0xde, 0x93,
- 0x0, 0x0, 0x0, 0x5, 0xbf, 0xb6, 0x10, 0x2,
- 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x39, 0xed,
- 0x72, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
- 0x5, 0xaf, 0xb6, 0x10, 0x2, 0x8d, 0xfe, 0xa5,
- 0x20, 0x1, 0x48, 0xcf, 0xc7, 0x10, 0x0, 0x28,
- 0xdd, 0xa8, 0x9c, 0xee, 0xfe, 0xca, 0x62, 0x0,
- 0x0,
-
- /* U+63 "c" */
- 0x0, 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xdb, 0x83,
- 0x10, 0x0, 0x0, 0x15, 0xae, 0xd8, 0x41, 0x0,
- 0x14, 0x9d, 0xe9, 0x40, 0x0, 0x5, 0xaf, 0xb6,
- 0x10, 0x0, 0x0, 0x1, 0x36, 0x63, 0x10, 0x1,
- 0x6c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xaf, 0xb6, 0x10, 0x0, 0x0,
- 0x0, 0x23, 0x32, 0x0, 0x0, 0x15, 0xae, 0xd8,
- 0x41, 0x0, 0x13, 0x8c, 0xea, 0x40, 0x0, 0x0,
- 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xda, 0x73, 0x10,
- 0x0, 0x0,
-
- /* U+64 "d" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
- 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0,
- 0x0, 0x14, 0x8b, 0xde, 0xfe, 0xca, 0x9a, 0xee,
- 0x93, 0x0, 0x1, 0x5b, 0xfd, 0x95, 0x21, 0x1,
- 0x48, 0xcf, 0xe9, 0x30, 0x0, 0x5a, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x16,
- 0xbf, 0xa5, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x5a, 0xfb, 0x61, 0x0, 0x0, 0x0,
- 0x28, 0xde, 0x93, 0x0, 0x1, 0x5a, 0xec, 0x83,
- 0x0, 0x0, 0x27, 0xcf, 0xe9, 0x30, 0x0, 0x0,
- 0x14, 0x8b, 0xde, 0xed, 0xcb, 0x9b, 0xde, 0x93,
- 0x0,
-
- /* U+65 "e" */
- 0x0, 0x0, 0x36, 0xac, 0xef, 0xfe, 0xda, 0x62,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd9, 0x51, 0x0,
- 0x25, 0xae, 0xd8, 0x30, 0x0, 0x4, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x3, 0x8e, 0xd7, 0x20, 0x1,
- 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x93, 0x0, 0x5, 0xaf, 0xb6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae, 0xd9,
- 0x42, 0x0, 0x2, 0x47, 0x97, 0x30, 0x0, 0x0,
- 0x1, 0x37, 0xac, 0xee, 0xff, 0xec, 0xa6, 0x30,
- 0x0, 0x0,
-
- /* U+66 "f" */
- 0x0, 0x0, 0x14, 0x8c, 0xef, 0xfc, 0x72, 0x0,
- 0x0, 0x28, 0xde, 0xa6, 0x10, 0x0, 0x0, 0x0,
- 0x4, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x4, 0x9e,
- 0xef, 0xff, 0xfe, 0xeb, 0x61, 0x0, 0x0, 0x5,
- 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a,
- 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
- 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc,
- 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
- 0x0, 0x0, 0x0,
-
- /* U+67 "g" */
- 0x0, 0x1, 0x48, 0xbd, 0xef, 0xec, 0xa8, 0x9d,
- 0xe9, 0x40, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x10,
- 0x14, 0x8c, 0xfe, 0x94, 0x0, 0x5, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x40, 0x1,
- 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x28, 0xde,
- 0x94, 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0,
- 0x2, 0x8d, 0xe9, 0x40, 0x0, 0x15, 0xbf, 0xd9,
- 0x52, 0x0, 0x14, 0x9d, 0xfe, 0x94, 0x0, 0x0,
- 0x1, 0x48, 0xbd, 0xef, 0xed, 0xa9, 0xbe, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xed, 0x82, 0x0, 0x0, 0x39, 0xba, 0x52,
- 0x0, 0x2, 0x6b, 0xee, 0x94, 0x0, 0x0, 0x0,
- 0x26, 0x9c, 0xef, 0xfe, 0xec, 0xa7, 0x31, 0x0,
- 0x0,
-
- /* U+68 "h" */
- 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x28, 0xde, 0xa8, 0x8b, 0xef, 0xfe, 0xdb, 0x62,
- 0x0, 0x0, 0x2, 0x8d, 0xfe, 0xb6, 0x21, 0x1,
- 0x49, 0xdf, 0xa5, 0x0, 0x0, 0x28, 0xde, 0x93,
- 0x0, 0x0, 0x0, 0x49, 0xfc, 0x71, 0x0, 0x2,
- 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4, 0x9f, 0xd7,
- 0x20, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
- 0x49, 0xfd, 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30,
- 0x0, 0x0, 0x4, 0x9f, 0xd7, 0x20, 0x0, 0x28,
- 0xde, 0x93, 0x0, 0x0, 0x0, 0x49, 0xfd, 0x72,
- 0x0,
-
- /* U+69 "i" */
- 0x1, 0x5b, 0xea, 0x40, 0x0, 0x1, 0x23, 0x20,
- 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf,
- 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16,
- 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0,
- 0x16, 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50,
- 0x0,
-
- /* U+6A "j" */
- 0x0, 0x0, 0x27, 0xcd, 0x83, 0x0, 0x0, 0x0,
- 0x1, 0x33, 0x20, 0x0, 0x0, 0x0, 0x27, 0xdf,
- 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0,
- 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf,
- 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0,
- 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
- 0x27, 0xde, 0x94, 0x0, 0x0, 0x1, 0x49, 0xed,
- 0x83, 0x0, 0x5, 0xaf, 0xfe, 0xb6, 0x20, 0x0,
-
- /* U+6B "k" */
- 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x28, 0xde, 0x93, 0x0, 0x1, 0x4a, 0xde, 0xa5,
- 0x10, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x37, 0xce,
- 0xc8, 0x30, 0x0, 0x0, 0x0, 0x28, 0xde, 0xa8,
- 0xae, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x8d, 0xff, 0xff, 0xfe, 0xb6, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x28, 0xdf, 0xb5, 0x24, 0x9d, 0xeb,
- 0x61, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30,
- 0x0, 0x38, 0xde, 0xb6, 0x10, 0x0, 0x0, 0x28,
- 0xde, 0x93, 0x0, 0x0, 0x3, 0x8d, 0xeb, 0x61,
- 0x0,
-
- /* U+6C "l" */
- 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf, 0xa5,
- 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf,
- 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16,
- 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0,
- 0x16, 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50,
- 0x0, 0x16, 0xcf, 0xa5, 0x0,
-
- /* U+6D "m" */
- 0x3, 0x8d, 0xea, 0x89, 0xcd, 0xef, 0xed, 0xa6,
- 0x33, 0x7b, 0xdf, 0xff, 0xec, 0x94, 0x10, 0x0,
- 0x0, 0x38, 0xdf, 0xd9, 0x51, 0x0, 0x15, 0x9d,
- 0xff, 0xd9, 0x41, 0x0, 0x16, 0xae, 0xe8, 0x30,
- 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4,
- 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x16, 0xbf, 0xb5,
- 0x0, 0x0, 0x38, 0xde, 0x93, 0x0, 0x0, 0x0,
- 0x49, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x6b, 0xfb,
- 0x60, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0,
- 0x4, 0x9f, 0xc7, 0x20, 0x0, 0x0, 0x6, 0xbf,
- 0xb6, 0x0, 0x0, 0x38, 0xde, 0x93, 0x0, 0x0,
- 0x0, 0x49, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x6b,
- 0xfb, 0x60, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0,
- 0x0, 0x4, 0x9f, 0xc7, 0x20, 0x0, 0x0, 0x6,
- 0xbf, 0xb6, 0x0, 0x0,
-
- /* U+6E "n" */
- 0x2, 0x8d, 0xd9, 0x78, 0xbe, 0xff, 0xed, 0xb6,
- 0x20, 0x0, 0x0, 0x28, 0xdf, 0xeb, 0x62, 0x10,
- 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x4, 0x9f, 0xc7, 0x10, 0x0,
- 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x49, 0xfd,
- 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
- 0x4, 0x9f, 0xd7, 0x20, 0x0, 0x28, 0xde, 0x93,
- 0x0, 0x0, 0x0, 0x49, 0xfd, 0x72, 0x0, 0x2,
- 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4, 0x9f, 0xd7,
- 0x20, 0x0,
-
- /* U+6F "o" */
- 0x0, 0x0, 0x36, 0xad, 0xef, 0xff, 0xdb, 0x84,
- 0x10, 0x0, 0x0, 0x4, 0xae, 0xda, 0x52, 0x0,
- 0x13, 0x7c, 0xec, 0x72, 0x0, 0x5, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x49, 0xed, 0x72, 0x1,
- 0x7c, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x2, 0x7c,
- 0xf9, 0x40, 0x5, 0xaf, 0xc6, 0x10, 0x0, 0x0,
- 0x0, 0x49, 0xed, 0x82, 0x0, 0x4, 0xae, 0xd9,
- 0x52, 0x0, 0x13, 0x7b, 0xec, 0x72, 0x0, 0x0,
- 0x1, 0x37, 0xac, 0xee, 0xfe, 0xdb, 0x95, 0x20,
- 0x0, 0x0,
-
- /* U+70 "p" */
- 0x2, 0x8d, 0xeb, 0x9a, 0xcd, 0xee, 0xec, 0x96,
- 0x20, 0x0, 0x0, 0x28, 0xdf, 0xc8, 0x30, 0x0,
- 0x3, 0x7c, 0xfc, 0x71, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x5b, 0xfb, 0x61, 0x0,
- 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x4, 0x9e,
- 0xd7, 0x20, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
- 0x0, 0x6b, 0xfb, 0x60, 0x0, 0x28, 0xdf, 0xd8,
- 0x41, 0x0, 0x14, 0x8d, 0xfc, 0x61, 0x0, 0x2,
- 0x8d, 0xeb, 0xaa, 0xce, 0xee, 0xec, 0xa6, 0x20,
- 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28,
- 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+71 "q" */
- 0x0, 0x1, 0x48, 0xbd, 0xee, 0xed, 0xa8, 0xad,
- 0xe9, 0x30, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x0,
- 0x13, 0x8c, 0xfe, 0x93, 0x0, 0x5, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x1,
- 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x38, 0xde,
- 0x93, 0x0, 0x5, 0xaf, 0xc6, 0x10, 0x0, 0x0,
- 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x15, 0xbf, 0xd9,
- 0x41, 0x0, 0x14, 0x8c, 0xfe, 0x93, 0x0, 0x0,
- 0x1, 0x48, 0xbd, 0xef, 0xed, 0xba, 0xbe, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde, 0x93,
- 0x0,
-
- /* U+72 "r" */
- 0x2, 0x8d, 0xeb, 0xab, 0xde, 0xd8, 0x30, 0x0,
- 0x28, 0xdf, 0xea, 0x52, 0x0, 0x0, 0x0, 0x2,
- 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x28,
- 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
- 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x28, 0xde,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
- 0x30, 0x0, 0x0, 0x0, 0x0,
-
- /* U+73 "s" */
- 0x0, 0x3, 0x6a, 0xce, 0xff, 0xed, 0xc9, 0x52,
- 0x0, 0x1, 0x6c, 0xfb, 0x62, 0x0, 0x13, 0x8c,
- 0xfb, 0x61, 0x1, 0x6c, 0xfc, 0x84, 0x21, 0x0,
- 0x0, 0x11, 0x0, 0x0, 0x1, 0x47, 0x9b, 0xde,
- 0xed, 0xb8, 0x52, 0x0, 0x1, 0x23, 0x21, 0x0,
- 0x0, 0x13, 0x7b, 0xfc, 0x72, 0x4, 0x9e, 0xea,
- 0x41, 0x0, 0x1, 0x6a, 0xec, 0x72, 0x0, 0x13,
- 0x7a, 0xce, 0xef, 0xee, 0xca, 0x73, 0x0,
-
- /* U+74 "t" */
- 0x0, 0x0, 0x1, 0x36, 0x75, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0,
- 0x49, 0xde, 0xff, 0xff, 0xee, 0xb6, 0x20, 0x0,
- 0x0, 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0, 0x16,
- 0xcf, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
- 0xad, 0xff, 0xc7, 0x20,
-
- /* U+75 "u" */
- 0x3, 0x8e, 0xe8, 0x30, 0x0, 0x0, 0x4, 0xaf,
- 0xc7, 0x20, 0x0, 0x38, 0xee, 0x83, 0x0, 0x0,
- 0x0, 0x4a, 0xfc, 0x72, 0x0, 0x3, 0x8e, 0xe8,
- 0x30, 0x0, 0x0, 0x4, 0xaf, 0xc7, 0x20, 0x0,
- 0x38, 0xee, 0x83, 0x0, 0x0, 0x0, 0x4a, 0xfc,
- 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
- 0x4, 0xaf, 0xc7, 0x20, 0x0, 0x15, 0xbf, 0xc8,
- 0x30, 0x1, 0x26, 0xbe, 0xfc, 0x72, 0x0, 0x0,
- 0x3, 0x7b, 0xde, 0xff, 0xec, 0x99, 0xbf, 0xc7,
- 0x20, 0x0,
-
- /* U+76 "v" */
- 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x5,
- 0xaf, 0xc6, 0x10, 0x0, 0x5, 0xaf, 0xc6, 0x10,
- 0x0, 0x4, 0xaf, 0xc6, 0x10, 0x0, 0x0, 0x5,
- 0xaf, 0xb6, 0x10, 0x4, 0x9e, 0xc7, 0x10, 0x0,
- 0x0, 0x0, 0x5, 0xae, 0xb5, 0x3, 0x9e, 0xc7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xa8,
- 0x9d, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xaf, 0xff, 0xc7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xaf, 0xc7, 0x20, 0x0,
- 0x0, 0x0,
-
- /* U+77 "w" */
- 0x0, 0x4, 0x9e, 0xc7, 0x10, 0x0, 0x1, 0x6c,
- 0xfb, 0x61, 0x0, 0x0, 0x27, 0xce, 0x94, 0x0,
- 0x0, 0x0, 0x5, 0xaf, 0xa5, 0x0, 0x0, 0x5b,
- 0xff, 0xfa, 0x50, 0x0, 0x5, 0xbf, 0xa5, 0x0,
- 0x0, 0x0, 0x0, 0x16, 0xce, 0x94, 0x0, 0x5a,
- 0xd9, 0x8a, 0xea, 0x50, 0x4, 0x9e, 0xb6, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x28, 0xdd, 0x72, 0x49,
- 0xda, 0x40, 0x5a, 0xe9, 0x42, 0x7d, 0xc7, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xeb, 0x99,
- 0xda, 0x50, 0x0, 0x6b, 0xd9, 0x9b, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xff,
- 0xfb, 0x61, 0x0, 0x1, 0x6c, 0xff, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b,
- 0xfc, 0x71, 0x0, 0x0, 0x2, 0x7c, 0xfb, 0x50,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+78 "x" */
- 0x0, 0x1, 0x6b, 0xfd, 0x82, 0x0, 0x0, 0x49,
- 0xee, 0xa5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x7c,
- 0xeb, 0x61, 0x27, 0xce, 0xb6, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8d, 0xed, 0xde, 0xc7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x17, 0xcf, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xdc, 0xce, 0xd7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
- 0xea, 0x51, 0x16, 0xbe, 0xc7, 0x20, 0x0, 0x0,
- 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x28,
- 0xdf, 0xb6, 0x10, 0x0,
-
- /* U+79 "y" */
- 0x0, 0x16, 0xbf, 0xc7, 0x20, 0x0, 0x0, 0x17,
- 0xcf, 0xb6, 0x10, 0x0, 0x16, 0xbf, 0xc7, 0x10,
- 0x0, 0x16, 0xbf, 0xb6, 0x10, 0x0, 0x0, 0x16,
- 0xbf, 0xb6, 0x10, 0x5, 0xaf, 0xc6, 0x10, 0x0,
- 0x0, 0x0, 0x16, 0xcf, 0xb6, 0x14, 0xaf, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x16, 0xcf, 0xb9,
- 0xae, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x17, 0xcf, 0xff, 0xd7, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x17, 0xcf, 0xd8, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x24,
- 0x9d, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xcf, 0xeb, 0x73, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+7A "z" */
- 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xed,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5b, 0xed,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5b, 0xed,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xed,
- 0x83, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xed,
- 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83,
-
- /* U+7B "{" */
- 0x0, 0x0, 0x0, 0x2, 0x47, 0x75, 0x10, 0x0,
- 0x0, 0x0, 0x49, 0xed, 0x94, 0x10, 0x0, 0x0,
- 0x0, 0x49, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xbf, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x1, 0x5a,
- 0xec, 0x72, 0x0, 0x0, 0x0, 0x49, 0xff, 0xfb,
- 0x51, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xec,
- 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfa,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf, 0xb6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xfc, 0x71,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xdd, 0x94,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0x47, 0x75,
- 0x10, 0x0,
-
- /* U+7C "|" */
- 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4, 0xae, 0x93,
- 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4, 0xae,
- 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4,
- 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0,
- 0x4, 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30,
- 0x0, 0x4, 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9,
- 0x30, 0x0,
-
- /* U+7D "}" */
- 0x0, 0x14, 0x78, 0x52, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x8d, 0xea, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xaf, 0xb6, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x4a, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x6c, 0xeb, 0x61, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xef, 0xfa, 0x50, 0x0, 0x0, 0x1,
- 0x6c, 0xeb, 0x61, 0x0, 0x0, 0x0, 0x0, 0x4a,
- 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
- 0xb6, 0x10, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfa,
- 0x50, 0x0, 0x0, 0x0, 0x14, 0x8d, 0xea, 0x40,
- 0x0, 0x0, 0x0, 0x14, 0x77, 0x42, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+7E "~" */
- 0x0, 0x1, 0x59, 0xcd, 0xdc, 0x95, 0x20, 0x0,
- 0x0, 0x38, 0xca, 0x50, 0x0, 0x4a, 0xeb, 0x73,
- 0x36, 0xad, 0xd9, 0x41, 0x2, 0x7c, 0xd7, 0x20,
- 0x2, 0x7c, 0xa6, 0x10, 0x0, 0x2, 0x6b, 0xef,
- 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x12, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x46, 0x79, 0xbc, 0xef, 0xff, 0xff,
- 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x56, 0x89, 0xbc, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xed, 0xca, 0x87, 0x54, 0x23, 0x8d, 0xff, 0xa5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
- 0xff, 0xda, 0x87, 0x53, 0x21, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xaf, 0xfd, 0x82, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
- 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xaf, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xfd,
- 0x82, 0x0, 0x0, 0x0, 0x0, 0x24, 0x79, 0xbb,
- 0xbc, 0xdf, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0,
- 0x12, 0x33, 0x37, 0xbf, 0xfd, 0x82, 0x0, 0x0,
- 0x0, 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x0, 0x0, 0x15, 0xad, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x2, 0x6b,
- 0xef, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0,
- 0x39, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x61,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x22, 0x32,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x89,
- 0xab, 0xaa, 0x87, 0x41, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F008 "" */
- 0x0, 0x39, 0xb9, 0x54, 0x59, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x95, 0x45, 0x9b, 0x93, 0x0, 0x0, 0x5a, 0xeb,
- 0x88, 0x9b, 0xef, 0xb7, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x7c, 0xfe, 0xb8, 0x88, 0xbe,
- 0xa5, 0x0, 0x0, 0x5a, 0xc7, 0x10, 0x17, 0xcf,
- 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x6b, 0xfc, 0x61, 0x1, 0x7c, 0xa5, 0x0, 0x0,
- 0x5a, 0xfd, 0xcc, 0xce, 0xff, 0xb6, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x12, 0x7c, 0xff, 0xdc,
- 0xcc, 0xef, 0xa5, 0x0, 0x0, 0x5a, 0xc6, 0x10,
- 0x17, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb, 0x61, 0x1, 0x6c, 0xa5,
- 0x0, 0x0, 0x5a, 0xfd, 0xcc, 0xce, 0xff, 0xb6,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x7c,
- 0xff, 0xdc, 0xcc, 0xef, 0xa5, 0x0, 0x0, 0x5a,
- 0xc7, 0x10, 0x17, 0xcf, 0xb5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfc, 0x61, 0x1,
- 0x7c, 0xa5, 0x0, 0x0, 0x5a, 0xeb, 0x88, 0x9b,
- 0xef, 0xb7, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0x7c, 0xfe, 0xb8, 0x88, 0xbe, 0xa5, 0x0,
- 0x0, 0x49, 0xb9, 0x54, 0x59, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x95, 0x45, 0x9b, 0x93, 0x0,
-
- /* U+F00B "" */
- 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0xb6, 0x25,
- 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
- 0xc6, 0x25, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0, 0x0,
- 0x0, 0x12, 0x33, 0x33, 0x22, 0x10, 0x0, 0x1,
- 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x21, 0x0, 0x0, 0x0, 0x4a, 0xff, 0xff,
- 0xff, 0xff, 0xc7, 0x26, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4,
- 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xd8,
- 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x4a,
- 0xff, 0xff, 0xff, 0xff, 0xc7, 0x26, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa4, 0x0, 0x0, 0x0, 0x12, 0x33, 0x33,
- 0x22, 0x10, 0x0, 0x1, 0x23, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x0, 0x0,
- 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xc6, 0x25,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x94, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe,
- 0xb6, 0x25, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83, 0x0,
-
- /* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7c, 0xdc, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xfe,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c,
- 0xff, 0xff, 0xff, 0xfd, 0x84, 0x10, 0x0, 0x0,
- 0x1, 0x49, 0xcd, 0xc7, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xff, 0xd8,
- 0x41, 0x0, 0x0, 0x0, 0x0, 0x39, 0xef, 0xff,
- 0xff, 0xfc, 0x83, 0x0, 0x0, 0x3, 0x8c, 0xff,
- 0xff, 0xff, 0xfd, 0x84, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x48, 0xdf, 0xff, 0xff, 0xff,
- 0xc8, 0x68, 0xcf, 0xff, 0xff, 0xff, 0xd8, 0x41,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x14, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x84, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x48, 0xcf, 0xff, 0xff, 0xff, 0xc8, 0x41, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x8c,
- 0xdc, 0x83, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F00D "" */
- 0x0, 0x0, 0x13, 0x44, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x24, 0x42, 0x10, 0x0, 0x0,
- 0x27, 0xdf, 0xff, 0xfc, 0x73, 0x0, 0x0, 0x0,
- 0x14, 0x8d, 0xff, 0xff, 0xb6, 0x10, 0x0, 0x14,
- 0x9d, 0xff, 0xff, 0xff, 0xc7, 0x32, 0x48, 0xdf,
- 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x16, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8d,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x73, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x48, 0xdf, 0xff, 0xff,
- 0xfd, 0x98, 0xad, 0xff, 0xff, 0xff, 0xc7, 0x30,
- 0x0, 0x0, 0x39, 0xef, 0xff, 0xff, 0xd9, 0x41,
- 0x0, 0x1, 0x5a, 0xdf, 0xff, 0xff, 0xd7, 0x20,
- 0x0, 0x2, 0x59, 0xbb, 0x84, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x15, 0x9b, 0xb9, 0x51, 0x0,
-
- /* U+F011 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x47, 0x99, 0x74, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x36, 0x52, 0x0, 0x4, 0x9f, 0xff,
- 0xf9, 0x40, 0x0, 0x25, 0x64, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x9d, 0xff,
- 0xfc, 0x71, 0x4, 0x9f, 0xff, 0xf9, 0x40, 0x17,
- 0xcf, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x15, 0xaf, 0xff, 0xfd, 0x94, 0x10, 0x4,
- 0x9f, 0xff, 0xf9, 0x40, 0x1, 0x59, 0xdf, 0xff,
- 0xfb, 0x51, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xff,
- 0xfd, 0x83, 0x0, 0x0, 0x4, 0x9f, 0xff, 0xf9,
- 0x40, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xc7, 0x20,
- 0x0, 0x0, 0x16, 0xbf, 0xff, 0xd8, 0x20, 0x0,
- 0x0, 0x4, 0x9f, 0xff, 0xf9, 0x40, 0x0, 0x0,
- 0x2, 0x8d, 0xff, 0xfb, 0x60, 0x0, 0x0, 0x17,
- 0xcf, 0xff, 0xc6, 0x10, 0x0, 0x0, 0x3, 0x9e,
- 0xff, 0xe9, 0x30, 0x0, 0x0, 0x1, 0x6c, 0xff,
- 0xfc, 0x71, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x1, 0x11, 0x10, 0x0,
- 0x0, 0x0, 0x4, 0x9e, 0xff, 0xfa, 0x50, 0x0,
- 0x0, 0x1, 0x5a, 0xff, 0xff, 0xb6, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b,
- 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x3,
- 0x8d, 0xff, 0xff, 0xda, 0x63, 0x10, 0x0, 0x0,
- 0x0, 0x1, 0x36, 0xad, 0xff, 0xff, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xdf,
- 0xff, 0xff, 0xfe, 0xdc, 0xcc, 0xcd, 0xef, 0xff,
- 0xff, 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x68, 0xad, 0xef,
- 0xff, 0xff, 0xff, 0xfe, 0xdb, 0x96, 0x31, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F013 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23,
- 0x44, 0x44, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x27, 0xdf, 0xff, 0xff, 0xfd, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x64,
- 0x11, 0x36, 0xad, 0xff, 0xff, 0xff, 0xff, 0xda,
- 0x63, 0x11, 0x46, 0x53, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
- 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xba, 0xab, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x61, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xff,
- 0xc7, 0x20, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
- 0xff, 0xeb, 0x73, 0x10, 0x0, 0x2, 0x7c, 0xff,
- 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x28,
- 0xdf, 0xff, 0xff, 0xd7, 0x20, 0x0, 0x1, 0x37,
- 0xbe, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0, 0x0,
- 0x2, 0x7c, 0xff, 0xff, 0xff, 0xeb, 0x73, 0x10,
- 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xba, 0xab, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x61, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x35, 0x64,
- 0x11, 0x25, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xc9,
- 0x52, 0x11, 0x36, 0x53, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xff, 0xff,
- 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
- 0x44, 0x44, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F015 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x25, 0x77, 0x63, 0x10, 0x0, 0x3,
- 0x68, 0x88, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x59,
- 0xdf, 0xff, 0xff, 0xfe, 0xb6, 0x32, 0x7c, 0xff,
- 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x13, 0x7c, 0xef, 0xfe, 0xc8,
- 0x54, 0x6a, 0xdf, 0xff, 0xee, 0xef, 0xff, 0xc7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x26, 0xad, 0xff, 0xfd, 0xa5, 0x34, 0x8b, 0xc9,
- 0x53, 0x47, 0xbe, 0xff, 0xff, 0xfc, 0x71, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x59, 0xcf, 0xff,
- 0xeb, 0x74, 0x36, 0xad, 0xff, 0xff, 0xff, 0xec,
- 0x84, 0x35, 0x9d, 0xff, 0xfe, 0xb6, 0x30, 0x0,
- 0x0, 0x2, 0x6b, 0xef, 0xff, 0xc9, 0x53, 0x59,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xb7, 0x33, 0x6b, 0xef, 0xff, 0xd8, 0x40, 0x0,
- 0x3, 0x7a, 0x96, 0x33, 0x6b, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd9, 0x42, 0x48, 0xa9, 0x51, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x16, 0xcf, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
- 0x2, 0x7d, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c,
- 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0, 0x27,
- 0xcf, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xff,
- 0xff, 0xff, 0xd8, 0x30, 0x0, 0x1, 0x6b, 0xff,
- 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x24, 0x67, 0x77, 0x76, 0x42, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xff, 0xff,
- 0xff, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
- 0xff, 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff,
- 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x49, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x23, 0x33, 0x33, 0x33, 0x33, 0x22,
- 0x59, 0xdf, 0xff, 0xfd, 0x95, 0x22, 0x33, 0x33,
- 0x33, 0x33, 0x32, 0x10, 0x0, 0x0, 0x4a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x34, 0x77,
- 0x43, 0x5a, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa4, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xec, 0xaa, 0xce, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe9, 0x56, 0xbc, 0x75,
- 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x25, 0x9a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x52,
- 0x0,
-
- /* U+F01C "" */
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x49, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xb7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x15, 0xae, 0xff, 0xda, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9b, 0xef,
- 0xfc, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xef, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0xae, 0xff,
- 0xd7, 0x30, 0x0, 0x0, 0x0, 0x15, 0xae, 0xff,
- 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x4a, 0xef, 0xfc,
- 0x82, 0x0, 0x0, 0x38, 0xef, 0xff, 0xda, 0x88,
- 0x88, 0x88, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x25, 0x78, 0x88, 0x88, 0x9b, 0xef, 0xff, 0xb6,
- 0x10, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd8, 0x30, 0x0, 0x0, 0x1, 0x5b, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd8, 0x20, 0x5, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x72, 0x0, 0x26, 0xbe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x84, 0x0,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x58, 0x99, 0x62, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x69, 0xbd, 0xef, 0xff, 0xff,
- 0xff, 0xfd, 0xb9, 0x74, 0x20, 0x4, 0x9f, 0xff,
- 0xa5, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7b, 0xef,
- 0xff, 0xff, 0xdc, 0xaa, 0x99, 0x9a, 0xcd, 0xff,
- 0xff, 0xfd, 0xaa, 0xbf, 0xff, 0xa5, 0x0, 0x0,
- 0x0, 0x4, 0x9e, 0xff, 0xfe, 0xa6, 0x31, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x59, 0xcf, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x2, 0x7c, 0xff,
- 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x3, 0x6a, 0xa9, 0x73, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x25, 0x9a, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xa9, 0x63, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x36, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xa9, 0x52, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x37, 0xaa, 0xa6, 0x30, 0x0,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfe, 0xee, 0xff,
- 0xfe, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xcf, 0xff, 0xc7, 0x20, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xfc, 0x95, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x7b, 0xef, 0xff, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x5a, 0xff, 0xfb, 0xaa, 0xdf,
- 0xff, 0xff, 0xdb, 0xa9, 0x99, 0xaa, 0xcd, 0xff,
- 0xff, 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x5a, 0xff, 0xfa, 0x40, 0x2, 0x47, 0x9c, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xdb, 0x96, 0x31, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0x99, 0x85,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x26, 0xaa, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x6b, 0xef, 0xff, 0xa5, 0x0,
- 0x0, 0x14, 0x78, 0x88, 0x88, 0x89, 0xce, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
- 0x0, 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x37, 0xcf, 0xff, 0xff, 0xa5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7c, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x10, 0x0,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x26, 0xaa, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
- 0xbe, 0xff, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x14, 0x78, 0x88, 0x88, 0x89, 0xce,
- 0xff, 0xff, 0xff, 0xa5, 0x0, 0x13, 0x31, 0x0,
- 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x50, 0x16, 0xbe, 0xea,
- 0x51, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x3, 0x8d,
- 0xfa, 0x40, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x15, 0xae,
- 0xea, 0x51, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x24,
- 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8c, 0xff, 0xff, 0xfa, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8c, 0xff, 0xa4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfd,
- 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xaa, 0x72,
- 0x0, 0x0, 0x0, 0x12, 0x11, 0x14, 0x8c, 0xfe,
- 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x26, 0xbe, 0xff, 0xfa, 0x50, 0x0,
- 0x0, 0x27, 0xcf, 0xda, 0x52, 0x16, 0xbe, 0xe9,
- 0x40, 0x0, 0x0, 0x14, 0x78, 0x88, 0x88, 0x89,
- 0xce, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x23, 0x32,
- 0x1, 0x4a, 0xdf, 0xb6, 0x13, 0x8d, 0xfa, 0x50,
- 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x50, 0x15, 0xbe, 0xea, 0x51,
- 0x16, 0xbf, 0xc6, 0x13, 0x9e, 0xe9, 0x30, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0, 0x3, 0x8d, 0xfa, 0x40, 0x39,
- 0xee, 0x83, 0x17, 0xcf, 0xa5, 0x0, 0x5, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0x50, 0x15, 0xbe, 0xea, 0x51, 0x16, 0xcf, 0xc6,
- 0x13, 0x8e, 0xe9, 0x30, 0x0, 0x38, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
- 0x23, 0x31, 0x1, 0x5a, 0xef, 0xb6, 0x13, 0x8d,
- 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x7c, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x0,
- 0x27, 0xcf, 0xda, 0x52, 0x16, 0xbf, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x7c, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x12,
- 0x11, 0x15, 0x9d, 0xfe, 0x94, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b,
- 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F03E "" */
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x5a, 0xff,
- 0xfd, 0xa7, 0x56, 0x7b, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xb5, 0x0, 0x0,
- 0x1, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
- 0x5a, 0xff, 0xeb, 0x63, 0x12, 0x38, 0xcf, 0xff,
- 0xff, 0xff, 0xfe, 0xa6, 0x20, 0x13, 0x8c, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xfe, 0xcc, 0xdf, 0xff, 0xff, 0xea, 0x62,
- 0x0, 0x0, 0x0, 0x1, 0x38, 0xdf, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xff, 0xea, 0x62, 0x0,
- 0x15, 0x9b, 0xa6, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
- 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xec, 0x98,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x89, 0xce, 0xff, 0xa5, 0x0,
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xeb, 0x62, 0x0,
-
- /* U+F048 "" */
- 0x25, 0x78, 0x86, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x67, 0x52, 0x0, 0x4, 0x9f, 0xff,
- 0xc6, 0x10, 0x0, 0x0, 0x0, 0x15, 0x9d, 0xff,
- 0xfe, 0x83, 0x0, 0x49, 0xff, 0xfc, 0x61, 0x0,
- 0x0, 0x26, 0xae, 0xff, 0xff, 0xff, 0xe9, 0x30,
- 0x4, 0x9f, 0xff, 0xc6, 0x10, 0x37, 0xbe, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x49, 0xff,
- 0xfd, 0xa9, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe9, 0x30, 0x4, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93,
- 0x0, 0x49, 0xff, 0xfe, 0xee, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe9, 0x30, 0x4, 0x9f,
- 0xff, 0xc6, 0x24, 0x9d, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x93, 0x0, 0x49, 0xff, 0xfc, 0x61,
- 0x0, 0x3, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xe9,
- 0x30, 0x4, 0x9f, 0xff, 0xc6, 0x10, 0x0, 0x0,
- 0x2, 0x6b, 0xef, 0xff, 0xfe, 0x93, 0x0, 0x38,
- 0xdf, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x59, 0xde, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F04B "" */
- 0x0, 0x1, 0x46, 0x76, 0x31, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x49, 0xff, 0xff, 0xff, 0xda,
- 0x74, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xa7, 0x41, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdb, 0x74, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb8, 0x52, 0x0,
- 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xeb, 0x84, 0x10, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x73, 0x10,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb8, 0x42, 0x0,
- 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdb, 0x74, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xa7, 0x41, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
- 0xff, 0xff, 0xff, 0xda, 0x74, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x36, 0x76, 0x31, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F04C "" */
- 0x0, 0x15, 0xad, 0xef, 0xff, 0xff, 0xfe, 0xc8,
- 0x30, 0x0, 0x15, 0xad, 0xef, 0xff, 0xff, 0xfe,
- 0xc8, 0x30, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x72, 0x0, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x72, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x72, 0x0, 0x4a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x2, 0x47, 0x88,
- 0x99, 0x99, 0x88, 0x63, 0x10, 0x0, 0x2, 0x47,
- 0x88, 0x99, 0x99, 0x88, 0x63, 0x10,
-
- /* U+F04D "" */
- 0x0, 0x2, 0x47, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x63, 0x10, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x72, 0x0, 0x15, 0xad, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xc8, 0x30,
-
- /* U+F051 "" */
- 0x2, 0x57, 0x64, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x25, 0x88, 0x85, 0x20, 0x2, 0x7d, 0xff,
- 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x5, 0xbf,
- 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xfe,
- 0xb7, 0x30, 0x0, 0x0, 0x5b, 0xff, 0xfa, 0x50,
- 0x2, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8,
- 0x31, 0x5, 0xbf, 0xff, 0xa5, 0x0, 0x28, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xac,
- 0xff, 0xfa, 0x50, 0x2, 0x8d, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5,
- 0x0, 0x28, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0xee, 0xff, 0xfa, 0x50, 0x2, 0x8d,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x25,
- 0xbf, 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xff, 0xff,
- 0xff, 0xfc, 0x84, 0x10, 0x0, 0x5b, 0xff, 0xfa,
- 0x50, 0x2, 0x8d, 0xff, 0xff, 0xeb, 0x73, 0x0,
- 0x0, 0x0, 0x5, 0xbf, 0xff, 0xa5, 0x0, 0x15,
- 0xae, 0xda, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5a, 0xef, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x36, 0x77, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xea, 0x51,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0xb7, 0x20, 0x0,
- 0x0, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
- 0x0, 0x0, 0x1, 0x23, 0x34, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43,
- 0x31, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb, 0x51, 0x0, 0x0,
- 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd8, 0x20, 0x0, 0x0, 0x27, 0xce, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xea, 0x51, 0x0, 0x0,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x34, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x25, 0xae, 0xff, 0xfb, 0x61, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xef, 0xff,
- 0xfd, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
- 0xae, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x5a, 0xef, 0xff, 0xfd, 0x94, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff,
- 0xeb, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x27, 0xbe, 0xff, 0xff, 0xc8, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7b,
- 0xef, 0xff, 0xfc, 0x83, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff, 0xff,
- 0xc8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x7c, 0xef, 0xff, 0xfa, 0x51, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
- 0xab, 0x95, 0x10, 0x0,
-
- /* U+F054 "" */
- 0x0, 0x2, 0x34, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xfc,
- 0x83, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x27, 0xbe, 0xff, 0xff, 0xc8, 0x31, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7b,
- 0xef, 0xff, 0xfc, 0x83, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xbe, 0xff, 0xff,
- 0xc8, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x8d, 0xff, 0xff, 0xfb, 0x61, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xef, 0xff,
- 0xfd, 0x95, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
- 0xae, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x5a, 0xef, 0xff, 0xfd, 0x95, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff,
- 0xd9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x37, 0xab, 0x85, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x69, 0xa9, 0x84, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x38, 0xdf, 0xff, 0xfb, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x38, 0xef, 0xff, 0xfb, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xef, 0xff,
- 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x57, 0x88, 0x88, 0x88, 0x88, 0x9c,
- 0xff, 0xff, 0xfd, 0xb8, 0x88, 0x88, 0x88, 0x88,
- 0x74, 0x10, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x72, 0x0, 0x15, 0x9b, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xce, 0xff, 0xff, 0xfe, 0xdb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xa7, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xef, 0xff,
- 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xef, 0xff, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x38, 0xef, 0xff, 0xfb, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x15, 0x9c, 0xdd, 0xb7, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F068 "" */
- 0x0, 0x2, 0x45, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
- 0x53, 0x10, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x26, 0xac, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xc8, 0x40,
-
- /* U+F06E "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x58,
- 0xab, 0xcd, 0xef, 0xff, 0xff, 0xed, 0xca, 0x97,
- 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x49, 0xcf, 0xff, 0xfe, 0xc9,
- 0x64, 0x32, 0x23, 0x45, 0x7a, 0xdf, 0xff, 0xfe,
- 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x6b, 0xef, 0xff, 0xff, 0xc6, 0x20, 0x0, 0x3,
- 0x79, 0x87, 0x52, 0x0, 0x49, 0xdf, 0xff, 0xff,
- 0xd9, 0x41, 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff,
- 0xff, 0xfe, 0x93, 0x0, 0x0, 0x2, 0x7c, 0xff,
- 0xff, 0xea, 0x51, 0x16, 0xbf, 0xff, 0xff, 0xfe,
- 0xa5, 0x10, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
- 0xc6, 0x12, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x40, 0x49, 0xef, 0xff, 0xff, 0xff, 0xc7,
- 0x10, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x93,
- 0x3, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61,
- 0x16, 0xbf, 0xff, 0xff, 0xfe, 0xa4, 0x10, 0x0,
- 0x0, 0x2, 0x6b, 0xef, 0xff, 0xff, 0xc6, 0x20,
- 0x26, 0x9b, 0xcc, 0xca, 0x84, 0x11, 0x49, 0xdf,
- 0xff, 0xff, 0xd8, 0x41, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x59, 0xcf, 0xff, 0xfe, 0xc9, 0x64,
- 0x32, 0x23, 0x45, 0x7a, 0xdf, 0xff, 0xfe, 0xb7,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x57, 0x9b, 0xcd, 0xef, 0xff,
- 0xff, 0xed, 0xca, 0x97, 0x42, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F070 "" */
- 0x0, 0x1, 0x35, 0x42, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x8d, 0xff, 0xfd, 0x95, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c, 0xef,
- 0xff, 0xc8, 0x53, 0x46, 0x8a, 0xbd, 0xee, 0xff,
- 0xff, 0xed, 0xcb, 0x97, 0x53, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x59, 0xcf, 0xff, 0xff, 0xff, 0xda, 0x75,
- 0x43, 0x23, 0x45, 0x79, 0xdf, 0xff, 0xfe, 0xc8,
- 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x25, 0x9d, 0xff, 0xfe,
- 0xb7, 0x44, 0x7a, 0xa9, 0x74, 0x10, 0x28, 0xcf,
- 0xff, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x16, 0xbd, 0xc8, 0x41, 0x0, 0x2,
- 0x6a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72,
- 0x4, 0xaf, 0xff, 0xff, 0xff, 0xb6, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x27, 0xdf, 0xff, 0xff, 0xeb,
- 0x73, 0x0, 0x0, 0x26, 0xad, 0xff, 0xff, 0xff,
- 0xfb, 0x60, 0x27, 0xdf, 0xff, 0xff, 0xff, 0xe8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x15, 0xbe, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x3, 0x7b,
- 0xef, 0xff, 0xeb, 0x67, 0xaf, 0xff, 0xff, 0xff,
- 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x49, 0xdf, 0xff, 0xff, 0xc8, 0x30, 0x0, 0x0,
- 0x0, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xc9,
- 0x64, 0x32, 0x22, 0x10, 0x0, 0x14, 0x8b, 0xef,
- 0xff, 0xea, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x57,
- 0x9b, 0xcd, 0xef, 0xff, 0xfe, 0xb7, 0x30, 0x0,
- 0x1, 0x48, 0xce, 0xff, 0xfc, 0x94, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c, 0xff, 0xfe,
- 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x45, 0x41, 0x0, 0x0,
-
- /* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x33, 0x21, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xef, 0xff, 0xd8, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xae, 0xff,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb5, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x7c, 0xff, 0xff, 0xee, 0xdd, 0xde, 0xff,
- 0xff, 0xea, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf,
- 0xff, 0xff, 0xd7, 0x20, 0x0, 0x5a, 0xff, 0xff,
- 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x4a, 0xef, 0xff, 0xff,
- 0xfd, 0x72, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
- 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xd7,
- 0x20, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0x87,
- 0x8b, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa4,
- 0x10, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0, 0x4a,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x30,
- 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x95, 0x21, 0x37, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x72, 0x0,
- 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0, 0x1,
- 0x46, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x87, 0x75, 0x20, 0x0,
-
- /* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x46,
- 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xc8, 0x31,
- 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xc8, 0x30, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
- 0x48, 0xcd, 0xdd, 0xde, 0xff, 0xff, 0xeb, 0x62,
- 0x2, 0x6b, 0xef, 0xff, 0xfe, 0xde, 0xff, 0xff,
- 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x26, 0xac, 0xa6, 0x46, 0xbe, 0xff, 0xff,
- 0xd9, 0x41, 0x5, 0xaf, 0xfd, 0x95, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x1,
- 0x47, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd8,
- 0x55, 0x8b, 0xc8, 0x41, 0x5, 0xaf, 0xfd, 0xa5,
- 0x10, 0x0, 0x0, 0x0, 0x48, 0xcd, 0xdd, 0xde,
- 0xff, 0xff, 0xfc, 0x84, 0x10, 0x49, 0xdf, 0xff,
- 0xfe, 0xde, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x41,
- 0x0, 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x62, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xc8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x46, 0x63, 0x10, 0x0, 0x0, 0x0,
-
- /* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x25, 0x77, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x12,
- 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd9, 0x41,
- 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd9,
- 0x41, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xfd, 0x94,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6b,
- 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x25, 0x77,
- 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x25, 0x77, 0x41, 0x0,
-
- /* U+F078 "" */
- 0x0, 0x0, 0x25, 0x77, 0x41, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x77,
- 0x41, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xfd, 0x94,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6b,
- 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x26, 0xbe,
- 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x26,
- 0xbe, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x12,
- 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x25, 0x76, 0x41, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F079 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x38, 0xcf, 0xff,
- 0xc8, 0x30, 0x0, 0x3, 0x57, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x76, 0x52, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x38, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xc8, 0x32, 0x5a, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xff,
- 0xcc, 0xcf, 0xfe, 0xcc, 0xdf, 0xff, 0xa4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
- 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x45, 0x31, 0x49, 0xef, 0xe9, 0x41, 0x35, 0x42,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x9e, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xfe, 0x94, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xef, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef, 0xe9,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7b, 0xb9, 0x55, 0x9e, 0xfe, 0x95, 0x59, 0xbb,
- 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9e,
- 0xff, 0xc9, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76,
- 0x53, 0x36, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd7, 0x20, 0x37, 0xbe, 0xff, 0xff,
- 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
- 0xac, 0xa6, 0x30, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F07B "" */
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xa6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb,
- 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x64,
- 0x10, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xeb, 0x62, 0x0,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff,
- 0xec, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xfe, 0xc7,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x73, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x39, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff,
- 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff, 0xd8,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x23, 0x33, 0x33, 0x33, 0x32, 0x13,
- 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x31, 0x23, 0x33,
- 0x33, 0x33, 0x32, 0x10, 0x0, 0x0, 0x4a, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x94, 0x36, 0x99, 0x99,
- 0x99, 0x63, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xa4, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0xca, 0x99, 0x99, 0x99, 0xac, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
- 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe9, 0x56, 0xbc, 0x75,
- 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x25, 0x9a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x52,
- 0x0,
-
- /* U+F095 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x76,
- 0x53, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff, 0xff, 0xfe,
- 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x5a, 0xdf, 0xff, 0xff, 0xff, 0xe9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff, 0xd7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0x49,
- 0xdf, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x13, 0x58, 0xac, 0xef, 0xfe, 0xb5,
- 0x10, 0x1, 0x36, 0xad, 0xff, 0xff, 0xff, 0xc7,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xce, 0xff,
- 0xff, 0xff, 0xfc, 0x94, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x17, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xa6, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
- 0xb9, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x77,
- 0x76, 0x65, 0x43, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F0C4 "" */
- 0x0, 0x0, 0x2, 0x57, 0x89, 0x98, 0x63, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23, 0x32,
- 0x10, 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff,
- 0xff, 0xd7, 0x20, 0x0, 0x0, 0x1, 0x48, 0xcf,
- 0xff, 0xff, 0xea, 0x50, 0x0, 0x49, 0xff, 0xe9,
- 0x40, 0x17, 0xcf, 0xfc, 0x71, 0x0, 0x14, 0x8c,
- 0xff, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0, 0x17,
- 0xcf, 0xff, 0xdb, 0xce, 0xff, 0xfd, 0x84, 0x48,
- 0xcf, 0xff, 0xff, 0xfd, 0x95, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x14, 0x8a, 0xcd, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x9e, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x57,
- 0x89, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
- 0xae, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa7, 0x8b,
- 0xef, 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xff, 0xe9, 0x40, 0x17, 0xcf, 0xfc,
- 0x71, 0x0, 0x27, 0xbe, 0xff, 0xff, 0xfe, 0xb6,
- 0x20, 0x0, 0x0, 0x17, 0xcf, 0xff, 0xdb, 0xce,
- 0xff, 0xe9, 0x40, 0x0, 0x0, 0x2, 0x6b, 0xef,
- 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x14, 0x8a,
- 0xcc, 0xcb, 0x96, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x13, 0x56, 0x66, 0x41, 0x0,
-
- /* U+F0C5 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x31, 0x12, 0x21, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x49,
- 0xed, 0x94, 0x10, 0x0, 0x0, 0x1, 0x23, 0x44,
- 0x32, 0x15, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x49, 0xef, 0xfe, 0xc7, 0x20, 0x0, 0x4a,
- 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xec, 0x98, 0x88, 0x88, 0x85, 0x20,
- 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff,
- 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5a,
- 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50,
- 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x40, 0x0, 0x5a, 0xff, 0xff,
- 0xfd, 0x95, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x14, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x76, 0x31, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F0C7 "" */
- 0x0, 0x2, 0x47, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x87, 0x52, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xb6, 0x20, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x6b, 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6b, 0xff, 0xff, 0xff, 0xe9, 0x30,
- 0x0, 0x5a, 0xff, 0xeb, 0x97, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0xad, 0xff, 0xff, 0xff,
- 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd9, 0x42, 0x12, 0x5a, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
- 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94,
- 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0xca, 0x9a, 0xce, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x40, 0x0, 0x16, 0xad, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xed, 0x95, 0x10,
-
- /* U+F0E7 "" */
- 0x0, 0x0, 0x15, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xa8, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0xb6, 0x10, 0x3, 0x8e, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6,
- 0x10, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff,
- 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xaf, 0xff, 0xfe, 0xa5, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e,
- 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5a, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0EA "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x8a, 0xa8,
- 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x38, 0xef, 0xff, 0xff, 0xff,
- 0xb8, 0x8c, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xb8, 0x8c, 0xff, 0xff, 0xff, 0xff,
- 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdc, 0xbb, 0xbb,
- 0xbb, 0xba, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfc, 0x74, 0x58,
- 0x99, 0x99, 0x99, 0x99, 0x52, 0x25, 0x64, 0x10,
- 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfa,
- 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x94, 0x4a,
- 0xff, 0xda, 0x52, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xfa, 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xa5, 0x23, 0x56, 0x66, 0x53, 0x10, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xfa, 0x55, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40,
- 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfa, 0x55, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x40, 0x0, 0x49, 0xef, 0xff, 0xff, 0xfa,
- 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x31, 0x0,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x14, 0x65, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x9d, 0xff, 0xb6, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x26, 0xad, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xc9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
- 0x0, 0x2, 0x6b, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x93, 0x0, 0x0, 0x39, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x61, 0x0, 0x1, 0x23, 0x34,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
- 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x46, 0x76, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F11C "" */
- 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x84, 0x0, 0x5,
- 0xaf, 0xfe, 0xc9, 0x88, 0xad, 0xeb, 0x88, 0x8b,
- 0xed, 0xa8, 0x8b, 0xee, 0xb8, 0x88, 0x8b, 0xee,
- 0xb8, 0x8a, 0xdf, 0xfd, 0x72, 0x0, 0x5a, 0xff,
- 0xd8, 0x30, 0x5, 0xbc, 0x71, 0x1, 0x7c, 0xb5,
- 0x1, 0x6b, 0xb6, 0x0, 0x0, 0x6b, 0xb6, 0x10,
- 0x5b, 0xff, 0xd8, 0x20, 0x5, 0xaf, 0xff, 0xff,
- 0xfe, 0xdc, 0xcd, 0xef, 0xed, 0xcc, 0xde, 0xed,
- 0xcc, 0xce, 0xff, 0xec, 0xcc, 0xef, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xa4,
- 0x0, 0x38, 0xc8, 0x30, 0x5, 0xaa, 0x40, 0x2,
- 0x7d, 0xd7, 0x20, 0x27, 0xcf, 0xff, 0xff, 0xd8,
- 0x20, 0x5, 0xaf, 0xff, 0xff, 0xfe, 0xdc, 0xcd,
- 0xef, 0xed, 0xcc, 0xde, 0xed, 0xcc, 0xce, 0xff,
- 0xec, 0xcc, 0xef, 0xff, 0xff, 0xfd, 0x82, 0x0,
- 0x5a, 0xff, 0xd8, 0x30, 0x5, 0xbc, 0x71, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b,
- 0xb6, 0x10, 0x5b, 0xff, 0xd8, 0x20, 0x5, 0xaf,
- 0xfe, 0xc9, 0x88, 0xad, 0xeb, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x8b, 0xde, 0xb8,
- 0x8a, 0xdf, 0xfd, 0x72, 0x0, 0x26, 0xbe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x84, 0x0,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x24, 0x66, 0x53, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x35, 0x8a, 0xde, 0xff, 0xff, 0xfe,
- 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x47, 0x9c, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb, 0x61, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x68, 0xad,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24,
- 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0,
- 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x38,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x33, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x9d, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xea, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xff,
- 0xff, 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x6c, 0xff, 0xff, 0xff, 0xb5,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6b, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x46, 0x64,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F15B "" */
- 0x0, 0x26, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xba, 0x62, 0x36, 0x74, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe9, 0x45, 0xaf, 0xfd, 0x94, 0x10, 0x0,
- 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x94, 0x5a, 0xff, 0xff, 0xfd, 0x94,
- 0x10, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x52, 0x34, 0x44, 0x44, 0x44,
- 0x31, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x2,
- 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x31, 0x0, 0x0,
-
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x35, 0x67, 0x99, 0xab, 0xbb, 0xcb, 0xbb,
- 0xa9, 0x97, 0x65, 0x31, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25,
- 0x8b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x85,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x7b,
- 0xef, 0xff, 0xff, 0xfe, 0xca, 0x87, 0x54, 0x33,
- 0x22, 0x22, 0x23, 0x34, 0x57, 0x8a, 0xce, 0xff,
- 0xff, 0xff, 0xeb, 0x73, 0x10, 0x0, 0x0, 0x28,
- 0xdf, 0xff, 0xfd, 0xa7, 0x31, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x37, 0xad, 0xff, 0xff, 0xd8, 0x30, 0x0,
- 0x0, 0x2, 0x57, 0x63, 0x0, 0x0, 0x1, 0x25,
- 0x79, 0xbc, 0xde, 0xff, 0xff, 0xfe, 0xdc, 0xb9,
- 0x75, 0x21, 0x0, 0x0, 0x3, 0x57, 0x52, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c,
- 0xef, 0xff, 0xff, 0xff, 0xfe, 0xee, 0xee, 0xff,
- 0xff, 0xff, 0xff, 0xec, 0x84, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x6b, 0xef, 0xfc, 0x96, 0x42, 0x10, 0x0, 0x0,
- 0x0, 0x12, 0x46, 0x9c, 0xef, 0xeb, 0x62, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x21, 0x0, 0x0, 0x0, 0x0,
- 0x11, 0x10, 0x0, 0x0, 0x0, 0x1, 0x21, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x5a, 0xef, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x26, 0xac, 0xdc, 0xa6, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F240 "" */
- 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
- 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x21, 0x49,
- 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
- 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0x52, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
- 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xc8, 0x43, 0x8e, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
- 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F241 "" */
- 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
- 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
- 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc6, 0x10, 0x0, 0x0,
- 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
- 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x95,
- 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
- 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F242 "" */
- 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
- 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x32,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
- 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
- 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xca, 0x62, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
- 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F243 "" */
- 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
- 0x34, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
- 0x84, 0x6c, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xfe, 0x94,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
- 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
- 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
- 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F244 "" */
- 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
- 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
- 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
- 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
- 0x5, 0xaf, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
- 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F287 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x12, 0x33, 0x59, 0xdf,
- 0xfe, 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x15, 0xad, 0xca, 0x9b,
- 0xdf, 0xff, 0xfe, 0x93, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x11, 0x10, 0x0, 0x0, 0x0, 0x38, 0xdb, 0x51,
- 0x0, 0x1, 0x24, 0x54, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x9d, 0xff, 0xff, 0xd9, 0x41, 0x1, 0x6b, 0xd8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x6a, 0xb8, 0x52, 0x0, 0x0, 0x0,
- 0x4, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0xed, 0xee,
- 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xde, 0xff, 0xff, 0xfc, 0x72,
- 0x0, 0x0, 0x4, 0x9d, 0xff, 0xff, 0xd9, 0x41,
- 0x0, 0x0, 0x0, 0x16, 0xbd, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x6a, 0xb8, 0x52,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xb6,
- 0x10, 0x3, 0x57, 0x77, 0x77, 0x42, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x49, 0xcc, 0xba, 0xce, 0xff, 0xff, 0xfb, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x12, 0x49, 0xdf, 0xff, 0xff,
- 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F293 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23, 0x34,
- 0x43, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x6a, 0xde, 0xff, 0xfe,
- 0xee, 0xff, 0xff, 0xed, 0xa5, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x4a, 0xef, 0xff, 0xff, 0xff,
- 0xa5, 0x37, 0xcf, 0xff, 0xff, 0xfd, 0x93, 0x0,
- 0x0, 0x0, 0x1, 0x7c, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x40, 0x1, 0x48, 0xdf, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x0, 0x5b, 0xff, 0xfd, 0x84, 0x59,
- 0xdf, 0xa4, 0x27, 0xa8, 0x42, 0x5b, 0xff, 0xfe,
- 0x83, 0x0, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xc7,
- 0x32, 0x44, 0x21, 0x34, 0x33, 0x7c, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xff,
- 0xff, 0xc6, 0x20, 0x1, 0x5a, 0xef, 0xff, 0xff,
- 0xff, 0xb6, 0x0, 0x0, 0x38, 0xef, 0xff, 0xff,
- 0xfe, 0xb6, 0x20, 0x0, 0x1, 0x49, 0xdf, 0xff,
- 0xff, 0xfb, 0x60, 0x0, 0x2, 0x7c, 0xff, 0xfe,
- 0xb6, 0x22, 0x59, 0x84, 0x26, 0x97, 0x32, 0x5a,
- 0xef, 0xff, 0xa5, 0x0, 0x0, 0x4, 0x9f, 0xff,
- 0xec, 0xab, 0xdf, 0xfa, 0x41, 0x46, 0x42, 0x59,
- 0xdf, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x4, 0x9e,
- 0xff, 0xff, 0xff, 0xff, 0xa4, 0x1, 0x5a, 0xdf,
- 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x1,
- 0x49, 0xdf, 0xff, 0xff, 0xfb, 0xaa, 0xdf, 0xff,
- 0xff, 0xfd, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x24, 0x68, 0x9a, 0xab, 0xbb, 0xa9,
- 0x87, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F2ED "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67,
- 0x88, 0x88, 0x87, 0x75, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x37, 0xbb, 0xcc, 0xcc, 0xcc,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xcc,
- 0xcc, 0xcc, 0xb9, 0x51, 0x0, 0x37, 0xbb, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xb9, 0x51, 0x0, 0x0,
- 0x24, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x30, 0x0,
- 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x61, 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xa5,
- 0x5a, 0xff, 0xe9, 0x56, 0xbf, 0xfd, 0x85, 0x8d,
- 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x49, 0xef,
- 0xff, 0xa4, 0x4a, 0xff, 0xe8, 0x46, 0xbf, 0xfc,
- 0x74, 0x7c, 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0,
- 0x49, 0xef, 0xff, 0xa4, 0x4a, 0xff, 0xe8, 0x46,
- 0xbf, 0xfc, 0x74, 0x7c, 0xff, 0xfc, 0x61, 0x0,
- 0x0, 0x0, 0x49, 0xef, 0xff, 0xa4, 0x4a, 0xff,
- 0xe8, 0x46, 0xbf, 0xfc, 0x74, 0x7c, 0xff, 0xfc,
- 0x61, 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xa4,
- 0x4a, 0xff, 0xe8, 0x46, 0xbf, 0xfc, 0x74, 0x7c,
- 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x49, 0xef,
- 0xff, 0xa5, 0x5a, 0xff, 0xe9, 0x56, 0xbf, 0xfd,
- 0x85, 0x8d, 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0,
- 0x38, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x60, 0x0,
- 0x0, 0x0, 0x1, 0x36, 0x77, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x76, 0x42,
- 0x0, 0x0,
-
- /* U+F304 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67,
- 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x5a, 0xef, 0xff, 0xff, 0xd9, 0x41,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x25, 0x9d,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x5a, 0xef, 0xda, 0x53, 0x5a, 0xdf, 0xff,
- 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x25, 0xae, 0xff, 0xff,
- 0xff, 0xfd, 0xa5, 0x35, 0xad, 0xda, 0x52, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x5a, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x25, 0xae, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xea, 0x52, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x25, 0xae, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xea, 0x52, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xea, 0x52, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4a, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x67, 0x76,
- 0x55, 0x44, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F55A "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x9c,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x84,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xad,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x15, 0xad,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x1,
- 0x49, 0xdf, 0xfd, 0x94, 0x10, 0x39, 0xdf, 0xff,
- 0xff, 0xff, 0xfa, 0x50, 0x0, 0x0, 0x15, 0xad,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x94, 0x10, 0x1, 0x22, 0x10, 0x1, 0x49, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x39,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x61, 0x0, 0x0, 0x15, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
- 0x0, 0x15, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x94, 0x10, 0x1, 0x33, 0x10,
- 0x1, 0x49, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xa5,
- 0x0, 0x0, 0x0, 0x0, 0x15, 0xad, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x94, 0x11, 0x49, 0xdf,
- 0xfd, 0x94, 0x10, 0x49, 0xdf, 0xff, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
- 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x14, 0x9c, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xec, 0x84, 0x0, 0x0,
-
- /* U+F7C2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x77, 0x64, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x25, 0xad, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83,
- 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xa4, 0x0,
- 0x5b, 0xb6, 0x3, 0x9b, 0x72, 0x28, 0xdf, 0xfa,
- 0x50, 0x0, 0x4, 0x9e, 0xff, 0xff, 0xfa, 0x40,
- 0x5, 0xbb, 0x60, 0x39, 0xb7, 0x22, 0x8d, 0xff,
- 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x2, 0x6c,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x62, 0x0, 0x0, 0x0,
- 0x1, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x31, 0x0, 0x0, 0x0,
-
- /* U+F8A2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x12, 0x21, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x48, 0xdf,
- 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6a,
- 0xc9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x27, 0xdf, 0xff, 0xb6, 0x0, 0x0,
- 0x0, 0x0, 0x37, 0xce, 0xff, 0xfc, 0x72, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28,
- 0xdf, 0xff, 0xb6, 0x0, 0x0, 0x3, 0x8c, 0xff,
- 0xff, 0xff, 0xff, 0xed, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xff, 0xff, 0xb6,
- 0x0, 0x0, 0x16, 0xbe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0, 0x0,
- 0x2, 0x6b, 0xef, 0xff, 0xfc, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
- 0xad, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 48, .box_w = 6, .box_h = 0, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 49, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 41, .adv_w = 61, .box_w = 12, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 65, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 173, .adv_w = 108, .box_w = 21, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 299, .adv_w = 141, .box_w = 27, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 421, .adv_w = 119, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 529, .adv_w = 33, .box_w = 6, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 541, .adv_w = 66, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 646, .adv_w = 67, .box_w = 15, .box_h = 14, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 751, .adv_w = 83, .box_w = 21, .box_h = 6, .ofs_x = -1, .ofs_y = 3},
- {.bitmap_index = 814, .adv_w = 109, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 888, .adv_w = 38, .box_w = 12, .box_h = 4, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 912, .adv_w = 53, .box_w = 15, .box_h = 1, .ofs_x = -1, .ofs_y = 3},
- {.bitmap_index = 920, .adv_w = 51, .box_w = 9, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 929, .adv_w = 79, .box_w = 18, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 1019, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1114, .adv_w = 108, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1182, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1277, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1372, .adv_w = 108, .box_w = 24, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 1480, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1575, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1670, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1765, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1860, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1955, .adv_w = 47, .box_w = 9, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1987, .adv_w = 41, .box_w = 12, .box_h = 9, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 2041, .adv_w = 98, .box_w = 18, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 2095, .adv_w = 105, .box_w = 21, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 2148, .adv_w = 100, .box_w = 21, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 2211, .adv_w = 91, .box_w = 18, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2292, .adv_w = 172, .box_w = 33, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2490, .adv_w = 125, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 2612, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2720, .adv_w = 125, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2828, .adv_w = 126, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2936, .adv_w = 109, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3031, .adv_w = 106, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3126, .adv_w = 131, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3234, .adv_w = 137, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3342, .adv_w = 52, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3383, .adv_w = 106, .box_w = 24, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 3491, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3599, .adv_w = 103, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3694, .adv_w = 168, .box_w = 30, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3829, .adv_w = 137, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3937, .adv_w = 132, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4045, .adv_w = 121, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4153, .adv_w = 132, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4285, .adv_w = 118, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4393, .adv_w = 114, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4488, .adv_w = 115, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 4610, .adv_w = 125, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4718, .adv_w = 122, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 4840, .adv_w = 170, .box_w = 33, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4989, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5097, .adv_w = 115, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 5219, .adv_w = 115, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5327, .adv_w = 51, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5405, .adv_w = 79, .box_w = 21, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 5510, .adv_w = 51, .box_w = 12, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 5588, .adv_w = 80, .box_w = 15, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 5626, .adv_w = 87, .box_w = 21, .box_h = 1, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 5637, .adv_w = 59, .box_w = 12, .box_h = 2, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 5649, .adv_w = 104, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5723, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5828, .adv_w = 101, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5902, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6007, .adv_w = 102, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6081, .adv_w = 67, .box_w = 15, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6156, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 6261, .adv_w = 106, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6366, .adv_w = 47, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6407, .adv_w = 46, .box_w = 12, .box_h = 12, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 6479, .adv_w = 97, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6584, .adv_w = 47, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6629, .adv_w = 168, .box_w = 33, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6745, .adv_w = 106, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6819, .adv_w = 110, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6893, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 6998, .adv_w = 109, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7103, .adv_w = 65, .box_w = 15, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7156, .adv_w = 99, .box_w = 18, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7219, .adv_w = 63, .box_w = 15, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 7287, .adv_w = 106, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7361, .adv_w = 93, .box_w = 21, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 7435, .adv_w = 144, .box_w = 33, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 7551, .adv_w = 95, .box_w = 24, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 7635, .adv_w = 91, .box_w = 21, .box_h = 10, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 7740, .adv_w = 95, .box_w = 18, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7803, .adv_w = 65, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7901, .adv_w = 47, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7951, .adv_w = 65, .box_w = 15, .box_h = 13, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 8049, .adv_w = 131, .box_w = 24, .box_h = 4, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 8097, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 8370, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 8559, .adv_w = 192, .box_w = 42, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 8790, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 8979, .adv_w = 132, .box_w = 30, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 9114, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 9387, .adv_w = 192, .box_w = 36, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9621, .adv_w = 216, .box_w = 45, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 9869, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 10142, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 10345, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 10618, .adv_w = 96, .box_w = 24, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 10738, .adv_w = 144, .box_w = 33, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 10903, .adv_w = 216, .box_w = 45, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 11196, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 11385, .adv_w = 168, .box_w = 27, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11547, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 11781, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 11979, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 12177, .adv_w = 168, .box_w = 27, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12339, .adv_w = 168, .box_w = 39, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 12554, .adv_w = 120, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 12686, .adv_w = 120, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 12818, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 13016, .adv_w = 168, .box_w = 36, .box_h = 3, .ofs_x = -1, .ofs_y = 3},
- {.bitmap_index = 13070, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 13273, .adv_w = 240, .box_w = 51, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 13605, .adv_w = 216, .box_w = 45, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 13898, .adv_w = 192, .box_w = 42, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 14129, .adv_w = 168, .box_w = 36, .box_h = 7, .ofs_x = -1, .ofs_y = 1},
- {.bitmap_index = 14255, .adv_w = 168, .box_w = 36, .box_h = 7, .ofs_x = -1, .ofs_y = 1},
- {.bitmap_index = 14381, .adv_w = 240, .box_w = 51, .box_h = 10, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 14636, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 14825, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 15098, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 15371, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 15569, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 15803, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 16001, .adv_w = 120, .box_w = 27, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 16177, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 16411, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 16645, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 16848, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 17121, .adv_w = 144, .box_w = 33, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 17336, .adv_w = 240, .box_w = 51, .box_h = 12, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 17642, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 17872, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 18102, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 18332, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 18562, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 18792, .adv_w = 240, .box_w = 51, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 19073, .adv_w = 168, .box_w = 33, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 19288, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 19522, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 19795, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
- {.bitmap_index = 20025, .adv_w = 144, .box_w = 33, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 20240, .adv_w = 193, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -10, 0, 0, 0,
- 0, 0, 0, 0, -11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -5, -6, 0, -2, -6, 0, -7, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -21, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -11, 0, 0, 0, 0, 0, 0, -6,
- 0, -1, 0, 0, -12, -2, -8, -6,
- 0, -9, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, -2, -1, -5, -3, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -3,
- 0, -2, 0, 0, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -3, 0, 0, 0, 0, 0,
- 0, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, -10, 0, 0,
- 0, -2, 0, 0, 0, -3, 0, -2,
- 0, -2, -4, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, -2, -2, 0, -2, 0, 0, 0,
- -2, -2, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, -22, 0, 0, 0, -16,
- 0, -25, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, -3, -2, 0, 0, -2,
- -2, 0, 0, -2, -2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, -3, 0,
- 0, 0, 2, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -6, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, -2,
- -3, 0, 0, 0, -2, -4, -6, 0,
- 0, 0, 0, -31, 0, 0, 0, 0,
- 0, 0, 0, 2, -6, 0, 0, -26,
- -5, -16, -13, 0, -22, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- -12, -9, 0, 0, 0, 0, 0, 0,
- 0, 0, -30, 0, 0, 0, -13, 0,
- -19, 0, 0, 0, 0, 0, -3, 0,
- -2, 0, -1, -1, 0, 0, -1, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, -3,
- -2, 0, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -7, 0, -2, 0, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -4, 0,
- 0, 0, 0, -20, -22, 0, 0, -7,
- -3, -22, -1, 2, 0, 2, 1, 0,
- 2, 0, 0, -11, -9, 0, -10, -9,
- -7, -11, 0, -9, -7, -5, -7, -6,
- 0, 0, 0, 0, 2, 0, -21, -3,
- 0, 0, -7, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, -4, -4,
- 0, 0, -4, -3, 0, 0, -3, -1,
- 0, 0, 0, 2, 0, 0, 0, 1,
- 0, -12, -6, 0, 0, -4, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, -3, -3, 0, 0, -3, -2, 0,
- 0, -2, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- 0, -2, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- -2, 0, 0, 0, -2, -3, 0, 0,
- 0, 0, 0, 0, -3, 2, -5, -20,
- -5, 0, 0, -9, -3, -9, -1, 2,
- -9, 2, 2, 1, 2, 0, 2, -7,
- -6, -2, -4, -6, -4, -5, -2, -4,
- -2, 0, -2, -3, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, -2, 0,
- 0, 0, -2, -3, -3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, -2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -1, 0, 0, 0, 0, 0, -3,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -1, 0, -1, -1,
- 0, 0, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -1, 0, 0, 0, 0, 0,
- 2, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, -10, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -13, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, 0,
- -2, -1, 0, 0, 2, 0, 0, 0,
- -12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -4, -2, 1, 0, -2, 0, 0, 5,
- 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, -10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, -1,
- 1, 0, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -12, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- -2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 4,
- .kern_classes = 1,
- .bitmap_format = 0
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_12_subpx = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 14, /*The maximum line height required by the font*/
- .base_line = 3, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_HOR,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_12_SUBPX*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_16.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_16.c
deleted file mode 100644
index a52b2c0d..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_16.c
+++ /dev/null
@@ -1,2116 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 16 px
- * Bpp: 4
- * Opts: --no-compress --no-prefilter --bpp 4 --size 16 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_16.c --force-fast-kern-format
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_16
-#define LV_FONT_ROBOTO_16 1
-#endif
-
-#if LV_FONT_ROBOTO_16
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0x9b, 0x9b,
- 0x56, 0x0, 0x57, 0x8c,
-
- /* U+22 "\"" */
- 0xe2, 0xd4, 0xe2, 0xd3, 0xe0, 0xd2, 0xe0, 0xd1,
- 0x0, 0x0,
-
- /* U+23 "#" */
- 0x0, 0x1, 0xf0, 0xe, 0x30, 0x0, 0x4, 0xc0,
- 0x2f, 0x0, 0x0, 0x8, 0x90, 0x5c, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xf4, 0x1, 0x2e, 0x42, 0xc7,
- 0x20, 0x0, 0x1f, 0x0, 0xe3, 0x0, 0x0, 0x4d,
- 0x1, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xa0,
- 0x12, 0xb8, 0x28, 0xb2, 0x10, 0x0, 0xc4, 0xa,
- 0x70, 0x0, 0x0, 0xf2, 0xc, 0x50, 0x0, 0x1,
- 0xf0, 0xf, 0x20, 0x0,
-
- /* U+24 "$" */
- 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0xe, 0x40,
- 0x0, 0x0, 0x2, 0xe6, 0x0, 0x0, 0xa, 0xff,
- 0xfc, 0x10, 0x6, 0xf5, 0x4, 0xfa, 0x0, 0xac,
- 0x0, 0x8, 0xe0, 0x9, 0xe0, 0x0, 0x26, 0x0,
- 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x3c, 0xfd, 0x50,
- 0x0, 0x0, 0x3, 0xaf, 0x70, 0x1, 0x0, 0x0,
- 0x9f, 0x0, 0xf6, 0x0, 0x5, 0xf1, 0xc, 0xd1,
- 0x1, 0xce, 0x0, 0x3e, 0xfe, 0xfe, 0x40, 0x0,
- 0x5, 0xf6, 0x10, 0x0, 0x0, 0xf, 0x20, 0x0,
-
- /* U+25 "%" */
- 0x5, 0xde, 0x80, 0x0, 0x0, 0x0, 0xf, 0x31,
- 0xd4, 0x0, 0x70, 0x0, 0x2e, 0x0, 0x97, 0x8,
- 0x90, 0x0, 0xf, 0x31, 0xd5, 0x2e, 0x10, 0x0,
- 0x5, 0xde, 0x80, 0xb5, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x29,
- 0xec, 0x20, 0x0, 0x0, 0x98, 0x6c, 0x17, 0xc0,
- 0x0, 0x3, 0xe0, 0x97, 0x1, 0xf0, 0x0, 0xd,
- 0x50, 0x97, 0x1, 0xf0, 0x0, 0x19, 0x0, 0x6c,
- 0x7, 0xc0, 0x0, 0x0, 0x0, 0x9, 0xfc, 0x20,
-
- /* U+26 "&" */
- 0x0, 0x3c, 0xfc, 0x30, 0x0, 0x0, 0xeb, 0x4a,
- 0xe0, 0x0, 0x3, 0xf3, 0x1, 0xf3, 0x0, 0x2,
- 0xf5, 0x6, 0xf1, 0x0, 0x0, 0xbd, 0x8f, 0x50,
- 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x3, 0xec,
- 0xf8, 0x0, 0x71, 0xd, 0xc0, 0x7f, 0x42, 0xf1,
- 0x2f, 0x40, 0xa, 0xf9, 0xe0, 0x1f, 0x60, 0x0,
- 0xcf, 0x70, 0xa, 0xe4, 0x15, 0xef, 0xb0, 0x0,
- 0x8d, 0xfe, 0x95, 0xf8,
-
- /* U+27 "'" */
- 0x3f, 0x3f, 0x3e, 0x2c,
-
- /* U+28 "(" */
- 0x0, 0x2, 0x0, 0x3, 0xe1, 0x1, 0xe5, 0x0,
- 0x9b, 0x0, 0x1f, 0x40, 0x6, 0xe0, 0x0, 0xab,
- 0x0, 0xd, 0x90, 0x0, 0xe8, 0x0, 0xe, 0x70,
- 0x0, 0xd8, 0x0, 0xc, 0xa0, 0x0, 0x8d, 0x0,
- 0x3, 0xf1, 0x0, 0xd, 0x70, 0x0, 0x4e, 0x10,
- 0x0, 0x9b, 0x0, 0x0, 0x80,
-
- /* U+29 ")" */
- 0x20, 0x0, 0x8, 0xa0, 0x0, 0xd, 0x70, 0x0,
- 0x4f, 0x10, 0x0, 0xd8, 0x0, 0x8, 0xe0, 0x0,
- 0x4f, 0x20, 0x1, 0xf4, 0x0, 0xf, 0x60, 0x0,
- 0xf6, 0x0, 0x1f, 0x50, 0x3, 0xf3, 0x0, 0x5f,
- 0x0, 0xa, 0xb0, 0x0, 0xf4, 0x0, 0x8b, 0x0,
- 0x4e, 0x20, 0x6, 0x20, 0x0,
-
- /* U+2A "*" */
- 0x0, 0x1f, 0x0, 0x0, 0x1, 0xf0, 0x0, 0x9b,
- 0x6f, 0x5b, 0x73, 0x8d, 0xfd, 0x83, 0x0, 0xde,
- 0xa0, 0x0, 0x9c, 0x1f, 0x50, 0x7, 0x30, 0x66,
- 0x0,
-
- /* U+2B "+" */
- 0x0, 0x2, 0xa2, 0x0, 0x0, 0x0, 0x3f, 0x30,
- 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x11, 0x4f,
- 0x51, 0x10, 0x6f, 0xff, 0xff, 0xff, 0x61, 0x44,
- 0x7f, 0x74, 0x41, 0x0, 0x3, 0xf3, 0x0, 0x0,
- 0x0, 0x3f, 0x30, 0x0, 0x0, 0x3, 0xf3, 0x0,
- 0x0,
-
- /* U+2C "," */
- 0xf, 0x60, 0xf5, 0x4f, 0x28, 0x90, 0x0, 0x0,
-
- /* U+2D "-" */
- 0x0, 0x0, 0xb, 0xff, 0xf1, 0x23, 0x33, 0x0,
-
- /* U+2E "." */
- 0x88, 0xab,
-
- /* U+2F "/" */
- 0x0, 0x0, 0x4e, 0x0, 0x0, 0xa, 0x90, 0x0,
- 0x0, 0xf3, 0x0, 0x0, 0x6d, 0x0, 0x0, 0xc,
- 0x70, 0x0, 0x2, 0xf1, 0x0, 0x0, 0x7c, 0x0,
- 0x0, 0xd, 0x60, 0x0, 0x3, 0xf0, 0x0, 0x0,
- 0x9a, 0x0, 0x0, 0xe, 0x40, 0x0, 0x5, 0xe0,
- 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0,
-
- /* U+30 "0" */
- 0x0, 0x7d, 0xfd, 0x60, 0x0, 0x5f, 0x84, 0x9f,
- 0x50, 0xc, 0xb0, 0x0, 0xbc, 0x0, 0xf7, 0x0,
- 0x7, 0xf0, 0x1f, 0x50, 0x0, 0x5f, 0x1, 0xf5,
- 0x0, 0x5, 0xf1, 0x1f, 0x50, 0x0, 0x5f, 0x11,
- 0xf5, 0x0, 0x6, 0xf0, 0xf, 0x70, 0x0, 0x7f,
- 0x0, 0xcc, 0x0, 0xc, 0xb0, 0x5, 0xf9, 0x49,
- 0xf5, 0x0, 0x6, 0xdf, 0xd6, 0x0,
-
- /* U+31 "1" */
- 0x0, 0x39, 0xa5, 0xdf, 0xfb, 0x99, 0x2c, 0xb0,
- 0x0, 0xcb, 0x0, 0xc, 0xb0, 0x0, 0xcb, 0x0,
- 0xc, 0xb0, 0x0, 0xcb, 0x0, 0xc, 0xb0, 0x0,
- 0xcb, 0x0, 0xc, 0xb0, 0x0, 0xcb,
-
- /* U+32 "2" */
- 0x0, 0x7e, 0xfd, 0x60, 0x0, 0x9f, 0x74, 0x9f,
- 0x60, 0x1f, 0x60, 0x0, 0xcc, 0x2, 0xa2, 0x0,
- 0x9, 0xd0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0,
- 0x0, 0x7f, 0x10, 0x0, 0x0, 0x4f, 0x60, 0x0,
- 0x0, 0x2f, 0x90, 0x0, 0x0, 0x1e, 0xa0, 0x0,
- 0x0, 0xc, 0xc0, 0x0, 0x0, 0xa, 0xf4, 0x33,
- 0x33, 0x10, 0xff, 0xff, 0xff, 0xf6,
-
- /* U+33 "3" */
- 0x0, 0x8d, 0xfd, 0x50, 0xa, 0xe6, 0x48, 0xf5,
- 0xf, 0x60, 0x0, 0xca, 0x1, 0x0, 0x0, 0xbb,
- 0x0, 0x0, 0x16, 0xf4, 0x0, 0xf, 0xff, 0x60,
- 0x0, 0x3, 0x49, 0xf4, 0x0, 0x0, 0x0, 0xbc,
- 0x16, 0x10, 0x0, 0x8e, 0x2f, 0x60, 0x0, 0xbc,
- 0xa, 0xe6, 0x48, 0xf4, 0x0, 0x8d, 0xfc, 0x50,
-
- /* U+34 "4" */
- 0x0, 0x0, 0xc, 0xf0, 0x0, 0x0, 0x6, 0xff,
- 0x0, 0x0, 0x1, 0xec, 0xf0, 0x0, 0x0, 0xac,
- 0x6f, 0x0, 0x0, 0x3f, 0x26, 0xf0, 0x0, 0xd,
- 0x80, 0x6f, 0x0, 0x7, 0xe0, 0x6, 0xf0, 0x1,
- 0xf5, 0x0, 0x6f, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xa1, 0x33, 0x33, 0x8f, 0x32, 0x0, 0x0, 0x6,
- 0xf0, 0x0, 0x0, 0x0, 0x6f, 0x0,
-
- /* U+35 "5" */
- 0xd, 0xff, 0xff, 0xf0, 0xf, 0xa6, 0x66, 0x60,
- 0x1f, 0x40, 0x0, 0x0, 0x2f, 0x20, 0x0, 0x0,
- 0x4f, 0xcf, 0xfa, 0x10, 0x4f, 0x84, 0x8f, 0xb0,
- 0x0, 0x0, 0x7, 0xf2, 0x0, 0x0, 0x2, 0xf4,
- 0x43, 0x0, 0x2, 0xf4, 0x9d, 0x0, 0x6, 0xf1,
- 0x2f, 0xa4, 0x6f, 0xa0, 0x4, 0xcf, 0xe8, 0x0,
-
- /* U+36 "6" */
- 0x0, 0x2a, 0xe9, 0x0, 0x5, 0xfc, 0x63, 0x0,
- 0x1f, 0x80, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0,
- 0xbb, 0xbf, 0xf9, 0x0, 0xef, 0xa4, 0x7f, 0x80,
- 0xfb, 0x0, 0x8, 0xf0, 0xf8, 0x0, 0x4, 0xf2,
- 0xd9, 0x0, 0x4, 0xf2, 0x9e, 0x0, 0x8, 0xe0,
- 0x1e, 0xc5, 0x7f, 0x70, 0x2, 0xcf, 0xe7, 0x0,
-
- /* U+37 "7" */
- 0x6f, 0xff, 0xff, 0xff, 0x41, 0x33, 0x33, 0x38,
- 0xf1, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0x0,
- 0x3f, 0x20, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0,
- 0x1, 0xf5, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0,
- 0x0, 0xe, 0x70, 0x0, 0x0, 0x6, 0xf1, 0x0,
- 0x0, 0x0, 0xda, 0x0, 0x0, 0x0, 0x4f, 0x30,
- 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0,
-
- /* U+38 "8" */
- 0x0, 0x6d, 0xfd, 0x60, 0x0, 0x6f, 0x84, 0x8f,
- 0x60, 0xc, 0xb0, 0x0, 0xbb, 0x0, 0xca, 0x0,
- 0xa, 0xc0, 0x6, 0xf4, 0x4, 0xf6, 0x0, 0x9,
- 0xff, 0xf9, 0x0, 0x5, 0xf7, 0x48, 0xf5, 0x0,
- 0xe8, 0x0, 0x9, 0xe0, 0x1f, 0x50, 0x0, 0x5f,
- 0x10, 0xf8, 0x0, 0x8, 0xf0, 0x8, 0xf7, 0x47,
- 0xf7, 0x0, 0x7, 0xdf, 0xd7, 0x0,
-
- /* U+39 "9" */
- 0x0, 0x6e, 0xfc, 0x30, 0x7, 0xf8, 0x5c, 0xf1,
- 0xe, 0x90, 0x1, 0xf8, 0x2f, 0x40, 0x0, 0xac,
- 0x2f, 0x30, 0x0, 0x8e, 0xf, 0x70, 0x0, 0xae,
- 0xa, 0xe4, 0x17, 0xfe, 0x1, 0xcf, 0xfc, 0xab,
- 0x0, 0x2, 0x20, 0xc8, 0x0, 0x0, 0x5, 0xf2,
- 0x0, 0x25, 0xaf, 0x60, 0x0, 0x9e, 0xb4, 0x0,
-
- /* U+3A ":" */
- 0xba, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97,
- 0xba,
-
- /* U+3B ";" */
- 0xe, 0x70, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xa5, 0xe, 0x71, 0xf5, 0x7d,
- 0x1, 0x20,
-
- /* U+3C "<" */
- 0x0, 0x0, 0x4, 0xb0, 0x0, 0x4c, 0xfc, 0x5,
- 0xcf, 0xb4, 0x6, 0xfa, 0x20, 0x0, 0x2c, 0xfa,
- 0x30, 0x0, 0x4, 0xbf, 0xc5, 0x0, 0x0, 0x3b,
- 0xf0, 0x0, 0x0, 0x2,
-
- /* U+3D "=" */
- 0x1, 0x11, 0x11, 0xd, 0xff, 0xff, 0xfb, 0x34,
- 0x44, 0x44, 0x20, 0x11, 0x11, 0x10, 0xdf, 0xff,
- 0xff, 0xb3, 0x33, 0x33, 0x32,
-
- /* U+3E ">" */
- 0xb4, 0x0, 0x0, 0xb, 0xfd, 0x50, 0x0, 0x2,
- 0x9f, 0xe7, 0x0, 0x0, 0x7, 0xfb, 0x0, 0x39,
- 0xfd, 0x55, 0xcf, 0xc5, 0x0, 0xfb, 0x40, 0x0,
- 0x2, 0x0, 0x0, 0x0,
-
- /* U+3F "?" */
- 0x3, 0xbf, 0xe8, 0x1, 0xec, 0x57, 0xf8, 0x4e,
- 0x10, 0xa, 0xd0, 0x0, 0x0, 0x9d, 0x0, 0x0,
- 0x1e, 0x80, 0x0, 0xc, 0xd0, 0x0, 0xa, 0xe2,
- 0x0, 0x1, 0xf6, 0x0, 0x0, 0x19, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x19, 0x20, 0x0, 0x2,
- 0xe4, 0x0,
-
- /* U+40 "@" */
- 0x0, 0x0, 0x3a, 0xef, 0xeb, 0x40, 0x0, 0x0,
- 0x7, 0xe7, 0x31, 0x26, 0xe8, 0x0, 0x0, 0x6e,
- 0x20, 0x0, 0x0, 0xc, 0x50, 0x1, 0xf3, 0x0,
- 0x8e, 0xc5, 0x2, 0xe0, 0x7, 0xb0, 0x8, 0xc3,
- 0x7e, 0x0, 0xc3, 0xc, 0x50, 0x1f, 0x30, 0x5c,
- 0x0, 0x96, 0xf, 0x20, 0x6d, 0x0, 0x6b, 0x0,
- 0x78, 0x1f, 0x0, 0x9a, 0x0, 0x8a, 0x0, 0x78,
- 0x1f, 0x0, 0xb8, 0x0, 0x99, 0x0, 0x87, 0xf,
- 0x20, 0xa9, 0x0, 0xc8, 0x0, 0xc3, 0xd, 0x50,
- 0x6d, 0x15, 0xec, 0x6, 0xc0, 0x7, 0xc0, 0xb,
- 0xf9, 0x1c, 0xfb, 0x10, 0x0, 0xe7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3e, 0xa3, 0x10, 0x34,
- 0x0, 0x0, 0x0, 0x1, 0x8d, 0xff, 0xc6, 0x0,
- 0x0,
-
- /* U+41 "A" */
- 0x0, 0x0, 0x9f, 0x10, 0x0, 0x0, 0x0, 0xf,
- 0xf6, 0x0, 0x0, 0x0, 0x5, 0xfb, 0xc0, 0x0,
- 0x0, 0x0, 0xbb, 0x4f, 0x20, 0x0, 0x0, 0x1f,
- 0x60, 0xf8, 0x0, 0x0, 0x6, 0xf1, 0xa, 0xd0,
- 0x0, 0x0, 0xcc, 0x0, 0x5f, 0x30, 0x0, 0x2f,
- 0x70, 0x1, 0xf9, 0x0, 0x8, 0xff, 0xff, 0xff,
- 0xe0, 0x0, 0xdc, 0x33, 0x33, 0x6f, 0x50, 0x3f,
- 0x50, 0x0, 0x0, 0xeb, 0x9, 0xe0, 0x0, 0x0,
- 0x8, 0xf1,
-
- /* U+42 "B" */
- 0xaf, 0xff, 0xfc, 0x50, 0xa, 0xe4, 0x45, 0xaf,
- 0x50, 0xad, 0x0, 0x0, 0xdb, 0xa, 0xd0, 0x0,
- 0xd, 0xb0, 0xad, 0x0, 0x17, 0xf4, 0xa, 0xff,
- 0xff, 0xf8, 0x0, 0xad, 0x33, 0x48, 0xf6, 0xa,
- 0xd0, 0x0, 0xa, 0xe0, 0xad, 0x0, 0x0, 0x7f,
- 0xa, 0xd0, 0x0, 0xa, 0xe0, 0xae, 0x44, 0x59,
- 0xf7, 0xa, 0xff, 0xff, 0xd6, 0x0,
-
- /* U+43 "C" */
- 0x0, 0x8, 0xdf, 0xe8, 0x0, 0x0, 0xcf, 0x75,
- 0x7f, 0xb0, 0x7, 0xf3, 0x0, 0x4, 0xf4, 0xd,
- 0xb0, 0x0, 0x0, 0xd8, 0xf, 0x80, 0x0, 0x0,
- 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf, 0x70,
- 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0,
- 0xd, 0xb0, 0x0, 0x0, 0xc7, 0x7, 0xf3, 0x0,
- 0x4, 0xf5, 0x0, 0xcf, 0x75, 0x7e, 0xb0, 0x0,
- 0x9, 0xef, 0xe8, 0x0,
-
- /* U+44 "D" */
- 0xaf, 0xff, 0xe9, 0x10, 0xa, 0xe4, 0x46, 0xde,
- 0x20, 0xad, 0x0, 0x0, 0xdc, 0xa, 0xd0, 0x0,
- 0x5, 0xf3, 0xad, 0x0, 0x0, 0x1f, 0x7a, 0xd0,
- 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0xf, 0x8a,
- 0xd0, 0x0, 0x1, 0xf7, 0xad, 0x0, 0x0, 0x5f,
- 0x3a, 0xd0, 0x0, 0x1d, 0xd0, 0xae, 0x44, 0x6e,
- 0xe2, 0xa, 0xff, 0xfe, 0x91, 0x0,
-
- /* U+45 "E" */
- 0xaf, 0xff, 0xff, 0xf7, 0xae, 0x44, 0x44, 0x42,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xc0,
- 0xad, 0x33, 0x33, 0x20, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xae, 0x44, 0x44, 0x42, 0xaf, 0xff, 0xff, 0xf8,
-
- /* U+46 "F" */
- 0xaf, 0xff, 0xff, 0xf6, 0xae, 0x44, 0x44, 0x41,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0x90, 0xad, 0x33, 0x33, 0x20,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
-
- /* U+47 "G" */
- 0x0, 0x8, 0xef, 0xe9, 0x0, 0x0, 0xce, 0x75,
- 0x7e, 0xc0, 0x7, 0xf3, 0x0, 0x3, 0xf6, 0xc,
- 0xc0, 0x0, 0x0, 0x75, 0xf, 0x90, 0x0, 0x0,
- 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf, 0x70,
- 0x6, 0xff, 0xfb, 0xf, 0x90, 0x1, 0x33, 0xdb,
- 0xc, 0xd0, 0x0, 0x0, 0xcb, 0x6, 0xf5, 0x0,
- 0x0, 0xcb, 0x0, 0xbf, 0x84, 0x5a, 0xf7, 0x0,
- 0x7, 0xdf, 0xfc, 0x50,
-
- /* U+48 "H" */
- 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0,
- 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad,
- 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7,
- 0xf1, 0xaf, 0xff, 0xff, 0xff, 0xf1, 0xad, 0x33,
- 0x33, 0x39, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1,
- 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0,
- 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad,
- 0x0, 0x0, 0x7, 0xf1,
-
- /* U+49 "I" */
- 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
- 0x9f, 0x9f, 0x9f, 0x9f,
-
- /* U+4A "J" */
- 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
- 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
- 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
- 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
- 0x36, 0x0, 0x0, 0xe9, 0x7f, 0x10, 0x2, 0xf7,
- 0x1e, 0xc5, 0x5d, 0xe1, 0x3, 0xbe, 0xea, 0x20,
-
- /* U+4B "K" */
- 0xad, 0x0, 0x0, 0x8f, 0x40, 0xad, 0x0, 0x6,
- 0xf6, 0x0, 0xad, 0x0, 0x4f, 0x90, 0x0, 0xad,
- 0x2, 0xfb, 0x0, 0x0, 0xad, 0x1d, 0xd0, 0x0,
- 0x0, 0xad, 0xcf, 0x60, 0x0, 0x0, 0xaf, 0xfc,
- 0xf2, 0x0, 0x0, 0xaf, 0x41, 0xec, 0x0, 0x0,
- 0xad, 0x0, 0x4f, 0x80, 0x0, 0xad, 0x0, 0x8,
- 0xf4, 0x0, 0xad, 0x0, 0x0, 0xce, 0x10, 0xad,
- 0x0, 0x0, 0x2f, 0xa0,
-
- /* U+4C "L" */
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xae, 0x44, 0x44, 0x40, 0xaf, 0xff, 0xff, 0xf3,
-
- /* U+4D "M" */
- 0xaf, 0x70, 0x0, 0x0, 0x7, 0xfa, 0xaf, 0xd0,
- 0x0, 0x0, 0xd, 0xfa, 0xae, 0xf3, 0x0, 0x0,
- 0x3f, 0xea, 0xab, 0xd9, 0x0, 0x0, 0xac, 0xca,
- 0xab, 0x7e, 0x0, 0x0, 0xf6, 0xca, 0xac, 0x1f,
- 0x50, 0x6, 0xf1, 0xca, 0xac, 0xb, 0xb0, 0xc,
- 0xa0, 0xda, 0xad, 0x5, 0xf1, 0x2f, 0x40, 0xda,
- 0xad, 0x0, 0xe7, 0x8e, 0x0, 0xda, 0xad, 0x0,
- 0x8d, 0xe8, 0x0, 0xda, 0xad, 0x0, 0x2f, 0xf2,
- 0x0, 0xda, 0xad, 0x0, 0xc, 0xb0, 0x0, 0xda,
-
- /* U+4E "N" */
- 0xaf, 0x20, 0x0, 0x6, 0xf1, 0xaf, 0xc0, 0x0,
- 0x6, 0xf1, 0xaf, 0xf6, 0x0, 0x6, 0xf1, 0xad,
- 0xbe, 0x10, 0x6, 0xf1, 0xad, 0x2f, 0x90, 0x6,
- 0xf1, 0xad, 0x7, 0xf3, 0x6, 0xf1, 0xad, 0x0,
- 0xdd, 0x6, 0xf1, 0xad, 0x0, 0x3f, 0x76, 0xf1,
- 0xad, 0x0, 0x9, 0xf8, 0xf1, 0xad, 0x0, 0x1,
- 0xef, 0xf1, 0xad, 0x0, 0x0, 0x5f, 0xf1, 0xad,
- 0x0, 0x0, 0xb, 0xf1,
-
- /* U+4F "O" */
- 0x0, 0x8, 0xdf, 0xd8, 0x0, 0x0, 0xc, 0xf8,
- 0x58, 0xfc, 0x0, 0x6, 0xf4, 0x0, 0x4, 0xf6,
- 0x0, 0xcc, 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80,
- 0x0, 0x0, 0x8f, 0x1, 0xf7, 0x0, 0x0, 0x7,
- 0xf1, 0x1f, 0x60, 0x0, 0x0, 0x6f, 0x10, 0xf8,
- 0x0, 0x0, 0x8, 0xf0, 0xc, 0xc0, 0x0, 0x0,
- 0xcc, 0x0, 0x6f, 0x40, 0x0, 0x3f, 0x60, 0x0,
- 0xbf, 0x85, 0x8f, 0xc0, 0x0, 0x0, 0x8d, 0xfe,
- 0x80, 0x0,
-
- /* U+50 "P" */
- 0xaf, 0xff, 0xfe, 0x80, 0xa, 0xe4, 0x45, 0x8f,
- 0xd0, 0xad, 0x0, 0x0, 0x4f, 0x5a, 0xd0, 0x0,
- 0x0, 0xf7, 0xad, 0x0, 0x0, 0x2f, 0x6a, 0xd0,
- 0x1, 0x3c, 0xf1, 0xaf, 0xff, 0xff, 0xd3, 0xa,
- 0xd3, 0x33, 0x10, 0x0, 0xad, 0x0, 0x0, 0x0,
- 0xa, 0xd0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0,
- 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0,
-
- /* U+51 "Q" */
- 0x0, 0x8, 0xef, 0xd7, 0x0, 0x0, 0xc, 0xf8,
- 0x58, 0xfb, 0x0, 0x7, 0xf3, 0x0, 0x5, 0xf5,
- 0x0, 0xdb, 0x0, 0x0, 0xd, 0xb0, 0xf, 0x70,
- 0x0, 0x0, 0x9e, 0x2, 0xf6, 0x0, 0x0, 0x8,
- 0xf0, 0x2f, 0x50, 0x0, 0x0, 0x7f, 0x0, 0xf7,
- 0x0, 0x0, 0x9, 0xe0, 0xd, 0xb0, 0x0, 0x0,
- 0xdb, 0x0, 0x7f, 0x30, 0x0, 0x4f, 0x50, 0x0,
- 0xce, 0x75, 0x8f, 0xb0, 0x0, 0x0, 0x8e, 0xfe,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0x60,
-
- /* U+52 "R" */
- 0xbf, 0xff, 0xfc, 0x50, 0xb, 0xe4, 0x45, 0xaf,
- 0x70, 0xbd, 0x0, 0x0, 0xbe, 0xb, 0xd0, 0x0,
- 0x7, 0xf0, 0xbd, 0x0, 0x0, 0xaf, 0xb, 0xd0,
- 0x1, 0x6f, 0x80, 0xbf, 0xff, 0xff, 0x80, 0xb,
- 0xd3, 0x37, 0xf3, 0x0, 0xbd, 0x0, 0xd, 0xb0,
- 0xb, 0xd0, 0x0, 0x5f, 0x40, 0xbd, 0x0, 0x0,
- 0xcc, 0xb, 0xd0, 0x0, 0x4, 0xf5,
-
- /* U+53 "S" */
- 0x0, 0x5c, 0xff, 0xa2, 0x0, 0x6f, 0x95, 0x6c,
- 0xf2, 0xe, 0xa0, 0x0, 0xe, 0xa0, 0xf9, 0x0,
- 0x0, 0x67, 0xa, 0xf5, 0x0, 0x0, 0x0, 0xa,
- 0xfe, 0x93, 0x0, 0x0, 0x3, 0x8e, 0xf9, 0x0,
- 0x0, 0x0, 0x6, 0xf8, 0x29, 0x10, 0x0, 0xa,
- 0xd2, 0xf7, 0x0, 0x0, 0xcc, 0x9, 0xf9, 0x55,
- 0xaf, 0x50, 0x6, 0xcf, 0xec, 0x50,
-
- /* U+54 "T" */
- 0x9f, 0xff, 0xff, 0xff, 0xf3, 0x24, 0x44, 0xfa,
- 0x44, 0x40, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0xf8, 0x0, 0x0,
-
- /* U+55 "U" */
- 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90, 0x0, 0x2,
- 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90, 0x0,
- 0x2, 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90,
- 0x0, 0x2, 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e,
- 0x90, 0x0, 0x2, 0xf5, 0xda, 0x0, 0x0, 0x3f,
- 0x4a, 0xe0, 0x0, 0x8, 0xf1, 0x2f, 0xc6, 0x59,
- 0xf7, 0x0, 0x2a, 0xef, 0xc5, 0x0,
-
- /* U+56 "V" */
- 0x9f, 0x0, 0x0, 0x0, 0xdc, 0x4f, 0x50, 0x0,
- 0x2, 0xf7, 0xe, 0xa0, 0x0, 0x7, 0xf1, 0x8,
- 0xf0, 0x0, 0xd, 0xc0, 0x3, 0xf5, 0x0, 0x2f,
- 0x60, 0x0, 0xda, 0x0, 0x7f, 0x10, 0x0, 0x7f,
- 0x0, 0xcb, 0x0, 0x0, 0x2f, 0x52, 0xf5, 0x0,
- 0x0, 0xc, 0xa7, 0xf0, 0x0, 0x0, 0x7, 0xfd,
- 0xa0, 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0xbe, 0x0, 0x0,
-
- /* U+57 "W" */
- 0x6f, 0x10, 0x0, 0x9f, 0x0, 0x0, 0xcb, 0x2f,
- 0x40, 0x0, 0xdf, 0x30, 0x0, 0xf8, 0xe, 0x80,
- 0x1, 0xfe, 0x70, 0x3, 0xf4, 0xb, 0xb0, 0x6,
- 0xf8, 0xb0, 0x6, 0xf0, 0x7, 0xf0, 0xa, 0xa4,
- 0xf0, 0x9, 0xd0, 0x4, 0xf2, 0xe, 0x60, 0xf4,
- 0xd, 0x90, 0x0, 0xf6, 0x2f, 0x10, 0xb8, 0xf,
- 0x50, 0x0, 0xc9, 0x7d, 0x0, 0x7c, 0x4f, 0x20,
- 0x0, 0x9d, 0xb9, 0x0, 0x3f, 0x8e, 0x0, 0x0,
- 0x5f, 0xe4, 0x0, 0xe, 0xea, 0x0, 0x0, 0x1f,
- 0xf0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0xe, 0xb0,
- 0x0, 0x6, 0xf3, 0x0,
-
- /* U+58 "X" */
- 0x2f, 0x90, 0x0, 0x8, 0xf3, 0x8, 0xf3, 0x0,
- 0x2f, 0x90, 0x0, 0xec, 0x0, 0xbe, 0x10, 0x0,
- 0x5f, 0x65, 0xf6, 0x0, 0x0, 0xb, 0xee, 0xc0,
- 0x0, 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x3,
- 0xff, 0x40, 0x0, 0x0, 0xc, 0xed, 0xd0, 0x0,
- 0x0, 0x6f, 0x54, 0xf7, 0x0, 0x1, 0xeb, 0x0,
- 0xaf, 0x20, 0xa, 0xf2, 0x0, 0x1f, 0xb0, 0x3f,
- 0x80, 0x0, 0x7, 0xf4,
-
- /* U+59 "Y" */
- 0x9f, 0x10, 0x0, 0x7, 0xf3, 0x1f, 0x90, 0x0,
- 0xe, 0xa0, 0x9, 0xf1, 0x0, 0x7f, 0x20, 0x1,
- 0xf9, 0x0, 0xea, 0x0, 0x0, 0x8f, 0x17, 0xf2,
- 0x0, 0x0, 0x1f, 0x9e, 0x90, 0x0, 0x0, 0x7,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0xf8, 0x0, 0x0,
-
- /* U+5A "Z" */
- 0x3f, 0xff, 0xff, 0xff, 0xb1, 0x44, 0x44, 0x48,
- 0xf7, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0,
- 0x8f, 0x30, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0,
- 0xd, 0xd0, 0x0, 0x0, 0x7, 0xf3, 0x0, 0x0,
- 0x2, 0xf8, 0x0, 0x0, 0x0, 0xcd, 0x0, 0x0,
- 0x0, 0x7f, 0x40, 0x0, 0x0, 0x2f, 0xc4, 0x44,
- 0x44, 0x45, 0xff, 0xff, 0xff, 0xff,
-
- /* U+5B "[" */
- 0x0, 0x0, 0xdf, 0xf1, 0xda, 0x30, 0xd9, 0x0,
- 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
- 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
- 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
- 0xdf, 0xf1, 0x23, 0x30,
-
- /* U+5C "\\" */
- 0x8d, 0x0, 0x0, 0x2, 0xf3, 0x0, 0x0, 0xc,
- 0x90, 0x0, 0x0, 0x6e, 0x0, 0x0, 0x1, 0xf5,
- 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0, 0x5f, 0x10,
- 0x0, 0x0, 0xe6, 0x0, 0x0, 0x9, 0xc0, 0x0,
- 0x0, 0x3f, 0x20, 0x0, 0x0, 0xd8, 0x0, 0x0,
- 0x7, 0xe0, 0x0, 0x0, 0x2f, 0x40,
-
- /* U+5D "]" */
- 0x0, 0x0, 0xef, 0xf0, 0x38, 0xf0, 0x6, 0xf0,
- 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0,
- 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0,
- 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x7, 0xf0,
- 0xef, 0xf0, 0x23, 0x30,
-
- /* U+5E "^" */
- 0x0, 0x5f, 0x0, 0x0, 0xb, 0xf6, 0x0, 0x2,
- 0xfa, 0xc0, 0x0, 0x8c, 0x2f, 0x20, 0xe, 0x60,
- 0xb9, 0x4, 0xf1, 0x5, 0xe0,
-
- /* U+5F "_" */
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf3,
- 0x33, 0x33, 0x33, 0x30,
-
- /* U+60 "`" */
- 0x28, 0x20, 0xb, 0xc0, 0x1, 0xd6,
-
- /* U+61 "a" */
- 0x0, 0x8d, 0xfc, 0x40, 0xa, 0xe5, 0x48, 0xf2,
- 0x4, 0x20, 0x0, 0xe7, 0x0, 0x7c, 0xef, 0xf8,
- 0x9, 0xe5, 0x22, 0xe8, 0xf, 0x60, 0x0, 0xe8,
- 0x1f, 0x60, 0x2, 0xf8, 0xc, 0xe6, 0x6e, 0xf9,
- 0x2, 0xbf, 0xe6, 0xa9,
-
- /* U+62 "b" */
- 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
- 0xe8, 0x0, 0x0, 0x0, 0xe9, 0x9f, 0xe8, 0x0,
- 0xef, 0x95, 0x8f, 0x80, 0xea, 0x0, 0x9, 0xe0,
- 0xe8, 0x0, 0x4, 0xf2, 0xe8, 0x0, 0x3, 0xf3,
- 0xe8, 0x0, 0x4, 0xf2, 0xea, 0x0, 0x9, 0xe0,
- 0xef, 0x95, 0x8f, 0x80, 0xe7, 0x9f, 0xe9, 0x0,
-
- /* U+63 "c" */
- 0x0, 0x6d, 0xfc, 0x50, 0x6, 0xf7, 0x49, 0xf4,
- 0xe, 0x90, 0x0, 0xbb, 0x2f, 0x40, 0x0, 0x12,
- 0x4f, 0x20, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x0,
- 0xe, 0x80, 0x0, 0x9a, 0x6, 0xf7, 0x48, 0xf4,
- 0x0, 0x6d, 0xfc, 0x50,
-
- /* U+64 "d" */
- 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x9e,
- 0x0, 0x0, 0x0, 0x9e, 0x0, 0x8e, 0xfa, 0x9e,
- 0x7, 0xf9, 0x59, 0xfe, 0xe, 0xa0, 0x0, 0xae,
- 0x2f, 0x40, 0x0, 0x9e, 0x3f, 0x30, 0x0, 0x9e,
- 0x2f, 0x40, 0x0, 0x9e, 0xe, 0x80, 0x0, 0x9e,
- 0x7, 0xf6, 0x26, 0xfe, 0x0, 0x8e, 0xea, 0x9e,
-
- /* U+65 "e" */
- 0x0, 0x5d, 0xfd, 0x40, 0x5, 0xf8, 0x4a, 0xf2,
- 0xe, 0xa0, 0x0, 0xd9, 0x2f, 0x50, 0x0, 0x9c,
- 0x4f, 0xff, 0xff, 0xfe, 0x3f, 0x63, 0x33, 0x33,
- 0xe, 0x80, 0x0, 0x10, 0x6, 0xf8, 0x45, 0xd8,
- 0x0, 0x5d, 0xfe, 0x80,
-
- /* U+66 "f" */
- 0x0, 0x0, 0x0, 0x0, 0x3c, 0xf8, 0x0, 0xdd,
- 0x42, 0x1, 0xf5, 0x0, 0x2, 0xf4, 0x0, 0x8f,
- 0xff, 0xf1, 0x15, 0xf6, 0x20, 0x3, 0xf4, 0x0,
- 0x3, 0xf4, 0x0, 0x3, 0xf4, 0x0, 0x3, 0xf4,
- 0x0, 0x3, 0xf4, 0x0, 0x3, 0xf4, 0x0, 0x3,
- 0xf4, 0x0,
-
- /* U+67 "g" */
- 0x0, 0x8e, 0xfa, 0x8e, 0x7, 0xf9, 0x59, 0xfe,
- 0xe, 0xa0, 0x0, 0xae, 0x2f, 0x40, 0x0, 0x9e,
- 0x3f, 0x30, 0x0, 0x9e, 0x2f, 0x40, 0x0, 0x9e,
- 0xe, 0x90, 0x0, 0xae, 0x7, 0xf9, 0x59, 0xfe,
- 0x0, 0x8e, 0xfa, 0xae, 0x0, 0x0, 0x0, 0xcb,
- 0x9, 0xc5, 0x49, 0xf4, 0x0, 0x8e, 0xfc, 0x40,
-
- /* U+68 "h" */
- 0xe8, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0xe8,
- 0x0, 0x0, 0xe, 0x88, 0xee, 0x90, 0xef, 0xa5,
- 0x8f, 0x6e, 0xb0, 0x0, 0xca, 0xe8, 0x0, 0xb,
- 0xbe, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xce,
- 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xce, 0x80,
- 0x0, 0xbc,
-
- /* U+69 "i" */
- 0xb9, 0x76, 0x0, 0xca, 0xca, 0xca, 0xca, 0xca,
- 0xca, 0xca, 0xca, 0xca,
-
- /* U+6A "j" */
- 0x0, 0xc8, 0x0, 0x85, 0x0, 0x0, 0x0, 0xd9,
- 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9,
- 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9,
- 0x0, 0xd9, 0x26, 0xf7, 0x7f, 0xb0,
-
- /* U+6B "k" */
- 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
- 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x7f, 0x40,
- 0xe8, 0x6, 0xf6, 0x0, 0xe8, 0x4f, 0x80, 0x0,
- 0xeb, 0xfb, 0x0, 0x0, 0xef, 0xfe, 0x0, 0x0,
- 0xed, 0x3f, 0xa0, 0x0, 0xe8, 0x6, 0xf5, 0x0,
- 0xe8, 0x0, 0xae, 0x10, 0xe8, 0x0, 0x1e, 0xb0,
-
- /* U+6C "l" */
- 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
- 0xca, 0xca, 0xca, 0xca,
-
- /* U+6D "m" */
- 0xe8, 0x9f, 0xf9, 0x8, 0xee, 0xa1, 0xef, 0x85,
- 0x9f, 0xdb, 0x57, 0xf9, 0xea, 0x0, 0xd, 0xe0,
- 0x0, 0x9d, 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8e,
- 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f, 0xe8, 0x0,
- 0xb, 0xb0, 0x0, 0x8f, 0xe8, 0x0, 0xb, 0xb0,
- 0x0, 0x8f, 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f,
- 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f,
-
- /* U+6E "n" */
- 0xe8, 0x9e, 0xe9, 0xe, 0xfa, 0x58, 0xf6, 0xeb,
- 0x0, 0xc, 0xae, 0x80, 0x0, 0xbb, 0xe8, 0x0,
- 0xb, 0xce, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb,
- 0xce, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xc0,
-
- /* U+6F "o" */
- 0x0, 0x5d, 0xfd, 0x70, 0x0, 0x5f, 0x94, 0x7f,
- 0x70, 0xe, 0xa0, 0x0, 0x8f, 0x13, 0xf4, 0x0,
- 0x2, 0xf5, 0x4f, 0x30, 0x0, 0xf, 0x63, 0xf4,
- 0x0, 0x2, 0xf5, 0xe, 0x90, 0x0, 0x8f, 0x10,
- 0x5f, 0x94, 0x7f, 0x70, 0x0, 0x6d, 0xfd, 0x70,
- 0x0,
-
- /* U+70 "p" */
- 0xe8, 0xaf, 0xe8, 0x0, 0xef, 0x62, 0x6f, 0x70,
- 0xe9, 0x0, 0x9, 0xe0, 0xe8, 0x0, 0x4, 0xf1,
- 0xe8, 0x0, 0x3, 0xf3, 0xe8, 0x0, 0x5, 0xf1,
- 0xe9, 0x0, 0xa, 0xe0, 0xef, 0x74, 0x8f, 0x70,
- 0xe9, 0xae, 0xe9, 0x0, 0xe8, 0x0, 0x0, 0x0,
- 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
-
- /* U+71 "q" */
- 0x0, 0x8e, 0xfa, 0x8e, 0x7, 0xf8, 0x48, 0xfe,
- 0xe, 0x90, 0x0, 0xae, 0x2f, 0x40, 0x0, 0x9e,
- 0x3f, 0x30, 0x0, 0x9e, 0x2f, 0x40, 0x0, 0x9e,
- 0xe, 0x90, 0x0, 0xae, 0x7, 0xf8, 0x48, 0xfe,
- 0x0, 0x8e, 0xea, 0xae, 0x0, 0x0, 0x0, 0x9e,
- 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x9e,
-
- /* U+72 "r" */
- 0xe9, 0xbf, 0x2e, 0xf8, 0x51, 0xea, 0x0, 0xe,
- 0x80, 0x0, 0xe8, 0x0, 0xe, 0x80, 0x0, 0xe8,
- 0x0, 0xe, 0x80, 0x0, 0xe8, 0x0, 0x0,
-
- /* U+73 "s" */
- 0x0, 0x9e, 0xfb, 0x30, 0xa, 0xe5, 0x4c, 0xe1,
- 0xe, 0x80, 0x1, 0xb3, 0xa, 0xe6, 0x10, 0x0,
- 0x0, 0x8d, 0xfc, 0x40, 0x0, 0x0, 0x29, 0xf3,
- 0x2d, 0x40, 0x0, 0xf6, 0xc, 0xd5, 0x49, 0xf2,
- 0x1, 0x9e, 0xfc, 0x40,
-
- /* U+74 "t" */
- 0x6, 0xf1, 0x0, 0x6f, 0x10, 0xef, 0xff, 0xa2,
- 0x7f, 0x31, 0x6, 0xf1, 0x0, 0x6f, 0x10, 0x6,
- 0xf1, 0x0, 0x6f, 0x10, 0x6, 0xf1, 0x0, 0x4f,
- 0x73, 0x0, 0xaf, 0x90,
-
- /* U+75 "u" */
- 0xf8, 0x0, 0xb, 0xbf, 0x80, 0x0, 0xbb, 0xf8,
- 0x0, 0xb, 0xbf, 0x80, 0x0, 0xbb, 0xf8, 0x0,
- 0xb, 0xbe, 0x80, 0x0, 0xbb, 0xda, 0x0, 0xd,
- 0xb9, 0xf6, 0x5b, 0xfb, 0x1a, 0xfe, 0x9b, 0xb0,
-
- /* U+76 "v" */
- 0x9e, 0x0, 0x2, 0xf4, 0x3f, 0x30, 0x7, 0xe0,
- 0xe, 0x80, 0xc, 0x90, 0x8, 0xd0, 0x1f, 0x40,
- 0x3, 0xf2, 0x6e, 0x0, 0x0, 0xd7, 0xb9, 0x0,
- 0x0, 0x8d, 0xf4, 0x0, 0x0, 0x2f, 0xe0, 0x0,
- 0x0, 0xd, 0x90, 0x0,
-
- /* U+77 "w" */
- 0x8e, 0x0, 0xb, 0xb0, 0x0, 0xe8, 0x4f, 0x20,
- 0xf, 0xf0, 0x2, 0xf3, 0xf, 0x60, 0x5d, 0xe5,
- 0x6, 0xf0, 0xb, 0xa0, 0x99, 0xa9, 0xa, 0xb0,
- 0x6, 0xe0, 0xe4, 0x5e, 0xe, 0x60, 0x2, 0xf5,
- 0xf0, 0xf, 0x5f, 0x20, 0x0, 0xed, 0xb0, 0xb,
- 0xdd, 0x0, 0x0, 0x9f, 0x60, 0x6, 0xf9, 0x0,
- 0x0, 0x5f, 0x10, 0x2, 0xf5, 0x0,
-
- /* U+78 "x" */
- 0x4f, 0x50, 0x7, 0xf3, 0xa, 0xe0, 0x1f, 0x90,
- 0x1, 0xf8, 0xae, 0x0, 0x0, 0x6f, 0xf5, 0x0,
- 0x0, 0xf, 0xe0, 0x0, 0x0, 0x7f, 0xf6, 0x0,
- 0x2, 0xf7, 0x8e, 0x10, 0xb, 0xd0, 0xe, 0xa0,
- 0x5f, 0x40, 0x6, 0xf4,
-
- /* U+79 "y" */
- 0xae, 0x0, 0x5, 0xf3, 0x4f, 0x30, 0x9, 0xd0,
- 0xe, 0x80, 0xe, 0x80, 0x9, 0xd0, 0x3f, 0x20,
- 0x3, 0xf2, 0x8d, 0x0, 0x0, 0xd8, 0xc7, 0x0,
- 0x0, 0x8e, 0xf2, 0x0, 0x0, 0x2f, 0xc0, 0x0,
- 0x0, 0xe, 0x70, 0x0, 0x0, 0x3f, 0x10, 0x0,
- 0x15, 0xda, 0x0, 0x0, 0x5f, 0xb1, 0x0, 0x0,
-
- /* U+7A "z" */
- 0x3f, 0xff, 0xff, 0xf2, 0x4, 0x44, 0x4e, 0xd0,
- 0x0, 0x0, 0x8f, 0x20, 0x0, 0x3, 0xf7, 0x0,
- 0x0, 0xd, 0xb0, 0x0, 0x0, 0xae, 0x10, 0x0,
- 0x5, 0xf5, 0x0, 0x0, 0x1e, 0xc3, 0x33, 0x31,
- 0x5f, 0xff, 0xff, 0xf6,
-
- /* U+7B "{" */
- 0x0, 0x0, 0x30, 0x0, 0xa, 0xe1, 0x0, 0x6f,
- 0x10, 0x0, 0xbb, 0x0, 0x0, 0xd9, 0x0, 0x0,
- 0xd9, 0x0, 0x0, 0xe8, 0x0, 0x5, 0xf4, 0x0,
- 0x8f, 0xa0, 0x0, 0x18, 0xf2, 0x0, 0x0, 0xe8,
- 0x0, 0x0, 0xd9, 0x0, 0x0, 0xd9, 0x0, 0x0,
- 0xca, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x1c, 0xc1,
- 0x0, 0x0, 0x60,
-
- /* U+7C "|" */
- 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
- 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-
- /* U+7D "}" */
- 0x30, 0x0, 0x9, 0xe2, 0x0, 0xa, 0xd0, 0x0,
- 0x4f, 0x20, 0x3, 0xf3, 0x0, 0x3f, 0x30, 0x2,
- 0xf4, 0x0, 0xd, 0xb1, 0x0, 0x3f, 0xe0, 0xc,
- 0xd3, 0x2, 0xf5, 0x0, 0x3f, 0x30, 0x3, 0xf3,
- 0x0, 0x4f, 0x20, 0x9, 0xe0, 0x7, 0xf4, 0x0,
- 0x52, 0x0, 0x0,
-
- /* U+7E "~" */
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xd3, 0x0,
- 0x6c, 0xac, 0x5a, 0xf6, 0x2c, 0x8d, 0x50, 0x7,
- 0xff, 0xc1, 0x0, 0x0, 0x1, 0x30, 0x0,
-
- /* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xdc,
- 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xff,
- 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff,
- 0x0, 0x0, 0xff, 0xff, 0xea, 0x51, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x83, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x2b, 0xff, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0xdf, 0xff, 0xff,
- 0x2b, 0xff, 0xff, 0x0, 0x0, 0xdf, 0xff, 0xfd,
- 0xdf, 0xff, 0xff, 0x0, 0x0, 0x2b, 0xff, 0xb2,
- 0xdf, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2b, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F008 "" */
- 0xd0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xd,
- 0xff, 0xff, 0xc8, 0x88, 0x88, 0x8c, 0xff, 0xff,
- 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
- 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xf0, 0xf, 0xec, 0xcc, 0xcc, 0xce, 0xf0, 0xf,
- 0xf0, 0xf, 0xec, 0xcc, 0xcc, 0xce, 0xf0, 0xf,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
- 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
- 0xff, 0xff, 0xc8, 0x88, 0x88, 0x8c, 0xff, 0xff,
- 0xd0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xd,
-
- /* U+F00B "" */
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xb1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xc0,
- 0x1b, 0xa0, 0x0, 0x0, 0xb, 0xff, 0xfc, 0x0,
- 0xcf, 0xfb, 0x0, 0x0, 0xbf, 0xff, 0xc0, 0x0,
- 0xbf, 0xff, 0xb0, 0xb, 0xff, 0xfc, 0x0, 0x0,
- 0xc, 0xff, 0xfb, 0xbf, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0xcf, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F00D "" */
- 0x3, 0x0, 0x0, 0x0, 0x3, 0x8, 0xfc, 0x10,
- 0x0, 0x1c, 0xf8, 0xff, 0xfc, 0x10, 0x1c, 0xff,
- 0xf5, 0xff, 0xfc, 0x2c, 0xff, 0xf5, 0x5, 0xff,
- 0xff, 0xff, 0xf5, 0x0, 0x5, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x1d, 0xff, 0xfd, 0x10, 0x0, 0x1c,
- 0xff, 0xff, 0xfc, 0x10, 0x1c, 0xff, 0xf9, 0xff,
- 0xfc, 0x1c, 0xff, 0xf5, 0x5, 0xff, 0xfc, 0xdf,
- 0xf5, 0x0, 0x5, 0xff, 0xd1, 0xa4, 0x0, 0x0,
- 0x4, 0xa1,
-
- /* U+F011 "" */
- 0x0, 0x0, 0x0, 0x4f, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x10, 0x6f, 0xf1, 0x3, 0x10, 0x0,
- 0x0, 0x5f, 0xd0, 0x6f, 0xf1, 0x3f, 0xd1, 0x0,
- 0x3, 0xff, 0xf1, 0x6f, 0xf1, 0x5f, 0xfd, 0x0,
- 0xd, 0xff, 0x40, 0x6f, 0xf1, 0x9, 0xff, 0x70,
- 0x4f, 0xf7, 0x0, 0x6f, 0xf1, 0x0, 0xcf, 0xe0,
- 0x9f, 0xf0, 0x0, 0x6f, 0xf1, 0x0, 0x5f, 0xf3,
- 0xbf, 0xc0, 0x0, 0x6f, 0xf1, 0x0, 0x2f, 0xf5,
- 0xbf, 0xc0, 0x0, 0x4f, 0xe0, 0x0, 0x1f, 0xf6,
- 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf0,
- 0xf, 0xfe, 0x10, 0x0, 0x0, 0x5, 0xff, 0xa0,
- 0x6, 0xff, 0xd3, 0x0, 0x0, 0x7f, 0xff, 0x20,
- 0x0, 0x9f, 0xff, 0xda, 0xbe, 0xff, 0xf4, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xfd, 0x30, 0x0,
- 0x0, 0x0, 0x17, 0xbd, 0xca, 0x50, 0x0, 0x0,
-
- /* U+F013 "" */
- 0x0, 0x0, 0x0, 0x8b, 0xb8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x30, 0x6, 0xff, 0xff, 0x60, 0x3, 0x0,
- 0x4, 0xfd, 0xdf, 0xff, 0xff, 0xfd, 0xef, 0x40,
- 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x4f, 0xff, 0xff, 0xf9, 0x9f, 0xff, 0xff, 0xf4,
- 0x8, 0xff, 0xff, 0x20, 0x2, 0xff, 0xff, 0x80,
- 0x0, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0x0,
- 0x0, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0x0,
- 0x8, 0xff, 0xff, 0x20, 0x2, 0xff, 0xff, 0x80,
- 0x4f, 0xff, 0xff, 0xf9, 0x9f, 0xff, 0xff, 0xf4,
- 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x4, 0xfe, 0xdf, 0xff, 0xff, 0xfd, 0xdf, 0x40,
- 0x0, 0x30, 0x6, 0xff, 0xff, 0x60, 0x3, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8b, 0xb8, 0x0, 0x0, 0x0,
-
- /* U+F015 "" */
- 0x0, 0x0, 0x0, 0x3, 0xdd, 0x30, 0x3f, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf5, 0x4f,
- 0xf4, 0x0, 0x0, 0x0, 0x9, 0xff, 0x99, 0xff,
- 0xbf, 0xf4, 0x0, 0x0, 0x1, 0xbf, 0xf6, 0x22,
- 0x6f, 0xff, 0xf4, 0x0, 0x0, 0x2d, 0xfe, 0x35,
- 0xff, 0x53, 0xef, 0xf4, 0x0, 0x4, 0xff, 0xc1,
- 0x8f, 0xff, 0xf8, 0x2d, 0xfe, 0x40, 0x7f, 0xfa,
- 0x1a, 0xff, 0xff, 0xff, 0xa1, 0xaf, 0xf7, 0xcf,
- 0x82, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x28, 0xfc,
- 0x14, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x41, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf9, 0x0, 0x8f,
- 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf8, 0x0,
- 0x8f, 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf8,
- 0x0, 0x8f, 0xff, 0xf0, 0x0, 0x0, 0xe, 0xff,
- 0xf6, 0x0, 0x6f, 0xff, 0xe0, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xfc, 0x1b, 0xb1, 0xcf, 0xff, 0xfd,
- 0xff, 0xff, 0xff, 0xc2, 0x2c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0xff,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F01C "" */
- 0x0, 0x4, 0xef, 0xff, 0xff, 0xff, 0xfe, 0x40,
- 0x0, 0x0, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe1, 0x0, 0x0, 0xaf, 0xb0, 0x0, 0x0, 0x0,
- 0xb, 0xfa, 0x0, 0x5, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x50, 0x1e, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xe1, 0xaf, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xfa, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x6, 0xbd, 0xda, 0x50, 0x2, 0xff,
- 0x0, 0x5, 0xef, 0xff, 0xff, 0xfe, 0x42, 0xff,
- 0x0, 0x7f, 0xff, 0xa7, 0x7b, 0xff, 0xf9, 0xff,
- 0x5, 0xff, 0xc1, 0x0, 0x0, 0x2c, 0xff, 0xff,
- 0xe, 0xfc, 0x0, 0x0, 0x2, 0x22, 0xdf, 0xff,
- 0x5f, 0xf2, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0x8f, 0xb0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0xb, 0xf8,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x2f, 0xf4,
- 0xff, 0xfd, 0x22, 0x20, 0x0, 0x0, 0xcf, 0xe0,
- 0xff, 0xff, 0xc2, 0x0, 0x0, 0x2c, 0xff, 0x40,
- 0xff, 0x9f, 0xff, 0xb7, 0x6a, 0xff, 0xf7, 0x0,
- 0xff, 0x24, 0xdf, 0xff, 0xff, 0xfe, 0x50, 0x0,
- 0xff, 0x20, 0x5, 0xac, 0xdb, 0x60, 0x0, 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d,
- 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x8f, 0xff,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0x1, 0x50, 0xff, 0xff,
- 0xff, 0xff, 0x6, 0xf7, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xbe, 0xff, 0xff, 0xff, 0xff, 0x0, 0xae,
- 0xff, 0xff, 0xff, 0xff, 0x5, 0xf8, 0xdf, 0xff,
- 0xff, 0xff, 0x2, 0x60, 0x0, 0x0, 0x9f, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xd2, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0,
- 0x3, 0xee, 0x10, 0x0, 0x0, 0x8, 0xff, 0x0,
- 0xa, 0xb1, 0x2f, 0xb0, 0x0, 0x0, 0x8f, 0xff,
- 0x0, 0x5, 0xfc, 0x7, 0xf4, 0xdf, 0xff, 0xff,
- 0xff, 0x2, 0x50, 0x5f, 0x60, 0xf9, 0xff, 0xff,
- 0xff, 0xff, 0x6, 0xf7, 0xd, 0xc0, 0xbd, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xae, 0x9, 0xf0, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xae, 0x9, 0xf0,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0x6, 0xf7, 0xd,
- 0xc0, 0xad, 0xdf, 0xff, 0xff, 0xff, 0x2, 0x50,
- 0x5f, 0x60, 0xe9, 0x0, 0x0, 0x8f, 0xff, 0x0,
- 0x5, 0xfc, 0x6, 0xf4, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0xa, 0xb1, 0x2f, 0xb0, 0x0, 0x0, 0x0,
- 0x8d, 0x0, 0x0, 0x2, 0xee, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xd2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x10, 0x0,
-
- /* U+F03E "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x20, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0xc, 0xff, 0xff, 0xee, 0xff, 0xff,
- 0xff, 0x20, 0x2f, 0xff, 0xfe, 0x22, 0xef, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xe2, 0x0, 0x2e, 0xff,
- 0xff, 0xfe, 0x4e, 0xfe, 0x20, 0x0, 0x2, 0xff,
- 0xff, 0xe2, 0x2, 0xc2, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
-
- /* U+F048 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30, 0x0,
- 0x1, 0xcc, 0xff, 0x40, 0x0, 0x2d, 0xff, 0xff,
- 0x40, 0x3, 0xef, 0xff, 0xff, 0x40, 0x3f, 0xff,
- 0xff, 0xff, 0x44, 0xff, 0xff, 0xff, 0xff, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0x45, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0x4f, 0xff, 0xff, 0xff, 0x40, 0x3, 0xef,
- 0xff, 0xff, 0x40, 0x0, 0x2e, 0xff, 0xff, 0x30,
- 0x0, 0x1, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04B "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfd,
- 0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa,
- 0x10, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd5, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa, 0x10,
- 0x0, 0x0, 0xff, 0xff, 0xfd, 0x40, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x8e, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
- 0xff, 0xff, 0x7f, 0xff, 0xf7, 0x0, 0x7f, 0xff,
- 0xf7,
-
- /* U+F04D "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8,
-
- /* U+F051 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x10, 0x0,
- 0x3, 0xff, 0xff, 0xd2, 0x0, 0x4, 0xff, 0xff,
- 0xfe, 0x30, 0x4, 0xff, 0xff, 0xff, 0xf4, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x54, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0xff, 0xff, 0xff, 0xff, 0x44, 0xff, 0xff,
- 0xff, 0xf3, 0x4, 0xff, 0xff, 0xfe, 0x30, 0x4,
- 0xff, 0xff, 0xd2, 0x0, 0x4, 0xff, 0xcc, 0x10,
- 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x2d, 0xd2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x1d, 0xff, 0xff, 0xd1, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x1a, 0x40, 0x0, 0x0, 0x1,
- 0xdf, 0xf0, 0x0, 0x0, 0x1d, 0xff, 0xa0, 0x0,
- 0x1, 0xdf, 0xfa, 0x0, 0x0, 0x1d, 0xff, 0xa0,
- 0x0, 0x1, 0xdf, 0xfa, 0x0, 0x0, 0xc, 0xff,
- 0xa0, 0x0, 0x0, 0xd, 0xff, 0x80, 0x0, 0x0,
- 0x1, 0xdf, 0xf8, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0x80, 0x0, 0x0, 0x1, 0xdf, 0xf8, 0x0, 0x0,
- 0x0, 0x1d, 0xff, 0x80, 0x0, 0x0, 0x1, 0xdf,
- 0xf0, 0x0, 0x0, 0x0, 0x1b, 0x50,
-
- /* U+F054 "" */
- 0x4, 0xa1, 0x0, 0x0, 0x0, 0xf, 0xfd, 0x10,
- 0x0, 0x0, 0xa, 0xff, 0xd1, 0x0, 0x0, 0x0,
- 0xaf, 0xfd, 0x10, 0x0, 0x0, 0xa, 0xff, 0xd1,
- 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x10, 0x0, 0x0,
- 0xa, 0xff, 0xc0, 0x0, 0x0, 0x8, 0xff, 0xd0,
- 0x0, 0x0, 0x8f, 0xfd, 0x10, 0x0, 0x8, 0xff,
- 0xd1, 0x0, 0x0, 0x8f, 0xfd, 0x10, 0x0, 0x8,
- 0xff, 0xd1, 0x0, 0x0, 0xf, 0xfd, 0x10, 0x0,
- 0x0, 0x5, 0xb1, 0x0, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x80, 0x0, 0x0, 0x48, 0x88, 0x8c, 0xff, 0xc8,
- 0x88, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x48, 0x88, 0x8c, 0xff, 0xc8, 0x88, 0x84, 0x0,
- 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x40,
- 0x0, 0x0,
-
- /* U+F068 "" */
- 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xb7,
-
- /* U+F06E "" */
- 0x0, 0x0, 0x5, 0xad, 0xff, 0xda, 0x50, 0x0,
- 0x0, 0x0, 0x4, 0xdf, 0xfc, 0x88, 0xcf, 0xfd,
- 0x40, 0x0, 0x0, 0x7f, 0xfe, 0x40, 0x0, 0x4,
- 0xef, 0xf7, 0x0, 0x7, 0xff, 0xf4, 0x0, 0x9e,
- 0x80, 0x4f, 0xff, 0x70, 0x4f, 0xff, 0xc0, 0x0,
- 0xaf, 0xf8, 0xc, 0xff, 0xf4, 0xdf, 0xff, 0x80,
- 0x9a, 0xff, 0xfe, 0x8, 0xff, 0xfd, 0xdf, 0xff,
- 0x80, 0xef, 0xff, 0xfe, 0x8, 0xff, 0xfd, 0x4f,
- 0xff, 0xc0, 0x8f, 0xff, 0xf8, 0xc, 0xff, 0xf4,
- 0x7, 0xff, 0xf4, 0x8, 0xee, 0x80, 0x4f, 0xff,
- 0x70, 0x0, 0x7f, 0xfe, 0x40, 0x0, 0x4, 0xef,
- 0xf8, 0x0, 0x0, 0x4, 0xdf, 0xfc, 0x88, 0xcf,
- 0xfd, 0x40, 0x0, 0x0, 0x0, 0x5, 0xad, 0xff,
- 0xda, 0x50, 0x0, 0x0,
-
- /* U+F070 "" */
- 0x8c, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0xe4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1b, 0xff, 0x80, 0x49,
- 0xdf, 0xfd, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0xff, 0xff, 0xd8, 0x8c, 0xff, 0xd4, 0x0, 0x0,
- 0x0, 0x4, 0xef, 0xf8, 0x0, 0x0, 0x4e, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x1c, 0xff, 0x69, 0xe8,
- 0x4, 0xff, 0xf7, 0x0, 0x4, 0xe3, 0x0, 0x9f,
- 0xfe, 0xff, 0x80, 0xcf, 0xff, 0x40, 0xd, 0xff,
- 0x70, 0x5, 0xff, 0xff, 0xe0, 0x8f, 0xff, 0xd0,
- 0xd, 0xff, 0xf7, 0x0, 0x2d, 0xff, 0xe0, 0x8f,
- 0xff, 0xd0, 0x4, 0xff, 0xfc, 0x0, 0x0, 0xaf,
- 0xf8, 0xcf, 0xff, 0x30, 0x0, 0x7f, 0xff, 0x40,
- 0x0, 0x6, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x8,
- 0xff, 0xf4, 0x0, 0x0, 0x3e, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0x4d, 0xff, 0xc8, 0x82, 0x1, 0xbf,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xdf, 0xfc,
- 0x10, 0x8, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4e, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xc8,
-
- /* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x2d, 0xd2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xd8, 0x8d,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0xa0, 0xa, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xb0, 0xb, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xc0, 0xc, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xd0, 0xd,
- 0xff, 0xff, 0x50, 0x0, 0x0, 0xe, 0xff, 0xff,
- 0xf9, 0x9f, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xe2, 0x2e, 0xff, 0xff, 0xf8, 0x0,
- 0x2, 0xff, 0xff, 0xff, 0x90, 0x9, 0xff, 0xff,
- 0xff, 0x10, 0xa, 0xff, 0xff, 0xff, 0xe3, 0x3e,
- 0xff, 0xff, 0xff, 0xa0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
-
- /* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80,
- 0xff, 0xff, 0x70, 0x0, 0x7, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xf6, 0x0, 0x6f, 0xff, 0xff, 0xfd,
- 0x78, 0x8e, 0xff, 0x15, 0xff, 0xe8, 0xff, 0xe2,
- 0x0, 0x2, 0xe5, 0x4f, 0xfe, 0x20, 0xfe, 0x20,
- 0x0, 0x0, 0x13, 0xff, 0xf3, 0x0, 0x52, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0x31, 0x0, 0x52, 0x0,
- 0x0, 0x2, 0xef, 0xf4, 0x5e, 0x20, 0xfe, 0x20,
- 0x78, 0x8e, 0xff, 0x51, 0xff, 0xe8, 0xff, 0xe2,
- 0xff, 0xff, 0xf6, 0x0, 0x6f, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0x70, 0x0, 0x7, 0xff, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x1d, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x1, 0xdf,
- 0xff, 0xfd, 0x10, 0x0, 0x0, 0x1d, 0xff, 0x99,
- 0xff, 0xd1, 0x0, 0x1, 0xdf, 0xf9, 0x0, 0x9f,
- 0xfd, 0x10, 0x1d, 0xff, 0x90, 0x0, 0x9, 0xff,
- 0xd1, 0xbf, 0xf9, 0x0, 0x0, 0x0, 0x9f, 0xfb,
- 0x5f, 0x90, 0x0, 0x0, 0x0, 0x9, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F078 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0x90, 0x0, 0x0, 0x0, 0x9, 0xf5, 0xbf, 0xf9,
- 0x0, 0x0, 0x0, 0x9f, 0xfb, 0x1d, 0xff, 0x90,
- 0x0, 0x9, 0xff, 0xd1, 0x1, 0xdf, 0xf9, 0x0,
- 0x9f, 0xfd, 0x10, 0x0, 0x1d, 0xff, 0x99, 0xff,
- 0xd1, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xfd, 0x10,
- 0x0, 0x0, 0x0, 0x1d, 0xff, 0xd1, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F079 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1d, 0xd1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xfd, 0x10,
- 0xef, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x1d, 0xff,
- 0xff, 0xd1, 0xaf, 0xff, 0xff, 0xff, 0xf0, 0x0,
- 0xcf, 0xcf, 0xfc, 0xfc, 0x0, 0x0, 0x0, 0xf,
- 0xf0, 0x0, 0x6b, 0x1f, 0xf1, 0xb6, 0x0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x6b, 0x1f,
- 0xf1, 0xb6, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
- 0xcf, 0xcf, 0xfc, 0xfc, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xfa, 0x1d, 0xff, 0xff, 0xd1, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xfe, 0x1, 0xdf, 0xfd, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d,
- 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F07B "" */
- 0x8f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xf0, 0xdf, 0xfd, 0xf, 0xff, 0xfd,
- 0xff, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0xff,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F095 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xea,
- 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xef, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0x30, 0x0, 0x0, 0x2,
- 0x0, 0x0, 0x4f, 0xff, 0x90, 0x0, 0x2, 0x8f,
- 0xf3, 0x0, 0x6f, 0xff, 0xd0, 0x0, 0xa, 0xff,
- 0xff, 0xe4, 0xbf, 0xff, 0xd1, 0x0, 0x0, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x0,
- 0x2, 0xff, 0xdb, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F0C4 "" */
- 0x8, 0xee, 0x80, 0x0, 0x0, 0x6, 0x61, 0x8,
- 0xff, 0xff, 0x80, 0x0, 0x2d, 0xff, 0xd0, 0xef,
- 0x33, 0xfe, 0x0, 0x2e, 0xff, 0xf3, 0xe, 0xf3,
- 0x3f, 0xe0, 0x2e, 0xff, 0xf3, 0x0, 0x8f, 0xff,
- 0xff, 0x6e, 0xff, 0xf3, 0x0, 0x0, 0x8e, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x8, 0xef, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x8, 0xff, 0xff, 0xf6, 0xef,
- 0xff, 0x30, 0x0, 0xef, 0x33, 0xfe, 0x2, 0xef,
- 0xff, 0x30, 0xe, 0xf3, 0x3f, 0xe0, 0x2, 0xef,
- 0xff, 0x30, 0x8f, 0xff, 0xf8, 0x0, 0x2, 0xdf,
- 0xfd, 0x0, 0x8e, 0xe8, 0x0, 0x0, 0x0, 0x66,
- 0x10,
-
- /* U+F0C5 "" */
- 0x0, 0x0, 0xdf, 0xff, 0xff, 0xd, 0x20, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xf, 0xe2, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xf, 0xfd, 0xdf, 0xf0, 0xff,
- 0xff, 0xff, 0x20, 0x0, 0xff, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xdf, 0xff,
- 0xff, 0xff, 0xfd, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
-
- /* U+F0C7 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0xff, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0xe2, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xfc, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x11, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x11, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8,
-
- /* U+F0E7 "" */
- 0x0, 0xdf, 0xff, 0xfd, 0x0, 0x0, 0x1, 0xff,
- 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf7,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xf2, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xd0, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xd0, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xa0, 0xe, 0xff, 0xff, 0xff, 0xff, 0x20,
- 0xd, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xe, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0x2f, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
-
- /* U+F0EA "" */
- 0x0, 0x4, 0xee, 0x40, 0x0, 0x0, 0x0, 0xdf,
- 0xff, 0x99, 0xff, 0xfd, 0x0, 0x0, 0xff, 0xff,
- 0x99, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xd, 0xff, 0xff,
- 0xd, 0x20, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf,
- 0xe2, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf, 0xfd,
- 0xff, 0xff, 0xf, 0xff, 0xff, 0x20, 0x0, 0xff,
- 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0, 0x1,
- 0xbf, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x1e, 0xff,
- 0xff, 0xff, 0xe1, 0x0, 0x0, 0x9f, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xfd, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe1, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xe0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xee, 0x40, 0x0, 0x0,
-
- /* U+F11C "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x0, 0xf0,
- 0xf, 0x0, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x0,
- 0xf0, 0xf, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x8,
- 0x80, 0x88, 0x8, 0x80, 0x8f, 0xff, 0xff, 0xf8,
- 0x8, 0x80, 0x88, 0x8, 0x80, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x0,
- 0xff, 0xff, 0x0, 0xf0, 0x0, 0x0, 0x0, 0xf,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xaf, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xdf, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x17,
- 0xef, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x18,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x2a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xf2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F15B "" */
- 0xdf, 0xff, 0xff, 0xf0, 0xd2, 0x0, 0xff, 0xff,
- 0xff, 0xf0, 0xfe, 0x20, 0xff, 0xff, 0xff, 0xf0,
- 0xff, 0xe2, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xfd,
- 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xfe,
- 0xc9, 0x40, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x70, 0x0, 0x4, 0xdf,
- 0xff, 0xfc, 0xa8, 0x8a, 0xcf, 0xff, 0xfd, 0x40,
- 0x6f, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x5d,
- 0xff, 0xf6, 0xcf, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xfc, 0x1a, 0x30, 0x0, 0x5a,
- 0xdf, 0xfd, 0xa5, 0x0, 0x3, 0xa1, 0x0, 0x0,
- 0x4d, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0xfe, 0xa8, 0x8a, 0xef, 0xff,
- 0x50, 0x0, 0x0, 0x1, 0xdf, 0x70, 0x0, 0x0,
- 0x7, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x12, 0x0,
- 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4e, 0xe4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4e, 0xe4, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F240 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff,
- 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F241 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff,
- 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0,
- 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F242 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F243 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xf, 0xff, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F244 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80,
-
- /* U+F287 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xb9, 0x29, 0xfe, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x10, 0x2,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xdf, 0x80, 0xa,
- 0x90, 0x0, 0x0, 0x0, 0x3, 0x70, 0x0, 0xdf,
- 0xff, 0x77, 0xf7, 0x55, 0x55, 0x55, 0x55, 0x8f,
- 0xd3, 0xf, 0xff, 0xfd, 0xcc, 0xdf, 0xdc, 0xcc,
- 0xcc, 0xcd, 0xff, 0xb0, 0x8f, 0xfe, 0x10, 0x0,
- 0xaa, 0x0, 0x0, 0x0, 0x4d, 0x40, 0x0, 0x46,
- 0x10, 0x0, 0x1, 0xf2, 0x2, 0x33, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xb1, 0xcf,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x22,
- 0x0, 0x0, 0x0,
-
- /* U+F293 "" */
- 0x0, 0x18, 0xdf, 0xfd, 0x92, 0x0, 0x2, 0xef,
- 0xfb, 0xef, 0xff, 0x30, 0xd, 0xff, 0xfa, 0x2e,
- 0xff, 0xe0, 0x4f, 0xff, 0xfa, 0x3, 0xff, 0xf5,
- 0x9f, 0xfa, 0xfa, 0x35, 0x4f, 0xfa, 0xcf, 0xc0,
- 0x8a, 0x3d, 0xb, 0xfd, 0xef, 0xfb, 0x3, 0x12,
- 0x8f, 0xfe, 0xff, 0xff, 0xb0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0xd1, 0x8, 0xff, 0xff, 0xef, 0xfd,
- 0x11, 0x10, 0x9f, 0xff, 0xdf, 0xd1, 0x59, 0x3b,
- 0xb, 0xfd, 0xaf, 0xd7, 0xfa, 0x38, 0x1d, 0xfb,
- 0x5f, 0xff, 0xfa, 0x1, 0xdf, 0xf7, 0xd, 0xff,
- 0xfa, 0x1d, 0xff, 0xf1, 0x3, 0xef, 0xfc, 0xdf,
- 0xff, 0x50, 0x0, 0x18, 0xdf, 0xfe, 0xa3, 0x0,
-
- /* U+F2ED "" */
- 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0xf, 0xf9, 0x9f, 0x99, 0xf9, 0x9f,
- 0xf0, 0xf, 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0,
- 0xf, 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf,
- 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8,
- 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8, 0x8f,
- 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8, 0x8f, 0x88,
- 0xf8, 0x8f, 0xf0, 0xf, 0xf9, 0x9f, 0x99, 0xf9,
- 0x9f, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
-
- /* U+F304 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x8a, 0x1d,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xfa,
- 0x1d, 0xff, 0x70, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xfa, 0x1d, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xdf,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xe,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xde, 0xdb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F55A "" */
- 0x0, 0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe4, 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1d, 0xff, 0xff,
- 0xfa, 0xef, 0xfe, 0xaf, 0xff, 0xff, 0x1, 0xdf,
- 0xff, 0xff, 0xa0, 0x2e, 0xe2, 0xa, 0xff, 0xff,
- 0x1d, 0xff, 0xff, 0xff, 0xe2, 0x2, 0x20, 0x2e,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xfe, 0x20,
- 0x2, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xfe, 0x20, 0x2, 0xef, 0xff, 0xff, 0x1d, 0xff,
- 0xff, 0xff, 0xe2, 0x2, 0x20, 0x2e, 0xff, 0xff,
- 0x1, 0xdf, 0xff, 0xff, 0xa0, 0x2e, 0xe2, 0xa,
- 0xff, 0xff, 0x0, 0x1d, 0xff, 0xff, 0xfa, 0xef,
- 0xfe, 0xaf, 0xff, 0xff, 0x0, 0x1, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0,
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4,
-
- /* U+F7C2 "" */
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xfe, 0x8, 0xf8, 0xf, 0xb,
- 0x40, 0xff, 0x8f, 0xf8, 0xf, 0xb, 0x40, 0xff,
- 0xff, 0xf8, 0xf, 0xb, 0x40, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xe4,
-
- /* U+F8A2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xe0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x2,
- 0xef, 0x10, 0x0, 0xbf, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf1, 0x0, 0xcf, 0xf1, 0x0, 0x0, 0x0,
- 0x7, 0xff, 0x11, 0xcf, 0xff, 0x77, 0x77, 0x77,
- 0x77, 0xbf, 0xf1, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 63, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 66, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 12, .adv_w = 82, .box_w = 4, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
- {.bitmap_index = 22, .adv_w = 159, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 82, .adv_w = 144, .box_w = 9, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 154, .adv_w = 188, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 226, .adv_w = 159, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 286, .adv_w = 45, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 290, .adv_w = 88, .box_w = 5, .box_h = 18, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 335, .adv_w = 89, .box_w = 5, .box_h = 18, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 380, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 405, .adv_w = 145, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 446, .adv_w = 50, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 454, .adv_w = 71, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 4},
- {.bitmap_index = 462, .adv_w = 67, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 464, .adv_w = 106, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 510, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 564, .adv_w = 144, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 594, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 648, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 696, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 750, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 798, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 846, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 900, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 954, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1002, .adv_w = 62, .box_w = 2, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1011, .adv_w = 54, .box_w = 3, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 1029, .adv_w = 130, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 1057, .adv_w = 141, .box_w = 7, .box_h = 6, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 1078, .adv_w = 134, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 1106, .adv_w = 121, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1148, .adv_w = 230, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 1253, .adv_w = 167, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1319, .adv_w = 159, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1373, .adv_w = 167, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1433, .adv_w = 168, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1487, .adv_w = 146, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1535, .adv_w = 142, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1583, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1643, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1703, .adv_w = 70, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1715, .adv_w = 141, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1763, .adv_w = 161, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1823, .adv_w = 138, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1871, .adv_w = 224, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1943, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2003, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2069, .adv_w = 162, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2123, .adv_w = 176, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2200, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2254, .adv_w = 152, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2308, .adv_w = 153, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2368, .adv_w = 166, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2422, .adv_w = 163, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2482, .adv_w = 227, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2566, .adv_w = 161, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2626, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2686, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2740, .adv_w = 68, .box_w = 4, .box_h = 18, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 2776, .adv_w = 105, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2822, .adv_w = 68, .box_w = 4, .box_h = 18, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2858, .adv_w = 107, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 2879, .adv_w = 116, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2891, .adv_w = 79, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 10},
- {.bitmap_index = 2897, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2933, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2981, .adv_w = 134, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3017, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3065, .adv_w = 136, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3101, .adv_w = 89, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3143, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3191, .adv_w = 141, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3233, .adv_w = 62, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3245, .adv_w = 61, .box_w = 4, .box_h = 15, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 3275, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3323, .adv_w = 62, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3335, .adv_w = 224, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3389, .adv_w = 141, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3421, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3462, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 3510, .adv_w = 146, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3558, .adv_w = 87, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3581, .adv_w = 132, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3617, .adv_w = 84, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3645, .adv_w = 141, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3677, .adv_w = 124, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3713, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3767, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3803, .adv_w = 121, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3851, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3887, .adv_w = 87, .box_w = 6, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3938, .adv_w = 62, .box_w = 2, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 3952, .adv_w = 87, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3995, .adv_w = 174, .box_w = 9, .box_h = 5, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 4018, .adv_w = 256, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4154, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4250, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4362, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4458, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4524, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4652, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4780, .adv_w = 288, .box_w = 18, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4906, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5034, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5142, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5270, .adv_w = 128, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5326, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5410, .adv_w = 288, .box_w = 18, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5554, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5650, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 5730, .adv_w = 224, .box_w = 14, .box_h = 18, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 5856, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5961, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6059, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 6139, .adv_w = 224, .box_w = 16, .box_h = 14, .ofs_x = -1, .ofs_y = -1},
- {.bitmap_index = 6251, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6321, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6391, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6489, .adv_w = 224, .box_w = 14, .box_h = 4, .ofs_x = 0, .ofs_y = 4},
- {.bitmap_index = 6517, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6625, .adv_w = 320, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6785, .adv_w = 288, .box_w = 20, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 6945, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7073, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 7143, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 7213, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 7353, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7449, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7577, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 7722, .adv_w = 224, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 7827, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7939, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 8037, .adv_w = 160, .box_w = 12, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 8133, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8245, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8357, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8465, .adv_w = 256, .box_w = 18, .box_h = 18, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 8627, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8723, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 8873, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 8973, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 9073, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 9173, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 9273, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 9373, .adv_w = 320, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 9520, .adv_w = 224, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9616, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9728, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 9873, .adv_w = 320, .box_w = 20, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9993, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10089, .adv_w = 258, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 1}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -13, 0, 0, 0,
- 0, 0, 0, 0, -15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -6, -7, 0, -2, -8, 0, -10, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 2, 0,
- 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -21, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -28, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -15, 0, 0, 0, 0, 0, 0, -8,
- 0, -1, 0, 0, -16, -2, -11, -9,
- 0, -12, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, -2, -1, -6, -4, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -3,
- 0, -3, 0, 0, -7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -4, 0, 0, 0, 0, 0,
- 0, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, -13, 0, 0,
- 0, -3, 0, 0, 0, -3, 0, -3,
- 0, -3, -5, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0,
- 0, -2, -2, 0, -2, 0, 0, 0,
- -2, -3, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, -29, 0, 0, 0, -21,
- 0, -33, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, -4, -3, 0, 0, -3,
- -3, 0, 0, -3, -3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, -4, 0,
- 0, 0, 2, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -8, 0, 0,
- 0, -4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -3, 0, -3,
- -3, 0, 0, 0, -3, -5, -8, 0,
- 0, 0, 0, -42, 0, 0, 0, 0,
- 0, 0, 0, 2, -8, 0, 0, -34,
- -7, -22, -18, 0, -30, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -5,
- -17, -11, 0, 0, 0, 0, 0, 0,
- 0, 0, -40, 0, 0, 0, -17, 0,
- -25, 0, 0, 0, 0, 0, -4, 0,
- -3, 0, -1, -2, 0, 0, -2, 0,
- 0, 2, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -5, 0, -3,
- -2, 0, -4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -10, 0, -2, 0, 0, -6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -5, 0,
- 0, 0, 0, -27, -29, 0, 0, -10,
- -3, -30, -2, 2, 0, 2, 2, 0,
- 2, 0, 0, -14, -12, 0, -14, -12,
- -9, -14, 0, -12, -9, -7, -10, -7,
- 0, 0, 0, 0, 3, 0, -28, -5,
- 0, 0, -9, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, -6, -5,
- 0, 0, -6, -4, 0, 0, -3, -1,
- 0, 0, 0, 2, 0, 0, 0, 2,
- 0, -15, -7, 0, 0, -5, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0,
- 2, -4, -4, 0, 0, -4, -3, 0,
- 0, -2, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, -6, 0, 0,
- 0, -3, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, -3, 0, 0,
- -3, 0, 0, 0, -3, -4, 0, 0,
- 0, 0, 0, 0, -4, 3, -6, -26,
- -6, 0, 0, -12, -4, -12, -2, 2,
- -12, 2, 2, 2, 2, 0, 2, -9,
- -8, -3, -5, -8, -5, -7, -3, -5,
- -2, 0, -3, -4, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, -3,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -3, 0, 0, -3, 0,
- 0, 0, -2, -3, -3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, -2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -8, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -2, 0, 0, 0, 0, 0, -4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -1, 0, -2, -2,
- 0, 0, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -2, 0, 0, 0, 0, 0,
- 2, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, -3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, -13, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -2, 0,
- -3, -2, 0, 0, 2, 0, 0, 0,
- -15, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -5, -2, 2, 0, -2, 0, 0, 6,
- 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, -13, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -2, -2,
- 2, 0, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -15, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- -2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 4,
- .kern_classes = 1,
- .bitmap_format = 0
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_16 = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 19, /*The maximum line height required by the font*/
- .base_line = 4, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_NONE,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_16*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_22.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_22.c
deleted file mode 100644
index f7bdac05..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_22.c
+++ /dev/null
@@ -1,3224 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 22 px
- * Bpp: 4
- * Opts: --no-compress --no-prefilter --bpp 4 --size 22 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_22.c --force-fast-kern-format
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_22
-#define LV_FONT_ROBOTO_22 1
-#endif
-
-#if LV_FONT_ROBOTO_22
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0x3f, 0xd0, 0x2f, 0xd0, 0x2f, 0xd0, 0x2f, 0xd0,
- 0x2f, 0xd0, 0x2f, 0xc0, 0x2f, 0xc0, 0x1f, 0xc0,
- 0x1f, 0xc0, 0x1f, 0xc0, 0x1f, 0xb0, 0x6, 0x40,
- 0x0, 0x0, 0x3, 0x20, 0x2f, 0xf0, 0x1e, 0xc0,
-
- /* U+22 "\"" */
- 0x8f, 0xa, 0xe8, 0xf0, 0xad, 0x8e, 0xa, 0xc8,
- 0xc0, 0xab, 0x8b, 0xa, 0x93, 0x40, 0x33,
-
- /* U+23 "#" */
- 0x0, 0x0, 0x9, 0xe0, 0x3, 0xf5, 0x0, 0x0,
- 0x0, 0xdb, 0x0, 0x7f, 0x10, 0x0, 0x0, 0xf,
- 0x80, 0xa, 0xe0, 0x0, 0x0, 0x4, 0xf4, 0x0,
- 0xea, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb0, 0x38, 0x8d, 0xe8, 0x8a, 0xf9, 0x85, 0x0,
- 0x0, 0xdb, 0x0, 0x7f, 0x10, 0x0, 0x0, 0xf,
- 0x80, 0xa, 0xe0, 0x0, 0x0, 0x2, 0xf5, 0x0,
- 0xcb, 0x0, 0x0, 0x22, 0x6f, 0x52, 0x2f, 0xa2,
- 0x20, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1,
- 0x55, 0xdd, 0x55, 0x9f, 0x75, 0x40, 0x0, 0xe,
- 0xa0, 0x8, 0xf0, 0x0, 0x0, 0x1, 0xf7, 0x0,
- 0xbd, 0x0, 0x0, 0x0, 0x4f, 0x40, 0xe, 0xa0,
- 0x0, 0x0, 0x7, 0xf1, 0x1, 0xf7, 0x0, 0x0,
-
- /* U+24 "$" */
- 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x6,
- 0xf3, 0x0, 0x0, 0x0, 0x4, 0xbf, 0xa3, 0x0,
- 0x0, 0x1b, 0xff, 0xff, 0xf9, 0x0, 0x9, 0xfc,
- 0x42, 0x6f, 0xf5, 0x1, 0xff, 0x10, 0x0, 0x6f,
- 0xc0, 0x3f, 0xc0, 0x0, 0x1, 0xff, 0x2, 0xfe,
- 0x0, 0x0, 0x8, 0x80, 0xe, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfd, 0x60, 0x0, 0x0, 0x0,
- 0x4e, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x5, 0xbf,
- 0xfd, 0x10, 0x0, 0x0, 0x0, 0x3d, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x2f, 0xf1, 0xcf, 0x30, 0x0,
- 0x0, 0xdf, 0x2a, 0xf7, 0x0, 0x0, 0xf, 0xf1,
- 0x4f, 0xf4, 0x0, 0x1a, 0xfc, 0x0, 0x9f, 0xfe,
- 0xdf, 0xfe, 0x20, 0x0, 0x5b, 0xff, 0xc8, 0x10,
- 0x0, 0x0, 0x8, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x0, 0x0, 0x0,
-
- /* U+25 "%" */
- 0x6, 0xef, 0xc3, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xf9, 0x5c, 0xe1, 0x0, 0x0, 0x0, 0x0, 0xcc,
- 0x0, 0x1f, 0x60, 0x2, 0xf3, 0x0, 0xd, 0x90,
- 0x0, 0xf8, 0x0, 0xcc, 0x0, 0x0, 0xcb, 0x0,
- 0xf, 0x70, 0x6f, 0x20, 0x0, 0x8, 0xf5, 0x19,
- 0xf2, 0x1f, 0x80, 0x0, 0x0, 0xa, 0xff, 0xf6,
- 0xa, 0xd0, 0x0, 0x0, 0x0, 0x1, 0x30, 0x4,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x11,
- 0xbf, 0xfa, 0x10, 0x0, 0x0, 0x3f, 0x60, 0xce,
- 0x56, 0xeb, 0x0, 0x0, 0xc, 0xc0, 0x2f, 0x50,
- 0x7, 0xf0, 0x0, 0x7, 0xf2, 0x3, 0xf3, 0x0,
- 0x5f, 0x20, 0x1, 0xf8, 0x0, 0x2f, 0x50, 0x7,
- 0xf0, 0x0, 0x6, 0x0, 0x0, 0xce, 0x67, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xae, 0xe9, 0x0,
-
- /* U+26 "&" */
- 0x0, 0x19, 0xef, 0xc4, 0x0, 0x0, 0x0, 0xd,
- 0xfd, 0xbf, 0xf5, 0x0, 0x0, 0x7, 0xfb, 0x0,
- 0x2f, 0xd0, 0x0, 0x0, 0x9f, 0x60, 0x0, 0xef,
- 0x0, 0x0, 0x8, 0xf7, 0x0, 0x3f, 0xb0, 0x0,
- 0x0, 0x3f, 0xe1, 0x4e, 0xf3, 0x0, 0x0, 0x0,
- 0x9f, 0xdf, 0xe3, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xe1, 0x0, 0x0, 0x0, 0x4, 0xff, 0xef, 0x60,
- 0x0, 0x53, 0x3, 0xff, 0x53, 0xff, 0x40, 0x3f,
- 0xa0, 0xbf, 0x70, 0x5, 0xfe, 0x25, 0xf8, 0xe,
- 0xf1, 0x0, 0x8, 0xfd, 0xbf, 0x40, 0xdf, 0x30,
- 0x0, 0xa, 0xff, 0xd0, 0x8, 0xfa, 0x0, 0x0,
- 0x5f, 0xf9, 0x0, 0xc, 0xfd, 0x87, 0xbf, 0xff,
- 0xf5, 0x0, 0x6, 0xcf, 0xfd, 0x92, 0x3f, 0xf3,
-
- /* U+27 "'" */
- 0xeb, 0xeb, 0xea, 0xe9, 0xe8, 0x31,
-
- /* U+28 "(" */
- 0x0, 0x0, 0x18, 0x0, 0x0, 0x1d, 0xe0, 0x0,
- 0xc, 0xe2, 0x0, 0x7, 0xf5, 0x0, 0x0, 0xfd,
- 0x0, 0x0, 0x6f, 0x60, 0x0, 0xc, 0xf1, 0x0,
- 0x0, 0xfd, 0x0, 0x0, 0x4f, 0xa0, 0x0, 0x6,
- 0xf8, 0x0, 0x0, 0x7f, 0x70, 0x0, 0x8, 0xf6,
- 0x0, 0x0, 0x8f, 0x70, 0x0, 0x6, 0xf8, 0x0,
- 0x0, 0x5f, 0x90, 0x0, 0x1, 0xfc, 0x0, 0x0,
- 0xd, 0xf0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x1,
- 0xfb, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, 0x1e,
- 0xd0, 0x0, 0x0, 0x3f, 0xa0, 0x0, 0x0, 0x3c,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+29 ")" */
- 0x45, 0x0, 0x0, 0x5, 0xf7, 0x0, 0x0, 0x8,
- 0xf4, 0x0, 0x0, 0xd, 0xe0, 0x0, 0x0, 0x5f,
- 0x70, 0x0, 0x0, 0xee, 0x0, 0x0, 0x9, 0xf4,
- 0x0, 0x0, 0x5f, 0x80, 0x0, 0x2, 0xfc, 0x0,
- 0x0, 0xf, 0xe0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0xe, 0xf1, 0x0, 0x0, 0xff, 0x0, 0x0, 0xf,
- 0xf0, 0x0, 0x1, 0xfd, 0x0, 0x0, 0x4f, 0x90,
- 0x0, 0x8, 0xf5, 0x0, 0x0, 0xcf, 0x10, 0x0,
- 0x2f, 0x90, 0x0, 0xa, 0xf2, 0x0, 0x4, 0xf7,
- 0x0, 0x3, 0xfa, 0x0, 0x0, 0x69, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+2A "*" */
- 0x0, 0x0, 0xf9, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x23, 0x0, 0xf8, 0x0, 0x30, 0x8f,
- 0xd7, 0xfa, 0x9e, 0xe0, 0x38, 0xdf, 0xff, 0xfc,
- 0x70, 0x0, 0xb, 0xff, 0x20, 0x0, 0x0, 0x6f,
- 0x8f, 0xc0, 0x0, 0x2, 0xfc, 0x7, 0xf7, 0x0,
- 0x3, 0xd2, 0x0, 0xc8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+2B "+" */
- 0x0, 0x0, 0x6, 0x81, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0, 0x2e, 0xee,
- 0xef, 0xfe, 0xee, 0xe8, 0x2f, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
-
- /* U+2C "," */
- 0xa, 0xf5, 0xa, 0xf4, 0xb, 0xf3, 0x1f, 0xd0,
- 0x7f, 0x50, 0x5, 0x0,
-
- /* U+2D "-" */
- 0x6a, 0xaa, 0xa6, 0x9f, 0xff, 0xfa,
-
- /* U+2E "." */
- 0x5, 0x20, 0x5f, 0xe0, 0x3e, 0xb0,
-
- /* U+2F "/" */
- 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0, 0x0, 0xd,
- 0xd0, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x0, 0x0,
- 0xaf, 0x10, 0x0, 0x0, 0xf, 0xb0, 0x0, 0x0,
- 0x6, 0xf5, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0,
- 0x0, 0x2f, 0x80, 0x0, 0x0, 0x8, 0xf2, 0x0,
- 0x0, 0x0, 0xec, 0x0, 0x0, 0x0, 0x5f, 0x60,
- 0x0, 0x0, 0xb, 0xf0, 0x0, 0x0, 0x1, 0xfa,
- 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0, 0x0, 0xd,
- 0xd0, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x0, 0x0,
- 0x9f, 0x10, 0x0, 0x0, 0x0,
-
- /* U+30 "0" */
- 0x0, 0x4c, 0xff, 0xd7, 0x0, 0x0, 0x6f, 0xfc,
- 0xbe, 0xfb, 0x0, 0x1f, 0xf3, 0x0, 0xc, 0xf5,
- 0x6, 0xfa, 0x0, 0x0, 0x4f, 0xb0, 0x9f, 0x50,
- 0x0, 0x0, 0xfe, 0xb, 0xf4, 0x0, 0x0, 0xe,
- 0xf0, 0xcf, 0x30, 0x0, 0x0, 0xef, 0x1c, 0xf3,
- 0x0, 0x0, 0xe, 0xf1, 0xcf, 0x30, 0x0, 0x0,
- 0xef, 0x1b, 0xf3, 0x0, 0x0, 0xe, 0xf1, 0xbf,
- 0x40, 0x0, 0x0, 0xef, 0x9, 0xf6, 0x0, 0x0,
- 0xf, 0xe0, 0x5f, 0xa0, 0x0, 0x4, 0xfb, 0x0,
- 0xff, 0x40, 0x0, 0xdf, 0x50, 0x5, 0xff, 0xba,
- 0xef, 0xb0, 0x0, 0x4, 0xbf, 0xfd, 0x80, 0x0,
-
- /* U+31 "1" */
- 0x0, 0x0, 0x39, 0xc0, 0x17, 0xdf, 0xfd, 0x2f,
- 0xff, 0xbf, 0xd2, 0xc6, 0x2, 0xfd, 0x0, 0x0,
- 0x2f, 0xd0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f,
- 0xd0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0,
- 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0,
- 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2,
- 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2, 0xfd,
-
- /* U+32 "2" */
- 0x0, 0x6c, 0xff, 0xd8, 0x0, 0x0, 0xbf, 0xfc,
- 0xbf, 0xfc, 0x0, 0x6f, 0xd1, 0x0, 0x1d, 0xf7,
- 0xc, 0xf4, 0x0, 0x0, 0x5f, 0xb0, 0xdd, 0x0,
- 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0x90, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
- 0x0, 0x7, 0xfa, 0x0, 0x0, 0x0, 0x5, 0xfd,
- 0x10, 0x0, 0x0, 0x3, 0xfe, 0x20, 0x0, 0x0,
- 0x2, 0xef, 0x30, 0x0, 0x0, 0x1, 0xef, 0x50,
- 0x0, 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0, 0x0,
- 0xbf, 0x70, 0x0, 0x0, 0x0, 0x9f, 0xfa, 0xaa,
- 0xaa, 0xaa, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xf8,
-
- /* U+33 "3" */
- 0x0, 0x6c, 0xff, 0xc7, 0x0, 0xb, 0xff, 0xbb,
- 0xff, 0xb0, 0x6f, 0xc1, 0x0, 0x1d, 0xf5, 0xbf,
- 0x40, 0x0, 0x6, 0xf9, 0x34, 0x0, 0x0, 0x5,
- 0xfa, 0x0, 0x0, 0x0, 0x9, 0xf7, 0x0, 0x0,
- 0x1, 0x8f, 0xd0, 0x0, 0xd, 0xff, 0xfb, 0x10,
- 0x0, 0x8, 0xac, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x1d, 0xf6, 0x0, 0x0, 0x0, 0x4, 0xfc, 0x55,
- 0x0, 0x0, 0x1, 0xfe, 0xef, 0x20, 0x0, 0x3,
- 0xfc, 0x9f, 0xb0, 0x0, 0x1c, 0xf7, 0x1d, 0xfe,
- 0xbb, 0xef, 0xb0, 0x0, 0x7d, 0xff, 0xc7, 0x0,
-
- /* U+34 "4" */
- 0x0, 0x0, 0x0, 0xb, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xfb, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xfb, 0x0, 0x0, 0x0, 0x9, 0xfa, 0xfb, 0x0,
- 0x0, 0x0, 0x3f, 0xb5, 0xfb, 0x0, 0x0, 0x0,
- 0xcf, 0x25, 0xfb, 0x0, 0x0, 0x6, 0xf8, 0x5,
- 0xfb, 0x0, 0x0, 0x1e, 0xe0, 0x5, 0xfb, 0x0,
- 0x0, 0xaf, 0x50, 0x5, 0xfb, 0x0, 0x3, 0xfb,
- 0x0, 0x5, 0xfb, 0x0, 0xd, 0xf2, 0x0, 0x5,
- 0xfb, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x4a, 0xaa, 0xaa, 0xac, 0xfe, 0xa9, 0x0, 0x0,
- 0x0, 0x5, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0,
-
- /* U+35 "5" */
- 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x2f, 0xfd,
- 0xdd, 0xdd, 0xd0, 0x3, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0x70, 0x0, 0x0, 0x0, 0x7, 0xf6,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0x79, 0xbb, 0x71,
- 0x0, 0xa, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x9f,
- 0x81, 0x3, 0xdf, 0xc0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0x72, 0x74, 0x0, 0x0,
- 0x9, 0xf6, 0x2f, 0xc0, 0x0, 0x0, 0xdf, 0x30,
- 0xcf, 0x70, 0x0, 0x8f, 0xd0, 0x2, 0xef, 0xda,
- 0xdf, 0xf3, 0x0, 0x2, 0x9e, 0xfe, 0xa2, 0x0,
-
- /* U+36 "6" */
- 0x0, 0x0, 0x5b, 0xef, 0x10, 0x0, 0x1, 0xcf,
- 0xfd, 0xb1, 0x0, 0x0, 0xcf, 0xb2, 0x0, 0x0,
- 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xf1,
- 0x0, 0x0, 0x0, 0x2, 0xfb, 0x17, 0xa9, 0x50,
- 0x0, 0x6f, 0xcf, 0xff, 0xff, 0xb0, 0x8, 0xff,
- 0xb3, 0x3, 0xef, 0x80, 0x9f, 0xc0, 0x0, 0x3,
- 0xfe, 0x9, 0xf6, 0x0, 0x0, 0xd, 0xf3, 0x8f,
- 0x70, 0x0, 0x0, 0xbf, 0x46, 0xf9, 0x0, 0x0,
- 0xc, 0xf3, 0x2f, 0xe0, 0x0, 0x1, 0xff, 0x0,
- 0xaf, 0x90, 0x0, 0xaf, 0xa0, 0x1, 0xdf, 0xeb,
- 0xef, 0xd1, 0x0, 0x1, 0x9e, 0xfe, 0x81, 0x0,
-
- /* U+37 "7" */
- 0x2f, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x1a, 0xaa,
- 0xaa, 0xaa, 0xae, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd,
- 0xf1, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0, 0x0, 0x0,
- 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0x0,
-
- /* U+38 "8" */
- 0x0, 0x4b, 0xff, 0xd7, 0x0, 0x0, 0x7f, 0xfc,
- 0xbf, 0xfc, 0x0, 0x1f, 0xf4, 0x0, 0x1d, 0xf6,
- 0x5, 0xfb, 0x0, 0x0, 0x5f, 0xb0, 0x6f, 0x90,
- 0x0, 0x4, 0xfb, 0x3, 0xfd, 0x0, 0x0, 0x7f,
- 0x80, 0xb, 0xf9, 0x10, 0x5f, 0xe1, 0x0, 0xa,
- 0xff, 0xff, 0xd2, 0x0, 0x4, 0xef, 0xcb, 0xef,
- 0x80, 0x2, 0xfe, 0x20, 0x0, 0xbf, 0x70, 0x9f,
- 0x60, 0x0, 0x1, 0xff, 0xc, 0xf3, 0x0, 0x0,
- 0xe, 0xf1, 0xbf, 0x50, 0x0, 0x0, 0xff, 0x6,
- 0xfd, 0x10, 0x0, 0x9f, 0xb0, 0xb, 0xff, 0xbb,
- 0xef, 0xe2, 0x0, 0x6, 0xcf, 0xfd, 0x81, 0x0,
-
- /* U+39 "9" */
- 0x0, 0x5c, 0xfe, 0xb3, 0x0, 0x9, 0xff, 0xbc,
- 0xff, 0x50, 0x4f, 0xe2, 0x0, 0x5f, 0xf1, 0xaf,
- 0x60, 0x0, 0x9, 0xf7, 0xdf, 0x20, 0x0, 0x4,
- 0xfb, 0xef, 0x10, 0x0, 0x1, 0xfd, 0xcf, 0x30,
- 0x0, 0x1, 0xfe, 0x9f, 0x80, 0x0, 0x7, 0xfe,
- 0x2f, 0xf7, 0x1, 0x8f, 0xfd, 0x6, 0xff, 0xff,
- 0xf9, 0xfb, 0x0, 0x28, 0xa8, 0x24, 0xf8, 0x0,
- 0x0, 0x0, 0x9, 0xf4, 0x0, 0x0, 0x0, 0x2f,
- 0xd0, 0x0, 0x0, 0x5, 0xef, 0x50, 0x0, 0x8c,
- 0xff, 0xf6, 0x0, 0x0, 0xbe, 0xc8, 0x20, 0x0,
-
- /* U+3A ":" */
- 0x4f, 0x97, 0xfd, 0x5, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x7f,
- 0xd4, 0xf9,
-
- /* U+3B ";" */
- 0x8, 0xf5, 0xb, 0xf9, 0x1, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0x94, 0x8, 0xf7, 0x8, 0xf6,
- 0xb, 0xf2, 0x3f, 0xb0, 0x3b, 0x10,
-
- /* U+3C "<" */
- 0x0, 0x0, 0x0, 0x0, 0x77, 0x0, 0x0, 0x1,
- 0x8e, 0xf9, 0x0, 0x2, 0x9f, 0xff, 0xa2, 0x2,
- 0xaf, 0xfd, 0x71, 0x0, 0x3f, 0xfb, 0x40, 0x0,
- 0x0, 0x2f, 0xfb, 0x50, 0x0, 0x0, 0x1, 0x8f,
- 0xfe, 0x81, 0x0, 0x0, 0x1, 0x8e, 0xff, 0xa3,
- 0x0, 0x0, 0x0, 0x7e, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x66,
-
- /* U+3D "=" */
- 0x5f, 0xff, 0xff, 0xff, 0xf9, 0x4c, 0xcc, 0xcc,
- 0xcc, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4b, 0xbb, 0xbb, 0xbb,
- 0xb6, 0x5f, 0xff, 0xff, 0xff, 0xf9,
-
- /* U+3E ">" */
- 0x77, 0x10, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x20,
- 0x0, 0x0, 0x18, 0xef, 0xfb, 0x30, 0x0, 0x0,
- 0x5, 0xbf, 0xfc, 0x50, 0x0, 0x0, 0x1, 0x8e,
- 0xf9, 0x0, 0x0, 0x4, 0xaf, 0xf8, 0x0, 0x17,
- 0xdf, 0xfa, 0x30, 0x2a, 0xff, 0xf9, 0x20, 0x0,
- 0x9f, 0xe7, 0x10, 0x0, 0x0, 0x66, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+3F "?" */
- 0x0, 0x3b, 0xef, 0xd8, 0x0, 0x4, 0xff, 0xed,
- 0xff, 0xb0, 0xe, 0xf6, 0x0, 0x2e, 0xf3, 0x2e,
- 0xc0, 0x0, 0x9, 0xf7, 0x0, 0x0, 0x0, 0x8,
- 0xf7, 0x0, 0x0, 0x0, 0xd, 0xf3, 0x0, 0x0,
- 0x0, 0x8f, 0xb0, 0x0, 0x0, 0x7, 0xfe, 0x10,
- 0x0, 0x0, 0x5f, 0xe2, 0x0, 0x0, 0x0, 0xdf,
- 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0,
- 0x1, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x2,
- 0xff, 0x0, 0x0, 0x0, 0x1, 0xed, 0x0, 0x0,
-
- /* U+40 "@" */
- 0x0, 0x0, 0x1, 0x7c, 0xef, 0xec, 0x71, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xfb, 0x87, 0x8b, 0xfe,
- 0x50, 0x0, 0x0, 0x8, 0xf9, 0x10, 0x0, 0x0,
- 0x19, 0xf6, 0x0, 0x0, 0x6f, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0x20, 0x2, 0xfa, 0x0, 0x0,
- 0x1, 0x0, 0x0, 0xc, 0xa0, 0x9, 0xf1, 0x0,
- 0x5, 0xdf, 0xfa, 0x10, 0x5, 0xf1, 0xf, 0x90,
- 0x0, 0x5f, 0xb5, 0x6f, 0x90, 0x0, 0xf4, 0x4f,
- 0x40, 0x1, 0xfb, 0x0, 0x1f, 0x80, 0x0, 0xe7,
- 0x8f, 0x0, 0x7, 0xf3, 0x0, 0x2f, 0x60, 0x0,
- 0xc9, 0xae, 0x0, 0xc, 0xe0, 0x0, 0x3f, 0x50,
- 0x0, 0xc9, 0xbd, 0x0, 0xf, 0xb0, 0x0, 0x5f,
- 0x30, 0x0, 0xc9, 0xbc, 0x0, 0x1f, 0x90, 0x0,
- 0x6f, 0x20, 0x0, 0xe7, 0xbd, 0x0, 0x1f, 0xa0,
- 0x0, 0xaf, 0x10, 0x2, 0xf4, 0x9f, 0x0, 0xf,
- 0xe0, 0x3, 0xff, 0x20, 0xa, 0xd0, 0x6f, 0x20,
- 0x9, 0xfd, 0xaf, 0x9f, 0xb5, 0x9f, 0x40, 0x2f,
- 0x70, 0x0, 0xaf, 0xd6, 0x6, 0xef, 0xc4, 0x0,
- 0xb, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xb1, 0x0, 0x0, 0x0,
- 0x10, 0x0, 0x0, 0x0, 0x6, 0xef, 0xb7, 0x67,
- 0xae, 0x60, 0x0, 0x0, 0x0, 0x0, 0x17, 0xce,
- 0xff, 0xc7, 0x10, 0x0, 0x0,
-
- /* U+41 "A" */
- 0x0, 0x0, 0x0, 0xef, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xa, 0xfe, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xfd, 0x7f, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0x72, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xf2, 0xc, 0xf2, 0x0, 0x0, 0x0, 0x2, 0xfc,
- 0x0, 0x6f, 0x80, 0x0, 0x0, 0x0, 0x8f, 0x60,
- 0x1, 0xfe, 0x0, 0x0, 0x0, 0xe, 0xf1, 0x0,
- 0xb, 0xf4, 0x0, 0x0, 0x4, 0xfb, 0x0, 0x0,
- 0x5f, 0xa0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xf, 0xfb, 0xbb, 0xbb, 0xbd,
- 0xf6, 0x0, 0x6, 0xfa, 0x0, 0x0, 0x0, 0x4f,
- 0xc0, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0, 0xef,
- 0x20, 0x2f, 0xe0, 0x0, 0x0, 0x0, 0x9, 0xf8,
- 0x8, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xd0,
-
- /* U+42 "B" */
- 0x3f, 0xff, 0xff, 0xfd, 0x91, 0x0, 0x3f, 0xfb,
- 0xbb, 0xcf, 0xfe, 0x20, 0x3f, 0xe0, 0x0, 0x0,
- 0xbf, 0xb0, 0x3f, 0xe0, 0x0, 0x0, 0x2f, 0xf0,
- 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, 0x3f, 0xe0,
- 0x0, 0x0, 0x5f, 0xd0, 0x3f, 0xe0, 0x0, 0x15,
- 0xef, 0x40, 0x3f, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x3f, 0xfb, 0xbb, 0xbd, 0xfd, 0x20, 0x3f, 0xe0,
- 0x0, 0x0, 0x6f, 0xe0, 0x3f, 0xe0, 0x0, 0x0,
- 0xc, 0xf4, 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf7,
- 0x3f, 0xe0, 0x0, 0x0, 0xd, 0xf5, 0x3f, 0xe0,
- 0x0, 0x0, 0x8f, 0xf1, 0x3f, 0xfb, 0xbb, 0xbe,
- 0xff, 0x50, 0x3f, 0xff, 0xff, 0xfe, 0xa3, 0x0,
-
- /* U+43 "C" */
- 0x0, 0x3, 0xae, 0xfe, 0xb5, 0x0, 0x0, 0x8,
- 0xff, 0xdc, 0xdf, 0xf9, 0x0, 0x6, 0xfe, 0x40,
- 0x0, 0x3e, 0xf6, 0x0, 0xef, 0x40, 0x0, 0x0,
- 0x4f, 0xe0, 0x5f, 0xc0, 0x0, 0x0, 0x0, 0xef,
- 0x38, 0xf8, 0x0, 0x0, 0x0, 0x2, 0x31, 0xaf,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0x80, 0x0, 0x0, 0x0, 0x22, 0x5,
- 0xfc, 0x0, 0x0, 0x0, 0xe, 0xf3, 0xe, 0xf4,
- 0x0, 0x0, 0x4, 0xfe, 0x0, 0x6f, 0xe3, 0x0,
- 0x3, 0xdf, 0x60, 0x0, 0x8f, 0xfd, 0xbd, 0xff,
- 0x90, 0x0, 0x0, 0x4b, 0xef, 0xeb, 0x40, 0x0,
-
- /* U+44 "D" */
- 0x3f, 0xff, 0xff, 0xea, 0x30, 0x0, 0x3, 0xff,
- 0xbb, 0xbe, 0xff, 0x90, 0x0, 0x3f, 0xe0, 0x0,
- 0x3, 0xdf, 0x80, 0x3, 0xfe, 0x0, 0x0, 0x1,
- 0xef, 0x30, 0x3f, 0xe0, 0x0, 0x0, 0x7, 0xf9,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0x3f,
- 0xe0, 0x0, 0x0, 0x0, 0xff, 0x3, 0xfe, 0x0,
- 0x0, 0x0, 0xe, 0xf1, 0x3f, 0xe0, 0x0, 0x0,
- 0x0, 0xef, 0x13, 0xfe, 0x0, 0x0, 0x0, 0xf,
- 0xf0, 0x3f, 0xe0, 0x0, 0x0, 0x2, 0xfe, 0x3,
- 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xa0, 0x3f, 0xe0,
- 0x0, 0x0, 0x2f, 0xf3, 0x3, 0xfe, 0x0, 0x0,
- 0x4e, 0xf9, 0x0, 0x3f, 0xfb, 0xbb, 0xef, 0xf9,
- 0x0, 0x3, 0xff, 0xff, 0xfd, 0x93, 0x0, 0x0,
-
- /* U+45 "E" */
- 0x3f, 0xff, 0xff, 0xff, 0xff, 0xa3, 0xff, 0xbb,
- 0xbb, 0xbb, 0xb7, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xff, 0xff, 0xff, 0xa0, 0x3f, 0xfb, 0xbb, 0xbb,
- 0xb7, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb, 0xbb,
- 0xbb, 0xbb, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfc,
-
- /* U+46 "F" */
- 0x3f, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xbb,
- 0xbb, 0xbb, 0xb5, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xbb, 0xbb, 0xbb, 0x40, 0x3f, 0xff, 0xff, 0xff,
- 0xf7, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0,
- 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0,
-
- /* U+47 "G" */
- 0x0, 0x4, 0xae, 0xfe, 0xb6, 0x0, 0x0, 0x9,
- 0xff, 0xdb, 0xdf, 0xfb, 0x0, 0x6, 0xfe, 0x40,
- 0x0, 0x3d, 0xf9, 0x0, 0xef, 0x40, 0x0, 0x0,
- 0x2f, 0xf1, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0xac,
- 0x38, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0x60, 0x0, 0x5f,
- 0xff, 0xff, 0x59, 0xf7, 0x0, 0x3, 0xbb, 0xbe,
- 0xf5, 0x8f, 0x90, 0x0, 0x0, 0x0, 0xbf, 0x54,
- 0xfe, 0x0, 0x0, 0x0, 0xb, 0xf5, 0xd, 0xf7,
- 0x0, 0x0, 0x0, 0xbf, 0x50, 0x4f, 0xf6, 0x0,
- 0x0, 0x3e, 0xf5, 0x0, 0x5f, 0xfe, 0xbb, 0xef,
- 0xfa, 0x0, 0x0, 0x29, 0xdf, 0xfd, 0xa4, 0x0,
-
- /* U+48 "H" */
- 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xfe,
- 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xe0, 0x0,
- 0x0, 0x0, 0x3f, 0xd3, 0xfe, 0x0, 0x0, 0x0,
- 0x3, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f,
- 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f,
- 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x3f, 0xfb, 0xbb, 0xbb,
- 0xbb, 0xcf, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3,
- 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3,
- 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xfe, 0x0, 0x0,
- 0x0, 0x3, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x3f, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd,
-
- /* U+49 "I" */
- 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
- 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
- 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
- 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
-
- /* U+4A "J" */
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0x70, 0x0, 0x0,
- 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0x70, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0x70, 0x0, 0x0, 0x0, 0xa,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x70, 0x0,
- 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0x70, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0x73, 0x96, 0x0, 0x0,
- 0xa, 0xf6, 0x5f, 0xd0, 0x0, 0x0, 0xef, 0x41,
- 0xff, 0x70, 0x0, 0x8f, 0xe0, 0x6, 0xff, 0xdb,
- 0xef, 0xf4, 0x0, 0x3, 0xbe, 0xfe, 0xa2, 0x0,
-
- /* U+4B "K" */
- 0x3f, 0xe0, 0x0, 0x0, 0x9, 0xfd, 0x3, 0xfe,
- 0x0, 0x0, 0x7, 0xfe, 0x10, 0x3f, 0xe0, 0x0,
- 0x5, 0xff, 0x30, 0x3, 0xfe, 0x0, 0x4, 0xff,
- 0x40, 0x0, 0x3f, 0xe0, 0x2, 0xff, 0x60, 0x0,
- 0x3, 0xfe, 0x1, 0xef, 0x80, 0x0, 0x0, 0x3f,
- 0xe0, 0xdf, 0xa0, 0x0, 0x0, 0x3, 0xfe, 0xbf,
- 0xf7, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xdf, 0xf3,
- 0x0, 0x0, 0x3, 0xff, 0xd1, 0x8f, 0xe1, 0x0,
- 0x0, 0x3f, 0xf1, 0x0, 0xcf, 0xb0, 0x0, 0x3,
- 0xfe, 0x0, 0x1, 0xef, 0x70, 0x0, 0x3f, 0xe0,
- 0x0, 0x4, 0xff, 0x30, 0x3, 0xfe, 0x0, 0x0,
- 0x8, 0xfd, 0x10, 0x3f, 0xe0, 0x0, 0x0, 0xc,
- 0xfa, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x1e, 0xf6,
-
- /* U+4C "L" */
- 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0,
- 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb, 0xbb,
- 0xbb, 0xbb, 0x33, 0xff, 0xff, 0xff, 0xff, 0xf4,
-
- /* U+4D "M" */
- 0x3f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0x63, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xf6, 0x3f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0x63, 0xfd, 0xfd, 0x0, 0x0, 0x0, 0xa,
- 0xfd, 0xf6, 0x3f, 0xbc, 0xf3, 0x0, 0x0, 0x1,
- 0xfe, 0x8f, 0x63, 0xfb, 0x5f, 0xa0, 0x0, 0x0,
- 0x7f, 0x88, 0xf6, 0x3f, 0xc0, 0xef, 0x0, 0x0,
- 0xd, 0xf2, 0x9f, 0x63, 0xfc, 0x9, 0xf6, 0x0,
- 0x3, 0xfb, 0x9, 0xf6, 0x3f, 0xd0, 0x2f, 0xc0,
- 0x0, 0xaf, 0x50, 0xaf, 0x63, 0xfd, 0x0, 0xcf,
- 0x30, 0xf, 0xe0, 0xa, 0xf6, 0x3f, 0xe0, 0x6,
- 0xf9, 0x6, 0xf8, 0x0, 0xbf, 0x63, 0xfe, 0x0,
- 0xf, 0xf0, 0xcf, 0x20, 0xb, 0xf6, 0x3f, 0xe0,
- 0x0, 0x9f, 0x8f, 0xc0, 0x0, 0xbf, 0x63, 0xfe,
- 0x0, 0x3, 0xff, 0xf5, 0x0, 0xb, 0xf6, 0x3f,
- 0xe0, 0x0, 0xc, 0xfe, 0x0, 0x0, 0xbf, 0x63,
- 0xfe, 0x0, 0x0, 0x6f, 0x90, 0x0, 0xb, 0xf6,
-
- /* U+4E "N" */
- 0x3f, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xff,
- 0xd0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xff, 0x70,
- 0x0, 0x0, 0x3f, 0xd3, 0xff, 0xff, 0x20, 0x0,
- 0x3, 0xfd, 0x3f, 0xe9, 0xfc, 0x0, 0x0, 0x3f,
- 0xd3, 0xfe, 0xe, 0xf6, 0x0, 0x3, 0xfd, 0x3f,
- 0xe0, 0x4f, 0xe1, 0x0, 0x3f, 0xd3, 0xfe, 0x0,
- 0xaf, 0xa0, 0x3, 0xfd, 0x3f, 0xe0, 0x1, 0xef,
- 0x40, 0x3f, 0xd3, 0xfe, 0x0, 0x6, 0xfe, 0x3,
- 0xfd, 0x3f, 0xe0, 0x0, 0xb, 0xf9, 0x3f, 0xd3,
- 0xfe, 0x0, 0x0, 0x2f, 0xf7, 0xfd, 0x3f, 0xe0,
- 0x0, 0x0, 0x7f, 0xff, 0xd3, 0xfe, 0x0, 0x0,
- 0x0, 0xdf, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x3,
- 0xff, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x8, 0xfd,
-
- /* U+4F "O" */
- 0x0, 0x3, 0xae, 0xfe, 0xa4, 0x0, 0x0, 0x7,
- 0xff, 0xed, 0xef, 0xf9, 0x0, 0x5, 0xff, 0x60,
- 0x0, 0x4e, 0xf7, 0x0, 0xef, 0x50, 0x0, 0x0,
- 0x3f, 0xf0, 0x4f, 0xd0, 0x0, 0x0, 0x0, 0xbf,
- 0x68, 0xf8, 0x0, 0x0, 0x0, 0x6, 0xfa, 0xaf,
- 0x50, 0x0, 0x0, 0x0, 0x4f, 0xcb, 0xf5, 0x0,
- 0x0, 0x0, 0x3, 0xfd, 0xbf, 0x50, 0x0, 0x0,
- 0x0, 0x3f, 0xda, 0xf5, 0x0, 0x0, 0x0, 0x4,
- 0xfc, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x6f, 0xa4,
- 0xfd, 0x0, 0x0, 0x0, 0xa, 0xf6, 0xe, 0xf5,
- 0x0, 0x0, 0x3, 0xff, 0x10, 0x5f, 0xf5, 0x0,
- 0x3, 0xef, 0x70, 0x0, 0x6f, 0xfe, 0xce, 0xff,
- 0x90, 0x0, 0x0, 0x3a, 0xef, 0xeb, 0x40, 0x0,
-
- /* U+50 "P" */
- 0x3f, 0xff, 0xff, 0xfe, 0xb6, 0x0, 0x3, 0xff,
- 0xbb, 0xbb, 0xdf, 0xfb, 0x0, 0x3f, 0xe0, 0x0,
- 0x0, 0x3e, 0xf7, 0x3, 0xfe, 0x0, 0x0, 0x0,
- 0x5f, 0xd0, 0x3f, 0xe0, 0x0, 0x0, 0x1, 0xff,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x3f,
- 0xe0, 0x0, 0x0, 0x6, 0xfd, 0x3, 0xfe, 0x0,
- 0x0, 0x17, 0xff, 0x60, 0x3f, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x3, 0xff, 0xbb, 0xbb, 0xa7, 0x20,
- 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+51 "Q" */
- 0x0, 0x3, 0xae, 0xfe, 0xa3, 0x0, 0x0, 0x8,
- 0xff, 0xed, 0xef, 0xf8, 0x0, 0x6, 0xfe, 0x50,
- 0x0, 0x5f, 0xf6, 0x0, 0xff, 0x40, 0x0, 0x0,
- 0x4f, 0xe0, 0x6f, 0xb0, 0x0, 0x0, 0x0, 0xcf,
- 0x5a, 0xf7, 0x0, 0x0, 0x0, 0x8, 0xf9, 0xcf,
- 0x40, 0x0, 0x0, 0x0, 0x5f, 0xbd, 0xf3, 0x0,
- 0x0, 0x0, 0x4, 0xfc, 0xdf, 0x30, 0x0, 0x0,
- 0x0, 0x4f, 0xcc, 0xf4, 0x0, 0x0, 0x0, 0x5,
- 0xfa, 0xaf, 0x70, 0x0, 0x0, 0x0, 0x7f, 0x96,
- 0xfb, 0x0, 0x0, 0x0, 0xc, 0xf4, 0xf, 0xf4,
- 0x0, 0x0, 0x4, 0xfe, 0x0, 0x6f, 0xe4, 0x0,
- 0x4, 0xef, 0x50, 0x0, 0x8f, 0xfe, 0xce, 0xff,
- 0x70, 0x0, 0x0, 0x3a, 0xef, 0xef, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfd, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x1b, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0x0,
-
- /* U+52 "R" */
- 0x3f, 0xff, 0xff, 0xfd, 0x92, 0x0, 0x3, 0xff,
- 0xbb, 0xbc, 0xff, 0xf4, 0x0, 0x3f, 0xe0, 0x0,
- 0x0, 0x9f, 0xe0, 0x3, 0xfe, 0x0, 0x0, 0x0,
- 0xef, 0x40, 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf6,
- 0x3, 0xfe, 0x0, 0x0, 0x0, 0xbf, 0x60, 0x3f,
- 0xe0, 0x0, 0x0, 0x1f, 0xf2, 0x3, 0xfe, 0x0,
- 0x1, 0x4d, 0xfa, 0x0, 0x3f, 0xff, 0xff, 0xff,
- 0xfa, 0x0, 0x3, 0xff, 0xbb, 0xbd, 0xfb, 0x0,
- 0x0, 0x3f, 0xe0, 0x0, 0x1f, 0xf2, 0x0, 0x3,
- 0xfe, 0x0, 0x0, 0x7f, 0xb0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0xef, 0x30, 0x3, 0xfe, 0x0, 0x0,
- 0x6, 0xfc, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0xd,
- 0xf5, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x5f, 0xd0,
-
- /* U+53 "S" */
- 0x0, 0x3, 0xae, 0xfe, 0xb6, 0x0, 0x0, 0x7,
- 0xff, 0xec, 0xdf, 0xfb, 0x0, 0x3, 0xff, 0x50,
- 0x0, 0x2c, 0xf9, 0x0, 0x8f, 0x90, 0x0, 0x0,
- 0x2f, 0xf0, 0x9, 0xf8, 0x0, 0x0, 0x0, 0xbb,
- 0x10, 0x6f, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xe7, 0x10, 0x0, 0x0, 0x0, 0x1, 0x9f,
- 0xff, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x27, 0xdf,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x29, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x0,
- 0xcb, 0x0, 0x0, 0x0, 0xe, 0xf2, 0xe, 0xf3,
- 0x0, 0x0, 0x0, 0xff, 0x20, 0x7f, 0xe4, 0x0,
- 0x0, 0xaf, 0xd0, 0x0, 0x9f, 0xfd, 0xbc, 0xff,
- 0xe3, 0x0, 0x0, 0x3a, 0xef, 0xfd, 0x81, 0x0,
-
- /* U+54 "T" */
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xbb,
- 0xbb, 0xdf, 0xeb, 0xbb, 0xb7, 0x0, 0x0, 0x7,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0,
-
- /* U+55 "U" */
- 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
- 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0,
- 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd,
- 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
- 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0,
- 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd,
- 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
- 0x0, 0x0, 0x4, 0xfd, 0x7f, 0x80, 0x0, 0x0,
- 0x4, 0xfd, 0x6f, 0xa0, 0x0, 0x0, 0x5, 0xfc,
- 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf8, 0xc, 0xfb,
- 0x10, 0x0, 0x7f, 0xf1, 0x2, 0xdf, 0xfc, 0xce,
- 0xff, 0x40, 0x0, 0x7, 0xcf, 0xfd, 0x92, 0x0,
-
- /* U+56 "V" */
- 0x8f, 0xb0, 0x0, 0x0, 0x0, 0xb, 0xf8, 0x2f,
- 0xf1, 0x0, 0x0, 0x0, 0x1f, 0xf2, 0xc, 0xf6,
- 0x0, 0x0, 0x0, 0x6f, 0xc0, 0x6, 0xfb, 0x0,
- 0x0, 0x0, 0xbf, 0x70, 0x1, 0xff, 0x10, 0x0,
- 0x1, 0xff, 0x10, 0x0, 0xbf, 0x60, 0x0, 0x6,
- 0xfb, 0x0, 0x0, 0x5f, 0xc0, 0x0, 0xc, 0xf5,
- 0x0, 0x0, 0xf, 0xf1, 0x0, 0x1f, 0xf0, 0x0,
- 0x0, 0xa, 0xf7, 0x0, 0x7f, 0xa0, 0x0, 0x0,
- 0x4, 0xfc, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0,
- 0xef, 0x22, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0x77, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xcc,
- 0xf3, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x10, 0x0, 0x0,
-
- /* U+57 "W" */
- 0x3f, 0xd0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0,
- 0x2f, 0xe0, 0xf, 0xf0, 0x0, 0x0, 0x6f, 0xf2,
- 0x0, 0x0, 0x5f, 0xb0, 0xc, 0xf4, 0x0, 0x0,
- 0xaf, 0xf7, 0x0, 0x0, 0x9f, 0x70, 0x8, 0xf8,
- 0x0, 0x0, 0xed, 0xfb, 0x0, 0x0, 0xcf, 0x30,
- 0x4, 0xfb, 0x0, 0x3, 0xf9, 0xcf, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0xff, 0x0, 0x7, 0xf5, 0x8f,
- 0x30, 0x4, 0xfb, 0x0, 0x0, 0xcf, 0x20, 0xc,
- 0xf0, 0x4f, 0x80, 0x7, 0xf8, 0x0, 0x0, 0x9f,
- 0x60, 0x1f, 0xb0, 0xf, 0xc0, 0xb, 0xf4, 0x0,
- 0x0, 0x5f, 0xa0, 0x5f, 0x70, 0xb, 0xf1, 0xe,
- 0xf0, 0x0, 0x0, 0x1f, 0xd0, 0x9f, 0x20, 0x6,
- 0xf5, 0x2f, 0xc0, 0x0, 0x0, 0xd, 0xf1, 0xee,
- 0x0, 0x2, 0xf9, 0x5f, 0x80, 0x0, 0x0, 0xa,
- 0xf6, 0xf9, 0x0, 0x0, 0xdd, 0x8f, 0x50, 0x0,
- 0x0, 0x6, 0xfc, 0xf5, 0x0, 0x0, 0x9f, 0xcf,
- 0x10, 0x0, 0x0, 0x2, 0xff, 0xf0, 0x0, 0x0,
- 0x5f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xef, 0xb0,
- 0x0, 0x0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0x70, 0x0, 0x0, 0xc, 0xf5, 0x0, 0x0,
-
- /* U+58 "X" */
- 0xe, 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xc0, 0x5,
- 0xff, 0x10, 0x0, 0x4, 0xff, 0x20, 0x0, 0xbf,
- 0xb0, 0x0, 0xd, 0xf8, 0x0, 0x0, 0x2f, 0xf5,
- 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x7, 0xfe, 0x2,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0xdf, 0x9b, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0x7a, 0xfc, 0x0, 0x0, 0x0, 0x8, 0xfd,
- 0x1, 0xef, 0x60, 0x0, 0x0, 0x3f, 0xf3, 0x0,
- 0x6f, 0xe1, 0x0, 0x0, 0xcf, 0x90, 0x0, 0xc,
- 0xfa, 0x0, 0x7, 0xfe, 0x10, 0x0, 0x2, 0xff,
- 0x40, 0x1f, 0xf5, 0x0, 0x0, 0x0, 0x8f, 0xd0,
-
- /* U+59 "Y" */
- 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x1f,
- 0xf4, 0x0, 0x0, 0x1, 0xff, 0x30, 0x8, 0xfc,
- 0x0, 0x0, 0x9, 0xfa, 0x0, 0x0, 0xef, 0x40,
- 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x6f, 0xd0, 0x0,
- 0xaf, 0x90, 0x0, 0x0, 0xd, 0xf5, 0x2, 0xff,
- 0x10, 0x0, 0x0, 0x5, 0xfd, 0xa, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0x8f, 0xe0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0,
-
- /* U+5A "Z" */
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xab,
- 0xbb, 0xbb, 0xbb, 0xef, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x1e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfe, 0x10,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfd, 0xbb, 0xbb, 0xbb,
- 0xbb, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
-
- /* U+5B "[" */
- 0x4a, 0xaa, 0x67, 0xff, 0xfa, 0x7f, 0x90, 0x7,
- 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f,
- 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9,
- 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90,
- 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0,
- 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7,
- 0xf9, 0x0, 0x7f, 0xda, 0x67, 0xff, 0xfa,
-
- /* U+5C "\\" */
- 0x5f, 0x80, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0,
- 0x0, 0x9, 0xf4, 0x0, 0x0, 0x0, 0x3f, 0xa0,
- 0x0, 0x0, 0x0, 0xdf, 0x10, 0x0, 0x0, 0x7,
- 0xf7, 0x0, 0x0, 0x0, 0x1f, 0xd0, 0x0, 0x0,
- 0x0, 0xaf, 0x30, 0x0, 0x0, 0x4, 0xf9, 0x0,
- 0x0, 0x0, 0xe, 0xf0, 0x0, 0x0, 0x0, 0x8f,
- 0x50, 0x0, 0x0, 0x2, 0xfb, 0x0, 0x0, 0x0,
- 0xc, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0x80, 0x0,
- 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x9, 0xf4,
- 0x0, 0x0, 0x0, 0x3f, 0xa0,
-
- /* U+5D "]" */
- 0x9a, 0xaa, 0x1e, 0xff, 0xf2, 0x0, 0xdf, 0x20,
- 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0,
- 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd,
- 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf,
- 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2,
- 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20,
- 0xd, 0xf2, 0x9a, 0xff, 0x2e, 0xff, 0xf2,
-
- /* U+5E "^" */
- 0x0, 0x4, 0xf7, 0x0, 0x0, 0x0, 0xbf, 0xd0,
- 0x0, 0x0, 0x1f, 0xff, 0x40, 0x0, 0x8, 0xf6,
- 0xfa, 0x0, 0x0, 0xee, 0xb, 0xf1, 0x0, 0x4f,
- 0x80, 0x5f, 0x70, 0xb, 0xf1, 0x0, 0xed, 0x1,
- 0xfb, 0x0, 0x9, 0xf4,
-
- /* U+5F "_" */
- 0x9a, 0xaa, 0xaa, 0xaa, 0xa9, 0xff, 0xff, 0xff,
- 0xff, 0xfe,
-
- /* U+60 "`" */
- 0x1d, 0xf5, 0x0, 0x1, 0xef, 0x10, 0x0, 0x2e,
- 0xb0,
-
- /* U+61 "a" */
- 0x0, 0x5c, 0xfe, 0xc5, 0x0, 0xa, 0xfe, 0xbb,
- 0xff, 0x90, 0x5f, 0xc0, 0x0, 0x2f, 0xf2, 0x48,
- 0x30, 0x0, 0xb, 0xf5, 0x0, 0x0, 0x1, 0x1a,
- 0xf5, 0x1, 0x9e, 0xff, 0xff, 0xf5, 0x2e, 0xfa,
- 0x65, 0x4b, 0xf5, 0xaf, 0x70, 0x0, 0xa, 0xf5,
- 0xcf, 0x30, 0x0, 0xb, 0xf5, 0xaf, 0x90, 0x0,
- 0x7f, 0xf6, 0x2f, 0xfe, 0xce, 0xfd, 0xf7, 0x2,
- 0xbf, 0xfc, 0x45, 0xc8,
-
- /* U+62 "b" */
- 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0,
- 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x75,
- 0xcf, 0xea, 0x10, 0x8, 0xfd, 0xfd, 0xce, 0xfe,
- 0x10, 0x8f, 0xf5, 0x0, 0xc, 0xfa, 0x8, 0xf9,
- 0x0, 0x0, 0x2f, 0xf0, 0x8f, 0x70, 0x0, 0x0,
- 0xcf, 0x38, 0xf7, 0x0, 0x0, 0xa, 0xf5, 0x8f,
- 0x70, 0x0, 0x0, 0xaf, 0x58, 0xf7, 0x0, 0x0,
- 0xc, 0xf3, 0x8f, 0x90, 0x0, 0x2, 0xff, 0x8,
- 0xff, 0x50, 0x0, 0xcf, 0xa0, 0x8f, 0xdf, 0xdb,
- 0xef, 0xe1, 0x8, 0xf5, 0x5c, 0xfe, 0xa1, 0x0,
-
- /* U+63 "c" */
- 0x0, 0x4, 0xbe, 0xfc, 0x50, 0x0, 0x7, 0xff,
- 0xbb, 0xff, 0xa0, 0x3, 0xfe, 0x30, 0x1, 0xdf,
- 0x50, 0xaf, 0x70, 0x0, 0x4, 0xfa, 0xe, 0xf1,
- 0x0, 0x0, 0x3, 0x20, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0x10, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0, 0x0,
- 0x3e, 0x90, 0x3f, 0xe2, 0x0, 0x1c, 0xf5, 0x0,
- 0x7f, 0xfb, 0xbe, 0xf9, 0x0, 0x0, 0x4b, 0xff,
- 0xc5, 0x0,
-
- /* U+64 "d" */
- 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0,
- 0x2, 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0,
- 0x0, 0x0, 0x2, 0xfd, 0x0, 0x6d, 0xfe, 0x93,
- 0xfd, 0x9, 0xff, 0xcc, 0xfe, 0xfd, 0x3f, 0xf4,
- 0x0, 0x1c, 0xfd, 0xaf, 0x80, 0x0, 0x3, 0xfd,
- 0xdf, 0x30, 0x0, 0x2, 0xfd, 0xff, 0x10, 0x0,
- 0x2, 0xfd, 0xff, 0x0, 0x0, 0x2, 0xfd, 0xdf,
- 0x20, 0x0, 0x2, 0xfd, 0xaf, 0x60, 0x0, 0x2,
- 0xfd, 0x3f, 0xe1, 0x0, 0xa, 0xfd, 0x9, 0xfe,
- 0x98, 0xdf, 0xfd, 0x0, 0x6d, 0xfe, 0xa2, 0xfd,
-
- /* U+65 "e" */
- 0x0, 0x3b, 0xef, 0xc5, 0x0, 0x5, 0xff, 0xcb,
- 0xff, 0x80, 0x2f, 0xf3, 0x0, 0x2e, 0xf3, 0x9f,
- 0x70, 0x0, 0x6, 0xf8, 0xdf, 0x20, 0x0, 0x2,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xaa,
- 0xaa, 0xaa, 0xa9, 0xef, 0x20, 0x0, 0x0, 0x0,
- 0xaf, 0x70, 0x0, 0x0, 0x0, 0x3f, 0xf4, 0x0,
- 0x4, 0xe5, 0x7, 0xff, 0xca, 0xcf, 0xe2, 0x0,
- 0x4b, 0xef, 0xd9, 0x10,
-
- /* U+66 "f" */
- 0x0, 0x1, 0x9d, 0xf8, 0x0, 0xc, 0xfe, 0xc7,
- 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x7f, 0x80, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x5f, 0xff, 0xff, 0xf0,
- 0x39, 0xcf, 0xc9, 0x80, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x8f, 0x70, 0x0,
-
- /* U+67 "g" */
- 0x0, 0x6d, 0xfe, 0x91, 0xfd, 0x9, 0xff, 0xcc,
- 0xfd, 0xfd, 0x3f, 0xf4, 0x0, 0x1c, 0xfd, 0xaf,
- 0x80, 0x0, 0x3, 0xfd, 0xdf, 0x30, 0x0, 0x2,
- 0xfd, 0xff, 0x10, 0x0, 0x2, 0xfd, 0xff, 0x10,
- 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2, 0xfd,
- 0xaf, 0x80, 0x0, 0x3, 0xfd, 0x3f, 0xf4, 0x0,
- 0x1c, 0xfd, 0x9, 0xff, 0xcc, 0xfe, 0xfd, 0x0,
- 0x6d, 0xfe, 0x93, 0xfd, 0x0, 0x0, 0x0, 0x3,
- 0xfc, 0x3, 0x0, 0x0, 0x7, 0xfa, 0x2f, 0x90,
- 0x0, 0x3f, 0xf4, 0xc, 0xfe, 0xac, 0xff, 0x90,
- 0x0, 0x6c, 0xff, 0xc5, 0x0,
-
- /* U+68 "h" */
- 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8f,
- 0x70, 0x0, 0x0, 0x0, 0x8f, 0x74, 0xbf, 0xeb,
- 0x20, 0x8f, 0xcf, 0xdc, 0xef, 0xe1, 0x8f, 0xf6,
- 0x0, 0xd, 0xf6, 0x8f, 0x90, 0x0, 0x7, 0xf9,
- 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0,
- 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f,
- 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5,
- 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70,
- 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa,
-
- /* U+69 "i" */
- 0x3f, 0x96, 0xfc, 0x4, 0x10, 0x0, 0x5f, 0xa5,
- 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f,
- 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa,
-
- /* U+6A "j" */
- 0x0, 0x6f, 0x60, 0x8, 0xf9, 0x0, 0x4, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0,
- 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7,
- 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f,
- 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9,
- 0x0, 0x7f, 0x90, 0x7, 0xf8, 0x0, 0x9f, 0x78,
- 0xcf, 0xf2, 0xaf, 0xd5, 0x0,
-
- /* U+6B "k" */
- 0x7f, 0x80, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0,
- 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80,
- 0x0, 0x4f, 0xf3, 0x7, 0xf8, 0x0, 0x3f, 0xf4,
- 0x0, 0x7f, 0x80, 0x2e, 0xf5, 0x0, 0x7, 0xf8,
- 0x2e, 0xf7, 0x0, 0x0, 0x7f, 0x8d, 0xf8, 0x0,
- 0x0, 0x7, 0xff, 0xff, 0x60, 0x0, 0x0, 0x7f,
- 0xfc, 0xff, 0x20, 0x0, 0x7, 0xfc, 0x7, 0xfd,
- 0x0, 0x0, 0x7f, 0x80, 0xc, 0xf9, 0x0, 0x7,
- 0xf8, 0x0, 0x1e, 0xf5, 0x0, 0x7f, 0x80, 0x0,
- 0x4f, 0xe1, 0x7, 0xf8, 0x0, 0x0, 0x9f, 0xc0,
-
- /* U+6C "l" */
- 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5,
- 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f,
- 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa,
-
- /* U+6D "m" */
- 0x8f, 0x65, 0xcf, 0xea, 0x10, 0x4c, 0xfe, 0xb3,
- 0x8, 0xfd, 0xfc, 0xcf, 0xfe, 0x7f, 0xec, 0xef,
- 0xf2, 0x8f, 0xf3, 0x0, 0x1e, 0xff, 0x70, 0x0,
- 0xbf, 0x88, 0xf8, 0x0, 0x0, 0x7f, 0xd0, 0x0,
- 0x4, 0xfb, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x0,
- 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0, 0x5f, 0xa0,
- 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0, 0x5, 0xfa,
- 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0, 0x5f,
- 0xa0, 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0, 0x5,
- 0xfa, 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0,
- 0x5f, 0xa0, 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0,
- 0x5, 0xfa, 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0,
- 0x0, 0x5f, 0xa0, 0x0, 0x3, 0xfc,
-
- /* U+6E "n" */
- 0x8f, 0x64, 0xbf, 0xeb, 0x20, 0x8f, 0xcf, 0xdc,
- 0xef, 0xe1, 0x8f, 0xf6, 0x0, 0xd, 0xf6, 0x8f,
- 0x90, 0x0, 0x7, 0xf9, 0x8f, 0x70, 0x0, 0x5,
- 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70,
- 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa,
- 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0,
- 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f,
- 0x70, 0x0, 0x5, 0xfa,
-
- /* U+6F "o" */
- 0x0, 0x3, 0xbe, 0xfd, 0x70, 0x0, 0x0, 0x6f,
- 0xfc, 0xbe, 0xfd, 0x10, 0x2, 0xff, 0x50, 0x0,
- 0xbf, 0xa0, 0x9, 0xf8, 0x0, 0x0, 0xf, 0xf2,
- 0xd, 0xf2, 0x0, 0x0, 0x9, 0xf6, 0xf, 0xf0,
- 0x0, 0x0, 0x7, 0xf8, 0xf, 0xf0, 0x0, 0x0,
- 0x7, 0xf8, 0xe, 0xf2, 0x0, 0x0, 0x9, 0xf6,
- 0x9, 0xf8, 0x0, 0x0, 0xe, 0xf2, 0x2, 0xff,
- 0x40, 0x0, 0xaf, 0xb0, 0x0, 0x6f, 0xfc, 0xae,
- 0xfd, 0x10, 0x0, 0x3, 0xbe, 0xfd, 0x80, 0x0,
-
- /* U+70 "p" */
- 0x8f, 0x57, 0xdf, 0xea, 0x10, 0x8, 0xff, 0xe9,
- 0x8d, 0xfe, 0x10, 0x8f, 0xd1, 0x0, 0xb, 0xfa,
- 0x8, 0xf7, 0x0, 0x0, 0x2f, 0xf0, 0x8f, 0x70,
- 0x0, 0x0, 0xdf, 0x38, 0xf7, 0x0, 0x0, 0xb,
- 0xf4, 0x8f, 0x70, 0x0, 0x0, 0xbf, 0x48, 0xf7,
- 0x0, 0x0, 0xd, 0xf3, 0x8f, 0x80, 0x0, 0x3,
- 0xff, 0x8, 0xfe, 0x20, 0x1, 0xcf, 0x90, 0x8f,
- 0xef, 0xba, 0xef, 0xe1, 0x8, 0xf7, 0x6d, 0xfe,
- 0xa1, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x0, 0x0, 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x70, 0x0, 0x0, 0x0, 0x0,
-
- /* U+71 "q" */
- 0x0, 0x6d, 0xfe, 0x92, 0xfd, 0x9, 0xff, 0xcb,
- 0xfe, 0xfd, 0x4f, 0xf4, 0x0, 0xb, 0xfd, 0xaf,
- 0x80, 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2,
- 0xfd, 0xff, 0x0, 0x0, 0x2, 0xfd, 0xff, 0x0,
- 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2, 0xfd,
- 0xaf, 0x70, 0x0, 0x3, 0xfd, 0x3f, 0xf3, 0x0,
- 0xc, 0xfd, 0x9, 0xff, 0xba, 0xef, 0xfd, 0x0,
- 0x6d, 0xfe, 0x94, 0xfd, 0x0, 0x0, 0x0, 0x2,
- 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x0,
- 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd,
- 0x0, 0x0, 0x0, 0x2, 0xfd,
-
- /* U+72 "r" */
- 0x8f, 0x78, 0xef, 0x18, 0xff, 0xfd, 0xc1, 0x8f,
- 0xf3, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x8f, 0x70,
- 0x0, 0x8, 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0,
- 0x8, 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8,
- 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8, 0xf7,
- 0x0, 0x0,
-
- /* U+73 "s" */
- 0x0, 0x7d, 0xfe, 0xb3, 0x0, 0xc, 0xfe, 0xbc,
- 0xff, 0x50, 0x6f, 0xb0, 0x0, 0x6f, 0xe0, 0x8f,
- 0x70, 0x0, 0x9, 0xa1, 0x5f, 0xe5, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfc, 0x71, 0x0, 0x0, 0x16,
- 0xae, 0xff, 0x50, 0x0, 0x0, 0x0, 0x6f, 0xf1,
- 0xbc, 0x10, 0x0, 0xc, 0xf3, 0xbf, 0x90, 0x0,
- 0x2f, 0xf1, 0x2e, 0xfe, 0xab, 0xff, 0x80, 0x1,
- 0x9d, 0xfe, 0xb5, 0x0,
-
- /* U+74 "t" */
- 0x0, 0xcf, 0x30, 0x0, 0xc, 0xf3, 0x0, 0x0,
- 0xcf, 0x30, 0xe, 0xff, 0xff, 0xf6, 0x89, 0xef,
- 0xa9, 0x30, 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30,
- 0x0, 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30, 0x0,
- 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30, 0x0, 0xc,
- 0xf3, 0x0, 0x0, 0xbf, 0x50, 0x0, 0x7, 0xff,
- 0xb5, 0x0, 0x9, 0xff, 0x50,
-
- /* U+75 "u" */
- 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0,
- 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f,
- 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6,
- 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70,
- 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9,
- 0x7f, 0x90, 0x0, 0x6, 0xf9, 0x4f, 0xe1, 0x0,
- 0x3e, 0xf9, 0xc, 0xfe, 0xbd, 0xfe, 0xf9, 0x1,
- 0xae, 0xfd, 0x85, 0xf9,
-
- /* U+76 "v" */
- 0x7f, 0x80, 0x0, 0x0, 0xef, 0x11, 0xfe, 0x0,
- 0x0, 0x4f, 0xb0, 0xc, 0xf3, 0x0, 0x9, 0xf6,
- 0x0, 0x6f, 0x80, 0x0, 0xef, 0x0, 0x1, 0xfd,
- 0x0, 0x3f, 0xa0, 0x0, 0xb, 0xf2, 0x8, 0xf5,
- 0x0, 0x0, 0x5f, 0x80, 0xdf, 0x0, 0x0, 0x0,
- 0xfd, 0x2f, 0xa0, 0x0, 0x0, 0xa, 0xfa, 0xf4,
- 0x0, 0x0, 0x0, 0x5f, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0x90, 0x0, 0x0, 0x0, 0x9, 0xf4,
- 0x0, 0x0,
-
- /* U+77 "w" */
- 0x6f, 0x90, 0x0, 0xb, 0xf2, 0x0, 0x1, 0xfd,
- 0x1, 0xfd, 0x0, 0x0, 0xff, 0x70, 0x0, 0x5f,
- 0x90, 0xd, 0xf1, 0x0, 0x5f, 0xfc, 0x0, 0x9,
- 0xf5, 0x0, 0x8f, 0x50, 0x9, 0xfa, 0xf1, 0x0,
- 0xdf, 0x0, 0x4, 0xf9, 0x0, 0xeb, 0x4f, 0x60,
- 0x1f, 0xc0, 0x0, 0xf, 0xd0, 0x3f, 0x60, 0xfb,
- 0x5, 0xf7, 0x0, 0x0, 0xbf, 0x18, 0xf1, 0xb,
- 0xf0, 0x9f, 0x30, 0x0, 0x6, 0xf5, 0xdd, 0x0,
- 0x6f, 0x5d, 0xe0, 0x0, 0x0, 0x2f, 0xbf, 0x80,
- 0x1, 0xfb, 0xfa, 0x0, 0x0, 0x0, 0xdf, 0xf3,
- 0x0, 0xc, 0xff, 0x50, 0x0, 0x0, 0x9, 0xfe,
- 0x0, 0x0, 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x5f,
- 0x90, 0x0, 0x2, 0xfc, 0x0, 0x0,
-
- /* U+78 "x" */
- 0x2f, 0xf2, 0x0, 0x5, 0xfe, 0x10, 0x7f, 0xb0,
- 0x0, 0xef, 0x50, 0x0, 0xdf, 0x50, 0x8f, 0xb0,
- 0x0, 0x3, 0xfe, 0x3f, 0xf1, 0x0, 0x0, 0x9,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xd0, 0x0, 0x0, 0x0,
- 0xaf, 0xdf, 0x80, 0x0, 0x0, 0x4f, 0xd1, 0xef,
- 0x20, 0x0, 0xe, 0xf3, 0x6, 0xfc, 0x0, 0x9,
- 0xfa, 0x0, 0xc, 0xf7, 0x3, 0xff, 0x10, 0x0,
- 0x3f, 0xf2,
-
- /* U+79 "y" */
- 0x9f, 0x90, 0x0, 0x2, 0xff, 0x3, 0xfe, 0x0,
- 0x0, 0x7f, 0xa0, 0xe, 0xf3, 0x0, 0xc, 0xf4,
- 0x0, 0x8f, 0x80, 0x1, 0xff, 0x0, 0x3, 0xfe,
- 0x0, 0x5f, 0xa0, 0x0, 0xd, 0xf3, 0xa, 0xf4,
- 0x0, 0x0, 0x8f, 0x80, 0xff, 0x0, 0x0, 0x2,
- 0xfd, 0x4f, 0xa0, 0x0, 0x0, 0xd, 0xfc, 0xf4,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0,
- 0x2, 0xff, 0xa0, 0x0, 0x0, 0x0, 0xc, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xa0, 0x0, 0x0, 0x0, 0xb, 0xf3,
- 0x0, 0x0, 0x1, 0xdf, 0xfa, 0x0, 0x0, 0x0,
- 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0,
-
- /* U+7A "z" */
- 0xf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xaa, 0xaa,
- 0xaa, 0xef, 0xb0, 0x0, 0x0, 0x0, 0x4f, 0xf2,
- 0x0, 0x0, 0x0, 0x1e, 0xf5, 0x0, 0x0, 0x0,
- 0xb, 0xf9, 0x0, 0x0, 0x0, 0x6, 0xfd, 0x0,
- 0x0, 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0xdf, 0x70, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x0,
- 0x0, 0x0, 0x5f, 0xe1, 0x0, 0x0, 0x0, 0xe,
- 0xfd, 0xaa, 0xaa, 0xaa, 0x10, 0xff, 0xff, 0xff,
- 0xff, 0xf2,
-
- /* U+7B "{" */
- 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x4e, 0xf1,
- 0x0, 0x2, 0xfe, 0x20, 0x0, 0xa, 0xf5, 0x0,
- 0x0, 0xe, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7f, 0xa0, 0x0,
- 0x3b, 0xfe, 0x10, 0x0, 0x5f, 0xf9, 0x0, 0x0,
- 0x2, 0xcf, 0x60, 0x0, 0x0, 0x3f, 0xc0, 0x0,
- 0x0, 0xf, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xc, 0xf3, 0x0, 0x0, 0x6, 0xfa, 0x0,
- 0x0, 0x0, 0xaf, 0xb1, 0x0, 0x0, 0x5, 0xb0,
-
- /* U+7C "|" */
- 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72,
- 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f,
- 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7,
- 0x2f, 0x72, 0xf7, 0x2f, 0x70,
-
- /* U+7D "}" */
- 0x22, 0x0, 0x0, 0xa, 0xf9, 0x0, 0x0, 0xa,
- 0xf9, 0x0, 0x0, 0xe, 0xf1, 0x0, 0x0, 0xaf,
- 0x50, 0x0, 0x8, 0xf6, 0x0, 0x0, 0x8f, 0x70,
- 0x0, 0x8, 0xf7, 0x0, 0x0, 0x7f, 0x80, 0x0,
- 0x3, 0xfd, 0x0, 0x0, 0x8, 0xfd, 0x70, 0x0,
- 0x2e, 0xfb, 0x0, 0x1e, 0xf5, 0x0, 0x6, 0xfa,
- 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8, 0xf7, 0x0,
- 0x0, 0x8f, 0x70, 0x0, 0x9, 0xf5, 0x0, 0x0,
- 0xcf, 0x30, 0x0, 0x4f, 0xd0, 0x0, 0x6f, 0xe2,
- 0x0, 0x7, 0x81, 0x0, 0x0,
-
- /* U+7E "~" */
- 0x1, 0xaf, 0xea, 0x20, 0x0, 0x1b, 0x60, 0xdf,
- 0xde, 0xff, 0x60, 0x8, 0xf5, 0x6f, 0x70, 0x7,
- 0xff, 0xed, 0xfc, 0x5, 0xa1, 0x0, 0x2, 0xaf,
- 0xfa, 0x10,
-
- /* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0x9e, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbf,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x48, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
- 0x0, 0x1, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x94, 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf,
- 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0xef, 0xd0,
- 0x0, 0x0, 0xa, 0xff, 0xea, 0x50, 0x0, 0x0,
- 0x0, 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0,
- 0x0, 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0,
- 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xe,
- 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
- 0x0, 0x3, 0x54, 0xff, 0xd0, 0x0, 0x0, 0xa,
- 0xff, 0x10, 0x0, 0x0, 0x5e, 0xff, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xd0, 0x1, 0x69, 0x9d, 0xff,
- 0x10, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfc, 0x6,
- 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x1e, 0xff,
- 0xff, 0xff, 0x61, 0xff, 0xff, 0xff, 0xff, 0x10,
- 0x0, 0x0, 0x2a, 0xff, 0xfc, 0x50, 0x1f, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x10,
- 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xcc,
- 0xa3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F008 "" */
- 0x42, 0x0, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x87, 0x0, 0x24, 0xf8, 0x22, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x22, 0x8f, 0xff, 0xff,
- 0xff, 0xb9, 0x99, 0x99, 0x99, 0x9b, 0xff, 0xff,
- 0xff, 0xf9, 0x44, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x44, 0x9f, 0xf6, 0x0, 0xef, 0x30,
- 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x6f, 0xf7,
- 0x0, 0xef, 0x30, 0x0, 0x0, 0x0, 0x3, 0xfe,
- 0x0, 0x7f, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xfa, 0x66, 0xff,
- 0x74, 0x44, 0x44, 0x44, 0x47, 0xff, 0x66, 0xaf,
- 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0x6f, 0xf6, 0x0, 0xef, 0xdc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xfe, 0x0, 0x6f, 0xff, 0xee,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x3, 0xff, 0xee,
- 0xff, 0xfc, 0x88, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x88, 0xcf, 0xf6, 0x0, 0xef, 0x30,
- 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x6f, 0xf6,
- 0x0, 0xef, 0x30, 0x0, 0x0, 0x0, 0x3, 0xfe,
- 0x0, 0x6f, 0xfe, 0xcc, 0xff, 0x41, 0x11, 0x11,
- 0x11, 0x14, 0xff, 0xcc, 0xef, 0xfd, 0xaa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xdf,
- 0xc6, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0x6c,
-
- /* U+F00B "" */
- 0xbf, 0xff, 0xfe, 0x31, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x63, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x58,
- 0x88, 0x87, 0x0, 0x78, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x85, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0x31, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x53, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x47, 0x88, 0x87, 0x0,
- 0x68, 0x88, 0x88, 0x88, 0x88, 0x88, 0x74, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xff, 0x31, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x37, 0x77, 0x76, 0x0, 0x57, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x74,
-
- /* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xef, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff,
- 0xff, 0x30, 0x4, 0xe8, 0x0, 0x0, 0x0, 0x0,
- 0x2e, 0xff, 0xff, 0xf3, 0x0, 0x4f, 0xff, 0x80,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0x30, 0x0,
- 0xef, 0xff, 0xf8, 0x0, 0x0, 0x2e, 0xff, 0xff,
- 0xf3, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x80, 0x2,
- 0xef, 0xff, 0xff, 0x30, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xf8, 0x2e, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xd3, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F00D "" */
- 0x8, 0xc4, 0x0, 0x0, 0x0, 0x2, 0xc9, 0x0,
- 0x9f, 0xff, 0x40, 0x0, 0x0, 0x2e, 0xff, 0xb0,
- 0xff, 0xff, 0xf4, 0x0, 0x2, 0xef, 0xff, 0xf1,
- 0x7f, 0xff, 0xff, 0x40, 0x2e, 0xff, 0xff, 0x90,
- 0x8, 0xff, 0xff, 0xf6, 0xef, 0xff, 0xfa, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0xff, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
- 0x2, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xf4, 0x0,
- 0x2e, 0xff, 0xff, 0xa0, 0x8f, 0xff, 0xff, 0x40,
- 0xdf, 0xff, 0xfa, 0x0, 0x8, 0xff, 0xff, 0xf0,
- 0xdf, 0xff, 0xa0, 0x0, 0x0, 0x8f, 0xff, 0xe0,
- 0x2e, 0xfa, 0x0, 0x0, 0x0, 0x8, 0xff, 0x30,
- 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0,
-
- /* U+F011 "" */
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x33, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xe, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0x50, 0xe, 0xff, 0x80,
- 0xb, 0xf4, 0x0, 0x0, 0x0, 0xb, 0xff, 0xe0,
- 0xe, 0xff, 0x80, 0x4f, 0xff, 0x50, 0x0, 0x0,
- 0x9f, 0xff, 0xe0, 0xe, 0xff, 0x80, 0x5f, 0xff,
- 0xf2, 0x0, 0x3, 0xff, 0xfe, 0x30, 0xe, 0xff,
- 0x80, 0x8, 0xff, 0xfc, 0x0, 0xb, 0xff, 0xf3,
- 0x0, 0xe, 0xff, 0x80, 0x0, 0xaf, 0xff, 0x50,
- 0x1f, 0xff, 0x90, 0x0, 0xe, 0xff, 0x80, 0x0,
- 0x1f, 0xff, 0xb0, 0x6f, 0xff, 0x30, 0x0, 0xe,
- 0xff, 0x80, 0x0, 0x9, 0xff, 0xf0, 0x8f, 0xff,
- 0x0, 0x0, 0xe, 0xff, 0x80, 0x0, 0x5, 0xff,
- 0xf2, 0xaf, 0xfd, 0x0, 0x0, 0xe, 0xff, 0x80,
- 0x0, 0x3, 0xff, 0xf3, 0x9f, 0xfd, 0x0, 0x0,
- 0xc, 0xff, 0x50, 0x0, 0x4, 0xff, 0xf2, 0x8f,
- 0xff, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x6,
- 0xff, 0xf1, 0x4f, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xe0, 0xf, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x90,
- 0x8, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xef, 0xff, 0x20, 0x1, 0xef, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x0, 0x0, 0x4f,
- 0xff, 0xfd, 0x62, 0x1, 0x49, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7d, 0xff, 0xff, 0xff, 0xb4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x65,
- 0x30, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F013 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c,
- 0xee, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x30, 0x2a,
- 0xff, 0xff, 0xff, 0xb2, 0x3, 0x80, 0x0, 0x0,
- 0x8f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
- 0xf8, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0xb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
- 0x1f, 0xff, 0xff, 0xff, 0xfa, 0x55, 0xaf, 0xff,
- 0xff, 0xff, 0xf2, 0x6, 0xef, 0xff, 0xff, 0x70,
- 0x0, 0x7, 0xff, 0xff, 0xff, 0x60, 0x0, 0x2f,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf3,
- 0x0, 0x0, 0x3f, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xf3, 0x0, 0x0, 0x2f, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0xf3, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0x20, 0x0, 0x1, 0xff, 0xff,
- 0xf9, 0x0, 0x1e, 0xff, 0xff, 0xff, 0xd3, 0x0,
- 0x3d, 0xff, 0xff, 0xff, 0xe1, 0xe, 0xff, 0xff,
- 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x2f,
- 0xb2, 0x9f, 0xff, 0xff, 0xff, 0xfa, 0x2a, 0xf3,
- 0x0, 0x0, 0x1, 0x0, 0x2, 0xdf, 0xff, 0xfe,
- 0x30, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x66,
- 0x41, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F015 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xe9, 0x0,
- 0x5, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3e, 0xff, 0xfc, 0x10, 0x7f, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xfe, 0x37, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xb4, 0xdf, 0xff, 0xbf, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xff, 0x80,
- 0x1, 0xbf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
- 0x2, 0xdf, 0xff, 0x50, 0x8f, 0x50, 0x9f, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfe, 0x30,
- 0xbf, 0xff, 0x70, 0x6f, 0xff, 0xf1, 0x0, 0x0,
- 0x7, 0xff, 0xfc, 0x12, 0xdf, 0xff, 0xff, 0xa0,
- 0x3e, 0xff, 0xe3, 0x0, 0xa, 0xff, 0xfa, 0x3,
- 0xef, 0xff, 0xff, 0xff, 0xc1, 0x2d, 0xff, 0xf6,
- 0xc, 0xff, 0xf7, 0x6, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe3, 0xb, 0xff, 0xf8, 0x9f, 0xf5, 0x9,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x8,
- 0xff, 0x50, 0x93, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0x5, 0x70, 0x0, 0x0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff,
- 0xcc, 0xcf, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xff, 0xff, 0x50, 0x0, 0x9f, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff,
- 0xf5, 0x0, 0x9, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xff, 0xff, 0x50, 0x0, 0x9f,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff,
- 0xff, 0xf5, 0x0, 0x9, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0x40, 0x0,
- 0x8f, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x2,
- 0x44, 0x44, 0x40, 0x0, 0x1, 0x44, 0x44, 0x41,
- 0x0, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xee, 0xee, 0xff,
- 0xff, 0xff, 0xee, 0xee, 0x20, 0x0, 0x0, 0x2,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xfc, 0x4, 0xff, 0x40, 0xcf,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0x23, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x44, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0x6e, 0xb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xaf,
- 0x5d, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb,
-
- /* U+F01C "" */
- 0x0, 0x0, 0x4, 0xab, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x9f,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0x50, 0x0, 0x0, 0x4f, 0xfe, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xfe, 0x10, 0x0, 0xd,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xfa, 0x0, 0x9, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf5, 0x3,
- 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0xe1, 0xdf, 0xfa, 0x44, 0x44,
- 0x20, 0x0, 0x0, 0x0, 0x34, 0x44, 0x4d, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x88,
- 0x88, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x10,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0x76, 0x0, 0x0, 0x0, 0x5, 0x9c,
- 0xdd, 0xb8, 0x30, 0x0, 0xf, 0xff, 0x0, 0x0,
- 0x6, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x40, 0xf,
- 0xff, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0xf, 0xff, 0x0, 0xc, 0xff, 0xff,
- 0xa5, 0x34, 0x6b, 0xff, 0xff, 0xce, 0xff, 0x0,
- 0xaf, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x2b, 0xff,
- 0xff, 0xff, 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xff, 0xd, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x7d, 0xdc, 0xbf, 0xff, 0xff,
- 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0x6f, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0x2, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0x22,
- 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde,
- 0xee, 0xee, 0xee, 0xe7, 0x0, 0x0, 0x0, 0x0,
- 0x9e, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0xf3, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x9, 0xff, 0xe0,
- 0xff, 0xff, 0xf4, 0x0, 0x10, 0x0, 0x0, 0x0,
- 0x5f, 0xff, 0x70, 0xff, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xfd, 0x0, 0xff, 0xff,
- 0xff, 0xfd, 0x61, 0x0, 0x5, 0xcf, 0xff, 0xf2,
- 0x0, 0xff, 0xe3, 0xef, 0xff, 0xff, 0xee, 0xff,
- 0xff, 0xfe, 0x30, 0x0, 0xff, 0xf0, 0x19, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb1, 0x0, 0x0, 0xff,
- 0xf0, 0x0, 0x28, 0xdf, 0xff, 0xfe, 0xa3, 0x0,
- 0x0, 0x0, 0xab, 0xa0, 0x0, 0x0, 0x1, 0x33,
- 0x10, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xf0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x24, 0x44,
- 0x47, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x2e, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x2e, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x2e, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x24, 0x44, 0x47, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x75, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x2f, 0xf7, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x0, 0xdf, 0x3f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xf, 0xf3, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0xc, 0xfd, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x1, 0xfe, 0x20, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0x1, 0x0, 0x0, 0x0,
- 0x0, 0x2e, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2e, 0xff, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2e, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2d, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0,
- 0x0, 0x0, 0x9f, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0x0, 0x0, 0x1, 0x0, 0x7f,
- 0xf5, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf0,
- 0x0, 0x5, 0xf9, 0x0, 0x9f, 0xe1, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0x0, 0x0, 0x4f, 0xfb,
- 0x0, 0xdf, 0x80, 0x24, 0x44, 0x47, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0x3f, 0xf7, 0x4, 0xff, 0xe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x86, 0x0,
- 0x4f, 0xf1, 0xd, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x2f, 0xf7, 0x0, 0xcf, 0x60, 0x9f,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x6f,
- 0xf1, 0x7, 0xf9, 0x6, 0xfa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0xdf, 0x40, 0x5f, 0xb0,
- 0x5f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1f, 0xf2, 0x5, 0xfa, 0x5, 0xfb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xd, 0xfc, 0x0, 0x9f,
- 0x80, 0x7f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x1, 0xfd, 0x20, 0x1e, 0xf3, 0xb, 0xf6, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0x0, 0xa,
- 0xfc, 0x1, 0xff, 0x20, 0x0, 0x0, 0x2e, 0xff,
- 0xff, 0x0, 0x0, 0xb, 0xff, 0x20, 0x8f, 0xc0,
- 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf0, 0x0, 0x7,
- 0xff, 0x40, 0x2f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x2e, 0xff, 0x0, 0x0, 0x19, 0x20, 0x1d, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0,
- 0x0, 0x0, 0x2d, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xfd,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xfb, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F03E "" */
- 0x5, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x50, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x1, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x70, 0x0, 0xd, 0xff, 0xff, 0xff, 0xdb, 0xff,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x2f, 0xff, 0xff,
- 0xfd, 0x10, 0xaf, 0xff, 0xff, 0xff, 0xfb, 0x56,
- 0xef, 0xff, 0xff, 0xd1, 0x0, 0xa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0xf7, 0x2e, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff,
- 0x70, 0x2, 0xed, 0x10, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xf7, 0x0, 0x0, 0x21, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe4,
-
- /* U+F048 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xef, 0xc0, 0x0, 0x0, 0x0, 0xb, 0xd3, 0x2f,
- 0xfe, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x82, 0xff,
- 0xe0, 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x2f, 0xfe,
- 0x0, 0x0, 0x2e, 0xff, 0xff, 0x92, 0xff, 0xe0,
- 0x0, 0x3e, 0xff, 0xff, 0xf9, 0x2f, 0xfe, 0x0,
- 0x4f, 0xff, 0xff, 0xff, 0x92, 0xff, 0xe0, 0x5f,
- 0xff, 0xff, 0xff, 0xf9, 0x2f, 0xfe, 0x6f, 0xff,
- 0xff, 0xff, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x2f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x2f, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0x92, 0xff, 0xe0, 0xbf, 0xff, 0xff, 0xff,
- 0xf9, 0x2f, 0xfe, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0x92, 0xff, 0xe0, 0x0, 0x8f, 0xff, 0xff, 0xf9,
- 0x2f, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0x92,
- 0xff, 0xe0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x2f,
- 0xfe, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x92, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0x4f, 0xf5, 0x4, 0x43,
- 0x0, 0x0, 0x0, 0x0, 0x13, 0x0,
-
- /* U+F04B "" */
- 0x2, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xfb, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x30, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0x10, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x40, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xfd, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0x91, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2a, 0xa3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0x3d, 0xff, 0xff, 0xe6, 0x0, 0x3, 0xdf, 0xff,
- 0xfe, 0x60, 0xdf, 0xff, 0xff, 0xff, 0x10, 0xd,
- 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0xf, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x30, 0xf,
- 0xff, 0xff, 0xff, 0xf3, 0x8f, 0xff, 0xff, 0xfb,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xb0, 0x2, 0x44,
- 0x44, 0x30, 0x0, 0x0, 0x24, 0x44, 0x43, 0x0,
-
- /* U+F04D "" */
- 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x60, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x2, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x0,
-
- /* U+F051 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xdc, 0x10, 0x0, 0x0, 0x0, 0xbf, 0xf3, 0x7f,
- 0xfd, 0x20, 0x0, 0x0, 0xd, 0xff, 0x47, 0xff,
- 0xfe, 0x30, 0x0, 0x0, 0xdf, 0xf4, 0x7f, 0xff,
- 0xff, 0x40, 0x0, 0xd, 0xff, 0x47, 0xff, 0xff,
- 0xff, 0x50, 0x0, 0xdf, 0xf4, 0x7f, 0xff, 0xff,
- 0xff, 0x60, 0xd, 0xff, 0x47, 0xff, 0xff, 0xff,
- 0xff, 0x70, 0xdf, 0xf4, 0x7f, 0xff, 0xff, 0xff,
- 0xff, 0x8d, 0xff, 0x47, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x47, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xcd,
- 0xff, 0x47, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xdf,
- 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xa0, 0xd, 0xff,
- 0x47, 0xff, 0xff, 0xff, 0x90, 0x0, 0xdf, 0xf4,
- 0x7f, 0xff, 0xff, 0x80, 0x0, 0xd, 0xff, 0x47,
- 0xff, 0xff, 0x70, 0x0, 0x0, 0xdf, 0xf4, 0x7f,
- 0xff, 0x60, 0x0, 0x0, 0xd, 0xff, 0x44, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0xcf, 0xf4, 0x2, 0x20,
- 0x0, 0x0, 0x0, 0x2, 0x44, 0x0,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xea, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0x0, 0x1, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe1, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x30, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x56,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0xe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
- 0x27, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x30,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x0, 0x19, 0x20, 0x0, 0x0,
- 0x0, 0x1, 0xdf, 0xe2, 0x0, 0x0, 0x0, 0x1d,
- 0xff, 0xf8, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xd1,
- 0x0, 0x0, 0x1d, 0xff, 0xfc, 0x10, 0x0, 0x1,
- 0xdf, 0xff, 0xc1, 0x0, 0x0, 0x1d, 0xff, 0xfc,
- 0x10, 0x0, 0x1, 0xdf, 0xff, 0xc1, 0x0, 0x0,
- 0x1d, 0xff, 0xfc, 0x10, 0x0, 0x0, 0xbf, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x7f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x7f, 0xff,
- 0xf6, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
-
- /* U+F054 "" */
- 0x5, 0x80, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xfb, 0x0, 0x0, 0x0,
- 0x3, 0xef, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xfb, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff,
- 0xb0, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x3, 0xef, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x3f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xf3, 0x0, 0x0, 0x9, 0xff, 0xff, 0x40,
- 0x0, 0x0, 0x9f, 0xff, 0xf4, 0x0, 0x0, 0x9,
- 0xff, 0xff, 0x40, 0x0, 0x0, 0x9f, 0xff, 0xf4,
- 0x0, 0x0, 0x9, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x8f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0xaf, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x1c, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x0, 0x1, 0xbe, 0xd3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x14, 0x55,
- 0x55, 0x59, 0xff, 0xfc, 0x55, 0x55, 0x54, 0x20,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x6c, 0xdd,
- 0xdd, 0xde, 0xff, 0xff, 0xdd, 0xdd, 0xdc, 0x90,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x36, 0x50, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F068 "" */
- 0x2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xb0,
-
- /* U+F06E "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x43, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5b, 0xff, 0xff, 0xff, 0xea, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xfd, 0xce,
- 0xff, 0xff, 0xc3, 0x0, 0x0, 0x0, 0x0, 0x1b,
- 0xff, 0xff, 0x71, 0x0, 0x2, 0x9f, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x2d, 0xff, 0xfe, 0x20, 0x2,
- 0x53, 0x0, 0x5f, 0xff, 0xfb, 0x0, 0x0, 0x1e,
- 0xff, 0xff, 0x30, 0x0, 0x6f, 0xfc, 0x10, 0x7f,
- 0xff, 0xfb, 0x0, 0xc, 0xff, 0xff, 0xa0, 0x0,
- 0x6, 0xff, 0xfc, 0x0, 0xef, 0xff, 0xf8, 0x6,
- 0xff, 0xff, 0xf5, 0x1, 0x3, 0xef, 0xff, 0xf4,
- 0x9, 0xff, 0xff, 0xf3, 0xef, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0x70, 0x7f, 0xff, 0xff,
- 0xad, 0xff, 0xff, 0xf3, 0xa, 0xff, 0xff, 0xff,
- 0xf6, 0x7, 0xff, 0xff, 0xf9, 0x3f, 0xff, 0xff,
- 0x60, 0x5f, 0xff, 0xff, 0xff, 0x10, 0xaf, 0xff,
- 0xfe, 0x10, 0x8f, 0xff, 0xfc, 0x0, 0xaf, 0xff,
- 0xff, 0x60, 0x1f, 0xff, 0xff, 0x50, 0x0, 0xaf,
- 0xff, 0xf6, 0x0, 0x6c, 0xdb, 0x40, 0xa, 0xff,
- 0xff, 0x70, 0x0, 0x0, 0xaf, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xfc, 0x52, 0x12, 0x6d, 0xff,
- 0xfe, 0x40, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x5a, 0xde, 0xfe, 0xd9,
- 0x50, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F070 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x70,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xd2, 0x0, 0x0, 0x0,
- 0x24, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xef, 0xff, 0x60, 0x28, 0xcf, 0xff, 0xff,
- 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b,
- 0xff, 0xfc, 0xff, 0xff, 0xec, 0xdf, 0xff, 0xfe,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xa3, 0x0, 0x0, 0x6e, 0xff, 0xfc, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x70,
- 0x15, 0x40, 0x1, 0xdf, 0xff, 0xe3, 0x0, 0x0,
- 0x0, 0x1, 0x0, 0x1c, 0xff, 0xfb, 0x1f, 0xfe,
- 0x50, 0x2f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x7e,
- 0x30, 0x0, 0x9f, 0xff, 0xef, 0xff, 0xf3, 0x8,
- 0xff, 0xff, 0xd0, 0x0, 0x2, 0xff, 0xf6, 0x0,
- 0x5, 0xff, 0xff, 0xff, 0xfa, 0x3, 0xff, 0xff,
- 0xf8, 0x0, 0x8, 0xff, 0xff, 0xa0, 0x0, 0x2d,
- 0xff, 0xff, 0xfd, 0x1, 0xff, 0xff, 0xff, 0x0,
- 0x6, 0xff, 0xff, 0xfa, 0x0, 0x0, 0xaf, 0xff,
- 0xfb, 0x2, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xdf,
- 0xff, 0xfd, 0x0, 0x0, 0x6, 0xff, 0xff, 0x55,
- 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2f, 0xff, 0xff,
- 0x40, 0x0, 0x0, 0x3d, 0xff, 0xfe, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x4, 0xff, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfb, 0x10, 0x0, 0x0,
- 0x7, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xdf, 0xff, 0xe8, 0x31, 0x20, 0x0, 0x3e,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xef, 0xff, 0xff, 0xfb, 0x0, 0x1, 0xbf, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c,
- 0xef, 0xfd, 0x80, 0x0, 0x8, 0xff, 0xfd, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4e, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xcf, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0x60,
-
- /* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1d, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0xfd, 0x88, 0x8f, 0xff, 0xe0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x80,
- 0x0, 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x0, 0xd, 0xff,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
- 0xff, 0xff, 0xa0, 0x0, 0xef, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfb,
- 0x0, 0xf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0xfd, 0x0, 0x1f, 0xff, 0xff, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff,
- 0xfd, 0xcd, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0,
- 0x0, 0xd, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x6f,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x7, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0xbf, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x17,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x90, 0x2, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x90, 0x0,
-
- /* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3c, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf5,
- 0x0, 0x12, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x22, 0x9f, 0xff, 0x50, 0xff, 0xff, 0xfe, 0x20,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf5, 0xff,
- 0xff, 0xff, 0xe2, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x45, 0x55, 0xbf,
- 0xff, 0x60, 0xaf, 0xff, 0xd5, 0xaf, 0xff, 0x80,
- 0x0, 0x0, 0xb, 0xf8, 0xa, 0xff, 0xfe, 0x10,
- 0x8f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x70, 0x9f,
- 0xff, 0xe2, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf3, 0x10,
- 0x0, 0x2a, 0x30, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0x41, 0xda, 0x0, 0x7f, 0xf3, 0x0, 0x0,
- 0x0, 0x5f, 0xff, 0xf4, 0xd, 0xff, 0x90, 0x8f,
- 0xff, 0x30, 0xef, 0xff, 0xff, 0xff, 0x50, 0x2e,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff,
- 0xf6, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xff, 0xfa, 0x67, 0x77, 0x75, 0x0, 0x0,
- 0x0, 0x3, 0x77, 0xbf, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0,
-
- /* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x4e, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x70,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xff, 0xfc, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xfa, 0x5, 0xff, 0xff, 0x70,
- 0x0, 0x0, 0x4f, 0xff, 0xfa, 0x0, 0x5, 0xff,
- 0xff, 0x70, 0x0, 0x4f, 0xff, 0xf9, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0x70, 0x3f, 0xff, 0xf9, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0x7a, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x2e,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x50, 0x25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x40,
-
- /* U+F078 "" */
- 0x9, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xcb, 0x18, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xfc, 0x9f, 0xff, 0xe3, 0x0, 0x0,
- 0x0, 0x1, 0xcf, 0xff, 0xd0, 0xbf, 0xff, 0xe3,
- 0x0, 0x0, 0x1, 0xcf, 0xff, 0xd1, 0x0, 0xbf,
- 0xff, 0xe3, 0x0, 0x1, 0xcf, 0xff, 0xd1, 0x0,
- 0x0, 0xbf, 0xff, 0xe3, 0x1, 0xcf, 0xff, 0xd1,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe4, 0xcf, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
- 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xd1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x61, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F079 "" */
- 0x0, 0x0, 0x27, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xef, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xfd,
- 0x10, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xd1, 0x3f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0,
- 0x2e, 0xff, 0xff, 0xff, 0xfd, 0x15, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xef, 0xf1, 0x0, 0x0, 0xdf, 0xfb,
- 0xef, 0xdc, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xf1, 0x0, 0x0, 0x9f, 0xc0, 0xef, 0xd1,
- 0xdf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf1,
- 0x0, 0x0, 0x3, 0x0, 0xef, 0xd0, 0x3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0x50, 0xaf, 0xf1,
- 0x19, 0x30, 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf6, 0xaf, 0xf3, 0xdf, 0xe0,
- 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xff, 0xef, 0xfe, 0xff, 0xd0, 0x0, 0x0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x17, 0xff,
- 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x6f, 0xff, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x6b, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xba, 0x30, 0x6, 0xff, 0xfc, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xc1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x0, 0x0, 0x0,
-
- /* U+F07B "" */
- 0x5, 0x78, 0x88, 0x88, 0x71, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xfd,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcc,
- 0xcc, 0xcc, 0xcb, 0x91, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe4,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xfc,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x11, 0x11, 0xef,
- 0xff, 0xf9, 0x11, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xe0, 0xdf, 0xff, 0xf8, 0xe,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf3, 0x26,
- 0x66, 0x50, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x52, 0x22, 0x25, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0x6e, 0xb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xaf,
- 0x5d, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb,
-
- /* U+F095 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xc8, 0x51, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xdf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x5, 0xb8, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x1, 0x8e, 0xff,
- 0xf6, 0x0, 0x8, 0xff, 0xff, 0xf6, 0x0, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xf4, 0x4d, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xb5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0xb9,
- 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F0C4 "" */
- 0x1, 0x8c, 0xda, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x20, 0x0, 0x1d, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0x80, 0xaf, 0xff, 0xff, 0xfd,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xf1, 0xef, 0xe1,
- 0xc, 0xff, 0x20, 0x0, 0xbf, 0xff, 0xfe, 0x30,
- 0xff, 0xd0, 0xa, 0xff, 0x30, 0xb, 0xff, 0xff,
- 0xe3, 0x0, 0xbf, 0xfc, 0xbf, 0xff, 0x10, 0xcf,
- 0xff, 0xfe, 0x30, 0x0, 0x3f, 0xff, 0xff, 0xff,
- 0xdc, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x3, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0,
- 0x0, 0x1, 0x2d, 0xff, 0xff, 0xff, 0xe2, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1, 0x8c,
- 0xef, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0x33, 0xef,
- 0xff, 0xfc, 0x0, 0x0, 0xef, 0xe1, 0xc, 0xff,
- 0x20, 0x2e, 0xff, 0xff, 0xc1, 0x0, 0xff, 0xd0,
- 0xa, 0xff, 0x30, 0x2, 0xef, 0xff, 0xfc, 0x10,
- 0xbf, 0xfc, 0xbf, 0xff, 0x0, 0x0, 0x1d, 0xff,
- 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xf7, 0x0, 0x0,
- 0x1, 0xcf, 0xff, 0xd1, 0x3, 0xdf, 0xfe, 0x60,
- 0x0, 0x0, 0x0, 0x4, 0x75, 0x0, 0x0, 0x1,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0C5 "" */
- 0x0, 0x0, 0x0, 0x12, 0x22, 0x22, 0x22, 0x1,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xfe, 0xe, 0x70, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xfe, 0xe, 0xf7, 0x0, 0x0, 0x0,
- 0x5, 0xff, 0xff, 0xff, 0xfe, 0xe, 0xff, 0x70,
- 0x1, 0x22, 0x5, 0xff, 0xff, 0xff, 0xfe, 0xe,
- 0xff, 0xf2, 0xdf, 0xff, 0x25, 0xff, 0xff, 0xff,
- 0xff, 0x10, 0x0, 0x0, 0xff, 0xff, 0x25, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0xff, 0xff, 0x24, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf2, 0xff, 0xff, 0x50, 0x56,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x50, 0xff, 0xff,
- 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0x0, 0x0, 0x8b, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xb7, 0x0, 0x0, 0x0,
-
- /* U+F0C7 "" */
- 0x2a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x91,
- 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x10, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfd, 0x10,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
- 0xff, 0xd0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xff, 0xff, 0xf5, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0xff, 0xf6, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xf6,
- 0xff, 0xfb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xff,
- 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
- 0xff, 0xfe, 0x51, 0x3b, 0xff, 0xff, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0xcf, 0xff,
- 0xff, 0xf6, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf6, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x4, 0xff, 0xff, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xda, 0xbf, 0xff, 0xff,
- 0xff, 0xf6, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0,
-
- /* U+F0E7 "" */
- 0x0, 0x3, 0x44, 0x44, 0x43, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x2f, 0xff,
- 0xff, 0xff, 0x70, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0xff, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xfe, 0x66, 0x66, 0x51, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa0, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x40, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb0, 0x0, 0x1, 0x22, 0x22, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0xe, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0x90, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0EA "" */
- 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8c, 0xcc, 0xdf, 0xbc,
- 0xfc, 0xcc, 0xc6, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xfe, 0x1, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x92,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xfc, 0x1, 0x22, 0x22, 0x22, 0x1, 0x0, 0x0,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xfc, 0xe,
- 0x70, 0x0, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
- 0xfc, 0xe, 0xf7, 0x0, 0xff, 0xff, 0xf8, 0x1f,
- 0xff, 0xff, 0xfc, 0xe, 0xff, 0x70, 0xff, 0xff,
- 0xf8, 0x1f, 0xff, 0xff, 0xfc, 0xe, 0xff, 0xf2,
- 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xfe, 0x10,
- 0x0, 0x0, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf8, 0x1f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x58, 0x88, 0x84, 0x1f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x8,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x80,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xef, 0xf9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xfb, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x70, 0x0, 0x0, 0x4f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x5f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0x2, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x10,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x6c, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7b, 0x81, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F11C "" */
- 0x19, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xb7, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0x0,
- 0x8f, 0x10, 0x7f, 0x10, 0x5f, 0x30, 0x3f, 0x50,
- 0x1f, 0xfc, 0xff, 0xc0, 0x7, 0xe0, 0x6, 0xf0,
- 0x4, 0xf2, 0x2, 0xf4, 0x0, 0xff, 0xcf, 0xfc,
- 0x0, 0x8f, 0x0, 0x7f, 0x10, 0x5f, 0x30, 0x3f,
- 0x50, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf,
- 0xff, 0xfe, 0x66, 0xbf, 0x66, 0xaf, 0x76, 0x8f,
- 0x86, 0x7f, 0xff, 0xfc, 0xff, 0xff, 0xd0, 0x6,
- 0xf0, 0x5, 0xf1, 0x3, 0xf3, 0x1, 0xff, 0xff,
- 0xcf, 0xff, 0xfd, 0x0, 0x7f, 0x0, 0x5f, 0x10,
- 0x3f, 0x30, 0x1f, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0xfe, 0x66, 0xcf, 0x76, 0x66, 0x66,
- 0x66, 0x66, 0x9f, 0xa6, 0x7f, 0xfc, 0xff, 0xc0,
- 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf4,
- 0x0, 0xff, 0xcf, 0xfc, 0x0, 0x7e, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2f, 0x40, 0xf, 0xfc, 0xff,
- 0xfc, 0xce, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
- 0xfd, 0xcc, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x10,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6d, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x7e, 0xff, 0xff, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x9f, 0xff,
- 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x5, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0,
- 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x90, 0x0, 0x4, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0,
- 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1, 0x22, 0x22,
- 0x22, 0x7f, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xb8, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F15B "" */
- 0x37, 0x77, 0x77, 0x77, 0x74, 0x5, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0xfa, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf, 0xfa,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0xff,
- 0xfa, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf,
- 0xff, 0xfa, 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xe3, 0x22, 0x22, 0x21, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x40,
-
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x26, 0x9c, 0xde, 0xdc, 0xb8, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x8d,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xdb, 0x99, 0x9a,
- 0xcf, 0xff, 0xff, 0xff, 0xb1, 0x0, 0xa, 0xff,
- 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x39,
- 0xef, 0xff, 0xfe, 0x40, 0xcf, 0xff, 0xfb, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0xff, 0xf4, 0xaf, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xf2,
- 0xa, 0xd2, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xed,
- 0xb6, 0x20, 0x0, 0x0, 0x8e, 0x30, 0x0, 0x0,
- 0x0, 0x6, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfb,
- 0x87, 0x89, 0xdf, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xe6, 0x0, 0x0, 0x0,
- 0x3, 0xaf, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xba, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xcf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F240 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3,
- 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xfa,
- 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x7,
- 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0x92, 0x0,
-
- /* U+F241 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
- 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x3,
- 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x1f, 0xfa,
- 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
- 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x86, 0x0, 0x0, 0x7,
- 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0x92, 0x0,
-
- /* U+F242 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
- 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
- 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
- 0x88, 0x88, 0x85, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0x92, 0x0,
-
- /* U+F243 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
- 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
- 0xff, 0xc0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
- 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
- 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0x92, 0x0,
-
- /* U+F244 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x7f, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0x92, 0x0,
-
- /* U+F287 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18,
- 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x12, 0xdf, 0xfe, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0x76, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xf6, 0x0, 0x4c,
- 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33,
- 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xd2, 0x0,
- 0x4f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0x40, 0x0, 0xaf, 0xff, 0xfc, 0x1, 0xde, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0x10,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xdf, 0xff,
- 0xff, 0x88, 0x88, 0x9f, 0xe8, 0x88, 0x88, 0x88,
- 0x88, 0x8f, 0xff, 0x91, 0x5f, 0xff, 0xf8, 0x0,
- 0x0, 0x7, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xc3, 0x0, 0x4, 0xbb, 0x60, 0x0, 0x0, 0x0,
- 0xeb, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x30,
- 0x8, 0x88, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1e, 0xc1, 0x2f, 0xff,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x27, 0x9f, 0xff, 0xf7, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F293 "" */
- 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x9e, 0xff, 0xff, 0xc7, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xdf, 0xff, 0xfd,
- 0x20, 0x0, 0x8, 0xff, 0xff, 0xf2, 0xdf, 0xff,
- 0xfe, 0x0, 0x3, 0xff, 0xff, 0xff, 0x11, 0xdf,
- 0xff, 0xf9, 0x0, 0xaf, 0xff, 0xff, 0xf1, 0x1,
- 0xef, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0x12,
- 0x12, 0xef, 0xff, 0x53, 0xff, 0xf4, 0x7f, 0xf1,
- 0x3d, 0x13, 0xff, 0xf8, 0x6f, 0xff, 0x40, 0x7f,
- 0x13, 0xf5, 0xc, 0xff, 0xb8, 0xff, 0xff, 0x40,
- 0x71, 0x35, 0xa, 0xff, 0xfd, 0x9f, 0xff, 0xff,
- 0x40, 0x0, 0x8, 0xff, 0xff, 0xea, 0xff, 0xff,
- 0xff, 0x30, 0x6, 0xff, 0xff, 0xfe, 0xaf, 0xff,
- 0xff, 0xf4, 0x0, 0x6f, 0xff, 0xff, 0xe9, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x7f, 0xff, 0xfe, 0x8f,
- 0xff, 0xf4, 0x6, 0x13, 0x50, 0x8f, 0xff, 0xd6,
- 0xff, 0xf4, 0x7, 0xf1, 0x3f, 0x40, 0x9f, 0xfb,
- 0x3f, 0xff, 0x47, 0xff, 0x13, 0xd1, 0x1d, 0xff,
- 0x90, 0xff, 0xff, 0xff, 0xf1, 0x21, 0x1d, 0xff,
- 0xf5, 0xa, 0xff, 0xff, 0xff, 0x20, 0x2e, 0xff,
- 0xff, 0x0, 0x2f, 0xff, 0xff, 0xf2, 0x2e, 0xff,
- 0xff, 0x80, 0x0, 0x6f, 0xff, 0xff, 0x4e, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff,
- 0xff, 0xc2, 0x0, 0x0, 0x0, 0x5, 0x9c, 0xdd,
- 0xc9, 0x40, 0x0, 0x0,
-
- /* U+F2ED "" */
- 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xe1, 0x0, 0x0, 0x0, 0xac, 0xcc, 0xcd, 0xff,
- 0xff, 0xff, 0xfd, 0xcc, 0xcc, 0xc1, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xca, 0x0, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
- 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0xa, 0xff, 0xe1, 0xef, 0xf2, 0xcf,
- 0xf3, 0xbf, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
- 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
- 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0,
- 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f,
- 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf,
- 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
- 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
- 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0,
- 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f,
- 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf,
- 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
- 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
- 0xe1, 0xef, 0xf1, 0xcf, 0xf3, 0xaf, 0xfe, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x0, 0x0, 0x7b, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcb, 0x91, 0x0,
-
- /* U+F304 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0xd1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xc, 0xff, 0xff,
- 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xf4, 0xc, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xf4, 0xc, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0xf4, 0xc, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xf4, 0xc, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
- 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xb9, 0x75,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F55A "" */
- 0x0, 0x0, 0x0, 0x2, 0x68, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x75, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0x80, 0xcf,
- 0xff, 0xc0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x5f,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0xc, 0xfc, 0x0,
- 0xc, 0xff, 0xff, 0xf8, 0x5, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0x90, 0x0, 0x5f, 0xff,
- 0xff, 0xf8, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf5, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xf8,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xf8, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x10, 0x0, 0xcf, 0xff,
- 0xff, 0xf8, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xfd,
- 0x0, 0x5, 0xf5, 0x0, 0xd, 0xff, 0xff, 0xf8,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x5f,
- 0xff, 0x50, 0x2e, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xf8,
- 0xef, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x9, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50,
-
- /* U+F7C2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xfe,
- 0x70, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x50, 0x2, 0xef, 0xbb, 0xfc, 0xbf, 0xdb,
- 0xbf, 0xf9, 0x2, 0xef, 0xd0, 0x2f, 0x40, 0xe7,
- 0x1, 0xff, 0xa2, 0xef, 0xfd, 0x2, 0xf4, 0xe,
- 0x70, 0x1f, 0xfa, 0xef, 0xff, 0xd0, 0x2f, 0x40,
- 0xe7, 0x1, 0xff, 0xaf, 0xff, 0xfd, 0x24, 0xf6,
- 0x2e, 0x82, 0x3f, 0xfa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x9, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd5, 0x0,
-
- /* U+F8A2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1e, 0xff, 0x10, 0x0, 0x3, 0xed, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xff, 0xf1, 0x0, 0x4,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xff, 0x10, 0x5, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0xff, 0xf1, 0x6, 0xff, 0xff,
- 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x9f, 0xff,
- 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd0, 0x2, 0xef, 0xff, 0xf1, 0x11,
- 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x0, 0x2,
- 0xdf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xdf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 87, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 91, .box_w = 4, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 32, .adv_w = 113, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 47, .adv_w = 219, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 151, .adv_w = 198, .box_w = 11, .box_h = 21, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 267, .adv_w = 258, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 387, .adv_w = 219, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 491, .adv_w = 61, .box_w = 2, .box_h = 6, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 497, .adv_w = 120, .box_w = 7, .box_h = 24, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 581, .adv_w = 122, .box_w = 7, .box_h = 24, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 665, .adv_w = 152, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 715, .adv_w = 200, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 787, .adv_w = 69, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 799, .adv_w = 97, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 805, .adv_w = 93, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 811, .adv_w = 145, .box_w = 9, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 888, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 976, .adv_w = 198, .box_w = 7, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1032, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1120, .adv_w = 198, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1200, .adv_w = 198, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1296, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1384, .adv_w = 197, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1472, .adv_w = 198, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1568, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1656, .adv_w = 198, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1736, .adv_w = 85, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1754, .adv_w = 74, .box_w = 4, .box_h = 15, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 1784, .adv_w = 179, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 1834, .adv_w = 193, .box_w = 10, .box_h = 6, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 1864, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 1914, .adv_w = 166, .box_w = 10, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1994, .adv_w = 316, .box_w = 18, .box_h = 21, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 2183, .adv_w = 230, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2303, .adv_w = 219, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2399, .adv_w = 229, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2503, .adv_w = 231, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2607, .adv_w = 200, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2695, .adv_w = 195, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2783, .adv_w = 240, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2887, .adv_w = 251, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2991, .adv_w = 96, .box_w = 4, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3023, .adv_w = 194, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3111, .adv_w = 221, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3215, .adv_w = 189, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3303, .adv_w = 307, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3439, .adv_w = 251, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3543, .adv_w = 242, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3647, .adv_w = 222, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3751, .adv_w = 242, .box_w = 13, .box_h = 19, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 3875, .adv_w = 217, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3979, .adv_w = 209, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4083, .adv_w = 210, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4187, .adv_w = 228, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4283, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4395, .adv_w = 312, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4555, .adv_w = 221, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4667, .adv_w = 211, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4779, .adv_w = 211, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4883, .adv_w = 93, .box_w = 5, .box_h = 22, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 4938, .adv_w = 144, .box_w = 9, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5015, .adv_w = 93, .box_w = 5, .box_h = 22, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 5070, .adv_w = 147, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 5106, .adv_w = 159, .box_w = 10, .box_h = 2, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5116, .adv_w = 109, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 14},
- {.bitmap_index = 5125, .adv_w = 191, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5185, .adv_w = 197, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5273, .adv_w = 184, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5339, .adv_w = 199, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5419, .adv_w = 186, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5479, .adv_w = 122, .box_w = 8, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5547, .adv_w = 197, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 5632, .adv_w = 194, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5712, .adv_w = 85, .box_w = 3, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5736, .adv_w = 84, .box_w = 5, .box_h = 21, .ofs_x = -1, .ofs_y = -5},
- {.bitmap_index = 5789, .adv_w = 178, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5877, .adv_w = 85, .box_w = 3, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5901, .adv_w = 309, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6003, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6063, .adv_w = 201, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6135, .adv_w = 197, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 6229, .adv_w = 200, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 6314, .adv_w = 119, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6356, .adv_w = 182, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6416, .adv_w = 115, .box_w = 7, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6469, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6529, .adv_w = 171, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6595, .adv_w = 265, .box_w = 17, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6697, .adv_w = 174, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6763, .adv_w = 167, .box_w = 11, .box_h = 17, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 6857, .adv_w = 174, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6923, .adv_w = 119, .box_w = 8, .box_h = 22, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7011, .adv_w = 86, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 7040, .adv_w = 119, .box_w = 7, .box_h = 22, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7117, .adv_w = 239, .box_w = 13, .box_h = 4, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 7143, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 7408, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7595, .adv_w = 352, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7815, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8002, .adv_w = 242, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8130, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 8383, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 8636, .adv_w = 396, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8886, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 9139, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9352, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 9605, .adv_w = 176, .box_w = 11, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 9704, .adv_w = 264, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 9857, .adv_w = 396, .box_w = 25, .box_h = 22, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 10132, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10319, .adv_w = 308, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 10477, .adv_w = 308, .box_w = 20, .box_h = 24, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 10717, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10917, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 11117, .adv_w = 308, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 11275, .adv_w = 308, .box_w = 21, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 11485, .adv_w = 220, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11605, .adv_w = 220, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11725, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 11925, .adv_w = 308, .box_w = 20, .box_h = 5, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 11975, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12188, .adv_w = 440, .box_w = 28, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 12510, .adv_w = 396, .box_w = 27, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 12821, .adv_w = 352, .box_w = 22, .box_h = 21, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13052, .adv_w = 308, .box_w = 19, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 13166, .adv_w = 308, .box_w = 19, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 13280, .adv_w = 440, .box_w = 28, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 13532, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 13719, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 13972, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 14237, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14437, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 14667, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14867, .adv_w = 220, .box_w = 15, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 15040, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 15270, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 15500, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 15713, .adv_w = 352, .box_w = 24, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 15989, .adv_w = 264, .box_w = 17, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 16185, .adv_w = 440, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16479, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 16689, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 16899, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 17109, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 17319, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 17529, .adv_w = 440, .box_w = 28, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 17781, .adv_w = 308, .box_w = 17, .box_h = 23, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 17977, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 18207, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 18472, .adv_w = 440, .box_w = 28, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 18710, .adv_w = 264, .box_w = 17, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 18906, .adv_w = 354, .box_w = 23, .box_h = 14, .ofs_x = 0, .ofs_y = 1}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -18, 0, 0, 0,
- 0, 0, 0, 0, -21, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -9, -10, 0, -3, -10, 0, -14, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 3, 0,
- 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -29, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -38, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -21, 0, 0, 0, 0, 0, 0, -10,
- 0, -2, 0, 0, -22, -3, -15, -12,
- 0, -16, 0, 0, 0, 0, 0, 0,
- -2, 0, 0, -3, -2, -9, -6, 0,
- 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -5,
- 0, -4, 0, 0, -9, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -5, 0, 0, 0, 0, 0,
- 0, -2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -3,
- 0, 0, 0, 0, 0, -18, 0, 0,
- 0, -4, 0, 0, 0, -5, 0, -4,
- 0, -4, -7, -4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0,
- 0, -3, -3, 0, -3, 0, 0, 0,
- -3, -4, -4, 0, 0, 0, 0, 0,
- 0, 0, 0, -40, 0, 0, 0, -29,
- 0, -45, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, -6, -4, 0, 0, -4,
- -4, 0, 0, -4, -4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, -5, 0,
- 0, 0, 3, -5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -11, 0, 0,
- 0, -5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, -4,
- -5, 0, 0, 0, -4, -7, -11, 0,
- 0, 0, 0, -58, 0, 0, 0, 0,
- 0, 0, 0, 3, -11, 0, 0, -47,
- -9, -30, -25, 0, -41, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -8,
- -23, -16, 0, 0, 0, 0, 0, 0,
- 0, 0, -56, 0, 0, 0, -24, 0,
- -34, 0, 0, 0, 0, 0, -5, 0,
- -4, 0, -2, -2, 0, 0, -2, 0,
- 0, 2, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -7, 0, -5,
- -3, 0, -6, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -14, 0, -3, 0, 0, -8, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -7, 0,
- 0, 0, 0, -37, -40, 0, 0, -14,
- -5, -41, -3, 3, 0, 3, 3, 0,
- 3, 0, 0, -19, -17, 0, -19, -17,
- -13, -20, 0, -16, -12, -10, -13, -10,
- 0, 0, 0, 0, 3, 0, -39, -6,
- 0, 0, -13, -2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, -8, -8,
- 0, 0, -8, -5, 0, 0, -5, -2,
- 0, 0, 0, 3, 0, 0, 0, 3,
- 0, -21, -10, 0, 0, -7, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0,
- 2, -6, -5, 0, 0, -5, -4, 0,
- 0, -3, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, -8, 0, 0,
- 0, -4, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- -4, 0, 0, 0, -4, -5, 0, 0,
- 0, 0, 0, 0, -5, 3, -8, -36,
- -9, 0, 0, -16, -5, -16, -3, 3,
- -16, 3, 3, 2, 3, 0, 3, -13,
- -11, -4, -7, -11, -7, -10, -4, -7,
- -3, 0, -4, -5, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, -4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -4, 0, 0, -4, 0,
- 0, 0, -3, -5, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -3, 0, 0, -3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, -5,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -2, 0, -3, -3,
- 0, 0, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -2, 0, 0, 0, 0, 0,
- 3, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, -4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, -18, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -23, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, 0,
- -4, -3, 0, 0, 3, 0, 0, 0,
- -21, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -7, -3, 3, 0, -3, 0, 0, 9,
- 0, 3, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -3,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, -18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, -2,
- 2, 0, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -21, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -3, 0, 0,
- -3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 4,
- .kern_classes = 1,
- .bitmap_format = 0
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_22 = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 26, /*The maximum line height required by the font*/
- .base_line = 6, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_NONE,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_22*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_28.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_28.c
deleted file mode 100644
index f3e58bb3..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_28.c
+++ /dev/null
@@ -1,4609 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 28 px
- * Bpp: 4
- * Opts: --no-compress --no-prefilter --bpp 4 --size 28 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_28.c --force-fast-kern-format
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_28
-#define LV_FONT_ROBOTO_28 1
-#endif
-
-#if LV_FONT_ROBOTO_28
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0xbf, 0xe0, 0xbf, 0xe0, 0xbf, 0xe0, 0xaf, 0xe0,
- 0xaf, 0xe0, 0xaf, 0xd0, 0xaf, 0xd0, 0x9f, 0xd0,
- 0x9f, 0xd0, 0x9f, 0xc0, 0x9f, 0xc0, 0x9f, 0xc0,
- 0x8f, 0xc0, 0x8f, 0xc0, 0x13, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x5d, 0x90, 0xcf, 0xf2, 0x6f, 0xb0,
-
- /* U+22 "\"" */
- 0x2f, 0xc0, 0x7f, 0x72, 0xfc, 0x7, 0xf7, 0x2f,
- 0xb0, 0x7f, 0x62, 0xfa, 0x7, 0xf5, 0x2f, 0x80,
- 0x7f, 0x42, 0xf7, 0x7, 0xf2, 0x1b, 0x40, 0x5b,
- 0x10,
-
- /* U+23 "#" */
- 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x8f, 0x70,
- 0x0, 0x0, 0x0, 0x4, 0xfb, 0x0, 0xb, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0xef,
- 0x10, 0x0, 0x0, 0x0, 0xa, 0xf5, 0x0, 0x1f,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x20, 0x4,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0,
- 0x7f, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x30, 0xe, 0xee, 0xff, 0xfe,
- 0xee, 0xff, 0xee, 0xe3, 0x0, 0x0, 0x9, 0xf5,
- 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xdf,
- 0x10, 0x4, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xe0, 0x0, 0x7f, 0x70, 0x0, 0x0, 0x0, 0x4,
- 0xfa, 0x0, 0xb, 0xf3, 0x0, 0x0, 0xe, 0xee,
- 0xef, 0xfe, 0xee, 0xff, 0xee, 0xe2, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0xdf, 0x10, 0x4, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xe0, 0x0, 0x7f, 0x70, 0x0, 0x0,
- 0x0, 0x3, 0xfb, 0x0, 0xa, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0x80, 0x0, 0xdf, 0x20, 0x0,
- 0x0, 0x0, 0x9, 0xf5, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0x20, 0x3, 0xfc, 0x0,
- 0x0, 0x0,
-
- /* U+24 "$" */
- 0x0, 0x0, 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0, 0x1, 0x9e,
- 0xff, 0xfa, 0x30, 0x0, 0x0, 0x3f, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0x1, 0xef, 0xf7, 0x32, 0x6f,
- 0xff, 0x20, 0x6, 0xff, 0x50, 0x0, 0x4, 0xff,
- 0x90, 0xa, 0xfe, 0x0, 0x0, 0x0, 0xcf, 0xe0,
- 0xb, 0xfd, 0x0, 0x0, 0x0, 0x9f, 0xf0, 0x9,
- 0xff, 0x10, 0x0, 0x0, 0x25, 0x50, 0x5, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xfd,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff,
- 0xa3, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff,
- 0xb1, 0x0, 0x0, 0x0, 0x0, 0x39, 0xff, 0xfe,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x5b,
- 0xb0, 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x6f, 0xf2,
- 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x2f, 0xf8, 0x0,
- 0x0, 0x0, 0xaf, 0xf0, 0xc, 0xff, 0x60, 0x0,
- 0x8, 0xff, 0xa0, 0x2, 0xff, 0xfe, 0xcd, 0xff,
- 0xfe, 0x10, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xa1,
- 0x0, 0x0, 0x0, 0x16, 0xff, 0x51, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0x0, 0x0,
-
- /* U+25 "%" */
- 0x0, 0x7d, 0xfd, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xeb, 0xef, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0xcf, 0x40,
- 0x0, 0x9, 0x20, 0x0, 0x8, 0xf6, 0x0, 0x6,
- 0xf8, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x9f, 0x50,
- 0x0, 0x4f, 0x90, 0x2, 0xfd, 0x0, 0x0, 0x8,
- 0xf6, 0x0, 0x5, 0xf8, 0x0, 0xbf, 0x40, 0x0,
- 0x0, 0x4f, 0xc0, 0x0, 0xcf, 0x40, 0x6f, 0xa0,
- 0x0, 0x0, 0x0, 0xaf, 0xeb, 0xdf, 0xb0, 0x1e,
- 0xe1, 0x0, 0x0, 0x0, 0x0, 0x7d, 0xfe, 0x70,
- 0xa, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9f, 0x60, 0x1a, 0xef,
- 0xc4, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x1e,
- 0xfc, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0xd, 0xf2,
- 0x9, 0xf8, 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x8,
- 0xf8, 0x0, 0xdf, 0x10, 0x0, 0xbf, 0x40, 0x0,
- 0x2, 0xfd, 0x0, 0xe, 0xf0, 0x0, 0x9, 0xf4,
- 0x0, 0x0, 0xcf, 0x30, 0x0, 0xdf, 0x10, 0x0,
- 0xbf, 0x40, 0x0, 0x1d, 0x90, 0x0, 0x9, 0xf8,
- 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1e, 0xfc, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1a, 0xef, 0xc4, 0x0,
-
- /* U+26 "&" */
- 0x0, 0x0, 0x7d, 0xff, 0xc6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf9, 0x22, 0x9f, 0xf5, 0x0,
- 0x0, 0x0, 0xd, 0xfc, 0x0, 0x0, 0xcf, 0xa0,
- 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0xa, 0xfa,
- 0x0, 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0xef,
- 0x70, 0x0, 0x0, 0x0, 0x9f, 0xf2, 0x1, 0xcf,
- 0xe0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xc5, 0xef,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0x50, 0x0, 0x2, 0x20, 0x0, 0x6f, 0xfb,
- 0x2c, 0xff, 0x30, 0x3, 0xff, 0x10, 0x1f, 0xfc,
- 0x0, 0x1d, 0xfe, 0x20, 0x5f, 0xf0, 0x7, 0xff,
- 0x20, 0x0, 0x2e, 0xfd, 0x19, 0xfd, 0x0, 0x9f,
- 0xf0, 0x0, 0x0, 0x4f, 0xfc, 0xff, 0x80, 0x8,
- 0xff, 0x10, 0x0, 0x0, 0x5f, 0xff, 0xf1, 0x0,
- 0x4f, 0xf9, 0x0, 0x0, 0x0, 0xcf, 0xfa, 0x0,
- 0x0, 0xbf, 0xfa, 0x31, 0x15, 0xcf, 0xff, 0xf5,
- 0x0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xf8, 0xcf,
- 0xf2, 0x0, 0x0, 0x5a, 0xef, 0xfd, 0x82, 0x2,
- 0xff, 0xd1,
-
- /* U+27 "'" */
- 0x9f, 0x79, 0xf7, 0x9f, 0x69, 0xf5, 0x9f, 0x49,
- 0xf3, 0x48, 0x10,
-
- /* U+28 "(" */
- 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0xa,
- 0xc0, 0x0, 0x0, 0xb, 0xfb, 0x0, 0x0, 0x9,
- 0xfc, 0x0, 0x0, 0x4, 0xff, 0x10, 0x0, 0x0,
- 0xdf, 0x70, 0x0, 0x0, 0x6f, 0xe0, 0x0, 0x0,
- 0xd, 0xf9, 0x0, 0x0, 0x2, 0xff, 0x30, 0x0,
- 0x0, 0x7f, 0xf0, 0x0, 0x0, 0xb, 0xfb, 0x0,
- 0x0, 0x0, 0xef, 0x90, 0x0, 0x0, 0xf, 0xf7,
- 0x0, 0x0, 0x2, 0xff, 0x60, 0x0, 0x0, 0x2f,
- 0xf5, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0,
- 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff, 0x70, 0x0,
- 0x0, 0xe, 0xf9, 0x0, 0x0, 0x0, 0xbf, 0xb0,
- 0x0, 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x2f,
- 0xf3, 0x0, 0x0, 0x0, 0xdf, 0x80, 0x0, 0x0,
- 0x6, 0xfe, 0x0, 0x0, 0x0, 0xd, 0xf6, 0x0,
- 0x0, 0x0, 0x4f, 0xe1, 0x0, 0x0, 0x0, 0x9f,
- 0xb0, 0x0, 0x0, 0x0, 0xbf, 0xa0, 0x0, 0x0,
- 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x20,
-
- /* U+29 ")" */
- 0x1, 0x0, 0x0, 0x0, 0x4f, 0x40, 0x0, 0x0,
- 0x3e, 0xf5, 0x0, 0x0, 0x3, 0xff, 0x20, 0x0,
- 0x0, 0x8f, 0xd0, 0x0, 0x0, 0xe, 0xf7, 0x0,
- 0x0, 0x7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0x60,
- 0x0, 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x7f, 0xf0,
- 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0xf, 0xf7,
- 0x0, 0x0, 0xe, 0xf9, 0x0, 0x0, 0xd, 0xfb,
- 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0xd, 0xfb,
- 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0xe, 0xf9,
- 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, 0x3f, 0xf4,
- 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0xaf, 0xb0,
- 0x0, 0x0, 0xff, 0x60, 0x0, 0x5, 0xfe, 0x0,
- 0x0, 0xd, 0xf7, 0x0, 0x0, 0x6f, 0xd0, 0x0,
- 0x2, 0xff, 0x30, 0x0, 0x2e, 0xf5, 0x0, 0x0,
- 0x4f, 0x50, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0,
-
- /* U+2A "*" */
- 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf0,
- 0x0, 0x0, 0x1a, 0x40, 0xe, 0xf0, 0x2, 0x81,
- 0x6f, 0xfe, 0x8e, 0xf7, 0xcf, 0xf6, 0x28, 0xdf,
- 0xff, 0xff, 0xff, 0xa4, 0x0, 0x2, 0xcf, 0xfc,
- 0x40, 0x0, 0x0, 0x4, 0xfe, 0xff, 0x20, 0x0,
- 0x0, 0x1e, 0xf5, 0x7f, 0xd0, 0x0, 0x0, 0xbf,
- 0xb0, 0xd, 0xf9, 0x0, 0x0, 0xbf, 0x10, 0x3,
- 0xfb, 0x0, 0x0, 0x3, 0x0, 0x0, 0x40, 0x0,
-
- /* U+2B "+" */
- 0x0, 0x0, 0x2, 0x77, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
- 0x0, 0x0, 0x56, 0x66, 0x69, 0xff, 0x76, 0x66,
- 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0,
- 0x0, 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20, 0x0,
- 0x0,
-
- /* U+2C "," */
- 0x4, 0xff, 0x30, 0x4f, 0xf3, 0x4, 0xff, 0x20,
- 0x7f, 0xf0, 0xc, 0xf9, 0x5, 0xff, 0x10, 0x1b,
- 0x40, 0x0,
-
- /* U+2D "-" */
- 0x1, 0x11, 0x11, 0x10, 0x8f, 0xff, 0xff, 0xf2,
- 0x8f, 0xff, 0xff, 0xf2,
-
- /* U+2E "." */
- 0x9, 0xfa, 0x0, 0xff, 0xf1, 0x9, 0xfa, 0x0,
-
- /* U+2F "/" */
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x0, 0x0,
- 0x0, 0xf, 0xf2, 0x0, 0x0, 0x0, 0x6, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0,
- 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x0, 0x9, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0x30, 0x0, 0x0,
- 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0xb, 0xf6,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x7f, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xf4,
- 0x0, 0x0, 0x0, 0x4, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xf2,
- 0x0, 0x0, 0x0, 0x6, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0x50, 0x0, 0x0, 0x0, 0x3f, 0xe0,
- 0x0, 0x0, 0x0, 0x9, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x30, 0x0, 0x0, 0x0, 0x5f, 0xc0,
- 0x0, 0x0, 0x0, 0x5, 0x84, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+30 "0" */
- 0x0, 0x2, 0x9d, 0xff, 0xc8, 0x10, 0x0, 0x0,
- 0x5f, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x2, 0xff,
- 0xd5, 0x12, 0x7f, 0xfd, 0x0, 0xa, 0xff, 0x10,
- 0x0, 0x5, 0xff, 0x50, 0xf, 0xf9, 0x0, 0x0,
- 0x0, 0xdf, 0xb0, 0x2f, 0xf5, 0x0, 0x0, 0x0,
- 0x9f, 0xe0, 0x5f, 0xf2, 0x0, 0x0, 0x0, 0x7f,
- 0xf0, 0x6f, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0xf1,
- 0x6f, 0xf1, 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f,
- 0xf1, 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f, 0xf1,
- 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f, 0xf1, 0x0,
- 0x0, 0x0, 0x6f, 0xf2, 0x5f, 0xf2, 0x0, 0x0,
- 0x0, 0x6f, 0xf1, 0x5f, 0xf3, 0x0, 0x0, 0x0,
- 0x7f, 0xf0, 0x2f, 0xf5, 0x0, 0x0, 0x0, 0x9f,
- 0xe0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0xef, 0xa0,
- 0x9, 0xff, 0x20, 0x0, 0x5, 0xff, 0x50, 0x2,
- 0xff, 0xe5, 0x11, 0x6f, 0xfc, 0x0, 0x0, 0x5f,
- 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x2, 0x9d,
- 0xff, 0xd8, 0x10, 0x0,
-
- /* U+31 "1" */
- 0x0, 0x0, 0x3, 0x9e, 0x0, 0x17, 0xdf, 0xff,
- 0x4b, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0x7a, 0xff,
- 0x99, 0x30, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
-
- /* U+32 "2" */
- 0x0, 0x4, 0xae, 0xff, 0xc8, 0x10, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0xff, 0xe3, 0x0, 0xa, 0xff,
- 0xb3, 0x12, 0x8f, 0xff, 0x10, 0x3f, 0xf9, 0x0,
- 0x0, 0x6, 0xff, 0x70, 0x8f, 0xf1, 0x0, 0x0,
- 0x0, 0xff, 0xb0, 0xbf, 0xe0, 0x0, 0x0, 0x0,
- 0xcf, 0xc0, 0x1, 0x10, 0x0, 0x0, 0x0, 0xef,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xd1, 0x0, 0x0,
- 0x0, 0x0, 0x1d, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xe2, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xff, 0x31, 0x11, 0x11, 0x11, 0x10, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb, 0x5f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb,
-
- /* U+33 "3" */
- 0x0, 0x4, 0xae, 0xfe, 0xc7, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xff, 0xfd, 0x10, 0x9, 0xff, 0xa4,
- 0x13, 0x8f, 0xfc, 0x2, 0xff, 0xa0, 0x0, 0x0,
- 0x7f, 0xf4, 0x6f, 0xf2, 0x0, 0x0, 0x1, 0xff,
- 0x83, 0x77, 0x0, 0x0, 0x0, 0xf, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x1, 0x14,
- 0xbf, 0xf6, 0x0, 0x0, 0xa, 0xff, 0xff, 0xe4,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xa1, 0x0,
- 0x0, 0x0, 0x0, 0x28, 0xff, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xfc, 0x35, 0x40, 0x0, 0x0, 0x0,
- 0xaf, 0xea, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
- 0x6f, 0xf6, 0x0, 0x0, 0x4, 0xff, 0x80, 0xdf,
- 0xf9, 0x31, 0x27, 0xef, 0xe1, 0x1, 0xdf, 0xff,
- 0xff, 0xff, 0xe3, 0x0, 0x0, 0x6b, 0xef, 0xfc,
- 0x71, 0x0,
-
- /* U+34 "4" */
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0xa, 0xfe, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xf5, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0x73, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0xa, 0xfc, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x4f, 0xf3, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0xef, 0x80, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x9, 0xfd, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x4f, 0xf3, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0xef, 0x90, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x9, 0xfd, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
- 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
-
- /* U+35 "5" */
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x5f,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x6, 0xff, 0x55,
- 0x55, 0x55, 0x55, 0x0, 0x8f, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd,
- 0xf7, 0x2, 0x33, 0x0, 0x0, 0x0, 0xff, 0xbe,
- 0xff, 0xff, 0x91, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xd1, 0x1, 0xef, 0xc3, 0x0, 0x4d, 0xff,
- 0xa0, 0x0, 0x20, 0x0, 0x0, 0xd, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0xe, 0xf9, 0x68, 0x40, 0x0, 0x0, 0x0,
- 0xff, 0x8b, 0xfc, 0x0, 0x0, 0x0, 0x4f, 0xf5,
- 0x6f, 0xf4, 0x0, 0x0, 0xc, 0xff, 0x10, 0xdf,
- 0xf7, 0x21, 0x3b, 0xff, 0x70, 0x2, 0xdf, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x7c, 0xff, 0xea,
- 0x40, 0x0,
-
- /* U+36 "6" */
- 0x0, 0x0, 0x0, 0x5a, 0xdf, 0x80, 0x0, 0x0,
- 0x0, 0x4e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x6,
- 0xff, 0xfa, 0x53, 0x10, 0x0, 0x0, 0x4f, 0xfc,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xfd, 0x0, 0x1, 0x0, 0x0,
- 0x0, 0xc, 0xf9, 0x3b, 0xff, 0xfc, 0x50, 0x0,
- 0xf, 0xfc, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x1f,
- 0xff, 0xe7, 0x20, 0x4d, 0xff, 0x50, 0x2f, 0xfe,
- 0x20, 0x0, 0x1, 0xef, 0xd0, 0x3f, 0xf7, 0x0,
- 0x0, 0x0, 0x7f, 0xf2, 0x3f, 0xf5, 0x0, 0x0,
- 0x0, 0x4f, 0xf4, 0x2f, 0xf6, 0x0, 0x0, 0x0,
- 0x2f, 0xf5, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x4f,
- 0xf4, 0xa, 0xfe, 0x0, 0x0, 0x0, 0x8f, 0xf1,
- 0x4, 0xff, 0x80, 0x0, 0x1, 0xef, 0xb0, 0x0,
- 0xaf, 0xf9, 0x21, 0x5d, 0xff, 0x30, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x5c,
- 0xef, 0xd9, 0x20, 0x0,
-
- /* U+37 "7" */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x6f, 0xf1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf7,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+38 "8" */
- 0x0, 0x2, 0x9d, 0xff, 0xc7, 0x10, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x3, 0xff,
- 0xe5, 0x22, 0x8f, 0xfe, 0x0, 0xa, 0xff, 0x20,
- 0x0, 0x7, 0xff, 0x60, 0xe, 0xfb, 0x0, 0x0,
- 0x0, 0xff, 0xa0, 0xf, 0xf9, 0x0, 0x0, 0x0,
- 0xdf, 0xb0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xff,
- 0x90, 0x8, 0xff, 0x20, 0x0, 0x6, 0xff, 0x30,
- 0x1, 0xdf, 0xe5, 0x23, 0x8f, 0xf9, 0x0, 0x0,
- 0x1b, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x4d,
- 0xff, 0xff, 0xff, 0xa1, 0x0, 0x4, 0xff, 0xb3,
- 0x1, 0x5e, 0xfd, 0x10, 0xe, 0xfb, 0x0, 0x0,
- 0x1, 0xef, 0xa0, 0x4f, 0xf3, 0x0, 0x0, 0x0,
- 0x8f, 0xf0, 0x6f, 0xf1, 0x0, 0x0, 0x0, 0x5f,
- 0xf2, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0x7f, 0xf1,
- 0x2f, 0xfa, 0x0, 0x0, 0x1, 0xef, 0xd0, 0xa,
- 0xff, 0xb4, 0x12, 0x5d, 0xff, 0x50, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x4, 0xae,
- 0xff, 0xd9, 0x20, 0x0,
-
- /* U+39 "9" */
- 0x0, 0x4, 0xae, 0xfe, 0xa3, 0x0, 0x0, 0x9,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x7, 0xff, 0xb4,
- 0x14, 0xcf, 0xf6, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xcf, 0xe0, 0x5f, 0xf3, 0x0, 0x0, 0x3, 0xff,
- 0x58, 0xff, 0x0, 0x0, 0x0, 0xe, 0xf9, 0x9f,
- 0xe0, 0x0, 0x0, 0x0, 0xbf, 0xc9, 0xff, 0x0,
- 0x0, 0x0, 0xa, 0xfd, 0x6f, 0xf3, 0x0, 0x0,
- 0x0, 0xbf, 0xe1, 0xff, 0xb0, 0x0, 0x0, 0x6f,
- 0xfd, 0xa, 0xff, 0xb2, 0x2, 0x9f, 0xff, 0xc0,
- 0xc, 0xff, 0xff, 0xff, 0xcc, 0xfb, 0x0, 0x8,
- 0xef, 0xfd, 0x70, 0xdf, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x1, 0xef, 0xb0,
- 0x0, 0x0, 0x0, 0x2, 0xcf, 0xf2, 0x0, 0x0,
- 0x13, 0x59, 0xff, 0xf5, 0x0, 0x0, 0xd, 0xff,
- 0xff, 0xd4, 0x0, 0x0, 0x0, 0xde, 0xda, 0x50,
- 0x0, 0x0,
-
- /* U+3A ":" */
- 0xb, 0xf8, 0x1f, 0xff, 0xb, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xf8, 0x2f, 0xff, 0xb, 0xf8,
-
- /* U+3B ";" */
- 0x2, 0xde, 0x40, 0x7f, 0xf9, 0x2, 0xde, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
- 0x60, 0x1f, 0xf6, 0x2, 0xff, 0x50, 0x4f, 0xf2,
- 0xa, 0xfc, 0x2, 0xff, 0x30, 0x9, 0x60, 0x0,
-
- /* U+3C "<" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x20, 0x0,
- 0x0, 0x0, 0x4, 0xbf, 0xf2, 0x0, 0x0, 0x0,
- 0x5c, 0xff, 0xff, 0x20, 0x0, 0x6, 0xdf, 0xff,
- 0xd6, 0x0, 0x1, 0x7e, 0xff, 0xfa, 0x30, 0x0,
- 0x0, 0xff, 0xfd, 0x71, 0x0, 0x0, 0x0, 0xf,
- 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff,
- 0xf9, 0x30, 0x0, 0x0, 0x0, 0x5, 0xcf, 0xff,
- 0xc6, 0x0, 0x0, 0x0, 0x0, 0x4b, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x3, 0xaf, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x29, 0xf2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x0,
-
- /* U+3D "=" */
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x23, 0x33, 0x33, 0x33,
- 0x33, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x21, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7,
-
- /* U+3E ">" */
- 0x2a, 0x30, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
- 0xc5, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xfe,
- 0x71, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xff, 0xf9,
- 0x20, 0x0, 0x0, 0x0, 0x17, 0xdf, 0xff, 0xb4,
- 0x0, 0x0, 0x0, 0x0, 0x39, 0xff, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x4b, 0xff, 0x80, 0x0, 0x0,
- 0x28, 0xef, 0xff, 0x92, 0x0, 0x5, 0xbf, 0xff,
- 0xe8, 0x10, 0x0, 0x8e, 0xff, 0xfd, 0x60, 0x0,
- 0x0, 0x2f, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x2,
- 0xf9, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+3F "?" */
- 0x0, 0x3a, 0xef, 0xec, 0x60, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x4f, 0xfd, 0x63, 0x5c,
- 0xff, 0x80, 0xbf, 0xe1, 0x0, 0x0, 0xdf, 0xe0,
- 0xcd, 0x80, 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x70,
- 0x0, 0x0, 0x0, 0x3e, 0xfd, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xe2, 0x0, 0x0, 0x0, 0x1e, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x9f, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xa0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x55, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xac, 0x40, 0x0, 0x0, 0x0, 0x3, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0,
-
- /* U+40 "@" */
- 0x0, 0x0, 0x0, 0x0, 0x5a, 0xde, 0xfe, 0xc8,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef,
- 0xff, 0xdd, 0xef, 0xff, 0xb2, 0x0, 0x0, 0x0,
- 0x0, 0xa, 0xff, 0x93, 0x0, 0x0, 0x5, 0xbf,
- 0xf4, 0x0, 0x0, 0x0, 0xb, 0xfc, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf3, 0x0, 0x0, 0x9,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xd0, 0x0, 0x4, 0xfe, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0x70, 0x0, 0xcf, 0x40,
- 0x0, 0x0, 0x39, 0xba, 0x60, 0x0, 0x0, 0xed,
- 0x0, 0x3f, 0xd0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xd2, 0x0, 0x9, 0xf2, 0x9, 0xf6, 0x0, 0x0,
- 0x7f, 0xe4, 0x2, 0xdf, 0x40, 0x0, 0x5f, 0x60,
- 0xdf, 0x20, 0x0, 0x2f, 0xf2, 0x0, 0xd, 0xf3,
- 0x0, 0x3, 0xf8, 0x1f, 0xe0, 0x0, 0x9, 0xf8,
- 0x0, 0x0, 0xef, 0x10, 0x0, 0x1f, 0xa3, 0xfb,
- 0x0, 0x0, 0xff, 0x20, 0x0, 0xf, 0xf0, 0x0,
- 0x1, 0xfa, 0x5f, 0xa0, 0x0, 0x3f, 0xe0, 0x0,
- 0x1, 0xfe, 0x0, 0x0, 0xf, 0xb6, 0xf9, 0x0,
- 0x6, 0xfc, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2,
- 0xfa, 0x6f, 0x90, 0x0, 0x8f, 0xa0, 0x0, 0x4,
- 0xfb, 0x0, 0x0, 0x4f, 0x85, 0xf9, 0x0, 0x8,
- 0xfb, 0x0, 0x0, 0x7f, 0xa0, 0x0, 0x7, 0xf4,
- 0x4f, 0xb0, 0x0, 0x6f, 0xe0, 0x0, 0xe, 0xfa,
- 0x0, 0x0, 0xee, 0x1, 0xfe, 0x0, 0x2, 0xff,
- 0x70, 0x1b, 0xff, 0xe0, 0x0, 0x9f, 0x70, 0xd,
- 0xf3, 0x0, 0xa, 0xff, 0xff, 0xf3, 0xcf, 0xda,
- 0xdf, 0xa0, 0x0, 0x7f, 0x90, 0x0, 0x9, 0xef,
- 0xb3, 0x1, 0xae, 0xfd, 0x60, 0x0, 0x1, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfb,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0x72, 0x0, 0x0, 0x4,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0xfd, 0xcb, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x6b, 0xdf, 0xfe, 0xc8, 0x20,
- 0x0, 0x0, 0x0,
-
- /* U+41 "A" */
- 0x0, 0x0, 0x0, 0x3, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xfd,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xb7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x51, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x7, 0xff, 0x0, 0xbf, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xfa, 0x0, 0x5f, 0xf2, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xf4, 0x0, 0xf, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0xa, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x4,
- 0xff, 0x40, 0x0, 0x0, 0x6, 0xff, 0x30, 0x0,
- 0x0, 0xef, 0xa0, 0x0, 0x0, 0xc, 0xfe, 0x22,
- 0x22, 0x22, 0xaf, 0xf1, 0x0, 0x0, 0x2f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0xef, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x20,
- 0x4, 0xff, 0x60, 0x0, 0x0, 0x0, 0x2, 0xff,
- 0x80, 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xe0, 0x1f, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf5, 0x6f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xfb,
-
- /* U+42 "B" */
- 0xbf, 0xff, 0xff, 0xff, 0xda, 0x40, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0xbf, 0xf2,
- 0x22, 0x23, 0x5c, 0xff, 0x90, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0xdf, 0xf0, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0x7f, 0xf3, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x7f,
- 0xf2, 0xbf, 0xf0, 0x0, 0x0, 0x1, 0xef, 0xd0,
- 0xbf, 0xf1, 0x11, 0x13, 0x6e, 0xff, 0x30, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x10, 0xbf, 0xf0, 0x0,
- 0x0, 0x16, 0xff, 0xd0, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0x5f, 0xf6, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0xe, 0xfb, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xc,
- 0xfd, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xe, 0xfc,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0xf7, 0xbf,
- 0xf2, 0x22, 0x22, 0x5a, 0xff, 0xe1, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x30, 0xbf, 0xff, 0xff,
- 0xff, 0xeb, 0x60, 0x0,
-
- /* U+43 "C" */
- 0x0, 0x0, 0x6, 0xbe, 0xfe, 0xc8, 0x10, 0x0,
- 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x3f, 0xff, 0x94, 0x23, 0x7e, 0xff, 0x60,
- 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x1, 0xef, 0xf1,
- 0x7, 0xff, 0x50, 0x0, 0x0, 0x0, 0x4f, 0xf7,
- 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x6, 0x87,
- 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5, 0x76,
- 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfc,
- 0x7, 0xff, 0x40, 0x0, 0x0, 0x0, 0x4f, 0xf7,
- 0x1, 0xef, 0xe2, 0x0, 0x0, 0x0, 0xdf, 0xf1,
- 0x0, 0x4f, 0xff, 0x83, 0x23, 0x7e, 0xff, 0x60,
- 0x0, 0x4, 0xef, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x7, 0xce, 0xfe, 0xc8, 0x10, 0x0,
-
- /* U+44 "D" */
- 0xbf, 0xff, 0xff, 0xfd, 0xa4, 0x0, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x20, 0x0, 0xbf,
- 0xf2, 0x22, 0x35, 0xaf, 0xff, 0x30, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x3e, 0xfe, 0x10, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0x3f, 0xf9, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xf1, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x5b, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xf8, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xab, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xe, 0xfb, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xbb, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfa, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x8b, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xf5, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0x1b, 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0x90,
- 0xbf, 0xf0, 0x0, 0x0, 0x4, 0xff, 0xe1, 0xb,
- 0xff, 0x22, 0x23, 0x5b, 0xff, 0xf3, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xb, 0xff,
- 0xff, 0xfe, 0xd9, 0x40, 0x0, 0x0,
-
- /* U+45 "E" */
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xf2, 0x22,
- 0x22, 0x22, 0x22, 0x2b, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf2, 0x22, 0x22,
- 0x22, 0x21, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x90, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xb,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff,
-
- /* U+46 "F" */
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0xbf, 0xf2, 0x22,
- 0x22, 0x22, 0x22, 0x1b, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xb,
- 0xff, 0x22, 0x22, 0x22, 0x22, 0x0, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+47 "G" */
- 0x0, 0x0, 0x6, 0xbe, 0xff, 0xd9, 0x30, 0x0,
- 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0x90,
- 0x0, 0x0, 0x4f, 0xff, 0x94, 0x23, 0x6d, 0xff,
- 0x90, 0x0, 0x1e, 0xff, 0x30, 0x0, 0x0, 0xc,
- 0xff, 0x30, 0x7, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x2f, 0xfa, 0x0, 0xdf, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0xbe, 0xd0, 0xf, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0,
- 0x0, 0x22, 0x22, 0x22, 0x20, 0x5f, 0xf5, 0x0,
- 0x0, 0x3f, 0xff, 0xff, 0xff, 0x4, 0xff, 0x50,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xf7,
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf0, 0xb,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0,
- 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf0,
- 0x0, 0xcf, 0xf6, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0x0, 0x1, 0xef, 0xfb, 0x52, 0x23, 0x7d, 0xff,
- 0xa0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x4a, 0xdf, 0xfe, 0xc8,
- 0x20, 0x0,
-
- /* U+48 "H" */
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf2, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xf9,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
-
- /* U+49 "I" */
- 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
- 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
- 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
- 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
- 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
-
- /* U+4A "J" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0x2b, 0xb4, 0x0, 0x0, 0x0, 0x6f,
- 0xf4, 0x2f, 0xf8, 0x0, 0x0, 0x0, 0x9f, 0xf1,
- 0xe, 0xfe, 0x10, 0x0, 0x2, 0xff, 0xd0, 0x6,
- 0xff, 0xe6, 0x33, 0x7f, 0xff, 0x40, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x3, 0xad,
- 0xff, 0xd9, 0x20, 0x0,
-
- /* U+4B "K" */
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x80,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x7, 0xff, 0xb0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x5f, 0xfc, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x4, 0xff, 0xd1, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x3f, 0xfe, 0x20, 0x0, 0x0,
- 0xbf, 0xf0, 0x2, 0xef, 0xf3, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x1d, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0xcf, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xfb, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xfe, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0x91, 0xef, 0xf2, 0x0, 0x0, 0x0,
- 0xbf, 0xfa, 0x0, 0x4f, 0xfd, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x8, 0xff, 0xa0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0xbf, 0xf6, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x1e, 0xff, 0x30, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x4, 0xff, 0xd0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x60,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf3,
-
- /* U+4C "L" */
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x22, 0x22, 0x22, 0x22, 0x20, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf6,
-
- /* U+4D "M" */
- 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0x2b, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xff, 0xf2, 0xbf, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x2b,
- 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xff, 0xf2, 0xbf, 0xcf, 0xf7, 0x0, 0x0, 0x0,
- 0x0, 0x1f, 0xfb, 0xff, 0x2b, 0xfb, 0xaf, 0xe0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0x6f, 0xf2, 0xbf,
- 0xc4, 0xff, 0x40, 0x0, 0x0, 0x0, 0xdf, 0xa5,
- 0xff, 0x2b, 0xfc, 0xd, 0xfb, 0x0, 0x0, 0x0,
- 0x4f, 0xf4, 0x5f, 0xf2, 0xbf, 0xd0, 0x7f, 0xf1,
- 0x0, 0x0, 0xa, 0xfd, 0x6, 0xff, 0x2b, 0xfd,
- 0x1, 0xff, 0x70, 0x0, 0x1, 0xff, 0x70, 0x6f,
- 0xf2, 0xbf, 0xe0, 0xa, 0xfe, 0x0, 0x0, 0x7f,
- 0xf1, 0x7, 0xff, 0x2b, 0xfe, 0x0, 0x3f, 0xf4,
- 0x0, 0xd, 0xfa, 0x0, 0x7f, 0xf2, 0xbf, 0xe0,
- 0x0, 0xdf, 0xa0, 0x4, 0xff, 0x30, 0x7, 0xff,
- 0x2b, 0xff, 0x0, 0x6, 0xff, 0x10, 0xaf, 0xd0,
- 0x0, 0x8f, 0xf2, 0xbf, 0xf0, 0x0, 0xf, 0xf7,
- 0x1f, 0xf6, 0x0, 0x8, 0xff, 0x2b, 0xff, 0x0,
- 0x0, 0x9f, 0xd7, 0xff, 0x0, 0x0, 0x8f, 0xf2,
- 0xbf, 0xf0, 0x0, 0x3, 0xff, 0xff, 0x90, 0x0,
- 0x8, 0xff, 0x2b, 0xff, 0x0, 0x0, 0xc, 0xff,
- 0xf3, 0x0, 0x0, 0x8f, 0xf2, 0xbf, 0xf0, 0x0,
- 0x0, 0x6f, 0xfc, 0x0, 0x0, 0x8, 0xff, 0x2b,
- 0xff, 0x0, 0x0, 0x0, 0xff, 0x60, 0x0, 0x0,
- 0x8f, 0xf2,
-
- /* U+4E "N" */
- 0xbf, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xff, 0x90, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xff, 0xf3, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xff, 0xfd, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf7, 0xff, 0x80, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0xcf, 0xf2, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x2f, 0xfc, 0x0, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x8, 0xff, 0x70, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0xdf, 0xf2, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x3f, 0xfc, 0x0, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x8, 0xff, 0x60, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0xdf, 0xf1, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x4f, 0xfb, 0xf, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x9, 0xff, 0x5f, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xef, 0xef, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf9,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf9,
-
- /* U+4F "O" */
- 0x0, 0x0, 0x5, 0xbe, 0xfe, 0xc7, 0x10, 0x0,
- 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xfe, 0x50,
- 0x0, 0x0, 0x2e, 0xff, 0xb6, 0x45, 0x9f, 0xff,
- 0x60, 0x0, 0xd, 0xff, 0x50, 0x0, 0x0, 0x2e,
- 0xff, 0x20, 0x5, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x3f, 0xfa, 0x0, 0xcf, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xf0, 0xf, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0x43, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x2f, 0xf7, 0x5f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x86, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xf9, 0x6f, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x95, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9, 0x4f, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x71, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0xc,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x10,
- 0x6f, 0xf6, 0x0, 0x0, 0x0, 0x2, 0xff, 0xa0,
- 0x0, 0xdf, 0xf4, 0x0, 0x0, 0x1, 0xdf, 0xf2,
- 0x0, 0x2, 0xef, 0xfa, 0x53, 0x48, 0xff, 0xf6,
- 0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x5b, 0xef, 0xec, 0x71,
- 0x0, 0x0,
-
- /* U+50 "P" */
- 0xbf, 0xff, 0xff, 0xff, 0xfd, 0x92, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xbf,
- 0xf2, 0x22, 0x22, 0x37, 0xef, 0xf7, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x1, 0xdf, 0xf1, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0x5, 0xff, 0x6b, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xf9, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0x9b, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xf7, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x3b, 0xff, 0x0, 0x0, 0x0,
- 0x4b, 0xff, 0xa0, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x60, 0x0, 0xbf, 0xf2, 0x22, 0x21, 0x10, 0x0,
- 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+51 "Q" */
- 0x0, 0x0, 0x6, 0xbe, 0xfe, 0xb7, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xfe, 0x40,
- 0x0, 0x0, 0x4f, 0xff, 0xa5, 0x45, 0xaf, 0xff,
- 0x40, 0x0, 0x1e, 0xff, 0x30, 0x0, 0x0, 0x3e,
- 0xfe, 0x10, 0x7, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x4f, 0xf8, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xe0, 0x2f, 0xf7, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0x25, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xf6, 0x7f, 0xf2, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xff, 0x78, 0xff, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x8f, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x87, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf6, 0x6f, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x52, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf3, 0xe,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfe, 0x0,
- 0x8f, 0xf5, 0x0, 0x0, 0x0, 0x4, 0xff, 0x80,
- 0x1, 0xef, 0xf3, 0x0, 0x0, 0x2, 0xef, 0xe0,
- 0x0, 0x4, 0xff, 0xfa, 0x53, 0x59, 0xff, 0xf4,
- 0x0, 0x0, 0x3, 0xef, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x6b, 0xef, 0xed, 0xff,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xef, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xc6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+52 "R" */
- 0xbf, 0xff, 0xff, 0xff, 0xea, 0x50, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0xbf,
- 0xf2, 0x22, 0x23, 0x5c, 0xff, 0xd0, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0xbf, 0xf0,
- 0x0, 0x0, 0x0, 0xf, 0xfb, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xd0, 0xbf, 0xf0, 0x0,
- 0x0, 0x0, 0xc, 0xfd, 0xb, 0xff, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0xb0, 0xbf, 0xf0, 0x0, 0x0,
- 0x0, 0xaf, 0xf5, 0xb, 0xff, 0x22, 0x22, 0x25,
- 0xcf, 0xfa, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x2, 0xff, 0xa0,
- 0x0, 0xb, 0xff, 0x0, 0x0, 0x9, 0xff, 0x30,
- 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x1f, 0xfb, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x0, 0x7f, 0xf4, 0x0,
- 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0xb,
- 0xff, 0x0, 0x0, 0x0, 0x6, 0xff, 0x60, 0xbf,
- 0xf0, 0x0, 0x0, 0x0, 0xd, 0xfe, 0xb, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf7,
-
- /* U+53 "S" */
- 0x0, 0x1, 0x8c, 0xef, 0xec, 0x71, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x5,
- 0xff, 0xe7, 0x32, 0x37, 0xef, 0xf4, 0x0, 0xef,
- 0xe1, 0x0, 0x0, 0x1, 0xef, 0xe0, 0x3f, 0xf8,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0x44, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x2e, 0xe6, 0x1f, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfa, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xa5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff,
- 0xb4, 0x0, 0x0, 0x0, 0x0, 0x17, 0xdf, 0xff,
- 0xfd, 0x30, 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xf6, 0xce, 0xb0, 0x0, 0x0, 0x0, 0x2, 0xff,
- 0x8b, 0xff, 0x10, 0x0, 0x0, 0x0, 0x3f, 0xf7,
- 0x4f, 0xfb, 0x0, 0x0, 0x0, 0xa, 0xff, 0x30,
- 0x9f, 0xfe, 0x74, 0x23, 0x6c, 0xff, 0xb0, 0x0,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x17, 0xce, 0xff, 0xd9, 0x30, 0x0,
-
- /* U+54 "T" */
- 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf1, 0x2, 0x22, 0x22, 0x2f, 0xfb, 0x22, 0x22,
- 0x22, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
- 0x0, 0x0,
-
- /* U+55 "U" */
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4,
- 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf3,
- 0xc, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0x6, 0xff, 0x90, 0x0, 0x0, 0x5, 0xff, 0x90,
- 0x0, 0xcf, 0xfb, 0x52, 0x24, 0xaf, 0xfd, 0x10,
- 0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0,
- 0x0, 0x0, 0x4a, 0xdf, 0xfe, 0xa5, 0x0, 0x0,
-
- /* U+56 "V" */
- 0x6f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
- 0xf4, 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xe0, 0xb, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x80, 0x5, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0xa, 0xff, 0x20, 0x0, 0xef, 0xc0, 0x0,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x9f, 0xf2,
- 0x0, 0x0, 0x0, 0x5f, 0xf6, 0x0, 0x0, 0x3f,
- 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
- 0xd, 0xfd, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
- 0x0, 0x7, 0xff, 0x20, 0x0, 0x5, 0xff, 0x50,
- 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0xb, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0x0, 0x1f,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x0,
- 0x6f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
- 0x0, 0xcf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xa,
- 0xfe, 0x1, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x47, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0x9c, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x40, 0x0, 0x0, 0x0,
-
- /* U+57 "W" */
- 0xf, 0xf9, 0x0, 0x0, 0x0, 0xa, 0xfd, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x10, 0xdf, 0xc0, 0x0,
- 0x0, 0x0, 0xef, 0xf1, 0x0, 0x0, 0x0, 0xbf,
- 0xd0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0x60, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x5f, 0xf4,
- 0x0, 0x0, 0x8, 0xff, 0xfa, 0x0, 0x0, 0x2,
- 0xff, 0x60, 0x1, 0xff, 0x70, 0x0, 0x0, 0xcf,
- 0xcf, 0xe0, 0x0, 0x0, 0x6f, 0xf2, 0x0, 0xd,
- 0xfb, 0x0, 0x0, 0x1f, 0xf5, 0xff, 0x30, 0x0,
- 0xa, 0xfe, 0x0, 0x0, 0x9f, 0xf0, 0x0, 0x5,
- 0xff, 0xc, 0xf7, 0x0, 0x0, 0xdf, 0xa0, 0x0,
- 0x5, 0xff, 0x20, 0x0, 0xaf, 0xb0, 0x7f, 0xc0,
- 0x0, 0x1f, 0xf6, 0x0, 0x0, 0x2f, 0xf6, 0x0,
- 0xe, 0xf6, 0x3, 0xff, 0x0, 0x5, 0xff, 0x30,
- 0x0, 0x0, 0xef, 0xa0, 0x3, 0xff, 0x10, 0xe,
- 0xf5, 0x0, 0x8f, 0xf0, 0x0, 0x0, 0xa, 0xfd,
- 0x0, 0x7f, 0xd0, 0x0, 0xaf, 0x90, 0xc, 0xfb,
- 0x0, 0x0, 0x0, 0x6f, 0xf1, 0xc, 0xf8, 0x0,
- 0x5, 0xfd, 0x0, 0xff, 0x70, 0x0, 0x0, 0x2,
- 0xff, 0x50, 0xff, 0x30, 0x0, 0x1f, 0xf2, 0x3f,
- 0xf3, 0x0, 0x0, 0x0, 0xe, 0xf8, 0x5f, 0xe0,
- 0x0, 0x0, 0xdf, 0x67, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xb9, 0xfa, 0x0, 0x0, 0x8, 0xfa,
- 0x9f, 0xb0, 0x0, 0x0, 0x0, 0x7, 0xfd, 0xdf,
- 0x50, 0x0, 0x0, 0x4f, 0xec, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xf1, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x6f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xff, 0x80,
- 0x0, 0x0,
-
- /* U+58 "X" */
- 0xb, 0xff, 0x50, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0x50, 0x2f, 0xfe, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xb0, 0x0, 0x7f, 0xf9, 0x0, 0x0, 0x1, 0xef,
- 0xf2, 0x0, 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x9f,
- 0xf7, 0x0, 0x0, 0x3, 0xff, 0xd0, 0x0, 0x3f,
- 0xfc, 0x0, 0x0, 0x0, 0x9, 0xff, 0x70, 0xd,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0xe, 0xff, 0x27,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfc,
- 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xae, 0xfe, 0x10, 0x0, 0x0, 0x0,
- 0x1, 0xff, 0xe1, 0x6f, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xf5, 0x0, 0xbf, 0xf4, 0x0, 0x0,
- 0x0, 0x5f, 0xfb, 0x0, 0x2, 0xff, 0xe0, 0x0,
- 0x0, 0x1e, 0xff, 0x20, 0x0, 0x7, 0xff, 0x90,
- 0x0, 0x9, 0xff, 0x70, 0x0, 0x0, 0xd, 0xff,
- 0x30, 0x4, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x3f,
- 0xfd, 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xf7,
-
- /* U+59 "Y" */
- 0x8f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0x40, 0xef, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xb0, 0x6, 0xff, 0x80, 0x0, 0x0, 0x0, 0xbf,
- 0xf3, 0x0, 0xd, 0xff, 0x10, 0x0, 0x0, 0x4f,
- 0xfa, 0x0, 0x0, 0x5f, 0xf8, 0x0, 0x0, 0xc,
- 0xff, 0x10, 0x0, 0x0, 0xcf, 0xf1, 0x0, 0x4,
- 0xff, 0x80, 0x0, 0x0, 0x3, 0xff, 0x90, 0x0,
- 0xdf, 0xe1, 0x0, 0x0, 0x0, 0xb, 0xff, 0x10,
- 0x5f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf9,
- 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
- 0xf8, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0,
- 0x0, 0x0,
-
- /* U+5A "Z" */
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x12,
- 0x22, 0x22, 0x22, 0x22, 0x5f, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xfe,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xe1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xa2, 0x22, 0x22, 0x22, 0x22, 0x21, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
-
- /* U+5B "[" */
- 0xff, 0xff, 0xf2, 0xff, 0xff, 0xf2, 0xff, 0x91,
- 0x10, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
- 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
- 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80,
- 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
- 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
- 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80,
- 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
- 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
- 0xff, 0x91, 0x10, 0xff, 0xff, 0xf2, 0xff, 0xff,
- 0xf2,
-
- /* U+5C "\\" */
- 0x4f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xf1, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0xdf,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xef, 0x70,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x18, 0x81,
-
- /* U+5D "]" */
- 0xef, 0xff, 0xf4, 0xef, 0xff, 0xf4, 0x1, 0x4f,
- 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
- 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
- 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f,
- 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
- 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
- 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f,
- 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
- 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
- 0x11, 0x4f, 0xf4, 0xef, 0xff, 0xf4, 0xef, 0xff,
- 0xf4,
-
- /* U+5E "^" */
- 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0x50, 0x0, 0x0, 0x1, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x7f, 0xef, 0xf2, 0x0, 0x0, 0xd,
- 0xf6, 0xcf, 0x80, 0x0, 0x4, 0xff, 0x5, 0xfe,
- 0x0, 0x0, 0xbf, 0x90, 0xe, 0xf5, 0x0, 0x1f,
- 0xf3, 0x0, 0x8f, 0xc0, 0x8, 0xfd, 0x0, 0x2,
- 0xff, 0x20, 0xef, 0x60, 0x0, 0xc, 0xf9,
-
- /* U+5F "_" */
- 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x90,
-
- /* U+60 "`" */
- 0xc, 0xff, 0x20, 0x0, 0x1d, 0xfc, 0x0, 0x0,
- 0x1e, 0xf7, 0x0, 0x0, 0x2f, 0xf2,
-
- /* U+61 "a" */
- 0x0, 0x4, 0xae, 0xff, 0xc7, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xff, 0xfd, 0x10, 0x9, 0xff, 0x93,
- 0x12, 0x9f, 0xf9, 0x1, 0xff, 0x90, 0x0, 0x0,
- 0xbf, 0xf0, 0x5, 0x51, 0x0, 0x0, 0x6, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x0,
- 0x6, 0xbe, 0xff, 0xff, 0xff, 0x30, 0x2d, 0xff,
- 0xfe, 0xcc, 0xdf, 0xf3, 0xd, 0xfe, 0x50, 0x0,
- 0x5, 0xff, 0x35, 0xff, 0x30, 0x0, 0x0, 0x5f,
- 0xf3, 0x7f, 0xf0, 0x0, 0x0, 0x6, 0xff, 0x36,
- 0xff, 0x50, 0x0, 0x1, 0xdf, 0xf3, 0x1f, 0xff,
- 0x73, 0x48, 0xef, 0xff, 0x40, 0x6f, 0xff, 0xff,
- 0xff, 0x9f, 0xf6, 0x0, 0x3a, 0xef, 0xe9, 0x20,
- 0xbb, 0x70,
-
- /* U+62 "b" */
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1f, 0xf7, 0x19, 0xef, 0xea, 0x30,
- 0x0, 0x1f, 0xfa, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x1f, 0xff, 0xe7, 0x33, 0x6e, 0xff, 0x30, 0x1f,
- 0xfe, 0x20, 0x0, 0x2, 0xff, 0xb0, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0x4f, 0xf4, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0x2f, 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0x1f, 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x2f,
- 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x1f,
- 0xfe, 0x20, 0x0, 0x2, 0xff, 0xb0, 0x1f, 0xff,
- 0xe7, 0x32, 0x6e, 0xff, 0x30, 0x1f, 0xf9, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0x1f, 0xf4, 0x29, 0xef,
- 0xea, 0x30, 0x0,
-
- /* U+63 "c" */
- 0x0, 0x2, 0x9d, 0xff, 0xc7, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xfd, 0x10, 0x5, 0xff, 0xc4,
- 0x12, 0x8f, 0xfc, 0x0, 0xef, 0xc0, 0x0, 0x0,
- 0x5f, 0xf5, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0xdf,
- 0x99, 0xff, 0x0, 0x0, 0x0, 0x2, 0x42, 0xbf,
- 0xd0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0xad, 0x80,
- 0xef, 0xc0, 0x0, 0x0, 0x3f, 0xf6, 0x5, 0xff,
- 0xc4, 0x12, 0x7f, 0xfd, 0x0, 0x7, 0xff, 0xff,
- 0xff, 0xfd, 0x10, 0x0, 0x2, 0x9d, 0xff, 0xc6,
- 0x0, 0x0,
-
- /* U+64 "d" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0,
- 0x4, 0xbe, 0xfd, 0x80, 0xcf, 0xc0, 0x8, 0xff,
- 0xff, 0xff, 0xdd, 0xfc, 0x6, 0xff, 0xd5, 0x23,
- 0x8f, 0xff, 0xc0, 0xef, 0xd1, 0x0, 0x0, 0x4f,
- 0xfc, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc8,
- 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc, 0xaf, 0xe0,
- 0x0, 0x0, 0x0, 0xcf, 0xcb, 0xfd, 0x0, 0x0,
- 0x0, 0xc, 0xfc, 0xaf, 0xe0, 0x0, 0x0, 0x0,
- 0xcf, 0xc8, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
- 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0xef,
- 0xd0, 0x0, 0x0, 0x4f, 0xfc, 0x5, 0xff, 0xd5,
- 0x23, 0x8f, 0xff, 0xc0, 0x8, 0xff, 0xff, 0xff,
- 0xec, 0xfc, 0x0, 0x4, 0xbe, 0xfd, 0x81, 0x9f,
- 0xc0,
-
- /* U+65 "e" */
- 0x0, 0x1, 0x8d, 0xfe, 0xc6, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xfc, 0x10, 0x3, 0xff, 0xd4,
- 0x12, 0x8f, 0xfa, 0x0, 0xcf, 0xd0, 0x0, 0x0,
- 0x7f, 0xf3, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0xff,
- 0x88, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfb, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xd1, 0x11, 0x11,
- 0x11, 0x11, 0x19, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xe1, 0x0, 0x0, 0x6, 0xb1, 0x4, 0xff,
- 0xe6, 0x11, 0x3a, 0xff, 0x50, 0x5, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x1, 0x8d, 0xff, 0xd9,
- 0x20, 0x0,
-
- /* U+66 "f" */
- 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x19,
- 0xff, 0xfb, 0x0, 0x0, 0xdf, 0xff, 0xfa, 0x0,
- 0x7, 0xff, 0x91, 0x0, 0x0, 0xb, 0xfe, 0x0,
- 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd,
- 0xfb, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xd0,
- 0x2f, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xd, 0xfb,
- 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0,
- 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0,
- 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd,
- 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
- 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb,
- 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0,
- 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0,
- 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
-
- /* U+67 "g" */
- 0x0, 0x5, 0xbe, 0xfd, 0x80, 0x8f, 0xd0, 0x9,
- 0xff, 0xff, 0xff, 0xdb, 0xfd, 0x6, 0xff, 0xd5,
- 0x23, 0x8f, 0xff, 0xd0, 0xef, 0xe1, 0x0, 0x0,
- 0x4f, 0xfd, 0x4f, 0xf7, 0x0, 0x0, 0x0, 0xbf,
- 0xd8, 0xff, 0x10, 0x0, 0x0, 0xb, 0xfd, 0xaf,
- 0xf0, 0x0, 0x0, 0x0, 0xbf, 0xda, 0xfd, 0x0,
- 0x0, 0x0, 0xb, 0xfd, 0xaf, 0xf0, 0x0, 0x0,
- 0x0, 0xbf, 0xd8, 0xff, 0x10, 0x0, 0x0, 0xb,
- 0xfd, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xd0,
- 0xef, 0xd1, 0x0, 0x0, 0x4f, 0xfd, 0x5, 0xff,
- 0xd5, 0x23, 0x8f, 0xff, 0xd0, 0x8, 0xff, 0xff,
- 0xff, 0xdd, 0xfd, 0x0, 0x4, 0xbe, 0xfd, 0x81,
- 0xbf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfb,
- 0x0, 0x10, 0x0, 0x0, 0x1, 0xff, 0x90, 0x4e,
- 0x20, 0x0, 0x0, 0x9f, 0xf4, 0xb, 0xff, 0x72,
- 0x13, 0xaf, 0xfb, 0x0, 0x1c, 0xff, 0xff, 0xff,
- 0xfc, 0x10, 0x0, 0x5, 0xae, 0xfe, 0xb6, 0x0,
- 0x0,
-
- /* U+68 "h" */
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xf7, 0x7, 0xdf, 0xfc, 0x50, 0x1, 0xff, 0x8d,
- 0xff, 0xff, 0xff, 0x70, 0x1f, 0xff, 0xf8, 0x33,
- 0x7f, 0xff, 0x11, 0xff, 0xf3, 0x0, 0x0, 0x6f,
- 0xf5, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0x71,
- 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0,
- 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0xff, 0x81, 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8,
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81, 0xff,
- 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0, 0x0,
- 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
- 0x80,
-
- /* U+69 "i" */
- 0xa, 0xf8, 0xf, 0xfe, 0x8, 0xd6, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
- 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
- 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
- 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
-
- /* U+6A "j" */
- 0x0, 0xc, 0xf5, 0x0, 0x3f, 0xfa, 0x0, 0xb,
- 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8,
- 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf,
- 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0,
- 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8,
- 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf,
- 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0,
- 0xf, 0xf8, 0x0, 0x1f, 0xf6, 0x23, 0xaf, 0xf4,
- 0xef, 0xff, 0xc0, 0xcf, 0xea, 0x10,
-
- /* U+6B "k" */
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x2e, 0xfe,
- 0x20, 0x1f, 0xf7, 0x0, 0x1, 0xdf, 0xe2, 0x0,
- 0x1f, 0xf7, 0x0, 0x1d, 0xff, 0x30, 0x0, 0x1f,
- 0xf7, 0x0, 0xcf, 0xf4, 0x0, 0x0, 0x1f, 0xf7,
- 0xc, 0xff, 0x50, 0x0, 0x0, 0x1f, 0xf7, 0xaf,
- 0xf7, 0x0, 0x0, 0x0, 0x1f, 0xfd, 0xff, 0xe0,
- 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x1f, 0xff, 0xaa, 0xff, 0x60, 0x0,
- 0x0, 0x1f, 0xfb, 0x0, 0xdf, 0xf2, 0x0, 0x0,
- 0x1f, 0xf7, 0x0, 0x2f, 0xfd, 0x0, 0x0, 0x1f,
- 0xf7, 0x0, 0x6, 0xff, 0x90, 0x0, 0x1f, 0xf7,
- 0x0, 0x0, 0xaf, 0xf5, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0xd, 0xfe, 0x20, 0x1f, 0xf7, 0x0, 0x0,
- 0x3, 0xff, 0xc0,
-
- /* U+6C "l" */
- 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad,
- 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf,
- 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa,
- 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xa0,
-
- /* U+6D "m" */
- 0x1f, 0xf5, 0x19, 0xdf, 0xeb, 0x40, 0x1, 0x9d,
- 0xff, 0xc5, 0x0, 0x1f, 0xf9, 0xff, 0xff, 0xff,
- 0xf5, 0x4f, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff,
- 0xd5, 0x23, 0x8f, 0xff, 0xff, 0x73, 0x36, 0xef,
- 0xf2, 0x1f, 0xfd, 0x0, 0x0, 0x7, 0xff, 0xf3,
- 0x0, 0x0, 0x4f, 0xf7, 0x1f, 0xf7, 0x0, 0x0,
- 0x2, 0xff, 0xb0, 0x0, 0x0, 0xf, 0xf9, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0,
- 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
- 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa,
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0,
- 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0xe,
- 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80,
- 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0,
- 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
- 0x80, 0x0, 0x0, 0xe, 0xfa,
-
- /* U+6E "n" */
- 0x1f, 0xf5, 0x7, 0xdf, 0xfc, 0x50, 0x1, 0xff,
- 0x7d, 0xff, 0xff, 0xff, 0x70, 0x1f, 0xff, 0xf8,
- 0x33, 0x7f, 0xff, 0x11, 0xff, 0xf3, 0x0, 0x0,
- 0x6f, 0xf5, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff,
- 0x71, 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70,
- 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0xff, 0x81, 0xff, 0x70, 0x0, 0x0, 0xf,
- 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81,
- 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0,
- 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0xff, 0x80,
-
- /* U+6F "o" */
- 0x0, 0x1, 0x8d, 0xff, 0xd8, 0x10, 0x0, 0x0,
- 0x5f, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x3, 0xff,
- 0xe5, 0x11, 0x6e, 0xff, 0x30, 0xd, 0xfe, 0x10,
- 0x0, 0x2, 0xef, 0xd0, 0x4f, 0xf6, 0x0, 0x0,
- 0x0, 0x6f, 0xf3, 0x8f, 0xf0, 0x0, 0x0, 0x0,
- 0x1f, 0xf8, 0xaf, 0xd0, 0x0, 0x0, 0x0, 0xe,
- 0xfa, 0xbf, 0xc0, 0x0, 0x0, 0x0, 0xd, 0xfb,
- 0xbf, 0xd0, 0x0, 0x0, 0x0, 0xd, 0xfa, 0x8f,
- 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x4f, 0xf6,
- 0x0, 0x0, 0x0, 0x6f, 0xf4, 0xd, 0xfe, 0x10,
- 0x0, 0x1, 0xef, 0xd0, 0x3, 0xff, 0xd5, 0x11,
- 0x5e, 0xff, 0x30, 0x0, 0x5f, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x1, 0x8d, 0xff, 0xd8, 0x10,
- 0x0,
-
- /* U+70 "p" */
- 0x1f, 0xf4, 0x29, 0xef, 0xea, 0x30, 0x0, 0x1f,
- 0xf9, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x1f, 0xff,
- 0xd6, 0x33, 0x8f, 0xff, 0x30, 0x1f, 0xfd, 0x10,
- 0x0, 0x4, 0xff, 0xb0, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0xaf, 0xf0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
- 0x5f, 0xf3, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x3f,
- 0xf5, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x2f, 0xf6,
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0xaf, 0xf0, 0x1f, 0xfc, 0x0,
- 0x0, 0x3, 0xff, 0xa0, 0x1f, 0xff, 0xc4, 0x11,
- 0x6f, 0xff, 0x20, 0x1f, 0xfc, 0xff, 0xff, 0xff,
- 0xf5, 0x0, 0x1f, 0xf7, 0x2a, 0xef, 0xea, 0x30,
- 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+71 "q" */
- 0x0, 0x5, 0xbe, 0xfd, 0x81, 0x9f, 0xc0, 0x9,
- 0xff, 0xff, 0xff, 0xec, 0xfc, 0x7, 0xff, 0xd5,
- 0x12, 0x7f, 0xff, 0xc0, 0xef, 0xd1, 0x0, 0x0,
- 0x3f, 0xfc, 0x5f, 0xf6, 0x0, 0x0, 0x0, 0xcf,
- 0xc8, 0xff, 0x10, 0x0, 0x0, 0xc, 0xfc, 0xaf,
- 0xe0, 0x0, 0x0, 0x0, 0xcf, 0xcb, 0xfd, 0x0,
- 0x0, 0x0, 0xc, 0xfc, 0xaf, 0xe0, 0x0, 0x0,
- 0x0, 0xcf, 0xc8, 0xff, 0x0, 0x0, 0x0, 0xc,
- 0xfc, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc0,
- 0xef, 0xd0, 0x0, 0x0, 0x3f, 0xfc, 0x6, 0xff,
- 0xd4, 0x12, 0x6f, 0xff, 0xc0, 0x9, 0xff, 0xff,
- 0xff, 0xee, 0xfc, 0x0, 0x5, 0xbe, 0xfd, 0x81,
- 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xc0,
-
- /* U+72 "r" */
- 0x1f, 0xf6, 0x3b, 0xfe, 0x1, 0xff, 0xaf, 0xff,
- 0xf1, 0x1f, 0xff, 0xfa, 0x77, 0x1, 0xff, 0xf3,
- 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff,
- 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x1,
- 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
- 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0,
- 0x0, 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7,
- 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f,
- 0xf7, 0x0, 0x0, 0x0,
-
- /* U+73 "s" */
- 0x0, 0x7, 0xcf, 0xfe, 0xa4, 0x0, 0x0, 0x1d,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0xb, 0xff, 0x72,
- 0x14, 0xdf, 0xf5, 0x1, 0xff, 0x80, 0x0, 0x1,
- 0xef, 0xc0, 0x2f, 0xf6, 0x0, 0x0, 0x5, 0x87,
- 0x0, 0xef, 0xe3, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xfe, 0xa6, 0x10, 0x0, 0x0, 0x2, 0x9e,
- 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x3, 0x7b,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef,
- 0xd0, 0x7b, 0xa0, 0x0, 0x0, 0x8, 0xff, 0x7,
- 0xff, 0x30, 0x0, 0x0, 0xaf, 0xf0, 0x1e, 0xff,
- 0x72, 0x13, 0x9f, 0xf9, 0x0, 0x3e, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0x0, 0x17, 0xcf, 0xfe, 0xb5,
- 0x0, 0x0,
-
- /* U+74 "t" */
- 0x0, 0x18, 0x82, 0x0, 0x0, 0x3, 0xff, 0x50,
- 0x0, 0x0, 0x3f, 0xf5, 0x0, 0x0, 0x3, 0xff,
- 0x50, 0x0, 0xef, 0xff, 0xff, 0xff, 0x1d, 0xff,
- 0xff, 0xff, 0xf1, 0x0, 0x3f, 0xf5, 0x0, 0x0,
- 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf5, 0x0,
- 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf5,
- 0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f,
- 0xf5, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0,
- 0x3f, 0xf5, 0x0, 0x0, 0x2, 0xff, 0x60, 0x0,
- 0x0, 0xf, 0xfc, 0x33, 0x0, 0x0, 0xaf, 0xff,
- 0xf2, 0x0, 0x0, 0x9e, 0xfd, 0x20,
-
- /* U+75 "u" */
- 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff, 0x82, 0xff,
- 0x60, 0x0, 0x0, 0xf, 0xf8, 0x2f, 0xf6, 0x0,
- 0x0, 0x0, 0xff, 0x82, 0xff, 0x60, 0x0, 0x0,
- 0xf, 0xf8, 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff,
- 0x82, 0xff, 0x60, 0x0, 0x0, 0xf, 0xf8, 0x2f,
- 0xf6, 0x0, 0x0, 0x0, 0xff, 0x82, 0xff, 0x60,
- 0x0, 0x0, 0xf, 0xf8, 0x2f, 0xf6, 0x0, 0x0,
- 0x0, 0xff, 0x82, 0xff, 0x60, 0x0, 0x0, 0xf,
- 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80,
- 0xef, 0xc0, 0x0, 0x0, 0x8f, 0xf8, 0x9, 0xff,
- 0xa3, 0x24, 0xbf, 0xff, 0x80, 0x1e, 0xff, 0xff,
- 0xff, 0xcf, 0xf8, 0x0, 0x19, 0xef, 0xfc, 0x60,
- 0xef, 0x80,
-
- /* U+76 "v" */
- 0x5f, 0xf3, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0xf,
- 0xf8, 0x0, 0x0, 0x0, 0xff, 0x80, 0xa, 0xfd,
- 0x0, 0x0, 0x5, 0xff, 0x20, 0x4, 0xff, 0x30,
- 0x0, 0xa, 0xfc, 0x0, 0x0, 0xef, 0x80, 0x0,
- 0xf, 0xf7, 0x0, 0x0, 0x9f, 0xd0, 0x0, 0x5f,
- 0xf1, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0xaf, 0xb0,
- 0x0, 0x0, 0xd, 0xf8, 0x0, 0xff, 0x60, 0x0,
- 0x0, 0x8, 0xfd, 0x4, 0xff, 0x10, 0x0, 0x0,
- 0x2, 0xff, 0x39, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x8e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xfe, 0x0, 0x0,
- 0x0,
-
- /* U+77 "w" */
- 0x4f, 0xf3, 0x0, 0x0, 0xa, 0xfa, 0x0, 0x0,
- 0x4, 0xff, 0x30, 0xff, 0x70, 0x0, 0x0, 0xff,
- 0xf0, 0x0, 0x0, 0x8f, 0xf0, 0xb, 0xfc, 0x0,
- 0x0, 0x4f, 0xff, 0x40, 0x0, 0xc, 0xfa, 0x0,
- 0x6f, 0xf0, 0x0, 0x9, 0xff, 0xf9, 0x0, 0x0,
- 0xff, 0x60, 0x1, 0xff, 0x40, 0x0, 0xef, 0x7f,
- 0xe0, 0x0, 0x4f, 0xf1, 0x0, 0xd, 0xf8, 0x0,
- 0x3f, 0xd0, 0xff, 0x30, 0x8, 0xfc, 0x0, 0x0,
- 0x8f, 0xc0, 0x8, 0xf8, 0xa, 0xf8, 0x0, 0xcf,
- 0x80, 0x0, 0x4, 0xff, 0x0, 0xdf, 0x30, 0x5f,
- 0xd0, 0xf, 0xf3, 0x0, 0x0, 0xf, 0xf4, 0x2f,
- 0xe0, 0x0, 0xff, 0x24, 0xfe, 0x0, 0x0, 0x0,
- 0xbf, 0x97, 0xfa, 0x0, 0xb, 0xf7, 0x8f, 0xa0,
- 0x0, 0x0, 0x6, 0xfd, 0xcf, 0x50, 0x0, 0x6f,
- 0xcc, 0xf5, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf0,
- 0x0, 0x1, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0xdf, 0xfb, 0x0, 0x0, 0xc, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x60, 0x0, 0x0, 0x7f,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf1, 0x0,
- 0x0, 0x2, 0xff, 0x30, 0x0, 0x0,
-
- /* U+78 "x" */
- 0xe, 0xfe, 0x0, 0x0, 0x2, 0xff, 0xc0, 0x4,
- 0xff, 0x80, 0x0, 0xc, 0xff, 0x20, 0x0, 0xaf,
- 0xf2, 0x0, 0x5f, 0xf7, 0x0, 0x0, 0x1e, 0xfb,
- 0x1, 0xef, 0xc0, 0x0, 0x0, 0x5, 0xff, 0x59,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0xbf, 0xef, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x2f, 0xff, 0xe1, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xde, 0xfa, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0x36, 0xff, 0x40, 0x0, 0x0, 0x2f, 0xfa,
- 0x0, 0xcf, 0xe0, 0x0, 0x0, 0xcf, 0xe1, 0x0,
- 0x3f, 0xf9, 0x0, 0x7, 0xff, 0x60, 0x0, 0x9,
- 0xff, 0x40, 0x2f, 0xfc, 0x0, 0x0, 0x0, 0xef,
- 0xe0,
-
- /* U+79 "y" */
- 0x8f, 0xf3, 0x0, 0x0, 0x0, 0xef, 0xb2, 0xff,
- 0x80, 0x0, 0x0, 0x4f, 0xf6, 0xd, 0xfe, 0x0,
- 0x0, 0x9, 0xff, 0x10, 0x7f, 0xf3, 0x0, 0x0,
- 0xef, 0xb0, 0x1, 0xff, 0x90, 0x0, 0x3f, 0xf5,
- 0x0, 0xb, 0xfe, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x6f, 0xf3, 0x0, 0xdf, 0xa0, 0x0, 0x0, 0xff,
- 0x90, 0x2f, 0xf5, 0x0, 0x0, 0xa, 0xfe, 0x7,
- 0xff, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0xcf, 0xa0,
- 0x0, 0x0, 0x0, 0xef, 0xaf, 0xf4, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x1f, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x9, 0xfd, 0x0, 0x0, 0x0, 0x3, 0x49, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0xb, 0xfe, 0x70, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+7A "z" */
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xaf, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x1, 0x11, 0x11, 0x12,
- 0xef, 0xe1, 0x0, 0x0, 0x0, 0xa, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x6f, 0xf8, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xd, 0xfe,
- 0x10, 0x0, 0x0, 0x0, 0xaf, 0xf4, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x0, 0x2f,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf2, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x5f, 0xfa, 0x11, 0x11, 0x11, 0x10, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff,
-
- /* U+7B "{" */
- 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0,
- 0x6e, 0xe0, 0x0, 0x0, 0x9, 0xff, 0x90, 0x0,
- 0x0, 0x6f, 0xf5, 0x0, 0x0, 0x0, 0xdf, 0xc0,
- 0x0, 0x0, 0x0, 0xff, 0x70, 0x0, 0x0, 0x2,
- 0xff, 0x50, 0x0, 0x0, 0x3, 0xff, 0x40, 0x0,
- 0x0, 0x3, 0xff, 0x40, 0x0, 0x0, 0x3, 0xff,
- 0x40, 0x0, 0x0, 0x4, 0xff, 0x30, 0x0, 0x0,
- 0x9, 0xff, 0x0, 0x0, 0x1, 0x6f, 0xf9, 0x0,
- 0x0, 0x1f, 0xff, 0xa0, 0x0, 0x0, 0x2f, 0xff,
- 0xa0, 0x0, 0x0, 0x1, 0x7f, 0xf8, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0x30, 0x0, 0x0, 0x3, 0xff, 0x40, 0x0, 0x0,
- 0x3, 0xff, 0x40, 0x0, 0x0, 0x3, 0xff, 0x40,
- 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0xdf, 0xb0, 0x0,
- 0x0, 0x0, 0x6f, 0xf5, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x6e, 0xe0, 0x0,
- 0x0, 0x0, 0x0, 0x30,
-
- /* U+7C "|" */
- 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79,
- 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f,
- 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7,
- 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79,
- 0xf7, 0x9f, 0x74, 0x83,
-
- /* U+7D "}" */
- 0x11, 0x0, 0x0, 0x0, 0x7, 0xfa, 0x10, 0x0,
- 0x0, 0x4d, 0xfe, 0x20, 0x0, 0x0, 0x1d, 0xfd,
- 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
- 0xff, 0x70, 0x0, 0x0, 0xe, 0xf9, 0x0, 0x0,
- 0x0, 0xef, 0xa0, 0x0, 0x0, 0xe, 0xfa, 0x0,
- 0x0, 0x0, 0xdf, 0xa0, 0x0, 0x0, 0xc, 0xfb,
- 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0x0, 0x2,
- 0xff, 0xb2, 0x0, 0x0, 0x4, 0xef, 0xf8, 0x0,
- 0x0, 0x3d, 0xff, 0x90, 0x0, 0x2f, 0xfc, 0x30,
- 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0xcf, 0xb0,
- 0x0, 0x0, 0xd, 0xfa, 0x0, 0x0, 0x0, 0xef,
- 0xa0, 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0x0,
- 0xef, 0x90, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0,
- 0x5, 0xff, 0x40, 0x0, 0x0, 0xdf, 0xd0, 0x0,
- 0x4, 0xdf, 0xe2, 0x0, 0x0, 0x8f, 0xb1, 0x0,
- 0x0, 0x1, 0x20, 0x0, 0x0, 0x0,
-
- /* U+7E "~" */
- 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xdf, 0xff, 0xa1, 0x0, 0x0, 0xc,
- 0xd3, 0x3, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x2,
- 0xff, 0x10, 0xcf, 0xc2, 0x6, 0xef, 0xf9, 0x45,
- 0xdf, 0xb0, 0x1f, 0xf2, 0x0, 0x1, 0xcf, 0xff,
- 0xff, 0xe2, 0x1, 0x88, 0x0, 0x0, 0x0, 0x6c,
- 0xfe, 0xa1, 0x0,
-
- /* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x38, 0xdf, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe9, 0xbf, 0xff, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x73, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x10, 0x0, 0x0,
- 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xa2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0x7a, 0xcb,
- 0xcf, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0,
- 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1,
- 0x33, 0x2f, 0xff, 0x80, 0x0, 0x0, 0x7, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x3, 0xcf, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xf4,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x7, 0xef, 0xff, 0xfb, 0x20, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x32, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xe4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x27, 0xaa, 0x95, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F008 "" */
- 0x9b, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb0, 0x0, 0xb9, 0xfe, 0x44,
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe4, 0x44, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x88, 0x8f, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xf8, 0x88, 0xff,
- 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf, 0xfc, 0x0,
- 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xb0, 0x0, 0xcf, 0xfd, 0x0, 0xd, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
- 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xcc, 0xcf, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xfc, 0xcc, 0xff, 0xfc, 0x0,
- 0xc, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xff, 0xc0, 0x0, 0xcf, 0xfc, 0x0, 0xc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
- 0x0, 0xcf, 0xfc, 0x0, 0xc, 0xff, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xc0, 0x0, 0xcf,
- 0xff, 0xcc, 0xcf, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xfc, 0xcc, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xd, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
- 0x0, 0xdf, 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf,
- 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf, 0xff, 0x88,
- 0x8f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xf8, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x44, 0x4e, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0x44, 0xef,
- 0xab, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb0, 0x0, 0xb9,
-
- /* U+F00B "" */
- 0x9f, 0xff, 0xff, 0xfb, 0x0, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
- 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xfc,
- 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0xfb, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff,
- 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xaf, 0xff, 0xff, 0xfc, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfc,
- 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x9f, 0xff, 0xff, 0xfb, 0x0, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
-
- /* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xe9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x8e, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0xa, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf6,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x60, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xf6, 0x6, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xe7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F00D "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x10, 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x2d, 0xfa, 0x0, 0x6f, 0xff, 0xf5, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xa0, 0xef, 0xff,
- 0xff, 0x50, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xf2,
- 0xcf, 0xff, 0xff, 0xf5, 0x0, 0x2, 0xef, 0xff,
- 0xff, 0xf1, 0x2e, 0xff, 0xff, 0xff, 0x50, 0x2e,
- 0xff, 0xff, 0xff, 0x50, 0x2, 0xef, 0xff, 0xff,
- 0xf7, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2e,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
- 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff,
- 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2e, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0x2, 0xef, 0xff, 0xff,
- 0xf6, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x2e, 0xff,
- 0xff, 0xff, 0x40, 0x2e, 0xff, 0xff, 0xff, 0x50,
- 0xcf, 0xff, 0xff, 0xf4, 0x0, 0x2, 0xef, 0xff,
- 0xff, 0xf1, 0xef, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x2e, 0xff, 0xff, 0xf2, 0x6f, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xa0, 0x6, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x10, 0x0,
-
- /* U+F011 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x69, 0x96,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xa8, 0x0, 0x3,
- 0xff, 0xff, 0x30, 0x0, 0x8a, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0x60, 0x3, 0xff, 0xff,
- 0x30, 0x6, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x2,
- 0xef, 0xff, 0xe0, 0x3, 0xff, 0xff, 0x30, 0xe,
- 0xff, 0xff, 0x30, 0x0, 0x0, 0xd, 0xff, 0xff,
- 0xe0, 0x3, 0xff, 0xff, 0x30, 0xe, 0xff, 0xff,
- 0xd1, 0x0, 0x0, 0x9f, 0xff, 0xfe, 0x30, 0x3,
- 0xff, 0xff, 0x30, 0x3, 0xef, 0xff, 0xf9, 0x0,
- 0x2, 0xff, 0xff, 0xe2, 0x0, 0x3, 0xff, 0xff,
- 0x30, 0x0, 0x2e, 0xff, 0xff, 0x20, 0x9, 0xff,
- 0xff, 0x50, 0x0, 0x3, 0xff, 0xff, 0x30, 0x0,
- 0x5, 0xff, 0xff, 0x90, 0xe, 0xff, 0xfc, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0, 0xcf,
- 0xff, 0xe0, 0x3f, 0xff, 0xf5, 0x0, 0x0, 0x3,
- 0xff, 0xff, 0x30, 0x0, 0x0, 0x6f, 0xff, 0xf3,
- 0x6f, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0xf, 0xff, 0xf6, 0x7f, 0xff,
- 0xe0, 0x0, 0x0, 0x3, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0xe, 0xff, 0xf8, 0x8f, 0xff, 0xd0, 0x0,
- 0x0, 0x2, 0xff, 0xff, 0x20, 0x0, 0x0, 0xd,
- 0xff, 0xf8, 0x8f, 0xff, 0xe0, 0x0, 0x0, 0x0,
- 0xef, 0xfe, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf7,
- 0x6f, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x2, 0x20,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xf6, 0x3f, 0xff,
- 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xff, 0xf3, 0xe, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xe0, 0x9, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x90,
- 0x2, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2e, 0xff, 0xff, 0x20, 0x0, 0x9f,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xef, 0xff, 0xf9, 0x0, 0x0, 0x1e, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xd1, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xfa,
- 0x75, 0x57, 0xaf, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d,
- 0xff, 0xfe, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F013 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2c, 0xff, 0xff, 0xd6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xc1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x5d,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x6d, 0x40,
- 0x0, 0x0, 0xcf, 0xfe, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xcf, 0xfe, 0x20, 0x0, 0x7f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x1f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xe7, 0x32, 0x5d, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x13, 0xcf, 0xff, 0xff,
- 0xff, 0xe1, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0xfe, 0x60, 0x0, 0x7f, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0xe, 0xff, 0xff, 0xfb, 0x10, 0x0,
- 0x4, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xff, 0x90, 0x0, 0x0, 0x5f, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x4, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0x80, 0x0,
- 0x0, 0x7f, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0xe, 0xff, 0xff, 0xfb, 0x10, 0x3, 0xcf, 0xff,
- 0xff, 0xff, 0xe1, 0x0, 0x0, 0xb, 0xff, 0xff,
- 0xff, 0xfe, 0x60, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xe7, 0x32, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x1e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x0, 0x7f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x0, 0x0, 0xcf, 0xfe, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xcf, 0xfe, 0x10, 0x0, 0x1,
- 0xc8, 0x0, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0x0, 0x5d, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2c, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F015 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
- 0x60, 0x0, 0x0, 0x48, 0x88, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0xfd, 0x10, 0x0, 0xaf, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff,
- 0xff, 0xe3, 0x0, 0xbf, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0xbf, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0xf8,
- 0xcf, 0xff, 0xf9, 0xbf, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x30,
- 0xa, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xd2, 0x3,
- 0x10, 0x7f, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xbf, 0xff, 0xfa, 0x0, 0x8f,
- 0xd2, 0x4, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x2d, 0xff, 0xff, 0x80, 0xb, 0xff,
- 0xff, 0x40, 0x2d, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xf5, 0x2, 0xdf, 0xff,
- 0xff, 0xf7, 0x1, 0xbf, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x7f, 0xff, 0xfe, 0x30, 0x3e, 0xff, 0xff,
- 0xff, 0xff, 0xa0, 0x9, 0xff, 0xff, 0xc1, 0x0,
- 0xa, 0xff, 0xff, 0xc1, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0x6f, 0xff, 0xfe, 0x30,
- 0xbf, 0xff, 0xfa, 0x0, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe3, 0x4, 0xef, 0xff, 0xf4,
- 0xbf, 0xff, 0x70, 0x1b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x50, 0x2d, 0xff, 0xf3,
- 0xd, 0xf4, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xbf, 0x60,
- 0x1, 0x20, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x3, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0xcf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xd0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xfe, 0x10, 0x0, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x55, 0x55,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xdd, 0xdd, 0xef,
- 0xff, 0xff, 0xfe, 0xdd, 0xdd, 0xc1, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x10, 0x8,
- 0xff, 0xff, 0x80, 0x1, 0x11, 0x11, 0x11, 0x10,
- 0xbf, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x8f, 0xf8,
- 0x1, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe2, 0x6, 0x60, 0x2d, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x30, 0x3, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0x1e, 0xb0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x2e, 0xc1,
- 0x8f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x37, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x73,
-
- /* U+F01C "" */
- 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xff, 0xd8, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x9f, 0xff, 0xd0, 0x0, 0x0,
- 0x0, 0x1, 0xef, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0xa, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x30, 0x0,
- 0x0, 0x5f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xd0, 0x0,
- 0x1, 0xef, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf8, 0x0,
- 0xa, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x20,
- 0x5f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xd0,
- 0xdf, 0xff, 0xb8, 0x88, 0x88, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x48, 0x88, 0x88, 0x8e, 0xff, 0xf5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x58, 0x86, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0x9d, 0xef, 0xfe, 0xb7, 0x20,
- 0x0, 0x0, 0xdf, 0xff, 0x0, 0x0, 0x0, 0x6,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x30, 0x0,
- 0xdf, 0xff, 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0x10, 0xcf, 0xff,
- 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xfe, 0xef,
- 0xff, 0xff, 0xff, 0xe3, 0xbf, 0xff, 0x0, 0x2,
- 0xef, 0xff, 0xff, 0x94, 0x0, 0x0, 0x4b, 0xff,
- 0xff, 0xfe, 0xdf, 0xff, 0x0, 0xd, 0xff, 0xff,
- 0xc2, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x9f, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0x2, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x11, 0x0, 0x8, 0xff, 0xff, 0xff, 0x9, 0xff,
- 0xfd, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0xee, 0xff, 0xff, 0xff, 0xe, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0xff, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x2b, 0xcc, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xca, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xac, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xbc, 0xb2, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0xe, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xff, 0xe0, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff, 0x90,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0x11, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0x20, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xf9, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xb2, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xff, 0xff,
- 0xd0, 0x0, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xa4,
- 0x0, 0x0, 0x4a, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0xff, 0xfb, 0x3e, 0xff, 0xff, 0xff, 0xfe, 0xef,
- 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0xff, 0xfc,
- 0x1, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfb, 0x10, 0x0, 0x0, 0xff, 0xfd, 0x0, 0x3,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, 0x0,
- 0x0, 0x0, 0xff, 0xfd, 0x0, 0x0, 0x2, 0x7c,
- 0xff, 0xff, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x68, 0x85, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xb6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xff, 0xff, 0x38, 0x88, 0x88, 0x8f, 0xff, 0xff,
- 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x10,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3b, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x38,
- 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x1, 0xb9, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x6f, 0xfc, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0xcf,
- 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xdf,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x6f, 0xfd, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x2, 0xdb, 0x10,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x18, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xb6, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xdf, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x0,
- 0x0, 0x0, 0x21, 0x0, 0x1c, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0x0,
- 0x0, 0x4, 0xfe, 0x50, 0x1, 0xef, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x0,
- 0x0, 0x5, 0xff, 0xf6, 0x0, 0x4f, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x7f, 0xff, 0x40, 0xa, 0xff, 0x40,
- 0x38, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x5, 0xff, 0xe0, 0x2, 0xff, 0xa0,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1c, 0xa1, 0x0, 0x8f, 0xf6, 0x0, 0xcf, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x6f, 0xfd, 0x0, 0x1f, 0xfc, 0x0, 0x8f, 0xf2,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1c, 0xff, 0x80, 0xa, 0xff, 0x0, 0x4f, 0xf5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xdf, 0xd0, 0x7, 0xff, 0x20, 0x3f, 0xf7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xaf, 0xf0, 0x6, 0xff, 0x30, 0x2f, 0xf7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xdf, 0xd0, 0x7, 0xff, 0x20, 0x3f, 0xf7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1c, 0xff, 0x80, 0xa, 0xff, 0x0, 0x4f, 0xf5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x6f, 0xfd, 0x0, 0x1f, 0xfc, 0x0, 0x8f, 0xf2,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1c, 0xa1, 0x0, 0x9f, 0xf6, 0x0, 0xdf, 0xe0,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x5, 0xff, 0xe0, 0x3, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x7f, 0xff, 0x40, 0xa, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0x0,
- 0x0, 0x5, 0xff, 0xf6, 0x0, 0x4f, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x0,
- 0x0, 0x4, 0xfe, 0x50, 0x1, 0xef, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0,
- 0x0, 0x0, 0x21, 0x0, 0x1d, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xdf, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x18, 0x50, 0x0, 0x0, 0x0,
-
- /* U+F03E "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x93, 0x27, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0,
- 0xe, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x50, 0x3, 0xdf, 0xff, 0xff, 0xff,
- 0xc1, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x3e, 0xff,
- 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0x3, 0xef, 0xc1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xc1, 0x0, 0x0, 0x3b, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfd, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfc,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1,
-
- /* U+F048 "" */
- 0x48, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0x70, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xf9, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x1c, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0x0,
- 0x1, 0xdf, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0,
- 0x0, 0x2e, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30,
- 0x0, 0x3, 0xef, 0xff, 0xff, 0xfc, 0xbf, 0xff,
- 0x30, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xfc, 0xbf,
- 0xff, 0x30, 0x5, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xbf, 0xff, 0x30, 0x6f, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xbf, 0xff, 0x37, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf,
- 0xff, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xbf, 0xff, 0x31, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xbf, 0xff, 0x30, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0xaf, 0xff,
- 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0x9,
- 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xfc, 0xbf, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xfc, 0xbf,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfb,
- 0x9f, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x3d,
- 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F04B "" */
- 0x3, 0x75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfc, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x50, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff,
- 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xfc, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x74,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0x1a, 0xef, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x1a,
- 0xef, 0xff, 0xff, 0xd5, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xf2, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0x66,
- 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xff, 0xd0, 0x4, 0x89, 0x99, 0x98,
- 0x71, 0x0, 0x0, 0x4, 0x89, 0x99, 0x98, 0x71,
- 0x0,
-
- /* U+F04D "" */
- 0x3, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x60, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf2, 0x1a, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
- 0x0,
-
- /* U+F051 "" */
- 0x5, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68,
- 0x87, 0x5f, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xff, 0x7f, 0xff, 0xe3, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0x60, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0xff,
- 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfd, 0x10,
- 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xc1,
- 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x7f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0x1c, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9a, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1e, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x3,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa0, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf5, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x1, 0xbf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0x5, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb0,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x93, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10,
- 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0,
-
- /* U+F054 "" */
- 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0,
- 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
- 0x1, 0xdf, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x1d, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xa8, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
- 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x20, 0x23, 0x33, 0x33, 0x33,
- 0x8f, 0xff, 0xfe, 0x33, 0x33, 0x33, 0x33, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8d, 0xdc, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F068 "" */
- 0x1, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x10, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe1, 0x1, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x0,
-
- /* U+F06E "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xef,
- 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, 0xff, 0xba,
- 0xbd, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xfd, 0x50, 0x0,
- 0x0, 0x18, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x39,
- 0x95, 0x0, 0x2, 0xef, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x3f,
- 0xff, 0xd2, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
- 0x7, 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x3f,
- 0xff, 0xfe, 0x10, 0xd, 0xff, 0xff, 0xff, 0x20,
- 0x2f, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0xaf,
- 0xff, 0xff, 0x80, 0x8, 0xff, 0xff, 0xff, 0xc0,
- 0xbf, 0xff, 0xff, 0xff, 0x0, 0x48, 0x6b, 0xff,
- 0xff, 0xff, 0xd0, 0x5, 0xff, 0xff, 0xff, 0xf5,
- 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, 0xff,
- 0xff, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xff, 0xf9,
- 0xbf, 0xff, 0xff, 0xff, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xe0, 0x5, 0xff, 0xff, 0xff, 0xf5,
- 0x1f, 0xff, 0xff, 0xff, 0x20, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0x90, 0x8, 0xff, 0xff, 0xff, 0xc0,
- 0x6, 0xff, 0xff, 0xff, 0x70, 0x8, 0xff, 0xff,
- 0xff, 0xff, 0x20, 0xd, 0xff, 0xff, 0xff, 0x20,
- 0x0, 0xaf, 0xff, 0xff, 0xe0, 0x0, 0xaf, 0xff,
- 0xff, 0xf4, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xfb, 0x0, 0x4, 0xad,
- 0xc8, 0x10, 0x2, 0xef, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xfd, 0x50, 0x0,
- 0x0, 0x18, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, 0xff, 0xba,
- 0xac, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xff,
- 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F070 "" */
- 0x4, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0xff, 0xc1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xe3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x26, 0xad, 0xff, 0xed,
- 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xdf, 0xff, 0xfa, 0x16, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xba, 0xbe, 0xff, 0xff, 0xfe, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
- 0xff, 0xc5, 0x0, 0x0, 0x3, 0xbf, 0xff, 0xff,
- 0xb1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1b, 0xff, 0xff, 0xc1, 0x6, 0xba, 0x50,
- 0x0, 0x7f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xe4, 0x7f,
- 0xff, 0xc1, 0x0, 0xbf, 0xff, 0xff, 0xd1, 0x0,
- 0x0, 0x0, 0xad, 0x20, 0x0, 0x4, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xff,
- 0xb0, 0x0, 0x0, 0x5f, 0xff, 0x50, 0x0, 0x2,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0x50, 0xe, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0xe, 0xff, 0xff, 0x90,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0xbf, 0xff, 0xff, 0xfe, 0x0, 0x2, 0xff, 0xff,
- 0xff, 0xc2, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0xb0, 0xa, 0xff, 0xff, 0xff, 0xf2, 0x0, 0xe,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x3e, 0xff,
- 0xff, 0xfa, 0x0, 0xcf, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x5f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x1b, 0xff, 0xff, 0xd2, 0xe, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xdf, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff, 0xc4, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xff,
- 0xfe, 0xba, 0xb5, 0x0, 0x0, 0x2d, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xdf, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x37, 0xbd, 0xef, 0xfd, 0xb4, 0x0,
- 0x0, 0x7, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x44, 0x0,
-
- /* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x87, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xef, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0xff, 0x80, 0x0, 0x1e, 0xff,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xff, 0xf6, 0x0, 0x0, 0xef,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0xff, 0xff, 0x70, 0x0, 0xf,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xf9, 0x0,
- 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x2f, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xfb,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff,
- 0xd1, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0x0, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe0, 0x0, 0x1f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x1, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x9, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0x13, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x10, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x7f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x48,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x98, 0x71, 0x0,
-
- /* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xe3, 0x0, 0x24, 0x44, 0x44, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x44, 0x4f, 0xff, 0xfe, 0x30,
- 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1,
- 0x12, 0x22, 0x26, 0xff, 0xff, 0xa0, 0x1d, 0xff,
- 0xff, 0xd2, 0x2f, 0xff, 0xfd, 0x10, 0x0, 0x0,
- 0x0, 0x7f, 0xfb, 0x1, 0xdf, 0xff, 0xfd, 0x10,
- 0xf, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xc0, 0xc, 0xff, 0xff, 0xe2, 0x0, 0xe, 0xfd,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xfe, 0x20, 0x0, 0x4, 0x81, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0xff, 0xff, 0x40, 0x0, 0x0,
- 0x4, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0xff, 0xf5, 0x5, 0xe2, 0x0, 0xe, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
- 0x60, 0x4f, 0xfd, 0x10, 0xf, 0xff, 0xe2, 0x0,
- 0x12, 0x22, 0x26, 0xff, 0xff, 0xf7, 0x3, 0xff,
- 0xff, 0xd2, 0x2f, 0xff, 0xfe, 0x20, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x1, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x24, 0x44,
- 0x44, 0x30, 0x0, 0x0, 0x0, 0x0, 0x2, 0x44,
- 0x4f, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0,
-
- /* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xb2, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xfa, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x3f, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x8, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff,
- 0xe2, 0x6, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe0, 0x9f, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0x11, 0xdf, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x60, 0x1,
- 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3b, 0x50, 0x0,
-
- /* U+F078 "" */
- 0x1, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3b, 0x60, 0x1, 0xdf, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0x60, 0x9f, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0x16, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xd0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x8,
- 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x3f, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xfa, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xff, 0xe2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F079 "" */
- 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xf4,
- 0x0, 0x0, 0x57, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x60, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0xf4, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xff, 0xff, 0xf4, 0x2, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9,
- 0x0, 0x0, 0xf, 0xff, 0xf4, 0xef, 0xf9, 0x9f,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
- 0xff, 0x90, 0x0, 0x0, 0x7f, 0xf5, 0xe, 0xff,
- 0x90, 0xaf, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x32, 0x0,
- 0xef, 0xf9, 0x0, 0x41, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90,
- 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0x80,
- 0xe, 0xff, 0x90, 0x2a, 0x70, 0x0, 0x0, 0xe,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xa0, 0xef, 0xf9, 0x2e, 0xff, 0x60, 0x0,
- 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xff, 0x9e, 0xff, 0xad, 0xff, 0xf9,
- 0x0, 0x0, 0xe, 0xff, 0xc7, 0x77, 0x77, 0x77,
- 0x77, 0x73, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x10, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf5, 0x4, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x10, 0x0, 0x0, 0xe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x4, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x3, 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xff, 0xfc, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xdb, 0x0, 0x0,
- 0x0,
-
- /* U+F07B "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd8, 0x88, 0x88, 0x88, 0x88, 0x87, 0x30,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff,
- 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0xcf,
- 0xff, 0xff, 0xf6, 0x22, 0x22, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x0, 0xbf,
- 0xff, 0xff, 0xf4, 0x0, 0x11, 0x11, 0x11, 0x10,
- 0xbf, 0xff, 0xff, 0xff, 0xc0, 0xaf, 0xff, 0xff,
- 0xf3, 0xc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
- 0xff, 0xff, 0xf1, 0x18, 0x99, 0x99, 0x60, 0x1f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x10, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xcc, 0xcc, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0x1e, 0xb0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x2e, 0xc1,
- 0x8f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x37, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x73,
-
- /* U+F095 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0x62, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff,
- 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x26, 0x10, 0x0, 0x0, 0x0, 0x5f,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xfc, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfe, 0x10,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x5, 0xef, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
- 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xe9,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17,
- 0x76, 0x53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0C4 "" */
- 0x0, 0x5, 0x99, 0x72, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0x7b, 0xb8,
- 0x10, 0x1e, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0xff, 0xfe, 0x38, 0xff, 0xff,
- 0xef, 0xff, 0xf1, 0x0, 0x0, 0x2, 0xef, 0xff,
- 0xff, 0xf4, 0xdf, 0xfe, 0x10, 0x7f, 0xff, 0x50,
- 0x0, 0x2, 0xef, 0xff, 0xff, 0xf5, 0xf, 0xff,
- 0x80, 0x0, 0xff, 0xf7, 0x0, 0x2, 0xef, 0xff,
- 0xff, 0xf5, 0x0, 0xef, 0xfc, 0x0, 0x4f, 0xff,
- 0x60, 0x2, 0xef, 0xff, 0xff, 0xf5, 0x0, 0xa,
- 0xff, 0xfd, 0xbf, 0xff, 0xf4, 0x3, 0xef, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff,
- 0xff, 0xe5, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x18, 0xcd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff,
- 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0x99, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe2,
- 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x1e, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
- 0xff, 0xe2, 0x0, 0x0, 0x8, 0xff, 0xff, 0xef,
- 0xff, 0xf6, 0x5, 0xff, 0xff, 0xff, 0xe2, 0x0,
- 0x0, 0xdf, 0xfe, 0x10, 0x7f, 0xff, 0x50, 0x5,
- 0xff, 0xff, 0xff, 0xe2, 0x0, 0xf, 0xff, 0x80,
- 0x0, 0xff, 0xf7, 0x0, 0x5, 0xff, 0xff, 0xff,
- 0xe2, 0x0, 0xef, 0xfc, 0x0, 0x4f, 0xff, 0x60,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xe2, 0xa, 0xff,
- 0xfd, 0xbf, 0xff, 0xf2, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xe2, 0x2f, 0xff, 0xff, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0x40,
- 0x4f, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xbe, 0xfb, 0x30, 0x0, 0x18, 0xcd, 0xb5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F0C5 "" */
- 0x0, 0x0, 0x0, 0x1, 0x44, 0x44, 0x44, 0x44,
- 0x42, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0x80, 0xeb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xe, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xef,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0xef, 0xff, 0xf4, 0xaf, 0xff, 0xf4, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xbb, 0xbb, 0xb3, 0xff, 0xff, 0xf4, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xf4,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
- 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
- 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf5, 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff,
- 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff,
- 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0xff, 0xff, 0xf5, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f,
- 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xa2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x37, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x60, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F0C7 "" */
- 0x4, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x87, 0x20, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x40, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0x0, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0x40, 0xf, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0x30, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xfe, 0xf,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xff, 0xf3, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0x4f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xff, 0xff, 0xf4, 0xff, 0xfd, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x7e, 0xff, 0xff,
- 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x82, 0x15, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0x70, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xf4, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0,
- 0x9, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff,
- 0xff, 0xff, 0x30, 0x0, 0x0, 0xef, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0xa9, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe0, 0x1a, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3,
- 0x0,
-
- /* U+F0E7 "" */
- 0x0, 0x8, 0xbb, 0xbb, 0xbb, 0xbb, 0x80, 0x0,
- 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x70, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf1, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0x0, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0xaf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0EA "" */
- 0x0, 0x0, 0x0, 0x1, 0x43, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x49, 0x99, 0x99, 0xff, 0xef, 0xfe, 0x99,
- 0x99, 0x81, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xa0, 0x1e, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa, 0x1, 0xef,
- 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xfc, 0x64, 0x44, 0x44, 0x44,
- 0x30, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0x20, 0xaf, 0xff, 0xff,
- 0xff, 0xa0, 0xd6, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa, 0xe, 0xf6,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0x1, 0xff, 0xff,
- 0xff, 0xff, 0xa0, 0xef, 0xf6, 0x0, 0xff, 0xff,
- 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa, 0xe,
- 0xff, 0xf6, 0xf, 0xff, 0xff, 0xff, 0x1, 0xff,
- 0xff, 0xff, 0xff, 0xa0, 0xef, 0xff, 0xf3, 0xff,
- 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa,
- 0x4, 0x44, 0x44, 0x1f, 0xff, 0xff, 0xff, 0x1,
- 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff,
- 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf5, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff,
- 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff,
- 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0xaf, 0xff, 0xff, 0xf0, 0x1f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x42, 0x0,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xa2, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x8d, 0xff, 0xfa, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff,
- 0xff, 0xff, 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x9, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xa0, 0x1, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x70, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf7, 0x6f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x15, 0x73, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F11C "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0xff, 0xfd, 0x88, 0x9f, 0xf8, 0x88, 0xff, 0x98,
- 0x8e, 0xfa, 0x88, 0xbf, 0xd8, 0x89, 0xff, 0xf8,
- 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0xcf, 0x0,
- 0xa, 0xf1, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
- 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0xcf, 0x0,
- 0xa, 0xf1, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
- 0xff, 0xf9, 0x0, 0x1f, 0xd0, 0x0, 0xdf, 0x10,
- 0xc, 0xf3, 0x0, 0x6f, 0x90, 0x1, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xdc, 0xce, 0xfe, 0xcc, 0xdf,
- 0xfc, 0xcd, 0xff, 0xcc, 0xcf, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x3f,
- 0x80, 0x0, 0xfd, 0x0, 0xa, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x2f,
- 0x80, 0x0, 0xed, 0x0, 0xa, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x3f,
- 0x80, 0x0, 0xfd, 0x0, 0xa, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xdc, 0xce, 0xfe, 0xcc, 0xdf,
- 0xfc, 0xcd, 0xff, 0xcc, 0xcf, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xf9, 0x0, 0x1f, 0xd0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0x90, 0x1, 0xff, 0xf8,
- 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
- 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
- 0xff, 0xfd, 0x88, 0x9f, 0xf8, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0xbf, 0xd8, 0x89, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xef, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x18, 0xef, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29, 0xff,
- 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3a, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x7e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x2, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x0, 0x1, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x44, 0x44, 0x44, 0x44, 0x4d, 0xff,
- 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x17, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0,
-
- /* U+F15B "" */
- 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x10, 0x30,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0xf, 0xa0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x40, 0xff, 0xa0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf, 0xff,
- 0xa0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xff, 0xff, 0xa0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xa0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0xff, 0xff,
- 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xb, 0xbb, 0xbb, 0xbb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x14, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x10,
-
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0x69, 0xab, 0xcb, 0xa9, 0x63, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0,
- 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xba,
- 0xaa, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff, 0xc7, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x37, 0xcf, 0xff, 0xff,
- 0xff, 0xd1, 0x3, 0xef, 0xff, 0xff, 0xf9, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29,
- 0xff, 0xff, 0xff, 0xe3, 0xef, 0xff, 0xff, 0xb2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xbf, 0xff, 0xff, 0xe7, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf7, 0x7,
- 0xfe, 0x20, 0x0, 0x0, 0x0, 0x48, 0xbe, 0xff,
- 0xfd, 0xb8, 0x40, 0x0, 0x0, 0x0, 0x2d, 0xf7,
- 0x0, 0x4, 0x10, 0x0, 0x0, 0x18, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe8, 0x10, 0x0, 0x0,
- 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xb1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xff, 0xff, 0xff, 0xc8, 0x76, 0x78, 0xcf,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xe7, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xef, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x47, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
- 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xdb, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F240 "" */
- 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f,
- 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F241 "" */
- 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F242 "" */
- 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F243 "" */
- 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
- 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
- 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
- 0xef, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0xe, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xf1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F244 "" */
- 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F287 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5e, 0xfe, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x23, 0xff, 0xff, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0xcd, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xe1, 0x0, 0xcf, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0x50, 0x0, 0x7, 0xa7, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x10, 0x0, 0x0, 0x4, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xef, 0xfc, 0x20, 0x0, 0xc, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x40,
- 0x0, 0x0, 0x4f, 0xff, 0xff, 0xe1, 0x0, 0x4f,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xfb, 0x20, 0x0, 0xcf, 0xff, 0xff, 0xfa,
- 0x35, 0xef, 0x94, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x4d, 0xff, 0xf7, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0xef, 0xff, 0xff, 0xfe, 0xbb, 0xbb, 0xbc, 0xff,
- 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbf, 0xff,
- 0xfe, 0x50, 0x8f, 0xff, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x80, 0x0, 0xb, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xb2, 0x0, 0x0, 0x0, 0x58,
- 0x73, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xff, 0x20, 0x6, 0xdd, 0xdd, 0xc2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xc0, 0x9, 0xff, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xde, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xaf,
- 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x19, 0xff, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F293 "" */
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x34, 0x32, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0xef,
- 0xff, 0xff, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10,
- 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xc7, 0xff,
- 0xff, 0xff, 0xd1, 0x0, 0x0, 0xb, 0xff, 0xff,
- 0xff, 0xc0, 0x8f, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x5f, 0xff, 0xff, 0xff, 0xc0, 0x9, 0xff, 0xff,
- 0xff, 0x50, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0xaf, 0xff, 0xff, 0xb0, 0x2, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0xb, 0xff, 0xff, 0xf1,
- 0x6, 0xff, 0xff, 0xaf, 0xff, 0xc0, 0x39, 0x0,
- 0xcf, 0xff, 0xf5, 0xa, 0xff, 0xf9, 0x3, 0xef,
- 0xc0, 0x3f, 0x90, 0x1d, 0xff, 0xf8, 0xc, 0xff,
- 0xfd, 0x10, 0x3e, 0xc0, 0x2f, 0xb0, 0xc, 0xff,
- 0xfa, 0xe, 0xff, 0xff, 0xd1, 0x3, 0xb0, 0x2b,
- 0x0, 0xaf, 0xff, 0xfc, 0xf, 0xff, 0xff, 0xfd,
- 0x10, 0x10, 0x0, 0x9, 0xff, 0xff, 0xfd, 0xf,
- 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x7f, 0xff,
- 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xfd, 0x10,
- 0x5, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff,
- 0xff, 0xfb, 0x0, 0x3, 0xff, 0xff, 0xff, 0xfe,
- 0xf, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xfd, 0xf, 0xff, 0xff, 0xfb, 0x0,
- 0x20, 0x11, 0x4, 0xff, 0xff, 0xfd, 0xe, 0xff,
- 0xff, 0xb0, 0x5, 0xc0, 0x2d, 0x10, 0x5f, 0xff,
- 0xfc, 0xc, 0xff, 0xfb, 0x0, 0x5f, 0xc0, 0x2f,
- 0xd0, 0x7, 0xff, 0xfa, 0x9, 0xff, 0xfb, 0x5,
- 0xff, 0xc0, 0x3f, 0x60, 0x1d, 0xff, 0xf7, 0x5,
- 0xff, 0xff, 0xdf, 0xff, 0xc0, 0x36, 0x1, 0xdf,
- 0xff, 0xf4, 0x1, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x0, 0x1d, 0xff, 0xff, 0xf0, 0x0, 0xaf, 0xff,
- 0xff, 0xff, 0xd0, 0x1, 0xdf, 0xff, 0xff, 0xa0,
- 0x0, 0x2f, 0xff, 0xff, 0xff, 0xd0, 0x1d, 0xff,
- 0xff, 0xff, 0x20, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xd1, 0xcf, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xec, 0xff, 0xff, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x2, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x58, 0xab, 0xba, 0x84, 0x0, 0x0, 0x0,
-
- /* U+F2ED "" */
- 0x0, 0x0, 0x0, 0x0, 0x14, 0x44, 0x44, 0x43,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x58, 0x88, 0x88, 0x8c, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x88, 0x88, 0x88, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x28, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x86, 0x0, 0x4, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0x4f, 0xff, 0xf5, 0x5f, 0xff, 0x92,
- 0xff, 0xfc, 0x1c, 0xff, 0xfc, 0x0, 0x4, 0xff,
- 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff, 0xa0, 0xaf,
- 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2, 0x2f, 0xff,
- 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc, 0x0, 0x4,
- 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff, 0xa0,
- 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2, 0x2f,
- 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc, 0x0,
- 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff,
- 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2,
- 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc,
- 0x0, 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe,
- 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff,
- 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff,
- 0xfc, 0x0, 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6,
- 0xe, 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f,
- 0xff, 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa,
- 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff, 0x22, 0xff,
- 0xf6, 0xe, 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0,
- 0x4f, 0xff, 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa,
- 0xa, 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff, 0x55,
- 0xff, 0xf9, 0x2f, 0xff, 0xc1, 0xcf, 0xff, 0xc0,
- 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb, 0x0, 0x2, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x4,
- 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x61, 0x0, 0x0,
-
- /* U+F304 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x66, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xdf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xec,
- 0x0, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xfc, 0x0,
- 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xfc, 0x0, 0xbf,
- 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xff, 0xff, 0xfc, 0x0, 0xbf, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0xbe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfe,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xff, 0xff, 0xec, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x76,
- 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F55A "" */
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd5, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0xb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff,
- 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0x8, 0xff, 0xff, 0x80, 0x7, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe0, 0x0, 0x8, 0xff, 0x80, 0x0, 0xe, 0xff,
- 0xff, 0xff, 0xf0, 0xb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x8, 0x80, 0x0, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0x8, 0x80, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0xff, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x8, 0xff,
- 0x80, 0x0, 0xe, 0xff, 0xff, 0xff, 0xf0, 0x0,
- 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x8,
- 0xff, 0xff, 0x80, 0x8, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x99, 0xff, 0xff, 0xff, 0x99, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xb, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0,
-
- /* U+F7C2 "" */
- 0x0, 0x0, 0x0, 0x17, 0x88, 0x88, 0x88, 0x88,
- 0x87, 0x50, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x2d,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x2e, 0xff, 0x20, 0x1f, 0xa0,
- 0xe, 0xd0, 0x8, 0xff, 0xf0, 0x2e, 0xff, 0xf2,
- 0x1, 0xfa, 0x0, 0xed, 0x0, 0x8f, 0xff, 0x3e,
- 0xff, 0xff, 0x20, 0x1f, 0xa0, 0xe, 0xd0, 0x8,
- 0xff, 0xfe, 0xff, 0xff, 0xf2, 0x1, 0xfa, 0x0,
- 0xed, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x20,
- 0x1f, 0xa0, 0xe, 0xd0, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x24,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x20,
- 0x0,
-
- /* U+F8A2 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xf1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9,
- 0xff, 0xf1, 0x0, 0x0, 0x0, 0x5c, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0x10, 0x0, 0x0, 0x7f, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf1, 0x0,
- 0x0, 0x8f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xff, 0x10, 0x0, 0x9f,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0xf1, 0x0, 0xaf, 0xff, 0xff,
- 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0x10, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf1, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x2e, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1d, 0xff, 0xff,
- 0xfe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x10, 0x0, 0x1c, 0xff, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xa, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 111, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 115, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 40, .adv_w = 143, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
- {.bitmap_index = 65, .adv_w = 279, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 235, .adv_w = 252, .box_w = 14, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 417, .adv_w = 328, .box_w = 19, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 607, .adv_w = 278, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 777, .adv_w = 78, .box_w = 3, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
- {.bitmap_index = 788, .adv_w = 153, .box_w = 9, .box_h = 30, .ofs_x = 1, .ofs_y = -7},
- {.bitmap_index = 923, .adv_w = 156, .box_w = 8, .box_h = 30, .ofs_x = 0, .ofs_y = -7},
- {.bitmap_index = 1043, .adv_w = 193, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 1115, .adv_w = 254, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 1220, .adv_w = 88, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 1238, .adv_w = 124, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 1250, .adv_w = 118, .box_w = 5, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1258, .adv_w = 185, .box_w = 11, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1379, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1519, .adv_w = 252, .box_w = 8, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1599, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1739, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1869, .adv_w = 252, .box_w = 16, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2029, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2159, .adv_w = 251, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2299, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2439, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2579, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2709, .adv_w = 109, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2739, .adv_w = 95, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 2787, .adv_w = 228, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 2872, .adv_w = 246, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 5},
- {.bitmap_index = 2920, .adv_w = 234, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 3005, .adv_w = 212, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3125, .adv_w = 402, .box_w = 23, .box_h = 26, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 3424, .adv_w = 292, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3604, .adv_w = 279, .box_w = 14, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 3744, .adv_w = 292, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3904, .adv_w = 294, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4054, .adv_w = 255, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4184, .adv_w = 248, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4314, .adv_w = 305, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4484, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4644, .adv_w = 122, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4684, .adv_w = 247, .box_w = 14, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4824, .adv_w = 281, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4984, .adv_w = 241, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5114, .adv_w = 391, .box_w = 21, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5324, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5484, .adv_w = 308, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5654, .adv_w = 283, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5804, .adv_w = 308, .box_w = 17, .box_h = 24, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 6008, .adv_w = 276, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 6158, .adv_w = 266, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6308, .adv_w = 267, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6478, .adv_w = 291, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6638, .adv_w = 285, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6818, .adv_w = 397, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7068, .adv_w = 281, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7238, .adv_w = 269, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7408, .adv_w = 268, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 7558, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 7639, .adv_w = 184, .box_w = 12, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7771, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7852, .adv_w = 187, .box_w = 11, .box_h = 10, .ofs_x = 0, .ofs_y = 10},
- {.bitmap_index = 7907, .adv_w = 202, .box_w = 13, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7927, .adv_w = 138, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 17},
- {.bitmap_index = 7941, .adv_w = 244, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8039, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8186, .adv_w = 235, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8284, .adv_w = 253, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8421, .adv_w = 237, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8519, .adv_w = 156, .box_w = 10, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8629, .adv_w = 251, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 8766, .adv_w = 247, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8903, .adv_w = 109, .box_w = 4, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8943, .adv_w = 107, .box_w = 6, .box_h = 26, .ofs_x = -1, .ofs_y = -6},
- {.bitmap_index = 9021, .adv_w = 227, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9168, .adv_w = 109, .box_w = 3, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9200, .adv_w = 393, .box_w = 22, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9365, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9463, .adv_w = 256, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9568, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 9715, .adv_w = 255, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 9852, .adv_w = 152, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9920, .adv_w = 231, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 10018, .adv_w = 146, .box_w = 9, .box_h = 19, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10104, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 10202, .adv_w = 217, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10307, .adv_w = 337, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10465, .adv_w = 222, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10570, .adv_w = 212, .box_w = 13, .box_h = 21, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 10707, .adv_w = 222, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 10797, .adv_w = 152, .box_w = 10, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 10937, .adv_w = 109, .box_w = 3, .box_h = 24, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 10973, .adv_w = 152, .box_w = 9, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 11099, .adv_w = 305, .box_w = 17, .box_h = 6, .ofs_x = 1, .ofs_y = 5},
- {.bitmap_index = 11150, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 11556, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 11850, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12200, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12494, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12704, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 13110, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 13502, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13902, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 14308, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14644, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 15050, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 15211, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 15453, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 15885, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 16179, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
- {.bitmap_index = 16413, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 16776, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 17089, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 17402, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
- {.bitmap_index = 17636, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 17961, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 18161, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 18361, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 18674, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 18762, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 19098, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 19606, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 20085, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 20435, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 20623, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 20811, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 21196, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 21490, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 21896, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 22317, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 22630, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 22993, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 23306, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 23582, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 23945, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 24308, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 24644, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 25079, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 25384, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 25839, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 26172, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 26505, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 26838, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 27171, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 27504, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 27918, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 28237, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 28600, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 29021, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 29389, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 29694, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -9, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -23, 0, 0, 0,
- 0, 0, 0, 0, -26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -11, -13, 0, -4, -13, 0, -17, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -37, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -26, 0, 0, 0, 0, 0, 0, -13,
- 0, -2, 0, 0, -28, -4, -19, -15,
- 0, -21, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -4, -2, -11, -7, 0,
- 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -6,
- 0, -5, 0, 0, -12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -6, 0, 0, 0, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- 0, 0, 0, 0, 0, -22, 0, 0,
- 0, -5, 0, 0, 0, -6, 0, -5,
- 0, -5, -9, -5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0,
- 0, -4, -4, 0, -4, 0, 0, 0,
- -4, -6, -5, 0, 0, 0, 0, 0,
- 0, 0, 0, -51, 0, 0, 0, -37,
- 0, -58, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, -7, -5, 0, 0, -5,
- -6, 0, 0, -5, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, -6, 0,
- 0, 0, 4, -6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -14, 0, 0,
- 0, -7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -6, 0, -5,
- -6, 0, 0, 0, -5, -9, -14, 0,
- 0, 0, 0, -73, 0, 0, 0, 0,
- 0, 0, 0, 4, -14, 0, 0, -60,
- -12, -38, -31, 0, -52, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -10,
- -29, -20, 0, 0, 0, 0, 0, 0,
- 0, 0, -71, 0, 0, 0, -30, 0,
- -44, 0, 0, 0, 0, 0, -7, 0,
- -6, 0, -2, -3, 0, 0, -3, 0,
- 0, 3, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -9, 0, -6,
- -4, 0, -8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -17, 0, -4, 0, 0, -10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -9, 0,
- 0, 0, 0, -48, -51, 0, 0, -17,
- -6, -52, -3, 4, 0, 4, 3, 0,
- 4, 0, 0, -25, -22, 0, -24, -22,
- -16, -25, 0, -21, -16, -12, -17, -13,
- 0, 0, 0, 0, 4, 0, -49, -8,
- 0, 0, -16, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, -10, -10,
- 0, 0, -10, -7, 0, 0, -6, -2,
- 0, 0, 0, 4, 0, 0, 0, 3,
- 0, -27, -13, 0, 0, -9, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0,
- 3, -7, -7, 0, 0, -7, -5, 0,
- 0, -4, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, -10, 0, 0,
- 0, -5, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, -6, 0, 0,
- -5, 0, 0, 0, -5, -7, 0, 0,
- 0, 0, 0, 0, -7, 4, -11, -46,
- -11, 0, 0, -21, -6, -21, -3, 4,
- -21, 4, 4, 3, 4, 0, 4, -16,
- -14, -5, -9, -14, -9, -13, -5, -9,
- -4, 0, -5, -7, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, -6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -5, 0, 0, -5, 0,
- 0, 0, -4, -6, -6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -4, 0, 0, -4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, -6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -2, 0, -3, -3,
- 0, 0, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -3, 0, 0, 0, 0, 0,
- 4, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, -5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, -23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -30, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, 0,
- -5, -3, 0, 0, 4, 0, 0, 0,
- -27, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -9, -4, 3, 0, -4, 0, 0, 11,
- 0, 4, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, -23, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, -3,
- 3, 0, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -27, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- -4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -4, 0, 0, -4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 4,
- .kern_classes = 1,
- .bitmap_format = 0
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_28 = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 32, /*The maximum line height required by the font*/
- .base_line = 7, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_NONE,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_28*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c b/src/libs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c
deleted file mode 100644
index 92e71479..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_roboto_28_compressed.c
+++ /dev/null
@@ -1,2451 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 28 px
- * Bpp: 3
- * Opts: --bpp 3 --size 28 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_28_compressed.c --force-fast-kern-format
- ******************************************************************************/
-
-#ifndef LV_FONT_ROBOTO_28_COMPRESSED
-#define LV_FONT_ROBOTO_28_COMPRESSED 1
-#endif
-
-#if LV_FONT_ROBOTO_28_COMPRESSED
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0xbf, 0x80, 0xff, 0xe3, 0x90, 0x38, 0x81, 0xff,
- 0xcf, 0x9b, 0x80, 0x24, 0x7, 0x2d, 0x4, 0x2c,
- 0xd0, 0x88,
-
- /* U+22 "\"" */
- 0x3f, 0x7, 0xd8, 0x1f, 0xcc, 0xf, 0xf1, 0x0,
- 0x40, 0xf7, 0x2, 0x65, 0x10, 0x51,
-
- /* U+23 "#" */
- 0x3, 0xef, 0xc0, 0x53, 0xb0, 0x3f, 0x20, 0x80,
- 0x88, 0x20, 0x7e, 0x20, 0x81, 0x20, 0x80, 0xfd,
- 0x86, 0x3, 0xff, 0x84, 0xc3, 0x0, 0x82, 0x3,
- 0xf8, 0x82, 0x0, 0x82, 0x7, 0x7f, 0x80, 0x7f,
- 0x40, 0xff, 0x10, 0x3f, 0xf8, 0xff, 0xcc, 0x5f,
- 0xe0, 0x1f, 0xc4, 0xe, 0x41, 0x0, 0x41, 0x1,
- 0xfc, 0x40, 0xc4, 0x60, 0x3f, 0x20, 0x80, 0xb0,
- 0x40, 0x77, 0xf5, 0xb, 0xf9, 0xd, 0xf8, 0x81,
- 0xff, 0xc7, 0xfe, 0x23, 0xfa, 0x85, 0xfc, 0x40,
- 0xe2, 0x6, 0x23, 0x1, 0xf8, 0x84, 0x5, 0x81,
- 0x3, 0xf2, 0x4, 0x9, 0x86, 0x7, 0xee, 0x30,
- 0x11, 0x4, 0xf, 0xc8, 0x30, 0x4, 0x10, 0x3c,
-
- /* U+24 "$" */
- 0x3, 0xdb, 0x90, 0x3f, 0xfb, 0x33, 0x91, 0xa9,
- 0x3, 0x8f, 0x60, 0x65, 0x98, 0x1b, 0x0, 0x9b,
- 0x20, 0x8, 0x40, 0x30, 0x15, 0x92, 0x74, 0x5,
- 0x1, 0x80, 0x20, 0x32, 0x21, 0x81, 0x88, 0x1e,
- 0x40, 0x62, 0x8, 0x1e, 0xb6, 0x1, 0x80, 0x50,
- 0x38, 0xa4, 0x0, 0x88, 0x59, 0x81, 0xfd, 0x88,
- 0x33, 0xd2, 0x7, 0xda, 0x10, 0xb, 0x50, 0x3e,
- 0x7b, 0x18, 0x5, 0xc0, 0xfc, 0x67, 0x40, 0x28,
- 0x1f, 0xea, 0x82, 0xa, 0xd0, 0x1f, 0x60, 0x4,
- 0x92, 0x10, 0x3c, 0x40, 0x90, 0xa, 0x7, 0xb8,
- 0x2, 0x60, 0xd8, 0xd, 0x10, 0x40, 0x38, 0x9,
- 0xf6, 0x76, 0x2, 0x80, 0x39, 0x0, 0x24, 0x1,
- 0x70, 0x31, 0xbe, 0x0, 0xbe, 0x81, 0xf9, 0x80,
- 0x40, 0x7f, 0xf1, 0xc0,
-
- /* U+25 "%" */
- 0x0, 0xf7, 0xcc, 0xf, 0xfe, 0xd, 0x85, 0x19,
- 0x40, 0xff, 0x92, 0x1f, 0x79, 0x48, 0x6, 0x84,
- 0xd, 0x85, 0x2, 0xa3, 0x1, 0x36, 0xa0, 0x78,
- 0x81, 0x10, 0x31, 0x86, 0x1, 0xe2, 0x7, 0xe8,
- 0x20, 0x1d, 0x85, 0x2, 0x83, 0x6, 0x94, 0x7,
- 0x24, 0x3e, 0xe2, 0x90, 0x41, 0x40, 0xfa, 0xc2,
- 0x8c, 0xa2, 0x8a, 0x7, 0xf3, 0xdf, 0x98, 0x4b,
- 0x1, 0xff, 0xc3, 0xa2, 0x81, 0xff, 0xc3, 0x82,
- 0x0, 0xbf, 0xb2, 0x3, 0xf1, 0x65, 0x8e, 0x8a,
- 0x35, 0x81, 0xf7, 0x1c, 0x40, 0xf5, 0xc2, 0x1,
- 0xe8, 0x59, 0x8, 0x40, 0x5, 0x4, 0x6, 0x2c,
- 0xc0, 0x4, 0xe, 0x20, 0x7b, 0x8e, 0x4, 0x40,
- 0xe2, 0x7, 0xcc, 0x81, 0x21, 0x0, 0x14, 0x10,
- 0x1b, 0x40, 0x34, 0xf, 0x5c, 0x20, 0x1f, 0xfc,
- 0xe, 0x8a, 0x35, 0x80,
-
- /* U+26 "&" */
- 0x3, 0x3d, 0xfb, 0x30, 0x3f, 0xda, 0x10, 0x6,
- 0x50, 0x3f, 0x42, 0x1e, 0xc6, 0x12, 0x1, 0xf2,
- 0x6, 0x12, 0x84, 0x70, 0x3e, 0x21, 0x1, 0x98,
- 0x1f, 0xf1, 0x3, 0x21, 0x80, 0xf9, 0x84, 0x40,
- 0x60, 0xc, 0xf, 0xa8, 0xe, 0xb9, 0x18, 0xf,
- 0xc6, 0x3, 0x41, 0xe4, 0xf, 0xe4, 0x4, 0x70,
- 0x1f, 0xe7, 0x80, 0x8a, 0x3, 0x12, 0x2, 0x70,
- 0x2c, 0x45, 0x20, 0xe, 0xc0, 0x28, 0xd, 0x38,
- 0x8c, 0x43, 0x3, 0x30, 0x1c, 0xb, 0x80, 0xe3,
- 0x2, 0x3, 0x80, 0x20, 0x46, 0x83, 0x98, 0x40,
- 0x7f, 0x95, 0x4, 0x4, 0x1, 0x80, 0x40, 0x39,
- 0x10, 0x8, 0x9, 0x20, 0x74, 0x80, 0x58, 0x80,
- 0x48, 0x5, 0x50, 0x5b, 0xf5, 0x21, 0x91, 0x48,
- 0x15, 0xa4, 0x4, 0x5e, 0x9c, 0x7, 0x0,
-
- /* U+27 "'" */
- 0x9d, 0x81, 0xf8, 0x81, 0xcf, 0x32,
-
- /* U+28 "(" */
- 0x3, 0xe2, 0x7, 0xd7, 0x81, 0xea, 0x98, 0x1d,
- 0x11, 0xa0, 0x64, 0xc6, 0x3, 0xa0, 0x80, 0x73,
- 0x21, 0x81, 0xd4, 0x30, 0x38, 0x90, 0xa0, 0x72,
- 0x0, 0x40, 0xec, 0x10, 0x1e, 0x40, 0x81, 0xfb,
- 0x81, 0xc4, 0xf, 0xf8, 0x81, 0xff, 0xc5, 0x20,
- 0x71, 0x3, 0xfe, 0xe0, 0x79, 0x2, 0x7, 0xb0,
- 0x40, 0x79, 0x0, 0x20, 0x71, 0x21, 0x40, 0xf5,
- 0xc, 0xf, 0x32, 0x18, 0x1e, 0x82, 0x1, 0xe4,
- 0xc5, 0x3, 0xd1, 0x25, 0x3, 0xd5, 0x30, 0x3e,
- 0xbc, 0x0,
-
- /* U+29 ")" */
- 0x3, 0xf2, 0xe8, 0xe, 0x62, 0xa0, 0x31, 0xc2,
- 0x90, 0x31, 0x63, 0x81, 0xd0, 0x16, 0x7, 0x41,
- 0x0, 0xe6, 0x1, 0x81, 0xc8, 0x60, 0x3b, 0x4,
- 0x7, 0x20, 0x8, 0xc, 0x40, 0x10, 0x3e, 0xe0,
- 0x71, 0x4, 0xf, 0xfe, 0x89, 0x4, 0xf, 0xb8,
- 0x18, 0x80, 0x20, 0x64, 0x1, 0x1, 0xb0, 0x40,
- 0x72, 0x18, 0xc, 0x80, 0x30, 0x34, 0x10, 0xc,
- 0xc9, 0x30, 0x23, 0x7, 0x2, 0x38, 0x52, 0x4,
- 0xc5, 0x40, 0x65, 0x90, 0x1c,
-
- /* U+2A "*" */
- 0x3, 0xbf, 0x1, 0xff, 0xd2, 0xa8, 0xf, 0x18,
- 0x1a, 0xbe, 0x0, 0x7b, 0x1b, 0x26, 0x43, 0x1,
- 0x8, 0x44, 0xa6, 0xc2, 0x0, 0xdf, 0x50, 0x13,
- 0x20, 0xb, 0x3, 0xd4, 0x58, 0x38, 0x1d, 0x42,
- 0x46, 0x4a, 0x1, 0xea, 0x3, 0x82, 0x6, 0xb8,
- 0x8, 0xda, 0x0,
-
- /* U+2B "+" */
- 0x3, 0x8b, 0x60, 0x3f, 0xe5, 0x20, 0x81, 0xff,
- 0xf1, 0x4d, 0xee, 0x1, 0x37, 0x95, 0x93, 0x30,
- 0x12, 0x77, 0x3, 0xff, 0x85, 0xff, 0x40, 0x1b,
- 0xfd, 0x40, 0xff, 0xfd, 0x0,
-
- /* U+2C "," */
- 0xb, 0xf1, 0x3, 0xfe, 0x20, 0x8, 0xa1, 0x84,
- 0x44, 0x9, 0x28, 0x0,
-
- /* U+2D "-" */
- 0x3, 0xf4, 0xff, 0xc4, 0xf, 0xc0,
-
- /* U+2E "." */
- 0x13, 0xd0, 0xc, 0x20, 0xc, 0x20,
-
- /* U+2F "/" */
- 0x3, 0xf5, 0xf0, 0xf, 0xc8, 0x50, 0x3e, 0x60,
- 0x90, 0x1f, 0x51, 0x0, 0xf8, 0x90, 0x40, 0x7d,
- 0x43, 0x3, 0xf3, 0x14, 0xf, 0x90, 0x24, 0x7,
- 0xdc, 0x50, 0x3f, 0x20, 0xc0, 0xf9, 0x84, 0x7,
- 0xe8, 0x38, 0x1f, 0x20, 0x8, 0xf, 0xb8, 0x60,
- 0x7e, 0x42, 0x81, 0xf3, 0x8, 0x81, 0xf5, 0x1c,
- 0xf, 0x89, 0x4, 0x7, 0xd4, 0x30, 0x3f, 0x31,
- 0x40, 0xf9, 0x2, 0x40, 0x7e, 0x70, 0xf, 0xc0,
-
- /* U+30 "0" */
- 0x2, 0x33, 0x7e, 0xd0, 0xf, 0x2c, 0xc8, 0x2,
- 0xf9, 0x2, 0x34, 0x1b, 0xf4, 0x1, 0xc0, 0xa0,
- 0xc, 0x81, 0x74, 0x14, 0x1, 0x6, 0x7, 0x22,
- 0x38, 0x20, 0x30, 0x1e, 0x41, 0x6, 0x1, 0x81,
- 0xee, 0x4, 0x40, 0xff, 0xe2, 0x10, 0x3f, 0x88,
- 0x1f, 0xfd, 0xe2, 0x0, 0x81, 0xfc, 0x40, 0xff,
- 0xe1, 0x30, 0xc, 0xf, 0x70, 0x22, 0x3, 0x1,
- 0xe6, 0x10, 0x6, 0x19, 0x3, 0x20, 0x1c, 0x5,
- 0x1, 0x90, 0x7, 0x41, 0x40, 0xd, 0x1, 0x7f,
- 0x40, 0x1c, 0xc, 0xb3, 0x20, 0xb, 0xe4, 0x0,
-
- /* U+31 "1" */
- 0x3, 0x8c, 0xe0, 0x4f, 0x63, 0xa, 0xf8, 0x40,
- 0xba, 0x6, 0x20, 0x5, 0xec, 0x64, 0x4, 0x82,
- 0x7, 0xff, 0xfc, 0xf, 0xfe, 0xf0,
-
- /* U+32 "2" */
- 0x2, 0x57, 0xfb, 0x40, 0x3d, 0x69, 0x1, 0x17,
- 0xc8, 0x15, 0x41, 0x6f, 0x98, 0xc, 0x0, 0xa0,
- 0xe9, 0x6, 0x40, 0x6, 0x28, 0x8, 0x7, 0x30,
- 0x18, 0x10, 0x3f, 0x88, 0x62, 0xfe, 0x3, 0xe2,
- 0x10, 0x1f, 0xe2, 0x3, 0x1, 0xfe, 0xe0, 0xa0,
- 0x3f, 0xa1, 0x1c, 0xf, 0xe4, 0xc4, 0x20, 0x7e,
- 0x54, 0x26, 0x7, 0xe3, 0x42, 0xa0, 0x7e, 0x38,
- 0x1a, 0x7, 0xf6, 0x7, 0x1, 0xfd, 0x81, 0xc0,
- 0x7f, 0x62, 0x38, 0x1f, 0xd4, 0x8c, 0x40, 0xfc,
- 0x90, 0x6, 0xff, 0xf5, 0x3, 0xff, 0x84,
-
- /* U+33 "3" */
- 0x2, 0x57, 0xfb, 0x30, 0x3a, 0xd2, 0x2, 0x33,
- 0x1, 0x44, 0x15, 0xf9, 0x83, 0x81, 0x61, 0x54,
- 0xc, 0x80, 0x52, 0x0, 0x80, 0x73, 0x1, 0x94,
- 0x82, 0x7, 0xf1, 0x6c, 0x7, 0xf7, 0x3, 0xfa,
- 0x0, 0x60, 0x7c, 0xab, 0x10, 0xe, 0xbf, 0xaa,
- 0x15, 0x81, 0xff, 0x70, 0x3d, 0x7f, 0x66, 0x16,
- 0x3, 0xf1, 0x98, 0x16, 0x7, 0xf1, 0x21, 0x4a,
- 0x40, 0x3e, 0x60, 0xcb, 0x40, 0x7c, 0xc1, 0xc0,
- 0x18, 0x1c, 0x88, 0x4c, 0x89, 0x4, 0x17, 0x40,
- 0x41, 0x88, 0x7b, 0xe8, 0x3, 0x1, 0x68, 0x80,
- 0x8c, 0xe4, 0x0,
-
- /* U+34 "4" */
- 0x3, 0xfa, 0xfe, 0x40, 0x7f, 0xc9, 0x0, 0xff,
- 0xe1, 0x50, 0x3f, 0xf8, 0x54, 0xf, 0xfe, 0x12,
- 0x41, 0x40, 0xff, 0xe0, 0x51, 0x18, 0x1f, 0xf5,
- 0x5, 0x81, 0xff, 0x24, 0x1c, 0xf, 0xfe, 0x5,
- 0xc, 0x81, 0xff, 0x40, 0x60, 0x1f, 0xf2, 0x63,
- 0x81, 0xff, 0xc0, 0xa1, 0x90, 0x3f, 0xe8, 0xc,
- 0x3, 0xfe, 0x2c, 0x1f, 0xfb, 0x0, 0xbf, 0x83,
- 0x3, 0xff, 0x86, 0xbf, 0xfd, 0x80, 0x5f, 0xc0,
- 0x7f, 0xfd, 0x40,
-
- /* U+35 "5" */
- 0x7, 0xff, 0xf0, 0x6, 0x7, 0xff, 0x0, 0x80,
- 0xb7, 0xf0, 0xe, 0xa, 0x5f, 0x80, 0x10, 0xc0,
- 0xff, 0xe0, 0x10, 0x3f, 0xcc, 0x70, 0x4c, 0x7,
- 0x88, 0xdf, 0x6b, 0xc0, 0x3c, 0x80, 0xe7, 0x80,
- 0xe3, 0xbf, 0x52, 0xd, 0x1, 0xf6, 0x10, 0xb,
- 0x10, 0x88, 0x2, 0x7, 0xa0, 0x4, 0x7, 0xf2,
- 0x1, 0xc0, 0xff, 0xe0, 0xb8, 0x80, 0xff, 0x67,
- 0x0, 0xf2, 0x1, 0xb0, 0x14, 0x7, 0x40, 0x9,
- 0x91, 0x59, 0x6, 0x91, 0x0, 0x72, 0x26, 0xf9,
- 0x4, 0xc0, 0x1d, 0x8, 0x12, 0xb4, 0x0,
-
- /* U+36 "6" */
- 0x3, 0xca, 0xef, 0x0, 0xf9, 0x7a, 0x88, 0x1f,
- 0x9d, 0x0, 0xae, 0x80, 0x72, 0x80, 0xea, 0x88,
- 0x1e, 0x80, 0xe2, 0x7, 0xe4, 0x44, 0x3, 0xfd,
- 0x81, 0x40, 0x7f, 0x90, 0x46, 0xff, 0x64, 0x6,
- 0x21, 0x64, 0x4, 0x6c, 0x3, 0x88, 0x9b, 0xd2,
- 0x1a, 0x4, 0xb, 0x32, 0x16, 0x1, 0x0, 0xd0,
- 0x81, 0xd0, 0x12, 0x2, 0x20, 0x78, 0x80, 0x60,
- 0x44, 0xf, 0x30, 0x22, 0x3, 0x81, 0xe6, 0x6,
- 0x41, 0x81, 0xec, 0x1, 0xe, 0x2, 0x1, 0xcc,
- 0x20, 0x9, 0x3, 0x84, 0x2c, 0x2, 0x1, 0x54,
- 0x1e, 0xf4, 0x8a, 0x40, 0xd6, 0x88, 0x2, 0xf2,
- 0x0,
-
- /* U+37 "7" */
- 0xff, 0xff, 0x83, 0x0, 0xff, 0xe0, 0xff, 0xff,
- 0x40, 0xc, 0xf, 0xf5, 0xc, 0xf, 0xf2, 0x22,
- 0x81, 0xfe, 0xe1, 0x10, 0x3f, 0x8a, 0x10, 0xf,
- 0xf4, 0x4, 0x80, 0xfe, 0x28, 0x40, 0x3f, 0xd4,
- 0x2, 0x3, 0xfc, 0xc4, 0x3, 0xfc, 0xc0, 0x30,
- 0x3f, 0xd0, 0x30, 0x3f, 0xcc, 0x5, 0x3, 0xfd,
- 0x42, 0x20, 0x7f, 0x22, 0x38, 0x1f, 0xe8, 0xa,
- 0x3, 0xf8, 0x90, 0x80, 0x7f, 0xa0, 0x4, 0x7,
- 0xf1, 0x42, 0x1, 0xf8,
-
- /* U+38 "8" */
- 0x2, 0x33, 0x7e, 0xcc, 0xf, 0x3c, 0xc8, 0x3,
- 0x39, 0x2, 0x30, 0x5, 0xd8, 0xc0, 0x60, 0x28,
- 0x3, 0x22, 0x52, 0x0, 0x30, 0x8, 0x22, 0x6,
- 0x60, 0x30, 0x18, 0x81, 0xe2, 0x6, 0x20, 0x81,
- 0xe2, 0x8, 0x4, 0x11, 0x3, 0x30, 0x14, 0x4,
- 0x23, 0x22, 0x52, 0x3, 0x20, 0x59, 0xb, 0xb1,
- 0x87, 0x0, 0xc9, 0x81, 0xe2, 0x6, 0x54, 0xad,
- 0xfa, 0x85, 0x80, 0xa8, 0x54, 0x80, 0x5c, 0x1a,
- 0x10, 0x8, 0x7, 0x98, 0x40, 0x80, 0x20, 0x7b,
- 0x0, 0x20, 0x44, 0xf, 0x10, 0x5, 0x0, 0x80,
- 0x7a, 0x2, 0xa, 0xa, 0xa0, 0x56, 0x1, 0x0,
- 0x54, 0x15, 0xfa, 0x91, 0x10, 0x15, 0xa4, 0x4,
- 0x5e, 0x60, 0x0,
-
- /* U+39 "9" */
- 0x2, 0x57, 0xfa, 0x90, 0x3a, 0x54, 0x4, 0xb4,
- 0x2, 0x6c, 0x15, 0xf4, 0x86, 0xc0, 0x20, 0x35,
- 0x5, 0x88, 0x81, 0x0, 0xe0, 0x77, 0x0, 0xb0,
- 0x2, 0x7, 0x10, 0x18, 0xf, 0xf2, 0x8, 0xf,
- 0xfe, 0xf, 0x0, 0x40, 0xfc, 0x58, 0x8, 0x7,
- 0x34, 0x8, 0x41, 0x52, 0xc, 0x80, 0x35, 0x21,
- 0x6f, 0x99, 0x20, 0xc0, 0x66, 0x4, 0x66, 0x0,
- 0x40, 0xa7, 0xf6, 0x60, 0x8c, 0x7, 0xf2, 0x0,
- 0x80, 0xfe, 0xa1, 0x1, 0xf8, 0xe0, 0x10, 0xe,
- 0x2a, 0x62, 0x29, 0x3, 0x6c, 0xac, 0x1a, 0x80,
- 0xf8, 0xab, 0x90, 0x10,
-
- /* U+3A ":" */
- 0x17, 0xc0, 0x83, 0x8, 0x31, 0x7c, 0x3, 0xff,
- 0xab, 0x7c, 0x28, 0x32, 0x83,
-
- /* U+3B ";" */
- 0x7, 0x74, 0x11, 0x18, 0x22, 0x30, 0x3b, 0xa0,
- 0x3f, 0xfb, 0xdf, 0x98, 0x1e, 0x20, 0x8, 0x60,
- 0x18, 0xe0, 0x99, 0xe, 0xb, 0x84, 0x0,
-
- /* U+3C "<" */
- 0x3, 0xfc, 0x69, 0x3, 0xf2, 0xb9, 0x1, 0xf2,
- 0xd5, 0x1, 0xf3, 0xd4, 0x83, 0x39, 0x0, 0xfc,
- 0x21, 0x6c, 0x60, 0x5e, 0x3, 0x3d, 0x20, 0x7e,
- 0xac, 0xf, 0xd0, 0x89, 0xe1, 0x3, 0xcf, 0x52,
- 0x1e, 0xc6, 0x7, 0x96, 0xa8, 0x19, 0xe0, 0x1e,
- 0x57, 0x20, 0xc, 0x81, 0xf1, 0xb9, 0x81, 0xff,
- 0x19, 0xc8,
-
- /* U+3D "=" */
- 0xff, 0xfe, 0x60, 0x7f, 0xf0, 0x36, 0xff, 0x99,
- 0x3f, 0xf0, 0x1f, 0xfc, 0x12, 0x7f, 0xe1, 0xb7,
- 0xfc, 0xc0, 0xff, 0xe0, 0x0,
-
- /* U+3E ">" */
- 0x34, 0x81, 0xff, 0x2d, 0x88, 0xf, 0xc4, 0x1,
- 0xbd, 0x81, 0xf7, 0xa8, 0x4, 0xf0, 0x81, 0xca,
- 0xf8, 0x43, 0xd5, 0x1, 0xe7, 0xb1, 0x85, 0x58,
- 0x1f, 0x1c, 0x80, 0x70, 0x38, 0xcf, 0x50, 0x74,
- 0x9, 0x5c, 0xc0, 0x3f, 0x8, 0x9e, 0xa0, 0x67,
- 0x80, 0x45, 0x80, 0x57, 0x30, 0x3e, 0x7a, 0xa0,
- 0x3e, 0x3e, 0x10, 0x3f, 0x80,
-
- /* U+3F "?" */
- 0x0, 0x6f, 0xf6, 0x60, 0x69, 0x90, 0x11, 0x94,
- 0x2, 0x60, 0xcd, 0x48, 0x50, 0x70, 0x19, 0x95,
- 0x88, 0x61, 0x96, 0x7, 0x20, 0x2d, 0x90, 0xe,
- 0xe0, 0x7f, 0xd8, 0xf, 0xf2, 0x41, 0x0, 0xf8,
- 0xd0, 0x58, 0x1e, 0x38, 0x7, 0x3, 0xec, 0x3,
- 0x10, 0x3d, 0x0, 0x62, 0x7, 0xcc, 0x22, 0x7,
- 0xfb, 0x1, 0xfd, 0x69, 0x1, 0xfc, 0x90, 0x81,
- 0xff, 0xc9, 0xb9, 0x1, 0xf8, 0xa3, 0xc0, 0xfc,
- 0x48, 0x60, 0x38,
-
- /* U+40 "@" */
- 0x3, 0xf2, 0xbb, 0xfb, 0x42, 0x7, 0xff, 0x1,
- 0x7a, 0x89, 0x81, 0x7a, 0x90, 0x3f, 0xad, 0x7,
- 0xbe, 0xcf, 0xd5, 0x26, 0x40, 0x7d, 0x51, 0xd0,
- 0x81, 0xca, 0xd0, 0xa4, 0xe, 0x89, 0x31, 0x3,
- 0xf9, 0x61, 0xc0, 0xc9, 0x8a, 0x7, 0xff, 0x0,
- 0xc2, 0xc0, 0xa0, 0xa0, 0x71, 0x96, 0x98, 0x19,
- 0x8a, 0x0, 0x99, 0x1, 0xa6, 0x69, 0x26, 0x20,
- 0x4c, 0x90, 0xa2, 0x81, 0x9b, 0xb, 0xf1, 0x26,
- 0x5, 0x82, 0x8, 0x20, 0x23, 0x6, 0x40, 0x80,
- 0x60, 0x4c, 0x70, 0x41, 0x2, 0xa1, 0x90, 0x22,
- 0x8, 0x11, 0x4, 0x82, 0x3, 0x31, 0x40, 0xff,
- 0xe0, 0xb0, 0x38, 0x80, 0x20, 0x7f, 0xf0, 0x48,
- 0x20, 0x48, 0x10, 0x31, 0x4, 0xc, 0x40, 0xfd,
- 0xc3, 0x3, 0x30, 0xc0, 0xcc, 0x12, 0x3, 0xff,
- 0x80, 0x40, 0xf1, 0x18, 0x1, 0x2, 0xe1, 0x1,
- 0xa0, 0x1e, 0x81, 0x20, 0x40, 0x48, 0x3, 0x1,
- 0x40, 0x20, 0x28, 0x20, 0x2, 0x8, 0x2, 0x84,
- 0xfc, 0xb1, 0x1a, 0xe6, 0x98, 0xa, 0x28, 0x15,
- 0x60, 0x16, 0x39, 0x14, 0x25, 0x2, 0x61, 0x90,
- 0x29, 0xfa, 0x90, 0x17, 0xf6, 0x60, 0x73, 0x1c,
- 0xf, 0xfe, 0x44, 0x25, 0x40, 0xff, 0xe4, 0x62,
- 0xbb, 0x20, 0x72, 0x80, 0x7f, 0xda, 0x9, 0xb5,
- 0x77, 0xac, 0x81, 0xff, 0x3f, 0x10, 0x28, 0x93,
- 0xc4, 0xf, 0x0,
-
- /* U+41 "A" */
- 0x3, 0xe3, 0xf9, 0x81, 0xff, 0xc2, 0xa0, 0x28,
- 0x1f, 0xfc, 0x26, 0x0, 0x90, 0x1f, 0xfc, 0x4,
- 0x0, 0x8a, 0x7, 0xff, 0x3, 0x85, 0x43, 0x3,
- 0xff, 0x80, 0x87, 0x60, 0x10, 0x1f, 0xe6, 0x1,
- 0x4, 0x20, 0x1f, 0xea, 0x10, 0xe, 0x9, 0x1,
- 0xf8, 0x90, 0xe0, 0x10, 0xa, 0x7, 0xea, 0x1,
- 0x1, 0x20, 0xc0, 0xfc, 0xc3, 0x3, 0x70, 0x8,
- 0xf, 0x30, 0x14, 0xc, 0x80, 0x70, 0x3d, 0x40,
- 0x89, 0xe4, 0x10, 0x1c, 0x48, 0x6, 0xde, 0x40,
- 0x18, 0x1a, 0x81, 0xff, 0xc0, 0xa0, 0x66, 0xf,
- 0xff, 0x98, 0x24, 0x1, 0x0, 0xa0, 0x7e, 0xa0,
- 0x28, 0xe, 0x1, 0x81, 0xf8, 0x90, 0x60, 0x10,
- 0x40, 0x7f, 0xa0, 0x4, 0xc0, 0x70, 0x3f, 0xc8,
- 0x7,
-
- /* U+42 "B" */
- 0xbf, 0xfd, 0xaa, 0x3, 0xfe, 0x2a, 0xd0, 0x1d,
- 0xb7, 0x52, 0x14, 0x3, 0x13, 0xcb, 0x10, 0xc0,
- 0xff, 0xa8, 0x2, 0x7, 0xf8, 0x80, 0x60, 0x7f,
- 0x88, 0x6, 0x7, 0xfa, 0x2, 0x40, 0x7c, 0x5f,
- 0x1, 0xc0, 0xdf, 0xed, 0x1, 0xc4, 0xf, 0xf8,
- 0xc0, 0x3b, 0xff, 0x40, 0xb0, 0x1f, 0xe7, 0x41,
- 0x60, 0x7f, 0x90, 0xc, 0x7, 0xfc, 0x43, 0x3,
- 0xfe, 0x20, 0x7f, 0xf0, 0x20, 0xa, 0x4, 0x4f,
- 0x2a, 0xc0, 0x30, 0x2d, 0xba, 0xa0, 0x18, 0xf,
- 0xf2, 0x9c, 0x80,
-
- /* U+43 "C" */
- 0x3, 0x9d, 0xfe, 0xd0, 0xf, 0x8e, 0x88, 0x8,
- 0xbe, 0xc0, 0xc7, 0x10, 0xee, 0xc8, 0x2, 0x30,
- 0x2e, 0x3, 0x44, 0x49, 0xf0, 0x10, 0x3, 0x22,
- 0x90, 0x3d, 0x40, 0x31, 0x41, 0x40, 0x7c, 0x80,
- 0x50, 0x42, 0x3, 0xfa, 0x3a, 0x80, 0x60, 0x3f,
- 0x9c, 0x60, 0x7f, 0xf1, 0x8, 0x1f, 0xfd, 0x32,
- 0x7, 0xff, 0x4d, 0x0, 0xc0, 0x7f, 0x26, 0xc0,
- 0x84, 0x7, 0xf5, 0x94, 0x50, 0x50, 0x1f, 0x20,
- 0x14, 0x30, 0x14, 0x81, 0xe8, 0x1, 0x80, 0xa0,
- 0x34, 0x26, 0x7c, 0x88, 0x4, 0xa8, 0x7, 0xb5,
- 0x0, 0x46, 0x6, 0x5e, 0x10, 0x22, 0xfb, 0x0,
-
- /* U+44 "D" */
- 0xbf, 0xfb, 0x54, 0x7, 0xff, 0x0, 0xab, 0x88,
- 0x1e, 0xdb, 0x54, 0xe, 0x20, 0x71, 0x39, 0x5c,
- 0x3, 0x1, 0xff, 0x1c, 0x2, 0x1, 0xff, 0x14,
- 0x18, 0x1f, 0xfc, 0xe, 0x1, 0x1, 0xff, 0x20,
- 0x18, 0xf, 0xfe, 0x11, 0x3, 0xff, 0xde, 0x40,
- 0xff, 0x90, 0xc, 0x7, 0xfd, 0xc0, 0x20, 0x3f,
- 0xc9, 0x3, 0x3, 0xfc, 0xa8, 0x8, 0x6, 0x27,
- 0x2b, 0x40, 0x30, 0x1d, 0xb6, 0xa8, 0x1c, 0x40,
- 0xfe, 0x2e, 0xe2, 0x4,
-
- /* U+45 "E" */
- 0xbf, 0xff, 0xd8, 0xf, 0xfe, 0x26, 0xdf, 0xdc,
- 0x8, 0x9f, 0xf0, 0x1f, 0xfe, 0xb2, 0x7f, 0x1,
- 0xdb, 0x7e, 0x80, 0x7f, 0xf1, 0x7f, 0xfd, 0x0,
- 0xff, 0xfc, 0x93, 0xfe, 0x2, 0xdb, 0xfc, 0x7,
- 0xff, 0x4,
-
- /* U+46 "F" */
- 0xbf, 0xff, 0xd4, 0xf, 0xfe, 0x26, 0xdf, 0xd4,
- 0x8, 0x9f, 0xe0, 0x3f, 0xff, 0x3f, 0xfe, 0x40,
- 0x7f, 0xf1, 0x76, 0xfc, 0x80, 0xc4, 0xfe, 0x3,
- 0xff, 0xfe, 0x7, 0xff, 0x18,
-
- /* U+47 "G" */
- 0x3, 0x9d, 0xfe, 0xd0, 0x81, 0xf2, 0xf1, 0x1,
- 0x17, 0xa0, 0x1c, 0xa8, 0x7, 0x76, 0x42, 0x1c,
- 0x3, 0x50, 0x1a, 0x22, 0x4f, 0x10, 0xc8, 0x6,
- 0x2, 0x90, 0x3d, 0xc0, 0x40, 0x14, 0x2, 0x3,
- 0xe2, 0x83, 0x0, 0x43, 0x3, 0xfa, 0xfc, 0x8,
- 0xe, 0x7, 0xff, 0x5, 0x80, 0x20, 0x7f, 0xf2,
- 0x89, 0xf8, 0xf, 0xe3, 0xb7, 0xc0, 0x7f, 0xf1,
- 0x98, 0x2, 0x6, 0x3f, 0xe6, 0x4, 0x40, 0x60,
- 0x3f, 0xf8, 0x48, 0x20, 0x3f, 0xf8, 0x5c, 0x4,
- 0x3, 0xff, 0x82, 0x88, 0x6c, 0x7, 0xc8, 0xe,
- 0xc0, 0x25, 0x44, 0xcf, 0x10, 0x80, 0xdc, 0x85,
- 0x76, 0xa1, 0xe, 0x81, 0xda, 0xa2, 0x4, 0x5e,
- 0x80, 0x0,
-
- /* U+48 "H" */
- 0xbf, 0x80, 0xff, 0x7e, 0x80, 0x7f, 0xff, 0xc0,
- 0xff, 0xee, 0x13, 0xfe, 0x3, 0xdb, 0x7f, 0x80,
- 0xff, 0xe5, 0x7f, 0xfe, 0x3, 0xff, 0xfe, 0x7,
- 0xff, 0xb0,
-
- /* U+49 "I" */
- 0x9f, 0x88, 0x1f, 0xff, 0xf0,
-
- /* U+4A "J" */
- 0x3, 0xfc, 0xbf, 0x20, 0x3f, 0xff, 0xe0, 0x7f,
- 0xff, 0xc0, 0xff, 0xea, 0x1b, 0x48, 0xf, 0x10,
- 0x32, 0x4c, 0x7, 0xb8, 0x4, 0x40, 0x30, 0x38,
- 0xb0, 0x40, 0x40, 0x1d, 0x92, 0x78, 0x4, 0x0,
- 0xd8, 0x4, 0xd9, 0x0, 0x44, 0x5, 0x32, 0x20,
- 0xb, 0xcc, 0x0,
-
- /* U+4B "K" */
- 0xbf, 0x80, 0xfd, 0x7f, 0x40, 0x3f, 0xe8, 0x83,
- 0x80, 0x7f, 0x9b, 0x5, 0x0, 0xff, 0x28, 0xd,
- 0x3, 0xfc, 0xa8, 0x38, 0xf, 0xf1, 0xa0, 0x38,
- 0x1f, 0xe3, 0x80, 0x62, 0x7, 0xfb, 0x80, 0xa4,
- 0xf, 0xf6, 0x22, 0x20, 0x3f, 0xd4, 0x80, 0xc0,
- 0x7f, 0xc8, 0x9, 0x30, 0x3f, 0xe7, 0xc0, 0x42,
- 0x7, 0xf2, 0x82, 0x80, 0xe0, 0x7f, 0x50, 0x9,
- 0x83, 0x40, 0xff, 0xe0, 0x44, 0x13, 0x3, 0xff,
- 0x81, 0x40, 0x42, 0x7, 0xff, 0x2, 0x80, 0xe0,
- 0x7f, 0xf0, 0x14, 0x6, 0x81, 0xff, 0xc0, 0x68,
- 0x26, 0x7, 0xff, 0x2, 0x80, 0x84,
-
- /* U+4C "L" */
- 0xbf, 0x80, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
- 0xff, 0xf6, 0x4f, 0xf0, 0x1b, 0x6f, 0xe6, 0x7,
- 0xff, 0x4,
-
- /* U+4D "M" */
- 0xbf, 0xc0, 0x7f, 0xf0, 0x1f, 0xf1, 0x3, 0x20,
- 0x3f, 0xea, 0x7, 0xee, 0x7, 0xf9, 0x10, 0x3f,
- 0x20, 0x3f, 0xdc, 0xf, 0x88, 0x6, 0x7, 0xf2,
- 0x8, 0xe, 0x68, 0x40, 0x3f, 0x30, 0x18, 0xe,
- 0x7c, 0x2, 0x3, 0xea, 0x11, 0x3, 0xc8, 0x8e,
- 0x7, 0x91, 0x1c, 0xf, 0xd4, 0x20, 0x3d, 0xc1,
- 0x44, 0xf, 0x98, 0x6, 0x7, 0x21, 0x40, 0xf8,
- 0x80, 0x42, 0x1, 0x98, 0x6, 0x7, 0xfa, 0x0,
- 0x40, 0x54, 0x20, 0x3f, 0xe2, 0x43, 0x80, 0x44,
- 0x40, 0x3f, 0xf8, 0x14, 0x20, 0x1c, 0x12, 0x1,
- 0xc0, 0xfe, 0x60, 0x18, 0x42, 0x81, 0xff, 0xc2,
- 0x62, 0xb0, 0xc, 0xf, 0xfe, 0x15, 0x6, 0x6,
- 0x7, 0xff, 0xc, 0x90, 0x15, 0x3, 0xff, 0x89,
- 0x40, 0x12, 0x3, 0xff, 0x88, 0xc0, 0x50, 0x3f,
- 0x80,
-
- /* U+4E "N" */
- 0xbf, 0x90, 0x1f, 0xdf, 0xa0, 0x15, 0x3, 0xff,
- 0x89, 0x0, 0xff, 0xe1, 0xb2, 0x7, 0xff, 0xf,
- 0x81, 0xff, 0xc1, 0x80, 0xc0, 0x3f, 0xf8, 0xc,
- 0x86, 0x40, 0xff, 0xe0, 0x70, 0x1c, 0xf, 0xfe,
- 0x1, 0x60, 0xb0, 0x3f, 0xf8, 0x10, 0x88, 0x40,
- 0xff, 0xe0, 0x70, 0x1c, 0xf, 0xfe, 0x1, 0x60,
- 0xb0, 0x3f, 0xf8, 0x10, 0x88, 0x7, 0xff, 0x6,
- 0x0, 0xa0, 0x7f, 0xf0, 0x13, 0x9, 0x0, 0xff,
- 0xe0, 0x40, 0x14, 0xf, 0xfe, 0xd, 0x3, 0xff,
- 0x86, 0x90, 0xf, 0xfe, 0x1d, 0x3, 0xff, 0x89,
- 0x40, 0x80,
-
- /* U+4F "O" */
- 0x3, 0x95, 0xfe, 0xcc, 0xf, 0xc7, 0x54, 0x4,
- 0x67, 0x40, 0x71, 0xc4, 0x29, 0x69, 0x80, 0xac,
- 0xd, 0xc0, 0x5a, 0x69, 0x26, 0x1, 0x8, 0x4,
- 0x44, 0x40, 0x71, 0xc0, 0x20, 0x8, 0x1, 0x81,
- 0xf1, 0x41, 0x0, 0x21, 0x81, 0xfd, 0xc0, 0x22,
- 0x3, 0x1, 0xfc, 0xc0, 0x16, 0x7, 0xff, 0x0,
- 0x80, 0xe4, 0x3, 0x3, 0xff, 0xa4, 0x40, 0x30,
- 0x3f, 0xfa, 0x3d, 0x0, 0xc0, 0x7f, 0x20, 0x4,
- 0x10, 0xc0, 0xfe, 0xe0, 0x10, 0xa0, 0x18, 0x1f,
- 0x14, 0x10, 0x6, 0x44, 0x40, 0x7b, 0x80, 0x80,
- 0x5c, 0x5, 0xa4, 0x54, 0xe4, 0x42, 0x4, 0x71,
- 0xa, 0xea, 0xc0, 0x56, 0x7, 0x1d, 0x50, 0x11,
- 0x9d, 0x1, 0x0,
-
- /* U+50 "P" */
- 0xbf, 0xfe, 0xd0, 0x81, 0xff, 0xc0, 0x2f, 0x40,
- 0x3b, 0x6f, 0x40, 0xd, 0x80, 0xc4, 0xf9, 0xf2,
- 0x20, 0x1f, 0xfc, 0x8, 0x1, 0x81, 0xff, 0x20,
- 0x1c, 0xf, 0xfe, 0x71, 0x1, 0xc0, 0xff, 0xa0,
- 0x4, 0x7, 0xf2, 0xa8, 0x22, 0x5, 0xff, 0xaa,
- 0x6, 0x81, 0xff, 0x19, 0x80, 0xed, 0xb7, 0xf6,
- 0x60, 0x78, 0x9c, 0x7, 0xff, 0xfc, 0xf, 0xfe,
- 0x58,
-
- /* U+51 "Q" */
- 0x3, 0x9d, 0xfe, 0xac, 0xf, 0xc7, 0xc4, 0x4,
- 0xa7, 0x40, 0x72, 0xc0, 0x15, 0xb2, 0x1, 0x50,
- 0x1a, 0x80, 0xd5, 0x2a, 0xe0, 0x14, 0x9, 0x80,
- 0xa4, 0xe, 0x34, 0x4, 0x1, 0x1, 0x40, 0x7c,
- 0x88, 0x60, 0x80, 0xa0, 0x7f, 0x50, 0x5, 0x80,
- 0x20, 0x7f, 0x20, 0x8, 0x80, 0x60, 0x7f, 0xf0,
- 0x78, 0x2, 0x7, 0xf1, 0x1, 0xc0, 0xff, 0xe2,
- 0xf0, 0x4, 0xf, 0xe2, 0x3, 0x81, 0x30, 0x3f,
- 0xf8, 0x5, 0x0, 0x20, 0x7f, 0x20, 0xc, 0x80,
- 0xa0, 0x7f, 0x50, 0x4, 0x30, 0x50, 0x1f, 0x22,
- 0x18, 0x8, 0x2, 0x90, 0x38, 0xd0, 0x10, 0xa,
- 0x80, 0xd5, 0x15, 0x30, 0xa, 0x6, 0x58, 0x2,
- 0xba, 0xb0, 0x15, 0x1, 0xc7, 0xc4, 0x4, 0x40,
- 0x52, 0x7, 0xce, 0xff, 0x68, 0x3, 0x30, 0x3f,
- 0xf8, 0xe, 0x80, 0x88, 0xf, 0xfe, 0x2, 0xc6,
- 0x20, 0x3f, 0xf8, 0x27, 0x30,
-
- /* U+52 "R" */
- 0xbf, 0xfe, 0xa8, 0xf, 0xfe, 0xa, 0xb8, 0xf,
- 0x6d, 0xd4, 0x83, 0x80, 0xe2, 0x79, 0x66, 0xb,
- 0x3, 0xfe, 0x80, 0x30, 0x1f, 0xfc, 0x2, 0x18,
- 0x1f, 0xfc, 0xf2, 0x18, 0x1f, 0xf5, 0x1, 0xc0,
- 0xc4, 0xf2, 0xc8, 0x24, 0x3, 0x6d, 0xd4, 0x85,
- 0x40, 0xff, 0xe0, 0x5a, 0x3, 0xdf, 0xec, 0x3,
- 0x81, 0xff, 0x16, 0x11, 0x3, 0xfe, 0x80, 0x20,
- 0x1f, 0xfc, 0x8, 0x12, 0x1, 0xff, 0x30, 0x10,
- 0xf, 0xfe, 0x4, 0x5, 0x81, 0xff, 0x32, 0x20,
- 0x1f, 0xfc, 0x8, 0x1, 0x80,
-
- /* U+53 "S" */
- 0x3, 0x4d, 0xfd, 0x98, 0x1e, 0x7d, 0x90, 0x23,
- 0x3a, 0x2, 0x50, 0x4, 0xda, 0x80, 0x2a, 0x1,
- 0x40, 0x76, 0x4c, 0xf8, 0xa, 0x8, 0x6, 0x7,
- 0xd0, 0x2, 0x60, 0x38, 0x1f, 0x20, 0x5, 0x0,
- 0xc0, 0x7c, 0x7f, 0x30, 0x82, 0xa0, 0x7f, 0xd4,
- 0x85, 0xea, 0x3, 0xfb, 0x30, 0xa, 0xfa, 0x80,
- 0xfa, 0x78, 0x40, 0x2b, 0x88, 0x1f, 0x3d, 0x90,
- 0x83, 0x90, 0x1f, 0x8b, 0xd4, 0x5, 0x3, 0xfe,
- 0x50, 0x3, 0xde, 0x81, 0xf9, 0x0, 0xec, 0x20,
- 0x3f, 0xef, 0xc0, 0x28, 0x1f, 0x40, 0x9, 0x18,
- 0x5d, 0xa2, 0x4f, 0x20, 0x88, 0x90, 0x2, 0x5d,
- 0x90, 0x85, 0x40, 0x9f, 0x84, 0x8, 0xbd, 0x40,
- 0x0,
-
- /* U+54 "T" */
- 0x5f, 0xff, 0xf0, 0xc0, 0xff, 0xe3, 0x2d, 0xbc,
- 0x1, 0x6d, 0xe0, 0x4, 0xf8, 0x8, 0x9f, 0x1,
- 0xff, 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc,
- 0xf, 0xff, 0x20,
-
- /* U+55 "U" */
- 0x1f, 0xa0, 0x1f, 0x97, 0xe4, 0x7, 0xff, 0xfc,
- 0xf, 0xff, 0xf8, 0x1f, 0xff, 0x12, 0x7, 0xe2,
- 0x1, 0x82, 0x10, 0x1f, 0xb0, 0x2, 0x28, 0x8,
- 0x7, 0x92, 0x6, 0x1, 0x90, 0xea, 0x24, 0xad,
- 0x3, 0x0, 0xb2, 0xa, 0xec, 0xa8, 0x1e, 0x7,
- 0x5a, 0x44, 0x9, 0x5c, 0x40, 0x0,
-
- /* U+56 "V" */
- 0x7f, 0x98, 0x1f, 0xe9, 0xf9, 0x30, 0x14, 0xf,
- 0xf3, 0x0, 0x82, 0x4, 0xf, 0xe4, 0x1, 0x80,
- 0xe0, 0x18, 0x1f, 0xb8, 0xa, 0x1, 0x0, 0xa0,
- 0x7e, 0x40, 0x90, 0x13, 0x4, 0x80, 0xf2, 0x1,
- 0x40, 0xd4, 0x2, 0x3, 0xdc, 0x3, 0x3, 0x12,
- 0x14, 0xf, 0x20, 0x80, 0xf5, 0x4, 0x80, 0xc8,
- 0x7, 0x3, 0xcc, 0x5, 0x3, 0x70, 0x8, 0xf,
- 0x90, 0x40, 0x64, 0x18, 0x1f, 0xb0, 0x24, 0x1,
- 0x80, 0xa0, 0x7e, 0x60, 0x28, 0xa, 0x9, 0x1,
- 0xfc, 0x83, 0x0, 0x45, 0x3, 0xfd, 0xc0, 0x26,
- 0x1, 0x81, 0xfe, 0x40, 0x35, 0x8, 0xf, 0xfe,
- 0x3, 0xc, 0x8e, 0x7, 0xff, 0x2, 0x81, 0x90,
- 0x1f, 0xfc, 0x2, 0x40, 0x10, 0x1f, 0xfc, 0x2a,
- 0x3, 0x81, 0xf0,
-
- /* U+57 "W" */
- 0x1f, 0xa0, 0x1f, 0x5f, 0x80, 0xfa, 0x7e, 0x0,
- 0x42, 0x3, 0xe4, 0x8, 0x1f, 0x10, 0x40, 0x20,
- 0x40, 0xf1, 0x2, 0x60, 0x79, 0x6, 0x3, 0x0,
- 0x40, 0x75, 0x2, 0xc0, 0x71, 0x1, 0x80, 0x20,
- 0x4, 0xe, 0x40, 0x84, 0x7, 0x20, 0x8, 0x8,
- 0x8c, 0x7, 0x11, 0x0, 0x10, 0x36, 0x0, 0x40,
- 0x90, 0x40, 0x64, 0x1, 0x10, 0x80, 0xcc, 0x20,
- 0x36, 0x0, 0x40, 0xb8, 0x42, 0x8a, 0x6, 0x23,
- 0x1, 0x98, 0x4, 0x4, 0x86, 0x8, 0x10, 0x24,
- 0x1, 0x1, 0x88, 0xc, 0x0, 0x80, 0x60, 0x80,
- 0x40, 0x30, 0x2, 0x7, 0x20, 0xc0, 0x20, 0x40,
- 0x90, 0xc0, 0x10, 0x40, 0x7b, 0x2, 0x2, 0x84,
- 0x5, 0xc2, 0x0, 0x46, 0x3, 0xc8, 0x2, 0x4,
- 0x50, 0x24, 0x9, 0x80, 0x20, 0x3c, 0x40, 0x64,
- 0x0, 0x81, 0x88, 0x48, 0x0, 0x81, 0xf2, 0x7,
- 0x4, 0x7, 0x21, 0xb8, 0x40, 0x7e, 0xc1, 0xa1,
- 0xc0, 0xec, 0x12, 0x2, 0x7, 0xe4, 0x9, 0x4,
- 0x7, 0x20, 0x4, 0x60, 0x3f, 0x10, 0x22, 0x7,
- 0xc8, 0x9, 0x1, 0xfc, 0x80, 0x50, 0x3e, 0xc0,
- 0x8, 0x1f, 0xec, 0x1, 0x1, 0xf2, 0x0, 0x80,
- 0xe0,
-
- /* U+58 "X" */
- 0x17, 0xf2, 0x3, 0xf5, 0xfc, 0x84, 0x1, 0x40,
- 0xf9, 0x20, 0x48, 0xc, 0x1, 0x0, 0xf5, 0x1,
- 0x0, 0x99, 0xc, 0x81, 0xa0, 0x8, 0x40, 0xdc,
- 0x7, 0x2, 0x2c, 0x16, 0x7, 0x16, 0xb, 0x1,
- 0xc0, 0x70, 0x3e, 0x80, 0x21, 0x64, 0x32, 0x7,
- 0xea, 0x3, 0xc0, 0x60, 0x1f, 0xc9, 0x1, 0x1,
- 0x0, 0xff, 0xa8, 0x12, 0x40, 0x3f, 0xe2, 0x7,
- 0xff, 0x13, 0x81, 0x26, 0x7, 0xf9, 0x90, 0x80,
- 0x40, 0x3f, 0xd0, 0x5, 0x80, 0x28, 0x1f, 0xa8,
- 0xa, 0x1a, 0x9, 0x0, 0xf2, 0x40, 0x90, 0x4,
- 0x1, 0x40, 0xf5, 0x1, 0x0, 0x8c, 0x1, 0x0,
- 0xd0, 0x4, 0x20, 0x66, 0x43, 0x20, 0x13, 0x5,
- 0x81, 0xee, 0x3, 0x80, 0x80, 0x38, 0x1f, 0x16,
- 0xb,
-
- /* U+59 "Y" */
- 0x9f, 0x98, 0x1f, 0xd7, 0xf2, 0x80, 0x20, 0x1f,
- 0x8a, 0x9, 0x4, 0x1, 0x0, 0xfa, 0x0, 0x80,
- 0x19, 0xc, 0xf, 0x24, 0x8, 0x81, 0x40, 0x10,
- 0xe, 0x80, 0x28, 0x19, 0x10, 0xc0, 0xc8, 0x86,
- 0x7, 0xb8, 0x8, 0x5, 0x0, 0x40, 0x3c, 0x50,
- 0x60, 0x11, 0x10, 0xf, 0xd0, 0x4, 0x10, 0x16,
- 0x7, 0xe2, 0xc3, 0x84, 0x40, 0x3f, 0xd0, 0x3,
- 0x5, 0x1, 0xff, 0x30, 0x28, 0x7, 0xff, 0x2,
- 0x0, 0x28, 0xf, 0xfe, 0x1b, 0x3, 0xff, 0xfe,
- 0x7, 0xff, 0x58,
-
- /* U+5A "Z" */
- 0xbf, 0xff, 0xf0, 0x48, 0x1f, 0xfc, 0x3b, 0xb7,
- 0xf5, 0x0, 0x48, 0x13, 0xfd, 0x0, 0x70, 0x3f,
- 0xd0, 0x88, 0x40, 0xfe, 0x2c, 0x16, 0x7, 0xfb,
- 0x80, 0xe0, 0x7f, 0xa1, 0x10, 0x81, 0xfc, 0x98,
- 0x4c, 0xf, 0xf5, 0x1, 0x40, 0xff, 0x50, 0x14,
- 0xf, 0xf2, 0x40, 0x90, 0xf, 0xf5, 0x1, 0x40,
- 0xff, 0x50, 0x14, 0xf, 0xf3, 0x41, 0xa0, 0x3f,
- 0x8c, 0x6, 0x1, 0xfe, 0xe0, 0x38, 0x1f, 0xe6,
- 0x42, 0x4, 0xff, 0xa, 0x1, 0x6d, 0xfe, 0xa0,
- 0x7f, 0xf0, 0xc0,
-
- /* U+5B "[" */
- 0xff, 0x88, 0x1f, 0x9f, 0xe2, 0x7, 0xff, 0xfc,
- 0xf, 0xff, 0x7b, 0xfc, 0x40, 0xf0,
-
- /* U+5C "\\" */
- 0x5f, 0x88, 0x1f, 0x91, 0x14, 0xf, 0xea, 0x18,
- 0x1f, 0xcc, 0x2, 0x3, 0xf9, 0xe, 0x7, 0xf7,
- 0x8, 0xf, 0xe4, 0x1, 0x81, 0xfc, 0xc5, 0x3,
- 0xfa, 0x82, 0x40, 0x7e, 0x24, 0x28, 0x1f, 0xd4,
- 0x30, 0x3f, 0x98, 0x6, 0x7, 0xf3, 0x14, 0xf,
- 0xea, 0x9, 0x1, 0xf8, 0x90, 0xa0, 0x7f, 0x50,
- 0xc0, 0xfe, 0x60, 0x10, 0x1f, 0xc8, 0x70, 0x3f,
- 0xb8, 0x40, 0x7f, 0x20, 0xc, 0xf, 0xe6, 0x28,
- 0x1f, 0xd1, 0xa0,
-
- /* U+5D "]" */
- 0xff, 0x90, 0x1e, 0xfd, 0x40, 0xe6, 0x7, 0xff,
- 0xfc, 0xf, 0xff, 0x33, 0x2, 0xfd, 0x40, 0xfe,
-
- /* U+5E "^" */
- 0x3, 0x1f, 0xc0, 0x7e, 0x80, 0x10, 0x1f, 0x20,
- 0x1c, 0xf, 0x30, 0x24, 0x40, 0xea, 0x21, 0x14,
- 0xc, 0x88, 0x70, 0x30, 0x37, 0xc, 0x20, 0x8,
- 0x9, 0xa, 0x1, 0x88, 0x2, 0x2, 0x40, 0x28,
- 0x24, 0x18, 0xa0, 0x44, 0x85,
-
- /* U+5F "_" */
- 0x3, 0xff, 0x83, 0xff, 0xff, 0x2, 0x1, 0xff,
- 0xc1,
-
- /* U+60 "`" */
- 0x1b, 0xf1, 0x2, 0xc4, 0x70, 0x36, 0x5, 0x81,
- 0xb0, 0x84,
-
- /* U+61 "a" */
- 0x2, 0x57, 0xfb, 0x30, 0x3a, 0xd2, 0x2, 0x33,
- 0x1, 0x44, 0x1e, 0xf9, 0x83, 0x0, 0x30, 0xe1,
- 0x6, 0x20, 0xc0, 0x5a, 0x80, 0x76, 0x0, 0x42,
- 0x40, 0x3c, 0x40, 0xf3, 0xbf, 0xea, 0x6, 0x3a,
- 0x20, 0x4, 0xc0, 0x6e, 0x45, 0xfd, 0xb2, 0x1,
- 0x22, 0x32, 0x3, 0xf1, 0x0, 0x40, 0xe2, 0x7,
- 0x90, 0x1d, 0x40, 0x98, 0xa, 0xca, 0x9c, 0x80,
- 0x62, 0x0, 0x9a, 0xb0, 0xc0, 0x10, 0xf2, 0x2,
- 0x7a, 0x24, 0x0,
-
- /* U+62 "b" */
- 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x3f, 0xd3, 0xfa,
- 0x90, 0x3d, 0xbb, 0x2, 0x59, 0x81, 0xc8, 0x4d,
- 0x90, 0x4, 0x20, 0x76, 0x64, 0x9e, 0x1, 0x0,
- 0xd0, 0x81, 0x8b, 0x8, 0xf, 0xfb, 0x0, 0x40,
- 0x7f, 0x98, 0x2, 0x7, 0xf8, 0x81, 0xff, 0xc1,
- 0x20, 0x7f, 0xf0, 0x58, 0x2, 0x7, 0xfb, 0x80,
- 0x40, 0x50, 0x81, 0x8a, 0x8, 0xe, 0xcc, 0x93,
- 0xc0, 0x20, 0x19, 0x89, 0xb2, 0x0, 0x84, 0xd,
- 0xb1, 0x81, 0x2c, 0xc0, 0x0,
-
- /* U+63 "c" */
- 0x2, 0x33, 0x7e, 0xcc, 0xe, 0x79, 0x90, 0x6,
- 0x60, 0x25, 0x1, 0xbf, 0x30, 0x70, 0xa, 0xe,
- 0x40, 0xca, 0xa, 0x40, 0x10, 0xe, 0x44, 0x6c,
- 0x0, 0x80, 0xf7, 0xb4, 0x41, 0x3, 0xe2, 0x88,
- 0x1f, 0xfc, 0xe2, 0x8, 0x1f, 0xec, 0x1, 0x1,
- 0xeb, 0xa2, 0x1, 0x0, 0xe2, 0x8f, 0x14, 0x1c,
- 0x81, 0x78, 0x16, 0x14, 0x6, 0xfd, 0x1, 0xc0,
- 0x4f, 0x32, 0x0, 0xcc, 0x0,
-
- /* U+64 "d" */
- 0x3, 0xfd, 0xbe, 0x3, 0xff, 0xf0, 0xaf, 0xed,
- 0x0, 0xf4, 0xa8, 0x1, 0x78, 0xc, 0xd8, 0x1b,
- 0xb1, 0x92, 0x2, 0x80, 0xe4, 0x4a, 0x50, 0x24,
- 0x2, 0x81, 0xc8, 0x80, 0xc0, 0x18, 0x1f, 0xc4,
- 0xf, 0xfe, 0x11, 0x3, 0xff, 0x80, 0x40, 0xff,
- 0x10, 0x3f, 0xf8, 0x18, 0x3, 0x3, 0xf9, 0x0,
- 0xa0, 0x72, 0x20, 0x54, 0x1c, 0x89, 0x4a, 0x6,
- 0x4c, 0x1b, 0xb1, 0x82, 0x6, 0x95, 0x0, 0x2f,
- 0xa0, 0x0,
-
- /* U+65 "e" */
- 0x3, 0x4d, 0xfb, 0x30, 0x39, 0x76, 0x40, 0x19,
- 0x80, 0x8d, 0x6, 0xfc, 0xc1, 0xa0, 0x38, 0x39,
- 0x3, 0x20, 0x22, 0x61, 0x0, 0xe6, 0x2, 0xd0,
- 0x4, 0x7, 0x88, 0x24, 0x3, 0xff, 0x88, 0x60,
- 0x7f, 0xf0, 0xcf, 0xff, 0xd8, 0x82, 0x7, 0xfb,
- 0x0, 0x60, 0x7f, 0x20, 0x10, 0xf, 0x3a, 0x2,
- 0x80, 0xec, 0x1, 0xb1, 0x20, 0x54, 0x4, 0xfd,
- 0x90, 0x88, 0x2, 0xec, 0x80, 0x2f, 0x30,
-
- /* U+66 "f" */
- 0x3, 0xff, 0x87, 0x3f, 0xa8, 0x1b, 0x30, 0x3e,
- 0x64, 0x3f, 0xd4, 0xb, 0x0, 0x80, 0x79, 0x84,
- 0x7, 0xff, 0x8, 0xfe, 0x21, 0x7e, 0xc0, 0x7f,
- 0xc7, 0xf1, 0xb, 0xf6, 0x3, 0xff, 0xfe, 0x7,
- 0xff, 0x88,
-
- /* U+67 "g" */
- 0x2, 0x57, 0xf6, 0x82, 0x7c, 0x2, 0x54, 0x0,
- 0xbc, 0x40, 0x9b, 0x3, 0x76, 0x32, 0x80, 0xa0,
- 0xc, 0x89, 0x4a, 0x4, 0x80, 0x40, 0x39, 0x20,
- 0xc, 0x1, 0x81, 0xfc, 0x40, 0xff, 0xe1, 0x10,
- 0x3f, 0xf8, 0x4, 0xf, 0xf1, 0x3, 0xff, 0x81,
- 0x80, 0x30, 0x3c, 0xc0, 0x20, 0x14, 0xe, 0x44,
- 0xa, 0x83, 0x91, 0x29, 0x40, 0xc9, 0x83, 0x76,
- 0x32, 0x40, 0x69, 0x50, 0x2, 0xf3, 0x3, 0x95,
- 0xfd, 0xa0, 0x61, 0x81, 0xfe, 0x20, 0x85, 0xc8,
- 0x1d, 0x0, 0x61, 0xc6, 0x64, 0x1a, 0xc2, 0x41,
- 0x48, 0x9b, 0xe4, 0xd, 0x2, 0xd5, 0x1, 0x29,
- 0x80, 0x0,
-
- /* U+68 "h" */
- 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x33, 0xdf, 0xb2,
- 0x3, 0xbe, 0x84, 0x1, 0xac, 0xc, 0xcb, 0xd9,
- 0x0, 0x40, 0x3b, 0x42, 0x4e, 0x0, 0x40, 0x4c,
- 0x81, 0x98, 0x2, 0x5, 0xc0, 0xfd, 0xc0, 0xff,
- 0xff, 0x81, 0xff, 0xde,
-
- /* U+69 "i" */
- 0x17, 0xc0, 0x83, 0xc, 0xc1, 0x33, 0x3, 0xb7,
- 0xa0, 0x7f, 0xfb, 0x0,
-
- /* U+6A "j" */
- 0x2, 0xdd, 0x0, 0x24, 0x38, 0x2, 0x8f, 0x2,
- 0xb9, 0x1, 0xfd, 0xfa, 0x1, 0xff, 0xff, 0x3,
- 0xff, 0x9d, 0xc9, 0x50, 0x7, 0x62, 0x5, 0x10,
- 0xb, 0x0,
-
- /* U+6B "k" */
- 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x3f, 0xf8, 0x27,
- 0xf8, 0x81, 0xfd, 0xc0, 0x62, 0x7, 0xec, 0x46,
- 0x20, 0x7e, 0xc4, 0x52, 0x7, 0xec, 0x45, 0x40,
- 0x7e, 0xa4, 0x44, 0x7, 0xea, 0x80, 0x30, 0x3f,
- 0x88, 0x15, 0x3, 0xfc, 0x90, 0x26, 0x7, 0xe5,
- 0x68, 0x88, 0x40, 0xfb, 0x0, 0xe0, 0x38, 0x1f,
- 0xe3, 0x1, 0x80, 0x7f, 0x9a, 0xd, 0x1, 0xfe,
- 0xa4, 0x52, 0x7, 0xfb, 0x80, 0xe0,
-
- /* U+6C "l" */
- 0xde, 0x81, 0xff, 0xf0,
-
- /* U+6D "m" */
- 0x1f, 0x90, 0x9b, 0xf5, 0x40, 0x53, 0x7e, 0xc8,
- 0xe, 0xdd, 0x90, 0xa, 0xa4, 0xec, 0x80, 0x36,
- 0x1, 0x99, 0xbb, 0x18, 0xb, 0x42, 0x6c, 0x80,
- 0x19, 0x2, 0x39, 0x12, 0x90, 0x5, 0x99, 0x27,
- 0x40, 0x20, 0x2a, 0x7, 0x20, 0x8, 0x81, 0x90,
- 0xe, 0x7, 0xf1, 0x0, 0x40, 0xfc, 0x40, 0xff,
- 0xff, 0x81, 0xff, 0xff, 0x3, 0xff, 0xc8,
-
- /* U+6E "n" */
- 0x1f, 0x90, 0x7b, 0xf6, 0x40, 0x71, 0xd0, 0x80,
- 0x35, 0x81, 0xa1, 0x7b, 0x20, 0x8, 0x7, 0x68,
- 0x49, 0xc0, 0x8, 0x9, 0x90, 0x33, 0x0, 0x40,
- 0xb8, 0x1f, 0xb8, 0x1f, 0xff, 0xf0, 0x3f, 0xfb,
- 0xc0,
-
- /* U+6F "o" */
- 0x3, 0x4d, 0xfb, 0x40, 0x3c, 0xbb, 0x20, 0xb,
- 0xe8, 0x8, 0xd0, 0x17, 0xf4, 0x1, 0x48, 0xe,
- 0x3, 0xa0, 0xf, 0x0, 0xe1, 0x11, 0x0, 0xe3,
- 0x1, 0x2c, 0x1, 0x81, 0xe6, 0x2, 0x90, 0x40,
- 0xff, 0x10, 0x3f, 0xe2, 0x7, 0xff, 0x10, 0x82,
- 0x7, 0xe2, 0xe, 0x0, 0xc0, 0xf3, 0x1, 0x91,
- 0x10, 0xf, 0x40, 0x50, 0xe0, 0x32, 0x0, 0xb8,
- 0xe, 0x0, 0xd0, 0x6f, 0xea, 0x2, 0x90, 0x25,
- 0xd9, 0x0, 0x5f, 0x40, 0x0,
-
- /* U+70 "p" */
- 0x1f, 0x91, 0x9f, 0xd4, 0x81, 0xed, 0x8c, 0x9,
- 0x66, 0x7, 0x33, 0x36, 0x30, 0x10, 0x81, 0x8e,
- 0x64, 0xa5, 0x1, 0x0, 0xd4, 0xe, 0x48, 0x10,
- 0x1f, 0xf7, 0x0, 0x40, 0xff, 0x30, 0xc, 0xf,
- 0xfe, 0x9, 0x3, 0xff, 0x82, 0x40, 0xff, 0x30,
- 0xc, 0xf, 0xf7, 0x0, 0x40, 0xa8, 0x1c, 0x50,
- 0x40, 0x63, 0x90, 0x7, 0x80, 0x40, 0x31, 0x2b,
- 0xfa, 0x0, 0xa4, 0xd, 0x72, 0x2, 0x59, 0x1,
- 0xe3, 0x7f, 0xa9, 0x3, 0xff, 0xfa,
-
- /* U+71 "q" */
- 0x2, 0x57, 0xf6, 0x82, 0x7c, 0x2, 0x54, 0x0,
- 0xbe, 0x80, 0x9b, 0x3, 0x7e, 0x80, 0x81, 0x40,
- 0x72, 0x5, 0xe0, 0x24, 0x2, 0x81, 0xc4, 0x80,
- 0x60, 0xc, 0xf, 0xe2, 0x7, 0xff, 0x8, 0x81,
- 0xff, 0xc0, 0x20, 0x7f, 0x88, 0x1f, 0xfc, 0xc,
- 0x1, 0x81, 0xfc, 0x80, 0x50, 0x38, 0x90, 0x14,
- 0x7, 0x20, 0x5e, 0x3, 0x36, 0x6, 0xfd, 0x0,
- 0xf4, 0xa8, 0x1, 0x7c, 0x81, 0xca, 0xfe, 0xd0,
- 0xf, 0xff, 0xc8,
-
- /* U+72 "r" */
- 0x1f, 0x99, 0xbf, 0x80, 0xdb, 0x10, 0x1e, 0x41,
- 0x48, 0x3, 0xb5, 0x6c, 0x6, 0x64, 0xf, 0xb8,
- 0x1f, 0xff, 0xf0, 0x3f, 0xe0,
-
- /* U+73 "s" */
- 0x2, 0x7b, 0xfa, 0xa0, 0x3b, 0x42, 0x4, 0xac,
- 0x2, 0xa4, 0x4d, 0xe9, 0xd, 0x0, 0x41, 0xb1,
- 0xb, 0x0, 0x80, 0x80, 0xe0, 0x75, 0x74, 0x10,
- 0x10, 0x81, 0x94, 0x60, 0x28, 0xd, 0xeb, 0x3,
- 0xcb, 0x30, 0xa, 0x7a, 0x40, 0xc6, 0x7d, 0x10,
- 0x59, 0x1, 0xe2, 0xee, 0x1, 0x3, 0xb4, 0x7,
- 0x16, 0x8, 0x4, 0x84, 0xe, 0x20, 0x4c, 0x6,
- 0x64, 0x18, 0x83, 0x1, 0x80, 0x4d, 0xf3, 0x6,
- 0x0, 0x3e, 0x10, 0x25, 0x70, 0x0,
-
- /* U+74 "t" */
- 0x2, 0x90, 0x40, 0xe2, 0xdc, 0x7, 0xff, 0x27,
- 0xf6, 0x1, 0x7f, 0x2, 0x7, 0xed, 0xf0, 0xb,
- 0xf8, 0xf, 0xff, 0xf8, 0x11, 0x3, 0x88, 0xa,
- 0x48, 0xc, 0x81, 0xd8, 0x40, 0xab, 0x0, 0x40,
-
- /* U+75 "u" */
- 0x3f, 0x98, 0x1e, 0xfd, 0x0, 0xff, 0xff, 0x81,
- 0xff, 0xde, 0x20, 0x7f, 0xf0, 0xe8, 0x1d, 0x0,
- 0xcc, 0x1a, 0x49, 0x56, 0x6, 0x80, 0x16, 0xca,
- 0x88, 0x1d, 0xd8, 0x11, 0x98, 0x8,
-
- /* U+76 "v" */
- 0x5f, 0x88, 0x1e, 0xbf, 0x4, 0x2, 0x81, 0xe4,
- 0x10, 0x4, 0x10, 0x1c, 0x80, 0x50, 0x1c, 0x12,
- 0x3, 0x70, 0x48, 0x2, 0x1, 0x40, 0xc8, 0x50,
- 0x33, 0x8, 0x9, 0x0, 0x60, 0x6a, 0x9, 0x0,
- 0xe1, 0x1, 0xc4, 0x85, 0x0, 0x86, 0x3, 0xc8,
- 0x20, 0x80, 0x30, 0x3d, 0x41, 0x2c, 0x10, 0x1f,
- 0x12, 0x15, 0x8e, 0x7, 0xea, 0x18, 0x4, 0x7,
- 0xe6, 0x4, 0xc0, 0xff, 0x20, 0x18, 0xf, 0xf7,
- 0x0, 0x80, 0xe0,
-
- /* U+77 "w" */
- 0x5f, 0x88, 0x1d, 0x7d, 0x3, 0x97, 0xe2, 0x80,
- 0x20, 0x39, 0x4, 0x7, 0x60, 0x4, 0x21, 0x40,
- 0xc8, 0x9, 0x1, 0x90, 0x40, 0x30, 0x20, 0x6c,
- 0x5, 0x80, 0xc4, 0x60, 0xc, 0x2, 0x2, 0x62,
- 0x6, 0x4, 0x80, 0x30, 0x22, 0x30, 0x2, 0xb,
- 0x0, 0x40, 0x60, 0x40, 0xc8, 0x20, 0x14, 0x20,
- 0x85, 0x0, 0x82, 0x3, 0x60, 0x40, 0x21, 0x47,
- 0x8, 0x1, 0x14, 0xc, 0x80, 0x22, 0x40, 0x84,
- 0x9, 0x20, 0x4, 0xe, 0x43, 0x20, 0x80, 0x90,
- 0x58, 0x20, 0x3d, 0x82, 0xa3, 0x81, 0x61, 0x50,
- 0xe0, 0x79, 0x2, 0x41, 0x1, 0x30, 0x48, 0x20,
- 0x3c, 0x48, 0x2, 0x3, 0x88, 0x2, 0x7, 0xe4,
- 0x3, 0x1, 0xd4, 0x2, 0x3, 0xf6, 0x0, 0xc0,
- 0xe4, 0x2, 0x81, 0x80,
-
- /* U+78 "x" */
- 0x1f, 0xc0, 0x71, 0xfd, 0x80, 0x50, 0x10, 0xd,
- 0xc0, 0x70, 0x9, 0x3, 0x20, 0x11, 0x10, 0x81,
- 0x50, 0x10, 0x5, 0x5, 0x81, 0xd4, 0x24, 0x80,
- 0x38, 0x1e, 0x48, 0x2b, 0xc, 0x81, 0xf5, 0x2,
- 0x30, 0xf, 0xe6, 0x2, 0x81, 0xfc, 0x58, 0x8,
- 0x7, 0xf7, 0x4, 0x5, 0x3, 0xe6, 0x47, 0x81,
- 0x20, 0x1c, 0x60, 0x45, 0x91, 0x40, 0xee, 0x2,
- 0x80, 0xe0, 0x20, 0x13, 0x22, 0x1, 0x16, 0x1a,
- 0x6, 0x2, 0xc0, 0xd0, 0x5, 0x0,
-
- /* U+79 "y" */
- 0x9f, 0x88, 0x1e, 0xfd, 0x68, 0x5, 0x3, 0x90,
- 0xc, 0x48, 0x30, 0x3b, 0x0, 0x62, 0x80, 0x20,
- 0x66, 0x10, 0x6, 0x2, 0x81, 0x10, 0x1c, 0x9,
- 0x6, 0x5, 0x40, 0x20, 0x2c, 0x0, 0x80, 0x41,
- 0x1, 0x98, 0xa, 0x9, 0xe, 0x7, 0x20, 0xc2,
- 0x0, 0x80, 0xee, 0x0, 0xd0, 0x80, 0xf2, 0x1,
- 0x8, 0xe0, 0x7c, 0xc2, 0x0, 0x80, 0xfa, 0x81,
- 0x30, 0x3f, 0x10, 0x2c, 0x7, 0xf3, 0x0, 0x80,
- 0xfe, 0x21, 0x81, 0xfe, 0x42, 0x81, 0xfd, 0x1,
- 0x20, 0x3c, 0x54, 0x62, 0x1, 0xf7, 0xac, 0x24,
- 0x3, 0xe6, 0x2, 0x50, 0x3e,
-
- /* U+7A "z" */
- 0xbf, 0xff, 0xa0, 0x1f, 0xfc, 0xb, 0xff, 0xb0,
- 0x14, 0x3, 0xe8, 0x2, 0x81, 0xf3, 0x41, 0xa0,
- 0x3c, 0x60, 0x30, 0xf, 0xb8, 0xc, 0x7, 0xd4,
- 0x8a, 0x7, 0xcd, 0x6, 0x80, 0xf1, 0x80, 0xc0,
- 0x3e, 0xe0, 0x38, 0x1f, 0x42, 0x29, 0x3, 0xc9,
- 0x84, 0x80, 0x7d, 0x0, 0x2f, 0xff, 0x1, 0xff,
- 0xc0,
-
- /* U+7B "{" */
- 0x3, 0xf1, 0x3, 0xe7, 0xf0, 0x1e, 0x90, 0x18,
- 0x1c, 0xd8, 0x58, 0x7, 0x50, 0x50, 0x1e, 0x22,
- 0x81, 0xe2, 0x0, 0x81, 0xff, 0xd8, 0x60, 0x18,
- 0x1e, 0xc0, 0x8, 0x1c, 0xd8, 0x30, 0x3b, 0xc0,
- 0xa0, 0x18, 0x81, 0xfc, 0x7c, 0xa, 0x1, 0xe6,
- 0xc1, 0x81, 0xf6, 0x0, 0x40, 0xf3, 0x0, 0xc0,
- 0xff, 0xec, 0x10, 0x4, 0xf, 0x88, 0xc0, 0x7d,
- 0x42, 0x40, 0x3c, 0xd0, 0xb0, 0xf, 0x58, 0x18,
- 0x1f, 0x3f, 0x80,
-
- /* U+7C "|" */
- 0x9d, 0x81, 0xff, 0xf6, 0xcd, 0x0,
-
- /* U+7D "}" */
- 0x3, 0xf9, 0xfa, 0x7, 0x89, 0x2e, 0x40, 0xcb,
- 0x11, 0xc0, 0xf4, 0x5, 0x1, 0xc8, 0x1, 0x3,
- 0xf7, 0x3, 0xf1, 0x3, 0xff, 0x86, 0x40, 0xff,
- 0xe2, 0xa0, 0x80, 0xf5, 0x1, 0x48, 0x18, 0xd0,
- 0xb4, 0x3, 0x32, 0x7, 0x8e, 0x25, 0xa0, 0x15,
- 0x1, 0x88, 0x19, 0x4, 0x7, 0xff, 0xc, 0x81,
- 0xff, 0xc7, 0x20, 0x7e, 0xe0, 0x72, 0x0, 0x40,
- 0xe8, 0xa, 0x2, 0x58, 0x8e, 0x6, 0xc5, 0x72,
- 0x6, 0x9a, 0x81, 0xe0,
-
- /* U+7E "~" */
- 0x3, 0x12, 0x3, 0xff, 0x82, 0xb6, 0xbd, 0x3,
- 0xdb, 0x8, 0x34, 0x81, 0x2e, 0x80, 0x89, 0xc3,
- 0x83, 0xbc, 0x1, 0x62, 0x4e, 0x10, 0x2, 0x39,
- 0xf, 0x90, 0xed, 0x11, 0x0, 0x36, 0x20, 0x6d,
- 0x8, 0x5, 0xc8,
-
- /* U+F001 "" */
- 0x3, 0xff, 0x9c, 0x40, 0xff, 0xe5, 0x99, 0xbe,
- 0x80, 0x7f, 0xf1, 0xd5, 0xf9, 0x90, 0xc, 0xf,
- 0xfe, 0x19, 0x7b, 0xd4, 0x7, 0xff, 0x1d, 0x4f,
- 0xa1, 0x3, 0xff, 0x8e, 0xef, 0xac, 0xf, 0xfe,
- 0x4c, 0xf1, 0x1, 0xff, 0xcc, 0x60, 0x7f, 0xf7,
- 0xda, 0x3, 0xff, 0x94, 0x66, 0xf0, 0x81, 0xff,
- 0xc7, 0x57, 0xe6, 0x40, 0xff, 0xe3, 0x17, 0xbd,
- 0x40, 0x7f, 0xf2, 0x16, 0xc8, 0x40, 0xff, 0xe5,
- 0x92, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xf5, 0xdd,
- 0x50, 0x1f, 0xfc, 0x95, 0xe2, 0x28, 0x81, 0xff,
- 0xc8, 0x34, 0xf, 0xfe, 0x9, 0x30, 0x1f, 0xe4,
- 0x7, 0xfc, 0x77, 0xda, 0x3, 0xfc, 0x40, 0xfe,
- 0x2b, 0x10, 0x3f, 0xf8, 0x49, 0x0, 0xfd, 0x20,
- 0xf, 0xfe, 0x2d, 0x80, 0x72, 0xc8, 0x81, 0xfd,
- 0xc0, 0xfc, 0xff, 0x6c, 0xf4, 0x84, 0x7, 0xf2,
- 0x3, 0xfe, 0x24, 0x6, 0xa8, 0xf, 0xa9, 0x3,
- 0xff, 0x8d, 0x74, 0x48, 0xef, 0x40, 0x7f, 0xf1,
- 0x80,
-
- /* U+F008 "" */
- 0x94, 0xb, 0x7f, 0xff, 0xc4, 0xa0, 0x56, 0x34,
- 0xb1, 0x3, 0xff, 0x88, 0x97, 0x30, 0x16, 0xc0,
- 0x49, 0x7f, 0xf0, 0x0, 0xad, 0x80, 0xcd, 0xc0,
- 0xd, 0xbf, 0xfc, 0x0, 0x26, 0xe0, 0x23, 0x24,
- 0x40, 0xff, 0xe2, 0x29, 0x22, 0x7, 0xff, 0x9d,
- 0x81, 0xe3, 0xfc, 0x40, 0xff, 0xe2, 0x1f, 0xe2,
- 0x4, 0x4c, 0x0, 0x81, 0xff, 0xc3, 0x26, 0x2,
- 0x3b, 0x44, 0x6, 0xdf, 0xfc, 0x0, 0x7, 0x68,
- 0x81, 0xfc, 0x4f, 0xff, 0x0, 0x3, 0x3, 0xff,
- 0x82, 0x4f, 0xff, 0x0, 0x3, 0x3, 0xc7, 0x68,
- 0x80, 0xdb, 0xff, 0x80, 0x0, 0xed, 0x10, 0x22,
- 0x60, 0x4, 0xf, 0xfe, 0x19, 0x30, 0x11, 0xfe,
- 0x20, 0x7f, 0xf1, 0xf, 0xf1, 0x3, 0xff, 0x96,
- 0xc0, 0xff, 0xeb, 0x19, 0x22, 0x7, 0xff, 0x11,
- 0x49, 0x10, 0x26, 0xe0, 0x6, 0xdf, 0xfe, 0x0,
- 0x13, 0x70, 0x1a, 0xd8, 0x9, 0x2f, 0xfe, 0x0,
- 0x15, 0xb0, 0x4, 0xb8, 0x81, 0xff, 0xc4, 0x4b,
- 0x98,
-
- /* U+F00B "" */
- 0x9f, 0xfa, 0x80, 0xbf, 0xff, 0xf1, 0x23, 0x3,
- 0xc8, 0x84, 0x7, 0xff, 0x11, 0x81, 0xff, 0xff,
- 0x3, 0xff, 0xb2, 0x80, 0xf1, 0x20, 0x40, 0xff,
- 0xe2, 0x2b, 0xff, 0xb0, 0xd, 0xff, 0xff, 0x12,
- 0x81, 0xff, 0xd0, 0x9f, 0xfa, 0x80, 0xbf, 0xff,
- 0xf1, 0x23, 0x3, 0xc8, 0x84, 0x7, 0xff, 0x11,
- 0x81, 0xff, 0xff, 0x3, 0xff, 0xb2, 0x80, 0xf1,
- 0x20, 0x80, 0xff, 0xe2, 0x3b, 0xff, 0xb0, 0xb,
- 0xff, 0xff, 0x12, 0x1, 0xff, 0xd0, 0xbf, 0xfb,
- 0x0, 0xdf, 0xff, 0xf1, 0x2a, 0x3, 0xc4, 0x81,
- 0x3, 0xff, 0x88, 0x80, 0xff, 0xff, 0x81, 0xff,
- 0xd9, 0x60, 0x79, 0x10, 0x80, 0xff, 0xe2, 0x30,
-
- /* U+F00C "" */
- 0x3, 0xff, 0x96, 0xbc, 0x3, 0xff, 0x98, 0xe8,
- 0x74, 0xf, 0xfe, 0x53, 0x80, 0x4a, 0x1, 0xff,
- 0xc8, 0x70, 0xe, 0x60, 0x7f, 0xf1, 0xdc, 0x3,
- 0xcc, 0xf, 0xfe, 0x33, 0x80, 0x79, 0xc0, 0x3f,
- 0xf8, 0xae, 0x1, 0xe7, 0x0, 0xa7, 0x40, 0x7f,
- 0xce, 0x1, 0xe7, 0x0, 0xab, 0x15, 0x81, 0xfc,
- 0xe0, 0x1e, 0x70, 0xa, 0x20, 0x28, 0xc0, 0xf9,
- 0xc0, 0x3c, 0xe0, 0x19, 0x81, 0xd1, 0x81, 0xce,
- 0x1, 0xe7, 0x0, 0xe6, 0x7, 0xa3, 0x2, 0x70,
- 0xf, 0x38, 0x7, 0xa3, 0x3, 0xd1, 0x87, 0x0,
- 0xf3, 0x80, 0x7e, 0x8c, 0xf, 0x4b, 0x0, 0xf3,
- 0x80, 0x7f, 0xa3, 0x3, 0xc8, 0xf, 0x38, 0x7,
- 0xff, 0x2, 0x30, 0x3f, 0xe7, 0x0, 0xff, 0xe1,
- 0x46, 0x7, 0xf3, 0x80, 0x7f, 0xf1, 0x23, 0x3,
- 0xe9, 0x0, 0x7f, 0xf1, 0xa4, 0x1, 0xd1, 0x81,
- 0xff, 0xc8, 0x70, 0xa, 0x30, 0x3f, 0xf9, 0x4e,
- 0x8, 0xc0, 0xff, 0xe1, 0x80,
-
- /* U+F00D "" */
- 0x3, 0xff, 0x92, 0xff, 0x20, 0x3f, 0x8e, 0xf4,
- 0x3, 0x80, 0x2a, 0x3, 0xe3, 0x88, 0x54, 0x40,
- 0x35, 0x40, 0x71, 0xc0, 0x64, 0x48, 0xe, 0xa8,
- 0x8, 0xe0, 0x3c, 0x78, 0x1e, 0xa8, 0x1c, 0x7,
- 0xa8, 0x38, 0xf, 0x57, 0x80, 0xf5, 0x40, 0xe,
- 0x3, 0xd0, 0xf, 0x54, 0x6, 0x38, 0xf, 0xfa,
- 0xa0, 0x3c, 0x70, 0x1f, 0xd5, 0x1, 0xf8, 0xd0,
- 0x3e, 0x68, 0xf, 0xe3, 0x40, 0xf9, 0xa0, 0x3f,
- 0x1c, 0x7, 0xf5, 0x40, 0x78, 0xe0, 0x3f, 0xea,
- 0x80, 0xc7, 0x1, 0xe8, 0x7, 0xaa, 0x0, 0x70,
- 0x1e, 0xaf, 0x1, 0xea, 0x87, 0x3, 0xd5, 0x3,
- 0x80, 0xf5, 0x4, 0xe, 0xa8, 0x8, 0xe0, 0x3c,
- 0x60, 0x1a, 0xa0, 0x38, 0xe0, 0x32, 0x2e, 0x0,
- 0xa8, 0xf, 0x8e, 0x21, 0x50, 0xf, 0xf2, 0x3,
- 0xf8, 0xef, 0x40, 0x0,
-
- /* U+F011 "" */
- 0x3, 0xff, 0x80, 0xe4, 0x30, 0x3f, 0xf9, 0x66,
- 0x36, 0x84, 0xf, 0xff, 0xd, 0x80, 0x7f, 0xf0,
- 0x25, 0x3, 0xfc, 0x7a, 0x6c, 0x7, 0xf9, 0xb2,
- 0xe4, 0xf, 0x8e, 0x2, 0x80, 0x7f, 0xa0, 0x16,
- 0x20, 0x7b, 0x81, 0xff, 0xc8, 0xe0, 0x74, 0x20,
- 0x6c, 0x7, 0xfb, 0x1, 0x8c, 0x2, 0x2c, 0xd,
- 0x88, 0x1f, 0xe3, 0x80, 0xcc, 0x80, 0xa0, 0x6a,
- 0x40, 0xff, 0xe0, 0x1a, 0x6, 0xa0, 0x18, 0x11,
- 0x40, 0x7f, 0xf0, 0x91, 0x2, 0x60, 0x81, 0xa0,
- 0x1f, 0xfc, 0x4a, 0x6, 0x28, 0xc, 0x80, 0xff,
- 0xe2, 0x30, 0x32, 0x3, 0xff, 0x9f, 0xf8, 0x8,
- 0x81, 0xff, 0xc6, 0x20, 0x7e, 0x20, 0x78, 0x81,
- 0x88, 0x1e, 0x20, 0x5f, 0x80, 0xff, 0xbe, 0xce,
- 0x7, 0xff, 0x1, 0x1, 0x90, 0x1f, 0x12, 0x3,
- 0xe4, 0x6, 0x44, 0xd, 0xc0, 0xff, 0xe2, 0x70,
- 0x31, 0xc, 0x9, 0x20, 0x1f, 0xfc, 0x24, 0x80,
- 0x4c, 0x5, 0x3, 0x52, 0x7, 0xff, 0x0, 0xd0,
- 0x35, 0x0, 0x58, 0x1b, 0x10, 0x3f, 0xc7, 0x1,
- 0x99, 0x2, 0x80, 0x76, 0x80, 0x7e, 0x98, 0xc,
- 0x60, 0x1d, 0x80, 0xe7, 0xeb, 0x48, 0xef, 0x60,
- 0x77, 0x3, 0xc7, 0x1, 0xe5, 0x2d, 0x44, 0x7,
- 0xb1, 0x3, 0xe3, 0x88, 0x1f, 0xfc, 0x23, 0xc8,
- 0x1f, 0xc7, 0x40, 0x3f, 0xf8, 0x13, 0x1, 0xff,
- 0xc1, 0x7e, 0xb2, 0x6, 0x2e, 0xf6, 0x7, 0xff,
- 0x11, 0x4d, 0xfe, 0xd1, 0x1, 0xfc,
-
- /* U+F013 "" */
- 0x3, 0xff, 0xb0, 0x77, 0xfb, 0x30, 0x3f, 0xf8,
- 0xec, 0x81, 0x8e, 0x3, 0xff, 0xc5, 0x80, 0xf3,
- 0x3, 0xff, 0x83, 0xa0, 0x5, 0x98, 0x1e, 0x3e,
- 0x0, 0x79, 0x1, 0xd8, 0xbf, 0x68, 0x81, 0xfc,
- 0xf6, 0x43, 0x48, 0x13, 0x20, 0x48, 0xf, 0xfe,
- 0x1, 0x20, 0x28, 0x5, 0x0, 0xff, 0xe5, 0x24,
- 0xc, 0xf, 0xfe, 0x67, 0x14, 0xf, 0xf4, 0xd9,
- 0x48, 0x1f, 0xc8, 0x72, 0x7, 0xee, 0xc9, 0x2c,
- 0x80, 0xfd, 0x1, 0xd0, 0xf, 0x50, 0x3d, 0x40,
- 0xf2, 0xec, 0x8, 0x81, 0xe4, 0x7, 0xcc, 0xe,
- 0x20, 0x7f, 0xc4, 0xf, 0xfe, 0x11, 0x3, 0xfe,
- 0x20, 0x7f, 0xf0, 0x88, 0x1c, 0x40, 0xf2, 0x3,
- 0xe6, 0x7, 0x10, 0x23, 0xa0, 0x1e, 0xa0, 0x7a,
- 0x81, 0xe5, 0xd8, 0xe4, 0xf, 0xdd, 0x92, 0x59,
- 0x1, 0xfa, 0xa, 0x7, 0xfa, 0x6c, 0xa4, 0xf,
- 0xe4, 0x18, 0x1f, 0xfc, 0xce, 0x2, 0x1, 0xff,
- 0xca, 0x48, 0x1, 0x90, 0x24, 0x7, 0xff, 0x0,
- 0x90, 0x15, 0x3, 0x62, 0xfd, 0xa2, 0x7, 0xf3,
- 0xd9, 0x4d, 0x3, 0xda, 0x0, 0x59, 0x81, 0xe3,
- 0xe0, 0x5, 0x90, 0x1f, 0xfc, 0xc, 0x7, 0x98,
- 0x1f, 0xfe, 0x26, 0x40, 0xc7, 0x1, 0xff, 0xc7,
- 0x3b, 0xfd, 0x98, 0x1f, 0xe0,
-
- /* U+F015 "" */
- 0x3, 0xff, 0x84, 0x5b, 0x1, 0xca, 0x49, 0x1,
- 0xff, 0xc6, 0x7a, 0x46, 0x3, 0x76, 0xee, 0x7,
- 0xff, 0x16, 0xc0, 0x23, 0xc8, 0x1f, 0xfc, 0xbc,
- 0x80, 0xf6, 0x60, 0x7f, 0xf2, 0xf, 0x20, 0x4c,
- 0x81, 0x48, 0x3, 0xff, 0x8c, 0xf0, 0x1b, 0x4c,
- 0x80, 0x9a, 0x3, 0xff, 0x89, 0x20, 0x8, 0xe2,
- 0x42, 0xc0, 0x3f, 0xf8, 0xf5, 0x81, 0x2c, 0x66,
- 0xc2, 0xe8, 0x1f, 0xfc, 0x43, 0x90, 0x13, 0xa2,
- 0xb0, 0x72, 0x4c, 0x40, 0xff, 0xe0, 0xac, 0x40,
- 0xac, 0x39, 0x1, 0xab, 0x39, 0x1, 0x2a, 0x7,
- 0x9d, 0x3, 0x64, 0x71, 0x3, 0xd2, 0x8a, 0xc0,
- 0x96, 0x3, 0x58, 0x4, 0x79, 0x78, 0xf, 0xe5,
- 0x84, 0x80, 0x23, 0xc8, 0xa8, 0x9, 0x61, 0x20,
- 0xf, 0xf8, 0xf2, 0xe8, 0x1b, 0x20, 0x34, 0xa2,
- 0xb0, 0x3f, 0xf8, 0x59, 0x26, 0x20, 0x4e, 0x91,
- 0x59, 0xc8, 0xf, 0xfe, 0x25, 0x87, 0x21, 0x8,
- 0xd8, 0x84, 0x20, 0x7f, 0xf1, 0x99, 0x17, 0x30,
- 0x22, 0x1, 0x81, 0xff, 0xc8, 0x60, 0x8, 0x1f,
- 0xfe, 0x3b, 0xfe, 0x20, 0x7f, 0xf3, 0x98, 0x19,
- 0x81, 0xff, 0xff, 0x3, 0xff, 0xf6, 0x80, 0xf1,
- 0x20, 0x36, 0x3, 0xe4, 0x7, 0x0,
-
- /* U+F019 "" */
- 0x3, 0xfe, 0x29, 0x62, 0x7, 0xff, 0x25, 0x6b,
- 0x76, 0x40, 0x7f, 0xf2, 0x30, 0x1e, 0xc0, 0x7f,
- 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
- 0xff, 0x85, 0xb7, 0x30, 0x3c, 0xf6, 0xe0, 0x3f,
- 0x91, 0x3c, 0x7, 0xe2, 0x79, 0x1, 0xf9, 0x30,
- 0x3f, 0xf8, 0x8d, 0x1, 0xfd, 0x18, 0x1f, 0xfc,
- 0x27, 0x0, 0xff, 0xa3, 0x3, 0xff, 0x80, 0xe0,
- 0x1f, 0xfc, 0x18, 0xc0, 0xff, 0x38, 0x7, 0xff,
- 0xe, 0x30, 0x3f, 0x38, 0x7, 0xff, 0x16, 0x30,
- 0x3c, 0xe0, 0x1f, 0xfc, 0x78, 0xc0, 0xce, 0x1,
- 0xfe, 0xbf, 0xfe, 0xc2, 0x30, 0xe, 0xd, 0xff,
- 0xea, 0x80, 0xfc, 0x79, 0x93, 0x1c, 0x40, 0xfc,
- 0x80, 0xff, 0xb1, 0x6c, 0x71, 0x3, 0xff, 0x95,
- 0xb6, 0x3, 0xff, 0x9a, 0x48, 0xf, 0xfe, 0xa5,
- 0xe1, 0x76, 0x7, 0xff, 0x2c, 0x86, 0x7, 0xff,
- 0x32, 0xe0, 0x7b, 0x2, 0xd1, 0xbf, 0xfe, 0x64,
- 0xc0,
-
- /* U+F01C "" */
- 0x3, 0xc6, 0xff, 0xff, 0xc4, 0x80, 0x7f, 0xf0,
- 0x72, 0x3, 0xff, 0x88, 0xe0, 0x1f, 0xf5, 0x3,
- 0xff, 0x8e, 0xc8, 0x1f, 0xc9, 0x0, 0x16, 0xff,
- 0xf8, 0x40, 0x5c, 0xf, 0xea, 0x5, 0xe4, 0xff,
- 0xe1, 0x20, 0x6, 0x1, 0xf5, 0x2, 0x64, 0xf,
- 0xfe, 0x15, 0x2, 0x64, 0xe, 0x48, 0x0, 0xc0,
- 0x3f, 0xf8, 0x94, 0xb, 0x81, 0xd4, 0xb, 0x81,
- 0xff, 0xc5, 0x48, 0x0, 0xc0, 0x2a, 0x4, 0xc8,
- 0x1f, 0xfc, 0x6a, 0x4, 0xc8, 0x48, 0x0, 0xc0,
- 0x3f, 0xf9, 0x14, 0xb, 0x88, 0x4, 0xe4, 0xe6,
- 0x7, 0xf2, 0x93, 0xb0, 0x11, 0x44, 0x9, 0x37,
- 0xd1, 0x81, 0xfa, 0xb7, 0xe0, 0x31, 0x3, 0xfe,
- 0x80, 0x7c, 0xc0, 0xff, 0xb8, 0x1f, 0xfc, 0x6,
- 0x7, 0xa0, 0x1f, 0xfc, 0xc9, 0xff, 0x80, 0xff,
- 0xff, 0x81, 0xff, 0xf5, 0xe8, 0xf, 0xfe, 0x92,
- 0xa8, 0xf, 0xfe, 0x85, 0x20,
-
- /* U+F021 "" */
- 0x3, 0xff, 0x98, 0xa4, 0x30, 0x3f, 0x94, 0xdf,
- 0xea, 0xc8, 0x1d, 0x1b, 0x40, 0x3e, 0x7a, 0xb2,
- 0x6, 0x53, 0x52, 0x7, 0xff, 0x6, 0xc2, 0x7,
- 0xf9, 0x6a, 0x7, 0xf8, 0xf4, 0x7, 0xff, 0x9,
- 0x72, 0xc0, 0xf1, 0xc0, 0x73, 0xbf, 0xea, 0x80,
- 0xec, 0xc0, 0xf7, 0x3, 0x1d, 0x10, 0x19, 0x5c,
- 0x40, 0xc4, 0xe, 0x84, 0x9, 0xe2, 0x7, 0xe3,
- 0x98, 0x1f, 0x8b, 0x2, 0x70, 0xf, 0xfe, 0x4,
- 0x60, 0x7d, 0x40, 0x8c, 0x3, 0xf1, 0xff, 0x98,
- 0x1f, 0x30, 0x28, 0x7, 0xf3, 0x3, 0xff, 0x80,
- 0x40, 0xc8, 0xf, 0xfe, 0x5a, 0x25, 0x0, 0xff,
- 0x24, 0x27, 0xfc, 0x8d, 0xd8, 0xc0, 0xff, 0xae,
- 0xdf, 0xea, 0x7, 0xff, 0xb2, 0xed, 0xfe, 0xa0,
- 0x7f, 0xce, 0xea, 0x51, 0x3f, 0xe4, 0x80, 0x7f,
- 0xa2, 0x28, 0xf, 0xfe, 0x5a, 0x3, 0x10, 0x3f,
- 0xf8, 0xc, 0xf, 0xe8, 0x4, 0xc0, 0xf9, 0xff,
- 0xc4, 0xf, 0xd4, 0x81, 0x50, 0x3e, 0x70, 0xf,
- 0xfe, 0x4, 0x40, 0x4c, 0x81, 0xf9, 0xd2, 0x7,
- 0xe3, 0x98, 0x11, 0x80, 0x71, 0x3, 0x2d, 0x50,
- 0x19, 0x5c, 0x40, 0xdc, 0xf, 0x3c, 0x7, 0x2b,
- 0xfe, 0xa8, 0xe, 0xc4, 0xf, 0x33, 0xd0, 0x1f,
- 0xfc, 0x25, 0xc8, 0x1f, 0xeb, 0x90, 0x1f, 0xe3,
- 0x28, 0x1f, 0xfc, 0x13, 0x74, 0x20, 0x62, 0xee,
- 0x60, 0x7d, 0x1b, 0x40, 0x38, 0xbd, 0xfe, 0xd1,
- 0x1, 0xfc,
-
- /* U+F026 "" */
- 0x3, 0xff, 0x9a, 0x6b, 0x3, 0xfc, 0x72, 0x80,
- 0x7f, 0x1c, 0x7, 0xfc, 0x70, 0x1f, 0xf1, 0xc0,
- 0x71, 0x93, 0xd8, 0xf, 0x66, 0xfc, 0x7, 0xff,
- 0xfc, 0xf, 0xff, 0x3, 0x3, 0xff, 0x83, 0x3f,
- 0xf3, 0x3, 0xff, 0x83, 0x18, 0x1f, 0xfc, 0x18,
- 0xc0, 0xff, 0xe0, 0xc6, 0x7, 0xff, 0x6, 0x30,
- 0x40, 0xff, 0xa7, 0xc0,
-
- /* U+F027 "" */
- 0x3, 0xff, 0xa8, 0x6b, 0x3, 0xff, 0x8a, 0x72,
- 0x80, 0x7f, 0xf1, 0xe, 0x3, 0xff, 0x8c, 0x70,
- 0x1f, 0xfc, 0x63, 0x80, 0xff, 0xe0, 0x19, 0x3d,
- 0x80, 0xff, 0xe0, 0xe6, 0xfc, 0x7, 0xfa, 0xc0,
- 0x3f, 0xf8, 0xcd, 0x3c, 0x7, 0xff, 0x15, 0x90,
- 0x58, 0x1f, 0xfc, 0x5c, 0x2, 0x81, 0xff, 0xc6,
- 0x40, 0x81, 0xff, 0xc6, 0x60, 0x81, 0xff, 0xc5,
- 0xa4, 0x20, 0x3f, 0xf8, 0x8d, 0x3, 0x0, 0xff,
- 0xe2, 0x22, 0xb0, 0x60, 0x7f, 0xf0, 0xce, 0xa0,
- 0x27, 0xfe, 0x60, 0x7f, 0xf2, 0x23, 0x3, 0xff,
- 0x91, 0x18, 0x1f, 0xfc, 0x88, 0xc0, 0xff, 0xe4,
- 0x46, 0x8, 0x1f, 0xfc, 0x69, 0xb0, 0xf, 0x80,
-
- /* U+F028 "" */
- 0x3, 0xff, 0x97, 0x10, 0x1f, 0xfd, 0x16, 0xd6,
- 0x80, 0xff, 0xe8, 0x20, 0xb, 0x1, 0xff, 0xc4,
- 0x35, 0x81, 0xf8, 0xe2, 0xe, 0x3, 0xff, 0x84,
- 0x72, 0x80, 0x78, 0x80, 0x38, 0x83, 0x0, 0xff,
- 0xe0, 0x1c, 0x7, 0xe5, 0xba, 0x1, 0x80, 0x32,
- 0x7, 0xf8, 0xe0, 0x3f, 0xf8, 0x15, 0x80, 0xa0,
- 0x38, 0x1f, 0xc7, 0x1, 0xfe, 0x50, 0x4, 0x41,
- 0x20, 0x28, 0x19, 0x3d, 0x80, 0xff, 0xe0, 0x3a,
- 0x2, 0x80, 0x80, 0x38, 0xcd, 0xf8, 0xf, 0xf6,
- 0xa0, 0x13, 0x0, 0xc1, 0x20, 0x80, 0xff, 0xe2,
- 0xb2, 0xb0, 0x8, 0x2, 0x80, 0x40, 0x8, 0x1f,
- 0xfc, 0x46, 0x41, 0x80, 0x10, 0x20, 0x30, 0x6,
- 0x7, 0xff, 0x17, 0x10, 0x80, 0x60, 0x4, 0x30,
- 0x4, 0xf, 0xfe, 0x33, 0x4, 0xf, 0xfe, 0x8b,
- 0x4, 0xf, 0xfe, 0x86, 0x21, 0x0, 0xc0, 0x8,
- 0x60, 0x8, 0x1f, 0xfc, 0x46, 0x41, 0x80, 0x10,
- 0x20, 0x30, 0x6, 0x7, 0xff, 0x11, 0x95, 0x80,
- 0x40, 0x14, 0x2, 0x0, 0x58, 0x1f, 0xfc, 0x4d,
- 0x40, 0x26, 0x1, 0x82, 0x41, 0x9, 0xff, 0x98,
- 0x1f, 0xfc, 0x7, 0x40, 0x50, 0x10, 0x7, 0x3,
- 0xf4, 0x60, 0x7f, 0x94, 0x1, 0x10, 0x48, 0xa,
- 0x3, 0xfa, 0x30, 0x3f, 0xf8, 0x15, 0x80, 0xa0,
- 0x38, 0x1f, 0xf4, 0x60, 0x7e, 0x5b, 0xa0, 0x18,
- 0x3, 0x20, 0x7f, 0xf0, 0x23, 0x4, 0xf, 0x10,
- 0x7, 0x10, 0x60, 0x1f, 0xfc, 0x29, 0xf0, 0x1f,
- 0x8e, 0x20, 0xe0, 0x3f, 0xf9, 0xc8, 0x2, 0xc0,
- 0x7f, 0xf3, 0xdb, 0x5a, 0x3, 0xc0,
-
- /* U+F03E "" */
- 0x17, 0xff, 0xfe, 0x65, 0x15, 0x1, 0xff, 0xcc,
- 0x55, 0x1, 0xff, 0xce, 0x40, 0x67, 0xb2, 0x1,
- 0xff, 0xcb, 0x70, 0x93, 0xa0, 0x7f, 0xf2, 0xa8,
- 0x19, 0x1, 0xff, 0xd9, 0x2c, 0xf, 0xf9, 0x1,
- 0x88, 0x1f, 0x8e, 0x90, 0x7, 0xfa, 0x20, 0x7,
- 0x81, 0xf1, 0xc0, 0x1c, 0x3, 0xfd, 0x7f, 0x62,
- 0x7, 0x8e, 0x3, 0x38, 0x7, 0xff, 0x1c, 0xe0,
- 0x3c, 0xe0, 0x1f, 0xe3, 0xf0, 0x18, 0xe0, 0x3f,
- 0x36, 0x3, 0xf1, 0xc0, 0xe0, 0x7, 0x1, 0xff,
- 0xc6, 0x38, 0x8, 0xe5, 0x80, 0xff, 0xe3, 0x1c,
- 0x7, 0x1a, 0x7, 0xff, 0x1d, 0x1, 0xff, 0xeb,
- 0x52, 0x7f, 0xf2, 0x10, 0x1e, 0x2d, 0xff, 0xf2,
- 0x8, 0x12, 0x3, 0xff, 0x9c, 0xaa, 0x3, 0xff,
- 0x98, 0xa8,
-
- /* U+F048 "" */
- 0x52, 0x40, 0x7f, 0xcd, 0x87, 0x6e, 0x20, 0x7f,
- 0x59, 0x20, 0x3f, 0xf8, 0x39, 0x0, 0x40, 0x7f,
- 0xf0, 0x31, 0x3, 0xff, 0x84, 0x79, 0x3, 0xff,
- 0x84, 0x70, 0x1f, 0xfc, 0x35, 0x80, 0xff, 0xe1,
- 0xaa, 0x7, 0xff, 0xd, 0xd0, 0x3f, 0xf8, 0x6e,
- 0x1, 0xff, 0xc3, 0x90, 0x7, 0xff, 0x11, 0x1,
- 0xff, 0xfb, 0xa4, 0xf, 0xfe, 0x23, 0xc4, 0xf,
- 0xfe, 0x2e, 0x40, 0x7f, 0xf1, 0x6a, 0x3, 0xff,
- 0x8b, 0x58, 0x1f, 0xfc, 0x58, 0xc0, 0xff, 0xe2,
- 0xc8, 0x3, 0xff, 0x8a, 0xe8, 0x1f, 0xfc, 0x55,
- 0x40, 0x99, 0x3, 0xff, 0x80, 0xb1, 0x29, 0x1f,
- 0xc4, 0xf, 0xe3, 0xb0, 0x80,
-
- /* U+F04B "" */
- 0x5, 0xa0, 0x3f, 0xf9, 0x2f, 0x4b, 0x88, 0x1f,
- 0xfc, 0x78, 0x4, 0x74, 0x3, 0xff, 0x98, 0xfb,
- 0x3, 0xff, 0x99, 0x31, 0x3, 0xff, 0x96, 0x75,
- 0x3, 0xff, 0x98, 0xbb, 0x3, 0xff, 0x99, 0x32,
- 0x3, 0xff, 0x96, 0x6d, 0x10, 0x3f, 0xf9, 0x6b,
- 0x40, 0x3f, 0xf9, 0x8f, 0xa0, 0x3f, 0xf9, 0x96,
- 0x88, 0x1f, 0xfc, 0xb5, 0x98, 0x1f, 0xfc, 0xc8,
- 0x80, 0xff, 0xe6, 0x10, 0x3f, 0xf9, 0x84, 0xf,
- 0xfe, 0x5c, 0x40, 0x7f, 0xf2, 0x56, 0x60, 0x7f,
- 0xf2, 0x6d, 0x10, 0x3f, 0xf9, 0xf, 0xa0, 0x3f,
- 0xf9, 0xb, 0x40, 0x3f, 0xf9, 0x6, 0xd1, 0x3,
- 0xff, 0x91, 0x32, 0x3, 0xff, 0x90, 0xbb, 0x3,
- 0xff, 0x90, 0x75, 0x3, 0xff, 0x93, 0x31, 0x3,
- 0xff, 0x90, 0xfb, 0x3, 0xff, 0x89, 0x0, 0x8e,
- 0x80, 0x7f, 0xf1, 0x9e, 0x97, 0x10, 0x3f, 0xf8,
- 0xe0,
-
- /* U+F04C "" */
- 0x17, 0xff, 0x64, 0x7, 0x5f, 0xfd, 0x90, 0xa8,
- 0xf, 0x1a, 0x40, 0xaa, 0x3, 0xc6, 0x94, 0x7,
- 0xf2, 0x2, 0x40, 0x7f, 0x20, 0x3f, 0xdc, 0xf,
- 0xfe, 0xf, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc,
- 0xf, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff,
- 0xe0, 0x7f, 0xfc, 0x38, 0x1f, 0xfc, 0x1e, 0x7,
- 0xff, 0x36, 0x1, 0xf8, 0xb0, 0x28, 0x7, 0xe2,
- 0xda, 0xb7, 0xe9, 0x80, 0xce, 0xb7, 0xe9, 0x80,
-
- /* U+F04D "" */
- 0x6, 0x4f, 0xfe, 0x43, 0x0, 0xf3, 0x7f, 0xfc,
- 0x89, 0x84, 0x3, 0xff, 0x94, 0x58, 0x1f, 0xfe,
- 0x5e, 0x7, 0xff, 0xfc, 0xf, 0xff, 0xf8, 0x1f,
- 0xff, 0xf0, 0x3f, 0xff, 0xe0, 0x7f, 0xff, 0xc0,
- 0xff, 0xff, 0x74, 0x7, 0xff, 0x2d, 0x54, 0x7,
- 0xff, 0x20, 0xd2,
-
- /* U+F051 "" */
- 0xa, 0x1, 0xff, 0x39, 0xd, 0x57, 0xc8, 0x1f,
- 0xd1, 0xb4, 0x20, 0x58, 0x81, 0xff, 0xc0, 0xe0,
- 0x6c, 0x80, 0xff, 0xe2, 0xd4, 0x7, 0xff, 0x16,
- 0xb0, 0x3f, 0xf8, 0xb2, 0x0, 0xff, 0xe2, 0xb8,
- 0x7, 0xff, 0x15, 0xd0, 0x3f, 0xf8, 0xaa, 0x81,
- 0xff, 0xc5, 0x58, 0xf, 0xfe, 0x29, 0x3, 0xff,
- 0xf7, 0x80, 0xff, 0xe2, 0x62, 0x7, 0xff, 0x8,
- 0xe2, 0x7, 0xff, 0x8, 0xe2, 0x7, 0xff, 0x8,
- 0xe0, 0x3f, 0xf8, 0x6b, 0x1, 0xff, 0xc3, 0x54,
- 0xf, 0xfe, 0x1b, 0xa0, 0x7f, 0xdc, 0x9, 0xc0,
- 0x3f, 0xf8, 0xc, 0x89, 0x0, 0x7f, 0x10, 0x4,
- 0x6e, 0xc0, 0xff, 0x6f, 0xd8,
-
- /* U+F052 "" */
- 0x3, 0xff, 0x81, 0x2a, 0x3, 0xff, 0x95, 0xda,
- 0xb0, 0xf, 0xfe, 0x46, 0x3, 0x36, 0x3, 0xff,
- 0x8d, 0x88, 0x1d, 0x10, 0x1f, 0xfc, 0x4a, 0x40,
- 0xfa, 0xa0, 0x3f, 0xf8, 0x55, 0x1, 0xfd, 0x48,
- 0x1f, 0xfc, 0x8, 0x80, 0xff, 0xb1, 0x3, 0xfd,
- 0x18, 0x1f, 0xfc, 0x1c, 0x7, 0xf3, 0x60, 0x3f,
- 0xf8, 0x78, 0xf, 0x94, 0x3, 0xff, 0x88, 0x70,
- 0x1c, 0xa8, 0x1f, 0xfc, 0x63, 0x40, 0x8d, 0x3,
- 0xff, 0x90, 0xa8, 0xe, 0x7, 0xff, 0x29, 0x20,
- 0x20, 0x7f, 0xf2, 0xc8, 0x40, 0x7f, 0xf2, 0xd0,
- 0xa8, 0xf, 0xfe, 0x4c, 0x20, 0x2f, 0xff, 0xfc,
- 0x96, 0x7, 0xff, 0x41, 0xff, 0xff, 0xca, 0xc0,
- 0x20, 0x1f, 0xfc, 0xa2, 0xc0, 0xff, 0xe6, 0xf0,
- 0x3f, 0xff, 0xe0, 0x38, 0xa0, 0x7f, 0xf2, 0x93,
-
- /* U+F053 "" */
- 0x3, 0xfe, 0x30, 0x81, 0xff, 0xc0, 0x59, 0xe2,
- 0x7, 0xf9, 0x50, 0x2c, 0x7, 0xf2, 0xa0, 0x62,
- 0x7, 0xe5, 0x40, 0xc7, 0x1, 0xf2, 0xa0, 0x63,
- 0x80, 0xf9, 0x50, 0x31, 0xc0, 0x7c, 0xa8, 0x18,
- 0xe0, 0x3e, 0x54, 0xc, 0x70, 0x1f, 0x2a, 0x6,
- 0x38, 0xf, 0x95, 0x3, 0x1c, 0x7, 0xc6, 0x81,
- 0x8e, 0x3, 0xf2, 0x3, 0xa8, 0x1f, 0xcd, 0x1,
- 0xa3, 0x3, 0xfa, 0xa0, 0x34, 0x60, 0x7f, 0x54,
- 0x6, 0x8c, 0xf, 0xea, 0x80, 0xd1, 0x81, 0xfd,
- 0x50, 0x1a, 0x30, 0x3f, 0xa9, 0x3, 0x46, 0x7,
- 0xf6, 0x20, 0x68, 0xc0, 0xfe, 0xc4, 0xd, 0x18,
- 0x1f, 0xd8, 0x81, 0xa0, 0x1f, 0xec, 0x40, 0x90,
- 0x1f, 0xf6, 0x41, 0x50, 0x3f, 0xf8, 0x17, 0x50,
- 0x0,
-
- /* U+F054 "" */
- 0x0, 0xe0, 0x1f, 0xfc, 0x1b, 0x1d, 0x3, 0xfe,
- 0x68, 0x2, 0xa0, 0x7f, 0x88, 0x19, 0x50, 0x3f,
- 0x94, 0x3, 0x2a, 0x7, 0xf3, 0x80, 0x65, 0x40,
- 0xfe, 0x70, 0xc, 0xa8, 0x1f, 0xce, 0x1, 0x95,
- 0x3, 0xf9, 0xc0, 0x32, 0xa0, 0x7f, 0x38, 0x6,
- 0x54, 0xf, 0xe7, 0x0, 0xca, 0x81, 0xfc, 0xe0,
- 0x19, 0x50, 0x3f, 0x98, 0x1c, 0x80, 0xfe, 0xc0,
- 0x75, 0x3, 0xf6, 0x20, 0x6a, 0x80, 0xfb, 0x10,
- 0x35, 0x40, 0x7d, 0x88, 0x1a, 0xa0, 0x3e, 0xc4,
- 0xd, 0x50, 0x1f, 0x62, 0x6, 0xa8, 0xf, 0xb1,
- 0x3, 0x54, 0x7, 0xd8, 0x81, 0xaa, 0x3, 0xe6,
- 0x40, 0xd5, 0x1, 0xf9, 0x1, 0xaa, 0x3, 0xf8,
- 0xe0, 0x15, 0x1, 0xff, 0x1f, 0xc8, 0xf, 0xf8,
-
- /* U+F067 "" */
- 0x3, 0xfc, 0xad, 0x40, 0x3f, 0xf9, 0x6, 0xa4,
- 0x74, 0xf, 0xfe, 0x3b, 0x3, 0x30, 0x3f, 0xf8,
- 0xe4, 0xc, 0x40, 0xff, 0xff, 0x81, 0xff, 0xff,
- 0x3, 0xfc, 0xff, 0xfd, 0x0, 0xef, 0xff, 0x61,
- 0x0, 0xff, 0xe5, 0x16, 0x7, 0xff, 0x33, 0x81,
- 0xff, 0xcc, 0xec, 0xf, 0xfe, 0x5a, 0x9b, 0x7e,
- 0x60, 0x76, 0xdf, 0xb9, 0x4, 0xfe, 0xe0, 0x71,
- 0x3f, 0x80, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
- 0xfe, 0x20, 0x62, 0x7, 0xff, 0x1d, 0x32, 0x6e,
- 0x7, 0xf8,
-
- /* U+F068 "" */
- 0x0, 0x4f, 0xff, 0x20, 0xa, 0x7d, 0xbf, 0xf9,
- 0x1f, 0x83, 0x3, 0xff, 0x96, 0xc0, 0xff, 0xe6,
- 0x70, 0x3f, 0xf9, 0x9e, 0x1, 0xff, 0xcb, 0x6d,
- 0xf6, 0xff, 0xe4, 0x7e, 0x0,
-
- /* U+F06E "" */
- 0x3, 0xfc, 0x5d, 0xdf, 0xed, 0x10, 0x1f, 0xfc,
- 0x75, 0xb2, 0x22, 0x6, 0x2e, 0xfa, 0x40, 0xff,
- 0xe1, 0x1d, 0x48, 0x19, 0x28, 0x81, 0x96, 0x80,
- 0x7f, 0xf0, 0x26, 0x20, 0x46, 0xfb, 0x6d, 0xd8,
- 0x19, 0xf4, 0x7, 0xf5, 0x60, 0x65, 0x90, 0x1e,
- 0x98, 0xe, 0xac, 0xf, 0xb2, 0x3, 0x2a, 0x4,
- 0x64, 0x20, 0x7, 0x1, 0xd1, 0x81, 0xd4, 0x81,
- 0xd4, 0xe, 0x6d, 0x71, 0x6, 0x81, 0xd1, 0x1,
- 0x34, 0x7, 0x40, 0x3f, 0x8e, 0x0, 0x88, 0x1d,
- 0x48, 0x30, 0xf, 0x20, 0x3a, 0x1, 0xd0, 0x2,
- 0x3, 0xdc, 0x40, 0x3e, 0x21, 0x47, 0x50, 0x1c,
- 0x80, 0x60, 0x3c, 0x52, 0x1, 0xfc, 0x5c, 0x40,
- 0x78, 0x81, 0xfe, 0xc8, 0xf, 0xfe, 0x96, 0xa0,
- 0x7c, 0x43, 0x3, 0xf9, 0x80, 0xc0, 0x78, 0xa1,
- 0x0, 0xf2, 0x0, 0xc0, 0xfd, 0x40, 0x20, 0x3d,
- 0xc0, 0x34, 0x7, 0x40, 0x11, 0x1, 0xea, 0x42,
- 0x20, 0x75, 0x20, 0x55, 0x1, 0xd4, 0x5, 0xa4,
- 0x49, 0xf4, 0xd, 0x3, 0xa2, 0x3, 0xaa, 0x3,
- 0x2a, 0x1, 0x5d, 0x90, 0x1, 0xc0, 0x74, 0x60,
- 0x7d, 0x60, 0x19, 0x64, 0x7, 0xa6, 0x3, 0xab,
- 0x3, 0xf9, 0xe2, 0x4, 0x6f, 0xb6, 0xdd, 0x81,
- 0x9f, 0x40, 0x7f, 0xc7, 0x52, 0x6, 0x4a, 0x20,
- 0x65, 0xa0, 0x1f, 0xfc, 0x35, 0xb2, 0x22, 0x6,
- 0x2e, 0xfa, 0x40, 0xfc,
-
- /* U+F070 "" */
- 0x9, 0x0, 0xff, 0xea, 0x2b, 0x50, 0xf, 0xfe,
- 0x9d, 0x0, 0xf0, 0x1f, 0xfd, 0x26, 0x4, 0x79,
- 0x3, 0xff, 0xa1, 0x28, 0x1b, 0x30, 0x31, 0x77,
- 0x7f, 0x6a, 0xc8, 0x1f, 0xfc, 0x15, 0x88, 0x14,
- 0xa1, 0xec, 0x88, 0x81, 0x15, 0x36, 0x30, 0x3f,
- 0xf8, 0x7, 0x20, 0x25, 0xe1, 0x3, 0x25, 0x1,
- 0x8c, 0xec, 0xf, 0xfe, 0x5, 0x80, 0x7c, 0x6f,
- 0xb6, 0xf9, 0x1, 0xa5, 0x3, 0xff, 0x80, 0xf0,
- 0x1c, 0x72, 0x3, 0x8d, 0x80, 0x65, 0xc8, 0x1f,
- 0xf1, 0xe8, 0x8, 0xe0, 0xe, 0xd2, 0x0, 0xe0,
- 0x1d, 0x88, 0x1f, 0xfc, 0xa, 0xc0, 0x8f, 0x41,
- 0x25, 0xc0, 0x1a, 0x3, 0xb8, 0x1f, 0x5c, 0x40,
- 0xa5, 0x3, 0x5a, 0x2, 0x38, 0x4, 0x3, 0x8d,
- 0x3, 0x92, 0x1c, 0x80, 0x96, 0x20, 0x44, 0xc,
- 0x50, 0x20, 0x79, 0x20, 0x1a, 0x81, 0x58, 0x4,
- 0x72, 0x3, 0xf7, 0x0, 0x80, 0xf5, 0x2, 0x20,
- 0x73, 0xc4, 0xa, 0xc0, 0x3f, 0xf8, 0xc4, 0x1,
- 0x3, 0xc7, 0x81, 0x9e, 0x3, 0xf9, 0x81, 0xf1,
- 0x2, 0xa0, 0x78, 0x81, 0xc7, 0xa0, 0x33, 0x20,
- 0x81, 0xea, 0x6, 0x48, 0x7, 0x90, 0x1e, 0xb0,
- 0x8, 0xe8, 0x7, 0x9a, 0x3, 0xa9, 0x3, 0xa0,
- 0x1f, 0x3a, 0x6, 0x60, 0x71, 0x80, 0x7d, 0xc0,
- 0xe3, 0x0, 0xf9, 0x72, 0x7, 0xec, 0x7, 0xe3,
- 0x88, 0x19, 0xb0, 0x1f, 0xb3, 0x3, 0xd8, 0xf,
- 0xf1, 0xc8, 0xd, 0x32, 0x3, 0xe9, 0x40, 0xe4,
- 0x7, 0xff, 0x2, 0xc0, 0x31, 0xbe, 0xd9, 0x1,
- 0x2c, 0x40, 0xa5, 0x3, 0xff, 0x80, 0xfc, 0x20,
- 0x64, 0xab, 0x0, 0x8e, 0x40, 0x4b, 0x10, 0x3f,
- 0xf8, 0xf, 0x64, 0x44, 0x8, 0x92, 0x3, 0x58,
- 0x4, 0x72, 0x3, 0xff, 0x82, 0x5d, 0xdf, 0xda,
- 0xa0, 0x39, 0xe0, 0x35, 0x80, 0x7f, 0xf4, 0xf,
- 0x20, 0x4c, 0xf, 0xfe, 0x96, 0x60, 0x28, 0x1f,
- 0xfd, 0x39, 0x69, 0x0,
-
- /* U+F071 "" */
- 0x3, 0xff, 0x86, 0xa3, 0x3, 0xff, 0xa2, 0xab,
- 0x98, 0xf, 0xfe, 0x85, 0x2, 0x2c, 0xf, 0xfe,
- 0x74, 0x3, 0xa0, 0x1f, 0xfc, 0xd2, 0xc0, 0xf5,
- 0x3, 0xff, 0x99, 0x0, 0xf9, 0x10, 0x3f, 0xf9,
- 0x49, 0x0, 0xfd, 0xc0, 0xff, 0xe5, 0x40, 0x3f,
- 0x8a, 0x3, 0xff, 0x90, 0xc8, 0x1f, 0xea, 0x7,
- 0xff, 0x22, 0x1, 0xff, 0xc0, 0x80, 0x7f, 0xf1,
- 0xa0, 0x19, 0xff, 0x80, 0xcc, 0xf, 0xfe, 0x29,
- 0x60, 0x6e, 0x7, 0xf5, 0x3, 0xff, 0x89, 0x0,
- 0xff, 0xe1, 0xa2, 0x7, 0xff, 0x9, 0x20, 0x1d,
- 0xc0, 0xff, 0x70, 0x3f, 0xf8, 0x50, 0xf, 0xfe,
- 0x29, 0x40, 0x7f, 0xf0, 0x19, 0x3, 0xff, 0x8d,
- 0x40, 0xff, 0xe0, 0x40, 0x3e, 0x20, 0x44, 0xf,
- 0xd0, 0xf, 0xf4, 0x3, 0xff, 0x92, 0xc0, 0xfe,
- 0x2c, 0xf, 0xcc, 0x9, 0x1, 0xfd, 0x40, 0xfd,
- 0x0, 0xfe, 0x3f, 0xd0, 0xf, 0xe4, 0x40, 0xf2,
- 0x40, 0x3f, 0xd7, 0xf2, 0x3, 0xfd, 0xc0, 0xf4,
- 0x3, 0xfd, 0x10, 0xa, 0x7, 0xf8, 0xb0, 0x33,
- 0x20, 0x7f, 0x88, 0x18, 0x81, 0xfe, 0x80, 0x68,
- 0x7, 0xfd, 0x80, 0xc4, 0xf, 0xfa, 0x0, 0x80,
- 0x7f, 0xf0, 0x1b, 0x3, 0x80, 0xff, 0xe0, 0x30,
- 0xc, 0xf, 0xfe, 0xc, 0xf8, 0x81, 0xff, 0xc1,
- 0x60, 0x7f, 0xf5, 0xa0, 0x1f, 0xfd, 0x26, 0x1d,
- 0x6f, 0xff, 0x9f, 0x38,
-
- /* U+F074 "" */
- 0x3, 0xff, 0x92, 0xe9, 0x3, 0xff, 0x9b, 0x16,
- 0x20, 0x7f, 0xf3, 0xf1, 0x0, 0x52, 0xe2, 0x7,
- 0xf8, 0xa5, 0x1, 0xb1, 0x1a, 0xde, 0xd4, 0xf,
- 0xc7, 0x5b, 0x1, 0xd8, 0x81, 0xf2, 0xa0, 0x78,
- 0xe0, 0x3f, 0xd8, 0xf, 0xca, 0x1, 0x8e, 0x3,
- 0xfe, 0x20, 0x7f, 0x38, 0x5, 0x80, 0xff, 0x8e,
- 0xfb, 0x68, 0x6, 0x20, 0x30, 0x18, 0xec, 0x3,
- 0x1c, 0x0, 0x9c, 0xe0, 0x5, 0x46, 0x20, 0x47,
- 0x12, 0x2, 0x38, 0xf, 0xcd, 0x8d, 0x18, 0x81,
- 0xb8, 0x1c, 0x70, 0x1f, 0xe9, 0x85, 0x20, 0x6c,
- 0x40, 0xab, 0xc0, 0x7f, 0xf0, 0x6a, 0x3, 0x62,
- 0x6, 0x50, 0xf, 0xfe, 0xc, 0x40, 0x6a, 0x40,
- 0xe5, 0x0, 0xff, 0xe0, 0x46, 0x6, 0xa9, 0x39,
- 0x2, 0xaf, 0x90, 0x3f, 0x9b, 0x1, 0xa2, 0x4a,
- 0x38, 0x1e, 0xc4, 0x8, 0x9c, 0xe0, 0x1a, 0x33,
- 0x40, 0x1c, 0x48, 0xd, 0x88, 0xfb, 0x68, 0x6,
- 0x6c, 0x8, 0x18, 0xec, 0x3, 0xb1, 0x3, 0xf9,
- 0xc0, 0x2c, 0x7, 0xff, 0x3, 0x81, 0xf9, 0x40,
- 0x31, 0xc0, 0x7f, 0xf1, 0xd5, 0x3, 0xc7, 0x1,
- 0xfe, 0xfa, 0xde, 0xd4, 0xf, 0xc7, 0x5b, 0x1,
- 0xd8, 0x92, 0x5c, 0x40, 0xff, 0x14, 0xa0, 0x36,
- 0x20, 0x7f, 0xf3, 0x71, 0x3, 0xff, 0x97, 0x16,
- 0x20, 0x40,
-
- /* U+F077 "" */
- 0x3, 0xfe, 0x74, 0x81, 0xff, 0xc9, 0x90, 0xb1,
- 0x3, 0xff, 0x8f, 0x18, 0x16, 0x20, 0x7f, 0xf1,
- 0x63, 0x3, 0xb1, 0x3, 0xff, 0x87, 0x18, 0x1f,
- 0x62, 0x7, 0xff, 0x6, 0x30, 0x3f, 0xb1, 0x3,
- 0xfe, 0x8c, 0xc, 0xb0, 0x1d, 0x88, 0x1f, 0xd1,
- 0x81, 0x95, 0x38, 0xe, 0xc4, 0xf, 0xa3, 0x3,
- 0x2a, 0x0, 0xe0, 0x3b, 0x10, 0x3a, 0x30, 0x32,
- 0xa0, 0x63, 0x80, 0xec, 0x40, 0xa3, 0x3, 0x2a,
- 0x7, 0x8e, 0x3, 0xb1, 0xd, 0x80, 0xca, 0x81,
- 0xf8, 0xe0, 0x3b, 0xe, 0x6, 0x54, 0xf, 0xf1,
- 0xc0, 0x7a, 0x10, 0xa, 0x81, 0xff, 0xc0, 0x38,
- 0xa, 0x0, 0xc9, 0xd0, 0x3f, 0xf8, 0x47, 0x2a,
- 0xc0,
-
- /* U+F078 "" */
- 0x1, 0x60, 0x1f, 0xfc, 0x43, 0x58, 0x16, 0x4e,
- 0x81, 0xff, 0xc2, 0x39, 0x46, 0x21, 0x0, 0xa8,
- 0x1f, 0xfc, 0x3, 0x80, 0xa0, 0xe0, 0x65, 0x40,
- 0xff, 0x1c, 0x6, 0x21, 0xb0, 0x19, 0x50, 0x3f,
- 0x1c, 0x7, 0x70, 0x11, 0x81, 0x95, 0x3, 0xc7,
- 0x1, 0xd8, 0x81, 0x46, 0x6, 0x54, 0xc, 0x70,
- 0x1d, 0x88, 0x1d, 0x18, 0x19, 0x50, 0x7, 0x1,
- 0xd8, 0x81, 0xf4, 0x60, 0x65, 0x4e, 0x3, 0xb1,
- 0x3, 0xfa, 0x30, 0x32, 0xc0, 0x76, 0x20, 0x7f,
- 0xd1, 0x81, 0xfd, 0x88, 0x1f, 0xfc, 0x18, 0xc0,
- 0xfb, 0x10, 0x3f, 0xf8, 0x71, 0x81, 0xd8, 0x81,
- 0xff, 0xc5, 0x8c, 0xb, 0x10, 0x3f, 0xf8, 0xf2,
- 0x16, 0x20, 0x7f, 0x80,
-
- /* U+F079 "" */
- 0x3, 0xc8, 0x81, 0xff, 0xd4, 0x97, 0x20, 0x3f,
- 0xfa, 0x51, 0x80, 0xa8, 0xc, 0x9b, 0xff, 0xe1,
- 0x1, 0xfd, 0x18, 0x1a, 0xa0, 0xa, 0xc9, 0xff,
- 0xc2, 0x60, 0x7d, 0x18, 0x1e, 0xa8, 0x30, 0x3f,
- 0xf8, 0x7c, 0xf, 0x46, 0x7, 0xea, 0x8d, 0x3,
- 0xff, 0x91, 0x18, 0x1f, 0xea, 0x93, 0xff, 0xf8,
- 0xf, 0xe6, 0x5, 0x40, 0x9b, 0x1, 0x60, 0x3f,
- 0xf9, 0x30, 0x5, 0x40, 0x68, 0x80, 0x50, 0x3f,
- 0xf9, 0x2f, 0x62, 0x3, 0xd6, 0xb9, 0x3, 0xff,
- 0x94, 0x48, 0xf, 0xc8, 0xf, 0xff, 0xf8, 0x1f,
- 0xfd, 0xc9, 0x0, 0x7c, 0x6b, 0x3, 0xff, 0x95,
- 0x9b, 0x50, 0x38, 0xe5, 0x18, 0x1f, 0xfc, 0x92,
- 0x1, 0x40, 0x23, 0xc0, 0xb8, 0x1f, 0x93, 0x7f,
- 0xe2, 0x28, 0x13, 0x2, 0x44, 0x1, 0x80, 0x7e,
- 0x32, 0x7f, 0xb2, 0x4a, 0x7, 0xf1, 0xc0, 0x7f,
- 0xf2, 0x68, 0x54, 0xf, 0x8e, 0x3, 0xe6, 0x7,
- 0xff, 0x9, 0x0, 0x58, 0xe, 0x38, 0xf, 0xd3,
- 0xff, 0xfe, 0x15, 0x2, 0x38, 0x8, 0xe0, 0x3f,
- 0xfa, 0x27, 0x15, 0x80, 0xe0,
-
- /* U+F07B "" */
- 0x17, 0xff, 0xec, 0x7, 0xff, 0x12, 0xa0, 0x3f,
- 0x8e, 0x3, 0xff, 0x86, 0x80, 0xff, 0x8e, 0x3,
- 0xff, 0x9e, 0x74, 0x9f, 0xe6, 0x40, 0xff, 0xe1,
- 0x96, 0xff, 0xd3, 0x20, 0x3f, 0xf9, 0xf4, 0xf,
- 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xe0,
- 0x7f, 0xff, 0xc0, 0xff, 0xfa, 0x20, 0x3f, 0xf9,
- 0xca, 0xa0, 0x3f, 0xf9, 0x8a, 0x80,
-
- /* U+F093 "" */
- 0x3, 0xff, 0x82, 0x40, 0xff, 0xe7, 0x3d, 0xc8,
- 0x1f, 0xfc, 0xb7, 0x0, 0x62, 0x7, 0xff, 0x25,
- 0xc0, 0x36, 0x20, 0x7f, 0xf1, 0xdc, 0x3, 0xd8,
- 0x81, 0xff, 0xc5, 0x70, 0xf, 0xd8, 0x81, 0xff,
- 0xc3, 0x70, 0xf, 0xf6, 0x20, 0x7f, 0xf0, 0x5c,
- 0x3, 0xff, 0x81, 0x88, 0x1f, 0xf3, 0x80, 0x7f,
- 0xf0, 0xb1, 0x3, 0xf9, 0x40, 0x3f, 0xf8, 0x98,
- 0xf, 0xe2, 0x7, 0xff, 0x3d, 0xed, 0xc4, 0xf,
- 0x4d, 0xb7, 0x3, 0xfc, 0x4f, 0x30, 0x3c, 0x4f,
- 0x1, 0xff, 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff,
- 0xa2, 0xff, 0xf6, 0x3, 0xf3, 0x1b, 0xff, 0xaa,
- 0x3, 0xe2, 0x2b, 0x7d, 0x8, 0x20, 0x7c, 0x80,
- 0xfe, 0xc2, 0x4e, 0x63, 0x1, 0xff, 0xc6, 0x3f,
- 0x6f, 0x72, 0x7, 0xff, 0x20, 0x9f, 0x1, 0xff,
- 0xd2, 0xbc, 0x2e, 0xc0, 0xff, 0xe5, 0x90, 0xc0,
- 0xff, 0xe6, 0x5c, 0xf, 0x60, 0x5a, 0x37, 0xff,
- 0xcc, 0x98,
-
- /* U+F095 "" */
- 0x3, 0xff, 0x92, 0xd8, 0x81, 0xff, 0xcd, 0x52,
- 0x37, 0xac, 0x81, 0xff, 0xc9, 0xe0, 0x65, 0x36,
- 0x1, 0xff, 0xc7, 0x28, 0xf, 0x88, 0x1f, 0xfc,
- 0x7a, 0x7, 0xff, 0x41, 0x81, 0xff, 0xcf, 0x60,
- 0x7f, 0x10, 0x3f, 0xf8, 0xd4, 0xf, 0xe6, 0x7,
- 0xff, 0x19, 0x81, 0xfd, 0x80, 0xff, 0xe3, 0x54,
- 0x7, 0xe4, 0x7, 0xff, 0x1e, 0xb0, 0x3e, 0x20,
- 0x7f, 0xf2, 0x24, 0x1, 0xcc, 0xf, 0xfe, 0x56,
- 0x3, 0xb0, 0x1f, 0xfc, 0x92, 0x80, 0xc5, 0x1,
- 0xff, 0xc9, 0xe0, 0x74, 0x3, 0xff, 0x93, 0x8,
- 0x18, 0xa0, 0x3f, 0xf9, 0xd, 0x80, 0xee, 0x7,
- 0xf8, 0xb0, 0x3f, 0x28, 0x7, 0x32, 0x7, 0xe5,
- 0x74, 0xc0, 0x79, 0xd0, 0x38, 0xc0, 0x3e, 0x7a,
- 0xa0, 0x6, 0x81, 0xac, 0x3, 0xd8, 0xf, 0x3f,
- 0x8, 0x1c, 0x98, 0x5d, 0x1, 0xec, 0x7, 0xd0,
- 0xf, 0xe9, 0xa8, 0x1f, 0x62, 0x7, 0xc4, 0xf,
- 0xf1, 0x3, 0xc7, 0x10, 0x3f, 0x20, 0x3f, 0xf8,
- 0x8b, 0x10, 0x3f, 0xb0, 0x1f, 0xfc, 0x39, 0x40,
- 0xff, 0x90, 0x1f, 0xfc, 0x17, 0xd8, 0x1f, 0xfc,
- 0x12, 0x7, 0xf9, 0xf8, 0x7, 0xff, 0xd, 0x1,
- 0xe2, 0xef, 0x80, 0x7f, 0xf1, 0x64, 0xd7, 0x7d,
- 0x10, 0x1f, 0xfc, 0x50,
-
- /* U+F0C4 "" */
- 0x2, 0x52, 0x19, 0x3, 0xff, 0x8c, 0x75, 0x6d,
- 0x33, 0x3, 0xfc, 0xed, 0x40, 0x2c, 0x40, 0xe8,
- 0xc0, 0xf8, 0xf8, 0x91, 0xf3, 0x0, 0xfd, 0x0,
- 0xf1, 0xc0, 0x79, 0xa0, 0x2f, 0xd0, 0x9, 0x1,
- 0x8e, 0x3, 0xd5, 0x10, 0xc, 0x3, 0x2, 0x20,
- 0x47, 0x1, 0xea, 0x80, 0xc8, 0x2, 0x3, 0xc7,
- 0x1, 0xea, 0x80, 0x20, 0x7, 0x5a, 0x2, 0x20,
- 0xe0, 0x3d, 0x50, 0x14, 0x2, 0x28, 0xd, 0x56,
- 0x3, 0xd5, 0x1, 0x8d, 0x3, 0xfa, 0x81, 0xea,
- 0x80, 0xf2, 0xec, 0x90, 0x1f, 0xf5, 0x40, 0x7f,
- 0x4d, 0x94, 0xf, 0xea, 0x80, 0xff, 0xe0, 0xa8,
- 0x7, 0xd1, 0x1, 0xff, 0xc2, 0x30, 0xf, 0xa1,
- 0x3, 0xfe, 0x52, 0x30, 0x1f, 0xd8, 0x81, 0xf8,
- 0xea, 0xd8, 0xf, 0xfb, 0x10, 0x3e, 0xc4, 0xf,
- 0xcc, 0xf, 0x62, 0x7, 0x40, 0x3f, 0xa4, 0x50,
- 0x3d, 0x88, 0x19, 0x1, 0x7e, 0x80, 0x44, 0x2a,
- 0x7, 0xb1, 0x2, 0x20, 0x18, 0x6, 0x4, 0x40,
- 0x2a, 0x7, 0xb1, 0x3, 0x90, 0x4, 0x7, 0xca,
- 0x81, 0xec, 0x42, 0x0, 0x75, 0xa0, 0x24, 0x6,
- 0x54, 0xf, 0x63, 0x0, 0x8a, 0x2, 0x64, 0xe,
- 0x54, 0xf, 0x33, 0x40, 0xf2, 0x80, 0x7c, 0xb2,
- 0x0, 0xb2, 0xb, 0xb2, 0x4a, 0xd0, 0x1f, 0xc6,
- 0xfe, 0xa4, 0x0,
-
- /* U+F0C5 "" */
- 0x3, 0xf2, 0x5f, 0xc4, 0x10, 0x3f, 0xf8, 0x1a,
- 0xdf, 0xf0, 0xd4, 0xf, 0xf8, 0x81, 0xff, 0xc0,
- 0x54, 0xf, 0xfe, 0x62, 0xa0, 0x7f, 0xf3, 0x15,
- 0x3, 0xff, 0x98, 0x92, 0xff, 0x90, 0x1f, 0xf1,
- 0x1f, 0xf2, 0x40, 0x3f, 0xf8, 0x8b, 0x5b, 0xc4,
- 0xf, 0xfe, 0x31, 0x4b, 0x98, 0x1f, 0xff, 0xf0,
- 0x3f, 0xff, 0xe0, 0x7f, 0xff, 0xc0, 0xff, 0xff,
- 0x81, 0xff, 0xd4, 0x40, 0x7f, 0xf1, 0x10, 0x1d,
- 0xc5, 0xff, 0xff, 0x88, 0x7, 0x95, 0x20, 0x7f,
- 0xf2, 0xd6, 0xff, 0xfa, 0x1, 0xff, 0xe5, 0xe0,
- 0x7d, 0xa3, 0x7f, 0xfc, 0x28, 0xc0, 0xf8,
-
- /* U+F0C7 "" */
- 0xa, 0x4f, 0xfe, 0x1b, 0x20, 0x79, 0xd6, 0xff,
- 0xf8, 0x73, 0x20, 0x3a, 0x1, 0xff, 0xc6, 0xa8,
- 0xf, 0xfe, 0x65, 0x40, 0x79, 0xff, 0xff, 0xc1,
- 0x20, 0x55, 0x1, 0xff, 0xc7, 0x60, 0x6a, 0x40,
- 0xff, 0xe6, 0x60, 0x3f, 0xf9, 0xa4, 0xf, 0xfe,
- 0x63, 0x3, 0xff, 0xa0, 0x9b, 0xff, 0xe0, 0xa0,
- 0x3f, 0xc6, 0x4f, 0xfe, 0x8, 0x1f, 0xff, 0x87,
- 0xbd, 0x3, 0xff, 0x91, 0x20, 0x85, 0x80, 0xff,
- 0xe3, 0xb0, 0x31, 0x40, 0x7f, 0xf1, 0x48, 0x1e,
- 0x20, 0x7f, 0xf1, 0x48, 0x1f, 0xfc, 0xd2, 0x7,
- 0x30, 0x3f, 0xf8, 0xdc, 0xd, 0x0, 0xff, 0xe3,
- 0x9f, 0x66, 0x60, 0x7f, 0xf2, 0x53, 0x20, 0x7f,
- 0x9a, 0x3, 0xff, 0x96, 0x6a, 0x3, 0xff, 0x90,
- 0x70,
-
- /* U+F0E7 "" */
- 0x2, 0x96, 0xfe, 0x80, 0x7e, 0x2d, 0x2f, 0xcc,
- 0x81, 0xf2, 0x3, 0xfc, 0x40, 0xfb, 0x81, 0xfc,
- 0x80, 0xfc, 0x40, 0xfe, 0xe0, 0x7e, 0x60, 0x7f,
- 0x20, 0x3f, 0x10, 0x3f, 0x20, 0x3f, 0xf8, 0xd8,
- 0xf, 0xc4, 0xf, 0xe6, 0x7, 0xe6, 0x7, 0xf7,
- 0xfe, 0xc4, 0x10, 0x3f, 0xf8, 0x65, 0xe, 0x7,
- 0xff, 0x11, 0x82, 0x7, 0xff, 0xe, 0x0, 0x60,
- 0x7f, 0xf0, 0x8b, 0x0, 0x40, 0xff, 0xe1, 0x40,
- 0x24, 0x7, 0xff, 0x5, 0x20, 0x15, 0xff, 0xd4,
- 0xf, 0x40, 0x3f, 0xec, 0x7, 0x32, 0x7, 0xfc,
- 0x80, 0xe8, 0x7, 0xff, 0x0, 0x81, 0xa0, 0x1f,
- 0xfc, 0x2, 0x6, 0x2c, 0xf, 0xfe, 0x2, 0x3,
- 0x40, 0x3f, 0xf8, 0x38, 0x9, 0x20, 0x1f, 0xfc,
- 0x14, 0x5, 0x0, 0xff, 0xe0, 0x90, 0x26, 0x40,
- 0xff, 0xe0, 0xa0, 0x28, 0x7, 0xff, 0xb, 0x0,
- 0x80, 0x7f, 0xf0, 0xc8, 0x2c, 0xf, 0xfe, 0x1c,
- 0xd8, 0x7, 0xf8,
-
- /* U+F0EA "" */
- 0x3, 0xf2, 0x20, 0x7f, 0xf2, 0x5f, 0xbb, 0x90,
- 0x3f, 0xf8, 0x2a, 0x4f, 0x1, 0xb4, 0x9c, 0x7,
- 0xea, 0xdf, 0x5, 0xf8, 0x3, 0x7d, 0x0, 0xff,
- 0xe6, 0x10, 0x3f, 0xf8, 0x4b, 0xf0, 0x1f, 0xfe,
- 0x43, 0x2d, 0xfa, 0x1, 0xff, 0xc2, 0x59, 0xa5,
- 0xf1, 0x3, 0xff, 0x85, 0x5, 0xff, 0xea, 0x33,
- 0x3, 0xfe, 0x21, 0x1, 0xfc, 0x63, 0x3, 0xff,
- 0x99, 0x18, 0x1f, 0xfc, 0xc8, 0xc0, 0xff, 0xe6,
- 0x42, 0x7, 0xff, 0x1e, 0xde, 0x20, 0x7f, 0xf1,
- 0x50, 0x4b, 0x80, 0xff, 0xe3, 0xff, 0xe4, 0x7,
- 0xff, 0xfc, 0xf, 0xff, 0x32, 0x3, 0xff, 0x99,
- 0x7f, 0xf0, 0x1f, 0xff, 0xf0, 0x3f, 0xfb, 0xcc,
- 0xf, 0xef, 0x6f, 0xff, 0x7, 0x10,
-
- /* U+F0F3 "" */
- 0x3, 0xfe, 0x74, 0x81, 0xff, 0xc9, 0x51, 0x70,
- 0x3f, 0xf9, 0x24, 0x1, 0x3, 0xff, 0x8e, 0x65,
- 0x2, 0xa8, 0xf, 0xfe, 0x24, 0xcc, 0x81, 0x2b,
- 0x90, 0x1f, 0xfc, 0x1c, 0xc0, 0xfc, 0x6a, 0x3,
- 0xfe, 0xc4, 0xf, 0xfa, 0xa0, 0x3f, 0x99, 0x3,
- 0xff, 0x83, 0x0, 0xfe, 0x80, 0x7f, 0xf0, 0x8a,
- 0x3, 0xe2, 0x7, 0xff, 0x13, 0x81, 0xf2, 0x3,
- 0xff, 0x88, 0xc0, 0xff, 0xe6, 0x10, 0x3e, 0xe0,
- 0x7f, 0xf9, 0x50, 0x1f, 0xfc, 0x54, 0x7, 0x88,
- 0x1f, 0xfc, 0x52, 0x7, 0x10, 0x3f, 0xf8, 0xd8,
- 0xe, 0xa0, 0x7f, 0xf1, 0x90, 0x18, 0xb0, 0x3f,
- 0xf8, 0xf4, 0xb, 0x1, 0xff, 0xc8, 0x4c, 0x50,
- 0x3f, 0xf9, 0x50, 0xa0, 0x3f, 0xf9, 0x6a, 0x1,
- 0xff, 0xca, 0x2d, 0xbf, 0xff, 0xe5, 0x60, 0x3f,
- 0xfa, 0xc7, 0xff, 0x50, 0x3f, 0xf8, 0xa4, 0xf,
- 0x60, 0x3f, 0xf8, 0xd8, 0xc, 0xd8, 0xf, 0xfe,
- 0x31, 0xf6, 0x68, 0x7, 0xf8,
-
- /* U+F11C "" */
- 0x17, 0xff, 0xfe, 0x82, 0x15, 0x1, 0xff, 0xd0,
- 0xa5, 0x1, 0xff, 0xd2, 0x40, 0x45, 0xb8, 0x3,
- 0x70, 0x6, 0xe0, 0x9, 0xb2, 0x5, 0xb8, 0xb,
- 0x81, 0x29, 0x20, 0x64, 0x88, 0x92, 0x42, 0xc8,
- 0xe2, 0xc9, 0x1, 0xff, 0xe9, 0x60, 0x80, 0x23,
- 0x81, 0xfe, 0x7f, 0xc0, 0xff, 0x11, 0xfc, 0x46,
- 0xfd, 0x3, 0xfe, 0x3, 0xfc, 0x4c, 0x4, 0x4c,
- 0x0, 0x98, 0x1, 0x30, 0x1f, 0xfc, 0x1f, 0xb2,
- 0x9, 0xb3, 0x87, 0xb4, 0xe, 0xd2, 0x3, 0xff,
- 0xfe, 0x3e, 0xc8, 0x26, 0xce, 0x1e, 0xd0, 0x3b,
- 0x48, 0xf, 0xfe, 0x1, 0x30, 0x11, 0x30, 0x2,
- 0x60, 0x4, 0xc0, 0x7f, 0x9f, 0xf0, 0x3f, 0xff,
- 0xf0, 0x60, 0x7f, 0xc0, 0x7f, 0xf3, 0x88, 0xe0,
- 0x7f, 0xf7, 0x94, 0x90, 0x32, 0x7f, 0xf0, 0x78,
- 0xb2, 0x40, 0x7c, 0x5b, 0x80, 0x37, 0xff, 0xc1,
- 0x40, 0xb7, 0x1, 0x74, 0x7, 0xff, 0x49, 0x54,
- 0x7, 0xff, 0x42, 0x90,
-
- /* U+F124 "" */
- 0x3, 0xff, 0x9a, 0x99, 0x3, 0xff, 0x9a, 0xfd,
- 0x99, 0x1, 0xff, 0xca, 0x9e, 0x1, 0xa0, 0x1f,
- 0xfc, 0x73, 0x3b, 0x3, 0xc4, 0xf, 0xfe, 0x29,
- 0xb9, 0x81, 0xf9, 0x81, 0xff, 0xc3, 0x5b, 0x10,
- 0x1f, 0xea, 0x7, 0xff, 0x5, 0xea, 0x40, 0xff,
- 0x91, 0x3, 0xfe, 0x7e, 0x10, 0x3f, 0xf8, 0x30,
- 0xf, 0xf4, 0xf0, 0xf, 0xfe, 0x19, 0x20, 0x3e,
- 0x37, 0xb0, 0x3f, 0xf8, 0xb0, 0xf, 0x2b, 0x90,
- 0x1f, 0xfc, 0x62, 0x80, 0xeb, 0x48, 0xf, 0xfe,
- 0x45, 0x3, 0xaa, 0x3, 0xff, 0x94, 0xc0, 0xe4,
- 0x7, 0xff, 0x2a, 0x1, 0xe2, 0x7, 0xff, 0x29,
- 0x81, 0xe8, 0x7, 0xff, 0x25, 0x81, 0xf2, 0xfa,
- 0xdf, 0xe2, 0x7, 0xf5, 0x3, 0xf8, 0xa5, 0xfc,
- 0x7, 0xf2, 0x20, 0x7f, 0xf4, 0x20, 0x1f, 0xfd,
- 0x4, 0x40, 0xff, 0xe8, 0x70, 0x3f, 0xfa, 0x5,
- 0x1, 0xff, 0xd0, 0x80, 0x7f, 0xf4, 0x50, 0x1f,
- 0xfd, 0x8, 0x7, 0xff, 0x2d, 0x81, 0xcc, 0xf,
- 0xfe, 0x83, 0x3, 0xff, 0x99, 0x0, 0x8c, 0x3,
- 0xff, 0x98, 0x7c, 0x8c, 0x7, 0xff, 0x0,
-
- /* U+F15B "" */
- 0x9, 0x7f, 0xc0, 0x8, 0x1e, 0xd6, 0xff, 0xc8,
- 0x6a, 0x7, 0x10, 0x3f, 0xf8, 0x4a, 0x81, 0xff,
- 0xc8, 0x54, 0xf, 0xfe, 0x42, 0xa0, 0x7f, 0xf2,
- 0x15, 0x3, 0xff, 0x90, 0xa0, 0x1f, 0xfc, 0x24,
- 0xbc, 0x40, 0xff, 0xe0, 0x61, 0x6f, 0xc0, 0x7f,
- 0xf0, 0x1f, 0xff, 0x80, 0xff, 0xff, 0x81, 0xff,
- 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc, 0xf,
- 0xff, 0x69, 0x3, 0xff, 0x8e, 0x75, 0xbf, 0xfc,
- 0x7c,
-
- /* U+F1EB "" */
- 0x3, 0xff, 0xc6, 0x5c, 0xb5, 0xad, 0x46, 0x40,
- 0xff, 0xe4, 0x17, 0xbe, 0x8d, 0x21, 0x48, 0xe6,
- 0xf9, 0x90, 0x3f, 0xf8, 0x46, 0xe8, 0x40, 0xff,
- 0xe0, 0x99, 0xa9, 0x3, 0xfc, 0x76, 0x20, 0x3f,
- 0xf8, 0xeb, 0x61, 0x3, 0xe9, 0x88, 0x1f, 0x8a,
- 0x5c, 0x40, 0xfc, 0x74, 0x3, 0xb3, 0x3, 0xc6,
- 0x6f, 0xad, 0xed, 0xf4, 0x20, 0x79, 0xe0, 0x7,
- 0x90, 0x39, 0xec, 0x64, 0xf, 0xe2, 0xf6, 0x30,
- 0x38, 0xf3, 0x80, 0xe5, 0xa1, 0x3, 0xff, 0x86,
- 0x66, 0x40, 0x76, 0x80, 0x69, 0x48, 0x1f, 0xfc,
- 0x73, 0x60, 0x1a, 0x38, 0x3, 0x30, 0x3c, 0xa5,
- 0xff, 0x6b, 0x10, 0x1e, 0x78, 0x88, 0xc3, 0xbc,
- 0x81, 0xd3, 0xd6, 0x80, 0xc5, 0x3b, 0xe0, 0x1c,
- 0x75, 0x60, 0x48, 0xe, 0x7d, 0x81, 0xff, 0xc1,
- 0x7d, 0x81, 0xc8, 0xf, 0xeb, 0x0, 0xff, 0xe2,
- 0xca, 0x7, 0xff, 0x6, 0xa0, 0x3c, 0x5c, 0x93,
- 0x20, 0x79, 0x60, 0x3f, 0xf8, 0x4, 0xe, 0x9f,
- 0x46, 0xe9, 0xbc, 0x3, 0x90, 0x1f, 0xfc, 0x8,
- 0xc0, 0x3e, 0xc0, 0xfe, 0x7d, 0x80, 0x70, 0xf,
- 0xfe, 0xc, 0x8b, 0x0, 0xff, 0xe0, 0xcb, 0x20,
- 0xf, 0xfe, 0x1b, 0x40, 0x7f, 0xf0, 0xd3, 0x3,
- 0xff, 0x96, 0xff, 0x98, 0x1f, 0xfd, 0x17, 0x0,
- 0xa3, 0x3, 0xff, 0xa1, 0x0, 0xe8, 0x7, 0xff,
- 0xcc, 0x81, 0xc4, 0xf, 0xfe, 0x84, 0x3, 0xa0,
- 0x1f, 0xfd, 0x5, 0x91, 0x59, 0x1, 0xff, 0xc2,
-
- /* U+F240 "" */
- 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
- 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
- 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
- 0x68, 0x7, 0xff, 0x59, 0x81, 0xdb, 0xff, 0xfe,
- 0x50, 0x1f, 0xfd, 0x86, 0xc4, 0xf, 0xfe, 0xa1,
- 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
- 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0x7f, 0xff, 0xca,
- 0x3, 0xfc, 0x5b, 0xff, 0xe6, 0xe0, 0x25, 0x80,
- 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3, 0xff,
- 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2, 0xbf,
- 0xff, 0xf4, 0x71, 0x0,
-
- /* U+F241 "" */
- 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
- 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
- 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
- 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xff, 0xf1,
- 0x60, 0x1f, 0xfd, 0xd6, 0xc4, 0xf, 0xfe, 0xa1,
- 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
- 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0xff, 0xfe, 0x2c,
- 0x3, 0xff, 0x86, 0x5b, 0xff, 0xe6, 0xe0, 0x25,
- 0x80, 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3,
- 0xff, 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2,
- 0xbf, 0xff, 0xf4, 0x71, 0x0,
-
- /* U+F242 "" */
- 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
- 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
- 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
- 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xff, 0xf0,
- 0x10, 0x1f, 0xfe, 0x26, 0xc4, 0xf, 0xfe, 0xa1,
- 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
- 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0xff, 0xfe, 0x2,
- 0x3, 0xff, 0x90, 0x5b, 0xff, 0xe6, 0xe0, 0x25,
- 0x80, 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3,
- 0xff, 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2,
- 0xbf, 0xff, 0xf4, 0x71, 0x0,
-
- /* U+F243 "" */
- 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
- 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
- 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
- 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xfc, 0x7,
- 0xff, 0xa1, 0xb1, 0x3, 0xff, 0xa8, 0x62, 0x3,
- 0xff, 0xfe, 0x7, 0xff, 0x3c, 0xf6, 0x7, 0xff,
- 0x51, 0x81, 0xfe, 0xff, 0xe0, 0x3f, 0xf9, 0xc5,
- 0xbf, 0xfe, 0x6e, 0x2, 0x58, 0x9, 0x49, 0xff,
- 0xcd, 0x60, 0x50, 0xa0, 0x3f, 0xfa, 0x84, 0x54,
- 0x7, 0xff, 0x44, 0xe0, 0x2b, 0xff, 0xff, 0x47,
- 0x10, 0x0,
-
- /* U+F244 "" */
- 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
- 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
- 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
- 0x68, 0x7, 0xff, 0x59, 0x81, 0xff, 0xf4, 0x6c,
- 0x40, 0xff, 0xea, 0x18, 0x80, 0xff, 0xff, 0x81,
- 0xff, 0xcf, 0x3d, 0x81, 0xff, 0xd4, 0x60, 0x7f,
- 0xf7, 0xcb, 0x7f, 0xfc, 0xdc, 0x4, 0xb0, 0x12,
- 0x93, 0xff, 0x9a, 0xc0, 0xa1, 0x40, 0x7f, 0xf5,
- 0x8, 0xa8, 0xf, 0xfe, 0x89, 0xc0, 0x57, 0xff,
- 0xfe, 0x8e, 0x20, 0x0,
-
- /* U+F287 "" */
- 0x3, 0xff, 0xd4, 0xbf, 0x90, 0x1f, 0xfd, 0x12,
- 0x54, 0xa, 0x81, 0xff, 0xcf, 0xbf, 0x60, 0x1c,
- 0x80, 0xff, 0xe6, 0xd4, 0x9, 0x1, 0xff, 0xd2,
- 0x48, 0x3e, 0xc2, 0x4, 0x50, 0x1f, 0xfc, 0xc8,
- 0x28, 0x16, 0x8a, 0x60, 0x3f, 0xf8, 0x84, 0xf,
- 0x91, 0x24, 0x6, 0x75, 0x81, 0xff, 0xc3, 0x5f,
- 0x7c, 0x40, 0xd0, 0x40, 0x3f, 0xf8, 0x6d, 0x1,
- 0xca, 0x81, 0x1c, 0x4, 0x88, 0x40, 0x7f, 0xf0,
- 0xed, 0x88, 0x14, 0x3, 0xd4, 0xaa, 0x1a, 0x5f,
- 0xfc, 0x40, 0xb, 0x30, 0x4, 0xf, 0x2d, 0x40,
- 0x3b, 0x7f, 0xf8, 0x84, 0xa, 0x60, 0x3f, 0x92,
- 0xe2, 0x0, 0xa5, 0xff, 0xc0, 0x3, 0xa0, 0x60,
- 0x7a, 0xdf, 0x66, 0x1d, 0xbf, 0xfc, 0x2, 0x1,
- 0xf4, 0x22, 0x3, 0x34, 0x7, 0xa0, 0x44, 0xf,
- 0xfe, 0x2, 0xd0, 0xd, 0x69, 0xcd, 0x0, 0xfd,
- 0x4, 0x3, 0xfe, 0xd4, 0x81, 0xe5, 0x19, 0x3,
- 0xf9, 0x84, 0x40, 0x3d, 0xb8, 0x81, 0xff, 0xcc,
- 0x63, 0x80, 0xe4, 0xf3, 0x3, 0xff, 0x99, 0x9,
- 0x7c, 0xc0, 0xff, 0xe9, 0xe4, 0x8, 0x1f, 0xfd,
- 0x5b, 0xf9, 0x81, 0xff, 0xfb, 0x9f, 0xf2, 0x3,
- 0xf0,
-
- /* U+F293 "" */
- 0x3, 0xfc, 0x51, 0x20, 0x3f, 0xf8, 0x46, 0xfe,
- 0xd7, 0x67, 0xa8, 0xf, 0xf5, 0xc8, 0xf, 0x95,
- 0xc0, 0x7e, 0xc8, 0xc, 0x60, 0x1c, 0x70, 0x1e,
- 0xa4, 0xf, 0x36, 0x3, 0x8e, 0x3, 0x24, 0x3,
- 0xf4, 0x60, 0x71, 0x40, 0x50, 0xf, 0xf4, 0x40,
- 0x77, 0x0, 0x48, 0xf, 0xfa, 0xa0, 0x32, 0x0,
- 0x80, 0xc8, 0xe, 0x30, 0x52, 0x6, 0x43, 0x1,
- 0x3b, 0x80, 0xe7, 0x6, 0x20, 0x58, 0x30, 0x24,
- 0xe, 0x3, 0x88, 0x1e, 0x20, 0x81, 0x1c, 0xe,
- 0x60, 0x15, 0x14, 0x81, 0x30, 0x3c, 0x70, 0x34,
- 0x1a, 0x22, 0x3, 0xff, 0x80, 0x70, 0x1c, 0xd8,
- 0xe, 0x20, 0x7e, 0x38, 0x9, 0x40, 0x3f, 0xf8,
- 0x8c, 0x9, 0x81, 0xff, 0xc4, 0x54, 0x8, 0xe0,
- 0x3c, 0x40, 0xf9, 0x50, 0x40, 0x8d, 0x3, 0xff,
- 0x80, 0xa8, 0x5c, 0x1c, 0x15, 0x3, 0xc4, 0x9,
- 0x50, 0xa8, 0x11, 0xc1, 0x40, 0x26, 0x10, 0x1c,
- 0xa8, 0x1d, 0x40, 0x50, 0x2c, 0x30, 0x12, 0xd4,
- 0xe, 0x8c, 0x62, 0x4, 0x42, 0x3, 0x10, 0x38,
- 0xb1, 0x88, 0x19, 0x0, 0x40, 0x7f, 0xd8, 0x81,
- 0x90, 0x14, 0x3, 0xfd, 0x88, 0x1d, 0x0, 0x8c,
- 0x3, 0xf6, 0x20, 0x73, 0x20, 0x67, 0x0, 0xe3,
- 0x88, 0x1c, 0xa0, 0x1e, 0x79, 0x1, 0x88, 0x1d,
- 0x28, 0x1f, 0x8d, 0xf5, 0xa5, 0x9d, 0xec, 0xc,
-
- /* U+F2ED "" */
- 0x3, 0xf9, 0x2f, 0x10, 0x3f, 0xf8, 0xbe, 0xdf,
- 0x68, 0x7, 0xe5, 0x27, 0xb0, 0x1f, 0x9c, 0x9f,
- 0xa, 0xdf, 0x88, 0x1f, 0xcd, 0xfe, 0x3, 0xff,
- 0x99, 0xd0, 0x1f, 0xfc, 0xbd, 0x7f, 0xff, 0xe5,
- 0xa0, 0x64, 0xff, 0xe4, 0x30, 0x26, 0xff, 0xf9,
- 0x34, 0xf, 0xff, 0x75, 0xa0, 0x27, 0x80, 0x8f,
- 0x20, 0x7f, 0xf0, 0x1b, 0x1, 0x72, 0x4, 0xc3,
- 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc, 0xf, 0xff,
- 0xf8, 0x1f, 0xff, 0x26, 0xc0, 0x5c, 0x81, 0x30,
- 0xc0, 0xf9, 0x81, 0xad, 0x1, 0x3c, 0x4, 0x79,
- 0x2, 0x60, 0x7f, 0xf4, 0xb, 0x3, 0xff, 0x8f,
- 0x0, 0xd2, 0xc6, 0xff, 0xf8, 0x73, 0x90, 0x0,
-
- /* U+F304 "" */
- 0x3, 0xff, 0x94, 0xd8, 0xf, 0xfe, 0x69, 0xd2,
- 0x39, 0x3, 0xff, 0x94, 0x71, 0x2, 0xc4, 0xf,
- 0xfe, 0x41, 0xc0, 0x7b, 0x10, 0x3f, 0xf8, 0xf4,
- 0xf, 0xd8, 0x81, 0xff, 0xc6, 0x88, 0xf, 0xdc,
- 0xf, 0xfe, 0x19, 0xf8, 0x54, 0x7, 0xc4, 0xf,
- 0xfe, 0x11, 0xc0, 0xe1, 0x50, 0x1e, 0x40, 0x7f,
- 0xf0, 0x4e, 0x2, 0x38, 0x54, 0x7, 0x50, 0x3f,
- 0xf8, 0x7, 0x1, 0xc7, 0xa, 0x80, 0xb0, 0x1f,
- 0xfc, 0x3, 0x80, 0xf8, 0xe1, 0x50, 0xc4, 0xf,
- 0xf8, 0xe0, 0x3f, 0x8e, 0x17, 0x90, 0x3f, 0xe3,
- 0x80, 0xff, 0x8d, 0x3, 0xff, 0x82, 0x70, 0x1f,
- 0xfc, 0x18, 0x7, 0xff, 0x0, 0xe0, 0x3f, 0xf8,
- 0x38, 0x81, 0xff, 0x1c, 0x7, 0xff, 0x7, 0x10,
- 0x3f, 0xe3, 0x80, 0xff, 0xe0, 0xe2, 0x7, 0xfc,
- 0x70, 0x1f, 0xfc, 0x1c, 0x40, 0xff, 0x8e, 0x3,
- 0xff, 0x83, 0x88, 0x1f, 0xf1, 0xc0, 0x7f, 0xf0,
- 0x71, 0x3, 0xff, 0x81, 0x80, 0xff, 0xe0, 0xe2,
- 0x7, 0xff, 0x1, 0x1, 0xff, 0xc1, 0xc4, 0xf,
- 0xfe, 0x9, 0x3, 0xff, 0x81, 0x88, 0x1f, 0xfc,
- 0x2e, 0x7, 0xfd, 0x88, 0x1f, 0xfc, 0x32, 0x7,
- 0xfb, 0x10, 0x3f, 0xf8, 0x8c, 0xf, 0xec, 0x40,
- 0xff, 0xe2, 0x90, 0x3f, 0x62, 0x7, 0xff, 0x34,
- 0xe2, 0x7, 0xff, 0x1f, 0x48, 0xbb, 0xf6, 0x20,
- 0x7f, 0xf1, 0xc0,
-
- /* U+F55A "" */
- 0x3, 0xfa, 0x7f, 0xff, 0xca, 0xc8, 0xf, 0xea,
- 0xc0, 0xff, 0xe5, 0x1a, 0x80, 0xfa, 0xa0, 0x3f,
- 0xf9, 0xb0, 0xf, 0x54, 0x7, 0xff, 0x38, 0x81,
- 0xd5, 0x1, 0xfc, 0xd8, 0xf, 0x36, 0x3, 0xff,
- 0x83, 0x50, 0x1f, 0xce, 0x43, 0x3, 0x39, 0x20,
- 0x3f, 0xea, 0x80, 0xff, 0x40, 0x11, 0x80, 0x70,
- 0x3, 0x3, 0xfd, 0x50, 0x1f, 0xf4, 0x2, 0x8d,
- 0xa0, 0x14, 0x3, 0xfa, 0xa0, 0x3f, 0xf8, 0xe,
- 0x1, 0x48, 0x2, 0x8c, 0xf, 0xd5, 0x1, 0xff,
- 0xc2, 0x70, 0xf, 0x46, 0x7, 0xf2, 0x3, 0xff,
- 0x88, 0xd0, 0x19, 0x30, 0x3f, 0xc8, 0xf, 0xfe,
- 0x23, 0x40, 0x64, 0xc0, 0xff, 0x54, 0x7, 0xff,
- 0x9, 0xc0, 0x3d, 0x18, 0x1f, 0xea, 0x80, 0xff,
- 0xe0, 0x38, 0x5, 0x20, 0xa, 0x30, 0x3f, 0xd5,
- 0x1, 0xff, 0x40, 0x28, 0xda, 0x1, 0x40, 0x3f,
- 0xea, 0x80, 0xff, 0x40, 0x11, 0x80, 0x70, 0x4,
- 0x3, 0xff, 0x81, 0x50, 0x1f, 0xce, 0x43, 0x3,
- 0x39, 0xc, 0xf, 0xfe, 0xd, 0x40, 0x7f, 0x36,
- 0x3, 0xcd, 0x80, 0xff, 0xe1, 0xd4, 0x7, 0xff,
- 0x38, 0x81, 0xf5, 0x40, 0x7f, 0xf3, 0x60, 0x1f,
- 0xab, 0x3, 0xff, 0x94, 0x6a,
-
- /* U+F7C2 "" */
- 0x3, 0xe7, 0x27, 0xf3, 0x40, 0x7e, 0xd1, 0xbf,
- 0xe9, 0x70, 0x1c, 0x71, 0x3, 0xff, 0x80, 0x68,
- 0x11, 0xc4, 0xf, 0xfe, 0x12, 0x0, 0x70, 0xd,
- 0xf8, 0x2f, 0xc0, 0xfe, 0x60, 0x63, 0x80, 0xff,
- 0xe3, 0x1c, 0x7, 0xff, 0x1f, 0x1, 0xff, 0xe3,
- 0xdf, 0x82, 0xfc, 0xf, 0xe6, 0x7, 0xff, 0xfc,
- 0xf, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff,
- 0xe0, 0x7f, 0xf6, 0xd8, 0x1f, 0xfc, 0x77, 0x10,
- 0x1f, 0xfc, 0x57, 0x5, 0xd6, 0xff, 0xf0, 0xf4,
- 0x0,
-
- /* U+F8A2 "" */
- 0x3, 0xff, 0x9e, 0x80, 0xff, 0xe7, 0xca, 0x7,
- 0xff, 0x3a, 0x30, 0x3f, 0xf9, 0xd1, 0x81, 0xfc,
- 0xb2, 0x3, 0xff, 0x84, 0x58, 0x1f, 0xce, 0x98,
- 0x7, 0xff, 0x9, 0x81, 0xfd, 0x20, 0xf, 0xfe,
- 0x74, 0x60, 0x7f, 0xf3, 0xab, 0x3, 0xff, 0x9d,
- 0x50, 0x1c, 0x7f, 0xff, 0xe1, 0x50, 0x3a, 0xa0,
- 0x3f, 0xf9, 0xec, 0xf, 0xfe, 0x87, 0x3, 0xff,
- 0xa0, 0x79, 0x3, 0xd6, 0xff, 0xf1, 0xb8, 0x16,
- 0x20, 0x62, 0x97, 0xff, 0x18, 0xe, 0xc4, 0xf,
- 0xfe, 0x86, 0x40, 0x7f, 0xf4, 0x2a, 0x8, 0xf,
- 0xfe, 0x75, 0xf0, 0xf, 0xfe, 0x40
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 111, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 115, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 18, .adv_w = 143, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
- {.bitmap_index = 32, .adv_w = 279, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 128, .adv_w = 252, .box_w = 14, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 236, .adv_w = 328, .box_w = 19, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 352, .adv_w = 278, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 463, .adv_w = 78, .box_w = 3, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
- {.bitmap_index = 469, .adv_w = 153, .box_w = 9, .box_h = 30, .ofs_x = 1, .ofs_y = -7},
- {.bitmap_index = 543, .adv_w = 156, .box_w = 8, .box_h = 30, .ofs_x = 0, .ofs_y = -7},
- {.bitmap_index = 612, .adv_w = 193, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 655, .adv_w = 254, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 684, .adv_w = 88, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 696, .adv_w = 124, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 702, .adv_w = 118, .box_w = 5, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 708, .adv_w = 185, .box_w = 11, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 772, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 852, .adv_w = 252, .box_w = 8, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 874, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 953, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1036, .adv_w = 252, .box_w = 16, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1103, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1182, .adv_w = 251, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1271, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1339, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1438, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1522, .adv_w = 109, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1535, .adv_w = 95, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 1558, .adv_w = 228, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 1608, .adv_w = 246, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 5},
- {.bitmap_index = 1629, .adv_w = 234, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 1682, .adv_w = 212, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1749, .adv_w = 402, .box_w = 23, .box_h = 26, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 1936, .adv_w = 292, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2041, .adv_w = 279, .box_w = 14, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2116, .adv_w = 292, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2204, .adv_w = 294, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2272, .adv_w = 255, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2306, .adv_w = 248, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2335, .adv_w = 305, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2433, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2459, .adv_w = 122, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2464, .adv_w = 247, .box_w = 14, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2507, .adv_w = 281, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2593, .adv_w = 241, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2611, .adv_w = 391, .box_w = 21, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2724, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2806, .adv_w = 308, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2905, .adv_w = 283, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2962, .adv_w = 308, .box_w = 17, .box_h = 24, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 3087, .adv_w = 276, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 3164, .adv_w = 266, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3261, .adv_w = 267, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3288, .adv_w = 291, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3334, .adv_w = 285, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3441, .adv_w = 397, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3602, .adv_w = 281, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3707, .adv_w = 269, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3782, .adv_w = 268, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3857, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 3871, .adv_w = 184, .box_w = 12, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 3938, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 3954, .adv_w = 187, .box_w = 11, .box_h = 10, .ofs_x = 0, .ofs_y = 10},
- {.bitmap_index = 3991, .adv_w = 202, .box_w = 13, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4000, .adv_w = 138, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 17},
- {.bitmap_index = 4010, .adv_w = 244, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4077, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4146, .adv_w = 235, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4207, .adv_w = 253, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4273, .adv_w = 237, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4336, .adv_w = 156, .box_w = 10, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4370, .adv_w = 251, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 4460, .adv_w = 247, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4496, .adv_w = 109, .box_w = 4, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4508, .adv_w = 107, .box_w = 6, .box_h = 26, .ofs_x = -1, .ofs_y = -6},
- {.bitmap_index = 4534, .adv_w = 227, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4596, .adv_w = 109, .box_w = 3, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4600, .adv_w = 393, .box_w = 22, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4655, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4688, .adv_w = 256, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4757, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 4827, .adv_w = 255, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 4894, .adv_w = 152, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4915, .adv_w = 231, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4985, .adv_w = 146, .box_w = 9, .box_h = 19, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5017, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5047, .adv_w = 217, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5114, .adv_w = 337, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5222, .adv_w = 222, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5292, .adv_w = 212, .box_w = 13, .box_h = 21, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 5377, .adv_w = 222, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5426, .adv_w = 152, .box_w = 10, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 5493, .adv_w = 109, .box_w = 3, .box_h = 24, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 5499, .adv_w = 152, .box_w = 9, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 5567, .adv_w = 305, .box_w = 17, .box_h = 6, .ofs_x = 1, .ofs_y = 5},
- {.bitmap_index = 5602, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 5739, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5876, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5972, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6105, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6221, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 6419, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 6592, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6758, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 6887, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7012, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7206, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 7258, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 7354, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7568, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7674, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
- {.bitmap_index = 7767, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7888, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7952, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7995, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
- {.bitmap_index = 8088, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2},
- {.bitmap_index = 8200, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8305, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8409, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8483, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 8512, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8700, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 8960, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 9148, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9326, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 9423, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 9523, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9672, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9726, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 9856, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 10028, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10207, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 10294, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10399, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 10530, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 10632, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 10765, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10897, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 11048, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 11113, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 11313, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 11397, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 11482, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 11567, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 11649, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 11725, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 11886, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 12070, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 12166, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 12353, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12518, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 12591, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
- 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
- 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
- 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
- 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
- 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
- 0x8a1
-};
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 95, .glyph_id_start = 1,
- .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
- },
- {
- .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
- }
-};
-
-/*-----------------
- * KERNING
- *----------------*/
-
-
-/*Map glyph_ids to kern left classes*/
-static const uint8_t kern_left_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 0,
- 2, 3, 0, 0, 0, 4, 0, 4,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 7, 8, 9, 10, 11,
- 0, 12, 12, 13, 14, 15, 12, 12,
- 9, 16, 17, 18, 0, 19, 13, 20,
- 21, 22, 23, 24, 25, 0, 0, 0,
- 0, 0, 26, 27, 28, 0, 29, 30,
- 0, 31, 0, 0, 32, 0, 31, 31,
- 33, 27, 0, 34, 0, 35, 0, 36,
- 37, 38, 36, 39, 40, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Map glyph_ids to kern right classes*/
-static const uint8_t kern_right_class_mapping[] =
-{
- 0, 1, 0, 2, 0, 0, 0, 3,
- 2, 0, 4, 5, 0, 6, 7, 6,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 10, 0, 11, 0, 0, 0,
- 11, 0, 0, 12, 0, 0, 0, 0,
- 11, 0, 11, 0, 13, 14, 15, 16,
- 17, 18, 19, 20, 0, 0, 21, 0,
- 0, 0, 22, 0, 23, 23, 23, 24,
- 23, 0, 0, 0, 0, 0, 25, 25,
- 26, 25, 23, 27, 28, 29, 30, 31,
- 32, 33, 31, 34, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
-};
-
-/*Kern values between classes*/
-static const int8_t kern_class_values[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -9, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -23, 0, 0, 0,
- 0, 0, 0, 0, -26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -11, -13, 0, -4, -13, 0, -17, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 0,
- 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -37, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -49, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -26, 0, 0, 0, 0, 0, 0, -13,
- 0, -2, 0, 0, -28, -4, -19, -15,
- 0, -21, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -4, -2, -11, -7, 0,
- 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -6,
- 0, -5, 0, 0, -12, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -6, 0, 0, 0, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- 0, 0, 0, 0, 0, -22, 0, 0,
- 0, -5, 0, 0, 0, -6, 0, -5,
- 0, -5, -9, -5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0,
- 0, -4, -4, 0, -4, 0, 0, 0,
- -4, -6, -5, 0, 0, 0, 0, 0,
- 0, 0, 0, -51, 0, 0, 0, -37,
- 0, -58, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, -7, -5, 0, 0, -5,
- -6, 0, 0, -5, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, -6, 0,
- 0, 0, 4, -6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -14, 0, 0,
- 0, -7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -6, 0, -5,
- -6, 0, 0, 0, -5, -9, -14, 0,
- 0, 0, 0, -73, 0, 0, 0, 0,
- 0, 0, 0, 4, -14, 0, 0, -60,
- -12, -38, -31, 0, -52, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -10,
- -29, -20, 0, 0, 0, 0, 0, 0,
- 0, 0, -71, 0, 0, 0, -30, 0,
- -44, 0, 0, 0, 0, 0, -7, 0,
- -6, 0, -2, -3, 0, 0, -3, 0,
- 0, 3, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -9, 0, -6,
- -4, 0, -8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -17, 0, -4, 0, 0, -10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -9, 0,
- 0, 0, 0, -48, -51, 0, 0, -17,
- -6, -52, -3, 4, 0, 4, 3, 0,
- 4, 0, 0, -25, -22, 0, -24, -22,
- -16, -25, 0, -21, -16, -12, -17, -13,
- 0, 0, 0, 0, 4, 0, -49, -8,
- 0, 0, -16, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, -10, -10,
- 0, 0, -10, -7, 0, 0, -6, -2,
- 0, 0, 0, 4, 0, 0, 0, 3,
- 0, -27, -13, 0, 0, -9, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0,
- 3, -7, -7, 0, 0, -7, -5, 0,
- 0, -4, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, -10, 0, 0,
- 0, -5, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, -6, 0, 0,
- -5, 0, 0, 0, -5, -7, 0, 0,
- 0, 0, 0, 0, -7, 4, -11, -46,
- -11, 0, 0, -21, -6, -21, -3, 4,
- -21, 4, 4, 3, 4, 0, 4, -16,
- -14, -5, -9, -14, -9, -13, -5, -9,
- -4, 0, -5, -7, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, -6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -5, 0, 0, -5, 0,
- 0, 0, -4, -6, -6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -4, 0, 0, -4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -15, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -3, 0, 0, 0, 0, 0, -6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -2, 0, -3, -3,
- 0, 0, -2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -3, 0, 0, 0, 0, 0,
- 4, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, -5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, -23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -30, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, 0,
- -5, -3, 0, 0, 4, 0, 0, 0,
- -27, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -9, -4, 3, 0, -4, 0, 0, 11,
- 0, 4, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, -23, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -3, -3,
- 3, 0, -3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -27, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -4, 0, 0,
- -4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -3, 0, 0, -3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- -4, 0, 0, -4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-/*Collect the kern class' data in one place*/
-static const lv_font_fmt_txt_kern_classes_t kern_classes =
-{
- .class_pair_values = kern_class_values,
- .left_class_mapping = kern_left_class_mapping,
- .right_class_mapping = kern_right_class_mapping,
- .left_class_cnt = 40,
- .right_class_cnt = 35,
-};
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .kern_dsc = &kern_classes,
- .kern_scale = 16,
- .cmap_num = 2,
- .bpp = 3,
- .kern_classes = 1,
- .bitmap_format = 1
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_roboto_28_compressed = {
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .line_height = 32, /*The maximum line height required by the font*/
- .base_line = 7, /*Baseline measured from the bottom of the line*/
- .subpx = LV_FONT_SUBPX_NONE,
- .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
-};
-
-#endif /*#if LV_FONT_ROBOTO_28_COMPRESSED*/
-
diff --git a/src/libs/lvgl/src/lv_font/lv_font_unscii_8.c b/src/libs/lvgl/src/lv_font/lv_font_unscii_8.c
deleted file mode 100644
index 1b96823e..00000000
--- a/src/libs/lvgl/src/lv_font/lv_font_unscii_8.c
+++ /dev/null
@@ -1,462 +0,0 @@
-#include "../../lvgl.h"
-
-/*******************************************************************************
- * Size: 8 px
- * Bpp: 1
- * Opts:
- ******************************************************************************/
-
-#ifndef LV_FONT_UNSCII_8
-#define LV_FONT_UNSCII_8 1
-#endif
-
-#if LV_FONT_UNSCII_8
-
-/*-----------------
- * BITMAPS
- *----------------*/
-
-/*Store the image of the glyphs*/
-static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
- /* U+20 " " */
-
- /* U+21 "!" */
- 0xf2,
-
- /* U+22 "\"" */
- 0x99, 0x90,
-
- /* U+23 "#" */
- 0x49, 0x2f, 0xd2, 0xfd, 0x24, 0x80,
-
- /* U+24 "$" */
- 0x23, 0xe8, 0xe2, 0xf8, 0x80,
-
- /* U+25 "%" */
- 0xc7, 0x21, 0x8, 0x4e, 0x30,
-
- /* U+26 "&" */
- 0x62, 0x49, 0x18, 0x96, 0x27, 0x40,
-
- /* U+27 "'" */
- 0x2a, 0x0,
-
- /* U+28 "(" */
- 0x2a, 0x48, 0x88,
-
- /* U+29 ")" */
- 0x88, 0x92, 0xa0,
-
- /* U+2A "*" */
- 0x25, 0x5c, 0x47, 0x54, 0x80,
-
- /* U+2B "+" */
- 0x21, 0x3e, 0x42, 0x0,
-
- /* U+2C "," */
- 0x58,
-
- /* U+2D "-" */
- 0xf8,
-
- /* U+2E "." */
- 0x80,
-
- /* U+2F "/" */
- 0x2, 0x8, 0x20, 0x82, 0x8, 0x20, 0x0,
-
- /* U+30 "0" */
- 0x74, 0x67, 0x5c, 0xc5, 0xc0,
-
- /* U+31 "1" */
- 0x23, 0x28, 0x42, 0x13, 0xe0,
-
- /* U+32 "2" */
- 0x74, 0x42, 0x26, 0x43, 0xe0,
-
- /* U+33 "3" */
- 0x74, 0x42, 0x60, 0xc5, 0xc0,
-
- /* U+34 "4" */
- 0x11, 0x95, 0x2f, 0x88, 0x40,
-
- /* U+35 "5" */
- 0xfc, 0x3c, 0x10, 0xc5, 0xc0,
-
- /* U+36 "6" */
- 0x3a, 0x21, 0xe8, 0xc5, 0xc0,
-
- /* U+37 "7" */
- 0xf8, 0x44, 0x44, 0x21, 0x0,
-
- /* U+38 "8" */
- 0x74, 0x62, 0xe8, 0xc5, 0xc0,
-
- /* U+39 "9" */
- 0x74, 0x62, 0xf0, 0x8b, 0x80,
-
- /* U+3A ":" */
- 0x90,
-
- /* U+3B ";" */
- 0x41, 0x60,
-
- /* U+3C "<" */
- 0x12, 0x48, 0x42, 0x10,
-
- /* U+3D "=" */
- 0xf8, 0x3e,
-
- /* U+3E ">" */
- 0x84, 0x21, 0x24, 0x80,
-
- /* U+3F "?" */
- 0x7a, 0x10, 0x84, 0x10, 0x1, 0x0,
-
- /* U+40 "@" */
- 0x7a, 0x19, 0x6b, 0x9a, 0x7, 0x80,
-
- /* U+41 "A" */
- 0x31, 0x28, 0x7f, 0x86, 0x18, 0x40,
-
- /* U+42 "B" */
- 0xfa, 0x18, 0x7e, 0x86, 0x1f, 0x80,
-
- /* U+43 "C" */
- 0x7a, 0x18, 0x20, 0x82, 0x17, 0x80,
-
- /* U+44 "D" */
- 0xf2, 0x28, 0x61, 0x86, 0x2f, 0x0,
-
- /* U+45 "E" */
- 0xfe, 0x8, 0x3c, 0x82, 0xf, 0xc0,
-
- /* U+46 "F" */
- 0xfe, 0x8, 0x3c, 0x82, 0x8, 0x0,
-
- /* U+47 "G" */
- 0x7a, 0x18, 0x27, 0x86, 0x17, 0x80,
-
- /* U+48 "H" */
- 0x86, 0x18, 0x7f, 0x86, 0x18, 0x40,
-
- /* U+49 "I" */
- 0xe9, 0x24, 0xb8,
-
- /* U+4A "J" */
- 0x8, 0x42, 0x10, 0xc5, 0xc0,
-
- /* U+4B "K" */
- 0x86, 0x29, 0x38, 0x92, 0x28, 0x40,
-
- /* U+4C "L" */
- 0x82, 0x8, 0x20, 0x82, 0xf, 0xc0,
-
- /* U+4D "M" */
- 0x87, 0x3b, 0x61, 0x86, 0x18, 0x40,
-
- /* U+4E "N" */
- 0x87, 0x1a, 0x65, 0x8e, 0x18, 0x40,
-
- /* U+4F "O" */
- 0x7a, 0x18, 0x61, 0x86, 0x17, 0x80,
-
- /* U+50 "P" */
- 0xfa, 0x18, 0x7e, 0x82, 0x8, 0x0,
-
- /* U+51 "Q" */
- 0x7a, 0x18, 0x61, 0x96, 0x27, 0x40,
-
- /* U+52 "R" */
- 0xfa, 0x18, 0x7e, 0x92, 0x28, 0x40,
-
- /* U+53 "S" */
- 0x7a, 0x18, 0x1e, 0x6, 0x17, 0x80,
-
- /* U+54 "T" */
- 0xf9, 0x8, 0x42, 0x10, 0x80,
-
- /* U+55 "U" */
- 0x86, 0x18, 0x61, 0x86, 0x17, 0x80,
-
- /* U+56 "V" */
- 0x86, 0x18, 0x61, 0x85, 0x23, 0x0,
-
- /* U+57 "W" */
- 0x86, 0x18, 0x61, 0xb7, 0x38, 0x40,
-
- /* U+58 "X" */
- 0x86, 0x14, 0x8c, 0x4a, 0x18, 0x40,
-
- /* U+59 "Y" */
- 0x8c, 0x62, 0xe2, 0x10, 0x80,
-
- /* U+5A "Z" */
- 0xf8, 0x44, 0x44, 0x43, 0xe0,
-
- /* U+5B "[" */
- 0xf2, 0x49, 0x38,
-
- /* U+5C "\\" */
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-
- /* U+5D "]" */
- 0xe4, 0x92, 0x78,
-
- /* U+5E "^" */
- 0x22, 0xa2,
-
- /* U+5F "_" */
- 0xf8,
-
- /* U+60 "`" */
- 0x88, 0x80,
-
- /* U+61 "a" */
- 0x70, 0x5f, 0x17, 0x80,
-
- /* U+62 "b" */
- 0x84, 0x3d, 0x18, 0xc7, 0xc0,
-
- /* U+63 "c" */
- 0x74, 0x61, 0x17, 0x0,
-
- /* U+64 "d" */
- 0x8, 0x5f, 0x18, 0xc5, 0xe0,
-
- /* U+65 "e" */
- 0x74, 0x7f, 0x7, 0x0,
-
- /* U+66 "f" */
- 0x18, 0x92, 0x3e, 0x20, 0x82, 0x0,
-
- /* U+67 "g" */
- 0x7c, 0x62, 0xf0, 0xb8,
-
- /* U+68 "h" */
- 0x84, 0x3d, 0x18, 0xc6, 0x20,
-
- /* U+69 "i" */
- 0x43, 0x24, 0xb8,
-
- /* U+6A "j" */
- 0x10, 0x31, 0x11, 0x96,
-
- /* U+6B "k" */
- 0x84, 0x23, 0x2e, 0x4a, 0x20,
-
- /* U+6C "l" */
- 0xc9, 0x24, 0xb8,
-
- /* U+6D "m" */
- 0xd5, 0x6b, 0x5a, 0x80,
-
- /* U+6E "n" */
- 0xf4, 0x63, 0x18, 0x80,
-
- /* U+6F "o" */
- 0x74, 0x63, 0x17, 0x0,
-
- /* U+70 "p" */
- 0xf4, 0x63, 0xe8, 0x40,
-
- /* U+71 "q" */
- 0x7c, 0x62, 0xf0, 0x84,
-
- /* U+72 "r" */
- 0xbe, 0x21, 0x8, 0x0,
-
- /* U+73 "s" */
- 0x7c, 0x1c, 0x1f, 0x0,
-
- /* U+74 "t" */
- 0x42, 0x3c, 0x84, 0x24, 0xc0,
-
- /* U+75 "u" */
- 0x8c, 0x63, 0x17, 0x0,
-
- /* U+76 "v" */
- 0x8c, 0x62, 0xa2, 0x0,
-
- /* U+77 "w" */
- 0x8d, 0x6b, 0x55, 0x0,
-
- /* U+78 "x" */
- 0x8a, 0x88, 0xa8, 0x80,
-
- /* U+79 "y" */
- 0x8c, 0x62, 0xf0, 0xb8,
-
- /* U+7A "z" */
- 0xf8, 0x88, 0x8f, 0x80,
-
- /* U+7B "{" */
- 0x34, 0x48, 0x44, 0x30,
-
- /* U+7C "|" */
- 0xff,
-
- /* U+7D "}" */
- 0xc2, 0x21, 0x22, 0xc0,
-
- /* U+7E "~" */
- 0x45, 0x44,
-
- /* U+7F "" */
- 0xc1, 0x42, 0xbd, 0x2c, 0x40, 0x81, 0x0
-};
-
-
-/*---------------------
- * GLYPH DESCRIPTION
- *--------------------*/
-
-static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 128, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 128, .box_h = 7, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 1, .adv_w = 128, .box_h = 3, .box_w = 4, .ofs_x = 2, .ofs_y = 3},
- {.bitmap_index = 3, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 9, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 14, .adv_w = 128, .box_h = 6, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 19, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 25, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, .ofs_y = 3},
- {.bitmap_index = 27, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 30, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 33, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 38, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 42, .adv_w = 128, .box_h = 3, .box_w = 2, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 43, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 44, .adv_w = 128, .box_h = 1, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 45, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 52, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 57, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 62, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 67, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 72, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 77, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 82, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 87, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 92, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 97, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 102, .adv_w = 128, .box_h = 4, .box_w = 1, .ofs_x = 3, .ofs_y = 0},
- {.bitmap_index = 103, .adv_w = 128, .box_h = 6, .box_w = 2, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 105, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 109, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 111, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 115, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 121, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 127, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 133, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 139, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 145, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 151, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 157, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 163, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 169, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 175, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 178, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 183, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 189, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 195, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 201, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 207, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 213, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 219, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 225, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 231, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 237, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 242, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 248, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 254, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 260, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 266, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 271, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 276, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 279, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 286, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 289, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 291, .adv_w = 128, .box_h = 1, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 292, .adv_w = 128, .box_h = 3, .box_w = 3, .ofs_x = 2, .ofs_y = 3},
- {.bitmap_index = 294, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 298, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 303, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 307, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 312, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 316, .adv_w = 128, .box_h = 7, .box_w = 6, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 322, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 326, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 331, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 334, .adv_w = 128, .box_h = 8, .box_w = 4, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 338, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 343, .adv_w = 128, .box_h = 7, .box_w = 3, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 346, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 350, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 354, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 358, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 362, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 366, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 370, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 374, .adv_w = 128, .box_h = 7, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 379, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 383, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 387, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 391, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 395, .adv_w = 128, .box_h = 6, .box_w = 5, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 399, .adv_w = 128, .box_h = 5, .box_w = 5, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 403, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 407, .adv_w = 128, .box_h = 8, .box_w = 1, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 408, .adv_w = 128, .box_h = 7, .box_w = 4, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 412, .adv_w = 128, .box_h = 3, .box_w = 5, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 414, .adv_w = 128, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = -1}
-};
-
-/*---------------------
- * CHARACTER MAPPING
- *--------------------*/
-
-
-
-/*Collect the unicode lists and glyph_id offsets*/
-static const lv_font_fmt_txt_cmap_t cmaps[] =
-{
- {
- .range_start = 32, .range_length = 96, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
- }
-};
-
-
-
-/*--------------------
- * ALL CUSTOM DATA
- *--------------------*/
-
-/*Store all the custom data of the font*/
-static lv_font_fmt_txt_dsc_t font_dsc = {
- .glyph_bitmap = gylph_bitmap,
- .glyph_dsc = glyph_dsc,
- .cmaps = cmaps,
- .cmap_num = 1,
- .bpp = 1,
-
- .kern_scale = 0,
- .kern_dsc = NULL,
- .kern_classes = 0,
-};
-
-
-/*-----------------
- * PUBLIC FONT
- *----------------*/
-
-/*Initialize a public general font descriptor*/
-lv_font_t lv_font_unscii_8 = {
- .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
- .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .line_height = 8, /*The maximum line height required by the font*/
- .base_line = 2, /*Baseline measured from the bottom of the line*/
-};
-
-#endif /*#if LV_FONT_UNSCII_8*/
diff --git a/src/libs/lvgl/src/lv_font/lv_symbol_def.h b/src/libs/lvgl/src/lv_font/lv_symbol_def.h
deleted file mode 100644
index 026f4a60..00000000
--- a/src/libs/lvgl/src/lv_font/lv_symbol_def.h
+++ /dev/null
@@ -1,159 +0,0 @@
-#ifndef LV_SYMBOL_DEF_H
-#define LV_SYMBOL_DEF_H
-/* clang-format off */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-/* In the font converter use this list as range:
- 61441, 61448, 61451, 61452, 61453, 61457, 61459, 61461, 61465, 61468,
- 61473, 61478, 61479, 61480, 61502, 61512, 61515, 61516, 61517, 61521,
- 61522, 61523, 61524, 61543, 61544, 61550, 61552, 61553, 61556, 61559,
- 61560, 61561, 61563, 61587, 61589, 61636, 61637, 61639, 61671, 61674,
- 61683, 61724, 61732, 61787, 61931, 62016, 62017, 62018, 62019, 62020,
- 62087, 62099, 62212, 62189, 62810, 63426, 63650
-*/
-
-#define LV_SYMBOL_AUDIO "\xef\x80\x81" /*61441, 0xF001*/
-#define LV_SYMBOL_VIDEO "\xef\x80\x88" /*61448, 0xF008*/
-#define LV_SYMBOL_LIST "\xef\x80\x8b" /*61451, 0xF00B*/
-#define LV_SYMBOL_OK "\xef\x80\x8c" /*61452, 0xF00C*/
-#define LV_SYMBOL_CLOSE "\xef\x80\x8d" /*61453, 0xF00D*/
-#define LV_SYMBOL_POWER "\xef\x80\x91" /*61457, 0xF011*/
-#define LV_SYMBOL_SETTINGS "\xef\x80\x93" /*61459, 0xF013*/
-#define LV_SYMBOL_HOME "\xef\x80\x95" /*61461, 0xF015*/
-#define LV_SYMBOL_DOWNLOAD "\xef\x80\x99" /*61465, 0xF019*/
-#define LV_SYMBOL_DRIVE "\xef\x80\x9c" /*61468, 0xF01C*/
-#define LV_SYMBOL_REFRESH "\xef\x80\xa1" /*61473, 0xF021*/
-#define LV_SYMBOL_MUTE "\xef\x80\xa6" /*61478, 0xF026*/
-#define LV_SYMBOL_VOLUME_MID "\xef\x80\xa7" /*61479, 0xF027*/
-#define LV_SYMBOL_VOLUME_MAX "\xef\x80\xa8" /*61480, 0xF028*/
-#define LV_SYMBOL_IMAGE "\xef\x80\xbe" /*61502, 0xF03E*/
-#define LV_SYMBOL_EDIT "\xef\x8C\x84" /*62212, 0xF304*/
-#define LV_SYMBOL_PREV "\xef\x81\x88" /*61512, 0xF048*/
-#define LV_SYMBOL_PLAY "\xef\x81\x8b" /*61515, 0xF04B*/
-#define LV_SYMBOL_PAUSE "\xef\x81\x8c" /*61516, 0xF04C*/
-#define LV_SYMBOL_STOP "\xef\x81\x8d" /*61517, 0xF04D*/
-#define LV_SYMBOL_NEXT "\xef\x81\x91" /*61521, 0xF051*/
-#define LV_SYMBOL_EJECT "\xef\x81\x92" /*61522, 0xF052*/
-#define LV_SYMBOL_LEFT "\xef\x81\x93" /*61523, 0xF053*/
-#define LV_SYMBOL_RIGHT "\xef\x81\x94" /*61524, 0xF054*/
-#define LV_SYMBOL_PLUS "\xef\x81\xa7" /*61543, 0xF067*/
-#define LV_SYMBOL_MINUS "\xef\x81\xa8" /*61544, 0xF068*/
-#define LV_SYMBOL_EYE_OPEN "\xef\x81\xae" /*61550, 0xF06E*/
-#define LV_SYMBOL_EYE_CLOSE "\xef\x81\xb0" /*61552, 0xF070*/
-#define LV_SYMBOL_WARNING "\xef\x81\xb1" /*61553, 0xF071*/
-#define LV_SYMBOL_SHUFFLE "\xef\x81\xb4" /*61556, 0xF074*/
-#define LV_SYMBOL_UP "\xef\x81\xb7" /*61559, 0xF077*/
-#define LV_SYMBOL_DOWN "\xef\x81\xb8" /*61560, 0xF078*/
-#define LV_SYMBOL_LOOP "\xef\x81\xb9" /*61561, 0xF079*/
-#define LV_SYMBOL_DIRECTORY "\xef\x81\xbb" /*61563, 0xF07B*/
-#define LV_SYMBOL_UPLOAD "\xef\x82\x93" /*61587, 0xF093*/
-#define LV_SYMBOL_CALL "\xef\x82\x95" /*61589, 0xF095*/
-#define LV_SYMBOL_CUT "\xef\x83\x84" /*61636, 0xF0C4*/
-#define LV_SYMBOL_COPY "\xef\x83\x85" /*61637, 0xF0C5*/
-#define LV_SYMBOL_SAVE "\xef\x83\x87" /*61639, 0xF0C7*/
-#define LV_SYMBOL_CHARGE "\xef\x83\xa7" /*61671, 0xF0E7*/
-#define LV_SYMBOL_PASTE "\xef\x83\xAA" /*61674, 0xF0EA*/
-#define LV_SYMBOL_BELL "\xef\x83\xb3" /*61683, 0xF0F3*/
-#define LV_SYMBOL_KEYBOARD "\xef\x84\x9c" /*61724, 0xF11C*/
-#define LV_SYMBOL_GPS "\xef\x84\xa4" /*61732, 0xF124*/
-#define LV_SYMBOL_FILE "\xef\x85\x9b" /*61787, 0xF158*/
-#define LV_SYMBOL_WIFI "\xef\x87\xab" /*61931, 0xF1EB*/
-#define LV_SYMBOL_BATTERY_FULL "\xef\x89\x80" /*62016, 0xF240*/
-#define LV_SYMBOL_BATTERY_3 "\xef\x89\x81" /*62017, 0xF241*/
-#define LV_SYMBOL_BATTERY_2 "\xef\x89\x82" /*62018, 0xF242*/
-#define LV_SYMBOL_BATTERY_1 "\xef\x89\x83" /*62019, 0xF243*/
-#define LV_SYMBOL_BATTERY_EMPTY "\xef\x89\x84" /*62020, 0xF244*/
-#define LV_SYMBOL_USB "\xef\x8a\x87" /*62087, 0xF287*/
-#define LV_SYMBOL_BLUETOOTH "\xef\x8a\x93" /*62099, 0xF293*/
-#define LV_SYMBOL_TRASH "\xef\x8B\xAD" /*62189, 0xF2ED*/
-#define LV_SYMBOL_BACKSPACE "\xef\x95\x9A" /*62810, 0xF55A*/
-#define LV_SYMBOL_SD_CARD "\xef\x9F\x82" /*63426, 0xF7C2*/
-#define LV_SYMBOL_NEW_LINE "\xef\xA2\xA2" /*63650, 0xF8A2*/
-
-/** Invalid symbol at (U+F8FF). If written before a string then `lv_img` will show it as a label*/
-#define LV_SYMBOL_DUMMY "\xEF\xA3\xBF"
-
-/*
- * The following list is generated using
- * cat src/lv_misc/lv_symbol_def.h | sed -E -n 's/^#define\s+(LV_SYMBOL_\w+).*"$/ _LV_STR_\1,/p'
- */
-enum {
- _LV_STR_SYMBOL_AUDIO,
- _LV_STR_SYMBOL_VIDEO,
- _LV_STR_SYMBOL_LIST,
- _LV_STR_SYMBOL_OK,
- _LV_STR_SYMBOL_CLOSE,
- _LV_STR_SYMBOL_POWER,
- _LV_STR_SYMBOL_SETTINGS,
- _LV_STR_SYMBOL_HOME,
- _LV_STR_SYMBOL_DOWNLOAD,
- _LV_STR_SYMBOL_DRIVE,
- _LV_STR_SYMBOL_REFRESH,
- _LV_STR_SYMBOL_MUTE,
- _LV_STR_SYMBOL_VOLUME_MID,
- _LV_STR_SYMBOL_VOLUME_MAX,
- _LV_STR_SYMBOL_IMAGE,
- _LV_STR_SYMBOL_EDIT,
- _LV_STR_SYMBOL_PREV,
- _LV_STR_SYMBOL_PLAY,
- _LV_STR_SYMBOL_PAUSE,
- _LV_STR_SYMBOL_STOP,
- _LV_STR_SYMBOL_NEXT,
- _LV_STR_SYMBOL_EJECT,
- _LV_STR_SYMBOL_LEFT,
- _LV_STR_SYMBOL_RIGHT,
- _LV_STR_SYMBOL_PLUS,
- _LV_STR_SYMBOL_MINUS,
- _LV_STR_SYMBOL_EYE_OPEN,
- _LV_STR_SYMBOL_EYE_CLOSE,
- _LV_STR_SYMBOL_WARNING,
- _LV_STR_SYMBOL_SHUFFLE,
- _LV_STR_SYMBOL_UP,
- _LV_STR_SYMBOL_DOWN,
- _LV_STR_SYMBOL_LOOP,
- _LV_STR_SYMBOL_DIRECTORY,
- _LV_STR_SYMBOL_UPLOAD,
- _LV_STR_SYMBOL_CALL,
- _LV_STR_SYMBOL_CUT,
- _LV_STR_SYMBOL_COPY,
- _LV_STR_SYMBOL_SAVE,
- _LV_STR_SYMBOL_CHARGE,
- _LV_STR_SYMBOL_PASTE,
- _LV_STR_SYMBOL_BELL,
- _LV_STR_SYMBOL_KEYBOARD,
- _LV_STR_SYMBOL_GPS,
- _LV_STR_SYMBOL_FILE,
- _LV_STR_SYMBOL_WIFI,
- _LV_STR_SYMBOL_BATTERY_FULL,
- _LV_STR_SYMBOL_BATTERY_3,
- _LV_STR_SYMBOL_BATTERY_2,
- _LV_STR_SYMBOL_BATTERY_1,
- _LV_STR_SYMBOL_BATTERY_EMPTY,
- _LV_STR_SYMBOL_USB,
- _LV_STR_SYMBOL_BLUETOOTH,
- _LV_STR_SYMBOL_TRASH,
- _LV_STR_SYMBOL_BACKSPACE,
- _LV_STR_SYMBOL_SD_CARD,
- _LV_STR_SYMBOL_NEW_LINE,
- _LV_STR_SYMBOL_DUMMY,
-};
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-
-#endif /*LV_SYMBOL_DEF_H*/
-
-
-
-
-
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal.h b/src/libs/lvgl/src/lv_hal/lv_hal.h
deleted file mode 100644
index a5e0a1dd..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file lv_hal.h
- *
- */
-
-#ifndef LV_HAL_H
-#define LV_HAL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_hal_disp.h"
-#include "lv_hal_indev.h"
-#include "lv_hal_tick.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal.mk b/src/libs/lvgl/src/lv_hal/lv_hal.mk
deleted file mode 100644
index 05af078c..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-CSRCS += lv_hal_disp.c
-CSRCS += lv_hal_indev.c
-CSRCS += lv_hal_tick.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_hal
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_hal
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_hal"
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_disp.c b/src/libs/lvgl/src/lv_hal/lv_hal_disp.c
deleted file mode 100644
index e3a275a0..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_disp.c
+++ /dev/null
@@ -1,359 +0,0 @@
-
-/**
- * @file hal_disp.c
- *
- * @description HAL layer for display driver
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdint.h>
-#include <stddef.h>
-#include "lv_hal.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_core/lv_obj.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_disp_t * disp_def;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize a display driver with default values.
- * It is used to surly have known values in the fields ant not memory junk.
- * After it you can set the fields.
- * @param driver pointer to driver variable to initialize
- */
-void lv_disp_drv_init(lv_disp_drv_t * driver)
-{
- memset(driver, 0, sizeof(lv_disp_drv_t));
-
- driver->flush_cb = NULL;
- driver->hor_res = LV_HOR_RES_MAX;
- driver->ver_res = LV_VER_RES_MAX;
- driver->buffer = NULL;
- driver->rotated = 0;
- driver->color_chroma_key = LV_COLOR_TRANSP;
-
-#if LV_ANTIALIAS
- driver->antialiasing = true;
-#endif
-
-#if LV_COLOR_SCREEN_TRANSP
- driver->screen_transp = 1;
-#endif
-
-#if LV_USE_GPU
- driver->gpu_blend_cb = NULL;
- driver->gpu_fill_cb = NULL;
-#endif
-
-#if LV_USE_USER_DATA
- driver->user_data = NULL;
-#endif
-
- driver->set_px_cb = NULL;
-}
-
-/**
- * Initialize a display buffer
- * @param disp_buf pointer `lv_disp_buf_t` variable to initialize
- * @param buf1 A buffer to be used by LittlevGL to draw the image.
- * Always has to specified and can't be NULL.
- * Can be an array allocated by the user. E.g. `static lv_color_t disp_buf1[1024 * 10]`
- * Or a memory address e.g. in external SRAM
- * @param buf2 Optionally specify a second buffer to make image rendering and image flushing
- * (sending to the display) parallel.
- * In the `disp_drv->flush` you should use DMA or similar hardware to send
- * the image to the display in the background.
- * It lets LittlevGL to render next frame into the other buffer while previous is being
- * sent. Set to `NULL` if unused.
- * @param size_in_px_cnt size of the `buf1` and `buf2` in pixel count.
- */
-void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size_in_px_cnt)
-{
- memset(disp_buf, 0, sizeof(lv_disp_buf_t));
-
- disp_buf->buf1 = buf1;
- disp_buf->buf2 = buf2;
- disp_buf->buf_act = disp_buf->buf1;
- disp_buf->size = size_in_px_cnt;
-}
-
-/**
- * Register an initialized display driver.
- * Automatically set the first display as active.
- * @param driver pointer to an initialized 'lv_disp_drv_t' variable (can be local variable)
- * @return pointer to the new display or NULL on error
- */
-lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
-{
- lv_disp_t * disp = lv_ll_ins_head(&LV_GC_ROOT(_lv_disp_ll));
- if(!disp) {
- LV_ASSERT_MEM(disp);
- return NULL;
- }
-
- memcpy(&disp->driver, driver, sizeof(lv_disp_drv_t));
- memset(&disp->inv_area_joined, 0, sizeof(disp->inv_area_joined));
- memset(&disp->inv_areas, 0, sizeof(disp->inv_areas));
- lv_ll_init(&disp->scr_ll, sizeof(lv_obj_t));
- disp->last_activity_time = 0;
-
- if(disp_def == NULL) disp_def = disp;
-
- lv_disp_t * disp_def_tmp = disp_def;
- disp_def = disp; /*Temporarily change the default screen to create the default screens on the
- new display*/
-
- disp->inv_p = 0;
-
- disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
- disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
- disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/
- lv_obj_set_style(disp->top_layer, &lv_style_transp);
- lv_obj_set_style(disp->sys_layer, &lv_style_transp);
-
- lv_obj_invalidate(disp->act_scr);
-
- disp_def = disp_def_tmp; /*Revert the default display*/
-
- /*Create a refresh task*/
- disp->refr_task = lv_task_create(lv_disp_refr_task, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, disp);
- LV_ASSERT_MEM(disp->refr_task);
- if(disp->refr_task == NULL) return NULL;
-
- lv_task_ready(disp->refr_task); /*Be sure the screen will be refreshed immediately on start up*/
-
- return disp;
-}
-
-/**
- * Update the driver in run time.
- * @param disp pointer to a display. (return value of `lv_disp_drv_register`)
- * @param new_drv pointer to the new driver
- */
-void lv_disp_drv_update(lv_disp_t * disp, lv_disp_drv_t * new_drv)
-{
- memcpy(&disp->driver, new_drv, sizeof(lv_disp_drv_t));
-
- lv_obj_t * scr;
- LV_LL_READ(disp->scr_ll, scr)
- {
- lv_obj_set_size(scr, lv_disp_get_hor_res(disp), lv_disp_get_ver_res(disp));
- }
-}
-
-/**
- * Remove a display
- * @param disp pointer to display
- */
-void lv_disp_remove(lv_disp_t * disp)
-{
- bool was_default = false;
- if(disp == lv_disp_get_default()) was_default = true;
-
- /*Detach the input devices */
- lv_indev_t * indev;
- indev = lv_indev_get_next(NULL);
- while(indev) {
- if(indev->driver.disp == disp) {
- indev->driver.disp = NULL;
- }
- indev = lv_indev_get_next(indev);
- }
-
- lv_ll_rem(&LV_GC_ROOT(_lv_disp_ll), disp);
- lv_mem_free(disp);
-
- if(was_default) lv_disp_set_default(lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll)));
-}
-
-/**
- * Set a default screen. The new screens will be created on it by default.
- * @param disp pointer to a display
- */
-void lv_disp_set_default(lv_disp_t * disp)
-{
- disp_def = disp;
-}
-
-/**
- * Get the default display
- * @return pointer to the default display
- */
-lv_disp_t * lv_disp_get_default(void)
-{
- return disp_def;
-}
-
-/**
- * Get the horizontal resolution of a display
- * @param disp pointer to a display (NULL to use the default display)
- * @return the horizontal resolution of the display
- */
-lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)
-{
- if(disp == NULL) disp = lv_disp_get_default();
-
- if(disp == NULL)
- return LV_HOR_RES_MAX;
- else
- return disp->driver.rotated == 0 ? disp->driver.hor_res : disp->driver.ver_res;
-}
-
-/**
- * Get the vertical resolution of a display
- * @param disp pointer to a display (NULL to use the default display)
- * @return the vertical resolution of the display
- */
-lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp)
-{
- if(disp == NULL) disp = lv_disp_get_default();
-
- if(disp == NULL)
- return LV_VER_RES_MAX;
- else
- return disp->driver.rotated == 0 ? disp->driver.ver_res : disp->driver.hor_res;
-}
-
-/**
- * Get if anti-aliasing is enabled for a display or not
- * @param disp pointer to a display (NULL to use the default display)
- * @return true: anti-aliasing is enabled; false: disabled
- */
-bool lv_disp_get_antialiasing(lv_disp_t * disp)
-{
-#if LV_ANTIALIAS == 0
- return false;
-#else
- if(disp == NULL) disp = lv_disp_get_default();
- if(disp == NULL) return false;
-
- return disp->driver.antialiasing ? true : false;
-#endif
-}
-
-/**
- * Call in the display driver's `flush_cb` function when the flushing is finished
- * @param disp_drv pointer to display driver in `flush_cb` where this function is called
- */
-LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_drv_t * disp_drv)
-{
- /*If the screen is transparent initialize it when the flushing is ready*/
-#if LV_COLOR_SCREEN_TRANSP
- if(disp_drv->screen_transp) {
- memset(disp_drv->buffer->buf_act, 0x00, disp_drv->buffer->size * sizeof(lv_color32_t));
- }
-#endif
-
- disp_drv->buffer->flushing = 0;
-}
-
-/**
- * Get the next display.
- * @param disp pointer to the current display. NULL to initialize.
- * @return the next display or NULL if no more. Give the first display when the parameter is NULL
- */
-lv_disp_t * lv_disp_get_next(lv_disp_t * disp)
-{
- if(disp == NULL)
- return lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll));
- else
- return lv_ll_get_next(&LV_GC_ROOT(_lv_disp_ll), disp);
-}
-
-/**
- * Get the internal buffer of a display
- * @param disp pointer to a display
- * @return pointer to the internal buffers
- */
-lv_disp_buf_t * lv_disp_get_buf(lv_disp_t * disp)
-{
- return disp->driver.buffer;
-}
-
-/**
- * Get the number of areas in the buffer
- * @return number of invalid areas
- */
-uint16_t lv_disp_get_inv_buf_size(lv_disp_t * disp)
-{
- return disp->inv_p;
-}
-
-/**
- * Pop (delete) the last 'num' invalidated areas from the buffer
- * @param num number of areas to delete
- */
-void lv_disp_pop_from_inv_buf(lv_disp_t * disp, uint16_t num)
-{
-
- if(disp->inv_p < num)
- disp->inv_p = 0;
- else
- disp->inv_p -= num;
-}
-
-/**
- * Check the driver configuration if it's double buffered (both `buf1` and `buf2` are set)
- * @param disp pointer to to display to check
- * @return true: double buffered; false: not double buffered
- */
-bool lv_disp_is_double_buf(lv_disp_t * disp)
-{
- if(disp->driver.buffer->buf1 && disp->driver.buffer->buf2)
- return true;
- else
- return false;
-}
-
-/**
- * Check the driver configuration if it's TRUE double buffered (both `buf1` and `buf2` are set and
- * `size` is screen sized)
- * @param disp pointer to to display to check
- * @return true: double buffered; false: not double buffered
- */
-bool lv_disp_is_true_double_buf(lv_disp_t * disp)
-{
- uint32_t scr_size = disp->driver.hor_res * disp->driver.ver_res;
-
- if(lv_disp_is_double_buf(disp) && disp->driver.buffer->size == scr_size) {
- return true;
- } else {
- return false;
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_disp.h b/src/libs/lvgl/src/lv_hal/lv_hal_disp.h
deleted file mode 100644
index eef22d98..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_disp.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/**
- * @file lv_hal_disp.h
- *
- * @description Display Driver HAL interface header file
- *
- */
-
-#ifndef LV_HAL_DISP_H
-#define LV_HAL_DISP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdint.h>
-#include <stdbool.h>
-#include "lv_hal.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_ll.h"
-#include "../lv_misc/lv_task.h"
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_INV_BUF_SIZE
-#define LV_INV_BUF_SIZE 32 /*Buffer size for invalid areas */
-#endif
-
-#ifndef LV_ATTRIBUTE_FLUSH_READY
-#define LV_ATTRIBUTE_FLUSH_READY
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-struct _disp_t;
-struct _disp_drv_t;
-
-/**
- * Structure for holding display buffer information.
- */
-typedef struct
-{
- void * buf1; /**< First display buffer. */
- void * buf2; /**< Second display buffer. */
-
- /*Internal, used by the library*/
- void * buf_act;
- uint32_t size; /*In pixel count*/
- lv_area_t area;
- volatile uint32_t flushing : 1;
-} lv_disp_buf_t;
-
-/**
- * Display Driver structure to be registered by HAL
- */
-typedef struct _disp_drv_t
-{
-
- lv_coord_t hor_res; /**< Horizontal resolution. */
- lv_coord_t ver_res; /**< Vertical resolution. */
-
- /** Pointer to a buffer initialized with `lv_disp_buf_init()`.
- * LittlevGL will use this buffer(s) to draw the screens contents */
- lv_disp_buf_t * buffer;
-
-#if LV_ANTIALIAS
- uint32_t antialiasing : 1; /**< 1: antialiasing is enabled on this display. */
-#endif
- uint32_t rotated : 1; /**< 1: turn the display by 90 degree. @warning Does not update coordinates for you!*/
-
-#if LV_COLOR_SCREEN_TRANSP
- /**Handle if the the screen doesn't have a solid (opa == LV_OPA_COVER) background.
- * Use only if required because it's slower.*/
- uint32_t screen_transp : 1;
-#endif
-
- /** MANDATORY: Write the internal buffer (VDB) to the display. 'lv_disp_flush_ready()' has to be
- * called when finished */
- void (*flush_cb)(struct _disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p);
-
- /** OPTIONAL: Extend the invalidated areas to match with the display drivers requirements
- * E.g. round `y` to, 8, 16 ..) on a monochrome display*/
- void (*rounder_cb)(struct _disp_drv_t * disp_drv, lv_area_t * area);
-
- /** OPTIONAL: Set a pixel in a buffer according to the special requirements of the display
- * Can be used for color format not supported in LittelvGL. E.g. 2 bit -> 4 gray scales
- * @note Much slower then drawing with supported color formats. */
- void (*set_px_cb)(struct _disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
- lv_color_t color, lv_opa_t opa);
-
- /** OPTIONAL: Called after every refresh cycle to tell the rendering and flushing time + the
- * number of flushed pixels */
- void (*monitor_cb)(struct _disp_drv_t * disp_drv, uint32_t time, uint32_t px);
-
-#if LV_USE_GPU
- /** OPTIONAL: Blend two memories using opacity (GPU only)*/
- void (*gpu_blend_cb)(struct _disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length,
- lv_opa_t opa);
-
- /** OPTIONAL: Fill a memory with a color (GPU only)*/
- void (*gpu_fill_cb)(struct _disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width,
- const lv_area_t * fill_area, lv_color_t color);
-#endif
-
- /** On CHROMA_KEYED images this color will be transparent.
- * `LV_COLOR_TRANSP` by default. (lv_conf.h)*/
- lv_color_t color_chroma_key;
-
-#if LV_USE_USER_DATA
- lv_disp_drv_user_data_t user_data; /**< Custom display driver user data */
-#endif
-
-} lv_disp_drv_t;
-
-struct _lv_obj_t;
-
-/**
- * Display structure.
- * ::lv_disp_drv_t is the first member of the structure.
- */
-typedef struct _disp_t
-{
- /**< Driver to the display*/
- lv_disp_drv_t driver;
-
- /**< A task which periodically checks the dirty areas and refreshes them*/
- lv_task_t * refr_task;
-
- /** Screens of the display*/
- lv_ll_t scr_ll;
- struct _lv_obj_t * act_scr; /**< Currently active screen on this display */
- struct _lv_obj_t * top_layer; /**< @see lv_disp_get_layer_top */
- struct _lv_obj_t * sys_layer; /**< @see lv_disp_get_layer_sys */
-
- /** Invalidated (marked to redraw) areas*/
- lv_area_t inv_areas[LV_INV_BUF_SIZE];
- uint8_t inv_area_joined[LV_INV_BUF_SIZE];
- uint32_t inv_p : 10;
-
- int render_direction; /**< 0 when rendering down, 1 when rendering up */
- /*Miscellaneous data*/
- uint32_t last_activity_time; /**< Last time there was activity on this display */
-} lv_disp_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize a display driver with default values.
- * It is used to have known values in the fields and not junk in memory.
- * After it you can safely set only the fields you need.
- * @param driver pointer to driver variable to initialize
- */
-void lv_disp_drv_init(lv_disp_drv_t * driver);
-
-/**
- * Initialize a display buffer
- * @param disp_buf pointer `lv_disp_buf_t` variable to initialize
- * @param buf1 A buffer to be used by LittlevGL to draw the image.
- * Always has to specified and can't be NULL.
- * Can be an array allocated by the user. E.g. `static lv_color_t disp_buf1[1024 * 10]`
- * Or a memory address e.g. in external SRAM
- * @param buf2 Optionally specify a second buffer to make image rendering and image flushing
- * (sending to the display) parallel.
- * In the `disp_drv->flush` you should use DMA or similar hardware to send
- * the image to the display in the background.
- * It lets LittlevGL to render next frame into the other buffer while previous is being
- * sent. Set to `NULL` if unused.
- * @param size_in_px_cnt size of the `buf1` and `buf2` in pixel count.
- */
-void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size_in_px_cnt);
-
-/**
- * Register an initialized display driver.
- * Automatically set the first display as active.
- * @param driver pointer to an initialized 'lv_disp_drv_t' variable (can be local variable)
- * @return pointer to the new display or NULL on error
- */
-lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver);
-
-/**
- * Update the driver in run time.
- * @param disp pointer to a display. (return value of `lv_disp_drv_register`)
- * @param new_drv pointer to the new driver
- */
-void lv_disp_drv_update(lv_disp_t * disp, lv_disp_drv_t * new_drv);
-
-/**
- * Remove a display
- * @param disp pointer to display
- */
-void lv_disp_remove(lv_disp_t * disp);
-
-/**
- * Set a default screen. The new screens will be created on it by default.
- * @param disp pointer to a display
- */
-void lv_disp_set_default(lv_disp_t * disp);
-
-/**
- * Get the default display
- * @return pointer to the default display
- */
-lv_disp_t * lv_disp_get_default(void);
-
-/**
- * Get the horizontal resolution of a display
- * @param disp pointer to a display (NULL to use the default display)
- * @return the horizontal resolution of the display
- */
-lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp);
-
-/**
- * Get the vertical resolution of a display
- * @param disp pointer to a display (NULL to use the default display)
- * @return the vertical resolution of the display
- */
-lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp);
-
-/**
- * Get if anti-aliasing is enabled for a display or not
- * @param disp pointer to a display (NULL to use the default display)
- * @return true: anti-aliasing is enabled; false: disabled
- */
-bool lv_disp_get_antialiasing(lv_disp_t * disp);
-
-static inline void lv_disp_set_direction(lv_disp_t * disp, int direction)
-{
- disp->render_direction = direction;
-}
-
-//! @cond Doxygen_Suppress
-
-/**
- * Call in the display driver's `flush_cb` function when the flushing is finished
- * @param disp_drv pointer to display driver in `flush_cb` where this function is called
- */
-LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_drv_t * disp_drv);
-
-//! @endcond
-
-/**
- * Get the next display.
- * @param disp pointer to the current display. NULL to initialize.
- * @return the next display or NULL if no more. Give the first display when the parameter is NULL
- */
-lv_disp_t * lv_disp_get_next(lv_disp_t * disp);
-
-/**
- * Get the internal buffer of a display
- * @param disp pointer to a display
- * @return pointer to the internal buffers
- */
-lv_disp_buf_t * lv_disp_get_buf(lv_disp_t * disp);
-
-/**
- * Get the number of areas in the buffer
- * @return number of invalid areas
- */
-uint16_t lv_disp_get_inv_buf_size(lv_disp_t * disp);
-
-/**
- * Pop (delete) the last 'num' invalidated areas from the buffer
- * @param num number of areas to delete
- */
-void lv_disp_pop_from_inv_buf(lv_disp_t * disp, uint16_t num);
-
-/**
- * Check the driver configuration if it's double buffered (both `buf1` and `buf2` are set)
- * @param disp pointer to to display to check
- * @return true: double buffered; false: not double buffered
- */
-bool lv_disp_is_double_buf(lv_disp_t * disp);
-
-/**
- * Check the driver configuration if it's TRUE double buffered (both `buf1` and `buf2` are set and
- * `size` is screen sized)
- * @param disp pointer to to display to check
- * @return true: double buffered; false: not double buffered
- */
-bool lv_disp_is_true_double_buf(lv_disp_t * disp);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_indev.c b/src/libs/lvgl/src/lv_hal/lv_hal_indev.c
deleted file mode 100644
index 35ff1b31..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_indev.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * @file hal_indev.c
- *
- * @description Input device HAL interface
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "../lv_core/lv_debug.h"
-#include "../lv_hal/lv_hal_indev.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_gc.h"
-#include "lv_hal_disp.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize an input device driver with default values.
- * It is used to surly have known values in the fields ant not memory junk.
- * After it you can set the fields.
- * @param driver pointer to driver variable to initialize
- */
-void lv_indev_drv_init(lv_indev_drv_t * driver)
-{
- memset(driver, 0, sizeof(lv_indev_drv_t));
-
- driver->type = LV_INDEV_TYPE_NONE;
- driver->drag_limit = LV_INDEV_DEF_DRAG_LIMIT;
- driver->drag_throw = LV_INDEV_DEF_DRAG_THROW;
- driver->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME;
- driver->long_press_rep_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME;
-}
-
-/**
- * Register an initialized input device driver.
- * @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be local variable)
- * @return pointer to the new input device or NULL on error
- */
-lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
-{
-
- if(driver->disp == NULL) driver->disp = lv_disp_get_default();
-
- if(driver->disp == NULL) {
- LV_LOG_WARN("lv_indev_drv_register: no display registered hence can't attache the indev to "
- "a display");
- return NULL;
- }
-
- lv_indev_t * indev = lv_ll_ins_head(&LV_GC_ROOT(_lv_indev_ll));
- if(!indev) {
- LV_ASSERT_MEM(indev);
- return NULL;
- }
-
- memset(indev, 0, sizeof(lv_indev_t));
- memcpy(&indev->driver, driver, sizeof(lv_indev_drv_t));
-
- indev->proc.reset_query = 1;
- indev->cursor = NULL;
- indev->group = NULL;
- indev->btn_points = NULL;
-
- indev->driver.read_task = lv_task_create(lv_indev_read_task, LV_INDEV_DEF_READ_PERIOD, LV_TASK_PRIO_MID, indev);
-
- return indev;
-}
-
-/**
- * Update the driver in run time.
- * @param indev pointer to a input device. (return value of `lv_indev_drv_register`)
- * @param new_drv pointer to the new driver
- */
-void lv_indev_drv_update(lv_indev_t * indev, lv_indev_drv_t * new_drv)
-{
- memcpy(&indev->driver, new_drv, sizeof(lv_indev_drv_t));
-}
-
-/**
- * Get the next input device.
- * @param indev pointer to the current input device. NULL to initialize.
- * @return the next input devise or NULL if no more. Give the first input device when the parameter
- * is NULL
- */
-lv_indev_t * lv_indev_get_next(lv_indev_t * indev)
-{
- if(indev == NULL)
- return lv_ll_get_head(&LV_GC_ROOT(_lv_indev_ll));
- else
- return lv_ll_get_next(&LV_GC_ROOT(_lv_indev_ll), indev);
-}
-
-/**
- * Read data from an input device.
- * @param indev pointer to an input device
- * @param data input device will write its data here
- * @return false: no more data; true: there more data to read (buffered)
- */
-bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data)
-{
- bool cont = false;
-
- memset(data, 0, sizeof(lv_indev_data_t));
-
- /* For touchpad sometimes users don't the last pressed coordinate on release.
- * So be sure a coordinates are initialized to the last point */
- if(indev->driver.type == LV_INDEV_TYPE_POINTER) {
- data->point.x = indev->proc.types.pointer.act_point.x;
- data->point.y = indev->proc.types.pointer.act_point.y;
- }
- /*Similarly set at least the last key in case of the the user doesn't set it on release*/
- else if(indev->driver.type == LV_INDEV_TYPE_KEYPAD) {
- data->key = indev->proc.types.keypad.last_key;
- }
-
- if(indev->driver.read_cb) {
- LV_LOG_TRACE("idnev read started");
- cont = indev->driver.read_cb(&indev->driver, data);
- LV_LOG_TRACE("idnev read finished");
- } else {
- LV_LOG_WARN("indev function registered");
- }
-
- return cont;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_indev.h b/src/libs/lvgl/src/lv_hal/lv_hal_indev.h
deleted file mode 100644
index ef1a5559..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_indev.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * @file lv_hal_indev.h
- *
- * @description Input Device HAL interface layer header file
- *
- */
-
-#ifndef LV_HAL_INDEV_H
-#define LV_HAL_INDEV_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_task.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-struct _lv_obj_t;
-struct _disp_t;
-struct _lv_indev_t;
-struct _lv_indev_drv_t;
-
-/** Possible input device types*/
-enum {
- LV_INDEV_TYPE_NONE, /**< Uninitialized state*/
- LV_INDEV_TYPE_POINTER, /**< Touch pad, mouse, external button*/
- LV_INDEV_TYPE_KEYPAD, /**< Keypad or keyboard*/
- LV_INDEV_TYPE_BUTTON, /**< External (hardware button) which is assigned to a specific point of the
- screen*/
- LV_INDEV_TYPE_ENCODER, /**< Encoder with only Left, Right turn and a Button*/
-};
-typedef uint8_t lv_indev_type_t;
-
-/** States for input devices*/
-enum { LV_INDEV_STATE_REL = 0, LV_INDEV_STATE_PR };
-typedef uint8_t lv_indev_state_t;
-
-/** Data structure passed to an input driver to fill */
-typedef struct
-{
- lv_point_t point; /**< For LV_INDEV_TYPE_POINTER the currently pressed point*/
- uint32_t key; /**< For LV_INDEV_TYPE_KEYPAD the currently pressed key*/
- uint32_t btn_id; /**< For LV_INDEV_TYPE_BUTTON the currently pressed button*/
- int16_t enc_diff; /**< For LV_INDEV_TYPE_ENCODER number of steps since the previous read*/
-
- lv_indev_state_t state; /**< LV_INDEV_STATE_REL or LV_INDEV_STATE_PR*/
-} lv_indev_data_t;
-
-/** Initialized by the user and registered by 'lv_indev_add()'*/
-typedef struct _lv_indev_drv_t
-{
-
- /**< Input device type*/
- lv_indev_type_t type;
-
- /**< Function pointer to read input device data.
- * Return 'true' if there is more data to be read (buffered).
- * Most drivers can safely return 'false' */
- bool (*read_cb)(struct _lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
-
- /** Called when an action happened on the input device.
- * The second parameter is the event from `lv_event_t`*/
- void (*feedback_cb)(struct _lv_indev_drv_t *, uint8_t);
-
-#if LV_USE_USER_DATA
- lv_indev_drv_user_data_t user_data;
-#endif
-
- /**< Pointer to the assigned display*/
- struct _disp_t * disp;
-
- /**< Task to read the periodically read the input device*/
- lv_task_t * read_task;
-
- /**< Number of pixels to slide before actually drag the object*/
- uint8_t drag_limit;
-
- /**< Drag throw slow-down in [%]. Greater value means faster slow-down */
- uint8_t drag_throw;
-
- /**< Long press time in milliseconds*/
- uint16_t long_press_time;
-
- /**< Repeated trigger period in long press [ms] */
- uint16_t long_press_rep_time;
-} lv_indev_drv_t;
-
-/** Run time data of input devices
- * Internally used by the library, you should not need to touch it.
- */
-typedef struct _lv_indev_proc_t
-{
- lv_indev_state_t state; /**< Current state of the input device. */
- union
- {
- struct
- { /*Pointer and button data*/
- lv_point_t act_point; /**< Current point of input device. */
- lv_point_t last_point; /**< Last point of input device. */
- lv_point_t vect; /**< Difference between `act_point` and `last_point`. */
- lv_point_t drag_sum; /*Count the dragged pixels to check LV_INDEV_DEF_DRAG_LIMIT*/
- lv_point_t drag_throw_vect;
- struct _lv_obj_t * act_obj; /*The object being pressed*/
- struct _lv_obj_t * last_obj; /*The last obejct which was pressed (used by dragthrow and
- other post-release event)*/
- struct _lv_obj_t * last_pressed; /*The lastly pressed object*/
-
- /*Flags*/
- uint8_t drag_limit_out : 1;
- uint8_t drag_in_prog : 1;
- } pointer;
- struct
- { /*Keypad data*/
- lv_indev_state_t last_state;
- uint32_t last_key;
- } keypad;
- } types;
-
- uint32_t pr_timestamp; /**< Pressed time stamp*/
- uint32_t longpr_rep_timestamp; /**< Long press repeat time stamp*/
-
- /*Flags*/
- uint8_t long_pr_sent : 1;
- uint8_t reset_query : 1;
- uint8_t disabled : 1;
- uint8_t wait_until_release : 1;
-} lv_indev_proc_t;
-
-struct _lv_obj_t;
-struct _lv_group_t;
-
-/** The main input device descriptor with driver, runtime data ('proc') and some additional
- * information*/
-typedef struct _lv_indev_t
-{
- lv_indev_drv_t driver;
- lv_indev_proc_t proc;
- struct _lv_obj_t * cursor; /**< Cursor for LV_INPUT_TYPE_POINTER*/
- struct _lv_group_t * group; /**< Keypad destination group*/
- const lv_point_t * btn_points; /**< Array points assigned to the button ()screen will be pressed
- here by the buttons*/
-} lv_indev_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize an input device driver with default values.
- * It is used to surly have known values in the fields ant not memory junk.
- * After it you can set the fields.
- * @param driver pointer to driver variable to initialize
- */
-void lv_indev_drv_init(lv_indev_drv_t * driver);
-
-/**
- * Register an initialized input device driver.
- * @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be local variable)
- * @return pointer to the new input device or NULL on error
- */
-lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver);
-
-/**
- * Update the driver in run time.
- * @param indev pointer to a input device. (return value of `lv_indev_drv_register`)
- * @param new_drv pointer to the new driver
- */
-void lv_indev_drv_update(lv_indev_t * indev, lv_indev_drv_t * new_drv);
-
-/**
- * Get the next input device.
- * @param indev pointer to the current input device. NULL to initialize.
- * @return the next input devise or NULL if no more. Give the first input device when the parameter
- * is NULL
- */
-lv_indev_t * lv_indev_get_next(lv_indev_t * indev);
-
-/**
- * Read data from an input device.
- * @param indev pointer to an input device
- * @param data input device will write its data here
- * @return false: no more data; true: there more data to read (buffered)
- */
-bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_tick.c b/src/libs/lvgl/src/lv_hal/lv_hal_tick.c
deleted file mode 100644
index cdfec32c..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_tick.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * @file systick.c
- * Provide access to the system tick with 1 millisecond resolution
- */
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "lv_hal_tick.h"
-#include <stddef.h>
-
-#if LV_TICK_CUSTOM == 1
-#include LV_TICK_CUSTOM_INCLUDE
-#endif
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint32_t sys_time = 0;
-static volatile uint8_t tick_irq_flag;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * You have to call this function periodically
- * @param tick_period the call period of this function in milliseconds
- */
-LV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period)
-{
- tick_irq_flag = 0;
- sys_time += tick_period;
-}
-
-/**
- * Get the elapsed milliseconds since start up
- * @return the elapsed milliseconds
- */
-uint32_t lv_tick_get(void)
-{
-#if LV_TICK_CUSTOM == 0
- uint32_t result;
- do {
- tick_irq_flag = 1;
- result = sys_time;
- } while(!tick_irq_flag); /*'lv_tick_inc()' clears this flag which can be in an interrupt.
- Continue until make a non interrupted cycle */
-
- return result;
-#else
- return LV_TICK_CUSTOM_SYS_TIME_EXPR;
-#endif
-}
-
-/**
- * Get the elapsed milliseconds since a previous time stamp
- * @param prev_tick a previous time stamp (return value of systick_get() )
- * @return the elapsed milliseconds since 'prev_tick'
- */
-uint32_t lv_tick_elaps(uint32_t prev_tick)
-{
- uint32_t act_time = lv_tick_get();
-
- /*If there is no overflow in sys_time simple subtract*/
- if(act_time >= prev_tick) {
- prev_tick = act_time - prev_tick;
- } else {
- prev_tick = UINT32_MAX - prev_tick + 1;
- prev_tick += act_time;
- }
-
- return prev_tick;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_hal/lv_hal_tick.h b/src/libs/lvgl/src/lv_hal/lv_hal_tick.h
deleted file mode 100644
index a4de881f..00000000
--- a/src/libs/lvgl/src/lv_hal/lv_hal_tick.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * @file lv_hal_tick.h
- * Provide access to the system tick with 1 millisecond resolution
- */
-
-#ifndef LV_HAL_TICK_H
-#define LV_HAL_TICK_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-#include <stdint.h>
-#include <stdbool.h>
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_ATTRIBUTE_TICK_INC
-#define LV_ATTRIBUTE_TICK_INC
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-//! @cond Doxygen_Suppress
-
-/**
- * You have to call this function periodically
- * @param tick_period the call period of this function in milliseconds
- */
-LV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period);
-
-//! @endcond
-
-/**
- * Get the elapsed milliseconds since start up
- * @return the elapsed milliseconds
- */
-uint32_t lv_tick_get(void);
-
-/**
- * Get the elapsed milliseconds since a previous time stamp
- * @param prev_tick a previous time stamp (return value of systick_get() )
- * @return the elapsed milliseconds since 'prev_tick'
- */
-uint32_t lv_tick_elaps(uint32_t prev_tick);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_HAL_TICK_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_anim.c b/src/libs/lvgl/src/lv_misc/lv_anim.c
deleted file mode 100644
index 77bd87b9..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_anim.c
+++ /dev/null
@@ -1,474 +0,0 @@
-/**
- * @file anim.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_anim.h"
-
-#if LV_USE_ANIMATION
-#include <stddef.h>
-#include <string.h>
-#include "../lv_core/lv_debug.h"
-#include "../lv_hal/lv_hal_tick.h"
-#include "lv_task.h"
-#include "lv_math.h"
-#include "lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-#define LV_ANIM_RESOLUTION 1024
-#define LV_ANIM_RES_SHIFT 10
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void anim_task(lv_task_t * param);
-static bool anim_ready_handler(lv_anim_t * a);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint32_t last_task_run;
-static bool anim_list_changed;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Init. the animation module
- */
-void lv_anim_core_init(void)
-{
- lv_ll_init(&LV_GC_ROOT(_lv_anim_ll), sizeof(lv_anim_t));
- last_task_run = lv_tick_get();
- lv_task_create(anim_task, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, NULL);
-}
-
-/**
- * Initialize an animation variable.
- * E.g.:
- * lv_anim_t a;
- * lv_anim_init(&a);
- * lv_anim_set_...(&a);
- * lv_anim_craete(&a);
- * @param a pointer to an `lv_anim_t` variable to initialize
- */
-void lv_anim_init(lv_anim_t * a)
-{
- memset(a, 0, sizeof(lv_anim_t));
- a->time = 500;
- a->start = 0;
- a->end = 100;
- a->path_cb = lv_anim_path_linear;
-}
-/**
- * Create an animation
- * @param a an initialized 'anim_t' variable. Not required after call.
- */
-void lv_anim_create(lv_anim_t * a)
-{
- LV_LOG_TRACE("animation create started")
- /* Do not let two animations for the same 'var' with the same 'fp'*/
- if(a->exec_cb != NULL) lv_anim_del(a->var, a->exec_cb); /*fp == NULL would delete all animations of var*/
-
- /*Add the new animation to the animation linked list*/
- lv_anim_t * new_anim = lv_ll_ins_head(&LV_GC_ROOT(_lv_anim_ll));
- LV_ASSERT_MEM(new_anim);
- if(new_anim == NULL) return;
-
- /*Initialize the animation descriptor*/
- a->playback_now = 0;
- memcpy(new_anim, a, sizeof(lv_anim_t));
-
- /*Set the start value*/
- if(new_anim->exec_cb) new_anim->exec_cb(new_anim->var, new_anim->start);
-
- /* Creating an animation changed the linked list.
- * It's important if it happens in a ready callback. (see `anim_task`)*/
- anim_list_changed = true;
-
- LV_LOG_TRACE("animation created")
-}
-
-/**
- * Delete an animation of a variable with a given animator function
- * @param var pointer to variable
- * @param exec_cb a function pointer which is animating 'var',
- * or NULL to delete all the animations of 'var'
- * @return true: at least 1 animation is deleted, false: no animation is deleted
- */
-bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb)
-{
- lv_anim_t * a;
- lv_anim_t * a_next;
- bool del = false;
- a = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
- while(a != NULL) {
- /*'a' might be deleted, so get the next object while 'a' is valid*/
- a_next = lv_ll_get_next(&LV_GC_ROOT(_lv_anim_ll), a);
-
- if(a->var == var && (a->exec_cb == exec_cb || exec_cb == NULL)) {
- lv_ll_rem(&LV_GC_ROOT(_lv_anim_ll), a);
- lv_mem_free(a);
- anim_list_changed = true; /*Read by `anim_task`. It need to know if a delete occurred in
- the linked list*/
- del = true;
- }
-
- a = a_next;
- }
-
- return del;
-}
-
-/**
- * Get the number of currently running animations
- * @return the number of running animations
- */
-uint16_t lv_anim_count_running(void)
-{
- uint16_t cnt = 0;
- lv_anim_t * a;
- LV_LL_READ(LV_GC_ROOT(_lv_anim_ll), a) cnt++;
-
- return cnt++;
-}
-
-/**
- * Calculate the time of an animation with a given speed and the start and end values
- * @param speed speed of animation in unit/sec
- * @param start start value of the animation
- * @param end end value of the animation
- * @return the required time [ms] for the animation with the given parameters
- */
-uint32_t lv_anim_speed_to_time(uint16_t speed, lv_anim_value_t start, lv_anim_value_t end)
-{
- int32_t d = LV_MATH_ABS((int32_t)start - end);
- uint32_t time = (int32_t)((int32_t)(d * 1000) / speed);
-
- if(time > UINT32_MAX) time = UINT32_MAX;
-
- if(time == 0) {
- time++;
- }
-
- return time;
-}
-
-/**
- * Calculate the current value of an animation applying linear characteristic
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_linear(const lv_anim_t * a)
-{
- /*Calculate the current step*/
- uint32_t step;
- if(a->time == a->act_time) {
- step = LV_ANIM_RESOLUTION; /*Use the last value if the time fully elapsed*/
- } else {
- step = ((int32_t)a->act_time * LV_ANIM_RESOLUTION) / a->time;
- }
-
- /* Get the new value which will be proportional to `step`
- * and the `start` and `end` values*/
- int32_t new_value;
- new_value = (int32_t)step * (a->end - a->start);
- new_value = new_value >> LV_ANIM_RES_SHIFT;
- new_value += a->start;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation slowing down the start phase
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_in(const lv_anim_t * a)
-{
- /*Calculate the current step*/
- uint32_t t;
- if(a->time == a->act_time)
- t = 1024;
- else
- t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
-
- int32_t step = lv_bezier3(t, 0, 1, 1, 1024);
-
- int32_t new_value;
- new_value = (int32_t)step * (a->end - a->start);
- new_value = new_value >> 10;
- new_value += a->start;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation slowing down the end phase
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_out(const lv_anim_t * a)
-{
- /*Calculate the current step*/
-
- uint32_t t;
- if(a->time == a->act_time)
- t = 1024;
- else
- t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
-
- int32_t step = lv_bezier3(t, 0, 1023, 1023, 1024);
-
- int32_t new_value;
- new_value = (int32_t)step * (a->end - a->start);
- new_value = new_value >> 10;
- new_value += a->start;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation applying an "S" characteristic (cosine)
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_in_out(const lv_anim_t * a)
-{
- /*Calculate the current step*/
-
- uint32_t t;
- if(a->time == a->act_time)
- t = 1024;
- else
- t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
-
- int32_t step = lv_bezier3(t, 0, 100, 924, 1024);
-
- int32_t new_value;
- new_value = (int32_t)step * (a->end - a->start);
- new_value = new_value >> 10;
- new_value += a->start;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation with overshoot at the end
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_overshoot(const lv_anim_t * a)
-{
- /*Calculate the current step*/
-
- uint32_t t;
- if(a->time == a->act_time)
- t = 1024;
- else
- t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
-
- int32_t step = lv_bezier3(t, 0, 600, 1300, 1024);
-
- int32_t new_value;
- new_value = (int32_t)step * (a->end - a->start);
- new_value = new_value >> 10;
- new_value += a->start;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation with 3 bounces
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_bounce(const lv_anim_t * a)
-{
- /*Calculate the current step*/
- uint32_t t;
- if(a->time == a->act_time)
- t = 1024;
- else
- t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time;
-
- int32_t diff = (a->end - a->start);
-
- /*3 bounces has 5 parts: 3 down and 2 up. One part is t / 5 long*/
-
- if(t < 408) {
- /*Go down*/
- t = (t * 2500) >> 10; /*[0..1024] range*/
- } else if(t >= 408 && t < 614) {
- /*First bounce back*/
- t -= 408;
- t = t * 5; /*to [0..1024] range*/
- t = 1024 - t;
- diff = diff / 6;
- } else if(t >= 614 && t < 819) {
- /*Fall back*/
- t -= 614;
- t = t * 5; /*to [0..1024] range*/
- diff = diff / 6;
- } else if(t >= 819 && t < 921) {
- /*Second bounce back*/
- t -= 819;
- t = t * 10; /*to [0..1024] range*/
- t = 1024 - t;
- diff = diff / 16;
- } else if(t >= 921 && t <= 1024) {
- /*Fall back*/
- t -= 921;
- t = t * 10; /*to [0..1024] range*/
- diff = diff / 16;
- }
-
- if(t > 1024) t = 1024;
-
- int32_t step = lv_bezier3(t, 1024, 1024, 800, 0);
-
- int32_t new_value;
- new_value = (int32_t)step * diff;
- new_value = new_value >> 10;
- new_value = a->end - new_value;
-
- return (lv_anim_value_t)new_value;
-}
-
-/**
- * Calculate the current value of an animation applying step characteristic.
- * (Set end value on the end of the animation)
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_step(const lv_anim_t * a)
-{
- if(a->act_time >= a->time)
- return a->end;
- else
- return a->start;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Periodically handle the animations.
- * @param param unused
- */
-static void anim_task(lv_task_t * param)
-{
- (void)param;
-
- lv_anim_t * a;
- LV_LL_READ(LV_GC_ROOT(_lv_anim_ll), a)
- {
- a->has_run = 0;
- }
-
- uint32_t elaps = lv_tick_elaps(last_task_run);
-
- a = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
-
- while(a != NULL) {
- /*It can be set by `lv_anim_del()` typically in `end_cb`. If set then an animation delete
- * happened in `anim_ready_handler` which could make this linked list reading corrupt
- * because the list is changed meanwhile
- */
- anim_list_changed = false;
-
- if(!a->has_run) {
- a->has_run = 1; /*The list readying might be reseted so need to know which anim has run already*/
- a->act_time += elaps;
- if(a->act_time >= 0) {
- if(a->act_time > a->time) a->act_time = a->time;
-
- int32_t new_value;
- new_value = a->path_cb(a);
-
- /*Apply the calculated value*/
- if(a->exec_cb) a->exec_cb(a->var, new_value);
-
- /*If the time is elapsed the animation is ready*/
- if(a->act_time >= a->time) {
- anim_ready_handler(a);
- }
- }
- }
-
- /* If the linked list changed due to anim. delete then it's not safe to continue
- * the reading of the list from here -> start from the head*/
- if(anim_list_changed)
- a = lv_ll_get_head(&LV_GC_ROOT(_lv_anim_ll));
- else
- a = lv_ll_get_next(&LV_GC_ROOT(_lv_anim_ll), a);
- }
-
- last_task_run = lv_tick_get();
-}
-
-/**
- * Called when an animation is ready to do the necessary thinks
- * e.g. repeat, play back, delete etc.
- * @param a pointer to an animation descriptor
- * @return true: animation delete occurred nnd the `LV_GC_ROOT(_lv_anim_ll)` has changed
- * */
-static bool anim_ready_handler(lv_anim_t * a)
-{
-
- /*Delete the animation if
- * - no repeat and no play back (simple one shot animation)
- * - no repeat, play back is enabled and play back is ready */
- if((a->repeat == 0 && a->playback == 0) || (a->repeat == 0 && a->playback == 1 && a->playback_now == 1)) {
-
- /*Create copy from the animation and delete the animation from the list.
- * This way the `ready_cb` will see the animations like it's animation is ready deleted*/
- lv_anim_t a_tmp;
- memcpy(&a_tmp, a, sizeof(lv_anim_t));
- lv_ll_rem(&LV_GC_ROOT(_lv_anim_ll), a);
- lv_mem_free(a);
- anim_list_changed = true;
-
- /* Call the callback function at the end*/
- if(a_tmp.ready_cb != NULL) a_tmp.ready_cb(&a_tmp);
- }
- /*If the animation is not deleted then restart it*/
- else {
- a->act_time = -a->repeat_pause; /*Restart the animation*/
- /*Swap the start and end values in play back mode*/
- if(a->playback != 0) {
- /*If now turning back use the 'playback_pause*/
- if(a->playback_now == 0) a->act_time = -a->playback_pause;
-
- /*Toggle the play back state*/
- a->playback_now = a->playback_now == 0 ? 1 : 0;
- /*Swap the start and end values*/
- int32_t tmp;
- tmp = a->start;
- a->start = a->end;
- a->end = tmp;
- }
- }
-
- return anim_list_changed;
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_anim.h b/src/libs/lvgl/src/lv_misc/lv_anim.h
deleted file mode 100644
index b43035aa..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_anim.h
+++ /dev/null
@@ -1,331 +0,0 @@
-/**
- * @file anim.h
- *
- */
-
-#ifndef ANIM_H
-#define ANIM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Can be used to indicate if animations are enabled or disabled in a case*/
-enum {
- LV_ANIM_OFF,
- LV_ANIM_ON,
-};
-
-typedef uint8_t lv_anim_enable_t;
-
-/** Type of the animated value*/
-typedef lv_coord_t lv_anim_value_t;
-
-#if LV_USE_ANIMATION
-
-struct _lv_anim_t;
-
-/** Generic prototype of "animator" functions.
- * First parameter is the variable to animate.
- * Second parameter is the value to set.
- * Compatible with `lv_xxx_set_yyy(obj, value)` functions
- * The `x` in `_xcb_t` means its not a fully generic prototype because
- * it doesn't receive `lv_anim_t *` as its first argument*/
-typedef void (*lv_anim_exec_xcb_t)(void *, lv_anim_value_t);
-
-/** Same as `lv_anim_exec_xcb_t` but receives `lv_anim_t *` as the first parameter.
- * It's more consistent but less convenient. Might be used by binding generator functions.*/
-typedef void (*lv_anim_custom_exec_cb_t)(struct _lv_anim_t *, lv_anim_value_t);
-
-/** Get the current value during an animation*/
-typedef lv_anim_value_t (*lv_anim_path_cb_t)(const struct _lv_anim_t *);
-
-/** Callback to call when the animation is ready*/
-typedef void (*lv_anim_ready_cb_t)(struct _lv_anim_t *);
-
-/** Describes an animation*/
-typedef struct _lv_anim_t
-{
- void * var; /**<Variable to animate*/
- lv_anim_exec_xcb_t exec_cb; /**< Function to execute to animate*/
- lv_anim_path_cb_t path_cb; /**< Function to get the steps of animations*/
- lv_anim_ready_cb_t ready_cb; /**< Call it when the animation is ready*/
- int32_t start; /**< Start value*/
- int32_t end; /**< End value*/
- uint32_t time; /**< Animation time in ms*/
- int32_t act_time; /**< Current time in animation. Set to negative to make delay.*/
- uint16_t playback_pause; /**< Wait before play back*/
- uint16_t repeat_pause; /**< Wait before repeat*/
-#if LV_USE_USER_DATA
- lv_anim_user_data_t user_data; /**< Custom user data*/
-#endif
-
- uint8_t playback : 1; /**< When the animation is ready play it back*/
- uint8_t repeat : 1; /**< Repeat the animation infinitely*/
- /*Animation system use these - user shouldn't set*/
- uint8_t playback_now : 1; /**< Play back is in progress*/
- uint32_t has_run : 1; /**< Indicates the animation has run in this round*/
-} lv_anim_t;
-
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Init. the animation module
- */
-void lv_anim_core_init(void);
-
-/**
- * Initialize an animation variable.
- * E.g.:
- * lv_anim_t a;
- * lv_anim_init(&a);
- * lv_anim_set_...(&a);
- * lv_anim_create(&a);
- * @param a pointer to an `lv_anim_t` variable to initialize
- */
-void lv_anim_init(lv_anim_t * a);
-
-/**
- * Set a variable to animate function to execute on `var`
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param var pointer to a variable to animate
- * @param exec_cb a function to execute.
- * LittelvGL's built-in functions can be used.
- * E.g. lv_obj_set_x
- */
-static inline void lv_anim_set_exec_cb(lv_anim_t * a, void * var, lv_anim_exec_xcb_t exec_cb)
-{
- a->var = var;
- a->exec_cb = exec_cb;
-}
-
-/**
- * Set the duration and delay of an animation
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param duration duration of the animation in milliseconds
- * @param delay delay before the animation in milliseconds
- */
-static inline void lv_anim_set_time(lv_anim_t * a, uint16_t duration, int16_t delay)
-{
- a->time = duration;
- a->act_time = (int16_t)(-delay);
-}
-
-/**
- * Set the start and end values of an animation
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param start the start value
- * @param end the end value
- */
-static inline void lv_anim_set_values(lv_anim_t * a, lv_anim_value_t start, lv_anim_value_t end)
-{
- a->start = start;
- a->end = end;
-}
-
-/**
- * Similar to `lv_anim_set_var_and_cb` but `lv_anim_custom_exec_cb_t` receives
- * `lv_anim_t * ` as its first parameter instead of `void *`.
- * This function might be used when LittlevGL is binded to other languages because
- * it's more consistent to have `lv_anim_t *` as first parameter.
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param exec_cb a function to execute.
- */
-static inline void lv_anim_set_custom_exec_cb(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb)
-{
- a->var = a;
- a->exec_cb = (lv_anim_exec_xcb_t)exec_cb;
-}
-
-/**
- * Set the path (curve) of the animation.
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param path_cb a function the get the current value of the animation.
- * The built in functions starts with `lv_anim_path_...`
- */
-static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t path_cb)
-{
- a->path_cb = path_cb;
-}
-
-/**
- * Set a function call when the animation is ready
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param ready_cb a function call when the animation is ready
- */
-static inline void lv_anim_set_ready_cb(lv_anim_t * a, lv_anim_ready_cb_t ready_cb)
-{
- a->ready_cb = ready_cb;
-}
-
-/**
- * Make the animation to play back to when the forward direction is ready
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param wait_time time in milliseconds to wait before starting the back direction
- */
-static inline void lv_anim_set_playback(lv_anim_t * a, uint16_t wait_time)
-{
- a->playback = 1;
- a->playback_pause = wait_time;
-}
-
-/**
- * Disable playback. (Disabled after `lv_anim_init()`)
- * @param a pointer to an initialized `lv_anim_t` variable
- */
-static inline void lv_anim_clear_playback(lv_anim_t * a)
-{
- a->playback = 0;
-}
-
-/**
- * Make the animation to start again when ready.
- * @param a pointer to an initialized `lv_anim_t` variable
- * @param wait_time time in milliseconds to wait before starting the animation again
- */
-static inline void lv_anim_set_repeat(lv_anim_t * a, uint16_t wait_time)
-{
- a->repeat = 1;
- a->repeat_pause = wait_time;
-}
-
-/**
- * Disable repeat. (Disabled after `lv_anim_init()`)
- * @param a pointer to an initialized `lv_anim_t` variable
- */
-static inline void lv_anim_clear_repeat(lv_anim_t * a)
-{
- a->repeat = 0;
-}
-
-/**
- * Create an animation
- * @param a an initialized 'anim_t' variable. Not required after call.
- */
-void lv_anim_create(lv_anim_t * a);
-
-/**
- * Delete an animation of a variable with a given animator function
- * @param var pointer to variable
- * @param exec_cb a function pointer which is animating 'var',
- * or NULL to ignore it and delete all the animations of 'var
- * @return true: at least 1 animation is deleted, false: no animation is deleted
- */
-bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb);
-
-/**
- * Delete an aniamation by getting the animated variable from `a`.
- * Only animations with `exec_cb` will be deleted.
- * This function exist becasue it's logical that all anim functions receives an
- * `lv_anim_t` as their first parameter. It's not practical in C but might makes
- * the API more conequent and makes easier to genrate bindings.
- * @param a pointer to an animation.
- * @param exec_cb a function pointer which is animating 'var',
- * or NULL to ignore it and delete all the animations of 'var
- * @return true: at least 1 animation is deleted, false: no animation is deleted
- */
-static inline bool lv_anim_custom_del(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb)
-{
- return lv_anim_del(a->var, (lv_anim_exec_xcb_t)exec_cb);
-}
-
-/**
- * Get the number of currently running animations
- * @return the number of running animations
- */
-uint16_t lv_anim_count_running(void);
-
-/**
- * Calculate the time of an animation with a given speed and the start and end values
- * @param speed speed of animation in unit/sec
- * @param start start value of the animation
- * @param end end value of the animation
- * @return the required time [ms] for the animation with the given parameters
- */
-uint32_t lv_anim_speed_to_time(uint16_t speed, lv_anim_value_t start, lv_anim_value_t end);
-
-/**
- * Calculate the current value of an animation applying linear characteristic
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_linear(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation slowing down the start phase
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_in(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation slowing down the end phase
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_out(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation applying an "S" characteristic (cosine)
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_ease_in_out(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation with overshoot at the end
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_overshoot(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation with 3 bounces
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_bounce(const lv_anim_t * a);
-
-/**
- * Calculate the current value of an animation applying step characteristic.
- * (Set end value on the end of the animation)
- * @param a pointer to an animation
- * @return the current value to set
- */
-lv_anim_value_t lv_anim_path_step(const lv_anim_t * a);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_ANIMATION == 0*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_ANIM_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_area.c b/src/libs/lvgl/src/lv_misc/lv_area.c
deleted file mode 100644
index de649c5b..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_area.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/**
- * @file lv_area.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "lv_area.h"
-#include "lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize an area
- * @param area_p pointer to an area
- * @param x1 left coordinate of the area
- * @param y1 top coordinate of the area
- * @param x2 right coordinate of the area
- * @param y2 bottom coordinate of the area
- */
-void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2)
-{
- area_p->x1 = x1;
- area_p->y1 = y1;
- area_p->x2 = x2;
- area_p->y2 = y2;
-}
-
-/**
- * Set the width of an area
- * @param area_p pointer to an area
- * @param w the new width of the area (w == 1 makes x1 == x2)
- */
-void lv_area_set_width(lv_area_t * area_p, lv_coord_t w)
-{
- area_p->x2 = area_p->x1 + w - 1;
-}
-
-/**
- * Set the height of an area
- * @param area_p pointer to an area
- * @param h the new height of the area (h == 1 makes y1 == y2)
- */
-void lv_area_set_height(lv_area_t * area_p, lv_coord_t h)
-{
- area_p->y2 = area_p->y1 + h - 1;
-}
-
-/**
- * Set the position of an area (width and height will be kept)
- * @param area_p pointer to an area
- * @param x the new x coordinate of the area
- * @param y the new y coordinate of the area
- */
-void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y)
-{
- lv_coord_t w = lv_area_get_width(area_p);
- lv_coord_t h = lv_area_get_height(area_p);
- area_p->x1 = x;
- area_p->y1 = y;
- lv_area_set_width(area_p, w);
- lv_area_set_height(area_p, h);
-}
-
-/**
- * Return with area of an area (x * y)
- * @param area_p pointer to an area
- * @return size of area
- */
-uint32_t lv_area_get_size(const lv_area_t * area_p)
-{
- uint32_t size;
-
- size = (uint32_t)(area_p->x2 - area_p->x1 + 1) * (area_p->y2 - area_p->y1 + 1);
-
- return size;
-}
-
-/**
- * Get the common parts of two areas
- * @param res_p pointer to an area, the result will be stored here
- * @param a1_p pointer to the first area
- * @param a2_p pointer to the second area
- * @return false: the two area has NO common parts, res_p is invalid
- */
-bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const lv_area_t * a2_p)
-{
- /* Get the smaller area from 'a1_p' and 'a2_p' */
- res_p->x1 = LV_MATH_MAX(a1_p->x1, a2_p->x1);
- res_p->y1 = LV_MATH_MAX(a1_p->y1, a2_p->y1);
- res_p->x2 = LV_MATH_MIN(a1_p->x2, a2_p->x2);
- res_p->y2 = LV_MATH_MIN(a1_p->y2, a2_p->y2);
-
- /*If x1 or y1 greater then x2 or y2 then the areas union is empty*/
- bool union_ok = true;
- if((res_p->x1 > res_p->x2) || (res_p->y1 > res_p->y2)) {
- union_ok = false;
- }
-
- return union_ok;
-}
-/**
- * Join two areas into a third which involves the other two
- * @param res_p pointer to an area, the result will be stored here
- * @param a1_p pointer to the first area
- * @param a2_p pointer to the second area
- */
-void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_area_t * a2_p)
-{
- a_res_p->x1 = LV_MATH_MIN(a1_p->x1, a2_p->x1);
- a_res_p->y1 = LV_MATH_MIN(a1_p->y1, a2_p->y1);
- a_res_p->x2 = LV_MATH_MAX(a1_p->x2, a2_p->x2);
- a_res_p->y2 = LV_MATH_MAX(a1_p->y2, a2_p->y2);
-}
-
-/**
- * Check if a point is on an area
- * @param a_p pointer to an area
- * @param p_p pointer to a point
- * @return false:the point is out of the area
- */
-bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p)
-{
- bool is_on = false;
-
- if((p_p->x >= a_p->x1 && p_p->x <= a_p->x2) && ((p_p->y >= a_p->y1 && p_p->y <= a_p->y2))) {
- is_on = true;
- }
-
- return is_on;
-}
-
-/**
- * Check if two area has common parts
- * @param a1_p pointer to an area.
- * @param a2_p pointer to an other area
- * @return false: a1_p and a2_p has no common parts
- */
-bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p)
-{
- if((a1_p->x1 <= a2_p->x2) && (a1_p->x2 >= a2_p->x1) && (a1_p->y1 <= a2_p->y2) && (a1_p->y2 >= a2_p->y1)) {
- return true;
- } else {
- return false;
- }
-}
-
-/**
- * Check if an area is fully on an other
- * @param ain_p pointer to an area which could be in 'aholder_p'
- * @param aholder pointer to an area which could involve 'ain_p'
- * @return
- */
-bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p)
-{
- bool is_in = false;
-
- if(ain_p->x1 >= aholder_p->x1 && ain_p->y1 >= aholder_p->y1 && ain_p->x2 <= aholder_p->x2 &&
- ain_p->y2 <= aholder_p->y2) {
- is_in = true;
- }
-
- return is_in;
-}
-
-/**
- * Increment or decrement an area's size by a single amount
- * @param a_p pointer to an area to grow
- * @param amount amount to increment the area, or negative to decrement
- */
-void lv_area_increment(lv_area_t * a_p, const lv_coord_t amount)
-{
- a_p->x1 -= amount;
- a_p->y1 -= amount;
- a_p->x2 += amount;
- a_p->y2 += amount;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_area.h b/src/libs/lvgl/src/lv_misc/lv_area.h
deleted file mode 100644
index 211bebd8..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_area.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/**
- * @file lv_area.h
- *
- */
-
-#ifndef LV_AREA_H
-#define LV_AREA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <string.h>
-#include <stdbool.h>
-#include <stdint.h>
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-/*********************
- * DEFINES
- *********************/
-/*To avoid overflow don't let the max ranges (reduce with 1000) */
-#define LV_COORD_MAX ((lv_coord_t)((uint32_t)((uint32_t)1 << (8 * sizeof(lv_coord_t) - 1)) - 1000))
-#define LV_COORD_MIN (-LV_COORD_MAX)
-
-LV_EXPORT_CONST_INT(LV_COORD_MAX);
-LV_EXPORT_CONST_INT(LV_COORD_MIN);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Represents a point on the screen.
- */
-typedef struct
-{
- lv_coord_t x;
- lv_coord_t y;
-} lv_point_t;
-
-/** Represents an area of the screen. */
-typedef struct
-{
- lv_coord_t x1;
- lv_coord_t y1;
- lv_coord_t x2;
- lv_coord_t y2;
-} lv_area_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize an area
- * @param area_p pointer to an area
- * @param x1 left coordinate of the area
- * @param y1 top coordinate of the area
- * @param x2 right coordinate of the area
- * @param y2 bottom coordinate of the area
- */
-void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2);
-
-/**
- * Copy an area
- * @param dest pointer to the destination area
- * @param src pointer to the source area
- */
-inline static void lv_area_copy(lv_area_t * dest, const lv_area_t * src)
-{
- memcpy(dest, src, sizeof(lv_area_t));
-}
-
-/**
- * Get the width of an area
- * @param area_p pointer to an area
- * @return the width of the area (if x1 == x2 -> width = 1)
- */
-static inline lv_coord_t lv_area_get_width(const lv_area_t * area_p)
-{
- return (lv_coord_t)(area_p->x2 - area_p->x1 + 1);
-}
-
-/**
- * Get the height of an area
- * @param area_p pointer to an area
- * @return the height of the area (if y1 == y2 -> height = 1)
- */
-static inline lv_coord_t lv_area_get_height(const lv_area_t * area_p)
-{
- return (lv_coord_t)(area_p->y2 - area_p->y1 + 1);
-}
-
-/**
- * Set the width of an area
- * @param area_p pointer to an area
- * @param w the new width of the area (w == 1 makes x1 == x2)
- */
-void lv_area_set_width(lv_area_t * area_p, lv_coord_t w);
-
-/**
- * Set the height of an area
- * @param area_p pointer to an area
- * @param h the new height of the area (h == 1 makes y1 == y2)
- */
-void lv_area_set_height(lv_area_t * area_p, lv_coord_t h);
-
-/**
- * Set the position of an area (width and height will be kept)
- * @param area_p pointer to an area
- * @param x the new x coordinate of the area
- * @param y the new y coordinate of the area
- */
-void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y);
-
-/**
- * Return with area of an area (x * y)
- * @param area_p pointer to an area
- * @return size of area
- */
-uint32_t lv_area_get_size(const lv_area_t * area_p);
-
-/**
- * Get the common parts of two areas
- * @param res_p pointer to an area, the result will be stored her
- * @param a1_p pointer to the first area
- * @param a2_p pointer to the second area
- * @return false: the two area has NO common parts, res_p is invalid
- */
-bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const lv_area_t * a2_p);
-
-/**
- * Join two areas into a third which involves the other two
- * @param res_p pointer to an area, the result will be stored here
- * @param a1_p pointer to the first area
- * @param a2_p pointer to the second area
- */
-void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_area_t * a2_p);
-
-/**
- * Check if a point is on an area
- * @param a_p pointer to an area
- * @param p_p pointer to a point
- * @return false:the point is out of the area
- */
-bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p);
-
-/**
- * Check if two area has common parts
- * @param a1_p pointer to an area.
- * @param a2_p pointer to an other area
- * @return false: a1_p and a2_p has no common parts
- */
-bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p);
-
-/**
- * Check if an area is fully on an other
- * @param ain_p pointer to an area which could be on aholder_p
- * @param aholder pointer to an area which could involve ain_p
- * @return
- */
-bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p);
-
-/**
- * Increment or decrement an area's size by a single amount
- * @param a_p pointer to an area to grow
- * @param amount amount to increment the area, or negative to decrement
- */
-void lv_area_increment(lv_area_t * a_p, const lv_coord_t amount);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_async.c b/src/libs/lvgl/src/lv_misc/lv_async.c
deleted file mode 100644
index 2a836432..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_async.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * @file lv_async.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_async.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-static void lv_async_task_cb(lv_task_t *task);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-lv_res_t lv_async_call(lv_async_cb_t async_xcb, void * user_data)
-{
- /*Allocate an info structure */
- lv_async_info_t *info = lv_mem_alloc(sizeof(lv_async_info_t));
-
- if(info == NULL)
- return LV_RES_INV;
-
- /* Create a new task */
- /* Use highest priority so that it will run before a refresh */
- lv_task_t *task = lv_task_create(lv_async_task_cb, 0, LV_TASK_PRIO_HIGHEST, info);
-
- if(task == NULL) {
- lv_mem_free(info);
- return LV_RES_INV;
- }
-
- info->cb = async_xcb;
- info->user_data = user_data;
-
- /* Set the task's user data */
- task->user_data = info;
- lv_task_once(task);
- return LV_RES_OK;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void lv_async_task_cb(lv_task_t *task)
-{
- lv_async_info_t *info = (lv_async_info_t *)task->user_data;
-
- info->cb(info->user_data);
-
- lv_mem_free(info);
-}
diff --git a/src/libs/lvgl/src/lv_misc/lv_async.h b/src/libs/lvgl/src/lv_misc/lv_async.h
deleted file mode 100644
index 9423cd8e..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_async.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * @file lv_async.h
- *
- */
-
-#ifndef LV_ASYNC_H
-#define LV_ASYNC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_task.h"
-#include "lv_types.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Type for async callback.
- */
-typedef void (*lv_async_cb_t)(void *);
-
-typedef struct _lv_async_info_t {
- lv_async_cb_t cb;
- void *user_data;
-} lv_async_info_t;
-
-struct _lv_obj_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Call an asynchronous function the next time lv_task_handler() is run. This function is likely to return
- * **before** the call actually happens!
- * @param task_xcb a callback which is the task itself.
- * (the 'x' in the argument name indicates that its not a fully generic function because it not follows
- * the `func_name(object, callback, ...)` convention)
- * @param user_data custom parameter
- */
-lv_res_t lv_async_call(lv_async_cb_t async_xcb, void * user_data);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_bidi.c b/src/libs/lvgl/src/lv_misc/lv_bidi.c
deleted file mode 100644
index 6e50d926..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_bidi.c
+++ /dev/null
@@ -1,544 +0,0 @@
-/**
- * @file lv_bidi.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stddef.h>
-#include "lv_bidi.h"
-#include "lv_txt.h"
-#include "../lv_draw/lv_draw.h"
-
-#if LV_USE_BIDI
-
-/*********************
- * DEFINES
- *********************/
-#define LV_BIDI_BRACKLET_DEPTH 4
-
-// Highest bit of the 16-bit pos_conv value specifies whether this pos is RTL or not
-#define GET_POS(x) ((x) & 0x7FFF)
-#define IS_RTL_POS(x) (((x) & 0x8000) != 0)
-#define SET_RTL_POS(x, is_rtl) (GET_POS(x) | ((is_rtl)? 0x8000: 0))
-
-/**********************
- * TYPEDEFS
- **********************/
-typedef struct
-{
- uint32_t bracklet_pos;
- lv_bidi_dir_t dir;
-}bracket_stack_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len, uint16_t * pos_conv_len);
-static void rtl_reverse(char * dest, const char * src, uint32_t len, uint16_t *pos_conv_out, uint16_t pos_conv_rd_base, uint16_t pos_conv_len);
-static uint32_t char_change_to_pair(uint32_t letter);
-static lv_bidi_dir_t bracket_process(const char * txt, uint32_t next_pos, uint32_t len, uint32_t letter, lv_bidi_dir_t base_dir);
-static void fill_pos_conv(uint16_t * out, uint16_t len, uint16_t index);
-static uint32_t get_txt_len(const char * txt, uint32_t max_len);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static const uint8_t bracket_left[] = {"<({["};
-static const uint8_t bracket_right[] = {">)}]"};
-static bracket_stack_t br_stack[LV_BIDI_BRACKLET_DEPTH];
-static uint8_t br_stack_p;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir)
-{
- if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(str_in);
-
- uint32_t par_start = 0;
- uint32_t par_len;
-
- while(str_in[par_start] == '\n' || str_in[par_start] == '\r') {
- str_out[par_start] = str_in[par_start];
- par_start ++;
- }
-
- while(str_in[par_start] != '\0') {
- par_len = lv_bidi_get_next_paragraph(&str_in[par_start]);
- lv_bidi_process_paragraph(&str_in[par_start], &str_out[par_start], par_len, base_dir, NULL, 0);
- par_start += par_len;
-
- while(str_in[par_start] == '\n' || str_in[par_start] == '\r') {
- str_out[par_start] = str_in[par_start];
- par_start ++;
- }
- }
-
- str_out[par_start] = '\0';
-}
-
-lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt)
-{
- uint32_t i = 0;
- uint32_t letter;
- while(txt[i] != '\0') {
- letter = lv_txt_encoded_next(txt, &i);
-
- lv_bidi_dir_t dir;
- dir = lv_bidi_get_letter_dir(letter);
- if(dir == LV_BIDI_DIR_RTL || dir == LV_BIDI_DIR_LTR) return dir;
- }
-
- /*If there were no strong char earlier return with the default base dir */
- if(LV_BIDI_BASE_DIR_DEF == LV_BIDI_DIR_AUTO) return LV_BIDI_DIR_LTR;
- else return LV_BIDI_BASE_DIR_DEF;
-}
-
-lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter)
-{
- if(lv_bidi_letter_is_rtl(letter)) return LV_BIDI_DIR_RTL;
- if(lv_bidi_letter_is_neutral(letter)) return LV_BIDI_DIR_NEUTRAL;
- if(lv_bidi_letter_is_weak(letter)) return LV_BIDI_DIR_WEAK;
-
- return LV_BIDI_DIR_LTR;
-}
-
-bool lv_bidi_letter_is_weak(uint32_t letter)
-{
- uint32_t i = 0;
- static const char weaks[] = "0123456789";
-
- do {
- uint32_t x = lv_txt_encoded_next(weaks, &i);
- if(letter == x) {
- return true;
- }
- } while(weaks[i] != '\0');
-
- return false;
-}
-
-bool lv_bidi_letter_is_rtl(uint32_t letter)
-{
- if(letter >= 0x5d0 && letter <= 0x5ea) return true;
- if(letter == 0x202E) return true; /*Unicode of LV_BIDI_RLO*/
-// if(letter >= 'a' && letter <= 'z') return true;
-
- return false;
-}
-
-bool lv_bidi_letter_is_neutral(uint32_t letter)
-{
- uint16_t i;
- static const char neutrals[] = " \t\n\r.,:;'\"`!?%/\\-=()[]{}<>@#&$|";
- for(i = 0; neutrals[i] != '\0'; i++) {
- if(letter == (uint32_t)neutrals[i]) return true;
- }
-
- return false;
-}
-
-uint16_t lv_bidi_get_logical_pos(const char * str_in, char **bidi_txt, uint32_t len, lv_bidi_dir_t base_dir, uint32_t visual_pos, bool *is_rtl)
-{
- uint32_t pos_conv_len = get_txt_len(str_in, len);
- uint32_t txt_buf_size = len + 1;
- txt_buf_size = (txt_buf_size + 3) & (~0x3);
- void *buf = lv_draw_get_buf(txt_buf_size + pos_conv_len * sizeof(uint16_t));
- if (bidi_txt) *bidi_txt = buf;
- uint16_t *pos_conv_buf = (uint16_t*) ((char*)buf + txt_buf_size);
- lv_bidi_process_paragraph(str_in, bidi_txt? *bidi_txt: NULL, len, base_dir, pos_conv_buf, pos_conv_len);
- if (is_rtl) *is_rtl = IS_RTL_POS(pos_conv_buf[visual_pos]);
- return GET_POS(pos_conv_buf[visual_pos]);
-}
-
-uint16_t lv_bidi_get_visual_pos(const char * str_in, char **bidi_txt, uint16_t len, lv_bidi_dir_t base_dir, uint32_t logical_pos, bool *is_rtl)
-{
- uint32_t pos_conv_len = get_txt_len(str_in, len);
- uint32_t txt_buf_size = len + 1;
- txt_buf_size = (txt_buf_size + 3) & (~0x3);
- void *buf = lv_draw_get_buf(txt_buf_size + pos_conv_len * sizeof(uint16_t));
- if (bidi_txt) *bidi_txt = buf;
- uint16_t *pos_conv_buf = (uint16_t*) ((char*)buf + txt_buf_size);
- lv_bidi_process_paragraph(str_in, bidi_txt? *bidi_txt: NULL, len, base_dir, pos_conv_buf, pos_conv_len);
- for (uint16_t i = 0; i < pos_conv_len; i++){
- if (GET_POS(pos_conv_buf[i]) == logical_pos){
- if (is_rtl) *is_rtl = IS_RTL_POS(pos_conv_buf[i]);
- return i;
- }
- }
- return (uint16_t) -1;
-}
-
-void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir, uint16_t *pos_conv_out, uint16_t pos_conv_len)
-{
- uint32_t run_len = 0;
- lv_bidi_dir_t run_dir;
- uint32_t rd = 0;
- uint32_t wr;
- uint16_t pos_conv_run_len = 0;
- uint16_t pos_conv_rd = 0;
- uint16_t pos_conv_wr;
-
- if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(str_in);
- if(base_dir == LV_BIDI_DIR_RTL) {
- wr = len;
- pos_conv_wr = pos_conv_len;
- }
- else {
- wr = 0;
- pos_conv_wr = 0;
- }
-
- if (str_out) str_out[len] = '\0';
-
- lv_bidi_dir_t dir = base_dir;
-
- /*Empty the bracket stack*/
- br_stack_p = 0;
-
- /*Process neutral chars in the beginning*/
- while(rd < len) {
- uint32_t letter = lv_txt_encoded_next(str_in, &rd);
- pos_conv_rd++;
- dir = lv_bidi_get_letter_dir(letter);
- if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(str_in, rd, len, letter, base_dir);
- if(dir != LV_BIDI_DIR_NEUTRAL && dir != LV_BIDI_DIR_WEAK) break;
- }
-
- if(rd && str_in[rd] != '\0') {
- lv_txt_encoded_prev(str_in, &rd);
- pos_conv_rd--;
- }
-
- if(rd) {
- if(base_dir == LV_BIDI_DIR_LTR) {
- if (str_out) {
- memcpy(&str_out[wr], str_in, rd);
- wr += rd;
- }
- if (pos_conv_out) {
- fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_rd, 0);
- pos_conv_wr += pos_conv_rd;
- }
- } else {
- wr -= rd;
- pos_conv_wr -= pos_conv_rd;
- rtl_reverse(str_out? &str_out[wr]: NULL, str_in, rd, pos_conv_out? &pos_conv_out[pos_conv_wr]: NULL, 0, pos_conv_rd);
- }
- }
-
- /*Get and process the runs*/
-
- while(rd < len && str_in[rd]) {
- run_dir = get_next_run(&str_in[rd], base_dir, len - rd, &run_len, &pos_conv_run_len);
-
- if(base_dir == LV_BIDI_DIR_LTR) {
- if(run_dir == LV_BIDI_DIR_LTR) {
- if (str_out) memcpy(&str_out[wr], &str_in[rd], run_len);
- if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_run_len, pos_conv_rd);
- }
- else rtl_reverse(str_out? &str_out[wr]: NULL, &str_in[rd], run_len, pos_conv_out? &pos_conv_out[pos_conv_wr] : NULL, pos_conv_rd, pos_conv_run_len);
- wr += run_len;
- pos_conv_wr += pos_conv_run_len;
- } else {
- wr -= run_len;
- pos_conv_wr -= pos_conv_run_len;
- if(run_dir == LV_BIDI_DIR_LTR) {
- if (str_out) memcpy(&str_out[wr], &str_in[rd], run_len);
- if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_run_len, pos_conv_rd);
- }
- else rtl_reverse(str_out? &str_out[wr]: NULL, &str_in[rd], run_len, pos_conv_out? &pos_conv_out[pos_conv_wr] : NULL, pos_conv_rd, pos_conv_run_len);
- }
-
- rd += run_len;
- pos_conv_rd += pos_conv_run_len;
- }
-}
-
-uint32_t lv_bidi_get_next_paragraph(const char * txt)
-{
- uint32_t i = 0;
-
- lv_txt_encoded_next(txt, &i);
-
- while(txt[i] != '\0' && txt[i] != '\n' && txt[i] != '\r') {
- lv_txt_encoded_next(txt, &i);
- }
-
- return i;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static uint32_t get_txt_len(const char * txt, uint32_t max_len)
-{
- uint32_t len = 0;
- uint32_t i = 0;
-
- while(i < max_len && txt[i] != '\0') {
- lv_txt_encoded_next(txt, &i);
- len++;
- }
-
- return len;
-}
-
-static void fill_pos_conv(uint16_t * out, uint16_t len, uint16_t index)
-{
- for (uint16_t i = 0; i < len; i++)
- {
- out[i] = SET_RTL_POS(index, false);
- index++;
- }
-}
-
-static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len, uint16_t * pos_conv_len)
-{
- uint32_t i = 0;
- uint32_t letter;
-
- uint16_t pos_conv_i = 0;
-
- letter = lv_txt_encoded_next(txt, NULL);
- lv_bidi_dir_t dir = lv_bidi_get_letter_dir(letter);
- if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(txt, 0, max_len, letter, base_dir);
-
- /*Find the first strong char. Skip the neutrals*/
- while(dir == LV_BIDI_DIR_NEUTRAL || dir == LV_BIDI_DIR_WEAK) {
- letter = lv_txt_encoded_next(txt, &i);
- pos_conv_i++;
- dir = lv_bidi_get_letter_dir(letter);
- if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(txt, i, max_len, letter, base_dir);
-
- if(i >= max_len || txt[i] == '\0' || txt[i] == '\n' || txt[i] == '\r') {
- *len = i;
- *pos_conv_len = pos_conv_i;
- return base_dir;
- }
- }
-
- lv_bidi_dir_t run_dir = dir;
-
- uint32_t i_prev = i;
- uint32_t i_last_strong = i;
- uint16_t pos_conv_i_prev = pos_conv_i;
- uint16_t pos_conv_i_last_strong = pos_conv_i;
-
- /*Find the next char which has different direction*/
- lv_bidi_dir_t next_dir = base_dir;
- while(i_prev < max_len && txt[i] != '\0' && txt[i] != '\n' && txt[i] != '\r') {
- letter = lv_txt_encoded_next(txt, &i);
- pos_conv_i++;
- next_dir = lv_bidi_get_letter_dir(letter);
- if(next_dir == LV_BIDI_DIR_NEUTRAL) next_dir = bracket_process(txt, i, max_len, letter, base_dir);
-
- /*New dir found?*/
- if((next_dir == LV_BIDI_DIR_RTL || next_dir == LV_BIDI_DIR_LTR) && next_dir != run_dir) {
- /*Include neutrals if `run_dir == base_dir` */
- if(run_dir == base_dir) {
- *len = i_prev;
- *pos_conv_len = pos_conv_i_prev;
- }
- /*Exclude neutrals if `run_dir != base_dir` */
- else {
- *len = i_last_strong;
- *pos_conv_len = pos_conv_i_last_strong;
- }
-
- return run_dir;
- }
-
- if(next_dir != LV_BIDI_DIR_NEUTRAL) {
- i_last_strong = i;
- pos_conv_i_last_strong = pos_conv_i;
- }
-
- i_prev = i;
- pos_conv_i_prev = pos_conv_i;
- }
-
- /*Handle end of of string. Apply `base_dir` on trailing neutrals*/
-
- /*Include neutrals if `run_dir == base_dir` */
- if(run_dir == base_dir) {
- *len = i_prev;
- *pos_conv_len = pos_conv_i_prev;
- }
- /*Exclude neutrals if `run_dir != base_dir` */
- else {
- *len = i_last_strong;
- *pos_conv_len = pos_conv_i_last_strong;
- }
-
- return run_dir;
-}
-
-static void rtl_reverse(char * dest, const char * src, uint32_t len, uint16_t *pos_conv_out, uint16_t pos_conv_rd_base, uint16_t pos_conv_len)
-{
- uint32_t i = len;
- uint32_t wr = 0;
- uint16_t pos_conv_i = pos_conv_len;
- uint16_t pos_conv_wr = 0;
-
- while(i) {
- uint32_t letter = lv_txt_encoded_prev(src, &i);
- uint16_t pos_conv_letter = --pos_conv_i;
-
- /*Keep weak letters (numbers) as LTR*/
- if(lv_bidi_letter_is_weak(letter)) {
- uint32_t last_weak = i;
- uint32_t first_weak = i;
- uint16_t pos_conv_last_weak = pos_conv_i;
- uint16_t pos_conv_first_weak = pos_conv_i;
- while(i) {
- letter = lv_txt_encoded_prev(src, &i);
- pos_conv_letter = --pos_conv_i;
-
- /*No need to call `char_change_to_pair` because there not such chars here*/
-
- /*Finish on non-weak char */
- /*but treat number and currency related chars as weak*/
- if (lv_bidi_letter_is_weak(letter) == false && letter != '.' && letter != ',' && letter != '$' && letter != '%') {
- lv_txt_encoded_next(src, &i); /*Rewind one letter*/
- pos_conv_i++;
- first_weak = i;
- pos_conv_first_weak = pos_conv_i;
- break;
- }
- }
- if(i == 0) {
- first_weak = 0;
- pos_conv_first_weak = 0;
- }
-
- if (dest) memcpy(&dest[wr], &src[first_weak], last_weak - first_weak + 1);
- if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_last_weak - pos_conv_first_weak + 1, pos_conv_rd_base + pos_conv_first_weak);
- wr += last_weak - first_weak + 1;
- pos_conv_wr += pos_conv_last_weak - pos_conv_first_weak + 1;
- }
-
- /*Simply store in reversed order*/
- else {
- uint32_t letter_size = lv_txt_encoded_size((const char *)&src[i]);
- /*Swap arithmetical symbols*/
- if(letter_size == 1) {
- uint32_t new_letter = letter = char_change_to_pair(letter);
- if (dest) dest[wr] = (uint8_t)new_letter;
- if (pos_conv_out) pos_conv_out[pos_conv_wr] = SET_RTL_POS(pos_conv_rd_base + pos_conv_letter, true);
- wr++;
- pos_conv_wr++;
- }
- /*Just store the letter*/
- else {
- if (dest) memcpy(&dest[wr], &src[i], letter_size);
- if (pos_conv_out) pos_conv_out[pos_conv_wr] = SET_RTL_POS(pos_conv_rd_base + pos_conv_i, true);
- wr += letter_size;
- pos_conv_wr++;
- }
- }
- }
-}
-
-static uint32_t char_change_to_pair(uint32_t letter)
-{
-
- uint8_t i;
- for(i = 0; bracket_left[i] != '\0'; i++) {
- if(letter == bracket_left[i]) return bracket_right[i];
- }
-
- for(i = 0; bracket_right[i] != '\0'; i++) {
- if(letter == bracket_right[i]) return bracket_left[i];
- }
-
- return letter;
-}
-
-static lv_bidi_dir_t bracket_process(const char * txt, uint32_t next_pos, uint32_t len, uint32_t letter, lv_bidi_dir_t base_dir)
-{
- lv_bidi_dir_t bracket_dir = LV_BIDI_DIR_NEUTRAL;
-
- uint8_t i;
- /*Is the letter an opening bracket?*/
- for(i = 0; bracket_left[i] != '\0'; i++) {
- if(bracket_left[i] == letter) {
- /* If so find it's matching closing bracket.
- * If a char with base dir. direction is found then the brackets will have `base_dir` direction*/
- uint32_t txt_i = next_pos;
- while(txt_i < len) {
- uint32_t letter_next = lv_txt_encoded_next(txt, &txt_i);
- if(letter_next == bracket_right[i]) {
- /*Closing bracket found*/
- break;
- } else {
- /*Save the dir*/
- lv_bidi_dir_t letter_dir = lv_bidi_get_letter_dir(letter_next);
- if(letter_dir == base_dir) {
- bracket_dir = base_dir;
- }
- }
- }
-
- /*There were no matching closing bracket*/
- if(txt_i > len) return LV_BIDI_DIR_NEUTRAL;
-
- /*There where a strong char with base dir in the bracket so the dir is found.*/
- if(bracket_dir != LV_BIDI_DIR_NEUTRAL && bracket_dir != LV_BIDI_DIR_WEAK) break;
-
- /*If there were no matching strong chars in the brackets then check the previous chars*/
- txt_i = next_pos;
- if(txt_i) lv_txt_encoded_prev(txt, &txt_i);
- while(txt_i > 0) {
- uint32_t letter_next = lv_txt_encoded_prev(txt, &txt_i);
- lv_bidi_dir_t letter_dir = lv_bidi_get_letter_dir(letter_next);
- if(letter_dir == LV_BIDI_DIR_LTR || letter_dir == LV_BIDI_DIR_RTL) {
- bracket_dir = letter_dir;
- break;
- }
- }
-
-
- /*There where a previous strong char which can be used*/
- if(bracket_dir != LV_BIDI_DIR_NEUTRAL) break;
-
- /*There were no strong chars before the bracket, so use the base dir.*/
- if(txt_i == 0) bracket_dir = base_dir;
-
- break;
- }
- }
-
-
- /*The letter was an opening bracket*/
- if(bracket_left[i] != '\0') {
-
- if(bracket_dir == LV_BIDI_DIR_NEUTRAL || br_stack_p == LV_BIDI_BRACKLET_DEPTH) return LV_BIDI_DIR_NEUTRAL;
-
- br_stack[br_stack_p].bracklet_pos = i;
- br_stack[br_stack_p].dir = bracket_dir;
-
- br_stack_p++;
- return bracket_dir;
- } else if(br_stack_p > 0) {
- /*Is the letter a closing bracket of the last opening?*/
- if(letter == bracket_right[br_stack[br_stack_p - 1].bracklet_pos]) {
- bracket_dir = br_stack[br_stack_p - 1].dir;
- br_stack_p--;
- return bracket_dir;
- }
- }
-
- return LV_BIDI_DIR_NEUTRAL;
-}
-
-
-#endif /*LV_USE_BIDI*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_bidi.h b/src/libs/lvgl/src/lv_misc/lv_bidi.h
deleted file mode 100644
index 215727aa..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_bidi.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * @file lv_bifi.h
- *
- */
-
-#ifndef LV_BIDI_H
-#define LV_BIDI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-
-/*********************
- * DEFINES
- *********************/
-/* Special non printable strong characters.
- * They can be inserted to texts to affect the run's direction*/
-#define LV_BIDI_LRO "\xE2\x80\xAD" /*U+202D*/
-#define LV_BIDI_RLO "\xE2\x80\xAE" /*U+202E*/
-
-/**********************
- * TYPEDEFS
- **********************/
-enum
-{
- /*The first 4 values are stored in `lv_obj_t` on 2 bits*/
- LV_BIDI_DIR_LTR = 0x00,
- LV_BIDI_DIR_RTL = 0x01,
- LV_BIDI_DIR_AUTO = 0x02,
- LV_BIDI_DIR_INHERIT = 0x03,
-
- LV_BIDI_DIR_NEUTRAL = 0x20,
- LV_BIDI_DIR_WEAK = 0x21,
-};
-
-typedef uint8_t lv_bidi_dir_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-#if LV_USE_BIDI
-
-void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir);
-void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir, uint16_t *pos_conv_out, uint16_t pos_conv_len);
-uint32_t lv_bidi_get_next_paragraph(const char * txt);
-lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt);
-lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter);
-bool lv_bidi_letter_is_weak(uint32_t letter);
-bool lv_bidi_letter_is_rtl(uint32_t letter);
-bool lv_bidi_letter_is_neutral(uint32_t letter);
-uint16_t lv_bidi_get_logical_pos(const char * str_in, char **bidi_txt, uint32_t len, lv_bidi_dir_t base_dir, uint32_t visual_pos, bool *is_rtl);
-uint16_t lv_bidi_get_visual_pos(const char * str_in, char **bidi_txt, uint16_t len, lv_bidi_dir_t base_dir, uint32_t logical_pos, bool *is_rtl);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_BIDI*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_BIDI_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_circ.c b/src/libs/lvgl/src/lv_misc/lv_circ.c
deleted file mode 100644
index fc0e3e20..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_circ.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * @file lv_circ.c
- * Circle drawing algorithm (with Bresenham)
- * Only a 1/8 circle is calculated. Use CIRC_OCT1_X, CIRC_OCT1_Y macros to get
- * the other octets.
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_circ.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the circle drawing
- * @param c pointer to a point. The coordinates will be calculated here
- * @param tmp point to a variable. It will store temporary data
- * @param radius radius of the circle
- */
-void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius)
-{
- c->x = radius;
- c->y = 0;
- *tmp = 1 - radius;
-}
-
-/**
- * Test the circle drawing is ready or not
- * @param c same as in circ_init
- * @return true if the circle is not ready yet
- */
-bool lv_circ_cont(lv_point_t * c)
-{
- return c->y <= c->x ? true : false;
-}
-
-/**
- * Get the next point from the circle
- * @param c same as in circ_init. The next point stored here.
- * @param tmp same as in circ_init.
- */
-void lv_circ_next(lv_point_t * c, lv_coord_t * tmp)
-{
- c->y++;
-
- if(*tmp <= 0) {
- (*tmp) += 2 * c->y + 1; /*Change in decision criterion for y -> y+1*/
- } else {
- c->x--;
- (*tmp) += 2 * (c->y - c->x) + 1; /*Change for y -> y+1, x -> x-1*/
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_circ.h b/src/libs/lvgl/src/lv_misc/lv_circ.h
deleted file mode 100644
index 405a4b6c..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_circ.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * @file lv_circ.h
- *
- */
-
-#ifndef LV_CIRC_H
-#define LV_CIRC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <stddef.h>
-#include "lv_area.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_CIRC_OCT1_X(p) (p.x)
-#define LV_CIRC_OCT1_Y(p) (p.y)
-#define LV_CIRC_OCT2_X(p) (p.y)
-#define LV_CIRC_OCT2_Y(p) (p.x)
-#define LV_CIRC_OCT3_X(p) (-p.y)
-#define LV_CIRC_OCT3_Y(p) (p.x)
-#define LV_CIRC_OCT4_X(p) (-p.x)
-#define LV_CIRC_OCT4_Y(p) (p.y)
-#define LV_CIRC_OCT5_X(p) (-p.x)
-#define LV_CIRC_OCT5_Y(p) (-p.y)
-#define LV_CIRC_OCT6_X(p) (-p.y)
-#define LV_CIRC_OCT6_Y(p) (-p.x)
-#define LV_CIRC_OCT7_X(p) (p.y)
-#define LV_CIRC_OCT7_Y(p) (-p.x)
-#define LV_CIRC_OCT8_X(p) (p.x)
-#define LV_CIRC_OCT8_Y(p) (-p.y)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the circle drawing
- * @param c pointer to a point. The coordinates will be calculated here
- * @param tmp point to a variable. It will store temporary data
- * @param radius radius of the circle
- */
-void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius);
-
-/**
- * Test the circle drawing is ready or not
- * @param c same as in circ_init
- * @return true if the circle is not ready yet
- */
-bool lv_circ_cont(lv_point_t * c);
-
-/**
- * Get the next point from the circle
- * @param c same as in circ_init. The next point stored here.
- * @param tmp same as in circ_init.
- */
-void lv_circ_next(lv_point_t * c, lv_coord_t * tmp);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_color.c b/src/libs/lvgl/src/lv_misc/lv_color.c
deleted file mode 100644
index cd4825df..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_color.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * @file lv_color.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_color.h"
-#include "lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Convert a HSV color to RGB
- * @param h hue [0..359]
- * @param s saturation [0..100]
- * @param v value [0..100]
- * @return the given RGB color in RGB (with LV_COLOR_DEPTH depth)
- */
-lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)
-{
- h = (uint32_t)((uint32_t)h * 255) / 360;
- s = (uint16_t)((uint16_t)s * 255) / 100;
- v = (uint16_t)((uint16_t)v * 255) / 100;
-
- uint8_t r, g, b;
-
- uint8_t region, remainder, p, q, t;
-
- if(s == 0) {
- r = v;
- g = v;
- b = v;
- return lv_color_make(v, v, v);
- }
-
- region = h / 43;
- remainder = (h - (region * 43)) * 6;
-
- p = (v * (255 - s)) >> 8;
- q = (v * (255 - ((s * remainder) >> 8))) >> 8;
- t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
-
- switch(region) {
- case 0:
- r = v;
- g = t;
- b = p;
- break;
- case 1:
- r = q;
- g = v;
- b = p;
- break;
- case 2:
- r = p;
- g = v;
- b = t;
- break;
- case 3:
- r = p;
- g = q;
- b = v;
- break;
- case 4:
- r = t;
- g = p;
- b = v;
- break;
- default:
- r = v;
- g = p;
- b = q;
- break;
- }
-
- lv_color_t result = lv_color_make(r, g, b);
- return result;
-}
-
-/**
- * Convert a 32-bit RGB color to HSV
- * @param r8 8-bit red
- * @param g8 8-bit green
- * @param b8 8-bit blue
- * @return the given RGB color in HSV
- */
-lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r8, uint8_t g8, uint8_t b8)
-{
- uint16_t r = ((uint32_t)r8 << 10) / 255;
- uint16_t g = ((uint32_t)g8 << 10) / 255;
- uint16_t b = ((uint32_t)b8 << 10) / 255;
-
- uint16_t rgbMin = r < g ? (r < b ? r : b) : (g < b ? g : b);
- uint16_t rgbMax = r > g ? (r > b ? r : b) : (g > b ? g : b);
-
- lv_color_hsv_t hsv;
-
- // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness
- hsv.v = (100 * rgbMax) >> 10;
-
- int32_t delta = rgbMax - rgbMin;
- if (LV_MATH_ABS(delta) < 3) {
- hsv.h = 0;
- hsv.s = 0;
- return hsv;
- }
-
- // https://en.wikipedia.org/wiki/HSL_and_HSV#Saturation
- hsv.s = 100 * delta / rgbMax;
- if(hsv.s < 3) {
- hsv.h = 0;
- return hsv;
- }
-
- // https://en.wikipedia.org/wiki/HSL_and_HSV#Hue_and_chroma
- int32_t h;
- if(rgbMax == r)
- h = (((g - b) << 10) / delta) + (g < b ? (6 << 10) : 0); // between yellow & magenta
- else if(rgbMax == g)
- h = (((b - r) << 10) / delta) + (2 << 10); // between cyan & yellow
- else if(rgbMax == b)
- h = (((r - g) << 10) / delta) + (4 << 10); // between magenta & cyan
- else
- h = 0;
- h *= 60;
- h >>= 10;
- if (h < 0) h += 360;
-
- hsv.h = h;
- return hsv;
-}
-
-/**
- * Convert a color to HSV
- * @param color color
- * @return the given color in HSV
- */
-lv_color_hsv_t lv_color_to_hsv(lv_color_t color)
-{
- lv_color32_t color32;
- color32.full = lv_color_to32(color);
- return lv_color_rgb_to_hsv(color32.ch.red, color32.ch.green, color32.ch.blue);
-}
diff --git a/src/libs/lvgl/src/lv_misc/lv_color.h b/src/libs/lvgl/src/lv_misc/lv_color.h
deleted file mode 100644
index 1febbdce..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_color.h
+++ /dev/null
@@ -1,526 +0,0 @@
-/**
- * @file lv_color.h
- *
- */
-
-#ifndef LV_COLOR_H
-#define LV_COLOR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-/*Error checking*/
-#if LV_COLOR_DEPTH == 24
-#error "LV_COLOR_DEPTH 24 is deprecated. Use LV_COLOR_DEPTH 32 instead (lv_conf.h)"
-#endif
-
-#if LV_COLOR_DEPTH != 32 && LV_COLOR_SCREEN_TRANSP != 0
-#error "LV_COLOR_SCREEN_TRANSP requires LV_COLOR_DEPTH == 32. Set it in lv_conf.h"
-#endif
-
-#if LV_COLOR_DEPTH != 16 && LV_COLOR_16_SWAP != 0
-#error "LV_COLOR_16_SWAP requires LV_COLOR_DEPTH == 16. Set it in lv_conf.h"
-#endif
-
-#include <stdint.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_COLOR_WHITE LV_COLOR_MAKE(0xFF, 0xFF, 0xFF)
-#define LV_COLOR_SILVER LV_COLOR_MAKE(0xC0, 0xC0, 0xC0)
-#define LV_COLOR_GRAY LV_COLOR_MAKE(0x80, 0x80, 0x80)
-#define LV_COLOR_BLACK LV_COLOR_MAKE(0x00, 0x00, 0x00)
-#define LV_COLOR_RED LV_COLOR_MAKE(0xFF, 0x00, 0x00)
-#define LV_COLOR_MAROON LV_COLOR_MAKE(0x80, 0x00, 0x00)
-#define LV_COLOR_YELLOW LV_COLOR_MAKE(0xFF, 0xFF, 0x00)
-#define LV_COLOR_OLIVE LV_COLOR_MAKE(0x80, 0x80, 0x00)
-#define LV_COLOR_LIME LV_COLOR_MAKE(0x00, 0xFF, 0x00)
-#define LV_COLOR_GREEN LV_COLOR_MAKE(0x00, 0x80, 0x00)
-#define LV_COLOR_CYAN LV_COLOR_MAKE(0x00, 0xFF, 0xFF)
-#define LV_COLOR_AQUA LV_COLOR_CYAN
-#define LV_COLOR_TEAL LV_COLOR_MAKE(0x00, 0x80, 0x80)
-#define LV_COLOR_BLUE LV_COLOR_MAKE(0x00, 0x00, 0xFF)
-#define LV_COLOR_NAVY LV_COLOR_MAKE(0x00, 0x00, 0x80)
-#define LV_COLOR_MAGENTA LV_COLOR_MAKE(0xFF, 0x00, 0xFF)
-#define LV_COLOR_PURPLE LV_COLOR_MAKE(0x80, 0x00, 0x80)
-#define LV_COLOR_ORANGE LV_COLOR_MAKE(0xFF, 0xA5, 0x00)
-
-/**
- * Opacity percentages.
- */
-enum {
- LV_OPA_TRANSP = 0,
- LV_OPA_0 = 0,
- LV_OPA_10 = 25,
- LV_OPA_20 = 51,
- LV_OPA_30 = 76,
- LV_OPA_40 = 102,
- LV_OPA_50 = 127,
- LV_OPA_60 = 153,
- LV_OPA_70 = 178,
- LV_OPA_80 = 204,
- LV_OPA_90 = 229,
- LV_OPA_100 = 255,
- LV_OPA_COVER = 255,
-};
-
-#define LV_OPA_MIN 16 /*Opacities below this will be transparent*/
-#define LV_OPA_MAX 251 /*Opacities above this will fully cover*/
-
-#if LV_COLOR_DEPTH == 1
-#define LV_COLOR_SIZE 8
-#elif LV_COLOR_DEPTH == 8
-#define LV_COLOR_SIZE 8
-#elif LV_COLOR_DEPTH == 16
-#define LV_COLOR_SIZE 16
-#elif LV_COLOR_DEPTH == 32
-#define LV_COLOR_SIZE 32
-#else
-#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
-#endif
-
-/*---------------------------------------
- * Macros for all existing color depths
- * to set/get values of the color channels
- *------------------------------------------*/
-# define LV_COLOR_SET_R1(c, v) (c).ch.red = (uint8_t)((v) & 0x1);
-# define LV_COLOR_SET_G1(c, v) (c).ch.green = (uint8_t)((v) & 0x1);
-# define LV_COLOR_SET_B1(c, v) (c).ch.blue = (uint8_t)((v) & 0x1);
-# define LV_COLOR_SET_A1(c, v)
-
-# define LV_COLOR_GET_R1(c) (c).ch.red
-# define LV_COLOR_GET_G1(c) (c).ch.green
-# define LV_COLOR_GET_B1(c) (c).ch.blue
-# define LV_COLOR_GET_A1(c) 1
-
-# define LV_COLOR_SET_R8(c, v) (c).ch.red = (uint8_t)(v) & 0x7U;
-# define LV_COLOR_SET_G8(c, v) (c).ch.green = (uint8_t)(v) & 0x7U;
-# define LV_COLOR_SET_B8(c, v) (c).ch.blue = (uint8_t)(v) & 0x3U;
-# define LV_COLOR_SET_A8(c, v) do {} while(0)
-
-# define LV_COLOR_GET_R8(c) (c).ch.red
-# define LV_COLOR_GET_G8(c) (c).ch.green
-# define LV_COLOR_GET_B8(c) (c).ch.blue
-# define LV_COLOR_GET_A8(c) 0xFF
-
-# define LV_COLOR_SET_R16(c, v) (c).ch.red = (uint8_t)(v) & 0x1FU;
-# define LV_COLOR_SET_G16(c, v) (c).ch.green = (uint8_t)(v) & 0x3FU;
-# define LV_COLOR_SET_G16_SWAP(c, v) {(c).ch.green_h = (uint8_t)(((v) >> 3) & 0x7); (c).ch.green_l = (uint8_t)((v) & 0x7);}
-# define LV_COLOR_SET_B16(c, v) (c).ch.blue = (uint8_t)(v) & 0x1FU;
-# define LV_COLOR_SET_A16(c, v) do {} while(0)
-
-# define LV_COLOR_GET_R16(c) (c).ch.red
-# define LV_COLOR_GET_G16(c) (c).ch.green
-# define LV_COLOR_GET_G16_SWAP(c) (((c).ch.green_h << 3) + (c).ch.green_l)
-# define LV_COLOR_GET_B16(c) (c).ch.blue
-# define LV_COLOR_GET_A16(c) 0xFF
-
-# define LV_COLOR_SET_R32(c, v) (c).ch.red = (uint32_t)((v) & 0xFF);
-# define LV_COLOR_SET_G32(c, v) (c).ch.green = (uint32_t)((v) & 0xFF);
-# define LV_COLOR_SET_B32(c, v) (c).ch.blue = (uint32_t)((v) & 0xFF);
-# define LV_COLOR_SET_A32(c, v) (c).ch.alpha = (uint32_t)((v) & 0xFF);
-
-# define LV_COLOR_GET_R32(c) (c).ch.red
-# define LV_COLOR_GET_G32(c) (c).ch.green
-# define LV_COLOR_GET_B32(c) (c).ch.blue
-# define LV_COLOR_GET_A32(c) (c).ch.alpha
-
-
-/*---------------------------------------
- * Macros for the current color depth
- * to set/get values of the color channels
- *------------------------------------------*/
-#if LV_COLOR_DEPTH == 1
-# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R1(c,v)
-# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G1(c,v)
-# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B1(c,v)
-# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A1(c,v)
-
-# define LV_COLOR_GET_R(c) LV_COLOR_GET_R1(c)
-# define LV_COLOR_GET_G(c) LV_COLOR_GET_G1(c)
-# define LV_COLOR_GET_B(c) LV_COLOR_GET_B1(c)
-# define LV_COLOR_GET_A(c) LV_COLOR_GET_A1(c)
-
-#elif LV_COLOR_DEPTH == 8
-# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R8(c,v)
-# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G8(c,v)
-# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B8(c,v)
-# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A8(c,v)
-
-# define LV_COLOR_GET_R(c) LV_COLOR_GET_R8(c)
-# define LV_COLOR_GET_G(c) LV_COLOR_GET_G8(c)
-# define LV_COLOR_GET_B(c) LV_COLOR_GET_B8(c)
-# define LV_COLOR_GET_A(c) LV_COLOR_GET_A8(c)
-
-#elif LV_COLOR_DEPTH == 16
-# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R16(c,v)
-# if LV_COLOR_16_SWAP == 0
-# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G16(c,v)
-# else
-# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G16_SWAP(c,v)
-# endif
-# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B16(c,v)
-# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A16(c,v)
-
-# define LV_COLOR_GET_R(c) LV_COLOR_GET_R16(c)
-# if LV_COLOR_16_SWAP == 0
-# define LV_COLOR_GET_G(c) LV_COLOR_GET_G16(c)
-# else
-# define LV_COLOR_GET_G(c) LV_COLOR_GET_G16_SWAP(c)
-# endif
-# define LV_COLOR_GET_B(c) LV_COLOR_GET_B16(c)
-# define LV_COLOR_GET_A(c) LV_COLOR_GET_A16(c)
-
-#elif LV_COLOR_DEPTH == 32
-# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R32(c,v)
-# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G32(c,v)
-# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B32(c,v)
-# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A32(c,v)
-
-# define LV_COLOR_GET_R(c) LV_COLOR_GET_R32(c)
-# define LV_COLOR_GET_G(c) LV_COLOR_GET_G32(c)
-# define LV_COLOR_GET_B(c) LV_COLOR_GET_B32(c)
-# define LV_COLOR_GET_A(c) LV_COLOR_GET_A32(c)
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-typedef union
-{
- struct
- {
- uint8_t blue : 1;
- uint8_t green : 1;
- uint8_t red : 1;
- } ch;
- uint8_t full;
-} lv_color1_t;
-
-typedef union
-{
- struct
- {
- uint8_t blue : 2;
- uint8_t green : 3;
- uint8_t red : 3;
- } ch;
- uint8_t full;
-} lv_color8_t;
-
-typedef union
-{
- struct
- {
-#if LV_COLOR_16_SWAP == 0
- uint16_t blue : 5;
- uint16_t green : 6;
- uint16_t red : 5;
-#else
- uint16_t green_h : 3;
- uint16_t red : 5;
- uint16_t blue : 5;
- uint16_t green_l : 3;
-#endif
- } ch;
- uint16_t full;
-} lv_color16_t;
-
-typedef union
-{
- struct
- {
- uint8_t blue;
- uint8_t green;
- uint8_t red;
- uint8_t alpha;
- } ch;
- uint32_t full;
-} lv_color32_t;
-
-#if LV_COLOR_DEPTH == 1
-typedef uint8_t lv_color_int_t;
-typedef lv_color1_t lv_color_t;
-#elif LV_COLOR_DEPTH == 8
-typedef uint8_t lv_color_int_t;
-typedef lv_color8_t lv_color_t;
-#elif LV_COLOR_DEPTH == 16
-typedef uint16_t lv_color_int_t;
-typedef lv_color16_t lv_color_t;
-#elif LV_COLOR_DEPTH == 32
-typedef uint32_t lv_color_int_t;
-typedef lv_color32_t lv_color_t;
-#else
-#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
-#endif
-
-typedef uint8_t lv_opa_t;
-
-typedef struct
-{
- uint16_t h;
- uint8_t s;
- uint8_t v;
-} lv_color_hsv_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/*In color conversations:
- * - When converting to bigger color type the LSB weight of 1 LSB is calculated
- * E.g. 16 bit Red has 5 bits
- * 8 bit Red has 2 bits
- * ----------------------
- * 8 bit red LSB = (2^5 - 1) / (2^2 - 1) = 31 / 3 = 10
- *
- * - When calculating to smaller color type simply shift out the LSBs
- * E.g. 8 bit Red has 2 bits
- * 16 bit Red has 5 bits
- * ----------------------
- * Shift right with 5 - 3 = 2
- */
-
-static inline uint8_t lv_color_to1(lv_color_t color)
-{
-#if LV_COLOR_DEPTH == 1
- return color.full;
-#elif LV_COLOR_DEPTH == 8
- if((LV_COLOR_GET_R(color) & 0x4) || (LV_COLOR_GET_G(color) & 0x4) || (LV_COLOR_GET_B(color) & 0x2)) {
- return 1;
- } else {
- return 0;
- }
-#elif LV_COLOR_DEPTH == 16
- if((LV_COLOR_GET_R(color) & 0x10) || (LV_COLOR_GET_G(color) & 0x20) || (LV_COLOR_GET_B(color) & 0x10)) {
- return 1;
- } else {
- return 0;
- }
-#elif LV_COLOR_DEPTH == 32
- if((LV_COLOR_GET_R(color) & 0x80) || (LV_COLOR_GET_G(color) & 0x80) || (LV_COLOR_GET_B(color) & 0x80)) {
- return 1;
- } else {
- return 0;
- }
-#endif
-}
-
-static inline uint8_t lv_color_to8(lv_color_t color)
-{
-#if LV_COLOR_DEPTH == 1
- if(color.full == 0)
- return 0;
- else
- return 0xFF;
-#elif LV_COLOR_DEPTH == 8
- return color.full;
-#elif LV_COLOR_DEPTH == 16
- lv_color8_t ret;
- LV_COLOR_SET_R8(ret, LV_COLOR_GET_R(color) >> 2); /* 5 - 3 = 2*/
- LV_COLOR_SET_G8(ret, LV_COLOR_GET_G(color) >> 3); /* 6 - 3 = 3*/
- LV_COLOR_SET_B8(ret, LV_COLOR_GET_B(color) >> 3); /* 5 - 2 = 3*/
- return ret.full;
-#elif LV_COLOR_DEPTH == 32
- lv_color8_t ret;
- LV_COLOR_SET_R8(ret, LV_COLOR_GET_R(color) >> 5); /* 8 - 3 = 5*/
- LV_COLOR_SET_G8(ret, LV_COLOR_GET_G(color) >> 5); /* 8 - 3 = 5*/
- LV_COLOR_SET_B8(ret, LV_COLOR_GET_B(color) >> 6); /* 8 - 2 = 6*/
- return ret.full;
-#endif
-}
-
-static inline uint16_t lv_color_to16(lv_color_t color)
-{
-#if LV_COLOR_DEPTH == 1
- if(color.full == 0)
- return 0;
- else
- return 0xFFFF;
-#elif LV_COLOR_DEPTH == 8
- lv_color16_t ret;
- LV_COLOR_SET_R16(ret, LV_COLOR_GET_R(color) * 4); /*(2^5 - 1)/(2^3 - 1) = 31/7 = 4*/
-#if LV_COLOR_16_SWAP == 0
- LV_COLOR_SET_G16(ret, LV_COLOR_GET_G(color) * 9); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
-#else
- LV_COLOR_SET_G16_SWAP(ret, (LV_COLOR_GET_G(color) * 9)); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
-#endif
- LV_COLOR_SET_B16(ret, LV_COLOR_GET_B(color) * 10); /*(2^5 - 1)/(2^2 - 1) = 31/3 = 10*/
- return ret.full;
-#elif LV_COLOR_DEPTH == 16
- return color.full;
-#elif LV_COLOR_DEPTH == 32
- lv_color16_t ret;
- LV_COLOR_SET_R16(ret, LV_COLOR_GET_R(color) >> 3); /* 8 - 5 = 3*/
-
-#if LV_COLOR_16_SWAP == 0
- LV_COLOR_SET_G16(ret, LV_COLOR_GET_G(color) >> 2); /* 8 - 6 = 2*/
-#else
- LV_COLOR_SET_G16_SWAP(ret, ret.ch.green_h = (LV_COLOR_GET_G(color) >> 2); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
-#endif
- LV_COLOR_SET_B16(ret, LV_COLOR_GET_B(color) >> 3); /* 8 - 5 = 3*/
- return ret.full;
-#endif
-}
-
-static inline uint32_t lv_color_to32(lv_color_t color)
-{
-#if LV_COLOR_DEPTH == 1
- if(color.full == 0)
- return 0;
- else
- return 0xFFFFFFFF;
-#elif LV_COLOR_DEPTH == 8
- lv_color32_t ret;
- LV_COLOR_SET_R32(ret, LV_COLOR_GET_R(color) * 36); /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
- LV_COLOR_SET_G32(ret, LV_COLOR_GET_G(color) * 36); /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
- LV_COLOR_SET_B32(ret, LV_COLOR_GET_B(color) * 85); /*(2^8 - 1)/(2^2 - 1) = 255/3 = 85*/
- LV_COLOR_SET_A32(ret, 0xFF);
- return ret.full;
-#elif LV_COLOR_DEPTH == 16
- /**
- * The floating point math for conversion is:
- * valueto = valuefrom * ( (2^bitsto - 1) / (float)(2^bitsfrom - 1) )
- * The faster integer math for conversion is:
- * valueto = ( valuefrom * multiplier + adder ) >> divisor
- * multiplier = FLOOR( ( (2^bitsto - 1) << divisor ) / (float)(2^bitsfrom - 1) )
- *
- * Find the first divisor where ( adder >> divisor ) <= 0
- *
- * 5-bit to 8-bit: ( 31 * multiplier + adder ) >> divisor = 255
- * divisor multiplier adder min (0) max (31)
- * 0 8 7 7 255
- * 1 16 14 7 255
- * 2 32 28 7 255
- * 3 65 25 3 255
- * 4 131 19 1 255
- * 5 263 7 0 255
- *
- * 6-bit to 8-bit: 255 = ( 63 * multiplier + adder ) >> divisor
- * divisor multiplier adder min (0) max (63)
- * 0 4 3 3 255
- * 1 8 6 3 255
- * 2 16 12 3 255
- * 3 32 24 3 255
- * 4 64 48 3 255
- * 5 129 33 1 255
- * 6 259 3 0 255
- */
- lv_color32_t ret;
- LV_COLOR_SET_R32(ret, (LV_COLOR_GET_R(color) * 263 + 7 ) >> 5);
- LV_COLOR_SET_G32(ret, (LV_COLOR_GET_G(color) * 259 + 3 ) >> 6);
- LV_COLOR_SET_B32(ret, (LV_COLOR_GET_B(color) * 263 + 7 ) >> 5);
- LV_COLOR_SET_A32(ret, 0xFF);
- return ret.full;
-#elif LV_COLOR_DEPTH == 32
- return color.full;
-#endif
-}
-
-static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix)
-{
- lv_color_t ret;
-#if LV_COLOR_DEPTH != 1
- /*LV_COLOR_DEPTH == 8, 16 or 32*/
- LV_COLOR_SET_R(ret, (uint16_t)((uint16_t) LV_COLOR_GET_R(c1) * mix + LV_COLOR_GET_R(c2) * (255 - mix)) >> 8);
- LV_COLOR_SET_G(ret, (uint16_t)((uint16_t) LV_COLOR_GET_G(c1) * mix + LV_COLOR_GET_G(c2) * (255 - mix)) >> 8);
- LV_COLOR_SET_B(ret, (uint16_t)((uint16_t) LV_COLOR_GET_B(c1) * mix + LV_COLOR_GET_B(c2) * (255 - mix)) >> 8);
- LV_COLOR_SET_A(ret, 0xFF);
-#else
- /*LV_COLOR_DEPTH == 1*/
- ret.full = mix > LV_OPA_50 ? c1.full : c2.full;
-#endif
-
- return ret;
-}
-
-/**
- * Get the brightness of a color
- * @param color a color
- * @return the brightness [0..255]
- */
-static inline uint8_t lv_color_brightness(lv_color_t color)
-{
- lv_color32_t c32;
- c32.full = lv_color_to32(color);
- uint16_t bright = (uint16_t)(3u * LV_COLOR_GET_R32(c32) + LV_COLOR_GET_B32(c32) + 4u * LV_COLOR_GET_G32(c32));
- return (uint8_t)(bright >> 3);
-}
-
-/* The most simple macro to create a color from R,G and B values */
-#if LV_COLOR_DEPTH == 1
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){.full = (uint8_t)((b8 >> 7) | (g8 >> 7) | (r8 >> 7))})
-#elif LV_COLOR_DEPTH == 8
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(uint8_t)((b8 >> 6) & 0x3U), (uint8_t)((g8 >> 5) & 0x7U), (uint8_t)((r8 >> 5) & 0x7U)}})
-#elif LV_COLOR_DEPTH == 16
-#if LV_COLOR_16_SWAP == 0
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(uint16_t)((b8 >> 3) & 0x1FU), (uint16_t)((g8 >> 2) & 0x3FU), (uint16_t)((r8 >> 3) & 0x1FU)}})
-#else
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(uint16_t)((g8 >> 5) & 0x7U), (uint16_t)((r8 >> 3) & 0x1FU), (uint16_t)((b8 >> 3) & 0x1FU), (uint16_t)((g8 >> 2) & 0x7U)}})
-#endif
-#elif LV_COLOR_DEPTH == 32
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8, g8, r8, 0xff}}) /*Fix 0xff alpha*/
-#endif
-
-static inline lv_color_t lv_color_make(uint8_t r, uint8_t g, uint8_t b)
-{
- return LV_COLOR_MAKE(r, g, b);
-}
-
-static inline lv_color_t lv_color_hex(uint32_t c)
-{
- return lv_color_make((uint8_t)((c >> 16) & 0xFF), (uint8_t)((c >> 8) & 0xFF), (uint8_t)(c & 0xFF));
-}
-
-static inline lv_color_t lv_color_hex3(uint32_t c)
-{
- return lv_color_make((uint8_t)(((c >> 4) & 0xF0) | ((c >> 8) & 0xF)), (uint8_t)((c & 0xF0) | ((c & 0xF0) >> 4)),
- (uint8_t)((c & 0xF) | ((c & 0xF) << 4)));
-}
-
-/**
- * Convert a HSV color to RGB
- * @param h hue [0..359]
- * @param s saturation [0..100]
- * @param v value [0..100]
- * @return the given RGB color in RGB (with LV_COLOR_DEPTH depth)
- */
-lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v);
-
-/**
- * Convert a 32-bit RGB color to HSV
- * @param r8 8-bit red
- * @param g8 8-bit green
- * @param b8 8-bit blue
- * @return the given RGB color in HSV
- */
-lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r8, uint8_t g8, uint8_t b8);
-
-/**
- * Convert a color to HSV
- * @param color color
- * @return the given color in HSV
- */
-lv_color_hsv_t lv_color_to_hsv(lv_color_t color);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*USE_COLOR*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_fs.c b/src/libs/lvgl/src/lv_misc/lv_fs.c
deleted file mode 100644
index a23081ce..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_fs.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/**
- * @file lv_fs.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_fs.h"
-#if LV_USE_FILESYSTEM
-
-#include "../lv_core/lv_debug.h"
-#include "lv_ll.h"
-#include <string.h>
-#include "lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/* "free" is used as a function pointer (in lv_fs_drv_t).
- * We must make sure "free" was not defined to a platform specific
- * free function, otherwise compilation would fail.
- */
-#ifdef free
-#undef free
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static const char * lv_fs_get_real_path(const char * path);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the File system interface
- */
-void lv_fs_init(void)
-{
- lv_ll_init(&LV_GC_ROOT(_lv_drv_ll), sizeof(lv_fs_drv_t));
-}
-
-/**
- * Test if a drive is rady or not. If the `ready` function was not initialized `true` will be
- * returned.
- * @param letter letter of the drive
- * @return true: drive is ready; false: drive is not ready
- */
-bool lv_fs_is_ready(char letter)
-{
- lv_fs_drv_t * drv = lv_fs_get_drv(letter);
-
- if(drv == NULL) return false; /*An unknown driver in not ready*/
-
- if(drv->ready_cb == NULL) return true; /*Assume the driver is always ready if no handler provided*/
-
- return drv->ready_cb(drv);
-}
-
-/**
- * Open a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param path path to the file beginning with the driver letter (e.g. S:/folder/file.txt)
- * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode)
-{
- file_p->drv = NULL;
- file_p->file_d = NULL;
-
- if(path == NULL) return LV_FS_RES_INV_PARAM;
-
- char letter = path[0];
-
- file_p->drv = lv_fs_get_drv(letter);
-
- if(file_p->drv == NULL) {
- file_p->file_d = NULL;
- return LV_FS_RES_NOT_EX;
- }
-
- if(file_p->drv->ready_cb != NULL) {
- if(file_p->drv->ready_cb(file_p->drv) == false) {
- file_p->drv = NULL;
- file_p->file_d = NULL;
- return LV_FS_RES_HW_ERR;
- }
- }
-
- file_p->file_d = lv_mem_alloc(file_p->drv->file_size);
- LV_ASSERT_MEM(file_p->file_d);
- if(file_p->file_d == NULL) {
- file_p->drv = NULL;
- return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
- }
-
- if(file_p->drv->open_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- const char * real_path = lv_fs_get_real_path(path);
- lv_fs_res_t res = file_p->drv->open_cb(file_p->drv, file_p->file_d, real_path, mode);
-
- if(res != LV_FS_RES_OK) {
- lv_mem_free(file_p->file_d);
- file_p->file_d = NULL;
- file_p->drv = NULL;
- }
-
- return res;
-}
-
-/**
- * Close an already opened file
- * @param file_p pointer to a lv_fs_file_t variable
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
-{
- if(file_p->drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->close_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d);
-
- lv_mem_free(file_p->file_d); /*Clean up*/
- file_p->file_d = NULL;
- file_p->drv = NULL;
- file_p->file_d = NULL;
-
- return res;
-}
-
-/**
- * Delete a file
- * @param path path of the file to delete
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_remove(const char * path)
-{
- if(path == NULL) return LV_FS_RES_INV_PARAM;
- lv_fs_drv_t * drv = NULL;
-
- char letter = path[0];
-
- drv = lv_fs_get_drv(letter);
- if(drv == NULL) return LV_FS_RES_NOT_EX;
- if(drv->ready_cb != NULL) {
- if(drv->ready_cb(drv) == false) return LV_FS_RES_HW_ERR;
- }
-
- if(drv->remove_cb == NULL) return LV_FS_RES_NOT_IMP;
-
- const char * real_path = lv_fs_get_real_path(path);
- lv_fs_res_t res = drv->remove_cb(drv, real_path);
-
- return res;
-}
-
-/**
- * Read from a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param buf pointer to a buffer where the read bytes are stored
- * @param btr Bytes To Read
- * @param br the number of real read bytes (Bytes Read). NULL if unused.
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, uint32_t * br)
-{
- if(br != NULL) *br = 0;
- if(file_p->drv == NULL) return LV_FS_RES_INV_PARAM;
- if(file_p->drv->read_cb == NULL) return LV_FS_RES_NOT_IMP;
-
- uint32_t br_tmp = 0;
- lv_fs_res_t res = file_p->drv->read_cb(file_p->drv, file_p->file_d, buf, btr, &br_tmp);
- if(br != NULL) *br = br_tmp;
-
- return res;
-}
-
-/**
- * Write into a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param buf pointer to a buffer with the bytes to write
- * @param btr Bytes To Write
- * @param br the number of real written bytes (Bytes Written). NULL if unused.
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_t btw, uint32_t * bw)
-{
- if(bw != NULL) *bw = 0;
-
- if(file_p->drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->write_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- uint32_t bw_tmp = 0;
- lv_fs_res_t res = file_p->drv->write_cb(file_p->drv, file_p->file_d, buf, btw, &bw_tmp);
- if(bw != NULL) *bw = bw_tmp;
-
- return res;
-}
-
-/**
- * Set the position of the 'cursor' (read write pointer) in a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param pos the new position expressed in bytes index (0: start of file)
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos)
-{
- if(file_p->drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->seek_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- lv_fs_res_t res = file_p->drv->seek_cb(file_p->drv, file_p->file_d, pos);
-
- return res;
-}
-
-/**
- * Give the position of the read write pointer
- * @param file_p pointer to a lv_fs_file_t variable
- * @param pos_p pointer to store the position of the read write pointer
- * @return LV_FS_RES_OK or any error from 'fs_res_t'
- */
-lv_fs_res_t lv_fs_tell(lv_fs_file_t * file_p, uint32_t * pos)
-{
- if(file_p->drv == NULL) {
- pos = 0;
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->tell_cb == NULL) {
- pos = 0;
- return LV_FS_RES_NOT_IMP;
- }
-
- lv_fs_res_t res = file_p->drv->tell_cb(file_p->drv, file_p->file_d, pos);
-
- return res;
-}
-
-/**
- * Truncate the file size to the current position of the read write pointer
- * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open )
- * @return LV_FS_RES_OK: no error, the file is read
- * any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_trunc(lv_fs_file_t * file_p)
-{
- if(file_p->drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->tell_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- lv_fs_res_t res = file_p->drv->trunc_cb(file_p->drv, file_p->file_d);
-
- return res;
-}
-/**
- * Give the size of a file bytes
- * @param file_p pointer to a lv_fs_file_t variable
- * @param size pointer to a variable to store the size
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size)
-{
- if(file_p->drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- if(file_p->drv->size_cb == NULL) return LV_FS_RES_NOT_IMP;
-
- if(size == NULL) return LV_FS_RES_INV_PARAM;
-
- lv_fs_res_t res = file_p->drv->size_cb(file_p->drv, file_p->file_d, size);
-
- return res;
-}
-
-/**
- * Rename a file
- * @param oldname path to the file
- * @param newname path with the new name
- * @return LV_FS_RES_OK or any error from 'fs_res_t'
- */
-lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname)
-{
- if(!oldname || !newname) return LV_FS_RES_INV_PARAM;
-
- char letter = oldname[0];
-
- lv_fs_drv_t * drv = lv_fs_get_drv(letter);
-
- if(!drv) {
- return LV_FS_RES_NOT_EX;
- }
-
- if(drv->ready_cb != NULL) {
- if(drv->ready_cb(drv) == false) {
- return LV_FS_RES_HW_ERR;
- }
- }
-
- if(drv->rename_cb == NULL) return LV_FS_RES_NOT_IMP;
-
- const char * old_real = lv_fs_get_real_path(oldname);
- const char * new_real = lv_fs_get_real_path(newname);
-
- lv_fs_res_t res = drv->rename_cb(drv, old_real, new_real);
-
- return res;
-}
-
-/**
- * Initialize a 'fs_read_dir_t' variable for directory reading
- * @param rddir_p pointer to a 'fs_read_dir_t' variable
- * @param path path to a directory
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path)
-{
- if(path == NULL) return LV_FS_RES_INV_PARAM;
-
- char letter = path[0];
-
- rddir_p->drv = lv_fs_get_drv(letter);
-
- if(rddir_p->drv == NULL) {
- rddir_p->dir_d = NULL;
- return LV_FS_RES_NOT_EX;
- }
-
- rddir_p->dir_d = lv_mem_alloc(rddir_p->drv->rddir_size);
- LV_ASSERT_MEM(rddir_p->dir_d);
- if(rddir_p->dir_d == NULL) {
- rddir_p->dir_d = NULL;
- return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
- }
-
- if(rddir_p->drv->dir_open_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- const char * real_path = lv_fs_get_real_path(path);
-
- lv_fs_res_t res = rddir_p->drv->dir_open_cb(rddir_p->drv, rddir_p->dir_d, real_path);
-
- return res;
-}
-
-/**
- * Read the next filename form a directory.
- * The name of the directories will begin with '/'
- * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
- * @param fn pointer to a buffer to store the filename
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn)
-{
- if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
- fn[0] = '\0';
- return LV_FS_RES_INV_PARAM;
- }
-
- if(rddir_p->drv->dir_read_cb == NULL) {
- return LV_FS_RES_NOT_IMP;
- }
-
- lv_fs_res_t res = rddir_p->drv->dir_read_cb(rddir_p->drv, rddir_p->dir_d, fn);
-
- return res;
-}
-
-/**
- * Close the directory reading
- * @param rddir_p pointer to an initialized 'fs_read_dir_t' variable
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p)
-{
- if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- lv_fs_res_t res;
-
- if(rddir_p->drv->dir_close_cb == NULL) {
- res = LV_FS_RES_NOT_IMP;
- } else {
- res = rddir_p->drv->dir_close_cb(rddir_p->drv, rddir_p->dir_d);
- }
-
- lv_mem_free(rddir_p->dir_d); /*Clean up*/
- rddir_p->dir_d = NULL;
- rddir_p->drv = NULL;
- rddir_p->dir_d = NULL;
-
- return res;
-}
-
-/**
- * Get the free and total size of a driver in kB
- * @param letter the driver letter
- * @param total_p pointer to store the total size [kB]
- * @param free_p pointer to store the free size_cb [kB]
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_free_space(char letter, uint32_t * total_p, uint32_t * free_p)
-{
- lv_fs_drv_t * drv = lv_fs_get_drv(letter);
-
- if(drv == NULL) {
- return LV_FS_RES_INV_PARAM;
- }
-
- lv_fs_res_t res;
-
- if(drv->free_space_cb == NULL) {
- res = LV_FS_RES_NOT_IMP;
- } else {
- uint32_t total_tmp = 0;
- uint32_t free_tmp = 0;
- res = drv->free_space_cb(drv, &total_tmp, &free_tmp);
-
- if(total_p != NULL) *total_p = total_tmp;
- if(free_p != NULL) *free_p = free_tmp;
- }
-
- return res;
-}
-
-/**
- * Initialize a file system driver with default values.
- * It is used to surly have known values in the fields ant not memory junk.
- * After it you can set the fields.
- * @param drv pointer to driver variable to initialize
- */
-void lv_fs_drv_init(lv_fs_drv_t * drv)
-{
- memset(drv, 0, sizeof(lv_fs_drv_t));
-}
-
-/**
- * Add a new drive
- * @param drv_p pointer to an lv_fs_drv_t structure which is inited with the
- * corresponding function pointers. The data will be copied so the variable can be local.
- */
-void lv_fs_drv_register(lv_fs_drv_t * drv_p)
-{
- /*Save the new driver*/
- lv_fs_drv_t * new_drv;
- new_drv = lv_ll_ins_head(&LV_GC_ROOT(_lv_drv_ll));
- LV_ASSERT_MEM(new_drv);
- if(new_drv == NULL) return;
-
- memcpy(new_drv, drv_p, sizeof(lv_fs_drv_t));
-}
-
-/**
- * Give a pointer to a driver from its letter
- * @param letter the driver letter
- * @return pointer to a driver or NULL if not found
- */
-lv_fs_drv_t * lv_fs_get_drv(char letter)
-{
- lv_fs_drv_t * drv;
-
- LV_LL_READ(LV_GC_ROOT(_lv_drv_ll), drv)
- {
- if(drv->letter == letter) {
- return drv;
- }
- }
-
- return NULL;
-}
-/**
- * Fill a buffer with the letters of existing drivers
- * @param buf buffer to store the letters ('\0' added after the last letter)
- * @return the buffer
- */
-char * lv_fs_get_letters(char * buf)
-{
- lv_fs_drv_t * drv;
- uint8_t i = 0;
-
- LV_LL_READ(LV_GC_ROOT(_lv_drv_ll), drv)
- {
- buf[i] = drv->letter;
- i++;
- }
-
- buf[i] = '\0';
-
- return buf;
-}
-
-/**
- * Return with the extension of the filename
- * @param fn string with a filename
- * @return pointer to the beginning extension or empty string if no extension
- */
-const char * lv_fs_get_ext(const char * fn)
-{
- size_t i;
- for(i = strlen(fn); i > 0; i--) {
- if(fn[i] == '.') {
- return &fn[i + 1];
- } else if(fn[i] == '/' || fn[i] == '\\') {
- return ""; /*No extension if a '\' or '/' found*/
- }
- }
-
- return ""; /*Empty string if no '.' in the file name. */
-}
-
-/**
- * Step up one level
- * @param path pointer to a file name
- * @return the truncated file name
- */
-char * lv_fs_up(char * path)
-{
- size_t len = strlen(path);
- if(len == 0) return path;
-
- len--; /*Go before the trailing '\0'*/
-
- /*Ignore trailing '/' or '\'*/
- while(path[len] == '/' || path[len] == '\\') {
- path[len] = '\0';
- if(len > 0)
- len--;
- else
- return path;
- }
-
- size_t i;
- for(i = len; i > 0; i--) {
- if(path[i] == '/' || path[i] == '\\') break;
- }
-
- if(i > 0) path[i] = '\0';
-
- return path;
-}
-
-/**
- * Get the last element of a path (e.g. U:/folder/file -> file)
- * @param path a character sting with the path to search in
- * @return pointer to the beginning of the last element in the path
- */
-const char * lv_fs_get_last(const char * path)
-{
- size_t len = strlen(path);
- if(len == 0) return path;
-
- len--; /*Go before the trailing '\0'*/
-
- /*Ignore trailing '/' or '\'*/
- while(path[len] == '/' || path[len] == '\\') {
- if(len > 0)
- len--;
- else
- return path;
- }
-
- size_t i;
- for(i = len; i > 0; i--) {
- if(path[i] == '/' || path[i] == '\\') break;
- }
-
- /*No '/' or '\' in the path so return with path itself*/
- if(i == 0) return path;
-
- return &path[i + 1];
-}
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Leave the driver letters and / or \ letters from beginning of the path
- * @param path path string (E.g. S:/folder/file.txt)
- * @return pointer to the beginning of the real path (E.g. folder/file.txt)
- */
-static const char * lv_fs_get_real_path(const char * path)
-{
- /* Example path: "S:/folder/file.txt"
- * Leave the letter and the : / \ characters*/
-
- path++; /*Ignore the driver letter*/
-
- while(*path != '\0') {
- if(*path == ':' || *path == '\\' || *path == '/') {
- path++;
- } else {
- break;
- }
- }
-
- return path;
-}
-
-#endif /*LV_USE_FILESYSTEM*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_fs.h b/src/libs/lvgl/src/lv_misc/lv_fs.h
deleted file mode 100644
index f1824282..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_fs.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/**
- * @file lv_fs.h
- *
- */
-
-#ifndef LV_FS_H
-#define LV_FS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_FILESYSTEM
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "lv_mem.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_FS_MAX_FN_LENGTH 64
-#define LV_FS_MAX_PATH_LENGTH 256
-
-/**********************
- * TYPEDEFS
- **********************/
-/**
- * Errors in the filesystem module.
- */
-enum {
- LV_FS_RES_OK = 0,
- LV_FS_RES_HW_ERR, /*Low level hardware error*/
- LV_FS_RES_FS_ERR, /*Error in the file system structure */
- LV_FS_RES_NOT_EX, /*Driver, file or directory is not exists*/
- LV_FS_RES_FULL, /*Disk full*/
- LV_FS_RES_LOCKED, /*The file is already opened*/
- LV_FS_RES_DENIED, /*Access denied. Check 'fs_open' modes and write protect*/
- LV_FS_RES_BUSY, /*The file system now can't handle it, try later*/
- LV_FS_RES_TOUT, /*Process time outed*/
- LV_FS_RES_NOT_IMP, /*Requested function is not implemented*/
- LV_FS_RES_OUT_OF_MEM, /*Not enough memory for an internal operation*/
- LV_FS_RES_INV_PARAM, /*Invalid parameter among arguments*/
- LV_FS_RES_UNKNOWN, /*Other unknown error*/
-};
-typedef uint8_t lv_fs_res_t;
-
-/**
- * Filesystem mode.
- */
-enum {
- LV_FS_MODE_WR = 0x01,
- LV_FS_MODE_RD = 0x02,
-};
-typedef uint8_t lv_fs_mode_t;
-
-typedef struct _lv_fs_drv_t
-{
- char letter;
- uint16_t file_size;
- uint16_t rddir_size;
- bool (*ready_cb)(struct _lv_fs_drv_t * drv);
-
- lv_fs_res_t (*open_cb)(struct _lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode);
- lv_fs_res_t (*close_cb)(struct _lv_fs_drv_t * drv, void * file_p);
- lv_fs_res_t (*remove_cb)(struct _lv_fs_drv_t * drv, const char * fn);
- lv_fs_res_t (*read_cb)(struct _lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
- lv_fs_res_t (*write_cb)(struct _lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw);
- lv_fs_res_t (*seek_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t pos);
- lv_fs_res_t (*tell_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
- lv_fs_res_t (*trunc_cb)(struct _lv_fs_drv_t * drv, void * file_p);
- lv_fs_res_t (*size_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t * size_p);
- lv_fs_res_t (*rename_cb)(struct _lv_fs_drv_t * drv, const char * oldname, const char * newname);
- lv_fs_res_t (*free_space_cb)(struct _lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p);
-
- lv_fs_res_t (*dir_open_cb)(struct _lv_fs_drv_t * drv, void * rddir_p, const char * path);
- lv_fs_res_t (*dir_read_cb)(struct _lv_fs_drv_t * drv, void * rddir_p, char * fn);
- lv_fs_res_t (*dir_close_cb)(struct _lv_fs_drv_t * drv, void * rddir_p);
-
-#if LV_USE_USER_DATA
- lv_fs_drv_user_data_t user_data; /**< Custom file user data */
-#endif
-} lv_fs_drv_t;
-
-typedef struct
-{
- void * file_d;
- lv_fs_drv_t * drv;
-} lv_fs_file_t;
-
-typedef struct
-{
- void * dir_d;
- lv_fs_drv_t * drv;
-} lv_fs_dir_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the File system interface
- */
-void lv_fs_init(void);
-
-/**
- * Initialize a file system driver with default values.
- * It is used to surly have known values in the fields ant not memory junk.
- * After it you can set the fields.
- * @param drv pointer to driver variable to initialize
- */
-void lv_fs_drv_init(lv_fs_drv_t * drv);
-
-/**
- * Add a new drive
- * @param drv_p pointer to an lv_fs_drv_t structure which is inited with the
- * corresponding function pointers. The data will be copied so the variable can be local.
- */
-void lv_fs_drv_register(lv_fs_drv_t * drv_p);
-
-/**
- * Give a pointer to a driver from its letter
- * @param letter the driver letter
- * @return pointer to a driver or NULL if not found
- */
-lv_fs_drv_t * lv_fs_get_drv(char letter);
-
-/**
- * Test if a drive is rady or not. If the `ready` function was not initialized `true` will be
- * returned.
- * @param letter letter of the drive
- * @return true: drive is ready; false: drive is not ready
- */
-bool lv_fs_is_ready(char letter);
-
-/**
- * Open a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param path path to the file beginning with the driver letter (e.g. S:/folder/file.txt)
- * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode);
-
-/**
- * Close an already opened file
- * @param file_p pointer to a lv_fs_file_t variable
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p);
-
-/**
- * Delete a file
- * @param path path of the file to delete
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_remove(const char * path);
-
-/**
- * Read from a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param buf pointer to a buffer where the read bytes are stored
- * @param btr Bytes To Read
- * @param br the number of real read bytes (Bytes Read). NULL if unused.
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, uint32_t * br);
-
-/**
- * Write into a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param buf pointer to a buffer with the bytes to write
- * @param btr Bytes To Write
- * @param br the number of real written bytes (Bytes Written). NULL if unused.
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_t btw, uint32_t * bw);
-
-/**
- * Set the position of the 'cursor' (read write pointer) in a file
- * @param file_p pointer to a lv_fs_file_t variable
- * @param pos the new position expressed in bytes index (0: start of file)
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos);
-
-/**
- * Give the position of the read write pointer
- * @param file_p pointer to a lv_fs_file_t variable
- * @param pos_p pointer to store the position of the read write pointer
- * @return LV_FS_RES_OK or any error from 'fs_res_t'
- */
-lv_fs_res_t lv_fs_tell(lv_fs_file_t * file_p, uint32_t * pos);
-
-/**
- * Truncate the file size to the current position of the read write pointer
- * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open )
- * @return LV_FS_RES_OK: no error, the file is read
- * any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_trunc(lv_fs_file_t * file_p);
-
-/**
- * Give the size of a file bytes
- * @param file_p pointer to a lv_fs_file_t variable
- * @param size pointer to a variable to store the size
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size);
-
-/**
- * Rename a file
- * @param oldname path to the file
- * @param newname path with the new name
- * @return LV_FS_RES_OK or any error from 'fs_res_t'
- */
-lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname);
-
-/**
- * Initialize a 'fs_dir_t' variable for directory reading
- * @param rddir_p pointer to a 'fs_read_dir_t' variable
- * @param path path to a directory
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path);
-
-/**
- * Read the next filename form a directory.
- * The name of the directories will begin with '/'
- * @param rddir_p pointer to an initialized 'fs_rdir_t' variable
- * @param fn pointer to a buffer to store the filename
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn);
-
-/**
- * Close the directory reading
- * @param rddir_p pointer to an initialized 'fs_dir_t' variable
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p);
-
-/**
- * Get the free and total size of a driver in kB
- * @param letter the driver letter
- * @param total_p pointer to store the total size [kB]
- * @param free_p pointer to store the free size [kB]
- * @return LV_FS_RES_OK or any error from lv_fs_res_t enum
- */
-lv_fs_res_t lv_fs_free_space(char letter, uint32_t * total_p, uint32_t * free_p);
-
-/**
- * Fill a buffer with the letters of existing drivers
- * @param buf buffer to store the letters ('\0' added after the last letter)
- * @return the buffer
- */
-char * lv_fs_get_letters(char * buf);
-
-/**
- * Return with the extension of the filename
- * @param fn string with a filename
- * @return pointer to the beginning extension or empty string if no extension
- */
-const char * lv_fs_get_ext(const char * fn);
-
-/**
- * Step up one level
- * @param path pointer to a file name
- * @return the truncated file name
- */
-char * lv_fs_up(char * path);
-
-/**
- * Get the last element of a path (e.g. U:/folder/file -> file)
- * @param buf buffer to store the letters ('\0' added after the last letter)
- * @return pointer to the beginning of the last element in the path
- */
-const char * lv_fs_get_last(const char * path);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_FILESYSTEM*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_FS_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_gc.c b/src/libs/lvgl/src/lv_misc/lv_gc.c
deleted file mode 100644
index 94bf532a..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_gc.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * @file lv_gc.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_gc.h"
-#include "string.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-#if(!defined(LV_ENABLE_GC)) || LV_ENABLE_GC == 0
-LV_ROOTS
-#endif /* LV_ENABLE_GC */
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-void lv_gc_clear_roots(void)
-{
-#define LV_CLEAR_ROOT(root_type, root_name) memset(&LV_GC_ROOT(root_name), 0, sizeof(LV_GC_ROOT(root_name)));
- LV_ITERATE_ROOTS(LV_CLEAR_ROOT)
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_gc.h b/src/libs/lvgl/src/lv_misc/lv_gc.h
deleted file mode 100644
index afd4d600..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_gc.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * @file lv_gc.h
- *
- */
-
-#ifndef LV_GC_H
-#define LV_GC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "lv_mem.h"
-#include "lv_ll.h"
-#include "../lv_draw/lv_img_cache.h"
-
-/*********************
- * DEFINES
- *********************/
-
-#define LV_ITERATE_ROOTS(f) \
- f(lv_ll_t, _lv_task_ll) /*Linked list to store the lv_tasks*/ \
- f(lv_ll_t, _lv_disp_ll) /*Linked list of screens*/ \
- f(lv_ll_t, _lv_indev_ll) /*Linked list of screens*/ \
- f(lv_ll_t, _lv_drv_ll) \
- f(lv_ll_t, _lv_file_ll) \
- f(lv_ll_t, _lv_anim_ll) \
- f(lv_ll_t, _lv_group_ll) \
- f(lv_ll_t, _lv_img_defoder_ll) \
- f(lv_img_cache_entry_t*, _lv_img_cache_array) \
- f(void*, _lv_task_act) \
- f(void*, _lv_draw_buf)
-
-#define LV_DEFINE_ROOT(root_type, root_name) root_type root_name;
-#define LV_ROOTS LV_ITERATE_ROOTS(LV_DEFINE_ROOT)
-
-#if LV_ENABLE_GC == 1
-#if LV_MEM_CUSTOM != 1
-#error "GC requires CUSTOM_MEM"
-#endif /* LV_MEM_CUSTOM */
-#else /* LV_ENABLE_GC */
-#define LV_GC_ROOT(x) x
-#define LV_EXTERN_ROOT(root_type, root_name) extern root_type root_name;
-LV_ITERATE_ROOTS(LV_EXTERN_ROOT)
-#endif /* LV_ENABLE_GC */
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-void lv_gc_clear_roots(void);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_GC_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_ll.c b/src/libs/lvgl/src/lv_misc/lv_ll.c
deleted file mode 100644
index 99526659..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_ll.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/**
- * @file lv_ll.c
- * Handle linked lists.
- * The nodes are dynamically allocated by the 'lv_mem' module,
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdint.h>
-#include <string.h>
-
-#include "lv_ll.h"
-#include "lv_mem.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LL_NODE_META_SIZE (sizeof(lv_ll_node_t *) + sizeof(lv_ll_node_t *))
-#define LL_PREV_P_OFFSET(ll_p) (ll_p->n_size)
-#define LL_NEXT_P_OFFSET(ll_p) (ll_p->n_size + sizeof(lv_ll_node_t *))
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void node_set_prev(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * prev);
-static void node_set_next(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * next);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize linked list
- * @param ll_dsc pointer to ll_dsc variable
- * @param node_size the size of 1 node in bytes
- */
-void lv_ll_init(lv_ll_t * ll_p, uint32_t node_size)
-{
- ll_p->head = NULL;
- ll_p->tail = NULL;
-#ifdef LV_MEM_ENV64
- /*Round the size up to 8*/
- if(node_size & 0x7) {
- node_size = node_size & (~0x7);
- node_size += 8;
- }
-#else
- /*Round the size up to 4*/
- if(node_size & 0x3) {
- node_size = node_size & (~0x3);
- node_size += 4;
- }
-#endif
-
- ll_p->n_size = node_size;
-}
-
-/**
- * Add a new head to a linked list
- * @param ll_p pointer to linked list
- * @return pointer to the new head
- */
-void * lv_ll_ins_head(lv_ll_t * ll_p)
-{
- lv_ll_node_t * n_new;
-
- n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
-
- if(n_new != NULL) {
- node_set_prev(ll_p, n_new, NULL); /*No prev. before the new head*/
- node_set_next(ll_p, n_new, ll_p->head); /*After new comes the old head*/
-
- if(ll_p->head != NULL) { /*If there is old head then before it goes the new*/
- node_set_prev(ll_p, ll_p->head, n_new);
- }
-
- ll_p->head = n_new; /*Set the new head in the dsc.*/
- if(ll_p->tail == NULL) { /*If there is no tail (1. node) set the tail too*/
- ll_p->tail = n_new;
- }
- }
-
- return n_new;
-}
-
-/**
- * Insert a new node in front of the n_act node
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the new head
- */
-void * lv_ll_ins_prev(lv_ll_t * ll_p, void * n_act)
-{
- lv_ll_node_t * n_new;
- lv_ll_node_t * n_prev;
-
- if(NULL == ll_p || NULL == n_act) return NULL;
-
- if(lv_ll_get_head(ll_p) == n_act) {
- n_new = lv_ll_ins_head(ll_p);
- if(n_new == NULL) return NULL;
- } else {
- n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
- if(n_new == NULL) return NULL;
-
- n_prev = lv_ll_get_prev(ll_p, n_act);
- node_set_next(ll_p, n_prev, n_new);
- node_set_prev(ll_p, n_new, n_prev);
- node_set_prev(ll_p, n_act, n_new);
- node_set_next(ll_p, n_new, n_act);
- }
-
- return n_new;
-}
-
-/**
- * Add a new tail to a linked list
- * @param ll_p pointer to linked list
- * @return pointer to the new tail
- */
-void * lv_ll_ins_tail(lv_ll_t * ll_p)
-{
- lv_ll_node_t * n_new;
-
- n_new = lv_mem_alloc(ll_p->n_size + LL_NODE_META_SIZE);
- if(n_new == NULL) return NULL;
-
- if(n_new != NULL) {
- node_set_next(ll_p, n_new, NULL); /*No next after the new tail*/
- node_set_prev(ll_p, n_new, ll_p->tail); /*The prev. before new is tho old tail*/
- if(ll_p->tail != NULL) { /*If there is old tail then the new comes after it*/
- node_set_next(ll_p, ll_p->tail, n_new);
- }
-
- ll_p->tail = n_new; /*Set the new tail in the dsc.*/
- if(ll_p->head == NULL) { /*If there is no head (1. node) set the head too*/
- ll_p->head = n_new;
- }
- }
-
- return n_new;
-}
-
-/**
- * Remove the node 'node_p' from 'll_p' linked list.
- * It does not free the the memory of node.
- * @param ll_p pointer to the linked list of 'node_p'
- * @param node_p pointer to node in 'll_p' linked list
- */
-void lv_ll_rem(lv_ll_t * ll_p, void * node_p)
-{
- if(lv_ll_get_head(ll_p) == node_p) {
- /*The new head will be the node after 'n_act'*/
- ll_p->head = lv_ll_get_next(ll_p, node_p);
- if(ll_p->head == NULL) {
- ll_p->tail = NULL;
- } else {
- node_set_prev(ll_p, ll_p->head, NULL);
- }
- } else if(lv_ll_get_tail(ll_p) == node_p) {
- /*The new tail will be the node before 'n_act'*/
- ll_p->tail = lv_ll_get_prev(ll_p, node_p);
- if(ll_p->tail == NULL) {
- ll_p->head = NULL;
- } else {
- node_set_next(ll_p, ll_p->tail, NULL);
- }
- } else {
- lv_ll_node_t * n_prev = lv_ll_get_prev(ll_p, node_p);
- lv_ll_node_t * n_next = lv_ll_get_next(ll_p, node_p);
-
- node_set_next(ll_p, n_prev, n_next);
- node_set_prev(ll_p, n_next, n_prev);
- }
-}
-
-/**
- * Remove and free all elements from a linked list. The list remain valid but become empty.
- * @param ll_p pointer to linked list
- */
-void lv_ll_clear(lv_ll_t * ll_p)
-{
- void * i;
- void * i_next;
-
- i = lv_ll_get_head(ll_p);
- i_next = NULL;
-
- while(i != NULL) {
- i_next = lv_ll_get_next(ll_p, i);
-
- lv_ll_rem(ll_p, i);
- lv_mem_free(i);
-
- i = i_next;
- }
-}
-
-/**
- * Move a node to a new linked list
- * @param ll_ori_p pointer to the original (old) linked list
- * @param ll_new_p pointer to the new linked list
- * @param node pointer to a node
- * @param head true: be the head in the new list
- * false be the head in the new list
- */
-void lv_ll_chg_list(lv_ll_t * ll_ori_p, lv_ll_t * ll_new_p, void * node, bool head)
-{
- lv_ll_rem(ll_ori_p, node);
-
- if(head) {
- /*Set node as head*/
- node_set_prev(ll_new_p, node, NULL);
- node_set_next(ll_new_p, node, ll_new_p->head);
-
- if(ll_new_p->head != NULL) { /*If there is old head then before it goes the new*/
- node_set_prev(ll_new_p, ll_new_p->head, node);
- }
-
- ll_new_p->head = node; /*Set the new head in the dsc.*/
- if(ll_new_p->tail == NULL) { /*If there is no tail (first node) set the tail too*/
- ll_new_p->tail = node;
- }
- } else {
- /*Set node as tail*/
- node_set_prev(ll_new_p, node, ll_new_p->tail);
- node_set_next(ll_new_p, node, NULL);
-
- if(ll_new_p->tail != NULL) { /*If there is old tail then after it goes the new*/
- node_set_next(ll_new_p, ll_new_p->tail, node);
- }
-
- ll_new_p->tail = node; /*Set the new tail in the dsc.*/
- if(ll_new_p->head == NULL) { /*If there is no head (first node) set the head too*/
- ll_new_p->head = node;
- }
- }
-}
-
-/**
- * Return with head node of the linked list
- * @param ll_p pointer to linked list
- * @return pointer to the head of 'll_p'
- */
-void * lv_ll_get_head(const lv_ll_t * ll_p)
-{
- void * head = NULL;
-
- if(ll_p != NULL) {
- head = ll_p->head;
- }
-
- return head;
-}
-
-/**
- * Return with tail node of the linked list
- * @param ll_p pointer to linked list
- * @return pointer to the head of 'll_p'
- */
-void * lv_ll_get_tail(const lv_ll_t * ll_p)
-{
- void * tail = NULL;
-
- if(ll_p != NULL) {
- tail = ll_p->tail;
- }
-
- return tail;
-}
-
-/**
- * Return with the pointer of the next node after 'n_act'
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the next node
- */
-void * lv_ll_get_next(const lv_ll_t * ll_p, const void * n_act)
-{
- void * next = NULL;
-
- if(ll_p != NULL) {
- const lv_ll_node_t * n_act_d = n_act;
- memcpy(&next, n_act_d + LL_NEXT_P_OFFSET(ll_p), sizeof(void *));
- }
-
- return next;
-}
-
-/**
- * Return with the pointer of the previous node after 'n_act'
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the previous node
- */
-void * lv_ll_get_prev(const lv_ll_t * ll_p, const void * n_act)
-{
- void * prev = NULL;
-
- if(ll_p != NULL) {
- const lv_ll_node_t * n_act_d = n_act;
- memcpy(&prev, n_act_d + LL_PREV_P_OFFSET(ll_p), sizeof(void *));
- }
-
- return prev;
-}
-
-/**
- * Return the length of the linked list.
- * @param ll_p pointer to linked list
- * @return length of the linked list
- */
-uint32_t lv_ll_get_len(const lv_ll_t * ll_p)
-{
- uint32_t len = 0;
- void * node;
-
- for(node = lv_ll_get_head(ll_p); node != NULL; node = lv_ll_get_next(ll_p, node)) {
- len++;
- }
-
- return len;
-}
-
-/**
- * Move a nodw before an other node in the same linked list
- * @param ll_p pointer to a linked list
- * @param n_act pointer to node to move
- * @param n_after pointer to a node which should be after `n_act`
- */
-void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after)
-{
- if(n_act == n_after) return; /*Can't move before itself*/
-
- void * n_before;
- if(n_after != NULL)
- n_before = lv_ll_get_prev(ll_p, n_after);
- else
- n_before = lv_ll_get_tail(ll_p); /*if `n_after` is NULL `n_act` should be the new tail*/
-
- if(n_act == n_before) return; /*Already before `n_after`*/
-
- /*It's much easier to remove from the list and add again*/
- lv_ll_rem(ll_p, n_act);
-
- /*Add again by setting the prev. and next nodes*/
- node_set_next(ll_p, n_before, n_act);
- node_set_prev(ll_p, n_act, n_before);
- node_set_prev(ll_p, n_after, n_act);
- node_set_next(ll_p, n_act, n_after);
-
- /*If `n_act` was moved before NULL then it become the new tail*/
- if(n_after == NULL) ll_p->tail = n_act;
-
- /*If `n_act` was moved before `NULL` then it's the new head*/
- if(n_before == NULL) ll_p->head = n_act;
-}
-
-/**
- * Check if a linked list is empty
- * @param ll_p pointer to a linked list
- * @return true: the linked list is empty; false: not empty
- */
-bool lv_ll_is_empty(lv_ll_t * ll_p)
-{
- if(ll_p == NULL) return true;
-
- if(ll_p->head == NULL && ll_p->tail == NULL) return true;
-
- return false;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Set the 'pervious node pointer' of a node
- * @param ll_p pointer to linked list
- * @param act pointer to a node which prev. node pointer should be set
- * @param prev pointer to a node which should be the previous node before 'act'
- */
-static void node_set_prev(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * prev)
-{
- if(act == NULL) return; /*Can't set the prev node of `NULL`*/
-
- uint32_t node_p_size = sizeof(lv_ll_node_t *);
- if(prev)
- memcpy(act + LL_PREV_P_OFFSET(ll_p), &prev, node_p_size);
- else
- memset(act + LL_PREV_P_OFFSET(ll_p), 0, node_p_size);
-}
-
-/**
- * Set the 'next node pointer' of a node
- * @param ll_p pointer to linked list
- * @param act pointer to a node which next node pointer should be set
- * @param next pointer to a node which should be the next node before 'act'
- */
-static void node_set_next(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node_t * next)
-{
- if(act == NULL) return; /*Can't set the next node of `NULL`*/
-
- uint32_t node_p_size = sizeof(lv_ll_node_t *);
- if(next)
- memcpy(act + LL_NEXT_P_OFFSET(ll_p), &next, node_p_size);
- else
- memset(act + LL_NEXT_P_OFFSET(ll_p), 0, node_p_size);
-}
diff --git a/src/libs/lvgl/src/lv_misc/lv_ll.h b/src/libs/lvgl/src/lv_misc/lv_ll.h
deleted file mode 100644
index 2c02eb48..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_ll.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * @file lv_ll.c
- * Handle linked lists. The nodes are dynamically allocated by the 'lv_mem' module.
- */
-
-#ifndef LV_LL_H
-#define LV_LL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_mem.h"
-#include <stdint.h>
-#include <stddef.h>
-#include <stdbool.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Dummy type to make handling easier*/
-typedef uint8_t lv_ll_node_t;
-
-/** Description of a linked list*/
-typedef struct
-{
- uint32_t n_size;
- lv_ll_node_t * head;
- lv_ll_node_t * tail;
-} lv_ll_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize linked list
- * @param ll_dsc pointer to ll_dsc variable
- * @param node_size the size of 1 node in bytes
- */
-void lv_ll_init(lv_ll_t * ll_p, uint32_t node_size);
-
-/**
- * Add a new head to a linked list
- * @param ll_p pointer to linked list
- * @return pointer to the new head
- */
-void * lv_ll_ins_head(lv_ll_t * ll_p);
-
-/**
- * Insert a new node in front of the n_act node
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the new head
- */
-void * lv_ll_ins_prev(lv_ll_t * ll_p, void * n_act);
-
-/**
- * Add a new tail to a linked list
- * @param ll_p pointer to linked list
- * @return pointer to the new tail
- */
-void * lv_ll_ins_tail(lv_ll_t * ll_p);
-
-/**
- * Remove the node 'node_p' from 'll_p' linked list.
- * It does not free the the memory of node.
- * @param ll_p pointer to the linked list of 'node_p'
- * @param node_p pointer to node in 'll_p' linked list
- */
-void lv_ll_rem(lv_ll_t * ll_p, void * node_p);
-
-/**
- * Remove and free all elements from a linked list. The list remain valid but become empty.
- * @param ll_p pointer to linked list
- */
-void lv_ll_clear(lv_ll_t * ll_p);
-
-/**
- * Move a node to a new linked list
- * @param ll_ori_p pointer to the original (old) linked list
- * @param ll_new_p pointer to the new linked list
- * @param node pointer to a node
- * @param head true: be the head in the new list
- * false be the head in the new list
- */
-void lv_ll_chg_list(lv_ll_t * ll_ori_p, lv_ll_t * ll_new_p, void * node, bool head);
-
-/**
- * Return with head node of the linked list
- * @param ll_p pointer to linked list
- * @return pointer to the head of 'll_p'
- */
-void * lv_ll_get_head(const lv_ll_t * ll_p);
-
-/**
- * Return with tail node of the linked list
- * @param ll_p pointer to linked list
- * @return pointer to the head of 'll_p'
- */
-void * lv_ll_get_tail(const lv_ll_t * ll_p);
-
-/**
- * Return with the pointer of the next node after 'n_act'
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the next node
- */
-void * lv_ll_get_next(const lv_ll_t * ll_p, const void * n_act);
-
-/**
- * Return with the pointer of the previous node after 'n_act'
- * @param ll_p pointer to linked list
- * @param n_act pointer a node
- * @return pointer to the previous node
- */
-void * lv_ll_get_prev(const lv_ll_t * ll_p, const void * n_act);
-
-/**
- * Return the length of the linked list.
- * @param ll_p pointer to linked list
- * @return length of the linked list
- */
-uint32_t lv_ll_get_len(const lv_ll_t * ll_p);
-
-/**
- * Move a nodw before an other node in the same linked list
- * @param ll_p pointer to a linked list
- * @param n_act pointer to node to move
- * @param n_after pointer to a node which should be after `n_act`
- */
-void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after);
-
-/**
- * Check if a linked list is empty
- * @param ll_p pointer to a linked list
- * @return true: the linked list is empty; false: not empty
- */
-bool lv_ll_is_empty(lv_ll_t * ll_p);
-/**********************
- * MACROS
- **********************/
-
-#define LV_LL_READ(list, i) for(i = lv_ll_get_head(&list); i != NULL; i = lv_ll_get_next(&list, i))
-
-#define LV_LL_READ_BACK(list, i) for(i = lv_ll_get_tail(&list); i != NULL; i = lv_ll_get_prev(&list, i))
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_log.c b/src/libs/lvgl/src/lv_misc/lv_log.c
deleted file mode 100644
index acbdfb73..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_log.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * @file lv_log.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_log.h"
-#if LV_USE_LOG
-
-#if LV_LOG_PRINTF
-#include <stdio.h>
-#endif
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_log_print_g_cb_t custom_print_cb;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Register custom print/write function to call when a log is added.
- * It can format its "File path", "Line number" and "Description" as required
- * and send the formatted log message to a consol or serial port.
- * @param print_cb a function pointer to print a log
- */
-void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb)
-{
- custom_print_cb = print_cb;
-}
-
-/**
- * Add a log
- * @param level the level of log. (From `lv_log_level_t` enum)
- * @param file name of the file when the log added
- * @param line line number in the source code where the log added
- * @param dsc description of the log
- */
-void lv_log_add(lv_log_level_t level, const char * file, int line, const char * dsc)
-{
- if(level >= _LV_LOG_LEVEL_NUM) return; /*Invalid level*/
-
- if(level >= LV_LOG_LEVEL) {
-
-#if LV_LOG_PRINTF
- static const char * lvl_prefix[] = {"Trace", "Info", "Warn", "Error"};
- printf("%s: %s \t(%s #%d)\n", lvl_prefix[level], dsc, file, line);
-#else
- if(custom_print_cb) custom_print_cb(level, file, line, dsc);
-#endif
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif /*LV_USE_LOG*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_log.h b/src/libs/lvgl/src/lv_misc/lv_log.h
deleted file mode 100644
index 62c613b4..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_log.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * @file lv_log.h
- *
- */
-
-#ifndef LV_LOG_H
-#define LV_LOG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-#include <stdint.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/*Possible log level. For compatibility declare it independently from `LV_USE_LOG`*/
-
-#define LV_LOG_LEVEL_TRACE 0 /**< A lot of logs to give detailed information*/
-#define LV_LOG_LEVEL_INFO 1 /**< Log important events*/
-#define LV_LOG_LEVEL_WARN 2 /**< Log if something unwanted happened but didn't caused problem*/
-#define LV_LOG_LEVEL_ERROR 3 /**< Only critical issue, when the system may fail*/
-#define LV_LOG_LEVEL_NONE 4 /**< Do not log anything*/
-#define _LV_LOG_LEVEL_NUM 5 /**< Number of log levels */
-
-LV_EXPORT_CONST_INT(LV_LOG_LEVEL_TRACE);
-LV_EXPORT_CONST_INT(LV_LOG_LEVEL_INFO);
-LV_EXPORT_CONST_INT(LV_LOG_LEVEL_WARN);
-LV_EXPORT_CONST_INT(LV_LOG_LEVEL_ERROR);
-LV_EXPORT_CONST_INT(LV_LOG_LEVEL_NONE);
-
-typedef int8_t lv_log_level_t;
-
-#if LV_USE_LOG
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Log print function. Receives "Log Level", "File path", "Line number" and "Description".
- */
-typedef void (*lv_log_print_g_cb_t)(lv_log_level_t level, const char *, uint32_t, const char *);
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Register custom print/write function to call when a log is added.
- * It can format its "File path", "Line number" and "Description" as required
- * and send the formatted log message to a consol or serial port.
- * @param print_cb a function pointer to print a log
- */
-void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb);
-
-/**
- * Add a log
- * @param level the level of log. (From `lv_log_level_t` enum)
- * @param file name of the file when the log added
- * @param line line number in the source code where the log added
- * @param dsc description of the log
- */
-void lv_log_add(lv_log_level_t level, const char * file, int line, const char * dsc);
-
-/**********************
- * MACROS
- **********************/
-
-#if LV_LOG_LEVEL <= LV_LOG_LEVEL_TRACE
-#define LV_LOG_TRACE(dsc) lv_log_add(LV_LOG_LEVEL_TRACE, __FILE__, __LINE__, dsc);
-#else
-#define LV_LOG_TRACE(dsc) \
- { \
- ; \
- }
-#endif
-
-#if LV_LOG_LEVEL <= LV_LOG_LEVEL_INFO
-#define LV_LOG_INFO(dsc) lv_log_add(LV_LOG_LEVEL_INFO, __FILE__, __LINE__, dsc);
-#else
-#define LV_LOG_INFO(dsc) \
- { \
- ; \
- }
-#endif
-
-#if LV_LOG_LEVEL <= LV_LOG_LEVEL_WARN
-#define LV_LOG_WARN(dsc) lv_log_add(LV_LOG_LEVEL_WARN, __FILE__, __LINE__, dsc);
-#else
-#define LV_LOG_WARN(dsc) \
- { \
- ; \
- }
-#endif
-
-#if LV_LOG_LEVEL <= LV_LOG_LEVEL_ERROR
-#define LV_LOG_ERROR(dsc) lv_log_add(LV_LOG_LEVEL_ERROR, __FILE__, __LINE__, dsc);
-#else
-#define LV_LOG_ERROR(dsc) \
- { \
- ; \
- }
-#endif
-
-#else /*LV_USE_LOG*/
-
-/*Do nothing if `LV_USE_LOG 0`*/
-#define lv_log_add(level, file, line, dsc) \
- { \
- ; \
- }
-#define LV_LOG_TRACE(dsc) \
- { \
- ; \
- }
-#define LV_LOG_INFO(dsc) \
- { \
- ; \
- }
-#define LV_LOG_WARN(dsc) \
- { \
- ; \
- }
-#define LV_LOG_ERROR(dsc) \
- { \
- ; \
- }
-#endif /*LV_USE_LOG*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LOG_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_math.c b/src/libs/lvgl/src/lv_misc/lv_math.c
deleted file mode 100644
index f015456e..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_math.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * @file lv_math.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_math.h"
-#include <stdbool.h>
-#include <stdlib.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static const int16_t sin0_90_table[] = {
- 0, 572, 1144, 1715, 2286, 2856, 3425, 3993, 4560, 5126, 5690, 6252, 6813, 7371, 7927, 8481,
- 9032, 9580, 10126, 10668, 11207, 11743, 12275, 12803, 13328, 13848, 14364, 14876, 15383, 15886, 16383, 16876,
- 17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621, 21062, 21497, 21925, 22347, 22762, 23170, 23571, 23964,
- 24351, 24730, 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 27788, 28087, 28377, 28659, 28932, 29196,
- 29451, 29697, 29934, 30162, 30381, 30591, 30791, 30982, 31163, 31335, 31498, 31650, 31794, 31927, 32051, 32165,
- 32269, 32364, 32448, 32523, 32587, 32642, 32687, 32722, 32747, 32762, 32767};
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Return with sinus of an angle
- * @param angle
- * @return sinus of 'angle'. sin(-90) = -32767, sin(90) = 32767
- */
-int16_t lv_trigo_sin(int16_t angle)
-{
- int16_t ret = 0;
- angle = angle % 360;
-
- if(angle < 0) angle = 360 + angle;
-
- if(angle < 90) {
- ret = sin0_90_table[angle];
- } else if(angle >= 90 && angle < 180) {
- angle = 180 - angle;
- ret = sin0_90_table[angle];
- } else if(angle >= 180 && angle < 270) {
- angle = angle - 180;
- ret = -sin0_90_table[angle];
- } else { /*angle >=270*/
- angle = 360 - angle;
- ret = -sin0_90_table[angle];
- }
-
- return ret;
-}
-
-/**
- * Calculate a value of a Cubic Bezier function.
- * @param t time in range of [0..LV_BEZIER_VAL_MAX]
- * @param u0 start values in range of [0..LV_BEZIER_VAL_MAX]
- * @param u1 control value 1 values in range of [0..LV_BEZIER_VAL_MAX]
- * @param u2 control value 2 in range of [0..LV_BEZIER_VAL_MAX]
- * @param u3 end values in range of [0..LV_BEZIER_VAL_MAX]
- * @return the value calculated from the given parameters in range of [0..LV_BEZIER_VAL_MAX]
- */
-int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3)
-{
- uint32_t t_rem = 1024 - t;
- uint32_t t_rem2 = (t_rem * t_rem) >> 10;
- uint32_t t_rem3 = (t_rem2 * t_rem) >> 10;
- uint32_t t2 = (t * t) >> 10;
- uint32_t t3 = (t2 * t) >> 10;
-
- uint32_t v1 = ((uint32_t)t_rem3 * u0) >> 10;
- uint32_t v2 = ((uint32_t)3 * t_rem2 * t * u1) >> 20;
- uint32_t v3 = ((uint32_t)3 * t_rem * t2 * u2) >> 20;
- uint32_t v4 = ((uint32_t)t3 * u3) >> 10;
-
- return v1 + v2 + v3 + v4;
-}
-
-/**
- * Calculate the atan2 of a vector.
- * @param x
- * @param y
- * @return the angle in degree calculated from the given parameters in range of [0..360]
- */
-uint16_t lv_atan2(int x, int y)
-{
- // Fast XY vector to integer degree algorithm - Jan 2011 www.RomanBlack.com
- // Converts any XY values including 0 to a degree value that should be
- // within +/- 1 degree of the accurate value without needing
- // large slow trig functions like ArcTan() or ArcCos().
- // NOTE! at least one of the X or Y values must be non-zero!
- // This is the full version, for all 4 quadrants and will generate
- // the angle in integer degrees from 0-360.
- // Any values of X and Y are usable including negative values provided
- // they are between -1456 and 1456 so the 16bit multiply does not overflow.
-
- unsigned char negflag;
- unsigned char tempdegree;
- unsigned char comp;
- unsigned int degree; // this will hold the result
- //signed int x; // these hold the XY vector at the start
- //signed int y; // (and they will be destroyed)
- unsigned int ux;
- unsigned int uy;
-
- // Save the sign flags then remove signs and get XY as unsigned ints
- negflag = 0;
- if(x < 0) {
- negflag += 0x01; // x flag bit
- x = (0 - x); // is now +
- }
- ux = x; // copy to unsigned var before multiply
- if(y < 0) {
- negflag += 0x02; // y flag bit
- y = (0 - y); // is now +
- }
- uy = y; // copy to unsigned var before multiply
-
- // 1. Calc the scaled "degrees"
- if(ux > uy) {
- degree = (uy * 45) / ux; // degree result will be 0-45 range
- negflag += 0x10; // octant flag bit
- } else {
- degree = (ux * 45) / uy; // degree result will be 0-45 range
- }
-
- // 2. Compensate for the 4 degree error curve
- comp = 0;
- tempdegree = degree; // use an unsigned char for speed!
- if(tempdegree > 22) { // if top half of range
- if(tempdegree <= 44) comp++;
- if(tempdegree <= 41) comp++;
- if(tempdegree <= 37) comp++;
- if(tempdegree <= 32) comp++; // max is 4 degrees compensated
- } else { // else is lower half of range
- if(tempdegree >= 2) comp++;
- if(tempdegree >= 6) comp++;
- if(tempdegree >= 10) comp++;
- if(tempdegree >= 15) comp++; // max is 4 degrees compensated
- }
- degree += comp; // degree is now accurate to +/- 1 degree!
-
- // Invert degree if it was X>Y octant, makes 0-45 into 90-45
- if(negflag & 0x10) degree = (90 - degree);
-
- // 3. Degree is now 0-90 range for this quadrant,
- // need to invert it for whichever quadrant it was in
- if(negflag & 0x02) { // if -Y
- if(negflag & 0x01) // if -Y -X
- degree = (180 + degree);
- else // else is -Y +X
- degree = (180 - degree);
- } else { // else is +Y
- if(negflag & 0x01) // if +Y -X
- degree = (360 - degree);
- }
- return degree;
-}
-
-/**
- * Calculate the integer square root of a number.
- * @param num
- * @return square root of 'num'
- */
-uint32_t lv_sqrt(uint32_t num)
-{
- // http://www.codecodex.com/wiki/Calculate_an_integer_square_root#C
- uint32_t root = 0;
- uint32_t place = 0x40000000;
-
- while(place > num) place >>= 2;
- while(place) {
- if(num >= root + place) {
- num -= root + place;
- root += (place << 1);
- }
- root >>= 1;
- place >>= 2;
- }
- return root;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_math.h b/src/libs/lvgl/src/lv_misc/lv_math.h
deleted file mode 100644
index 0f93a7c6..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_math.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * @file math_base.h
- *
- */
-
-#ifndef LV_MATH_H
-#define LV_MATH_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdint.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_MATH_MIN(a, b) ((a) < (b) ? (a) : (b))
-#define LV_MATH_MAX(a, b) ((a) > (b) ? (a) : (b))
-#define LV_MATH_ABS(x) ((x) > 0 ? (x) : (-(x)))
-
-#define LV_IS_SIGNED(t) (((t)(-1)) < ((t) 0))
-#define LV_UMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0xFULL << ((sizeof(t) * 8ULL) - 4ULL)))
-#define LV_SMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0x7ULL << ((sizeof(t) * 8ULL) - 4ULL)))
-#define LV_MAX_OF(t) ((unsigned long) (LV_IS_SIGNED(t) ? LV_SMAX_OF(t) : LV_UMAX_OF(t)))
-
-#define LV_TRIGO_SIN_MAX 32767
-#define LV_TRIGO_SHIFT 15 /**< >> LV_TRIGO_SHIFT to normalize*/
-
-#define LV_BEZIER_VAL_MAX 1024 /**< Max time in Bezier functions (not [0..1] to use integers) */
-#define LV_BEZIER_VAL_SHIFT 10 /**< log2(LV_BEZIER_VAL_MAX): used to normalize up scaled values*/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Return with sinus of an angle
- * @param angle
- * @return sinus of 'angle'. sin(-90) = -32767, sin(90) = 32767
- */
-int16_t lv_trigo_sin(int16_t angle);
-
-/**
- * Calculate a value of a Cubic Bezier function.
- * @param t time in range of [0..LV_BEZIER_VAL_MAX]
- * @param u0 start values in range of [0..LV_BEZIER_VAL_MAX]
- * @param u1 control value 1 values in range of [0..LV_BEZIER_VAL_MAX]
- * @param u2 control value 2 in range of [0..LV_BEZIER_VAL_MAX]
- * @param u3 end values in range of [0..LV_BEZIER_VAL_MAX]
- * @return the value calculated from the given parameters in range of [0..LV_BEZIER_VAL_MAX]
- */
-int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3);
-
-/**
- * Calculate the atan2 of a vector.
- * @param x
- * @param y
- * @return the angle in degree calculated from the given parameters in range of [0..360]
- */
-uint16_t lv_atan2(int x, int y);
-
-/**
- * Calculate the integer square root of a number.
- * @param num
- * @return square root of 'num'
- */
-uint32_t lv_sqrt(uint32_t num);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_mem.c b/src/libs/lvgl/src/lv_misc/lv_mem.c
deleted file mode 100644
index 9e18310f..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_mem.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/**
- * @file lv_mem.c
- * General and portable implementation of malloc and free.
- * The dynamic memory monitoring is also supported.
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_mem.h"
-#include "lv_math.h"
-#include <string.h>
-
-#if LV_MEM_CUSTOM != 0
-#include LV_MEM_CUSTOM_INCLUDE
-#endif
-
-/*********************
- * DEFINES
- *********************/
-/*Add memory junk on alloc (0xaa) and free(0xbb) (just for testing purposes)*/
-#ifndef LV_MEM_ADD_JUNK
-#define LV_MEM_ADD_JUNK 0
-#endif
-
-#ifdef LV_ARCH_64
-#define MEM_UNIT uint64_t
-#else
-#define MEM_UNIT uint32_t
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-#if LV_ENABLE_GC == 0 /*gc custom allocations must not include header*/
-
-/*The size of this union must be 4 bytes (uint32_t)*/
-typedef union
-{
- struct
- {
- MEM_UNIT used : 1; /* 1: if the entry is used*/
- MEM_UNIT d_size : 31; /* Size off the data (1 means 4 bytes)*/
- } s;
- MEM_UNIT header; /* The header (used + d_size)*/
-} lv_mem_header_t;
-
-typedef struct
-{
- lv_mem_header_t header;
- uint8_t first_data; /*First data byte in the allocated data (Just for easily create a pointer)*/
-} lv_mem_ent_t;
-
-#endif /* LV_ENABLE_GC */
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-#if LV_MEM_CUSTOM == 0
-static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e);
-static void * ent_alloc(lv_mem_ent_t * e, size_t size);
-static void ent_trunc(lv_mem_ent_t * e, size_t size);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-#if LV_MEM_CUSTOM == 0
-static uint8_t * work_mem;
-#endif
-
-static uint32_t zero_mem; /*Give the address of this variable if 0 byte should be allocated*/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initiaiize the dyn_mem module (work memory and other variables)
- */
-void lv_mem_init(void)
-{
-#if LV_MEM_CUSTOM == 0
-
-#if LV_MEM_ADR == 0
- /*Allocate a large array to store the dynamically allocated data*/
- static LV_MEM_ATTR MEM_UNIT work_mem_int[LV_MEM_SIZE / sizeof(MEM_UNIT)];
- work_mem = (uint8_t *)work_mem_int;
-#else
- work_mem = (uint8_t *)LV_MEM_ADR;
-#endif
-
- lv_mem_ent_t * full = (lv_mem_ent_t *)work_mem;
- full->header.s.used = 0;
- /*The total mem size id reduced by the first header and the close patterns */
- full->header.s.d_size = LV_MEM_SIZE - sizeof(lv_mem_header_t);
-#endif
-}
-
-/**
- * Clean up the memory buffer which frees all the allocated memories.
- * @note It work only if `LV_MEM_CUSTOM == 0`
- */
-void lv_mem_deinit(void)
-{
-#if LV_MEM_CUSTOM == 0
- memset(work_mem, 0x00, (LV_MEM_SIZE / sizeof(MEM_UNIT)) * sizeof(MEM_UNIT));
- lv_mem_ent_t * full = (lv_mem_ent_t *)work_mem;
- full->header.s.used = 0;
- /*The total mem size id reduced by the first header and the close patterns */
- full->header.s.d_size = LV_MEM_SIZE - sizeof(lv_mem_header_t);
-#endif
-}
-
-/**
- * Allocate a memory dynamically
- * @param size size of the memory to allocate in bytes
- * @return pointer to the allocated memory
- */
-void * lv_mem_alloc(size_t size)
-{
- if(size == 0) {
- return &zero_mem;
- }
-
-#ifdef LV_ARCH_64
- /*Round the size up to 8*/
- if(size & 0x7) {
- size = size & (~0x7);
- size += 8;
- }
-#else
- /*Round the size up to 4*/
- if(size & 0x3) {
- size = size & (~0x3);
- size += 4;
- }
-#endif
- void * alloc = NULL;
-
-#if LV_MEM_CUSTOM == 0
- /*Use the built-in allocators*/
- lv_mem_ent_t * e = NULL;
-
- /* Search for a appropriate entry*/
- do {
- /* Get the next entry*/
- e = ent_get_next(e);
-
- /*If there is next entry then try to allocate there*/
- if(e != NULL) {
- alloc = ent_alloc(e, size);
- }
- /* End if there is not next entry OR the alloc. is successful*/
- } while(e != NULL && alloc == NULL);
-
-#else
-/*Use custom, user defined malloc function*/
-#if LV_ENABLE_GC == 1 /*gc must not include header*/
- alloc = LV_MEM_CUSTOM_ALLOC(size);
-#else /* LV_ENABLE_GC */
- /*Allocate a header too to store the size*/
- alloc = LV_MEM_CUSTOM_ALLOC(size + sizeof(lv_mem_header_t));
- if(alloc != NULL) {
- ((lv_mem_ent_t *)alloc)->header.s.d_size = size;
- ((lv_mem_ent_t *)alloc)->header.s.used = 1;
-
- alloc = &((lv_mem_ent_t *)alloc)->first_data;
- }
-#endif /* LV_ENABLE_GC */
-#endif /* LV_MEM_CUSTOM */
-
-#if LV_MEM_ADD_JUNK
- if(alloc != NULL) memset(alloc, 0xaa, size);
-#endif
-
- if(alloc == NULL) LV_LOG_WARN("Couldn't allocate memory");
-
- return alloc;
-}
-
-/**
- * Free an allocated data
- * @param data pointer to an allocated memory
- */
-void lv_mem_free(const void * data)
-{
- if(data == &zero_mem) return;
- if(data == NULL) return;
-
-#if LV_MEM_ADD_JUNK
- memset((void *)data, 0xbb, lv_mem_get_size(data));
-#endif
-
-#if LV_ENABLE_GC == 0
- /*e points to the header*/
- lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data - sizeof(lv_mem_header_t));
- e->header.s.used = 0;
-#endif
-
-#if LV_MEM_CUSTOM == 0
-#if LV_MEM_AUTO_DEFRAG
- /* Make a simple defrag.
- * Join the following free entries after this*/
- lv_mem_ent_t * e_next;
- e_next = ent_get_next(e);
- while(e_next != NULL) {
- if(e_next->header.s.used == 0) {
- e->header.s.d_size += e_next->header.s.d_size + sizeof(e->header);
- } else {
- break;
- }
- e_next = ent_get_next(e_next);
- }
-#endif
-#else /*Use custom, user defined free function*/
-#if LV_ENABLE_GC == 0
- LV_MEM_CUSTOM_FREE(e);
-#else
- LV_MEM_CUSTOM_FREE((void *)data);
-#endif /*LV_ENABLE_GC*/
-#endif
-}
-
-/**
- * Reallocate a memory with a new size. The old content will be kept.
- * @param data pointer to an allocated memory.
- * Its content will be copied to the new memory block and freed
- * @param new_size the desired new size in byte
- * @return pointer to the new memory
- */
-
-#if LV_ENABLE_GC == 0
-
-void * lv_mem_realloc(void * data_p, size_t new_size)
-{
- /*data_p could be previously freed pointer (in this case it is invalid)*/
- if(data_p != NULL) {
- lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data_p - sizeof(lv_mem_header_t));
- if(e->header.s.used == 0) {
- data_p = NULL;
- }
- }
-
- uint32_t old_size = lv_mem_get_size(data_p);
- if(old_size == new_size) return data_p; /*Also avoid reallocating the same memory*/
-
-#if LV_MEM_CUSTOM == 0
- /* Truncate the memory if the new size is smaller. */
- if(new_size < old_size) {
- lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data_p - sizeof(lv_mem_header_t));
- ent_trunc(e, new_size);
- return &e->first_data;
- }
-#endif
-
- void * new_p;
- new_p = lv_mem_alloc(new_size);
-
- if(new_p != NULL && data_p != NULL) {
- /*Copy the old data to the new. Use the smaller size*/
- if(old_size != 0) {
- memcpy(new_p, data_p, LV_MATH_MIN(new_size, old_size));
- lv_mem_free(data_p);
- }
- }
-
- if(new_p == NULL) LV_LOG_WARN("Couldn't allocate memory");
-
- return new_p;
-}
-
-#else /* LV_ENABLE_GC */
-
-void * lv_mem_realloc(void * data_p, size_t new_size)
-{
- void * new_p = LV_MEM_CUSTOM_REALLOC(data_p, new_size);
- if(new_p == NULL) LV_LOG_WARN("Couldn't allocate memory");
- return new_p;
-}
-
-#endif /* lv_enable_gc */
-
-/**
- * Join the adjacent free memory blocks
- */
-void lv_mem_defrag(void)
-{
-#if LV_MEM_CUSTOM == 0
- lv_mem_ent_t * e_free;
- lv_mem_ent_t * e_next;
- e_free = ent_get_next(NULL);
-
- while(1) {
- /*Search the next free entry*/
- while(e_free != NULL) {
- if(e_free->header.s.used != 0) {
- e_free = ent_get_next(e_free);
- } else {
- break;
- }
- }
-
- if(e_free == NULL) return;
-
- /*Joint the following free entries to the free*/
- e_next = ent_get_next(e_free);
- while(e_next != NULL) {
- if(e_next->header.s.used == 0) {
- e_free->header.s.d_size += e_next->header.s.d_size + sizeof(e_next->header);
- } else {
- break;
- }
-
- e_next = ent_get_next(e_next);
- }
-
- if(e_next == NULL) return;
-
- /*Continue from the lastly checked entry*/
- e_free = e_next;
- }
-#endif
-}
-
-/**
- * Give information about the work memory of dynamic allocation
- * @param mon_p pointer to a dm_mon_p variable,
- * the result of the analysis will be stored here
- */
-void lv_mem_monitor(lv_mem_monitor_t * mon_p)
-{
- /*Init the data*/
- memset(mon_p, 0, sizeof(lv_mem_monitor_t));
-#if LV_MEM_CUSTOM == 0
- lv_mem_ent_t * e;
- e = NULL;
-
- e = ent_get_next(e);
-
- while(e != NULL) {
- if(e->header.s.used == 0) {
- mon_p->free_cnt++;
- mon_p->free_size += e->header.s.d_size;
- if(e->header.s.d_size > mon_p->free_biggest_size) {
- mon_p->free_biggest_size = e->header.s.d_size;
- }
- } else {
- mon_p->used_cnt++;
- }
-
- e = ent_get_next(e);
- }
- mon_p->total_size = LV_MEM_SIZE;
- mon_p->used_pct = 100 - (100U * mon_p->free_size) / mon_p->total_size;
- mon_p->frag_pct = (uint32_t)mon_p->free_biggest_size * 100U / mon_p->free_size;
- mon_p->frag_pct = 100 - mon_p->frag_pct;
-#endif
-}
-
-/**
- * Give the size of an allocated memory
- * @param data pointer to an allocated memory
- * @return the size of data memory in bytes
- */
-
-#if LV_ENABLE_GC == 0
-
-uint32_t lv_mem_get_size(const void * data)
-{
- if(data == NULL) return 0;
- if(data == &zero_mem) return 0;
-
- lv_mem_ent_t * e = (lv_mem_ent_t *)((uint8_t *)data - sizeof(lv_mem_header_t));
-
- return e->header.s.d_size;
-}
-
-#else /* LV_ENABLE_GC */
-
-uint32_t lv_mem_get_size(const void * data)
-{
- return LV_MEM_CUSTOM_GET_SIZE(data);
-}
-
-#endif /*LV_ENABLE_GC*/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#if LV_MEM_CUSTOM == 0
-/**
- * Give the next entry after 'act_e'
- * @param act_e pointer to an entry
- * @return pointer to an entry after 'act_e'
- */
-static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e)
-{
- lv_mem_ent_t * next_e = NULL;
-
- if(act_e == NULL) { /*NULL means: get the first entry*/
- next_e = (lv_mem_ent_t *)work_mem;
- } else { /*Get the next entry */
- uint8_t * data = &act_e->first_data;
- next_e = (lv_mem_ent_t *)&data[act_e->header.s.d_size];
-
- if(&next_e->first_data >= &work_mem[LV_MEM_SIZE]) next_e = NULL;
- }
-
- return next_e;
-}
-
-/**
- * Try to do the real allocation with a given size
- * @param e try to allocate to this entry
- * @param size size of the new memory in bytes
- * @return pointer to the allocated memory or NULL if not enough memory in the entry
- */
-static void * ent_alloc(lv_mem_ent_t * e, size_t size)
-{
- void * alloc = NULL;
-
- /*If the memory is free and big enough then use it */
- if(e->header.s.used == 0 && e->header.s.d_size >= size) {
- /*Truncate the entry to the desired size */
- ent_trunc(e, size),
-
- e->header.s.used = 1;
-
- /*Save the allocated data*/
- alloc = &e->first_data;
- }
-
- return alloc;
-}
-
-/**
- * Truncate the data of entry to the given size
- * @param e Pointer to an entry
- * @param size new size in bytes
- */
-static void ent_trunc(lv_mem_ent_t * e, size_t size)
-{
-#ifdef LV_ARCH_64
- /*Round the size up to 8*/
- if(size & 0x7) {
- size = size & (~0x7);
- size += 8;
- }
-#else
- /*Round the size up to 4*/
- if(size & 0x3) {
- size = size & (~0x3);
- size += 4;
- }
-#endif
-
- /*Don't let empty space only for a header without data*/
- if(e->header.s.d_size == size + sizeof(lv_mem_header_t)) {
- size = e->header.s.d_size;
- }
-
- /* Create the new entry after the current if there is space for it */
- if(e->header.s.d_size != size) {
- uint8_t * e_data = &e->first_data;
- lv_mem_ent_t * after_new_e = (lv_mem_ent_t *)&e_data[size];
- after_new_e->header.s.used = 0;
- after_new_e->header.s.d_size = (uint32_t)e->header.s.d_size - size - sizeof(lv_mem_header_t);
- }
-
- /* Set the new size for the original entry */
- e->header.s.d_size = (uint32_t)size;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_mem.h b/src/libs/lvgl/src/lv_misc/lv_mem.h
deleted file mode 100644
index f7240742..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_mem.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * @file lv_mem.h
- *
- */
-
-#ifndef LV_MEM_H
-#define LV_MEM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stddef.h>
-#include "lv_log.h"
-#include "lv_types.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Heap information structure.
- */
-typedef struct
-{
- uint32_t total_size; /**< Total heap size */
- uint32_t free_cnt;
- uint32_t free_size; /**< Size of available memory */
- uint32_t free_biggest_size;
- uint32_t used_cnt;
- uint8_t used_pct; /**< Percentage used */
- uint8_t frag_pct; /**< Amount of fragmentation */
-} lv_mem_monitor_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initiaize the dyn_mem module (work memory and other variables)
- */
-void lv_mem_init(void);
-
-/**
- * Clean up the memory buffer which frees all the allocated memories.
- * @note It work only if `LV_MEM_CUSTOM == 0`
- */
-void lv_mem_deinit(void);
-
-/**
- * Allocate a memory dynamically
- * @param size size of the memory to allocate in bytes
- * @return pointer to the allocated memory
- */
-void * lv_mem_alloc(size_t size);
-
-/**
- * Free an allocated data
- * @param data pointer to an allocated memory
- */
-void lv_mem_free(const void * data);
-
-/**
- * Reallocate a memory with a new size. The old content will be kept.
- * @param data pointer to an allocated memory.
- * Its content will be copied to the new memory block and freed
- * @param new_size the desired new size in byte
- * @return pointer to the new memory
- */
-void * lv_mem_realloc(void * data_p, size_t new_size);
-
-/**
- * Join the adjacent free memory blocks
- */
-void lv_mem_defrag(void);
-
-/**
- * Give information about the work memory of dynamic allocation
- * @param mon_p pointer to a dm_mon_p variable,
- * the result of the analysis will be stored here
- */
-void lv_mem_monitor(lv_mem_monitor_t * mon_p);
-
-/**
- * Give the size of an allocated memory
- * @param data pointer to an allocated memory
- * @return the size of data memory in bytes
- */
-uint32_t lv_mem_get_size(const void * data);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_MEM_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_misc.mk b/src/libs/lvgl/src/lv_misc/lv_misc.mk
deleted file mode 100644
index 67f496ba..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_misc.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-CSRCS += lv_circ.c
-CSRCS += lv_area.c
-CSRCS += lv_task.c
-CSRCS += lv_fs.c
-CSRCS += lv_anim.c
-CSRCS += lv_mem.c
-CSRCS += lv_ll.c
-CSRCS += lv_color.c
-CSRCS += lv_txt.c
-CSRCS += lv_math.c
-CSRCS += lv_log.c
-CSRCS += lv_gc.c
-CSRCS += lv_utils.c
-CSRCS += lv_async.c
-CSRCS += lv_printf.c
-CSRCS += lv_bidi.c
-
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_misc
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_misc
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_misc"
diff --git a/src/libs/lvgl/src/lv_misc/lv_printf.c b/src/libs/lvgl/src/lv_misc/lv_printf.c
deleted file mode 100644
index e05f35be..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_printf.c
+++ /dev/null
@@ -1,852 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// \author (c) Marco Paland (info@paland.com)
-// 2014-2019, PALANDesign Hannover, Germany
-//
-// \license The MIT License (MIT)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-// \brief Tiny printf, sprintf and (v)snprintf implementation, optimized for speed on
-// embedded systems with a very limited resources. These routines are thread
-// safe and reentrant!
-// Use this instead of the bloated standard/newlib printf cause these use
-// malloc for printf (and may not be thread safe).
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "lv_printf.h"
-
-#if LV_SPRINTF_CUSTOM == 0
-
-#include <stdbool.h>
-#include <stdint.h>
-
-
-// 'ntoa' conversion buffer size, this must be big enough to hold one converted
-// numeric number including padded zeros (dynamically created on stack)
-// default: 32 byte
-#ifndef PRINTF_NTOA_BUFFER_SIZE
-#define PRINTF_NTOA_BUFFER_SIZE 32U
-#endif
-
-// 'ftoa' conversion buffer size, this must be big enough to hold one converted
-// float number including padded zeros (dynamically created on stack)
-// default: 32 byte
-#ifndef PRINTF_FTOA_BUFFER_SIZE
-#define PRINTF_FTOA_BUFFER_SIZE 32U
-#endif
-
-// support for the floating point type (%f)
-// default: activated
-#ifndef PRINTF_DISABLE_SUPPORT_FLOAT
-#define PRINTF_SUPPORT_FLOAT
-#endif
-
-// support for exponential floating point notation (%e/%g)
-// default: activated
-#ifndef PRINTF_DISABLE_SUPPORT_EXPONENTIAL
-#define PRINTF_SUPPORT_EXPONENTIAL
-#endif
-
-// define the default floating point precision
-// default: 6 digits
-#ifndef PRINTF_DEFAULT_FLOAT_PRECISION
-#define PRINTF_DEFAULT_FLOAT_PRECISION 6U
-#endif
-
-// define the largest float suitable to print with %f
-// default: 1e9
-#ifndef PRINTF_MAX_FLOAT
-#define PRINTF_MAX_FLOAT 1e9
-#endif
-
-// support for the long long types (%llu or %p)
-// default: activated
-#ifndef PRINTF_DISABLE_SUPPORT_LONG_LONG
-#define PRINTF_SUPPORT_LONG_LONG
-#endif
-
-// support for the ptrdiff_t type (%t)
-// ptrdiff_t is normally defined in <stddef.h> as long or long long type
-// default: activated
-#ifndef PRINTF_DISABLE_SUPPORT_PTRDIFF_T
-#define PRINTF_SUPPORT_PTRDIFF_T
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-// internal flag definitions
-#define FLAGS_ZEROPAD (1U << 0U)
-#define FLAGS_LEFT (1U << 1U)
-#define FLAGS_PLUS (1U << 2U)
-#define FLAGS_SPACE (1U << 3U)
-#define FLAGS_HASH (1U << 4U)
-#define FLAGS_UPPERCASE (1U << 5U)
-#define FLAGS_CHAR (1U << 6U)
-#define FLAGS_SHORT (1U << 7U)
-#define FLAGS_LONG (1U << 8U)
-#define FLAGS_LONG_LONG (1U << 9U)
-#define FLAGS_PRECISION (1U << 10U)
-#define FLAGS_ADAPT_EXP (1U << 11U)
-
-
-// import float.h for DBL_MAX
-#if defined(PRINTF_SUPPORT_FLOAT)
-#include <float.h>
-#endif
-
-
-// output function type
-typedef void (*out_fct_type)(char character, void* buffer, size_t idx, size_t maxlen);
-
-
-// wrapper (used as buffer) for output function type
-typedef struct {
- void (*fct)(char character, void* arg);
- void* arg;
-} out_fct_wrap_type;
-
-
-// internal buffer output
-static inline void _out_buffer(char character, void* buffer, size_t idx, size_t maxlen)
-{
- if (idx < maxlen) {
- ((char*)buffer)[idx] = character;
- }
-}
-
-
-// internal null output
-static inline void _out_null(char character, void* buffer, size_t idx, size_t maxlen)
-{
- (void)character; (void)buffer; (void)idx; (void)maxlen;
-}
-
-
-
-// internal secure strlen
-// \return The length of the string (excluding the terminating 0) limited by 'maxsize'
-static inline unsigned int _strnlen_s(const char* str, size_t maxsize)
-{
- const char* s;
- for (s = str; *s && maxsize--; ++s);
- return (unsigned int)(s - str);
-}
-
-
-// internal test if char is a digit (0-9)
-// \return true if char is a digit
-static inline bool _is_digit(char ch)
-{
- return (ch >= '0') && (ch <= '9');
-}
-
-
-// internal ASCII string to unsigned int conversion
-static unsigned int _atoi(const char** str)
-{
- unsigned int i = 0U;
- while (_is_digit(**str)) {
- i = i * 10U + (unsigned int)(*((*str)++) - '0');
- }
- return i;
-}
-
-
-// output the specified string in reverse, taking care of any zero-padding
-static size_t _out_rev(out_fct_type out, char* buffer, size_t idx, size_t maxlen, const char* buf, size_t len, unsigned int width, unsigned int flags)
-{
- const size_t start_idx = idx;
-
- // pad spaces up to given width
- if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
- size_t i;
- for (i = len; i < width; i++) {
- out(' ', buffer, idx++, maxlen);
- }
- }
-
- // reverse string
- while (len) {
- out(buf[--len], buffer, idx++, maxlen);
- }
-
- // append pad spaces up to given width
- if (flags & FLAGS_LEFT) {
- while (idx - start_idx < width) {
- out(' ', buffer, idx++, maxlen);
- }
- }
-
- return idx;
-}
-
-
-// internal itoa format
-static size_t _ntoa_format(out_fct_type out, char* buffer, size_t idx, size_t maxlen, char* buf, size_t len, bool negative, unsigned int base, unsigned int prec, unsigned int width, unsigned int flags)
-{
- // pad leading zeros
- if (!(flags & FLAGS_LEFT)) {
- if (width && (flags & FLAGS_ZEROPAD) && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
- width--;
- }
- while ((len < prec) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
- }
- while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
- }
- }
-
- // handle hash
- if (flags & FLAGS_HASH) {
- if (!(flags & FLAGS_PRECISION) && len && ((len == prec) || (len == width))) {
- len--;
- if (len && (base == 16U)) {
- len--;
- }
- }
- if ((base == 16U) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = 'x';
- }
- else if ((base == 16U) && (flags & FLAGS_UPPERCASE) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = 'X';
- }
- else if ((base == 2U) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = 'b';
- }
- if (len < PRINTF_NTOA_BUFFER_SIZE) {
- buf[len++] = '0';
- }
- }
-
- if (len < PRINTF_NTOA_BUFFER_SIZE) {
- if (negative) {
- buf[len++] = '-';
- }
- else if (flags & FLAGS_PLUS) {
- buf[len++] = '+'; // ignore the space if the '+' exists
- }
- else if (flags & FLAGS_SPACE) {
- buf[len++] = ' ';
- }
- }
-
- return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
-}
-
-
-// internal itoa for 'long' type
-static size_t _ntoa_long(out_fct_type out, char* buffer, size_t idx, size_t maxlen, unsigned long value, bool negative, unsigned long base, unsigned int prec, unsigned int width, unsigned int flags)
-{
- char buf[PRINTF_NTOA_BUFFER_SIZE];
- size_t len = 0U;
-
- // no hash for 0 values
- if (!value) {
- flags &= ~FLAGS_HASH;
- }
-
- // write if precision != 0 and value is != 0
- if (!(flags & FLAGS_PRECISION) || value) {
- do {
- const char digit = (char)(value % base);
- buf[len++] = digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
- value /= base;
- } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
- }
-
- return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int)base, prec, width, flags);
-}
-
-
-// internal itoa for 'long long' type
-#if defined(PRINTF_SUPPORT_LONG_LONG)
-static size_t _ntoa_long_long(out_fct_type out, char* buffer, size_t idx, size_t maxlen, unsigned long long value, bool negative, unsigned long long base, unsigned int prec, unsigned int width, unsigned int flags)
-{
- char buf[PRINTF_NTOA_BUFFER_SIZE];
- size_t len = 0U;
-
- // no hash for 0 values
- if (!value) {
- flags &= ~FLAGS_HASH;
- }
-
- // write if precision != 0 and value is != 0
- if (!(flags & FLAGS_PRECISION) || value) {
- do {
- const char digit = (char)(value % base);
- buf[len++] = digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
- value /= base;
- } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
- }
-
- return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int)base, prec, width, flags);
-}
-#endif // PRINTF_SUPPORT_LONG_LONG
-
-
-#if defined(PRINTF_SUPPORT_FLOAT)
-
-#if defined(PRINTF_SUPPORT_EXPONENTIAL)
-// forward declaration so that _ftoa can switch to exp notation for values > PRINTF_MAX_FLOAT
-static size_t _etoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags);
-#endif
-
-
-// internal ftoa for fixed decimal floating point
-static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags)
-{
- char buf[PRINTF_FTOA_BUFFER_SIZE];
- size_t len = 0U;
- double diff = 0.0;
-
- // powers of 10
- static const double pow10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
-
- // test for special values
- if (value != value)
- return _out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags);
- if (value < -DBL_MAX)
- return _out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags);
- if (value > DBL_MAX)
- return _out_rev(out, buffer, idx, maxlen, (flags & FLAGS_PLUS) ? "fni+" : "fni", (flags & FLAGS_PLUS) ? 4U : 3U, width, flags);
-
- // test for very large values
- // standard printf behavior is to print EVERY whole number digit -- which could be 100s of characters overflowing your buffers == bad
- if ((value > PRINTF_MAX_FLOAT) || (value < -PRINTF_MAX_FLOAT)) {
-#if defined(PRINTF_SUPPORT_EXPONENTIAL)
- return _etoa(out, buffer, idx, maxlen, value, prec, width, flags);
-#else
- return 0U;
-#endif
- }
-
- // test for negative
- bool negative = false;
- if (value < 0) {
- negative = true;
- value = 0 - value;
- }
-
- // set default precision, if not set explicitly
- if (!(flags & FLAGS_PRECISION)) {
- prec = PRINTF_DEFAULT_FLOAT_PRECISION;
- }
- // limit precision to 9, cause a prec >= 10 can lead to overflow errors
- while ((len < PRINTF_FTOA_BUFFER_SIZE) && (prec > 9U)) {
- buf[len++] = '0';
- prec--;
- }
-
- int whole = (int)value;
- double tmp = (value - whole) * pow10[prec];
- unsigned long frac = (unsigned long)tmp;
- diff = tmp - frac;
-
- if (diff > 0.5) {
- ++frac;
- // handle rollover, e.g. case 0.99 with prec 1 is 1.0
- if (frac >= pow10[prec]) {
- frac = 0;
- ++whole;
- }
- }
- else if (diff < 0.5) {
- }
- else if ((frac == 0U) || (frac & 1U)) {
- // if halfway, round up if odd OR if last digit is 0
- ++frac;
- }
-
- if (prec == 0U) {
- diff = value - (double)whole;
- if ((!(diff < 0.5) || (diff > 0.5)) && (whole & 1)) {
- // exactly 0.5 and ODD, then round up
- // 1.5 -> 2, but 2.5 -> 2
- ++whole;
- }
- }
- else {
- unsigned int count = prec;
- // now do fractional part, as an unsigned number
- while (len < PRINTF_FTOA_BUFFER_SIZE) {
- --count;
- buf[len++] = (char)(48U + (frac % 10U));
- if (!(frac /= 10U)) {
- break;
- }
- }
- // add extra 0s
- while ((len < PRINTF_FTOA_BUFFER_SIZE) && (count-- > 0U)) {
- buf[len++] = '0';
- }
- if (len < PRINTF_FTOA_BUFFER_SIZE) {
- // add decimal
- buf[len++] = '.';
- }
- }
-
- // do whole part, number is reversed
- while (len < PRINTF_FTOA_BUFFER_SIZE) {
- buf[len++] = (char)(48 + (whole % 10));
- if (!(whole /= 10)) {
- break;
- }
- }
-
- // pad leading zeros
- if (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD)) {
- if (width && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
- width--;
- }
- while ((len < width) && (len < PRINTF_FTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
- }
- }
-
- if (len < PRINTF_FTOA_BUFFER_SIZE) {
- if (negative) {
- buf[len++] = '-';
- }
- else if (flags & FLAGS_PLUS) {
- buf[len++] = '+'; // ignore the space if the '+' exists
- }
- else if (flags & FLAGS_SPACE) {
- buf[len++] = ' ';
- }
- }
-
- return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
-}
-
-
-#if defined(PRINTF_SUPPORT_EXPONENTIAL)
-// internal ftoa variant for exponential floating-point type, contributed by Martijn Jasperse <m.jasperse@gmail.com>
-static size_t _etoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags)
-{
- // check for NaN and special values
- if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
- return _ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
- }
-
- // determine the sign
- const bool negative = value < 0;
- if (negative) {
- value = -value;
- }
-
- // default precision
- if (!(flags & FLAGS_PRECISION)) {
- prec = PRINTF_DEFAULT_FLOAT_PRECISION;
- }
-
- // determine the decimal exponent
- // based on the algorithm by David Gay (https://www.ampl.com/netlib/fp/dtoa.c)
- union {
- uint64_t U;
- double F;
- } conv;
-
- conv.F = value;
- int exp2 = (int)((conv.U >> 52U) & 0x07FFU) - 1023; // effectively log2
- conv.U = (conv.U & ((1ULL << 52U) - 1U)) | (1023ULL << 52U); // drop the exponent so conv.F is now in [1,2)
- // now approximate log10 from the log2 integer part and an expansion of ln around 1.5
- int expval = (int)(0.1760912590558 + exp2 * 0.301029995663981 + (conv.F - 1.5) * 0.289529654602168);
- // now we want to compute 10^expval but we want to be sure it won't overflow
- exp2 = (int)(expval * 3.321928094887362 + 0.5);
- const double z = expval * 2.302585092994046 - exp2 * 0.6931471805599453;
- const double z2 = z * z;
- conv.U = (uint64_t)(exp2 + 1023) << 52U;
- // compute exp(z) using continued fractions, see https://en.wikipedia.org/wiki/Exponential_function#Continued_fractions_for_ex
- conv.F *= 1 + 2 * z / (2 - z + (z2 / (6 + (z2 / (10 + z2 / 14)))));
- // correct for rounding errors
- if (value < conv.F) {
- expval--;
- conv.F /= 10;
- }
-
- // the exponent format is "%+03d" and largest value is "307", so set aside 4-5 characters
- unsigned int minwidth = ((expval < 100) && (expval > -100)) ? 4U : 5U;
-
- // in "%g" mode, "prec" is the number of *significant figures* not decimals
- if (flags & FLAGS_ADAPT_EXP) {
- // do we want to fall-back to "%f" mode?
- if ((value >= 1e-4) && (value < 1e6)) {
- if ((int)prec > expval) {
- prec = (unsigned)((int)prec - expval - 1);
- }
- else {
- prec = 0;
- }
- flags |= FLAGS_PRECISION; // make sure _ftoa respects precision
- // no characters in exponent
- minwidth = 0U;
- expval = 0;
- }
- else {
- // we use one sigfig for the whole part
- if ((prec > 0) && (flags & FLAGS_PRECISION)) {
- --prec;
- }
- }
- }
-
- // will everything fit?
- unsigned int fwidth = width;
- if (width > minwidth) {
- // we didn't fall-back so subtract the characters required for the exponent
- fwidth -= minwidth;
- } else {
- // not enough characters, so go back to default sizing
- fwidth = 0U;
- }
- if ((flags & FLAGS_LEFT) && minwidth) {
- // if we're padding on the right, DON'T pad the floating part
- fwidth = 0U;
- }
-
- // rescale the float value
- if (expval) {
- value /= conv.F;
- }
-
- // output the floating part
- const size_t start_idx = idx;
- idx = _ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec, fwidth, flags & ~FLAGS_ADAPT_EXP);
-
- // output the exponent part
- if (minwidth) {
- // output the exponential symbol
- out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
- // output the exponent value
- idx = _ntoa_long(out, buffer, idx, maxlen, (expval < 0) ? -expval : expval, expval < 0, 10, 0, minwidth-1, FLAGS_ZEROPAD | FLAGS_PLUS);
- // might need to right-pad spaces
- if (flags & FLAGS_LEFT) {
- while (idx - start_idx < width) out(' ', buffer, idx++, maxlen);
- }
- }
- return idx;
-}
-#endif // PRINTF_SUPPORT_EXPONENTIAL
-#endif // PRINTF_SUPPORT_FLOAT
-
-
-// internal vsnprintf
-static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const char* format, va_list va)
-{
- unsigned int flags, width, precision, n;
- size_t idx = 0U;
-
- if (!buffer) {
- // use null output function
- out = _out_null;
- }
-
- while (*format)
- {
- // format specifier? %[flags][width][.precision][length]
- if (*format != '%') {
- // no
- out(*format, buffer, idx++, maxlen);
- format++;
- continue;
- }
- else {
- // yes, evaluate it
- format++;
- }
-
- // evaluate flags
- flags = 0U;
- do {
- switch (*format) {
- case '0': flags |= FLAGS_ZEROPAD; format++; n = 1U; break;
- case '-': flags |= FLAGS_LEFT; format++; n = 1U; break;
- case '+': flags |= FLAGS_PLUS; format++; n = 1U; break;
- case ' ': flags |= FLAGS_SPACE; format++; n = 1U; break;
- case '#': flags |= FLAGS_HASH; format++; n = 1U; break;
- default : n = 0U; break;
- }
- } while (n);
-
- // evaluate width field
- width = 0U;
- if (_is_digit(*format)) {
- width = _atoi(&format);
- }
- else if (*format == '*') {
- const int w = va_arg(va, int);
- if (w < 0) {
- flags |= FLAGS_LEFT; // reverse padding
- width = (unsigned int)-w;
- }
- else {
- width = (unsigned int)w;
- }
- format++;
- }
-
- // evaluate precision field
- precision = 0U;
- if (*format == '.') {
- flags |= FLAGS_PRECISION;
- format++;
- if (_is_digit(*format)) {
- precision = _atoi(&format);
- }
- else if (*format == '*') {
- const int prec = (int)va_arg(va, int);
- precision = prec > 0 ? (unsigned int)prec : 0U;
- format++;
- }
- }
-
- // evaluate length field
- switch (*format) {
- case 'l' :
- flags |= FLAGS_LONG;
- format++;
- if (*format == 'l') {
- flags |= FLAGS_LONG_LONG;
- format++;
- }
- break;
- case 'h' :
- flags |= FLAGS_SHORT;
- format++;
- if (*format == 'h') {
- flags |= FLAGS_CHAR;
- format++;
- }
- break;
-#if defined(PRINTF_SUPPORT_PTRDIFF_T)
- case 't' :
- flags |= (sizeof(ptrdiff_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
- format++;
- break;
-#endif
- case 'j' :
- flags |= (sizeof(intmax_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
- format++;
- break;
- case 'z' :
- flags |= (sizeof(size_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
- format++;
- break;
- default :
- break;
- }
-
- // evaluate specifier
- switch (*format) {
- case 'd' :
- case 'i' :
- case 'u' :
- case 'x' :
- case 'X' :
- case 'o' :
- case 'b' : {
- // set the base
- unsigned int base;
- if (*format == 'x' || *format == 'X') {
- base = 16U;
- }
- else if (*format == 'o') {
- base = 8U;
- }
- else if (*format == 'b') {
- base = 2U;
- }
- else {
- base = 10U;
- flags &= ~FLAGS_HASH; // no hash for dec format
- }
- // uppercase
- if (*format == 'X') {
- flags |= FLAGS_UPPERCASE;
- }
-
- // no plus or space flag for u, x, X, o, b
- if ((*format != 'i') && (*format != 'd')) {
- flags &= ~(FLAGS_PLUS | FLAGS_SPACE);
- }
-
- // ignore '0' flag when precision is given
- if (flags & FLAGS_PRECISION) {
- flags &= ~FLAGS_ZEROPAD;
- }
-
- // convert the integer
- if ((*format == 'i') || (*format == 'd')) {
- // signed
- if (flags & FLAGS_LONG_LONG) {
-#if defined(PRINTF_SUPPORT_LONG_LONG)
- const long long value = va_arg(va, long long);
- idx = _ntoa_long_long(out, buffer, idx, maxlen, (unsigned long long)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
-#endif
- }
- else if (flags & FLAGS_LONG) {
- const long value = va_arg(va, long);
- idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
- }
- else {
- const int value = (flags & FLAGS_CHAR) ? (char)va_arg(va, int) : (flags & FLAGS_SHORT) ? (short int)va_arg(va, int) : va_arg(va, int);
- idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned int)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
- }
- }
- else {
- // unsigned
- if (flags & FLAGS_LONG_LONG) {
-#if defined(PRINTF_SUPPORT_LONG_LONG)
- idx = _ntoa_long_long(out, buffer, idx, maxlen, va_arg(va, unsigned long long), false, base, precision, width, flags);
-#endif
- }
- else if (flags & FLAGS_LONG) {
- idx = _ntoa_long(out, buffer, idx, maxlen, va_arg(va, unsigned long), false, base, precision, width, flags);
- }
- else {
- const unsigned int value = (flags & FLAGS_CHAR) ? (unsigned char)va_arg(va, unsigned int) : (flags & FLAGS_SHORT) ? (unsigned short int)va_arg(va, unsigned int) : va_arg(va, unsigned int);
- idx = _ntoa_long(out, buffer, idx, maxlen, value, false, base, precision, width, flags);
- }
- }
- format++;
- break;
- }
-#if defined(PRINTF_SUPPORT_FLOAT)
- case 'f' :
- case 'F' :
- if (*format == 'F') flags |= FLAGS_UPPERCASE;
- idx = _ftoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags);
- format++;
- break;
-#if defined(PRINTF_SUPPORT_EXPONENTIAL)
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- if ((*format == 'g')||(*format == 'G')) flags |= FLAGS_ADAPT_EXP;
- if ((*format == 'E')||(*format == 'G')) flags |= FLAGS_UPPERCASE;
- idx = _etoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags);
- format++;
- break;
-#endif // PRINTF_SUPPORT_EXPONENTIAL
-#endif // PRINTF_SUPPORT_FLOAT
- case 'c' : {
- unsigned int l = 1U;
- // pre padding
- if (!(flags & FLAGS_LEFT)) {
- while (l++ < width) {
- out(' ', buffer, idx++, maxlen);
- }
- }
- // char output
- out((char)va_arg(va, int), buffer, idx++, maxlen);
- // post padding
- if (flags & FLAGS_LEFT) {
- while (l++ < width) {
- out(' ', buffer, idx++, maxlen);
- }
- }
- format++;
- break;
- }
-
- case 's' : {
- const char* p = va_arg(va, char*);
- unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
- // pre padding
- if (flags & FLAGS_PRECISION) {
- l = (l < precision ? l : precision);
- }
- if (!(flags & FLAGS_LEFT)) {
- while (l++ < width) {
- out(' ', buffer, idx++, maxlen);
- }
- }
- // string output
- while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
- out(*(p++), buffer, idx++, maxlen);
- }
- // post padding
- if (flags & FLAGS_LEFT) {
- while (l++ < width) {
- out(' ', buffer, idx++, maxlen);
- }
- }
- format++;
- break;
- }
-
- case 'p' : {
- width = sizeof(void*) * 2U;
- flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
-#if defined(PRINTF_SUPPORT_LONG_LONG)
- const bool is_ll = sizeof(uintptr_t) == sizeof(long long);
- if (is_ll) {
- idx = _ntoa_long_long(out, buffer, idx, maxlen, (uintptr_t)va_arg(va, void*), false, 16U, precision, width, flags);
- }
- else {
-#endif
- idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long)((uintptr_t)va_arg(va, void*)), false, 16U, precision, width, flags);
-#if defined(PRINTF_SUPPORT_LONG_LONG)
- }
-#endif
- format++;
- break;
- }
-
- case '%' :
- out('%', buffer, idx++, maxlen);
- format++;
- break;
-
- default :
- out(*format, buffer, idx++, maxlen);
- format++;
- break;
- }
- }
-
- // termination
- out((char)0, buffer, idx < maxlen ? idx : maxlen - 1U, maxlen);
-
- // return written chars without terminating \0
- return (int)idx;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-
-int lv_snprintf(char* buffer, size_t count, const char* format, ...)
-{
- va_list va;
- va_start(va, format);
- const int ret = _vsnprintf(_out_buffer, buffer, count, format, va);
- va_end(va);
- return ret;
-}
-
-int lv_vsnprintf(char* buffer, size_t count, const char* format, va_list va)
-{
- return _vsnprintf(_out_buffer, buffer, count, format, va);
-}
-
-#endif /*LV_SPRINTF_CUSTOM*/
-
diff --git a/src/libs/lvgl/src/lv_misc/lv_printf.h b/src/libs/lvgl/src/lv_misc/lv_printf.h
deleted file mode 100644
index b3b8598d..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_printf.h
+++ /dev/null
@@ -1,75 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// \author (c) Marco Paland (info@paland.com)
-// 2014-2019, PALANDesign Hannover, Germany
-//
-// \license The MIT License (MIT)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-// \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on
-// embedded systems with a very limited resources.
-// Use this instead of bloated standard/newlib printf.
-// These routines are thread safe and reentrant.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _LV_PRINTF_H_
-#define _LV_PRINTF_H_
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_SPRINTF_CUSTOM == 0
-
-#include <stdarg.h>
-#include <stddef.h>
-
-/**
- * Tiny snprintf/vsnprintf implementation
- * \param buffer A pointer to the buffer where to store the formatted string
- * \param count The maximum number of characters to store in the buffer, including a terminating null character
- * \param format A string that specifies the format of the output
- * \param va A value identifying a variable arguments list
- * \return The number of characters that COULD have been written into the buffer, not counting the terminating
- * null character. A value equal or larger than count indicates truncation. Only when the returned value
- * is non-negative and less than count, the string has been completely written.
- */
-int lv_snprintf(char* buffer, size_t count, const char* format, ...);
-int lv_vsnprintf(char* buffer, size_t count, const char* format, va_list va);
-
-#else
-#include LV_SPRINTF_INCLUDE
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif // _PRINTF_H_
diff --git a/src/libs/lvgl/src/lv_misc/lv_task.c b/src/libs/lvgl/src/lv_misc/lv_task.c
deleted file mode 100644
index 5ac36edb..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_task.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/**
- * @file lv_task.c
- * An 'lv_task' is a void (*fp) (void* param) type function which will be called periodically.
- * A priority (5 levels + disable) can be assigned to lv_tasks.
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stddef.h>
-#include "lv_task.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_hal/lv_hal_tick.h"
-#include "lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-#define IDLE_MEAS_PERIOD 500 /*[ms]*/
-#define DEF_PRIO LV_TASK_PRIO_MID
-#define DEF_PERIOD 500
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_task_exec(lv_task_t * task);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static bool lv_task_run = false;
-static uint8_t idle_last = 0;
-static bool task_deleted;
-static bool task_created;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Init the lv_task module
- */
-void lv_task_core_init(void)
-{
- lv_ll_init(&LV_GC_ROOT(_lv_task_ll), sizeof(lv_task_t));
-
- /*Initially enable the lv_task handling*/
- lv_task_enable(true);
-}
-
-/**
- * Call it periodically to handle lv_tasks.
- */
-LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
-{
- LV_LOG_TRACE("lv_task_handler started");
-
- /*Avoid concurrent running of the task handler*/
- static bool already_running = false;
- if(already_running) return;
- already_running = true;
-
- static uint32_t idle_period_start = 0;
- static uint32_t handler_start = 0;
- static uint32_t busy_time = 0;
-
- if(lv_task_run == false) {
- already_running = false; /*Release mutex*/
- return;
- }
-
- handler_start = lv_tick_get();
-
- /* Run all task from the highest to the lowest priority
- * If a lower priority task is executed check task again from the highest priority
- * but on the priority of executed tasks don't run tasks before the executed*/
- lv_task_t * task_interrupter = NULL;
- lv_task_t * next;
- bool end_flag;
- do {
- end_flag = true;
- task_deleted = false;
- task_created = false;
- LV_GC_ROOT(_lv_task_act) = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
- while(LV_GC_ROOT(_lv_task_act)) {
- /* The task might be deleted if it runs only once ('once = 1')
- * So get next element until the current is surely valid*/
- next = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), LV_GC_ROOT(_lv_task_act));
-
- /*We reach priority of the turned off task. There is nothing more to do.*/
- if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == LV_TASK_PRIO_OFF) {
- break;
- }
-
- /*Here is the interrupter task. Don't execute it again.*/
- if(LV_GC_ROOT(_lv_task_act) == task_interrupter) {
- task_interrupter = NULL; /*From this point only task after the interrupter comes, so
- the interrupter is not interesting anymore*/
- LV_GC_ROOT(_lv_task_act) = next;
- continue; /*Load the next task*/
- }
-
- /*Just try to run the tasks with highest priority.*/
- if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == LV_TASK_PRIO_HIGHEST) {
- lv_task_exec(LV_GC_ROOT(_lv_task_act));
- }
- /*Tasks with higher priority than the interrupted shall be run in every case*/
- else if(task_interrupter) {
- if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio > task_interrupter->prio) {
- if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
- if(!task_created && !task_deleted) {
- /*Check all tasks again from the highest priority */
- task_interrupter = LV_GC_ROOT(_lv_task_act);
- end_flag = false;
- break;
- }
- }
- }
- }
- /* It is no interrupter task or we already reached it earlier.
- * Just run the remaining tasks*/
- else {
- if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
- if(!task_created && !task_deleted) {
- task_interrupter = LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
- end_flag = false;
- break;
- }
- }
- }
-
- /*If a task was created or deleted then this or the next item might be corrupted*/
- if(task_created || task_deleted) {
- task_interrupter = NULL;
- break;
- }
-
- LV_GC_ROOT(_lv_task_act) = next; /*Load the next task*/
- }
- } while(!end_flag);
-
- busy_time += lv_tick_elaps(handler_start);
- uint32_t idle_period_time = lv_tick_elaps(idle_period_start);
- if(idle_period_time >= IDLE_MEAS_PERIOD) {
-
- idle_last = (uint32_t)((uint32_t)busy_time * 100) / IDLE_MEAS_PERIOD; /*Calculate the busy percentage*/
- idle_last = idle_last > 100 ? 0 : 100 - idle_last; /*But we need idle time*/
- busy_time = 0;
- idle_period_start = lv_tick_get();
- }
-
- already_running = false; /*Release the mutex*/
-
- LV_LOG_TRACE("lv_task_handler ready");
-}
-/**
- * Create an "empty" task. It needs to initialzed with at least
- * `lv_task_set_cb` and `lv_task_set_period`
- * @return pointer to the craeted task
- */
-lv_task_t * lv_task_create_basic(void)
-{
- lv_task_t * new_task = NULL;
- lv_task_t * tmp;
-
- /*Create task lists in order of priority from high to low*/
- tmp = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));
-
- /*It's the first task*/
- if(NULL == tmp) {
- new_task = lv_ll_ins_head(&LV_GC_ROOT(_lv_task_ll));
- LV_ASSERT_MEM(new_task);
- if(new_task == NULL) return NULL;
- }
- /*Insert the new task to proper place according to its priority*/
- else {
- do {
- if(tmp->prio <= DEF_PRIO) {
- new_task = lv_ll_ins_prev(&LV_GC_ROOT(_lv_task_ll), tmp);
- LV_ASSERT_MEM(new_task);
- if(new_task == NULL) return NULL;
- break;
- }
- tmp = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), tmp);
- } while(tmp != NULL);
-
- /*Only too high priority tasks were found. Add the task to the end*/
- if(tmp == NULL) {
- new_task = lv_ll_ins_tail(&LV_GC_ROOT(_lv_task_ll));
- LV_ASSERT_MEM(new_task);
- if(new_task == NULL) return NULL;
- }
- }
-
- new_task->period = DEF_PERIOD;
- new_task->task_cb = NULL;
- new_task->prio = DEF_PRIO;
-
- new_task->once = 0;
- new_task->last_run = lv_tick_get();
-
- new_task->user_data = NULL;
-
- task_created = true;
-
- return new_task;
-}
-
-/**
- * Create a new lv_task
- * @param task_xcb a callback which is the task itself. It will be called periodically.
- * (the 'x' in the argument name indicates that its not a fully generic function because it not follows
- * the `func_name(object, callback, ...)` convention)
- * @param period call period in ms unit
- * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is stopped)
- * @param user_data custom parameter
- * @return pointer to the new task
- */
-lv_task_t * lv_task_create(lv_task_cb_t task_cb, uint32_t period, lv_task_prio_t prio, void * user_data)
-{
- lv_task_t * new_task = lv_task_create_basic();
- LV_ASSERT_MEM(new_task);
- if(new_task == NULL) return NULL;
-
- lv_task_set_cb(new_task, task_cb);
- lv_task_set_period(new_task, period);
- lv_task_set_prio(new_task, prio);
- new_task->user_data = user_data;
-
- return new_task;
-}
-
-/**
- * Set the callback the task (the function to call periodically)
- * @param task pointer to a task
- * @param task_cb teh function to call periodically
- */
-void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb)
-{
- task->task_cb = task_cb;
-}
-
-/**
- * Delete a lv_task
- * @param task pointer to task created by task
- */
-void lv_task_del(lv_task_t * task)
-{
- lv_ll_rem(&LV_GC_ROOT(_lv_task_ll), task);
-
- lv_mem_free(task);
-
- if(LV_GC_ROOT(_lv_task_act) == task) task_deleted = true; /*The active task was deleted*/
-}
-
-/**
- * Set new priority for a lv_task
- * @param task pointer to a lv_task
- * @param prio the new priority
- */
-void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio)
-{
- if(task->prio == prio) return;
-
- /*Find the tasks with new priority*/
- lv_task_t * i;
- LV_LL_READ(LV_GC_ROOT(_lv_task_ll), i)
- {
- if(i->prio <= prio) {
- if(i != task) lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, i);
- break;
- }
- }
-
- /*There was no such a low priority so far then add the node to the tail*/
- if(i == NULL) {
- lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, NULL);
- }
-
- task->prio = prio;
-}
-
-/**
- * Set new period for a lv_task
- * @param task pointer to a lv_task
- * @param period the new period
- */
-void lv_task_set_period(lv_task_t * task, uint32_t period)
-{
- task->period = period;
-}
-
-/**
- * Make a lv_task ready. It will not wait its period.
- * @param task pointer to a lv_task.
- */
-void lv_task_ready(lv_task_t * task)
-{
- task->last_run = lv_tick_get() - task->period - 1;
-}
-
-/**
- * Delete the lv_task after one call
- * @param task pointer to a lv_task.
- */
-void lv_task_once(lv_task_t * task)
-{
- task->once = 1;
-}
-
-/**
- * Reset a lv_task.
- * It will be called the previously set period milliseconds later.
- * @param task pointer to a lv_task.
- */
-void lv_task_reset(lv_task_t * task)
-{
- task->last_run = lv_tick_get();
-}
-
-/**
- * Enable or disable the whole lv_task handling
- * @param en: true: lv_task handling is running, false: lv_task handling is suspended
- */
-void lv_task_enable(bool en)
-{
- lv_task_run = en;
-}
-
-/**
- * Get idle percentage
- * @return the lv_task idle in percentage
- */
-uint8_t lv_task_get_idle(void)
-{
- return idle_last;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Execute task if its the priority is appropriate
- * @param task pointer to lv_task
- * @return true: execute, false: not executed
- */
-static bool lv_task_exec(lv_task_t * task)
-{
- bool exec = false;
-
- /*Execute if at least 'period' time elapsed*/
- uint32_t elp = lv_tick_elaps(task->last_run);
- if(elp >= task->period) {
- task->last_run = lv_tick_get();
- task_deleted = false;
- task_created = false;
- if(task->task_cb) task->task_cb(task);
-
- /*Delete if it was a one shot lv_task*/
- if(task_deleted == false) { /*The task might be deleted by itself as well*/
- if(task->once != 0) {
- lv_task_del(task);
- }
- }
- exec = true;
- }
-
- return exec;
-}
diff --git a/src/libs/lvgl/src/lv_misc/lv_task.h b/src/libs/lvgl/src/lv_misc/lv_task.h
deleted file mode 100644
index 05ff02b6..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_task.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * @file lv_task.c
- * An 'lv_task' is a void (*fp) (void* param) type function which will be called periodically.
- * A priority (5 levels + disable) can be assigned to lv_tasks.
- */
-
-#ifndef LV_TASK_H
-#define LV_TASK_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "lv_mem.h"
-#include "lv_ll.h"
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_ATTRIBUTE_TASK_HANDLER
-#define LV_ATTRIBUTE_TASK_HANDLER
-#endif
-/**********************
- * TYPEDEFS
- **********************/
-
-struct _lv_task_t;
-
-/**
- * Tasks execute this type type of functions.
- */
-typedef void (*lv_task_cb_t)(struct _lv_task_t *);
-
-/**
- * Possible priorities for lv_tasks
- */
-enum {
- LV_TASK_PRIO_OFF = 0,
- LV_TASK_PRIO_LOWEST,
- LV_TASK_PRIO_LOW,
- LV_TASK_PRIO_MID,
- LV_TASK_PRIO_HIGH,
- LV_TASK_PRIO_HIGHEST,
- _LV_TASK_PRIO_NUM,
-};
-typedef uint8_t lv_task_prio_t;
-
-/**
- * Descriptor of a lv_task
- */
-typedef struct _lv_task_t
-{
- uint32_t period; /**< How often the task should run */
- uint32_t last_run; /**< Last time the task ran */
- lv_task_cb_t task_cb; /**< Task function */
-
- void * user_data; /**< Custom user data */
-
- uint8_t prio : 3; /**< Task priority */
- uint8_t once : 1; /**< 1: one shot task */
-} lv_task_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Init the lv_task module
- */
-void lv_task_core_init(void);
-
-//! @cond Doxygen_Suppress
-
-/**
- * Call it periodically to handle lv_tasks.
- */
-LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void);
-
-//! @endcond
-
-/**
- * Create an "empty" task. It needs to initialzed with at least
- * `lv_task_set_cb` and `lv_task_set_period`
- * @return pointer to the craeted task
- */
-lv_task_t * lv_task_create_basic(void);
-
-/**
- * Create a new lv_task
- * @param task_xcb a callback which is the task itself. It will be called periodically.
- * (the 'x' in the argument name indicates that its not a fully generic function because it not follows
- * the `func_name(object, callback, ...)` convention)
- * @param period call period in ms unit
- * @param prio priority of the task (LV_TASK_PRIO_OFF means the task is stopped)
- * @param user_data custom parameter
- * @return pointer to the new task
- */
-lv_task_t * lv_task_create(lv_task_cb_t task_xcb, uint32_t period, lv_task_prio_t prio, void * user_data);
-
-/**
- * Delete a lv_task
- * @param task pointer to task_cb created by task
- */
-void lv_task_del(lv_task_t * task);
-
-/**
- * Set the callback the task (the function to call periodically)
- * @param task pointer to a task
- * @param task_cb the function to call periodically
- */
-void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb);
-
-/**
- * Set new priority for a lv_task
- * @param task pointer to a lv_task
- * @param prio the new priority
- */
-void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio);
-
-/**
- * Set new period for a lv_task
- * @param task pointer to a lv_task
- * @param period the new period
- */
-void lv_task_set_period(lv_task_t * task, uint32_t period);
-
-/**
- * Make a lv_task ready. It will not wait its period.
- * @param task pointer to a lv_task.
- */
-void lv_task_ready(lv_task_t * task);
-
-/**
- * Delete the lv_task after one call
- * @param task pointer to a lv_task.
- */
-void lv_task_once(lv_task_t * task);
-
-/**
- * Reset a lv_task.
- * It will be called the previously set period milliseconds later.
- * @param task pointer to a lv_task.
- */
-void lv_task_reset(lv_task_t * task);
-
-/**
- * Enable or disable the whole lv_task handling
- * @param en: true: lv_task handling is running, false: lv_task handling is suspended
- */
-void lv_task_enable(bool en);
-
-/**
- * Get idle percentage
- * @return the lv_task idle in percentage
- */
-uint8_t lv_task_get_idle(void);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_misc/lv_templ.c b/src/libs/lvgl/src/lv_misc/lv_templ.c
deleted file mode 100644
index c5bb68c0..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_templ.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file lv_templ.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/* This typedef exists purely to keep -Wpedantic happy when the file is empty. */
-/* It can be removed. */
-typedef int keep_pedantic_happy;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_templ.h b/src/libs/lvgl/src/lv_misc/lv_templ.h
deleted file mode 100644
index 1f1b92d6..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_templ.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * @file lv_templ.h
- *
- */
-
-#ifndef LV_TEMPL_H
-#define LV_TEMPL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_txt.c b/src/libs/lvgl/src/lv_misc/lv_txt.c
deleted file mode 100644
index 9de132e9..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_txt.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/**
- * @file lv_text.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_txt.h"
-#include "lv_math.h"
-#include "lv_log.h"
-
-/*********************
- * DEFINES
- *********************/
-#define NO_BREAK_FOUND UINT32_MAX
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static inline bool is_break_char(uint32_t letter);
-
-#if LV_TXT_ENC == LV_TXT_ENC_UTF8
-static uint8_t lv_txt_utf8_size(const char * str);
-static uint32_t lv_txt_unicode_to_utf8(uint32_t letter_uni);
-static uint32_t lv_txt_utf8_conv_wc(uint32_t c);
-static uint32_t lv_txt_utf8_next(const char * txt, uint32_t * i);
-static uint32_t lv_txt_utf8_prev(const char * txt, uint32_t * i_start);
-static uint32_t lv_txt_utf8_get_byte_id(const char * txt, uint32_t utf8_id);
-static uint32_t lv_txt_utf8_get_char_id(const char * txt, uint32_t byte_id);
-static uint32_t lv_txt_utf8_get_length(const char * txt);
-#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
-static uint8_t lv_txt_iso8859_1_size(const char * str);
-static uint32_t lv_txt_unicode_to_iso8859_1(uint32_t letter_uni);
-static uint32_t lv_txt_iso8859_1_conv_wc(uint32_t c);
-static uint32_t lv_txt_iso8859_1_next(const char * txt, uint32_t * i);
-static uint32_t lv_txt_iso8859_1_prev(const char * txt, uint32_t * i_start);
-static uint32_t lv_txt_iso8859_1_get_byte_id(const char * txt, uint32_t utf8_id);
-static uint32_t lv_txt_iso8859_1_get_char_id(const char * txt, uint32_t byte_id);
-static uint32_t lv_txt_iso8859_1_get_length(const char * txt);
-#endif
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * GLOBAL VARIABLES
- **********************/
-#if LV_TXT_ENC == LV_TXT_ENC_UTF8
-uint8_t (*lv_txt_encoded_size)(const char *) = lv_txt_utf8_size;
-uint32_t (*lv_txt_unicode_to_encoded)(uint32_t) = lv_txt_unicode_to_utf8;
-uint32_t (*lv_txt_encoded_conv_wc)(uint32_t) = lv_txt_utf8_conv_wc;
-uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *) = lv_txt_utf8_next;
-uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *) = lv_txt_utf8_prev;
-uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t) = lv_txt_utf8_get_byte_id;
-uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t) = lv_txt_utf8_get_char_id;
-uint32_t (*lv_txt_get_encoded_length)(const char *) = lv_txt_utf8_get_length;
-#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
-uint8_t (*lv_txt_encoded_size)(const char *) = lv_txt_iso8859_1_size;
-uint32_t (*lv_txt_unicode_to_encoded)(uint32_t) = lv_txt_unicode_to_iso8859_1;
-uint32_t (*lv_txt_encoded_conv_wc)(uint32_t) = lv_txt_iso8859_1_conv_wc;
-uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *) = lv_txt_iso8859_1_next;
-uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *) = lv_txt_iso8859_1_prev;
-uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t) = lv_txt_iso8859_1_get_byte_id;
-uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t) = lv_txt_iso8859_1_get_char_id;
-uint32_t (*lv_txt_get_encoded_length)(const char *) = lv_txt_iso8859_1_get_length;
-
-#endif
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Get size of a text
- * @param size_res pointer to a 'point_t' variable to store the result
- * @param text pointer to a text
- * @param font pinter to font of the text
- * @param letter_space letter space of the text
- * @param txt.line_space line space of the text
- * @param flags settings for the text from 'txt_flag_t' enum
- * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid
- * line breaks
- */
-void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t * font, lv_coord_t letter_space,
- lv_coord_t line_space, lv_coord_t max_width, lv_txt_flag_t flag)
-{
- size_res->x = 0;
- size_res->y = 0;
-
- if(text == NULL) return;
- if(font == NULL) return;
-
- if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
-
- uint32_t line_start = 0;
- uint32_t new_line_start = 0;
- lv_coord_t act_line_length;
- uint8_t letter_height = lv_font_get_line_height(font);
-
- /*Calc. the height and longest line*/
- while(text[line_start] != '\0') {
- new_line_start += lv_txt_get_next_line(&text[line_start], font, letter_space, max_width, flag);
-
- if ((unsigned long)size_res->y + (unsigned long)letter_height + (unsigned long)line_space > LV_MAX_OF(lv_coord_t)) {
- LV_LOG_WARN("lv_txt_get_size: integer overflow while calculating text height");
- return;
- } else {
- size_res->y += letter_height;
- size_res->y += line_space;
- }
-
- /*Calculate the the longest line*/
- act_line_length = lv_txt_get_width(&text[line_start], new_line_start - line_start, font, letter_space, flag);
-
- size_res->x = LV_MATH_MAX(act_line_length, size_res->x);
- line_start = new_line_start;
- }
-
- /*Make the text one line taller if the last character is '\n' or '\r'*/
- if((line_start != 0) && (text[line_start - 1] == '\n' || text[line_start - 1] == '\r')) {
- size_res->y += letter_height + line_space;
- }
-
- /*Correction with the last line space or set the height manually if the text is empty*/
- if(size_res->y == 0)
- size_res->y = letter_height;
- else
- size_res->y -= line_space;
-}
-
-/**
- * Get the next word of text. A word is delimited by break characters.
- *
- * If the word cannot fit in the max_width space, obey LV_TXT_LINE_BREAK_LONG_* rules.
- *
- * If the next word cannot fit anything, return 0.
- *
- * If the first character is a break character, returns the next index.
- *
- * Example calls from lv_txt_get_next_line() assuming sufficent max_width and
- * txt = "Test text\n"
- * 0123456789
- *
- * Calls would be as follows:
- * 1. Return i=4, pointing at breakchar ' ', for the string "Test"
- * 2. Return i=5, since i=4 was a breakchar.
- * 3. Return i=9, pointing at breakchar '\n'
- * 4. Parenting lv_txt_get_next_line() would detect subsequent '\0'
- *
- * TODO: Returned word_w_ptr may overestimate the returned word's width when
- * max_width is reached. In current usage, this has no impact.
- *
- * @param txt a '\0' terminated string
- * @param font pointer to a font
- * @param letter_space letter space
- * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid line breaks
- * @param flags settings for the text from 'txt_flag_type' enum
- * @param[out] word_w_ptr width (in pixels) of the parsed word. May be NULL.
- * @param force Force return the fraction of the word that can fit in the provided space.
- * @return the index of the first char of the next word (in byte index not letter index. With UTF-8 they are different)
- */
-static uint16_t lv_txt_get_next_word(const char * txt, const lv_font_t * font,
- lv_coord_t letter_space, lv_coord_t max_width,
- lv_txt_flag_t flag, uint32_t *word_w_ptr, lv_txt_cmd_state_t * cmd_state, bool force)
-{
- if(txt == NULL || txt[0] == '\0') return 0;
- if(font == NULL) return 0;
-
- if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
-
- uint32_t i = 0, i_next = 0, i_next_next = 0; /* Iterating index into txt */
- uint32_t letter = 0; /* Letter at i */
- uint32_t letter_next = 0; /* Letter at i_next */
- lv_coord_t letter_w;
- lv_coord_t cur_w = 0; /* Pixel Width of transversed string */
- uint32_t word_len = 0; /* Number of characters in the transversed word */
- uint32_t break_index = NO_BREAK_FOUND; /* only used for "long" words */
- uint32_t break_letter_count = 0; /* Number of characters up to the long word break point */
-
- letter = lv_txt_encoded_next(txt, &i_next);
- i_next_next = i_next;
-
- /* Obtain the full word, regardless if it fits or not in max_width */
- while(txt[i] != '\0') {
- letter_next = lv_txt_encoded_next(txt, &i_next_next);
- word_len++;
-
- /*Handle the recolor command*/
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(cmd_state, letter) != false) {
- i = i_next;
- i_next = i_next_next;
- letter = letter_next;
- continue; /*Skip the letter is it is part of a command*/
- }
- }
-
- letter_w = lv_font_get_glyph_width(font, letter, letter_next);
- cur_w += letter_w;
-
- if(letter_w > 0) {
- cur_w += letter_space;
- }
-
- /* Test if this character fits within max_width */
- if(break_index == NO_BREAK_FOUND && (cur_w - letter_space) > max_width) {
- break_index = i;
- break_letter_count = word_len - 1;
- /* break_index is now pointing at the character that doesn't fit */
- }
-
- /*Check for new line chars and breakchars*/
- if(letter == '\n' || letter == '\r' || is_break_char(letter)) {
- /* Update the output width on the first character if it fits.
- * Must do this here incase first letter is a break character. */
- if(i == 0 && break_index == NO_BREAK_FOUND && word_w_ptr != NULL) *word_w_ptr = cur_w;
- word_len--;
- break;
- }
-
- /* Update the output width */
- if( word_w_ptr != NULL && break_index == NO_BREAK_FOUND ) *word_w_ptr = cur_w;
-
-
- i = i_next;
- i_next = i_next_next;
- letter = letter_next;
- }
-
- /* Entire Word fits in the provided space */
- if( break_index == NO_BREAK_FOUND ) {
- if( word_len == 0 || (letter == '\r' && letter_next == '\n') ) i = i_next;
- return i;
- }
-
-#if LV_TXT_LINE_BREAK_LONG_LEN > 0
- /* Word doesn't fit in provided space, but isn't "long" */
- if(word_len < LV_TXT_LINE_BREAK_LONG_LEN) {
- if( force ) return break_index;
- if(word_w_ptr != NULL) *word_w_ptr = 0; /* Return no word */
- return 0;
- }
-
- /* Word is "long," but insufficient amounts can fit in provided space */
- if(break_letter_count < LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN) {
- if( force ) return break_index;
- if(word_w_ptr != NULL) *word_w_ptr = 0;
- return 0;
- }
-
- /* Word is a "long", but letters may need to be better distributed */
- {
- i = break_index;
- int32_t n_move = LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN - (word_len - break_letter_count);
- /* Move pointer "i" backwards */
- for(;n_move>0; n_move--){
- lv_txt_encoded_prev(txt, &i);
- // TODO: it would be appropriate to update the returned word width here
- // However, in current usage, this doesn't impact anything.
- }
- }
- return i;
-#else
- if( force ) return break_index;
- if(word_w_ptr != NULL) *word_w_ptr = 0; /* Return no word */
- (void) break_letter_count;
- return 0;
-#endif
-}
-
-/**
- * Get the next line of text. Check line length and break chars too.
- *
- * A line of txt includes the \n character.
- *
- * @param txt a '\0' terminated string
- * @param font pointer to a font
- * @param letter_space letter space
- * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid line breaks
- * @param flags settings for the text from 'txt_flag_type' enum
- * @return the index of the first char of the new line (in byte index not letter index. With UTF-8 they are different)
- */
-uint16_t lv_txt_get_next_line(const char * txt, const lv_font_t * font,
- lv_coord_t letter_space, lv_coord_t max_width, lv_txt_flag_t flag)
-{
- if(txt == NULL) return 0;
- if(font == NULL) return 0;
-
- if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
- lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
- uint32_t i = 0; /* Iterating index into txt */
-
- while(txt[i] != '\0' && max_width > 0) {
- uint32_t word_w = 0;
- uint32_t advance = lv_txt_get_next_word(&txt[i], font, letter_space, max_width, flag, &word_w, &cmd_state, i==0);
- max_width -= word_w;
-
- if( advance == 0 ){
- if(i == 0) lv_txt_encoded_next(txt, &i); // prevent inf loops
- break;
- }
-
- i += advance;
-
- if(txt[0] == '\n' || txt[0] == '\r') break;
-
- if(txt[i] == '\n' || txt[i] == '\r'){
- i++; /* Include the following newline in the current line */
- break;
- }
-
- }
-
- /* Always step at least one to avoid infinite loops */
- if(i == 0) {
- lv_txt_encoded_next(txt, &i);
- }
-
- return i;
-}
-
-/**
- * Give the length of a text with a given font
- * @param txt a '\0' terminate string
- * @param length length of 'txt' in byte count and not characters (Á is 1 character but 2 bytes in
- * UTF-8)
- * @param font pointer to a font
- * @param letter_space letter space
- * @param flags settings for the text from 'txt_flag_t' enum
- * @return length of a char_num long text
- */
-lv_coord_t lv_txt_get_width(const char * txt, uint16_t length, const lv_font_t * font, lv_coord_t letter_space,
- lv_txt_flag_t flag)
-{
- if(txt == NULL) return 0;
- if(font == NULL) return 0;
-
- uint32_t i = 0;
- lv_coord_t width = 0;
- lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
- uint32_t letter;
- uint32_t letter_next;
-
- if(length != 0) {
- while(i < length) {
- letter = lv_txt_encoded_next(txt, &i);
- letter_next = lv_txt_encoded_next(&txt[i], NULL);
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(&cmd_state, letter) != false) {
- continue;
- }
- }
-
- lv_coord_t char_width = lv_font_get_glyph_width(font, letter, letter_next);
- if(char_width > 0) {
- width += char_width;
- width += letter_space;
- }
- }
-
- if(width > 0) {
- width -= letter_space; /*Trim the last letter space. Important if the text is center
- aligned */
- }
- }
-
- return width;
-}
-
-/**
- * Check next character in a string and decide if the character is part of the command or not
- * @param state pointer to a txt_cmd_state_t variable which stores the current state of command
- * processing (Initied. to TXT_CMD_STATE_WAIT )
- * @param c the current character
- * @return true: the character is part of a command and should not be written,
- * false: the character should be written
- */
-bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c)
-{
- bool ret = false;
-
- if(c == (uint32_t)LV_TXT_COLOR_CMD[0]) {
- if(*state == LV_TXT_CMD_STATE_WAIT) { /*Start char*/
- *state = LV_TXT_CMD_STATE_PAR;
- ret = true;
- }
- /*Other start char in parameter is escaped cmd. char */
- else if(*state == LV_TXT_CMD_STATE_PAR) {
- *state = LV_TXT_CMD_STATE_WAIT;
- }
- /*Command end */
- else if(*state == LV_TXT_CMD_STATE_IN) {
- *state = LV_TXT_CMD_STATE_WAIT;
- ret = true;
- }
- }
-
- /*Skip the color parameter and wait the space after it*/
- if(*state == LV_TXT_CMD_STATE_PAR) {
- if(c == ' ') {
- *state = LV_TXT_CMD_STATE_IN; /*After the parameter the text is in the command*/
- }
- ret = true;
- }
-
- return ret;
-}
-
-/**
- * Insert a string into an other
- * @param txt_buf the original text (must be big enough for the result text)
- * @param pos position to insert. Expressed in character index and not byte index (Different in
- * UTF-8) 0: before the original text, 1: after the first char etc.
- * @param ins_txt text to insert
- */
-void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt)
-{
- size_t old_len = strlen(txt_buf);
- size_t ins_len = strlen(ins_txt);
- size_t new_len = ins_len + old_len;
- pos = lv_txt_encoded_get_byte_id(txt_buf, pos); /*Convert to byte index instead of letter index*/
-
- /*Copy the second part into the end to make place to text to insert*/
- size_t i;
- for(i = new_len; i >= pos + ins_len; i--) {
- txt_buf[i] = txt_buf[i - ins_len];
- }
-
- /* Copy the text into the new space*/
- memcpy(txt_buf + pos, ins_txt, ins_len);
-}
-
-/**
- * Delete a part of a string
- * @param txt string to modify
- * @param pos position where to start the deleting (0: before the first char, 1: after the first
- * char etc.)
- * @param len number of characters to delete
- */
-void lv_txt_cut(char * txt, uint32_t pos, uint32_t len)
-{
-
- size_t old_len = strlen(txt);
-
- pos = lv_txt_encoded_get_byte_id(txt, pos); /*Convert to byte index instead of letter index*/
- len = lv_txt_encoded_get_byte_id(&txt[pos], len);
-
- /*Copy the second part into the end to make place to text to insert*/
- uint32_t i;
- for(i = pos; i <= old_len - len; i++) {
- txt[i] = txt[i + len];
- }
-}
-
-#if LV_TXT_ENC == LV_TXT_ENC_UTF8
-/*******************************
- * UTF-8 ENCODER/DECOER
- ******************************/
-
-/**
- * Give the size of an UTF-8 coded character
- * @param str pointer to a character in a string
- * @return length of the UTF-8 character (1,2,3 or 4). O on invalid code
- */
-static uint8_t lv_txt_utf8_size(const char * str)
-{
- if((str[0] & 0x80) == 0)
- return 1;
- else if((str[0] & 0xE0) == 0xC0)
- return 2;
- else if((str[0] & 0xF0) == 0xE0)
- return 3;
- else if((str[0] & 0xF8) == 0xF0)
- return 4;
- return 0; /*If the char was invalid tell it's 1 byte long*/
-}
-
-/**
- * Convert an Unicode letter to UTF-8.
- * @param letter_uni an Unicode letter
- * @return UTF-8 coded character in Little Endian to be compatible with C chars (e.g. 'Á', 'Ű')
- */
-static uint32_t lv_txt_unicode_to_utf8(uint32_t letter_uni)
-{
- if(letter_uni < 128) return letter_uni;
- uint8_t bytes[4];
-
- if(letter_uni < 0x0800) {
- bytes[0] = ((letter_uni >> 6) & 0x1F) | 0xC0;
- bytes[1] = ((letter_uni >> 0) & 0x3F) | 0x80;
- bytes[2] = 0;
- bytes[3] = 0;
- } else if(letter_uni < 0x010000) {
- bytes[0] = ((letter_uni >> 12) & 0x0F) | 0xE0;
- bytes[1] = ((letter_uni >> 6) & 0x3F) | 0x80;
- bytes[2] = ((letter_uni >> 0) & 0x3F) | 0x80;
- bytes[3] = 0;
- } else if(letter_uni < 0x110000) {
- bytes[0] = ((letter_uni >> 18) & 0x07) | 0xF0;
- bytes[1] = ((letter_uni >> 12) & 0x3F) | 0x80;
- bytes[2] = ((letter_uni >> 6) & 0x3F) | 0x80;
- bytes[3] = ((letter_uni >> 0) & 0x3F) | 0x80;
- }
-
- uint32_t * res_p = (uint32_t *)bytes;
- return *res_p;
-}
-
-/**
- * Convert a wide character, e.g. 'Á' little endian to be UTF-8 compatible
- * @param c a wide character or a Little endian number
- * @return `c` in big endian
- */
-static uint32_t lv_txt_utf8_conv_wc(uint32_t c)
-{
- /*Swap the bytes (UTF-8 is big endian, but the MCUs are little endian)*/
- if((c & 0x80) != 0) {
- uint32_t swapped;
- uint8_t c8[4];
- memcpy(c8, &c, 4);
- swapped = (c8[0] << 24) + (c8[1] << 16) + (c8[2] << 8) + (c8[3]);
- uint8_t i;
- for(i = 0; i < 4; i++) {
- if((swapped & 0xFF) == 0)
- swapped = (swapped >> 8); /*Ignore leading zeros (they were in the end originally)*/
- }
- c = swapped;
- }
-
- return c;
-}
-
-/**
- * Decode an UTF-8 character from a string.
- * @param txt pointer to '\0' terminated string
- * @param i start byte index in 'txt' where to start.
- * After call it will point to the next UTF-8 char in 'txt'.
- * NULL to use txt[0] as index
- * @return the decoded Unicode character or 0 on invalid UTF-8 code
- */
-static uint32_t lv_txt_utf8_next(const char * txt, uint32_t * i)
-{
- /* Unicode to UTF-8
- * 00000000 00000000 00000000 0xxxxxxx -> 0xxxxxxx
- * 00000000 00000000 00000yyy yyxxxxxx -> 110yyyyy 10xxxxxx
- * 00000000 00000000 zzzzyyyy yyxxxxxx -> 1110zzzz 10yyyyyy 10xxxxxx
- * 00000000 000wwwzz zzzzyyyy yyxxxxxx -> 11110www 10zzzzzz 10yyyyyy 10xxxxxx
- * */
-
- uint32_t result = 0;
-
- /*Dummy 'i' pointer is required*/
- uint32_t i_tmp = 0;
- if(i == NULL) i = &i_tmp;
-
- /*Normal ASCII*/
- if((txt[*i] & 0x80) == 0) {
- result = txt[*i];
- (*i)++;
- }
- /*Real UTF-8 decode*/
- else {
- /*2 bytes UTF-8 code*/
- if((txt[*i] & 0xE0) == 0xC0) {
- result = (uint32_t)(txt[*i] & 0x1F) << 6;
- (*i)++;
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += (txt[*i] & 0x3F);
- (*i)++;
- }
- /*3 bytes UTF-8 code*/
- else if((txt[*i] & 0xF0) == 0xE0) {
- result = (uint32_t)(txt[*i] & 0x0F) << 12;
- (*i)++;
-
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += (uint32_t)(txt[*i] & 0x3F) << 6;
- (*i)++;
-
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += (txt[*i] & 0x3F);
- (*i)++;
- }
- /*4 bytes UTF-8 code*/
- else if((txt[*i] & 0xF8) == 0xF0) {
- result = (uint32_t)(txt[*i] & 0x07) << 18;
- (*i)++;
-
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += (uint32_t)(txt[*i] & 0x3F) << 12;
- (*i)++;
-
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += (uint32_t)(txt[*i] & 0x3F) << 6;
- (*i)++;
-
- if((txt[*i] & 0xC0) != 0x80) return 0; /*Invalid UTF-8 code*/
- result += txt[*i] & 0x3F;
- (*i)++;
- } else {
- (*i)++; /*Not UTF-8 char. Go the next.*/
- }
- }
- return result;
-}
-
-/**
- * Get previous UTF-8 character form a string.
- * @param txt pointer to '\0' terminated string
- * @param i start byte index in 'txt' where to start. After the call it will point to the previous
- * UTF-8 char in 'txt'.
- * @return the decoded Unicode character or 0 on invalid UTF-8 code
- */
-static uint32_t lv_txt_utf8_prev(const char * txt, uint32_t * i)
-{
- uint8_t c_size;
- uint8_t cnt = 0;
-
- /*Try to find a !0 long UTF-8 char by stepping one character back*/
- (*i)--;
- do {
- if(cnt >= 4) return 0; /*No UTF-8 char found before the initial*/
-
- c_size = lv_txt_encoded_size(&txt[*i]);
- if(c_size == 0) {
- if(*i != 0)
- (*i)--;
- else
- return 0;
- }
- cnt++;
- } while(c_size == 0);
-
- uint32_t i_tmp = *i;
- uint32_t letter = lv_txt_encoded_next(txt, &i_tmp); /*Character found, get it*/
-
- return letter;
-}
-
-/**
- * Convert a character index (in an UTF-8 text) to byte index.
- * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param utf8_id character index
- * @return byte index of the 'utf8_id'th letter
- */
-static uint32_t lv_txt_utf8_get_byte_id(const char * txt, uint32_t utf8_id)
-{
- uint32_t i;
- uint32_t byte_cnt = 0;
- for(i = 0; i < utf8_id; i++) {
- uint8_t c_size = lv_txt_encoded_size(&txt[byte_cnt]);
- byte_cnt += c_size > 0 ? c_size : 1;
- }
-
- return byte_cnt;
-}
-
-/**
- * Convert a byte index (in an UTF-8 text) to character index.
- * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param byte_id byte index
- * @return character index of the letter at 'byte_id'th position
- */
-static uint32_t lv_txt_utf8_get_char_id(const char * txt, uint32_t byte_id)
-{
- uint32_t i = 0;
- uint32_t char_cnt = 0;
-
- while(i < byte_id) {
- lv_txt_encoded_next(txt, &i); /*'i' points to the next letter so use the prev. value*/
- char_cnt++;
- }
-
- return char_cnt;
-}
-
-/**
- * Get the number of characters (and NOT bytes) in a string. Decode it with UTF-8 if enabled.
- * E.g.: "ÁBC" is 3 characters (but 4 bytes)
- * @param txt a '\0' terminated char string
- * @return number of characters
- */
-static uint32_t lv_txt_utf8_get_length(const char * txt)
-{
- uint32_t len = 0;
- uint32_t i = 0;
-
- while(txt[i] != '\0') {
- lv_txt_encoded_next(txt, &i);
- len++;
- }
-
- return len;
-}
-
-#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
-/*******************************
- * ASCII ENCODER/DECOER
- ******************************/
-
-/**
- * Give the size of an ISO8859-1 coded character
- * @param str pointer to a character in a string
- * @return length of the UTF-8 character (1,2,3 or 4). O on invalid code
- */
-static uint8_t lv_txt_iso8859_1_size(const char * str)
-{
- (void)str; /*Unused*/
- return 1;
-}
-
-/**
- * Convert an Unicode letter to ISO8859-1.
- * @param letter_uni an Unicode letter
- * @return ISO8859-1 coded character in Little Endian to be compatible with C chars (e.g. 'Á', 'Ű')
- */
-static uint32_t lv_txt_unicode_to_iso8859_1(uint32_t letter_uni)
-{
- if(letter_uni < 128)
- return letter_uni;
- else
- return ' ';
-}
-
-/**
- * Convert wide characters to ASCII, however wide characters in ASCII range (e.g. 'A') are ASCII compatible by default.
- * So this function does nothing just returns with `c`.
- * @param c a character, e.g. 'A'
- * @return same as `c`
- */
-static uint32_t lv_txt_iso8859_1_conv_wc(uint32_t c)
-{
- return c;
-}
-
-/**
- * Decode an ISO8859-1 character from a string.
- * @param txt pointer to '\0' terminated string
- * @param i start byte index in 'txt' where to start.
- * After call it will point to the next UTF-8 char in 'txt'.
- * NULL to use txt[0] as index
- * @return the decoded Unicode character or 0 on invalid UTF-8 code
- */
-static uint32_t lv_txt_iso8859_1_next(const char * txt, uint32_t * i)
-{
- if(i == NULL) return txt[1]; /*Get the next char */
-
- uint8_t letter = txt[*i];
- (*i)++;
- return letter;
-}
-
-/**
- * Get previous ISO8859-1 character form a string.
- * @param txt pointer to '\0' terminated string
- * @param i start byte index in 'txt' where to start. After the call it will point to the previous UTF-8 char in 'txt'.
- * @return the decoded Unicode character or 0 on invalid UTF-8 code
- */
-static uint32_t lv_txt_iso8859_1_prev(const char * txt, uint32_t * i)
-{
- if(i == NULL) return *(txt - 1); /*Get the prev. char */
-
- (*i)--;
- uint8_t letter = txt[*i];
-
- return letter;
-}
-
-/**
- * Convert a character index (in an ISO8859-1 text) to byte index.
- * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param utf8_id character index
- * @return byte index of the 'utf8_id'th letter
- */
-static uint32_t lv_txt_iso8859_1_get_byte_id(const char * txt, uint32_t utf8_id)
-{
- (void)txt; /*Unused*/
- return utf8_id; /*In Non encoded no difference*/
-}
-
-/**
- * Convert a byte index (in an ISO8859-1 text) to character index.
- * E.g. in "AÁRT" index of 'R' is 2th char but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param byte_id byte index
- * @return character index of the letter at 'byte_id'th position
- */
-static uint32_t lv_txt_iso8859_1_get_char_id(const char * txt, uint32_t byte_id)
-{
- (void)txt; /*Unused*/
- return byte_id; /*In Non encoded no difference*/
-}
-
-/**
- * Get the number of characters (and NOT bytes) in a string. Decode it with UTF-8 if enabled.
- * E.g.: "ÁBC" is 3 characters (but 4 bytes)
- * @param txt a '\0' terminated char string
- * @return number of characters
- */
-static uint32_t lv_txt_iso8859_1_get_length(const char * txt)
-{
- return strlen(txt);
-}
-#else
-
-#error "Invalid character encoding. See `LV_TXT_ENC` in `lv_conf.h`"
-
-#endif
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Test if char is break char or not (a text can broken here or not)
- * @param letter a letter
- * @return false: 'letter' is not break char
- */
-static inline bool is_break_char(uint32_t letter)
-{
- uint8_t i;
- bool ret = false;
-
- /*Compare the letter to TXT_BREAK_CHARS*/
- for(i = 0; LV_TXT_BREAK_CHARS[i] != '\0'; i++) {
- if(letter == (uint32_t)LV_TXT_BREAK_CHARS[i]) {
- ret = true; /*If match then it is break char*/
- break;
- }
- }
-
- return ret;
-}
diff --git a/src/libs/lvgl/src/lv_misc/lv_txt.h b/src/libs/lvgl/src/lv_misc/lv_txt.h
deleted file mode 100644
index 6dbce5d4..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_txt.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * @file lv_text.h
- *
- */
-
-#ifndef LV_TXT_H
-#define LV_TXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include <stdbool.h>
-#include "lv_area.h"
-#include "lv_area.h"
-#include "../lv_font/lv_font.h"
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_TXT_COLOR_CMD
-#define LV_TXT_COLOR_CMD "#"
-#endif
-
-#define LV_TXT_ENC_UTF8 1
-#define LV_TXT_ENC_ASCII 2
-
-/**********************
- * TYPEDEFS
- **********************/
-/**
- * Options for text rendering.
- */
-enum {
- LV_TXT_FLAG_NONE = 0x00,
- LV_TXT_FLAG_RECOLOR = 0x01, /**< Enable parsing of recolor command*/
- LV_TXT_FLAG_EXPAND = 0x02, /**< Ignore width to avoid automatic word wrapping*/
- LV_TXT_FLAG_CENTER = 0x04, /**< Align the text to the middle*/
- LV_TXT_FLAG_RIGHT = 0x08, /**< Align the text to the right*/
-};
-typedef uint8_t lv_txt_flag_t;
-
-/**
- * State machine for text renderer. */
-enum {
- LV_TXT_CMD_STATE_WAIT, /**< Waiting for command*/
- LV_TXT_CMD_STATE_PAR, /**< Processing the parameter*/
- LV_TXT_CMD_STATE_IN, /**< Processing the command*/
-};
-typedef uint8_t lv_txt_cmd_state_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Get size of a text
- * @param size_res pointer to a 'point_t' variable to store the result
- * @param text pointer to a text
- * @param font pinter to font of the text
- * @param letter_space letter space of the text
- * @param line_space line space of the text
- * @param flags settings for the text from 'txt_flag_t' enum
- * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid
- * line breaks
- */
-void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t * font, lv_coord_t letter_space,
- lv_coord_t line_space, lv_coord_t max_width, lv_txt_flag_t flag);
-
-/**
- * Get the next line of text. Check line length and break chars too.
- * @param txt a '\0' terminated string
- * @param font pointer to a font
- * @param letter_space letter space
- * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid
- * line breaks
- * @param flags settings for the text from 'txt_flag_type' enum
- * @return the index of the first char of the new line (in byte index not letter index. With UTF-8
- * they are different)
- */
-uint16_t lv_txt_get_next_line(const char * txt, const lv_font_t * font, lv_coord_t letter_space, lv_coord_t max_width,
- lv_txt_flag_t flag);
-
-/**
- * Give the length of a text with a given font
- * @param txt a '\0' terminate string
- * @param length length of 'txt' in byte count and not characters (Á is 1 character but 2 bytes in
- * UTF-8)
- * @param font pointer to a font
- * @param letter_space letter space
- * @param flags settings for the text from 'txt_flag_t' enum
- * @return length of a char_num long text
- */
-lv_coord_t lv_txt_get_width(const char * txt, uint16_t length, const lv_font_t * font, lv_coord_t letter_space,
- lv_txt_flag_t flag);
-
-/**
- * Check next character in a string and decide if te character is part of the command or not
- * @param state pointer to a txt_cmd_state_t variable which stores the current state of command
- * processing
- * @param c the current character
- * @return true: the character is part of a command and should not be written,
- * false: the character should be written
- */
-bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c);
-
-/**
- * Insert a string into an other
- * @param txt_buf the original text (must be big enough for the result text)
- * @param pos position to insert (0: before the original text, 1: after the first char etc.)
- * @param ins_txt text to insert
- */
-void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt);
-
-/**
- * Delete a part of a string
- * @param txt string to modify
- * @param pos position where to start the deleting (0: before the first char, 1: after the first
- * char etc.)
- * @param len number of characters to delete
- */
-void lv_txt_cut(char * txt, uint32_t pos, uint32_t len);
-
-/***************************************************************
- * GLOBAL FUNCTION POINTERS FOR CAHRACTER ENCODING INTERFACE
- ***************************************************************/
-
-/**
- * Give the size of an encoded character
- * @param str pointer to a character in a string
- * @return length of the encoded character (1,2,3 ...). O in invalid
- */
-extern uint8_t (*lv_txt_encoded_size)(const char *);
-
-/**
- * Convert an Unicode letter to encoded
- * @param letter_uni an Unicode letter
- * @return Encoded character in Little Endian to be compatible with C chars (e.g. 'Á', 'Ü')
- */
-extern uint32_t (*lv_txt_unicode_to_encoded)(uint32_t);
-
-/**
- * Convert a wide character, e.g. 'Á' little endian to be compatible with the encoded format.
- * @param c a wide character
- * @return `c` in the encoded format
- */
-extern uint32_t (*lv_txt_encoded_conv_wc)(uint32_t c);
-
-/**
- * Decode the next encoded character from a string.
- * @param txt pointer to '\0' terminated string
- * @param i start index in 'txt' where to start.
- * After the call it will point to the next encoded char in 'txt'.
- * NULL to use txt[0] as index
- * @return the decoded Unicode character or 0 on invalid data code
- */
-extern uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *);
-
-/**
- * Get the previous encoded character form a string.
- * @param txt pointer to '\0' terminated string
- * @param i_start index in 'txt' where to start. After the call it will point to the previous
- * encoded char in 'txt'.
- * @return the decoded Unicode character or 0 on invalid data
- */
-extern uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *);
-
-/**
- * Convert a letter index (in an the encoded text) to byte index.
- * E.g. in UTF-8 "AÁRT" index of 'R' is 2 but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param enc_id letter index
- * @return byte index of the 'enc_id'th letter
- */
-extern uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t);
-
-/**
- * Convert a byte index (in an encoded text) to character index.
- * E.g. in UTF-8 "AÁRT" index of 'R' is 2 but start at byte 3 because 'Á' is 2 bytes long
- * @param txt a '\0' terminated UTF-8 string
- * @param byte_id byte index
- * @return character index of the letter at 'byte_id'th position
- */
-extern uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t);
-
-/**
- * Get the number of characters (and NOT bytes) in a string.
- * E.g. in UTF-8 "ÁBC" is 3 characters (but 4 bytes)
- * @param txt a '\0' terminated char string
- * @return number of characters
- */
-extern uint32_t (*lv_txt_get_encoded_length)(const char *);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*USE_TXT*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_types.h b/src/libs/lvgl/src/lv_misc/lv_types.h
deleted file mode 100644
index 2c28bca1..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_types.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @file lv_types.h
- *
- */
-
-#ifndef LV_TYPES_H
-#define LV_TYPES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-// Check windows
-#ifdef _WIN64
-#define LV_ARCH_64
-#endif
-
-// Check GCC
-#ifdef __GNUC__
-#if defined(__x86_64__) || defined(__ppc64__)
-#define LV_ARCH_64
-#endif
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * LittlevGL error codes.
- */
-enum {
- LV_RES_INV = 0, /*Typically indicates that the object is deleted (become invalid) in the action
- function or an operation was failed*/
- LV_RES_OK, /*The object is valid (no deleted) after the action*/
-};
-typedef uint8_t lv_res_t;
-
-#ifdef LV_ARCH_64
-typedef uint64_t lv_uintptr_t;
-#else
-typedef uint32_t lv_uintptr_t;
-#endif
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TYPES_H*/
diff --git a/src/libs/lvgl/src/lv_misc/lv_utils.c b/src/libs/lvgl/src/lv_misc/lv_utils.c
deleted file mode 100644
index 3f189560..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_utils.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * @file lv_utils.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdbool.h>
-
-#include "lv_utils.h"
-#include "lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Convert a number to string
- * @param num a number
- * @param buf pointer to a `char` buffer. The result will be stored here (max 10 elements)
- * @return same as `buf` (just for convenience)
- */
-char * lv_utils_num_to_str(int32_t num, char * buf)
-{
- if(num == 0) {
- buf[0] = '0';
- buf[1] = '\0';
- return buf;
- }
- int8_t digitCount = 0;
- int8_t i = 0;
- if(num < 0) {
- buf[digitCount++] = '-';
- num = LV_MATH_ABS(num);
- ++i;
- }
- while(num) {
- char digit = num % 10;
- buf[digitCount++] = digit + 48;
- num /= 10;
- }
- buf[digitCount] = '\0';
- digitCount--;
- while(digitCount > i) {
- char temp = buf[i];
- buf[i] = buf[digitCount];
- buf[digitCount] = temp;
- digitCount--;
- i++;
- }
- return buf;
-}
-
-/** Searches base[0] to base[n - 1] for an item that matches *key.
- *
- * @note The function cmp must return negative if its first
- * argument (the search key) is less that its second (a table entry),
- * zero if equal, and positive if greater.
- *
- * @note Items in the array must be in ascending order.
- *
- * @param key Pointer to item being searched for
- * @param base Pointer to first element to search
- * @param n Number of elements
- * @param size Size of each element
- * @param cmp Pointer to comparison function (see #lv_font_codeCompare as a comparison function
- * example)
- *
- * @return a pointer to a matching item, or NULL if none exists.
- */
-void * lv_utils_bsearch(const void * key, const void * base, uint32_t n, uint32_t size,
- int32_t (*cmp)(const void * pRef, const void * pElement))
-{
- const char * middle;
- int32_t c;
-
- for(middle = base; n != 0;) {
- middle += (n / 2) * size;
- if((c = (*cmp)(key, middle)) > 0) {
- n = (n / 2) - ((n & 1) == 0);
- base = (middle += size);
- } else if(c < 0) {
- n /= 2;
- middle = base;
- } else {
- return (char *)middle;
- }
- }
- return NULL;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_misc/lv_utils.h b/src/libs/lvgl/src/lv_misc/lv_utils.h
deleted file mode 100644
index 6eed7950..00000000
--- a/src/libs/lvgl/src/lv_misc/lv_utils.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @file lv_utils.h
- *
- */
-
-#ifndef LV_UTILS_H
-#define LV_UTILS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdint.h>
-#include <stddef.h>
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-/**
- * Convert a number to string
- * @param num a number
- * @param buf pointer to a `char` buffer. The result will be stored here (max 10 elements)
- * @return same as `buf` (just for convenience)
- */
-char * lv_utils_num_to_str(int32_t num, char * buf);
-
-/** Searches base[0] to base[n - 1] for an item that matches *key.
- *
- * @note The function cmp must return negative if its first
- * argument (the search key) is less that its second (a table entry),
- * zero if equal, and positive if greater.
- *
- * @note Items in the array must be in ascending order.
- *
- * @param key Pointer to item being searched for
- * @param base Pointer to first element to search
- * @param n Number of elements
- * @param size Size of each element
- * @param cmp Pointer to comparison function (see #lv_font_codeCompare as a comparison function
- * example)
- *
- * @return a pointer to a matching item, or NULL if none exists.
- */
-void * lv_utils_bsearch(const void * key, const void * base, uint32_t n, uint32_t size,
- int32_t (*cmp)(const void * pRef, const void * pElement));
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_arc.c b/src/libs/lvgl/src/lv_objx/lv_arc.c
deleted file mode 100644
index e2146a84..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_arc.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/**
- * @file lv_arc.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_arc.h"
-#if LV_USE_ARC != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_draw/lv_draw_arc.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_arc"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a arc object
- * @param par pointer to an object, it will be the parent of the new arc
- * @param copy pointer to a arc object, if not NULL then the new object will be copied from it
- * @return pointer to the created arc
- */
-lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
-{
-
- LV_LOG_TRACE("arc create started");
-
- /*Create the ancestor of arc*/
- lv_obj_t * new_arc = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_arc);
- if(new_arc == NULL) return NULL;
-
- /*Allocate the arc type specific extended data*/
- lv_arc_ext_t * ext = lv_obj_allocate_ext_attr(new_arc, sizeof(lv_arc_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_arc);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_arc);
-
- /*Initialize the allocated 'ext' */
- ext->angle_start = 45;
- ext->angle_end = 315;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_arc, lv_arc_signal);
- lv_obj_set_design_cb(new_arc, lv_arc_design);
-
- /*Init the new arc arc*/
- if(copy == NULL) {
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, th->style.arc);
- } else {
- lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, &lv_style_plain_color);
- }
-
- }
- /*Copy an existing arc*/
- else {
- lv_arc_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->angle_start = copy_ext->angle_start;
- ext->angle_end = copy_ext->angle_end;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_arc);
- }
-
- LV_LOG_INFO("arc created");
-
- return new_arc;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*
- * New object specific "add" or "remove" functions come here
- */
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: right etc.
- * @param arc pointer to an arc object
- * @param start the start angle [0..360]
- * @param end the end angle [0..360]
- */
-void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
-{
- LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
-
- lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
-
- if(start > 360) start = 360;
- if(end > 360) end = 360;
-
- ext->angle_start = start;
- ext->angle_end = end;
-
- lv_obj_invalidate(arc);
-}
-
-/**
- * Set a style of a arc.
- * @param arc pointer to arc object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
-
- switch(type) {
- case LV_ARC_STYLE_MAIN: lv_obj_set_style(arc, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the start angle of an arc.
- * @param arc pointer to an arc object
- * @return the start angle [0..360]
- */
-uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
-{
- LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
-
- lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
-
- return ext->angle_start;
-}
-
-/**
- * Get the end angle of an arc.
- * @param arc pointer to an arc object
- * @return the end angle [0..360]
- */
-uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
-{
- LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
-
- lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
-
- return ext->angle_end;
-}
-
-/**
- * Get style of a arc.
- * @param arc pointer to arc object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type)
-{
- LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
-
- switch(type) {
- case LV_ARC_STYLE_MAIN: style = lv_obj_get_style(arc); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/*
- * New object specific "other" functions come here
- */
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the arcs
- * @param arc pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
- const lv_style_t * style = lv_arc_get_style(arc, LV_ARC_STYLE_MAIN);
-
- lv_coord_t r = (LV_MATH_MIN(lv_obj_get_width(arc), lv_obj_get_height(arc))) / 2;
- lv_coord_t x = arc->coords.x1 + lv_obj_get_width(arc) / 2;
- lv_coord_t y = arc->coords.y1 + lv_obj_get_height(arc) / 2;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(arc);
- lv_draw_arc(x, y, r, mask, ext->angle_start, ext->angle_end, style, opa_scale);
-
- /*Draw circle on the ends if enabled */
- if(style->line.rounded) {
- lv_coord_t thick_half = style->line.width / 2;
- lv_coord_t cir_x = ((r - thick_half) * lv_trigo_sin(ext->angle_start) >> LV_TRIGO_SHIFT);
- lv_coord_t cir_y = ((r - thick_half) * lv_trigo_sin(ext->angle_start + 90) >> LV_TRIGO_SHIFT);
-
- lv_style_t cir_style;
- lv_style_copy(&cir_style, &lv_style_plain);
- cir_style.body.grad_color = style->line.color;
- cir_style.body.main_color = cir_style.body.grad_color;
- cir_style.body.radius = LV_RADIUS_CIRCLE;
- lv_area_t cir_area;
- cir_area.x1 = cir_x + x - thick_half;
- cir_area.y1 = cir_y + y - thick_half;
- cir_area.x2 = cir_x + x + thick_half;
- cir_area.y2 = cir_y + y + thick_half;
-
- lv_draw_rect(&cir_area, mask, &cir_style, opa_scale);
-
- cir_x = ((r - thick_half) * lv_trigo_sin(ext->angle_end) >> LV_TRIGO_SHIFT);
- cir_y = ((r - thick_half) * lv_trigo_sin(ext->angle_end + 90) >> LV_TRIGO_SHIFT);
-
- cir_area.x1 = cir_x + x - thick_half;
- cir_area.y1 = cir_y + y - thick_half;
- cir_area.x2 = cir_x + x + thick_half;
- cir_area.y2 = cir_y + y + thick_half;
-
- lv_draw_rect(&cir_area, mask, &cir_style, opa_scale);
- }
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the arc
- * @param arc pointer to a arc object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(arc, sign, param);
- if(res != LV_RES_OK) return res;
-
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_arc.h b/src/libs/lvgl/src/lv_objx/lv_arc.h
deleted file mode 100644
index 8cc34d5f..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_arc.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * @file lv_arc.h
- *
- */
-
-#ifndef LV_ARC_H
-#define LV_ARC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_ARC != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of arc*/
-typedef struct
-{
- /*New data for this type */
- lv_coord_t angle_start;
- lv_coord_t angle_end;
-} lv_arc_ext_t;
-
-/*Styles*/
-enum {
- LV_ARC_STYLE_MAIN,
-};
-typedef uint8_t lv_arc_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a arc objects
- * @param par pointer to an object, it will be the parent of the new arc
- * @param copy pointer to a arc object, if not NULL then the new object will be copied from it
- * @return pointer to the created arc
- */
-lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: right etc.
- * @param arc pointer to an arc object
- * @param start the start angle [0..360]
- * @param end the end angle [0..360]
- */
-void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
-
-/**
- * Set a style of a arc.
- * @param arc pointer to arc object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the start angle of an arc.
- * @param arc pointer to an arc object
- * @return the start angle [0..360]
- */
-uint16_t lv_arc_get_angle_start(lv_obj_t * arc);
-
-/**
- * Get the end angle of an arc.
- * @param arc pointer to an arc object
- * @return the end angle [0..360]
- */
-uint16_t lv_arc_get_angle_end(lv_obj_t * arc);
-
-/**
- * Get style of a arc.
- * @param arc pointer to arc object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_ARC*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_ARC_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_bar.c b/src/libs/lvgl/src/lv_objx/lv_bar.c
deleted file mode 100644
index 5faab91e..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_bar.c
+++ /dev/null
@@ -1,548 +0,0 @@
-
-
-/**
- * @file lv_bar.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_bar.h"
-#if LV_USE_BAR != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_anim.h"
-#include <stdio.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_bar"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param);
-
-#if LV_USE_ANIMATION
-static void lv_bar_anim(void * bar, lv_anim_value_t value);
-static void lv_bar_anim_ready(lv_anim_t * a);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design_f;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a bar objects
- * @param par pointer to an object, it will be the parent of the new bar
- * @param copy pointer to a bar object, if not NULL then the new object will be copied from it
- * @return pointer to the created bar
- */
-lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("lv_bar create started");
-
- /*Create the ancestor basic object*/
- lv_obj_t * new_bar = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_bar);
- if(new_bar == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_bar);
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_bar);
-
- /*Allocate the object type specific extended data*/
- lv_bar_ext_t * ext = lv_obj_allocate_ext_attr(new_bar, sizeof(lv_bar_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->min_value = 0;
- ext->max_value = 100;
- ext->cur_value = 0;
-#if LV_USE_ANIMATION
- ext->anim_time = 200;
- ext->anim_start = 0;
- ext->anim_end = 0;
- ext->anim_state = LV_BAR_ANIM_STATE_INV;
-#endif
- ext->sym = 0;
- ext->style_indic = &lv_style_pretty_color;
-
- lv_obj_set_signal_cb(new_bar, lv_bar_signal);
- lv_obj_set_design_cb(new_bar, lv_bar_design);
-
- /*Init the new bar object*/
- if(copy == NULL) {
- lv_obj_set_click(new_bar, false);
- lv_obj_set_size(new_bar, LV_DPI * 2, LV_DPI / 3);
- lv_bar_set_value(new_bar, ext->cur_value, false);
-
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_bar_set_style(new_bar, LV_BAR_STYLE_BG, th->style.bar.bg);
- lv_bar_set_style(new_bar, LV_BAR_STYLE_INDIC, th->style.bar.indic);
- } else {
- lv_obj_set_style(new_bar, &lv_style_pretty);
- }
- } else {
- lv_bar_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
- ext->min_value = ext_copy->min_value;
- ext->max_value = ext_copy->max_value;
- ext->cur_value = ext_copy->cur_value;
- ext->style_indic = ext_copy->style_indic;
- ext->sym = ext_copy->sym;
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_bar);
-
- lv_bar_set_value(new_bar, ext->cur_value, false);
- }
-
- LV_LOG_INFO("bar created");
-
- return new_bar;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new value on the bar
- * @param bar pointer to a bar object
- * @param value new value
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediatelly
- */
-void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = false;
-#endif
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- if(ext->cur_value == value) return;
-
- int16_t new_value;
- new_value = value > ext->max_value ? ext->max_value : value;
- new_value = new_value < ext->min_value ? ext->min_value : new_value;
-
- if(ext->cur_value == new_value) return;
-
- if(anim == LV_ANIM_OFF) {
- ext->cur_value = new_value;
- lv_obj_invalidate(bar);
- } else {
-#if LV_USE_ANIMATION
- /*No animation in progress -> simply set the values*/
- if(ext->anim_state == LV_BAR_ANIM_STATE_INV) {
- ext->anim_start = ext->cur_value;
- ext->anim_end = new_value;
- }
- /*Animation in progress. Start from the animation end value*/
- else {
- ext->anim_start = ext->anim_end;
- ext->anim_end = new_value;
- }
-
- lv_anim_t a;
- a.var = bar;
- a.start = LV_BAR_ANIM_STATE_START;
- a.end = LV_BAR_ANIM_STATE_END;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_bar_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_bar_anim_ready;
- a.act_time = 0;
- a.time = ext->anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
-
- lv_anim_create(&a);
-#endif
- }
-}
-
-/**
- * Set minimum and the maximum values of a bar
- * @param bar pointer to the bar object
- * @param min minimum value
- * @param max maximum value
- */
-void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- if(ext->min_value == min && ext->max_value == max) return;
-
- ext->max_value = max;
- ext->min_value = min;
- if(ext->cur_value > max) {
- ext->cur_value = max;
- lv_bar_set_value(bar, ext->cur_value, false);
- }
- if(ext->cur_value < min) {
- ext->cur_value = min;
- lv_bar_set_value(bar, ext->cur_value, false);
- }
- lv_obj_invalidate(bar);
-}
-
-/**
- * Make the bar symmetric to zero. The indicator will grow from zero instead of the minimum
- * position.
- * @param bar pointer to a bar object
- * @param en true: enable disable symmetric behavior; false: disable
- */
-void lv_bar_set_sym(lv_obj_t * bar, bool en)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- ext->sym = en ? 1 : 0;
-}
-
-/**
- * Set the animation time of the bar
- * @param bar pointer to a bar object
- * @param anim_time the animation time in milliseconds.
- */
-void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- ext->anim_time = anim_time;
-#else
- (void)bar; /*Unused*/
- (void)anim_time; /*Unused*/
-#endif
-}
-
-/**
- * Set a style of a bar
- * @param bar pointer to a bar object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
-
- switch(type) {
- case LV_BAR_STYLE_BG: lv_obj_set_style(bar, style); break;
- case LV_BAR_STYLE_INDIC:
- ext->style_indic = style;
- lv_obj_refresh_ext_draw_pad(bar);
- break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a bar
- * @param bar pointer to a bar object
- * @return the value of the bar
- */
-int16_t lv_bar_get_value(const lv_obj_t * bar)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- /*If animated tell that it's already at the end value*/
-#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) return ext->anim_end;
-#endif
- /*No animation, simple return the current value*/
- return ext->cur_value;
-}
-
-/**
- * Get the minimum value of a bar
- * @param bar pointer to a bar object
- * @return the minimum value of the bar
- */
-int16_t lv_bar_get_min_value(const lv_obj_t * bar)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- return ext->min_value;
-}
-
-/**
- * Get the maximum value of a bar
- * @param bar pointer to a bar object
- * @return the maximum value of the bar
- */
-int16_t lv_bar_get_max_value(const lv_obj_t * bar)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- return ext->max_value;
-}
-
-/**
- * Get whether the bar is symmetric or not.
- * @param bar pointer to a bar object
- * @return true: symmetric is enabled; false: disable
- */
-bool lv_bar_get_sym(lv_obj_t * bar)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- return ext->sym ? true : false;
-}
-
-/**
- * Get the animation time of the bar
- * @param bar pointer to a bar object
- * @return the animation time in milliseconds.
- */
-uint16_t lv_bar_get_anim_time(lv_obj_t * bar)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- return ext->anim_time;
-#else
- (void)bar; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get a style of a bar
- * @param bar pointer to a bar object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type)
-{
- LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
-
- switch(type) {
- case LV_BAR_STYLE_BG: style = lv_obj_get_style(bar); break;
- case LV_BAR_STYLE_INDIC: style = ext->style_indic; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the bars
- * @param bar pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask area*/
- return ancestor_design_f(bar, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_opa_t opa_scale = lv_obj_get_opa_scale(bar);
-
-#if LV_USE_GROUP == 0
- ancestor_design_f(bar, mask, mode);
-#else
- /* Draw the borders later if the bar is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(bar)) {
- const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.border.width = 0;
- lv_draw_rect(&bar->coords, mask, &style_tmp, opa_scale);
- } else {
- ancestor_design_f(bar, mask, mode);
- }
-#endif
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
-
- if(ext->cur_value != ext->min_value || ext->sym
-#if LV_USE_ANIMATION
- || ext->anim_start != LV_BAR_ANIM_STATE_INV
-#endif
- ) {
- const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
- lv_area_t indic_area;
- lv_area_copy(&indic_area, &bar->coords);
- indic_area.x1 += style_indic->body.padding.left;
- indic_area.x2 -= style_indic->body.padding.right;
- indic_area.y1 += style_indic->body.padding.top;
- indic_area.y2 -= style_indic->body.padding.bottom;
-
- lv_coord_t w = lv_area_get_width(&indic_area);
- lv_coord_t h = lv_area_get_height(&indic_area);
-
- if(w >= h) {
- /*Horizontal*/
-#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)w * (ext->anim_start - ext->min_value)) / (ext->max_value - ext->min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)w * (ext->anim_end - ext->min_value)) / (ext->max_value - ext->min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- indic_area.x2 =
- anim_start_x + (((anim_end_x - anim_start_x) * ext->anim_state) >> LV_BAR_ANIM_STATE_NORM);
- } else
-#endif
- {
- indic_area.x2 =
- (int32_t)((int32_t)w * (ext->cur_value - ext->min_value)) / (ext->max_value - ext->min_value);
- }
-
- indic_area.x2 = indic_area.x1 + indic_area.x2 - 1;
- if(ext->sym && ext->min_value < 0 && ext->max_value > 0) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = indic_area.x1 + (-ext->min_value * w) / (ext->max_value - ext->min_value);
- if(indic_area.x2 > zero)
- indic_area.x1 = zero;
- else {
- indic_area.x1 = indic_area.x2;
- indic_area.x2 = zero;
- }
- }
- } else {
-#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_y =
- (int32_t)((int32_t)h * (ext->anim_start - ext->min_value)) / (ext->max_value - ext->min_value);
- lv_coord_t anim_end_y =
- (int32_t)((int32_t)h * (ext->anim_end - ext->min_value)) / (ext->max_value - ext->min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- indic_area.y1 =
- anim_start_y + (((anim_end_y - anim_start_y) * ext->anim_state) >> LV_BAR_ANIM_STATE_NORM);
- } else
-#endif
- {
- indic_area.y1 =
- (int32_t)((int32_t)h * (ext->cur_value - ext->min_value)) / (ext->max_value - ext->min_value);
- }
-
- indic_area.y1 = indic_area.y2 - indic_area.y1 + 1;
-
- if(ext->sym && ext->min_value < 0 && ext->max_value > 0) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = indic_area.y2 - (-ext->min_value * h) / (ext->max_value - ext->min_value);
- if(indic_area.y1 < zero)
- indic_area.y2 = zero;
- else {
- indic_area.y2 = indic_area.y1;
- indic_area.y1 = zero;
- }
- }
- }
-
- /*Draw the indicator*/
- lv_draw_rect(&indic_area, mask, style_indic, opa_scale);
- }
- } else if(mode == LV_DESIGN_DRAW_POST) {
-#if LV_USE_GROUP
- /*Draw the border*/
- if(lv_obj_is_focused(bar)) {
- lv_opa_t opa_scale = lv_obj_get_opa_scale(bar);
- const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.opa = LV_OPA_TRANSP;
- style_tmp.body.shadow.width = 0;
- lv_draw_rect(&bar->coords, mask, &style_tmp, opa_scale);
- }
-#endif
- }
- return true;
-}
-
-/**
- * Signal function of the bar
- * @param bar pointer to a bar object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(bar, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
- if(style_indic->body.shadow.width > bar->ext_draw_pad) bar->ext_draw_pad = style_indic->body.shadow.width;
- }
-
- return res;
-}
-
-#if LV_USE_ANIMATION
-static void lv_bar_anim(void * bar, lv_anim_value_t value)
-{
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- ext->anim_state = value;
- lv_obj_invalidate(bar);
-}
-
-static void lv_bar_anim_ready(lv_anim_t * a)
-{
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(a->var);
- ext->anim_state = LV_BAR_ANIM_STATE_INV;
- lv_bar_set_value(a->var, ext->anim_end, false);
-}
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_bar.h b/src/libs/lvgl/src/lv_objx/lv_bar.h
deleted file mode 100644
index 9ffdbdd6..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_bar.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * @file lv_bar.h
- *
- */
-
-#ifndef LV_BAR_H
-#define LV_BAR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_BAR != 0
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_misc/lv_anim.h"
-#include "lv_cont.h"
-#include "lv_btn.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/** Bar animation start value. (Not the real value of the Bar just indicates process animation)*/
-#define LV_BAR_ANIM_STATE_START 0
-
-/** Bar animation end value. (Not the real value of the Bar just indicates process animation)*/
-#define LV_BAR_ANIM_STATE_END 256
-
-/** Mark no animation is in progress */
-#define LV_BAR_ANIM_STATE_INV -1
-
-/** log2(LV_BAR_ANIM_STATE_END) used to normalize data*/
-#define LV_BAR_ANIM_STATE_NORM 8
-
-LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_START);
-LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_END);
-LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_INV);
-LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_NORM);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Data of bar*/
-typedef struct
-{
- /*No inherited ext, derived from the base object */
-
- /*New data for this type */
- int16_t cur_value; /*Current value of the bar*/
- int16_t min_value; /*Minimum value of the bar*/
- int16_t max_value; /*Maximum value of the bar*/
-#if LV_USE_ANIMATION
- lv_anim_value_t anim_start;
- lv_anim_value_t anim_end;
- lv_anim_value_t anim_state;
- lv_anim_value_t anim_time;
-#endif
- uint8_t sym : 1; /*Symmetric: means the center is around zero value*/
- const lv_style_t * style_indic; /*Style of the indicator*/
-} lv_bar_ext_t;
-
-/** Bar styles. */
-enum {
- LV_BAR_STYLE_BG, /** Bar background style. */
- LV_BAR_STYLE_INDIC, /** Bar fill area style. */
-};
-typedef uint8_t lv_bar_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a bar objects
- * @param par pointer to an object, it will be the parent of the new bar
- * @param copy pointer to a bar object, if not NULL then the new object will be copied from it
- * @return pointer to the created bar
- */
-lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new value on the bar
- * @param bar pointer to a bar object
- * @param value new value
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim);
-
-/**
- * Set minimum and the maximum values of a bar
- * @param bar pointer to the bar object
- * @param min minimum value
- * @param max maximum value
- */
-void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max);
-
-/**
- * Make the bar symmetric to zero. The indicator will grow from zero instead of the minimum
- * position.
- * @param bar pointer to a bar object
- * @param en true: enable disable symmetric behavior; false: disable
- */
-void lv_bar_set_sym(lv_obj_t * bar, bool en);
-
-/**
- * Set the animation time of the bar
- * @param bar pointer to a bar object
- * @param anim_time the animation time in milliseconds.
- */
-void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time);
-
-/**
- * Set a style of a bar
- * @param bar pointer to a bar object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a bar
- * @param bar pointer to a bar object
- * @return the value of the bar
- */
-int16_t lv_bar_get_value(const lv_obj_t * bar);
-
-/**
- * Get the minimum value of a bar
- * @param bar pointer to a bar object
- * @return the minimum value of the bar
- */
-int16_t lv_bar_get_min_value(const lv_obj_t * bar);
-
-/**
- * Get the maximum value of a bar
- * @param bar pointer to a bar object
- * @return the maximum value of the bar
- */
-int16_t lv_bar_get_max_value(const lv_obj_t * bar);
-
-/**
- * Get whether the bar is symmetric or not.
- * @param bar pointer to a bar object
- * @return true: symmetric is enabled; false: disable
- */
-bool lv_bar_get_sym(lv_obj_t * bar);
-
-/**
- * Get the animation time of the bar
- * @param bar pointer to a bar object
- * @return the animation time in milliseconds.
- */
-uint16_t lv_bar_get_anim_time(lv_obj_t * bar);
-
-/**
- * Get a style of a bar
- * @param bar pointer to a bar object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_BAR*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_BAR_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_btn.c b/src/libs/lvgl/src/lv_objx/lv_btn.c
deleted file mode 100644
index 4cfe9527..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_btn.c
+++ /dev/null
@@ -1,723 +0,0 @@
-/**
- * @file lv_btn.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_btn.h"
-#if LV_USE_BTN != 0
-
-#include <string.h>
-#include "../lv_core/lv_group.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_btn"
-#define LV_BTN_INK_VALUE_MAX 256
-#define LV_BTN_INK_VALUE_MAX_SHIFT 8
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
-static void lv_btn_ink_effect_anim(lv_obj_t * btn, lv_anim_value_t val);
-static void lv_btn_ink_effect_anim_ready(lv_anim_t * a);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
-static lv_coord_t ink_act_value;
-static lv_obj_t * ink_obj;
-static lv_btn_state_t ink_bg_state;
-static lv_btn_state_t ink_top_state;
-static bool ink_ready;
-static bool ink_playback;
-static lv_point_t ink_point;
-#endif
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a button object
- * @param par pointer to an object, it will be the parent of the new button
- * @param copy pointer to a button object, if not NULL then the new object will be copied from it
- * @return pointer to the created button
- */
-lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("button create started");
-
- lv_obj_t * new_btn;
-
- new_btn = lv_cont_create(par, copy);
- LV_ASSERT_MEM(new_btn);
- if(new_btn == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_btn);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_btn);
-
- /*Allocate the extended data*/
- lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(new_btn, sizeof(lv_btn_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->state = LV_BTN_STATE_REL;
-
- ext->styles[LV_BTN_STATE_REL] = &lv_style_btn_rel;
- ext->styles[LV_BTN_STATE_PR] = &lv_style_btn_pr;
- ext->styles[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
- ext->styles[LV_BTN_STATE_TGL_PR] = &lv_style_btn_tgl_pr;
- ext->styles[LV_BTN_STATE_INA] = &lv_style_btn_ina;
-
- ext->toggle = 0;
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- ext->ink_in_time = 0;
- ext->ink_wait_time = 0;
- ext->ink_out_time = 0;
-#endif
-
- lv_obj_set_signal_cb(new_btn, lv_btn_signal);
- lv_obj_set_design_cb(new_btn, lv_btn_design);
-
- /*If no copy do the basic initialization*/
- if(copy == NULL) {
- /*Set layout if the button is not a screen*/
- if(par != NULL) {
- lv_btn_set_layout(new_btn, LV_LAYOUT_CENTER);
- }
-
- lv_obj_set_click(new_btn, true); /*Be sure the button is clickable*/
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_btn_set_style(new_btn, LV_BTN_STYLE_REL, th->style.btn.rel);
- lv_btn_set_style(new_btn, LV_BTN_STYLE_PR, th->style.btn.pr);
- lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_REL, th->style.btn.tgl_rel);
- lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_PR, th->style.btn.tgl_pr);
- lv_btn_set_style(new_btn, LV_BTN_STYLE_INA, th->style.btn.ina);
- } else {
- lv_obj_set_style(new_btn, ext->styles[LV_BTN_STATE_REL]);
- }
- }
- /*Copy 'copy'*/
- else {
- lv_btn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->state = copy_ext->state;
- ext->toggle = copy_ext->toggle;
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- ext->ink_in_time = copy_ext->ink_in_time;
- ext->ink_wait_time = copy_ext->ink_wait_time;
- ext->ink_out_time = copy_ext->ink_out_time;
-#endif
- memcpy((void*) ext->styles, copy_ext->styles, sizeof(ext->styles));
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_btn);
- }
-
- LV_LOG_INFO("button created");
-
- return new_btn;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Enable the toggled states
- * @param btn pointer to a button object
- * @param tgl true: enable toggled states, false: disable
- */
-void lv_btn_set_toggle(lv_obj_t * btn, bool tgl)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
-
- ext->toggle = tgl != false ? 1 : 0;
-}
-
-/**
- * Set the state of the button
- * @param btn pointer to a button object
- * @param state the new state of the button (from lv_btn_state_t enum)
- */
-void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- if(ext->state != state) {
- ext->state = state;
- lv_obj_set_style(btn, ext->styles[state]);
- }
-}
-
-/**
- * Toggle the state of the button (ON->OFF, OFF->ON)
- * @param btn pointer to a button object
- */
-void lv_btn_toggle(lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- switch(ext->state) {
- case LV_BTN_STATE_REL: lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); break;
- case LV_BTN_STATE_PR: lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR); break;
- case LV_BTN_STATE_TGL_REL: lv_btn_set_state(btn, LV_BTN_STATE_REL); break;
- case LV_BTN_STATE_TGL_PR: lv_btn_set_state(btn, LV_BTN_STATE_PR); break;
- default: break;
- }
-}
-
-/**
- * Set time of the ink effect (draw a circle on click to animate in the new state)
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- ext->ink_in_time = time;
-#else
- (void)btn; /*Unused*/
- (void)time; /*Unused*/
- LV_LOG_WARN("`lv_btn_set_ink_ink_time` has no effect if LV_BTN_INK_EFEFCT or LV_USE_ANIMATION "
- "is disabled")
-#endif
-}
-
-/**
- * Set the wait time before the ink disappears
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- ext->ink_wait_time = time;
-#else
- (void)btn; /*Unused*/
- (void)time; /*Unused*/
- LV_LOG_WARN("`lv_btn_set_ink_wait_time` has no effect if LV_BTN_INK_EFEFCT or LV_USE_ANIMATION "
- "is disabled")
-#endif
-}
-
-/**
- * Set time of the ink out effect (animate to the released state)
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- ext->ink_out_time = time;
-#else
- (void)btn; /*Unused*/
- (void)time; /*Unused*/
- LV_LOG_WARN("`lv_btn_set_ink_out_time` has no effect if LV_BTN_INK_EFEFCT or LV_USE_ANIMATION "
- "is disabled")
-#endif
-}
-
-/**
- * Set a style of a button
- * @param btn pointer to a button object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
-
- switch(type) {
- case LV_BTN_STYLE_REL: ext->styles[LV_BTN_STATE_REL] = style; break;
- case LV_BTN_STYLE_PR: ext->styles[LV_BTN_STATE_PR] = style; break;
- case LV_BTN_STYLE_TGL_REL: ext->styles[LV_BTN_STATE_TGL_REL] = style; break;
- case LV_BTN_STYLE_TGL_PR: ext->styles[LV_BTN_STATE_TGL_PR] = style; break;
- case LV_BTN_STYLE_INA: ext->styles[LV_BTN_STATE_INA] = style; break;
- }
-
- /*Refresh the object with the new style*/
- lv_obj_set_style(btn, ext->styles[ext->state]);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current state of the button
- * @param btn pointer to a button object
- * @return the state of the button (from lv_btn_state_t enum)
- */
-lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- return ext->state;
-}
-
-/**
- * Get the toggle enable attribute of the button
- * @param btn pointer to a button object
- * @return true: toggle enabled, false: disabled
- */
-bool lv_btn_get_toggle(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
-
- return ext->toggle != 0 ? true : false;
-}
-
-/**
- * Get time of the ink in effect (draw a circle on click to animate in the new state)
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- return ext->ink_in_time;
-#else
- (void)btn; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the wait time before the ink disappears
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- return ext->ink_wait_time;
-#else
- (void)btn; /*Unused*/
- return 0;
-#endif
-}
-/**
- * Get time of the ink out effect (animate to the releases state)
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- return ext->ink_out_time;
-#else
- (void)btn; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get a style of a button
- * @param btn pointer to a button object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type)
-{
- LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- lv_btn_state_t state = lv_btn_get_state(btn);
-
- /* If the style of the current state is asked then return object style.
- * If the button is focused then this style is updated by the group's
- * `style_mod_cb` function */
- if((type == LV_BTN_STYLE_REL && state == LV_BTN_STATE_REL) ||
- (type == LV_BTN_STYLE_PR && state == LV_BTN_STATE_PR) ||
- (type == LV_BTN_STYLE_TGL_REL && state == LV_BTN_STATE_TGL_REL) ||
- (type == LV_BTN_STYLE_TGL_PR && state == LV_BTN_STATE_TGL_PR) ||
- (type == LV_BTN_STYLE_INA && state == LV_BTN_STATE_INA)) {
-
- style = lv_obj_get_style(btn);
- } else {
- switch(type) {
- case LV_BTN_STYLE_REL: style = ext->styles[LV_BTN_STATE_REL]; break;
- case LV_BTN_STYLE_PR: style = ext->styles[LV_BTN_STATE_PR]; break;
- case LV_BTN_STYLE_TGL_REL: style = ext->styles[LV_BTN_STATE_TGL_REL]; break;
- case LV_BTN_STYLE_TGL_PR: style = ext->styles[LV_BTN_STATE_TGL_PR]; break;
- case LV_BTN_STYLE_INA: style = ext->styles[LV_BTN_STATE_INA]; break;
- default: style = NULL; break;
- }
- }
-
- return style;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the drop down lists
- * @param btn pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- if(btn != ink_obj) {
- ancestor_design(btn, mask, mode);
- } else {
- lv_opa_t opa_scale = lv_obj_get_opa_scale(btn);
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
-
- /*Draw the normal button*/
- if(ink_playback == false) {
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, ext->styles[ink_bg_state]);
- style_tmp.body.shadow.width = ext->styles[ink_top_state]->body.shadow.width;
- lv_draw_rect(&btn->coords, mask, &style_tmp, opa_scale);
-
- lv_coord_t w = lv_obj_get_width(btn);
- lv_coord_t h = lv_obj_get_height(btn);
- lv_coord_t r_max = LV_MATH_MIN(w, h) / 2;
-
- /*In the first part of the animation increase the size of the circle (ink effect) */
- lv_area_t cir_area;
-
- lv_coord_t coord_state =
- ink_act_value < LV_BTN_INK_VALUE_MAX / 2 ? ink_act_value : LV_BTN_INK_VALUE_MAX / 2;
- lv_point_t p_act;
- p_act.x = ink_point.x;
- p_act.y = ink_point.y;
- lv_coord_t x_err = (btn->coords.x1 + w / 2) - p_act.x;
- lv_coord_t y_err = (btn->coords.y1 + h / 2) - p_act.y;
-
- p_act.x += (x_err * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1);
- p_act.y += (y_err * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1);
-
- lv_coord_t half_side = LV_MATH_MAX(w, h) / 2;
- cir_area.x1 = p_act.x - ((half_side * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1));
- cir_area.y1 = p_act.y - ((half_side * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1));
- cir_area.x2 = p_act.x + ((half_side * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1));
- cir_area.y2 = p_act.y + ((half_side * coord_state) >> (LV_BTN_INK_VALUE_MAX_SHIFT - 1));
-
- lv_area_intersect(&cir_area, &btn->coords,
- &cir_area); /*Limit the area. (It might be too big on the smaller side)*/
-
- /*In the second part animate the radius. Circle -> body.radius*/
- lv_coord_t r_state =
- ink_act_value > LV_BTN_INK_VALUE_MAX / 2 ? ink_act_value - LV_BTN_INK_VALUE_MAX / 2 : 0;
-
- lv_style_copy(&style_tmp, ext->styles[ink_top_state]);
- style_tmp.body.radius = r_max + (((ext->styles[ink_bg_state]->body.radius - r_max) * r_state) >>
- (LV_BTN_INK_VALUE_MAX_SHIFT - 1));
- style_tmp.body.border.width = 0;
-
- /*Draw the circle*/
- lv_draw_rect(&cir_area, mask, &style_tmp, opa_scale);
- } else {
- lv_style_t res;
- lv_style_copy(&res, ext->styles[ink_bg_state]);
- lv_style_mix(ext->styles[ink_bg_state], ext->styles[ink_top_state], &res, ink_act_value);
- lv_draw_rect(&btn->coords, mask, &res, opa_scale);
- }
- }
-#else
- ancestor_design(btn, mask, mode);
-#endif
- } else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(btn, mask, mode);
- }
-
- return true;
-}
-
-/**
- * Signal function of the button
- * @param btn pointer to a button object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(btn, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- bool tgl = lv_btn_get_toggle(btn);
-
- if(sign == LV_SIGNAL_PRESSED) {
- /*Refresh the state*/
- if(ext->state == LV_BTN_STATE_REL) {
- lv_btn_set_state(btn, LV_BTN_STATE_PR);
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- ink_bg_state = LV_BTN_STATE_REL;
- ink_top_state = LV_BTN_STATE_PR;
-#endif
- } else if(ext->state == LV_BTN_STATE_TGL_REL) {
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR);
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- ink_bg_state = LV_BTN_STATE_TGL_REL;
- ink_top_state = LV_BTN_STATE_TGL_PR;
-#endif
- }
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- /*Forget the old inked button*/
- if(ink_obj != NULL && ink_obj != btn) {
- lv_anim_del(ink_obj, (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim);
- lv_obj_invalidate(ink_obj);
- ink_obj = NULL;
- }
- /*Save the new data for inking and start it's animation if enabled*/
- if(ext->ink_in_time > 0) {
- ink_obj = btn;
- ink_playback = false;
- ink_ready = false;
- lv_indev_get_point(lv_indev_get_act(), &ink_point);
-
- lv_anim_t a;
- a.var = btn;
- a.start = 0;
- a.end = LV_BTN_INK_VALUE_MAX;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_btn_ink_effect_anim_ready;
- a.act_time = 0;
- a.time = ext->ink_in_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#endif
- } else if(sign == LV_SIGNAL_PRESS_LOST) {
- /*Refresh the state*/
- if(ext->state == LV_BTN_STATE_PR)
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
- else if(ext->state == LV_BTN_STATE_TGL_PR)
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
- } else if(sign == LV_SIGNAL_PRESSING) {
- /*When the button begins to drag revert pressed states to released*/
- if(lv_indev_is_dragging(param) != false) {
- if(ext->state == LV_BTN_STATE_PR)
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
- else if(ext->state == LV_BTN_STATE_TGL_PR)
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
- }
- } else if(sign == LV_SIGNAL_RELEASED) {
- /*If not dragged and it was not long press action then
- *change state and run the action*/
- if(lv_indev_is_dragging(param) == false) {
- uint32_t toggled = 0;
- if(ext->state == LV_BTN_STATE_PR && tgl == false) {
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
- toggled = 0;
- } else if(ext->state == LV_BTN_STATE_TGL_PR && tgl == false) {
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
- toggled = 1;
- } else if(ext->state == LV_BTN_STATE_PR && tgl == true) {
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
- toggled = 1;
- } else if(ext->state == LV_BTN_STATE_TGL_PR && tgl == true) {
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
- toggled = 0;
- }
-
- if(tgl) {
- res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &toggled);
- if(res != LV_RES_OK) return res;
- }
-
- } else { /*If dragged change back the state*/
- if(ext->state == LV_BTN_STATE_PR) {
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
- } else if(ext->state == LV_BTN_STATE_TGL_PR) {
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
- }
- }
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- /*Draw the toggled state in the inking instead*/
- if(ext->toggle) {
- ink_top_state = ext->state;
- }
- /*If not a toggle button and the "IN" inking is ready then start an "OUT" inking*/
- else if(ink_ready && ext->ink_out_time > 0) {
- ink_obj = btn;
- ink_playback = true; /*It is the playback. If not set `lv_btn_ink_effect_anim_ready`
- will start its own playback*/
- lv_indev_get_point(lv_indev_get_act(), &ink_point);
-
- lv_anim_t a;
- a.var = ink_obj;
- a.start = LV_BTN_INK_VALUE_MAX;
- a.end = 0;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_btn_ink_effect_anim_ready;
- a.act_time = 0;
- a.time = ext->ink_out_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#endif
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- if(lv_btn_get_toggle(btn)) {
- lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL);
-
- uint32_t state = 1;
- res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- }
-
- } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- if(lv_btn_get_toggle(btn)) {
- lv_btn_set_state(btn, LV_BTN_STATE_REL);
-
- uint32_t state = 0;
- res = lv_event_send(btn, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- }
- }
- } else if(sign == LV_SIGNAL_CLEANUP) {
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
- if(btn == ink_obj) {
- lv_anim_del(ink_obj, (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim);
- ink_obj = NULL;
- }
-#endif
- }
-
- return res;
-}
-
-#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
-
-/**
- * The animator function of inking. CAlled to increase the radius of ink
- * @param btn pointer to the animated button
- * @param val the new radius
- */
-static void lv_btn_ink_effect_anim(lv_obj_t * btn, lv_anim_value_t val)
-{
- if(btn) {
- ink_act_value = val;
- lv_obj_invalidate(btn);
- }
-}
-
-/**
- * Called to clean up when the ink animation is ready
- * @param a unused
- */
-static void lv_btn_ink_effect_anim_ready(lv_anim_t * a)
-{
- (void)a; /*Unused*/
-
- lv_btn_ext_t * ext = lv_obj_get_ext_attr(ink_obj);
- lv_btn_state_t state = lv_btn_get_state(ink_obj);
-
- lv_obj_invalidate(ink_obj);
- ink_ready = true;
-
- if((state == LV_BTN_STATE_REL || state == LV_BTN_STATE_TGL_REL) && ext->toggle == 0 && ink_playback == false) {
- lv_anim_t new_a;
- new_a.var = ink_obj;
- new_a.start = LV_BTN_INK_VALUE_MAX;
- new_a.end = 0;
- new_a.exec_cb = (lv_anim_exec_xcb_t)lv_btn_ink_effect_anim;
- new_a.path_cb = lv_anim_path_linear;
- new_a.ready_cb = lv_btn_ink_effect_anim_ready;
- new_a.act_time = -ext->ink_wait_time;
- new_a.time = ext->ink_out_time;
- new_a.playback = 0;
- new_a.playback_pause = 0;
- new_a.repeat = 0;
- new_a.repeat_pause = 0;
- lv_anim_create(&new_a);
-
- ink_playback = true;
- } else {
- ink_obj = NULL;
- }
-}
-#endif /*LV_USE_ANIMATION*/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_btn.h b/src/libs/lvgl/src/lv_objx/lv_btn.h
deleted file mode 100644
index f7bd85fa..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_btn.h
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * @file lv_btn.h
- *
- */
-
-#ifndef LV_BTN_H
-#define LV_BTN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_BTN != 0
-
-/*Testing of dependencies*/
-#if LV_USE_CONT == 0
-#error "lv_btn: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT 1) "
-#endif
-
-#include "lv_cont.h"
-#include "../lv_core/lv_indev.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Possible states of a button.
- * It can be used not only by buttons but other button-like objects too*/
-enum {
- /**Released*/
- LV_BTN_STATE_REL,
-
- /**Pressed*/
- LV_BTN_STATE_PR,
-
- /**Toggled released*/
- LV_BTN_STATE_TGL_REL,
-
- /**Toggled pressed*/
- LV_BTN_STATE_TGL_PR,
-
- /**Inactive*/
- LV_BTN_STATE_INA,
-
- /**Number of states*/
- _LV_BTN_STATE_NUM,
-};
-typedef uint8_t lv_btn_state_t;
-
-/** Extended data of button*/
-typedef struct
-{
- /** Ext. of ancestor*/
- lv_cont_ext_t cont;
-
- /*New data for this type */
-
- /**Styles in each state*/
- const lv_style_t * styles[_LV_BTN_STATE_NUM];
-#if LV_BTN_INK_EFFECT
- /** [ms] Time of ink fill effect (0: disable ink effect)*/
- uint16_t ink_in_time;
-
- /** [ms] Wait before the ink disappears */
- uint16_t ink_wait_time;
-
- /** [ms] Time of ink disappearing*/
- uint16_t ink_out_time;
-#endif
-
- /** Current state of the button from 'lv_btn_state_t' enum*/
- lv_btn_state_t state : 3;
-
- /** 1: Toggle enabled*/
- uint8_t toggle : 1;
-} lv_btn_ext_t;
-
-/**Styles*/
-enum {
- /** Release style */
- LV_BTN_STYLE_REL,
-
- /**Pressed style*/
- LV_BTN_STYLE_PR,
-
- /** Toggle released style*/
- LV_BTN_STYLE_TGL_REL,
-
- /** Toggle pressed style */
- LV_BTN_STYLE_TGL_PR,
-
- /** Inactive style*/
- LV_BTN_STYLE_INA,
-};
-typedef uint8_t lv_btn_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a button object
- * @param par pointer to an object, it will be the parent of the new button
- * @param copy pointer to a button object, if not NULL then the new object will be copied from it
- * @return pointer to the created button
- */
-lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Enable the toggled states. On release the button will change from/to toggled state.
- * @param btn pointer to a button object
- * @param tgl true: enable toggled states, false: disable
- */
-void lv_btn_set_toggle(lv_obj_t * btn, bool tgl);
-
-/**
- * Set the state of the button
- * @param btn pointer to a button object
- * @param state the new state of the button (from lv_btn_state_t enum)
- */
-void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state);
-
-/**
- * Toggle the state of the button (ON->OFF, OFF->ON)
- * @param btn pointer to a button object
- */
-void lv_btn_toggle(lv_obj_t * btn);
-
-/**
- * Set the layout on a button
- * @param btn pointer to a button object
- * @param layout a layout from 'lv_cont_layout_t'
- */
-static inline void lv_btn_set_layout(lv_obj_t * btn, lv_layout_t layout)
-{
- lv_cont_set_layout(btn, layout);
-}
-
-/**
- * Set the fit policy in all 4 directions separately.
- * It tells how to change the button size automatically.
- * @param btn pointer to a button object
- * @param left left fit policy from `lv_fit_t`
- * @param right right fit policy from `lv_fit_t`
- * @param top top fit policy from `lv_fit_t`
- * @param bottom bottom fit policy from `lv_fit_t`
- */
-static inline void lv_btn_set_fit4(lv_obj_t * btn, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
-{
- lv_cont_set_fit4(btn, left, right, top, bottom);
-}
-
-/**
- * Set the fit policy horizontally and vertically separately.
- * It tells how to change the button size automatically.
- * @param btn pointer to a button object
- * @param hor horizontal fit policy from `lv_fit_t`
- * @param ver vertical fit policy from `lv_fit_t`
- */
-static inline void lv_btn_set_fit2(lv_obj_t * btn, lv_fit_t hor, lv_fit_t ver)
-{
- lv_cont_set_fit2(btn, hor, ver);
-}
-
-/**
- * Set the fit policy in all 4 direction at once.
- * It tells how to change the button size automatically.
- * @param btn pointer to a button object
- * @param fit fit policy from `lv_fit_t`
- */
-static inline void lv_btn_set_fit(lv_obj_t * btn, lv_fit_t fit)
-{
- lv_cont_set_fit(btn, fit);
-}
-
-/**
- * Set time of the ink effect (draw a circle on click to animate in the new state)
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time);
-
-/**
- * Set the wait time before the ink disappears
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time);
-
-/**
- * Set time of the ink out effect (animate to the released state)
- * @param btn pointer to a button object
- * @param time the time of the ink animation
- */
-void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time);
-
-/**
- * Set a style of a button.
- * @param btn pointer to button object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current state of the button
- * @param btn pointer to a button object
- * @return the state of the button (from lv_btn_state_t enum)
- */
-lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn);
-
-/**
- * Get the toggle enable attribute of the button
- * @param btn pointer to a button object
- * @return true: toggle enabled, false: disabled
- */
-bool lv_btn_get_toggle(const lv_obj_t * btn);
-
-/**
- * Get the layout of a button
- * @param btn pointer to button object
- * @return the layout from 'lv_cont_layout_t'
- */
-static inline lv_layout_t lv_btn_get_layout(const lv_obj_t * btn)
-{
- return lv_cont_get_layout(btn);
-}
-
-/**
- * Get the left fit mode
- * @param btn pointer to a button object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_btn_get_fit_left(const lv_obj_t * btn)
-{
- return lv_cont_get_fit_left(btn);
-}
-
-/**
- * Get the right fit mode
- * @param btn pointer to a button object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_btn_get_fit_right(const lv_obj_t * btn)
-{
- return lv_cont_get_fit_right(btn);
-}
-
-/**
- * Get the top fit mode
- * @param btn pointer to a button object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_btn_get_fit_top(const lv_obj_t * btn)
-{
- return lv_cont_get_fit_top(btn);
-}
-
-/**
- * Get the bottom fit mode
- * @param btn pointer to a button object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_btn_get_fit_bottom(const lv_obj_t * btn)
-{
- return lv_cont_get_fit_bottom(btn);
-}
-
-/**
- * Get time of the ink in effect (draw a circle on click to animate in the new state)
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn);
-
-/**
- * Get the wait time before the ink disappears
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn);
-
-/**
- * Get time of the ink out effect (animate to the releases state)
- * @param btn pointer to a button object
- * @return the time of the ink animation
- */
-uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn);
-
-/**
- * Get style of a button.
- * @param btn pointer to button object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_BUTTON*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_BTN_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_btnm.c b/src/libs/lvgl/src/lv_objx/lv_btnm.c
deleted file mode 100644
index d8d5f700..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_btnm.c
+++ /dev/null
@@ -1,1125 +0,0 @@
-/**
- * @file lv_btnm.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_btnm.h"
-#if LV_USE_BTNM != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_txt.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_btnm"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param);
-static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mode_t mode);
-static uint8_t get_button_width(lv_btnm_ctrl_t ctrl_bits);
-static bool button_is_hidden(lv_btnm_ctrl_t ctrl_bits);
-static bool button_is_repeat_disabled(lv_btnm_ctrl_t ctrl_bits);
-static bool button_is_inactive(lv_btnm_ctrl_t ctrl_bits);
-static bool button_is_click_trig(lv_btnm_ctrl_t ctrl_bits);
-static bool button_is_tgl_enabled(lv_btnm_ctrl_t ctrl_bits);
-static bool button_get_tgl_state(lv_btnm_ctrl_t ctrl_bits);
-static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p);
-static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char ** map);
-static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx);
-static bool maps_are_identical(const char ** map1, const char ** map2);
-static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static const char * lv_btnm_def_map[] = {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""};
-
-static lv_design_cb_t ancestor_design_f;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a button matrix objects
- * @param par pointer to an object, it will be the parent of the new button matrix
- * @param copy pointer to a button matrix object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created button matrix
- */
-lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("button matrix create started");
-
- /*Create the ancestor object*/
- lv_obj_t * new_btnm = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_btnm);
- if(new_btnm == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_btnm);
-
- /*Allocate the object type specific extended data*/
- lv_btnm_ext_t * ext = lv_obj_allocate_ext_attr(new_btnm, sizeof(lv_btnm_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->btn_cnt = 0;
- ext->btn_id_pr = LV_BTNM_BTN_NONE;
- ext->btn_id_act = LV_BTNM_BTN_NONE;
- ext->button_areas = NULL;
- ext->ctrl_bits = NULL;
- ext->map_p = NULL;
- ext->recolor = 0;
- ext->one_toggle = 0;
- ext->styles_btn[LV_BTN_STATE_REL] = &lv_style_btn_rel;
- ext->styles_btn[LV_BTN_STATE_PR] = &lv_style_btn_pr;
- ext->styles_btn[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
- ext->styles_btn[LV_BTN_STATE_TGL_PR] = &lv_style_btn_tgl_pr;
- ext->styles_btn[LV_BTN_STATE_INA] = &lv_style_btn_ina;
-
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_btnm);
-
- lv_obj_set_signal_cb(new_btnm, lv_btnm_signal);
- lv_obj_set_design_cb(new_btnm, lv_btnm_design);
-
- /*Init the new button matrix object*/
- if(copy == NULL) {
- lv_btnm_set_map(new_btnm, lv_btnm_def_map);
- lv_obj_set_size(new_btnm, LV_DPI * 3, LV_DPI * 2);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BG, th->style.btnm.bg);
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_REL, th->style.btnm.btn.rel);
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_PR, th->style.btnm.btn.pr);
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_REL, th->style.btnm.btn.tgl_rel);
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_PR, th->style.btnm.btn.tgl_pr);
- lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_INA, th->style.btnm.btn.ina);
- } else {
- lv_obj_set_style(new_btnm, &lv_style_pretty);
- }
- }
- /*Copy an existing object*/
- else {
- lv_btnm_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- memcpy((void*)ext->styles_btn, copy_ext->styles_btn, sizeof(ext->styles_btn));
- lv_btnm_set_map(new_btnm, lv_btnm_get_map_array(copy));
- }
-
- LV_LOG_INFO("button matrix created");
-
- return new_btnm;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new map. Buttons will be created/deleted according to the map. The
- * button matrix keeps a reference to the map and so the string array must not
- * be deallocated during the life of the matrix.
- * @param btnm pointer to a button matrix object
- * @param map pointer a string array. The last string has to be: "". Use "\n" to make a line break.
- */
-void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
- LV_ASSERT_NULL(map);
-
- /*
- * lv_btnm_set_map is called on receipt of signals such as
- * LV_SIGNAL_CORD_CHG regardless of whether the map has changed (e.g.
- * calling lv_obj_align on the map will trigger this).
- *
- * We check if the map has changed here to avoid overwriting changes made
- * to hidden/longpress/disabled states after the map was originally set.
- *
- * TODO: separate all map set/allocation from layout code below and skip
- * set/allocation when map hasn't changed.
- */
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- if(!maps_are_identical(ext->map_p, map)) {
-
- /*Analyze the map and create the required number of buttons*/
- allocate_btn_areas_and_controls(btnm, map);
- }
- ext->map_p = map;
-
- /*Set size and positions of the buttons*/
- const lv_style_t * style_bg = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BG);
- lv_coord_t max_w = lv_obj_get_width(btnm) - style_bg->body.padding.left - style_bg->body.padding.right;
- lv_coord_t max_h = lv_obj_get_height(btnm) - style_bg->body.padding.top - style_bg->body.padding.bottom;
- lv_coord_t act_y = style_bg->body.padding.top;
-
- /*Count the lines to calculate button height*/
- uint8_t line_cnt = 1;
- uint8_t li;
- for(li = 0; strlen(map[li]) != 0; li++) {
- if(strcmp(map[li], "\n") == 0) line_cnt++;
- }
-
- lv_coord_t btn_h = max_h - ((line_cnt - 1) * style_bg->body.padding.inner);
- btn_h = btn_h / line_cnt;
- btn_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
-
- /* Count the units and the buttons in a line
- * (A button can be 1,2,3... unit wide)*/
- uint16_t unit_cnt; /*Number of units in a row*/
- uint16_t unit_act_cnt; /*Number of units currently put in a row*/
- uint16_t btn_cnt; /*Number of buttons in a row*/
- uint16_t i_tot = 0; /*Act. index in the str map*/
- uint16_t btn_i = 0; /*Act. index of button areas*/
- const char ** map_p_tmp = map;
-
- /*Count the units and the buttons in a line*/
- while(1) {
- unit_cnt = 0;
- btn_cnt = 0;
- /*Count the buttons in a line*/
- while(strcmp(map_p_tmp[btn_cnt], "\n") != 0 && strlen(map_p_tmp[btn_cnt]) != 0) { /*Check a line*/
- unit_cnt += get_button_width(ext->ctrl_bits[btn_i + btn_cnt]);
- btn_cnt++;
- }
-
- /*Make sure the last row is at the bottom of 'btnm'*/
- if(map_p_tmp[btn_cnt][0] == '\0') { /*Last row?*/
- btn_h = lv_obj_get_height(btnm)- act_y - style_bg->body.padding.bottom - 1;
- }
-
- lv_bidi_dir_t base_dir = lv_obj_get_base_dir(btnm);
-
- /*Only deal with the non empty lines*/
- if(btn_cnt != 0) {
- /*Calculate the width of all units*/
- lv_coord_t all_unit_w = max_w - ((btn_cnt - 1) * style_bg->body.padding.inner);
-
- /*Set the button size and positions and set the texts*/
- uint16_t i;
- lv_coord_t act_x;
-
- lv_coord_t act_unit_w;
- unit_act_cnt = 0;
- for(i = 0; i < btn_cnt; i++) {
- /* one_unit_w = all_unit_w / unit_cnt
- * act_unit_w = one_unit_w * button_width
- * do this two operations but the multiply first to divide a greater number */
- act_unit_w = (all_unit_w * get_button_width(ext->ctrl_bits[btn_i])) / unit_cnt;
- act_unit_w--; /*-1 because e.g. width = 100 means 101 pixels (0..100)*/
-
- /*Always recalculate act_x because of rounding errors */
- if(base_dir == LV_BIDI_DIR_RTL) {
- act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * style_bg->body.padding.inner;
- act_x = lv_obj_get_width(btnm) - style_bg->body.padding.right - act_x - act_unit_w - 1;
- } else {
- act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * style_bg->body.padding.inner +
- style_bg->body.padding.left;
- }
- /* Set the button's area.
- * If inner padding is zero then use the prev. button x2 as x1 to avoid rounding
- * errors*/
- if(style_bg->body.padding.inner == 0 && act_x != style_bg->body.padding.left) {
- lv_area_set(&ext->button_areas[btn_i], ext->button_areas[btn_i - 1].x2, act_y, act_x + act_unit_w,
- act_y + btn_h);
- } else {
- lv_area_set(&ext->button_areas[btn_i], act_x, act_y, act_x + act_unit_w, act_y + btn_h);
- }
-
- unit_act_cnt += get_button_width(ext->ctrl_bits[btn_i]);
-
- i_tot++;
- btn_i++;
- }
- }
- act_y += btn_h + style_bg->body.padding.inner + 1;
-
- if(strlen(map_p_tmp[btn_cnt]) == 0) break; /*Break on end of map*/
- map_p_tmp = &map_p_tmp[btn_cnt + 1]; /*Set the map to the next line*/
- i_tot++; /*Skip the '\n'*/
- }
-
- lv_obj_invalidate(btnm);
-}
-
-/**
- * Set the button control map (hidden, disabled etc.) for a button matrix. The
- * control map array will be copied and so may be deallocated after this
- * function returns.
- * @param btnm pointer to a button matrix object
- * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes. The
- * length of the array and position of the elements must match
- * the number and order of the individual buttons (i.e. excludes
- * newline entries).
- * An element of the map should look like e.g.:
- * `ctrl_map[0] = width | LV_BTNM_CTRL_NO_REPEAT | LV_BTNM_CTRL_TGL_ENABLE`
- */
-void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t ctrl_map[])
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- memcpy(ext->ctrl_bits, ctrl_map, sizeof(lv_btnm_ctrl_t) * ext->btn_cnt);
-
- lv_btnm_set_map(btnm, ext->map_p);
-}
-
-/**
- * Set the pressed button i.e. visually highlight it.
- * Mainly used a when the btnm is in a group to show the selected button
- * @param btnm pointer to button matrix object
- * @param id index of the currently pressed button (`LV_BTNM_BTN_NONE` to unpress)
- */
-void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- if(id >= ext->btn_cnt && id != LV_BTNM_BTN_NONE) return;
-
- if(id == ext->btn_id_pr) return;
-
- ext->btn_id_pr = id;
- lv_obj_invalidate(btnm);
-}
-
-/**
- * Set a style of a button matrix
- * @param btnm pointer to a button matrix object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- switch(type) {
- case LV_BTNM_STYLE_BG: lv_obj_set_style(btnm, style); break;
- case LV_BTNM_STYLE_BTN_REL:
- ext->styles_btn[LV_BTN_STATE_REL] = style;
- lv_obj_invalidate(btnm);
- break;
- case LV_BTNM_STYLE_BTN_PR:
- ext->styles_btn[LV_BTN_STATE_PR] = style;
- lv_obj_invalidate(btnm);
- break;
- case LV_BTNM_STYLE_BTN_TGL_REL:
- ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
- lv_obj_invalidate(btnm);
- break;
- case LV_BTNM_STYLE_BTN_TGL_PR:
- ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
- lv_obj_invalidate(btnm);
- break;
- case LV_BTNM_STYLE_BTN_INA:
- ext->styles_btn[LV_BTN_STATE_INA] = style;
- lv_obj_invalidate(btnm);
- break;
- }
-}
-
-/**
- * Enable recoloring of button's texts
- * @param btnm pointer to button matrix object
- * @param en true: enable recoloring; false: disable
- */
-void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- ext->recolor = en;
- lv_obj_invalidate(btnm);
-}
-
-/**
- * Set the attributes of a button of the button matrix
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify. (Not counting new lines)
- */
-void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- if(btn_id >= ext->btn_cnt) return;
-
- ext->ctrl_bits[btn_id] |= ctrl;
- invalidate_button_area(btnm, btn_id);
-}
-
-/**
- * Clear the attributes of a button of the button matrix
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify. (Not counting new lines)
- */
-void lv_btnm_clear_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- if(btn_id >= ext->btn_cnt) return;
-
- ext->ctrl_bits[btn_id] &= (~ctrl);
- invalidate_button_area(btnm, btn_id);
-}
-
-/**
- * Set the attributes of all buttons of a button matrix
- * @param btnm pointer to a button matrix object
- * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
- */
-void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- uint16_t i;
- for(i = 0; i < ext->btn_cnt; i++) {
- lv_btnm_set_btn_ctrl(btnm, i, ctrl);
- }
-}
-
-/**
- * Clear the attributes of all buttons of a button matrix
- * @param btnm pointer to a button matrix object
- * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
- * @param en true: set the attributes; false: clear the attributes
- */
-void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- uint16_t i;
- for(i = 0; i < ext->btn_cnt; i++) {
- lv_btnm_clear_btn_ctrl(btnm, i, ctrl);
- }
-}
-
-/**
- * Set a single buttons relative width.
- * This method will cause the matrix be regenerated and is a relatively
- * expensive operation. It is recommended that initial width be specified using
- * `lv_btnm_set_ctrl_map` and this method only be used for dynamic changes.
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify.
- * @param width Relative width compared to the buttons in the same row. [1..7]
- */
-void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t width)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- if(btn_id >= ext->btn_cnt) return;
- ext->ctrl_bits[btn_id] &= (~LV_BTNM_WIDTH_MASK);
- ext->ctrl_bits[btn_id] |= (LV_BTNM_WIDTH_MASK & width);
-
- lv_btnm_set_map(btnm, ext->map_p);
-}
-
-/**
- * Make the button matrix like a selector widget (only one button may be toggled at a time).
- *
- * Toggling must be enabled on the buttons you want to be selected with `lv_btnm_set_ctrl` or
- * `lv_btnm_set_btn_ctrl_all`.
- *
- * @param btnm Button matrix object
- * @param one_toggle Whether "one toggle" mode is enabled
- */
-void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- ext->one_toggle = one_toggle;
-
- /*If more than one button is toggled only the first one should be*/
- make_one_button_toggled(btnm, 0);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current map of a button matrix
- * @param btnm pointer to a button matrix object
- * @return the current map
- */
-const char ** lv_btnm_get_map_array(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- return ext->map_p;
-}
-
-/**
- * Check whether the button's text can use recolor or not
- * @param btnm pointer to button matrix object
- * @return true: text recolor enable; false: disabled
- */
-bool lv_btnm_get_recolor(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- return ext->recolor;
-}
-
-/**
- * Get the index of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb` to get the text of the button, check if hidden etc.
- * @param btnm pointer to button matrix object
- * @return index of the last released button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_btnm_get_active_btn(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- return ext->btn_id_act;
-}
-
-/**
- * Get the text of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`
- * @param btnm pointer to button matrix object
- * @return text of the last released button (NULL: if unset)
- */
-const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
- return lv_btnm_get_btn_text(btnm, ext->btn_id_act);
- } else {
- return NULL;
- }
-}
-
-/**
- * Get the pressed button's index.
- * The button be really pressed by the user or manually set to pressed with `lv_btnm_set_pressed`
- * @param btnm pointer to button matrix object
- * @return index of the pressed button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_btnm_get_pressed_btn(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- return ext->btn_id_pr;
-}
-
-/**
- * Get the button's text
- * @param btnm pointer to button matrix object
- * @param btn_id the index a button not counting new line characters. (The return value of
- * lv_btnm_get_pressed/released)
- * @return text of btn_index` button
- */
-const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- if(btn_id > ext->btn_cnt) return NULL;
-
- uint16_t txt_i = 0;
- uint16_t btn_i = 0;
-
- /* Search the text of ext->btn_pr the buttons text in the map
- * Skip "\n"-s*/
- while(btn_i != btn_id) {
- btn_i++;
- txt_i++;
- if(strcmp(ext->map_p[txt_i], "\n") == 0) txt_i++;
- }
-
- if(btn_i == ext->btn_cnt) return NULL;
-
- return ext->map_p[txt_i];
-}
-
-/**
- * Get the whether a control value is enabled or disabled for button of a button matrix
- * @param btnm pointer to a button matrix object
- * @param btn_id the index a button not counting new line characters. (E.g. the return value of
- * lv_btnm_get_pressed/released)
- * @param ctrl control values to check (ORed value can be used)
- * @return true: long press repeat is disabled; false: long press repeat enabled
- */
-bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- if(btn_id >= ext->btn_cnt) return false;
-
- return ext->ctrl_bits[btn_id] & ctrl ? true : false;
-}
-
-/**
- * Get a style of a button matrix
- * @param btnm pointer to a button matrix object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- switch(type) {
- case LV_BTNM_STYLE_BG: style = lv_obj_get_style(btnm); break;
- case LV_BTNM_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; break;
- case LV_BTNM_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; break;
- case LV_BTNM_STYLE_BTN_TGL_REL: style = ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
- case LV_BTNM_STYLE_BTN_TGL_PR: style = ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
- case LV_BTNM_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_INA]; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**
- * Find whether "one toggle" mode is enabled.
- * @param btnm Button matrix object
- * @return whether "one toggle" mode is enabled
- */
-bool lv_btnm_get_one_toggle(const lv_obj_t * btnm)
-{
- LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- return ext->one_toggle;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the button matrixs
- * @param btnm pointer to a button matrix object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design_f(btnm, mask, mode);
- /*Return false if the object is not covers the mask_p area*/
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- ancestor_design_f(btnm, mask, mode);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- const lv_style_t * bg_style = lv_obj_get_style(btnm);
- const lv_style_t * btn_style;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(btnm);
-
- lv_area_t area_btnm;
- lv_obj_get_coords(btnm, &area_btnm);
-
- lv_area_t area_tmp;
- lv_coord_t btn_w;
- lv_coord_t btn_h;
-
- uint16_t btn_i = 0;
- uint16_t txt_i = 0;
- lv_style_t style_tmp;
- lv_txt_flag_t txt_flag = LV_TXT_FLAG_NONE;
-
- if(ext->recolor) txt_flag = LV_TXT_FLAG_RECOLOR;
- for(btn_i = 0; btn_i < ext->btn_cnt; btn_i++, txt_i++) {
- /*Search the next valid text in the map*/
- while(strcmp(ext->map_p[txt_i], "\n") == 0) {
- txt_i++;
- }
-
- /*Skip hidden buttons*/
- if(button_is_hidden(ext->ctrl_bits[btn_i])) continue;
-
- lv_area_copy(&area_tmp, &ext->button_areas[btn_i]);
- area_tmp.x1 += area_btnm.x1;
- area_tmp.y1 += area_btnm.y1;
- area_tmp.x2 += area_btnm.x1;
- area_tmp.y2 += area_btnm.y1;
-
- btn_w = lv_area_get_width(&area_tmp);
- btn_h = lv_area_get_height(&area_tmp);
-
- /*Load the style*/
- bool tgl_state = button_get_tgl_state(ext->ctrl_bits[btn_i]);
- if(button_is_inactive(ext->ctrl_bits[btn_i]))
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_INA);
- else if(btn_i != ext->btn_id_pr && tgl_state == false)
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL);
- else if(btn_i == ext->btn_id_pr && tgl_state == false)
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_PR);
- else if(btn_i != ext->btn_id_pr && tgl_state == true)
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_REL);
- else if(btn_i == ext->btn_id_pr && tgl_state == true)
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_PR);
- else
- btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL); /*Not possible option, just to be sure*/
-
- lv_style_copy(&style_tmp, btn_style);
-
- /*Remove borders on the edges if `LV_BORDER_INTERNAL`*/
- if(style_tmp.body.border.part & LV_BORDER_INTERNAL) {
- if(area_tmp.y1 == btnm->coords.y1 + bg_style->body.padding.top) {
- style_tmp.body.border.part &= ~LV_BORDER_TOP;
- }
- if(area_tmp.y2 == btnm->coords.y2 - bg_style->body.padding.bottom) {
- style_tmp.body.border.part &= ~LV_BORDER_BOTTOM;
- }
-
- if(txt_i == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_LEFT;
- } else if(strcmp(ext->map_p[txt_i - 1], "\n") == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_LEFT;
- }
-
- if(ext->map_p[txt_i + 1][0] == '\0' || strcmp(ext->map_p[txt_i + 1], "\n") == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_RIGHT;
- }
- }
- lv_draw_rect(&area_tmp, mask, &style_tmp, opa_scale);
-
- /*Calculate the size of the text*/
- if(btn_style->glass) btn_style = bg_style;
- const lv_font_t * font = btn_style->text.font;
- lv_point_t txt_size;
- lv_txt_get_size(&txt_size, ext->map_p[txt_i], font, btn_style->text.letter_space,
- btn_style->text.line_space, lv_area_get_width(&area_btnm), txt_flag);
-
- area_tmp.x1 += (btn_w - txt_size.x) / 2;
- area_tmp.y1 += (btn_h - txt_size.y) / 2;
- area_tmp.x2 = area_tmp.x1 + txt_size.x;
- area_tmp.y2 = area_tmp.y1 + txt_size.y;
-
- lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL, NULL, NULL, lv_obj_get_base_dir(btnm));
- }
- }
-
- return true;
-}
-
-/**
- * Signal function of the button matrix
- * @param btnm pointer to a button matrix object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(btnm, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- lv_point_t p;
- if(sign == LV_SIGNAL_CLEANUP) {
- lv_mem_free(ext->button_areas);
- lv_mem_free(ext->ctrl_bits);
- } else if(sign == LV_SIGNAL_STYLE_CHG || sign == LV_SIGNAL_CORD_CHG) {
- lv_btnm_set_map(btnm, ext->map_p);
- } else if(sign == LV_SIGNAL_PRESSED) {
- lv_indev_t * indev = lv_indev_get_act();
- if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
- uint16_t btn_pr;
- /*Search the pressed area*/
- lv_indev_get_point(param, &p);
- btn_pr = get_button_from_point(btnm, &p);
-
- invalidate_button_area(btnm, ext->btn_id_pr) /*Invalidate the old area*/;
- ext->btn_id_pr = btn_pr;
- ext->btn_id_act = btn_pr;
- invalidate_button_area(btnm, ext->btn_id_pr); /*Invalidate the new area*/
- }
- if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
- if(button_is_click_trig(ext->ctrl_bits[ext->btn_id_act]) == false &&
- button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
- button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
- uint32_t b = ext->btn_id_act;
- res = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
- }
- }
- } else if(sign == LV_SIGNAL_PRESSING) {
- uint16_t btn_pr;
- /*Search the pressed area*/
- lv_indev_get_point(param, &p);
- btn_pr = get_button_from_point(btnm, &p);
- /*Invalidate to old and the new areas*/;
- if(btn_pr != ext->btn_id_pr) {
- lv_indev_reset_long_press(param); /*Start the log press time again on the new button*/
- if(ext->btn_id_pr != LV_BTNM_BTN_NONE) {
- invalidate_button_area(btnm, ext->btn_id_pr);
- }
- if(btn_pr != LV_BTNM_BTN_NONE) {
- uint32_t b = ext->btn_id_act;
- res = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
- if(res == LV_RES_OK) {
- invalidate_button_area(btnm, btn_pr);
- }
- }
- }
-
- ext->btn_id_pr = btn_pr;
- ext->btn_id_act = btn_pr;
- } else if(sign == LV_SIGNAL_RELEASED) {
- if(ext->btn_id_pr != LV_BTNM_BTN_NONE) {
- /*Toggle the button if enabled*/
- if(button_is_tgl_enabled(ext->ctrl_bits[ext->btn_id_pr]) &&
- !button_is_inactive(ext->ctrl_bits[ext->btn_id_pr])) {
- if(button_get_tgl_state(ext->ctrl_bits[ext->btn_id_pr])) {
- ext->ctrl_bits[ext->btn_id_pr] &= (~LV_BTNM_CTRL_TGL_STATE);
- } else {
- ext->ctrl_bits[ext->btn_id_pr] |= LV_BTNM_CTRL_TGL_STATE;
- }
- if(ext->one_toggle) make_one_button_toggled(btnm, ext->btn_id_pr);
- }
-
- /*Invalidate to old pressed area*/;
- invalidate_button_area(btnm, ext->btn_id_pr);
-
-#if LV_USE_GROUP
- /*Leave the clicked button when releases if this not the focused object in a group*/
- lv_group_t * g = lv_obj_get_group(btnm);
- if(lv_group_get_focused(g) != btnm) {
- ext->btn_id_pr = LV_BTNM_BTN_NONE;
- }
-#else
- ext->btn_id_pr = LV_BTNM_BTN_NONE;
-#endif
-
- if(button_is_click_trig(ext->ctrl_bits[ext->btn_id_act]) == true &&
- button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
- button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
- uint32_t b = ext->btn_id_act;
- res = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
- }
- }
- } else if(sign == LV_SIGNAL_LONG_PRESS_REP) {
- if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
- if(button_is_repeat_disabled(ext->ctrl_bits[ext->btn_id_act]) == false &&
- button_is_inactive(ext->ctrl_bits[ext->btn_id_act]) == false &&
- button_is_hidden(ext->ctrl_bits[ext->btn_id_act]) == false) {
- uint32_t b = ext->btn_id_act;
- res = lv_event_send(btnm, LV_EVENT_VALUE_CHANGED, &b);
- }
- }
- } else if(sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_DEFOCUS) {
- ext->btn_id_pr = LV_BTNM_BTN_NONE;
- ext->btn_id_act = LV_BTNM_BTN_NONE;
- lv_obj_invalidate(btnm);
- } else if(sign == LV_SIGNAL_FOCUS) {
-#if LV_USE_GROUP
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_type_t indev_type = lv_indev_get_type(indev);
-
- /*If not focused by an input device assume the last input device*/
- if(indev == NULL) {
- indev = lv_indev_get_next(NULL);
- indev_type = lv_indev_get_type(indev);
- }
-
- if(indev_type == LV_INDEV_TYPE_POINTER) {
- /*Select the clicked button*/
- lv_point_t p1;
- lv_indev_get_point(indev, &p1);
- uint16_t btn_i = get_button_from_point(btnm, &p1);
- ext->btn_id_pr = btn_i;
-
- } else if(indev_type == LV_INDEV_TYPE_ENCODER) {
- /*In navigation mode don't select any button but in edit mode select the fist*/
- if(lv_group_get_editing(lv_obj_get_group(btnm)))
- ext->btn_id_pr = 0;
- else
- ext->btn_id_pr = LV_BTNM_BTN_NONE;
- } else {
- ext->btn_id_pr = 0;
- }
-#else
- ext->btn_id_pr = 0;
-#endif
-
- ext->btn_id_act = ext->btn_id_pr;
- lv_obj_invalidate(btnm);
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT) {
- if(ext->btn_id_pr == LV_BTNM_BTN_NONE)
- ext->btn_id_pr = 0;
- else
- ext->btn_id_pr++;
- if(ext->btn_id_pr >= ext->btn_cnt - 1) ext->btn_id_pr = ext->btn_cnt - 1;
- ext->btn_id_act = ext->btn_id_pr;
- lv_obj_invalidate(btnm);
- } else if(c == LV_KEY_LEFT) {
- if(ext->btn_id_pr == LV_BTNM_BTN_NONE) ext->btn_id_pr = 0;
- if(ext->btn_id_pr > 0) ext->btn_id_pr--;
- ext->btn_id_act = ext->btn_id_pr;
- lv_obj_invalidate(btnm);
- } else if(c == LV_KEY_DOWN) {
- const lv_style_t * style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BG);
- /*Find the area below the the current*/
- if(ext->btn_id_pr == LV_BTNM_BTN_NONE) {
- ext->btn_id_pr = 0;
- } else {
- uint16_t area_below;
- lv_coord_t pr_center =
- ext->button_areas[ext->btn_id_pr].x1 + (lv_area_get_width(&ext->button_areas[ext->btn_id_pr]) >> 1);
-
- for(area_below = ext->btn_id_pr; area_below < ext->btn_cnt; area_below++) {
- if(ext->button_areas[area_below].y1 > ext->button_areas[ext->btn_id_pr].y1 &&
- pr_center >= ext->button_areas[area_below].x1 &&
- pr_center <= ext->button_areas[area_below].x2 + style->body.padding.inner) {
- break;
- }
- }
-
- if(area_below < ext->btn_cnt) ext->btn_id_pr = area_below;
- }
- ext->btn_id_act = ext->btn_id_pr;
- lv_obj_invalidate(btnm);
- } else if(c == LV_KEY_UP) {
- const lv_style_t * style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BG);
- /*Find the area below the the current*/
- if(ext->btn_id_pr == LV_BTNM_BTN_NONE) {
- ext->btn_id_pr = 0;
- } else {
- int16_t area_above;
- lv_coord_t pr_center =
- ext->button_areas[ext->btn_id_pr].x1 + (lv_area_get_width(&ext->button_areas[ext->btn_id_pr]) >> 1);
-
- for(area_above = ext->btn_id_pr; area_above >= 0; area_above--) {
- if(ext->button_areas[area_above].y1 < ext->button_areas[ext->btn_id_pr].y1 &&
- pr_center >= ext->button_areas[area_above].x1 - style->body.padding.inner &&
- pr_center <= ext->button_areas[area_above].x2) {
- break;
- }
- }
- if(area_above >= 0) ext->btn_id_pr = area_above;
- }
- ext->btn_id_act = ext->btn_id_pr;
- lv_obj_invalidate(btnm);
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- }
- return res;
-}
-
-/**
- * Create the required number of buttons and control bytes according to a map
- * @param btnm pointer to button matrix object
- * @param map_p pointer to a string array
- */
-static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char ** map)
-{
- /*Count the buttons in the map*/
- uint16_t btn_cnt = 0;
- uint16_t i = 0;
- while(strlen(map[i]) != 0) {
- if(strcmp(map[i], "\n") != 0) { /*Do not count line breaks*/
- btn_cnt++;
- }
- i++;
- }
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
-
- if(ext->button_areas != NULL) {
- lv_mem_free(ext->button_areas);
- ext->button_areas = NULL;
- }
- if(ext->ctrl_bits != NULL) {
- lv_mem_free(ext->ctrl_bits);
- ext->ctrl_bits = NULL;
- }
-
- ext->button_areas = lv_mem_alloc(sizeof(lv_area_t) * btn_cnt);
- LV_ASSERT_MEM(ext->button_areas);
- ext->ctrl_bits = lv_mem_alloc(sizeof(lv_btnm_ctrl_t) * btn_cnt);
- LV_ASSERT_MEM(ext->ctrl_bits);
- if(ext->button_areas == NULL || ext->ctrl_bits == NULL) btn_cnt = 0;
-
- memset(ext->ctrl_bits, 0, sizeof(lv_btnm_ctrl_t) * btn_cnt);
-
- ext->btn_cnt = btn_cnt;
-}
-
-/**
- * Get the width of a button in units (default is 1).
- * @param ctrl_bits least significant 3 bits used (1..7 valid values)
- * @return the width of the button in units
- */
-static uint8_t get_button_width(lv_btnm_ctrl_t ctrl_bits)
-{
- uint8_t w = ctrl_bits & LV_BTNM_WIDTH_MASK;
- return w != 0 ? w : 1;
-}
-
-static bool button_is_hidden(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_HIDDEN ? true : false;
-}
-
-static bool button_is_repeat_disabled(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_NO_REPEAT ? true : false;
-}
-
-static bool button_is_inactive(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_INACTIVE ? true : false;
-}
-
-static bool button_is_click_trig(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_CLICK_TRIG ? true : false;
-}
-
-static bool button_is_tgl_enabled(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_TGL_ENABLE ? true : false;
-}
-
-static bool button_get_tgl_state(lv_btnm_ctrl_t ctrl_bits)
-{
- return ctrl_bits & LV_BTNM_CTRL_TGL_STATE ? true : false;
-}
-
-/**
- * Gives the button id of a button under a given point
- * @param btnm pointer to a button matrix object
- * @param p a point with absolute coordinates
- * @return the id of the button or LV_BTNM_BTN_NONE.
- */
-static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p)
-{
- lv_area_t btnm_cords;
- lv_area_t btn_area;
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- uint16_t i;
- lv_obj_get_coords(btnm, &btnm_cords);
-
- for(i = 0; i < ext->btn_cnt; i++) {
- lv_area_copy(&btn_area, &ext->button_areas[i]);
- btn_area.x1 += btnm_cords.x1;
- btn_area.y1 += btnm_cords.y1;
- btn_area.x2 += btnm_cords.x1;
- btn_area.y2 += btnm_cords.y1;
- if(lv_area_is_point_on(&btn_area, p) != false) {
- break;
- }
- }
-
- if(i == ext->btn_cnt) i = LV_BTNM_BTN_NONE;
-
- return i;
-}
-
-static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx)
-{
- if(btn_idx == LV_BTNM_BTN_NONE) return;
-
- lv_area_t btn_area;
- lv_area_t btnm_area;
-
- lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
- lv_area_copy(&btn_area, &ext->button_areas[btn_idx]);
- lv_obj_get_coords(btnm, &btnm_area);
-
- /* Convert relative coordinates to absolute */
- btn_area.x1 += btnm_area.x1;
- btn_area.y1 += btnm_area.y1;
- btn_area.x2 += btnm_area.x1;
- btn_area.y2 += btnm_area.y1;
-
- lv_obj_invalidate_area(btnm, &btn_area);
-}
-
-/**
- * Compares two button matrix maps for equality
- * @param map1 map to compare
- * @param map2 map to compare
- * @return true if maps are identical in length and content
- */
-static bool maps_are_identical(const char ** map1, const char ** map2)
-{
- if(map1 == map2) return true;
- if(map1 == NULL || map2 == NULL) return map1 == map2;
-
- uint16_t i = 0;
- while(map1[i][0] != '\0' && map2[i][0] != '\0') {
- if(strcmp(map1[i], map2[i]) != 0) return false;
- i++;
- }
- return map1[i][0] == '\0' && map2[i][0] == '\0';
-}
-
-/**
- * Enforces a single button being toggled on the button matrix.
- * It simply clears the toggle flag on other buttons.
- * @param btnm Button matrix object
- * @param btn_idx Button that should remain toggled
- */
-static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx)
-{
- /*Save whether the button was toggled*/
- bool was_toggled = lv_btnm_get_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_TGL_STATE);
-
- lv_btnm_clear_btn_ctrl_all(btnm, LV_BTNM_CTRL_TGL_STATE);
-
- if(was_toggled) lv_btnm_set_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_TGL_STATE);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_btnm.h b/src/libs/lvgl/src/lv_objx/lv_btnm.h
deleted file mode 100644
index 44bc4efb..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_btnm.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/**
- * @file lv_btnm.h
- *
- */
-
-#ifndef LV_BTNM_H
-#define LV_BTNM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_BTNM != 0
-
-#include "../lv_core/lv_obj.h"
-#include "lv_label.h"
-#include "lv_btn.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_BTNM_WIDTH_MASK 0x0007
-#define LV_BTNM_BTN_NONE 0xFFFF
-
-LV_EXPORT_CONST_INT(LV_BTNM_BTN_NONE);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Type to store button control bits (disabled, hidden etc.) */
-enum {
- LV_BTNM_CTRL_HIDDEN = 0x0008, /**< Button hidden */
- LV_BTNM_CTRL_NO_REPEAT = 0x0010, /**< Do not repeat press this button. */
- LV_BTNM_CTRL_INACTIVE = 0x0020, /**< Disable this button. */
- LV_BTNM_CTRL_TGL_ENABLE = 0x0040, /**< Button *can* be toggled. */
- LV_BTNM_CTRL_TGL_STATE = 0x0080, /**< Button is currently toggled (e.g. checked). */
- LV_BTNM_CTRL_CLICK_TRIG = 0x0100, /**< 1: Send LV_EVENT_SELECTED on CLICK, 0: Send LV_EVENT_SELECTED on PRESS*/
-};
-typedef uint16_t lv_btnm_ctrl_t;
-
-/*Data of button matrix*/
-typedef struct
-{
- /*No inherited ext.*/ /*Ext. of ancestor*/
- /*New data for this type */
- const char ** map_p; /*Pointer to the current map*/
- lv_area_t * button_areas; /*Array of areas of buttons*/
- lv_btnm_ctrl_t * ctrl_bits; /*Array of control bytes*/
- const lv_style_t * styles_btn[_LV_BTN_STATE_NUM]; /*Styles of buttons in each state*/
- uint16_t btn_cnt; /*Number of button in 'map_p'(Handled by the library)*/
- uint16_t btn_id_pr; /*Index of the currently pressed button or LV_BTNM_BTN_NONE*/
- uint16_t btn_id_act; /*Index of the active button (being pressed/released etc) or LV_BTNM_BTN_NONE */
- uint8_t recolor : 1; /*Enable button recoloring*/
- uint8_t one_toggle : 1; /*Single button toggled at once*/
-} lv_btnm_ext_t;
-
-enum {
- LV_BTNM_STYLE_BG,
- LV_BTNM_STYLE_BTN_REL,
- LV_BTNM_STYLE_BTN_PR,
- LV_BTNM_STYLE_BTN_TGL_REL,
- LV_BTNM_STYLE_BTN_TGL_PR,
- LV_BTNM_STYLE_BTN_INA,
-};
-typedef uint8_t lv_btnm_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a button matrix objects
- * @param par pointer to an object, it will be the parent of the new button matrix
- * @param copy pointer to a button matrix object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created button matrix
- */
-lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new map. Buttons will be created/deleted according to the map. The
- * button matrix keeps a reference to the map and so the string array must not
- * be deallocated during the life of the matrix.
- * @param btnm pointer to a button matrix object
- * @param map pointer a string array. The last string has to be: "". Use "\n" to make a line break.
- */
-void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[]);
-
-/**
- * Set the button control map (hidden, disabled etc.) for a button matrix. The
- * control map array will be copied and so may be deallocated after this
- * function returns.
- * @param btnm pointer to a button matrix object
- * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes. The
- * length of the array and position of the elements must match
- * the number and order of the individual buttons (i.e. excludes
- * newline entries).
- * An element of the map should look like e.g.:
- * `ctrl_map[0] = width | LV_BTNM_CTRL_NO_REPEAT | LV_BTNM_CTRL_TGL_ENABLE`
- */
-void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t ctrl_map[]);
-
-/**
- * Set the pressed button i.e. visually highlight it.
- * Mainly used a when the btnm is in a group to show the selected button
- * @param btnm pointer to button matrix object
- * @param id index of the currently pressed button (`LV_BTNM_BTN_NONE` to unpress)
- */
-void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id);
-
-/**
- * Set a style of a button matrix
- * @param btnm pointer to a button matrix object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t * style);
-
-/**
- * Enable recoloring of button's texts
- * @param btnm pointer to button matrix object
- * @param en true: enable recoloring; false: disable
- */
-void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en);
-
-/**
- * Set the attributes of a button of the button matrix
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify. (Not counting new lines)
- */
-void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl);
-
-/**
- * Clear the attributes of a button of the button matrix
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify. (Not counting new lines)
- */
-void lv_btnm_clear_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl);
-
-/**
- * Set the attributes of all buttons of a button matrix
- * @param btnm pointer to a button matrix object
- * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
- */
-void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl);
-
-/**
- * Clear the attributes of all buttons of a button matrix
- * @param btnm pointer to a button matrix object
- * @param ctrl attribute(s) to set from `lv_btnm_ctrl_t`. Values can be ORed.
- * @param en true: set the attributes; false: clear the attributes
- */
-void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl);
-
-/**
- * Set a single buttons relative width.
- * This method will cause the matrix be regenerated and is a relatively
- * expensive operation. It is recommended that initial width be specified using
- * `lv_btnm_set_ctrl_map` and this method only be used for dynamic changes.
- * @param btnm pointer to button matrix object
- * @param btn_id 0 based index of the button to modify.
- * @param width Relative width compared to the buttons in the same row. [1..7]
- */
-void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t width);
-
-/**
- * Make the button matrix like a selector widget (only one button may be toggled at a time).
- *
- * Toggling must be enabled on the buttons you want to be selected with `lv_btnm_set_ctrl` or
- * `lv_btnm_set_btn_ctrl_all`.
- *
- * @param btnm Button matrix object
- * @param one_toggle Whether "one toggle" mode is enabled
- */
-void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current map of a button matrix
- * @param btnm pointer to a button matrix object
- * @return the current map
- */
-const char ** lv_btnm_get_map_array(const lv_obj_t * btnm);
-
-/**
- * Check whether the button's text can use recolor or not
- * @param btnm pointer to button matrix object
- * @return true: text recolor enable; false: disabled
- */
-bool lv_btnm_get_recolor(const lv_obj_t * btnm);
-
-/**
- * Get the index of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb` to get the text of the button, check if hidden etc.
- * @param btnm pointer to button matrix object
- * @return index of the last released button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_btnm_get_active_btn(const lv_obj_t * btnm);
-
-/**
- * Get the text of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`
- * @param btnm pointer to button matrix object
- * @return text of the last released button (NULL: if unset)
- */
-const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm);
-
-/**
- * Get the pressed button's index.
- * The button be really pressed by the user or manually set to pressed with `lv_btnm_set_pressed`
- * @param btnm pointer to button matrix object
- * @return index of the pressed button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_btnm_get_pressed_btn(const lv_obj_t * btnm);
-
-/**
- * Get the button's text
- * @param btnm pointer to button matrix object
- * @param btn_id the index a button not counting new line characters. (The return value of
- * lv_btnm_get_pressed/released)
- * @return text of btn_index` button
- */
-const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id);
-
-/**
- * Get the whether a control value is enabled or disabled for button of a button matrix
- * @param btnm pointer to a button matrix object
- * @param btn_id the index a button not counting new line characters. (E.g. the return value of
- * lv_btnm_get_pressed/released)
- * @param ctrl control values to check (ORed value can be used)
- * @return true: long press repeat is disabled; false: long press repeat enabled
- */
-bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl);
-
-/**
- * Get a style of a button matrix
- * @param btnm pointer to a button matrix object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type);
-
-/**
- * Find whether "one toggle" mode is enabled.
- * @param btnm Button matrix object
- * @return whether "one toggle" mode is enabled
- */
-bool lv_btnm_get_one_toggle(const lv_obj_t * btnm);
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_BTNM*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_BTNM_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_calendar.c b/src/libs/lvgl/src/lv_objx/lv_calendar.c
deleted file mode 100644
index 53f32a22..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_calendar.c
+++ /dev/null
@@ -1,983 +0,0 @@
-/**
- * @file lv_calendar.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_calendar.h"
-#if LV_USE_CALENDAR != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_hal/lv_hal_indev.h"
-#include "../lv_misc/lv_utils.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_themes/lv_theme.h"
-#include <string.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_calendar"
-
-/**********************
- * TYPEDEFS
- **********************/
-enum {
- DAY_DRAW_PREV_MONTH,
- DAY_DRAW_ACT_MONTH,
- DAY_DRAW_NEXT_MONTH,
-};
-typedef uint8_t day_draw_state_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void * param);
-static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t * touched_point);
-static lv_coord_t get_header_height(lv_obj_t * calendar);
-static lv_coord_t get_day_names_height(lv_obj_t * calendar);
-static void draw_header(lv_obj_t * calendar, const lv_area_t * mask);
-static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask);
-static void draw_days(lv_obj_t * calendar, const lv_area_t * mask);
-static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day);
-static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, int32_t day);
-static const char * get_day_name(lv_obj_t * calendar, uint8_t day);
-static const char * get_month_name(lv_obj_t * calendar, int32_t month);
-static uint8_t get_month_length(int32_t year, int32_t month);
-static uint8_t is_leap_year(uint32_t year);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-static const char * day_name[7] = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
-static const char * month_name[12] = {"January", "February", "March", "April", "May", "June",
- "July", "August", "September", "October", "November", "December"};
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a calendar object
- * @param par pointer to an object, it will be the parent of the new calendar
- * @param copy pointer to a calendar object, if not NULL then the new object will be copied from it
- * @return pointer to the created calendar
- */
-lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("calendar create started");
-
- /*Create the ancestor of calendar*/
- lv_obj_t * new_calendar = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_calendar);
- if(new_calendar == NULL) return NULL;
-
- /*Allocate the calendar type specific extended data*/
- lv_calendar_ext_t * ext = lv_obj_allocate_ext_attr(new_calendar, sizeof(lv_calendar_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_calendar);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_calendar);
-
- /*Initialize the allocated 'ext' */
- ext->today.year = 2018;
- ext->today.month = 1;
- ext->today.day = 1;
-
- ext->showed_date.year = 2018;
- ext->showed_date.month = 1;
- ext->showed_date.day = 1;
-
- ext->pressed_date.year = 0;
- ext->pressed_date.month = 0;
- ext->pressed_date.day = 0;
-
- ext->highlighted_dates = NULL;
- ext->highlighted_dates_num = 0;
- ext->day_names = NULL;
- ext->month_names = NULL;
- ext->style_header = &lv_style_plain_color;
- ext->style_header_pr = &lv_style_pretty_color;
- ext->style_highlighted_days = &lv_style_plain_color;
- ext->style_inactive_days = &lv_style_btn_ina;
- ext->style_week_box = &lv_style_plain_color;
- ext->style_today_box = &lv_style_pretty_color;
- ext->style_day_names = &lv_style_pretty;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_calendar, lv_calendar_signal);
- lv_obj_set_design_cb(new_calendar, lv_calendar_design);
-
- /*Init the new calendar calendar*/
- if(copy == NULL) {
- lv_obj_set_size(new_calendar, LV_DPI * 2, LV_DPI * 2);
- lv_obj_set_style(new_calendar, &lv_style_pretty);
-
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, th->style.calendar.bg);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, th->style.calendar.header);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, th->style.calendar.header_pr);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, th->style.calendar.day_names);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, th->style.calendar.week_box);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, th->style.calendar.today_box);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS,
- th->style.calendar.highlighted_days);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_INACTIVE_DAYS, th->style.calendar.inactive_days);
- } else {
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, &lv_style_pretty);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, ext->style_header);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, ext->style_header_pr);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, ext->style_day_names);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, ext->style_week_box);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, ext->style_today_box);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, ext->style_highlighted_days);
- lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_INACTIVE_DAYS, ext->style_inactive_days);
- }
- }
- /*Copy an existing calendar*/
- else {
- lv_calendar_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->today.year = copy_ext->today.year;
- ext->today.month = copy_ext->today.month;
- ext->today.day = copy_ext->today.day;
-
- ext->showed_date.year = copy_ext->showed_date.year;
- ext->showed_date.month = copy_ext->showed_date.month;
- ext->showed_date.day = copy_ext->showed_date.day;
-
- ext->highlighted_dates = copy_ext->highlighted_dates;
- ext->highlighted_dates_num = copy_ext->highlighted_dates_num;
- ext->day_names = copy_ext->day_names;
-
- ext->month_names = copy_ext->month_names;
- ext->style_header = copy_ext->style_header;
- ext->style_header_pr = copy_ext->style_header_pr;
- ext->style_highlighted_days = copy_ext->style_highlighted_days;
- ext->style_inactive_days = copy_ext->style_inactive_days;
- ext->style_week_box = copy_ext->style_week_box;
- ext->style_today_box = copy_ext->style_today_box;
- ext->style_day_names = copy_ext->style_day_names;
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_calendar);
- }
-
- LV_LOG_INFO("calendar created");
-
- return new_calendar;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*
- * New object specific "add" or "remove" functions come here
- */
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the today's date
- * @param calendar pointer to a calendar object
- * @param today pointer to an `lv_calendar_date_t` variable containing the date of today. The value
- * will be saved it can be local variable too.
- */
-void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
- LV_ASSERT_NULL(today);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->today.year = today->year;
- ext->today.month = today->month;
- ext->today.day = today->day;
-
- lv_obj_invalidate(calendar);
-}
-
-/**
- * Set the currently showed
- * @param calendar pointer to a calendar object
- * @param showed pointer to an `lv_calendar_date_t` variable containing the date to show. The value
- * will be saved it can be local variable too.
- */
-void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
- LV_ASSERT_NULL(showed);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->showed_date.year = showed->year;
- ext->showed_date.month = showed->month;
- ext->showed_date.day = showed->day;
-
- lv_obj_invalidate(calendar);
-}
-
-/**
- * Set the the highlighted dates
- * @param calendar pointer to a calendar object
- * @param highlighted pointer to an `lv_calendar_date_t` array containing the dates. ONLY A POINTER
- * WILL BE SAVED! CAN'T BE LOCAL ARRAY.
- * @param date_num number of dates in the array
- */
-void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t highlighted[], uint16_t date_num)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
- LV_ASSERT_NULL(highlighted);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->highlighted_dates = highlighted;
- ext->highlighted_dates_num = date_num;
-
- lv_obj_invalidate(calendar);
-}
-
-/**
- * Set the name of the days
- * @param calendar pointer to a calendar object
- * @param day_names pointer to an array with the names. E.g. `const char * days[7] = {"Sun", "Mon",
- * ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
- * later.
- */
-void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
- LV_ASSERT_NULL(day_names);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->day_names = day_names;
- lv_obj_invalidate(calendar);
-}
-
-/**
- * Set the name of the month
- * @param calendar pointer to a calendar object
- * @param month_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
- * ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
- * later.
- */
-void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
- LV_ASSERT_NULL(month_names);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->month_names = month_names;
- lv_obj_invalidate(calendar);
-}
-
-/**
- * Set a style of a calendar.
- * @param calendar pointer to calendar object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- switch(type) {
- case LV_CALENDAR_STYLE_BG: lv_obj_set_style(calendar, style); break;
- case LV_CALENDAR_STYLE_DAY_NAMES: ext->style_day_names = style; break;
- case LV_CALENDAR_STYLE_HEADER: ext->style_header = style; break;
- case LV_CALENDAR_STYLE_HEADER_PR: ext->style_header_pr = style; break;
- case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: ext->style_highlighted_days = style; break;
- case LV_CALENDAR_STYLE_INACTIVE_DAYS: ext->style_inactive_days = style; break;
- case LV_CALENDAR_STYLE_TODAY_BOX: ext->style_today_box = style; break;
- case LV_CALENDAR_STYLE_WEEK_BOX: ext->style_week_box = style; break;
- }
-
- lv_obj_invalidate(calendar);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the today's date
- * @param calendar pointer to a calendar object
- * @return return pointer to an `lv_calendar_date_t` variable containing the date of today.
- */
-lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return &ext->today;
-}
-
-/**
- * Get the currently showed
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` variable containing the date is being shown.
- */
-lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return &ext->showed_date;
-}
-
-/**
- * Get the the pressed date.
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` variable containing the pressed date.
- * `NULL` if not date pressed (e.g. the header)
- */
-lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return ext->pressed_date.year != 0 ? &ext->pressed_date : NULL;
-}
-
-/**
- * Get the the highlighted dates
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` array containing the dates.
- */
-lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return ext->highlighted_dates;
-}
-
-/**
- * Get the number of the highlighted dates
- * @param calendar pointer to a calendar object
- * @return number of highlighted days
- */
-uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return ext->highlighted_dates_num;
-}
-
-/**
- * Get the name of the days
- * @param calendar pointer to a calendar object
- * @return pointer to the array of day names
- */
-const char ** lv_calendar_get_day_names(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return ext->day_names;
-}
-
-/**
- * Get the name of the month
- * @param calendar pointer to a calendar object
- * @return pointer to the array of month names
- */
-const char ** lv_calendar_get_month_names(const lv_obj_t * calendar)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- return ext->month_names;
-}
-
-/**
- * Get style of a calendar.
- * @param calendar pointer to calendar object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_style_t type)
-{
- LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- switch(type) {
- case LV_CALENDAR_STYLE_BG: style = lv_obj_get_style(calendar); break;
- case LV_CALENDAR_STYLE_HEADER: style = ext->style_header; break;
- case LV_CALENDAR_STYLE_HEADER_PR: style = ext->style_header_pr; break;
- case LV_CALENDAR_STYLE_DAY_NAMES: style = ext->style_day_names; break;
- case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: style = ext->style_highlighted_days; break;
- case LV_CALENDAR_STYLE_INACTIVE_DAYS: style = ext->style_inactive_days; break;
- case LV_CALENDAR_STYLE_WEEK_BOX: style = ext->style_week_box; break;
- case LV_CALENDAR_STYLE_TODAY_BOX: style = ext->style_today_box; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/*
- * New object specific "other" functions come here
- */
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the calendars
- * @param calendar pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(calendar, mask, mode);
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
- lv_draw_rect(&calendar->coords, mask, lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG), opa_scale);
-
- draw_header(calendar, mask);
- draw_day_names(calendar, mask);
- draw_days(calendar, mask);
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the calendar
- * @param calendar pointer to a calendar object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(calendar, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_PRESSING) {
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- lv_area_t header_area;
- lv_area_copy(&header_area, &calendar->coords);
- header_area.y2 = header_area.y1 + get_header_height(calendar);
-
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t p;
- lv_indev_get_point(indev, &p);
-
- /*If the header is pressed mark an arrow as pressed*/
- if(lv_area_is_point_on(&header_area, &p)) {
- if(p.x < header_area.x1 + lv_area_get_width(&header_area) / 2) {
- if(ext->btn_pressing != -1) lv_obj_invalidate(calendar);
- ext->btn_pressing = -1;
- } else {
- if(ext->btn_pressing != 1) lv_obj_invalidate(calendar);
- ext->btn_pressing = 1;
- }
-
- ext->pressed_date.year = 0;
- ext->pressed_date.month = 0;
- ext->pressed_date.day = 0;
- }
- /*If a day is pressed save it*/
- else if(calculate_touched_day(calendar, &p)) {
- if(ext->btn_pressing != 0) lv_obj_invalidate(calendar);
- ext->btn_pressing = 0;
- }
- /*ELse set a deafault state*/
- else {
- if(ext->btn_pressing != 0) lv_obj_invalidate(calendar);
- ext->btn_pressing = 0;
- ext->pressed_date.year = 0;
- ext->pressed_date.month = 0;
- ext->pressed_date.day = 0;
- }
- } else if(sign == LV_SIGNAL_PRESS_LOST) {
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->btn_pressing = 0;
- lv_obj_invalidate(calendar);
-
- } else if(sign == LV_SIGNAL_RELEASED) {
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- if(ext->btn_pressing < 0) {
- if(ext->showed_date.month <= 1) {
- ext->showed_date.month = 12;
- ext->showed_date.year--;
- } else {
- ext->showed_date.month--;
- }
- } else if(ext->btn_pressing > 0) {
- if(ext->showed_date.month >= 12) {
- ext->showed_date.month = 1;
- ext->showed_date.year++;
- } else {
- ext->showed_date.month++;
- }
- } else if(ext->pressed_date.year != 0) {
- res = lv_event_send(calendar, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
-
- ext->btn_pressing = 0;
- lv_obj_invalidate(calendar);
- } else if(sign == LV_SIGNAL_CONTROL) {
- uint8_t c = *((uint8_t *)param);
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- if(ext->showed_date.month >= 12) {
- ext->showed_date.month = 1;
- ext->showed_date.year++;
- } else {
- ext->showed_date.month++;
- }
- lv_obj_invalidate(calendar);
- } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- if(ext->showed_date.month <= 1) {
- ext->showed_date.month = 12;
- ext->showed_date.year--;
- } else {
- ext->showed_date.month--;
- }
- lv_obj_invalidate(calendar);
- }
- }
-
- return res;
-}
-
-/**
- * It will check if the days part of calendar is touched
- * and if it is, it will calculate the day and put it in pressed_date of calendar object.
- * @param calendar pointer to a calendar object
- * @param pointer to a point
- * @return true: days part of calendar is touched and its related date is put in pressed date
- * false: the point is out of days part area.
- */
-static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t * touched_point)
-{
- lv_area_t days_area;
- lv_area_copy(&days_area, &calendar->coords);
- const lv_style_t * style_bg = lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG);
- days_area.x1 += style_bg->body.padding.left;
- days_area.x2 -= style_bg->body.padding.right;
- days_area.y1 =
- calendar->coords.y1 + get_header_height(calendar) + get_day_names_height(calendar) - style_bg->body.padding.top;
-
- if(lv_area_is_point_on(&days_area, touched_point)) {
- lv_coord_t w = (days_area.x2 - days_area.x1 + 1) / 7;
- lv_coord_t h = (days_area.y2 - days_area.y1 + 1) / 6;
- uint8_t x_pos = 0;
- x_pos = (touched_point->x - days_area.x1) / w;
- if(x_pos > 6) x_pos = 6;
- uint8_t y_pos = 0;
- y_pos = (touched_point->y - days_area.y1) / h;
- if(y_pos > 5) y_pos = 5;
-
- uint8_t i_pos = 0;
- i_pos = (y_pos * 7) + x_pos;
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- if(i_pos < get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1)) {
- ext->pressed_date.year = ext->showed_date.year - (ext->showed_date.month == 1 ? 1 : 0);
- ext->pressed_date.month = ext->showed_date.month == 1 ? 12 : (ext->showed_date.month - 1);
- ext->pressed_date.day = get_month_length(ext->pressed_date.year, ext->pressed_date.month) -
- get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1) + 1 + i_pos;
- } else if(i_pos < (get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1) +
- get_month_length(ext->showed_date.year, ext->showed_date.month))) {
- ext->pressed_date.year = ext->showed_date.year;
- ext->pressed_date.month = ext->showed_date.month;
- ext->pressed_date.day = i_pos + 1 - get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1);
- } else if(i_pos < 42) {
- ext->pressed_date.year = ext->showed_date.year + (ext->showed_date.month == 12 ? 1 : 0);
- ext->pressed_date.month = ext->showed_date.month == 12 ? 1 : (ext->showed_date.month + 1);
- ext->pressed_date.day = i_pos + 1 - get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1) -
- get_month_length(ext->showed_date.year, ext->showed_date.month);
- }
- return true;
- } else {
- return false;
- }
-}
-
-/**
- * Get the height of a calendar's header based on it's style
- * @param calendar point to a calendar
- * @return the header's height
- */
-static lv_coord_t get_header_height(lv_obj_t * calendar)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- return lv_font_get_line_height(ext->style_header->text.font) + ext->style_header->body.padding.top +
- ext->style_header->body.padding.bottom;
-}
-
-/**
- * Get the height of a calendar's day_names based on it's style
- * @param calendar point to a calendar
- * @return the day_names's height
- */
-static lv_coord_t get_day_names_height(lv_obj_t * calendar)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- return lv_font_get_line_height(ext->style_day_names->text.font) + ext->style_day_names->body.padding.top +
- ext->style_day_names->body.padding.bottom;
-}
-
-/**
- * Draw the calendar header with month name and arrows
- * @param calendar point to a calendar
- * @param mask a mask for drawing
- */
-static void draw_header(lv_obj_t * calendar, const lv_area_t * mask)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
-
- lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
-
- lv_area_t header_area;
- header_area.x1 = calendar->coords.x1;
- header_area.x2 = calendar->coords.x2;
- header_area.y1 = calendar->coords.y1;
- header_area.y2 = calendar->coords.y1 + get_header_height(calendar);
-
- lv_draw_rect(&header_area, mask, ext->style_header, opa_scale);
-
- /*Add the year + month name*/
- char txt_buf[64];
- lv_utils_num_to_str(ext->showed_date.year, txt_buf);
- txt_buf[4] = ' ';
- txt_buf[5] = '\0';
- strcpy(&txt_buf[5], get_month_name(calendar, ext->showed_date.month));
- header_area.y1 += ext->style_header->body.padding.top;
- lv_draw_label(&header_area, mask, ext->style_header, opa_scale, txt_buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, bidi_dir);
-
- /*Add the left arrow*/
- const lv_style_t * arrow_style = ext->btn_pressing < 0 ? ext->style_header_pr : ext->style_header;
- header_area.x1 += ext->style_header->body.padding.left;
- lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_LEFT, LV_TXT_FLAG_NONE, NULL, NULL, NULL, bidi_dir);
-
- /*Add the right arrow*/
- arrow_style = ext->btn_pressing > 0 ? ext->style_header_pr : ext->style_header;
- header_area.x1 = header_area.x2 - ext->style_header->body.padding.right -
- lv_txt_get_width(LV_SYMBOL_RIGHT, (uint16_t)strlen(LV_SYMBOL_RIGHT), arrow_style->text.font,
- arrow_style->text.line_space, LV_TXT_FLAG_NONE);
- lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_RIGHT, LV_TXT_FLAG_NONE, NULL, NULL, NULL, bidi_dir);
-}
-
-/**
- * Draw the day's name below the header
- * @param calendar point to a calendar
- * @param mask a mask for drawing
- */
-static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
-
- lv_coord_t l_pad = ext->style_day_names->body.padding.left;
- lv_coord_t w =
- lv_obj_get_width(calendar) - ext->style_day_names->body.padding.left - ext->style_day_names->body.padding.right;
- lv_coord_t box_w = w / 7;
- lv_area_t label_area;
- label_area.y1 = calendar->coords.y1 + get_header_height(calendar) + ext->style_day_names->body.padding.top;
- label_area.y2 = label_area.y1 + lv_font_get_line_height(ext->style_day_names->text.font);
- uint32_t i;
- for(i = 0; i < 7; i++) {
- label_area.x1 = calendar->coords.x1 + (w * i) / 7 + l_pad;
- label_area.x2 = label_area.x1 + box_w - 1;
- lv_draw_label(&label_area, mask, ext->style_day_names, opa_scale, get_day_name(calendar, i), LV_TXT_FLAG_CENTER,
- NULL, NULL, NULL, bidi_dir);
- }
-}
-
-/**
- * Draw the date numbers in a matrix
- * @param calendar point to a calendar
- * @param mask a mask for drawing
- */
-static void draw_days(lv_obj_t * calendar, const lv_area_t * mask)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
- const lv_style_t * style_bg = lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG);
- lv_area_t label_area;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
- label_area.y1 = calendar->coords.y1 + get_header_height(calendar) + ext->style_day_names->body.padding.top +
- lv_font_get_line_height(ext->style_day_names->text.font) +
- ext->style_day_names->body.padding.bottom;
- label_area.y2 = label_area.y1 + lv_font_get_line_height(style_bg->text.font);
-
- lv_coord_t w = lv_obj_get_width(calendar) - style_bg->body.padding.left - style_bg->body.padding.right;
- lv_coord_t h = calendar->coords.y2 - label_area.y1 - style_bg->body.padding.bottom;
- lv_coord_t box_w = w / 7;
- lv_coord_t vert_space = (h - (6 * lv_font_get_line_height(style_bg->text.font))) / 5;
-
- uint32_t week;
- uint8_t day_cnt;
- uint8_t month_start_day = get_day_of_week(ext->showed_date.year, ext->showed_date.month, 1);
- day_draw_state_t draw_state; /*true: Not the prev. or next month is drawn*/
- const lv_style_t * act_style;
-
- /*If starting with the first day of the week then the previous month is not visible*/
- if(month_start_day == 0) {
- day_cnt = 1;
- draw_state = DAY_DRAW_ACT_MONTH;
- act_style = style_bg;
- } else {
- draw_state = DAY_DRAW_PREV_MONTH;
- day_cnt = get_month_length(ext->showed_date.year, ext->showed_date.month - 1); /*Length of the previous month*/
- day_cnt -= month_start_day - 1; /*First visible number of the previous month*/
- act_style = ext->style_inactive_days;
- }
-
- bool month_of_today_shown = false;
- if(ext->showed_date.year == ext->today.year && ext->showed_date.month == ext->today.month) {
- month_of_today_shown = true;
- }
-
- char buf[3];
- bool in_week_box = false;
-
- /*Draw 6 weeks*/
- for(week = 0; week < 6; week++) {
-
- /*Draw the "week box"*/
- if(month_of_today_shown &&
- ((draw_state == DAY_DRAW_ACT_MONTH && ext->today.day >= day_cnt && ext->today.day < day_cnt + 7) ||
- (draw_state == DAY_DRAW_PREV_MONTH && ext->today.day <= 7 - month_start_day && week == 0))) {
- lv_area_t week_box_area;
- lv_area_copy(&week_box_area, &label_area); /*'label_area' is already set for this row*/
- week_box_area.x1 =
- calendar->coords.x1 + style_bg->body.padding.left - ext->style_week_box->body.padding.left;
- week_box_area.x2 =
- calendar->coords.x2 - style_bg->body.padding.right + ext->style_week_box->body.padding.right;
-
- week_box_area.y1 -= ext->style_week_box->body.padding.top;
- week_box_area.y2 += ext->style_week_box->body.padding.bottom;
- lv_draw_rect(&week_box_area, mask, ext->style_week_box, opa_scale);
-
- in_week_box = true;
- } else {
- in_week_box = false;
- }
-
- /*Draw the 7 days of a week*/
- uint32_t day;
- for(day = 0; day < 7; day++) {
- /*The previous month is over*/
- if(draw_state == DAY_DRAW_PREV_MONTH && day == month_start_day) {
- draw_state = DAY_DRAW_ACT_MONTH;
- day_cnt = 1;
- act_style = style_bg;
- }
- /*The current month is over*/
- if(draw_state == DAY_DRAW_ACT_MONTH &&
- day_cnt > get_month_length(ext->showed_date.year, ext->showed_date.month)) {
- draw_state = DAY_DRAW_NEXT_MONTH;
- day_cnt = 1;
- act_style = ext->style_inactive_days;
- }
-
- label_area.x1 =
- calendar->coords.x1 + (w * day) / 7 + style_bg->body.padding.left;
- label_area.x2 = label_area.x1 + box_w - 1;
-
- /*Draw the "today box"*/
- if(draw_state == DAY_DRAW_ACT_MONTH && month_of_today_shown && ext->today.day == day_cnt) {
- lv_area_t today_box_area;
- lv_area_copy(&today_box_area, &label_area);
- today_box_area.x1 = label_area.x1;
- today_box_area.x2 = label_area.x2;
-
- today_box_area.y1 = label_area.y1 - ext->style_today_box->body.padding.top;
- today_box_area.y2 = label_area.y2 + ext->style_today_box->body.padding.bottom;
- lv_draw_rect(&today_box_area, mask, ext->style_today_box, opa_scale);
- }
-
- /*Get the final style : highlighted/week box/today box/normal*/
- const lv_style_t * final_style;
- if(draw_state == DAY_DRAW_PREV_MONTH &&
- is_highlighted(calendar, ext->showed_date.year - (ext->showed_date.month == 1 ? 1 : 0),
- ext->showed_date.month == 1 ? 12 : ext->showed_date.month - 1, day_cnt)) {
- final_style = ext->style_highlighted_days;
- } else if(draw_state == DAY_DRAW_ACT_MONTH &&
- is_highlighted(calendar, ext->showed_date.year, ext->showed_date.month, day_cnt)) {
- final_style = ext->style_highlighted_days;
- } else if(draw_state == DAY_DRAW_NEXT_MONTH &&
- is_highlighted(calendar, ext->showed_date.year + (ext->showed_date.month == 12 ? 1 : 0),
- ext->showed_date.month == 12 ? 1 : ext->showed_date.month + 1, day_cnt)) {
- final_style = ext->style_highlighted_days;
- } else if(month_of_today_shown && day_cnt == ext->today.day && draw_state == DAY_DRAW_ACT_MONTH)
- final_style = ext->style_today_box;
- else if(in_week_box && draw_state == DAY_DRAW_ACT_MONTH)
- final_style = ext->style_week_box;
- else
- final_style = act_style;
-
- /*Write the day's number*/
- lv_utils_num_to_str(day_cnt, buf);
- lv_draw_label(&label_area, mask, final_style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, bidi_dir);
-
- /*Go to the next day*/
- day_cnt++;
- }
-
- /*Got to the next weeks row*/
- label_area.y1 += vert_space + lv_font_get_line_height(style_bg->text.font);
- label_area.y2 += vert_space + lv_font_get_line_height(style_bg->text.font);
- }
-}
-
-/**
- * Check weather a date is highlighted or not
- * @param calendar pointer to a calendar object
- * @param year a year
- * @param month a month [1..12]
- * @param day a day [1..31]
- * @return true: highlighted
- */
-static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, int32_t day)
-{
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
-
- if(ext->highlighted_dates == NULL || ext->highlighted_dates_num == 0) return false;
-
- uint32_t i;
- for(i = 0; i < ext->highlighted_dates_num; i++) {
- if(ext->highlighted_dates[i].year == year && ext->highlighted_dates[i].month == month &&
- ext->highlighted_dates[i].day == day) {
- return true;
- }
- }
-
- return false;
-}
-
-/**
- * Get the day name
- * @param calendar pointer to a calendar object
- * @param day a day in [0..6]
- * @return
- */
-static const char * get_day_name(lv_obj_t * calendar, uint8_t day)
-{
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- if(ext->day_names)
- return ext->day_names[day];
- else
- return day_name[day];
-}
-
-/**
- * Get the month name
- * @param calendar pointer to a calendar object
- * @param month a month. The range is basically [1..12] but [-11..1] is also supported to handle
- * previous year
- * @return
- */
-static const char * get_month_name(lv_obj_t * calendar, int32_t month)
-{
- month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
- if(month < 0) month = 12 + month;
-
- lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- if(ext->month_names)
- return ext->month_names[month];
- else
- return month_name[month];
-}
-
-/**
- * Get the number of days in a month
- * @param year a year
- * @param month a month. The range is basically [1..12] but [-11..1] is also supported to handle
- * previous year
- * @return [28..31]
- */
-static uint8_t get_month_length(int32_t year, int32_t month)
-{
- month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
- if(month < 0) {
- year--; /*Already in the previous year (won't be less then -12 to skip a whole year)*/
- month = 12 + month; /*`month` is negative, the result will be < 12*/
- }
- if(month >= 12) {
- year++;
- month -= 12;
- }
-
- /*month == 1 is february*/
- return (month == 1) ? (28 + is_leap_year(year)) : 31 - month % 7 % 2;
-}
-
-/**
- * Tells whether a year is leap year or not
- * @param year a year
- * @return 0: not leap year; 1: leap year
- */
-static uint8_t is_leap_year(uint32_t year)
-{
- return (year % 4) || ((year % 100 == 0) && (year % 400)) ? 0 : 1;
-}
-
-/**
- * Get the day of the week
- * @param year a year
- * @param month a month
- * @param day a day
- * @return [0..6] which means [Sun..Sat]
- */
-static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day)
-{
- uint32_t a = month < 3 ? 1 : 0;
- uint32_t b = year - a;
-
- uint32_t day_of_week = (day + (31 * (month - 2 + 12 * a) / 12) + b + (b / 4) - (b / 100) + (b / 400)) % 7;
-
- return day_of_week;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_calendar.h b/src/libs/lvgl/src/lv_objx/lv_calendar.h
deleted file mode 100644
index 21317bbd..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_calendar.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * @file lv_calendar.h
- *
- */
-
-#ifndef LV_CALENDAR_H
-#define LV_CALENDAR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CALENDAR != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Represents a date on the calendar object (platform-agnostic).
- */
-typedef struct
-{
- uint16_t year;
- int8_t month;
- int8_t day;
-} lv_calendar_date_t;
-
-/*Data of calendar*/
-typedef struct
-{
- /*None*/ /*Ext. of ancestor*/
- /*New data for this type */
- lv_calendar_date_t today; /*Date of today*/
- lv_calendar_date_t showed_date; /*Currently visible month (day is ignored)*/
- lv_calendar_date_t * highlighted_dates; /*Apply different style on these days (pointer to an
- array defined by the user)*/
- int8_t btn_pressing; /*-1: prev month pressing, +1 next month pressing on the header*/
- uint16_t highlighted_dates_num; /*Number of elements in `highlighted_days`*/
- lv_calendar_date_t pressed_date;
- const char ** day_names; /*Pointer to an array with the name of the days (NULL: use default names)*/
- const char ** month_names; /*Pointer to an array with the name of the month (NULL. use default names)*/
-
- /*Styles*/
- const lv_style_t * style_header;
- const lv_style_t * style_header_pr;
- const lv_style_t * style_day_names;
- const lv_style_t * style_highlighted_days;
- const lv_style_t * style_inactive_days;
- const lv_style_t * style_week_box;
- const lv_style_t * style_today_box;
-} lv_calendar_ext_t;
-
-/** Calendar styles*/
-enum {
- LV_CALENDAR_STYLE_BG, /**< Background and "normal" date numbers style */
- LV_CALENDAR_STYLE_HEADER, /** Calendar header style */
- LV_CALENDAR_STYLE_HEADER_PR, /** Calendar header style (when pressed) */
- LV_CALENDAR_STYLE_DAY_NAMES, /** Day name style */
- LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, /** Highlighted day style */
- LV_CALENDAR_STYLE_INACTIVE_DAYS, /** Inactive day style */
- LV_CALENDAR_STYLE_WEEK_BOX, /** Week highlight style */
- LV_CALENDAR_STYLE_TODAY_BOX, /** Today highlight style */
-};
-typedef uint8_t lv_calendar_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a calendar objects
- * @param par pointer to an object, it will be the parent of the new calendar
- * @param copy pointer to a calendar object, if not NULL then the new object will be copied from it
- * @return pointer to the created calendar
- */
-lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the today's date
- * @param calendar pointer to a calendar object
- * @param today pointer to an `lv_calendar_date_t` variable containing the date of today. The value
- * will be saved it can be local variable too.
- */
-void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today);
-
-/**
- * Set the currently showed
- * @param calendar pointer to a calendar object
- * @param showed pointer to an `lv_calendar_date_t` variable containing the date to show. The value
- * will be saved it can be local variable too.
- */
-void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed);
-
-/**
- * Set the the highlighted dates
- * @param calendar pointer to a calendar object
- * @param highlighted pointer to an `lv_calendar_date_t` array containing the dates. ONLY A POINTER
- * WILL BE SAVED! CAN'T BE LOCAL ARRAY.
- * @param date_num number of dates in the array
- */
-void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t highlighted[], uint16_t date_num);
-
-/**
- * Set the name of the days
- * @param calendar pointer to a calendar object
- * @param day_names pointer to an array with the names. E.g. `const char * days[7] = {"Sun", "Mon",
- * ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
- * later.
- */
-void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names);
-
-/**
- * Set the name of the month
- * @param calendar pointer to a calendar object
- * @param month_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
- * ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
- * later.
- */
-void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names);
-
-/**
- * Set a style of a calendar.
- * @param calendar pointer to calendar object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the today's date
- * @param calendar pointer to a calendar object
- * @return return pointer to an `lv_calendar_date_t` variable containing the date of today.
- */
-lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar);
-
-/**
- * Get the currently showed
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` variable containing the date is being shown.
- */
-lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar);
-
-/**
- * Get the the pressed date.
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` variable containing the pressed date.
- * `NULL` if not date pressed (e.g. the header)
- */
-lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calendar);
-
-/**
- * Get the the highlighted dates
- * @param calendar pointer to a calendar object
- * @return pointer to an `lv_calendar_date_t` array containing the dates.
- */
-lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * calendar);
-
-/**
- * Get the number of the highlighted dates
- * @param calendar pointer to a calendar object
- * @return number of highlighted days
- */
-uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar);
-
-/**
- * Get the name of the days
- * @param calendar pointer to a calendar object
- * @return pointer to the array of day names
- */
-const char ** lv_calendar_get_day_names(const lv_obj_t * calendar);
-
-/**
- * Get the name of the month
- * @param calendar pointer to a calendar object
- * @return pointer to the array of month names
- */
-const char ** lv_calendar_get_month_names(const lv_obj_t * calendar);
-
-/**
- * Get style of a calendar.
- * @param calendar pointer to calendar object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_CALENDAR*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CALENDAR_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_canvas.c b/src/libs/lvgl/src/lv_objx/lv_canvas.c
deleted file mode 100644
index 8d2275aa..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_canvas.c
+++ /dev/null
@@ -1,870 +0,0 @@
-/**
- * @file lv_canvas.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include <stdlib.h>
-#include "lv_canvas.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_core/lv_refr.h"
-
-#if LV_USE_CANVAS != 0
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_canvas"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a canvas object
- * @param par pointer to an object, it will be the parent of the new canvas
- * @param copy pointer to a canvas object, if not NULL then the new object will be copied from it
- * @return pointer to the created canvas
- */
-lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("canvas create started");
-
- /*Create the ancestor of canvas*/
- lv_obj_t * new_canvas = lv_img_create(par, copy);
- LV_ASSERT_MEM(new_canvas);
- if(new_canvas == NULL) return NULL;
-
- /*Allocate the canvas type specific extended data*/
- lv_canvas_ext_t * ext = lv_obj_allocate_ext_attr(new_canvas, sizeof(lv_canvas_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_canvas);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_canvas);
-
- /*Initialize the allocated 'ext' */
- ext->dsc.header.always_zero = 0;
- ext->dsc.header.cf = LV_IMG_CF_TRUE_COLOR;
- ext->dsc.header.h = 0;
- ext->dsc.header.w = 0;
- ext->dsc.data_size = 0;
- ext->dsc.data = NULL;
-
- lv_img_set_src(new_canvas, &ext->dsc);
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_canvas, lv_canvas_signal);
-
- /*Init the new canvas canvas*/
- if(copy == NULL) {
-
- }
- /*Copy an existing canvas*/
- else {
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_canvas);
- }
-
- LV_LOG_INFO("canvas created");
-
- return new_canvas;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a buffer for the canvas.
- * @param buf a buffer where the content of the canvas will be.
- * The required size is (lv_img_color_format_get_px_size(cf) * w * h) / 8)
- * It can be allocated with `lv_mem_alloc()` or
- * it can be statically allocated array (e.g. static lv_color_t buf[100*50]) or
- * it can be an address in RAM or external SRAM
- * @param canvas pointer to a canvas object
- * @param w width of the canvas
- * @param h height of the canvas
- * @param cf color format. The following formats are supported:
- * LV_IMG_CF_TRUE_COLOR, LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, LV_IMG_CF_INDEXES_1/2/4/8BIT
- *
- */
-void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(buf);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
-
- ext->dsc.header.cf = cf;
- ext->dsc.header.w = w;
- ext->dsc.header.h = h;
- ext->dsc.data = buf;
- ext->dsc.data_size = (lv_img_color_format_get_px_size(cf) * w * h) / 8;
-
- lv_img_set_src(canvas, &ext->dsc);
-}
-
-/**
- * Set the color of a pixel on the canvas
- * @param canvas pointer to canvas object
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t c)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
-
- lv_img_buf_set_px_color(&ext->dsc, x, y, c);
- lv_obj_invalidate(canvas);
-}
-
-/**
- * Set the palette color of a canvas with index format. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param canvas pointer to canvas object
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
-
- lv_img_buf_set_palette(&ext->dsc, id, c);
- lv_obj_invalidate(canvas);
-}
-
-/**
- * Set a style of a canvas.
- * @param canvas pointer to canvas object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- switch(type) {
- case LV_CANVAS_STYLE_MAIN: lv_img_set_style(canvas, LV_IMG_STYLE_MAIN, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the color of a pixel on the canvas
- * @param canvas
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return color of the point
- */
-lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
- const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
-
- return lv_img_buf_get_px_color(&ext->dsc, x, y, style);
-}
-
-/**
- * Get the image of the canvas as a pointer to an `lv_img_dsc_t` variable.
- * @param canvas pointer to a canvas object
- * @return pointer to the image descriptor.
- */
-lv_img_dsc_t * lv_canvas_get_img(lv_obj_t * canvas)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
-
- return &ext->dsc;
-}
-
-/**
- * Get style of a canvas.
- * @param canvas pointer to canvas object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_style_t type)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
-
- switch(type) {
- case LV_CANVAS_STYLE_MAIN: style = lv_img_get_style(canvas, LV_IMG_STYLE_MAIN); break;
- default: style = NULL;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Copy a buffer to the canvas
- * @param canvas pointer to a canvas object
- * @param to_copy buffer to copy. The color format has to match with the canvas's buffer color
- * format
- * @param w width of the buffer to copy
- * @param h height of the buffer to copy
- * @param x left side of the destination position
- * @param y top side of the destination position
- */
-void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(to_copy);
-
- lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
- if(x + w >= (lv_coord_t)ext->dsc.header.w || y + h >= (lv_coord_t)ext->dsc.header.h) {
- LV_LOG_WARN("lv_canvas_copy_buf: x or y out of the canvas");
- return;
- }
-
- uint32_t px_size = lv_img_color_format_get_px_size(ext->dsc.header.cf) >> 3;
- uint32_t px = ext->dsc.header.w * y * px_size + x * px_size;
- uint8_t * to_copy8 = (uint8_t *)to_copy;
- lv_coord_t i;
- for(i = 0; i < h; i++) {
- memcpy((void *)&ext->dsc.data[px], to_copy8, w * px_size);
- px += ext->dsc.header.w * px_size;
- to_copy8 += w * px_size;
- }
-}
-
-/**
- * Rotate and image and store the result on a canvas.
- * @param canvas pointer to a canvas object
- * @param img pointer to an image descriptor.
- * Can be the image descriptor of an other canvas too (`lv_canvas_get_img()`).
- * @param angle the angle of rotation (0..360);
- * @param offset_x offset X to tell where to put the result data on destination canvas
- * @param offset_y offset X to tell where to put the result data on destination canvas
- * @param pivot_x pivot X of rotation. Relative to the source canvas
- * Set to `source width / 2` to rotate around the center
- * @param pivot_y pivot Y of rotation. Relative to the source canvas
- * Set to `source height / 2` to rotate around the center
- */
-void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_coord_t offset_x, lv_coord_t offset_y,
- int32_t pivot_x, int32_t pivot_y)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(img);
-
- lv_canvas_ext_t * ext_dst = lv_obj_get_ext_attr(canvas);
- const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
- int32_t sinma = lv_trigo_sin(-angle);
- int32_t cosma = lv_trigo_sin(-angle + 90); /* cos */
-
- int32_t img_width = img->header.w;
- int32_t img_height = img->header.h;
- int32_t dest_width = ext_dst->dsc.header.w;
- int32_t dest_height = ext_dst->dsc.header.h;
-
- int32_t x;
- int32_t y;
- for(x = -offset_x; x < dest_width - offset_x; x++) {
- for(y = -offset_y; y < dest_height - offset_y; y++) {
- /*Get the target point relative coordinates to the pivot*/
- int32_t xt = x - pivot_x;
- int32_t yt = y - pivot_y;
-
- /*Get the source pixel from the upscaled image*/
- int32_t xs = ((cosma * xt - sinma * yt) >> (LV_TRIGO_SHIFT - 8)) + pivot_x * 256;
- int32_t ys = ((sinma * xt + cosma * yt) >> (LV_TRIGO_SHIFT - 8)) + pivot_y * 256;
-
- /*Get the integer part of the source pixel*/
- int xs_int = xs >> 8;
- int ys_int = ys >> 8;
-
- if(xs_int >= img_width)
- continue;
- else if(xs_int < 0)
- continue;
-
- if(ys_int >= img_height)
- continue;
- else if(ys_int < 0)
- continue;
-
- /*Get the fractional part of the source pixel*/
- int xs_fract = xs & 0xff;
- int ys_fract = ys & 0xff;
-
- /* If the fractional < 0x70 mix the source pixel with the left/top pixel
- * If the fractional > 0x90 mix the source pixel with the right/bottom pixel
- * In the 0x70..0x90 range use the unchanged source pixel */
-
- int xn; /*x neightboor*/
- lv_opa_t xr; /*x mix ratio*/
- if(xs_fract < 0x70) {
- xn = xs_int - 1;
- xr = xs_fract * 2;
- } else if(xs_fract > 0x90) {
- xn = xs_int + 1;
- xr = (0xFF - xs_fract) * 2;
- } else {
- xn = xs_int;
- xr = 0xFF;
- }
-
- /*Handle under/overflow*/
- if(xn >= img_width)
- continue;
- else if(xn < 0)
- continue;
-
- int yn; /*y neightboor*/
- lv_opa_t yr; /*y mix ratio*/
- if(ys_fract < 0x70) {
- yn = ys_int - 1;
- yr = ys_fract * 2;
- } else if(ys_fract > 0x90) {
- yn = ys_int + 1;
- yr = (0xFF - ys_fract) * 2;
- } else {
- yn = ys_int;
- yr = 0xFF;
- }
-
- /*Handle under/overflow*/
- if(yn >= img_height)
- continue;
- else if(yn < 0)
- continue;
-
- /*Get the mixture of the original source and the neightboor pixels in both directions*/
- lv_color_t c_dest_int = lv_img_buf_get_px_color(img, xs_int, ys_int, style);
-
- if(lv_img_color_format_is_chroma_keyed(img->header.cf)) {
- lv_color_t ct = LV_COLOR_TRANSP;
- if(c_dest_int.full == ct.full) continue;
- }
-
- lv_color_t c_dest_xn = lv_img_buf_get_px_color(img, xn, ys_int, style);
- lv_color_t c_dest_yn = lv_img_buf_get_px_color(img, xs_int, yn, style);
- lv_color_t x_dest = lv_color_mix(c_dest_int, c_dest_xn, xr);
- lv_color_t y_dest = lv_color_mix(c_dest_int, c_dest_yn, yr);
- lv_color_t color_res = lv_color_mix(x_dest, y_dest, LV_OPA_50);
-
- if(x + offset_x >= 0 && x + offset_x < dest_width && y + offset_y >= 0 && y + offset_y < dest_height) {
- /*If the image has no alpha channel just simple set the result color on the canvas*/
- if(lv_img_color_format_has_alpha(img->header.cf) == false) {
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
- } else {
- /*Get result pixel opacity*/
- lv_opa_t opa_int = lv_img_buf_get_px_alpha(img, xs_int, ys_int);
- lv_opa_t opa_xn = lv_img_buf_get_px_alpha(img, xn, ys_int);
- lv_opa_t opa_yn = lv_img_buf_get_px_alpha(img, xs_int, yn);
- lv_opa_t opa_x = (opa_int * xr + (opa_xn * (255 - xr))) >> 8;
- lv_opa_t opa_y = (opa_int * yr + (opa_yn * (255 - yr))) >> 8;
- lv_opa_t opa_res = (opa_x + opa_y) / 2;
- if(opa_res <= LV_OPA_MIN) continue;
-
- lv_color_t bg_color = lv_img_buf_get_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, style);
-
- /*If the canvas has no alpha but the image has mix the image's color with
- * canvas*/
- if(lv_img_color_format_has_alpha(ext_dst->dsc.header.cf) == false) {
- if(opa_res < LV_OPA_MAX) color_res = lv_color_mix(color_res, bg_color, opa_res);
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
- }
- /*Both the image and canvas has alpha channel. Some extra calculation is
- required*/
- else {
- lv_opa_t bg_opa = lv_img_buf_get_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y);
- /* Pick the foreground if it's fully opaque or the Background is fully
- * transparent*/
- if(opa_res >= LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
- lv_img_buf_set_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y, opa_res);
- }
- /*Opaque background: use simple mix*/
- else if(bg_opa >= LV_OPA_MAX) {
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y,
- lv_color_mix(color_res, bg_color, opa_res));
- }
- /*Both colors have alpha. Expensive calculation need to be applied*/
- else {
-
- /*Info:
- * https://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator*/
- lv_opa_t opa_res_2 = 255 - ((uint16_t)((uint16_t)(255 - opa_res) * (255 - bg_opa)) >> 8);
- if(opa_res_2 == 0) {
- opa_res_2 = 1; /*never happens, just to be sure*/
- }
- lv_opa_t ratio = (uint16_t)((uint16_t)opa_res * 255) / opa_res_2;
-
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y,
- lv_color_mix(color_res, bg_color, ratio));
- lv_img_buf_set_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y, opa_res_2);
- }
- }
- }
- }
- }
- }
-
- lv_obj_invalidate(canvas);
-}
-
-/**
- * Fill the canvas with color
- * @param canvas pointer to a canvas
- * @param color the background color
- */
-void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- uint32_t x = dsc->header.w * dsc->header.h;
- uint32_t y;
- for(y = 0; y < dsc->header.h; y++) {
- for(x = 0; x < dsc->header.w; x++) {
- lv_img_buf_set_px_color(dsc, x, y, color);
- }
- }
-}
-
-/**
- * Draw a rectangle on the canvas
- * @param canvas pointer to a canvas object
- * @param x left coordinate of the rectangle
- * @param y top coordinate of the rectangle
- * @param w width of the rectangle
- * @param h height of the rectangle
- * @param style style of the rectangle (`body` properties are used except `padding`)
- */
-void lv_canvas_draw_rect(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h,
- const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_area_t coords;
- coords.x1 = x;
- coords.y1 = y;
- coords.x2 = x + w - 1;
- coords.y2 = y + h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
-#if LV_ANTIALIAS
- /*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
- lv_color_t ctransp = LV_COLOR_TRANSP;
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED &&
- style->body.main_color.full == ctransp.full &&
- style->body.grad_color.full == ctransp.full)
- {
- disp.driver.antialiasing = 0;
- }
-#endif
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_draw_rect(&coords, &mask, style, LV_OPA_COVER);
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**
- * Draw a text on the canvas.
- * @param canvas pointer to a canvas object
- * @param x left coordinate of the text
- * @param y top coordinate of the text
- * @param max_w max width of the text. The text will be wrapped to fit into this size
- * @param style style of the text (`text` properties are used)
- * @param txt text to display
- * @param align align of the text (`LV_LABEL_ALIGN_LEFT/RIGHT/CENTER`)
- */
-void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t max_w, const lv_style_t * style,
- const char * txt, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_area_t coords;
- coords.x1 = x;
- coords.y1 = y;
- coords.x2 = x + max_w - 1;
- coords.y2 = dsc->header.h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_txt_flag_t flag;
- switch(align) {
- case LV_LABEL_ALIGN_LEFT: flag = LV_TXT_FLAG_NONE; break;
- case LV_LABEL_ALIGN_RIGHT: flag = LV_TXT_FLAG_RIGHT; break;
- case LV_LABEL_ALIGN_CENTER: flag = LV_TXT_FLAG_CENTER; break;
- default: flag = LV_TXT_FLAG_NONE; break;
- }
-
- lv_draw_label(&coords, &mask, style, LV_OPA_COVER, txt, flag, NULL, NULL, NULL, lv_obj_get_base_dir(canvas));
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**
- * Draw an image on the canvas
- * @param canvas pointer to a canvas object
- * @param src image source. Can be a pointer an `lv_img_dsc_t` variable or a path an image.
- * @param style style of the image (`image` properties are used)
- */
-void lv_canvas_draw_img(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, const void * src, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_img_header_t header;
- lv_res_t res = lv_img_decoder_get_info(src, &header);
- if(res != LV_RES_OK) {
- LV_LOG_WARN("lv_canvas_draw_img: Couldn't get the image data.");
- return;
- }
-
- lv_area_t coords;
- coords.x1 = x;
- coords.y1 = y;
- coords.x2 = x + header.w - 1;
- coords.y2 = y + header.h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_draw_img(&coords, &mask, src, style, LV_OPA_COVER);
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**
- * Draw a line on the canvas
- * @param canvas pointer to a canvas object
- * @param points point of the line
- * @param point_cnt number of points
- * @param style style of the line (`line` properties are used)
- */
-void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
-#if LV_ANTIALIAS
- /*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
- lv_color_t ctransp = LV_COLOR_TRANSP;
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED &&
- style->body.main_color.full == ctransp.full &&
- style->body.grad_color.full == ctransp.full)
- {
- disp.driver.antialiasing = 0;
- }
-#endif
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_style_t circle_style_tmp; /*If rounded...*/
- if(style->line.rounded) {
- lv_style_copy(&circle_style_tmp, style);
- circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
- circle_style_tmp.body.main_color = style->line.color;
- circle_style_tmp.body.grad_color = style->line.color;
- circle_style_tmp.body.opa = style->line.opa;
- }
- lv_area_t circle_area;
- uint32_t i;
- for(i = 0; i < point_cnt - 1; i++) {
- lv_draw_line(&points[i], &points[i + 1], &mask, style, LV_OPA_COVER);
-
- /*Draw circle on the joints if enabled*/
- if(style->line.rounded) {
- circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
- circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
- }
- }
- /*Draw circle on the last point too if enabled*/
- if(style->line.rounded) {
- circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
- circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
- }
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**
- * Draw a polygon on the canvas
- * @param canvas pointer to a canvas object
- * @param points point of the polygon
- * @param point_cnt number of points
- * @param style style of the polygon (`body.main_color` and `body.opa` is used)
- */
-void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
-#if LV_ANTIALIAS
- /*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
- lv_color_t ctransp = LV_COLOR_TRANSP;
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED &&
- style->body.main_color.full == ctransp.full &&
- style->body.grad_color.full == ctransp.full)
- {
- disp.driver.antialiasing = 0;
- }
-#endif
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_draw_polygon(points, point_cnt, &mask, style, LV_OPA_COVER);
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**
- * Draw an arc on the canvas
- * @param canvas pointer to a canvas object
- * @param x origo x of the arc
- * @param y origo y of the arc
- * @param r radius of the arc
- * @param start_angle start angle in degrees
- * @param end_angle end angle in degrees
- * @param style style of the polygon (`body.main_color` and `body.opa` is used)
- */
-void lv_canvas_draw_arc(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t r, int32_t start_angle,
- int32_t end_angle, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
- LV_ASSERT_NULL(style);
-
- lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
-
- /* Create a dummy display to fool the lv_draw function.
- * It will think it draws to real screen. */
- lv_area_t mask;
- mask.x1 = 0;
- mask.x2 = dsc->header.w - 1;
- mask.y1 = 0;
- mask.y2 = dsc->header.h - 1;
-
- lv_disp_t disp;
- memset(&disp, 0, sizeof(lv_disp_t));
-
- lv_disp_buf_t disp_buf;
- lv_disp_buf_init(&disp_buf, (void *)dsc->data, NULL, dsc->header.w * dsc->header.h);
- lv_area_copy(&disp_buf.area, &mask);
-
- lv_disp_drv_init(&disp.driver);
-
- disp.driver.buffer = &disp_buf;
- disp.driver.hor_res = dsc->header.w;
- disp.driver.ver_res = dsc->header.h;
-
-#if LV_ANTIALIAS
- /*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
- lv_color_t ctransp = LV_COLOR_TRANSP;
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED &&
- style->body.main_color.full == ctransp.full &&
- style->body.grad_color.full == ctransp.full)
- {
- disp.driver.antialiasing = 0;
- }
-#endif
-
- lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
- lv_refr_set_disp_refreshing(&disp);
-
- lv_draw_arc(x, y, r, &mask, start_angle, end_angle, style, LV_OPA_COVER);
-
- lv_refr_set_disp_refreshing(refr_ori);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the canvas
- * @param canvas pointer to a canvas object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(canvas, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_canvas.h b/src/libs/lvgl/src/lv_objx/lv_canvas.h
deleted file mode 100644
index 9f9cf03e..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_canvas.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/**
- * @file lv_canvas.h
- *
- */
-
-#ifndef LV_CANVAS_H
-#define LV_CANVAS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CANVAS != 0
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_objx/lv_img.h"
-#include "../lv_draw/lv_draw_img.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of canvas*/
-typedef struct
-{
- lv_img_ext_t img; /*Ext. of ancestor*/
- /*New data for this type */
- lv_img_dsc_t dsc;
-} lv_canvas_ext_t;
-
-/*Styles*/
-enum {
- LV_CANVAS_STYLE_MAIN,
-};
-typedef uint8_t lv_canvas_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a canvas object
- * @param par pointer to an object, it will be the parent of the new canvas
- * @param copy pointer to a canvas object, if not NULL then the new object will be copied from it
- * @return pointer to the created canvas
- */
-lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a buffer for the canvas.
- * @param buf a buffer where the content of the canvas will be.
- * The required size is (lv_img_color_format_get_px_size(cf) * w * h) / 8)
- * It can be allocated with `lv_mem_alloc()` or
- * it can be statically allocated array (e.g. static lv_color_t buf[100*50]) or
- * it can be an address in RAM or external SRAM
- * @param canvas pointer to a canvas object
- * @param w width of the canvas
- * @param h height of the canvas
- * @param cf color format. `LV_IMG_CF_...`
- */
-void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
-
-/**
- * Set the color of a pixel on the canvas
- * @param canvas
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t c);
-
-/**
- * Set the palette color of a canvas with index format. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param canvas pointer to canvas object
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c);
-
-/**
- * Set a style of a canvas.
- * @param canvas pointer to canvas object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the color of a pixel on the canvas
- * @param canvas
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return color of the point
- */
-lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y);
-
-/**
- * Get the image of the canvas as a pointer to an `lv_img_dsc_t` variable.
- * @param canvas pointer to a canvas object
- * @return pointer to the image descriptor.
- */
-lv_img_dsc_t * lv_canvas_get_img(lv_obj_t * canvas);
-
-/**
- * Get style of a canvas.
- * @param canvas pointer to canvas object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Copy a buffer to the canvas
- * @param canvas pointer to a canvas object
- * @param to_copy buffer to copy. The color format has to match with the canvas's buffer color
- * format
- * @param x left side of the destination position
- * @param y top side of the destination position
- * @param w width of the buffer to copy
- * @param h height of the buffer to copy
- */
-void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, lv_coord_t y, lv_coord_t w,
- lv_coord_t h);
-
-/**
- * Rotate and image and store the result on a canvas.
- * @param canvas pointer to a canvas object
- * @param img pointer to an image descriptor.
- * Can be the image descriptor of an other canvas too (`lv_canvas_get_img()`).
- * @param angle the angle of rotation (0..360);
- * @param offset_x offset X to tell where to put the result data on destination canvas
- * @param offset_y offset X to tell where to put the result data on destination canvas
- * @param pivot_x pivot X of rotation. Relative to the source canvas
- * Set to `source width / 2` to rotate around the center
- * @param pivot_y pivot Y of rotation. Relative to the source canvas
- * Set to `source height / 2` to rotate around the center
- */
-void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_coord_t offset_x, lv_coord_t offset_y,
- int32_t pivot_x, int32_t pivot_y);
-
-/**
- * Fill the canvas with color
- * @param canvas pointer to a canvas
- * @param color the background color
- */
-void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color);
-
-/**
- * Draw a rectangle on the canvas
- * @param canvas pointer to a canvas object
- * @param x left coordinate of the rectangle
- * @param y top coordinate of the rectangle
- * @param w width of the rectangle
- * @param h height of the rectangle
- * @param style style of the rectangle (`body` properties are used except `padding`)
- */
-void lv_canvas_draw_rect(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h,
- const lv_style_t * style);
-
-/**
- * Draw a text on the canvas.
- * @param canvas pointer to a canvas object
- * @param x left coordinate of the text
- * @param y top coordinate of the text
- * @param max_w max width of the text. The text will be wrapped to fit into this size
- * @param style style of the text (`text` properties are used)
- * @param txt text to display
- * @param align align of the text (`LV_LABEL_ALIGN_LEFT/RIGHT/CENTER`)
- */
-void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t max_w, const lv_style_t * style,
- const char * txt, lv_label_align_t align);
-
-/**
- * Draw an image on the canvas
- * @param canvas pointer to a canvas object
- * @param src image source. Can be a pointer an `lv_img_dsc_t` variable or a path an image.
- * @param style style of the image (`image` properties are used)
- */
-void lv_canvas_draw_img(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, const void * src, const lv_style_t * style);
-
-/**
- * Draw a line on the canvas
- * @param canvas pointer to a canvas object
- * @param points point of the line
- * @param point_cnt number of points
- * @param style style of the line (`line` properties are used)
- */
-void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style);
-
-/**
- * Draw a polygon on the canvas
- * @param canvas pointer to a canvas object
- * @param points point of the polygon
- * @param point_cnt number of points
- * @param style style of the polygon (`body.main_color` and `body.opa` is used)
- */
-void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style);
-
-/**
- * Draw an arc on the canvas
- * @param canvas pointer to a canvas object
- * @param x origo x of the arc
- * @param y origo y of the arc
- * @param r radius of the arc
- * @param start_angle start angle in degrees
- * @param end_angle end angle in degrees
- * @param style style of the polygon (`body.main_color` and `body.opa` is used)
- */
-void lv_canvas_draw_arc(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t r, int32_t start_angle,
- int32_t end_angle, const lv_style_t * style);
-
-/**********************
- * MACROS
- **********************/
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR(w, h)
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h)
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_ALPHA(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h)
-
-/*+ 1: to be sure no fractional row*/
-#define LV_CANVAS_BUF_SIZE_ALPHA_1BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_ALPHA_2BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_ALPHA_4BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_ALPHA_8BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h)
-
-/*4 * X: for palette*/
-#define LV_CANVAS_BUF_SIZE_INDEXED_1BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_INDEXED_2BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_INDEXED_4BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h)
-#define LV_CANVAS_BUF_SIZE_INDEXED_8BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h)
-
-#endif /*LV_USE_CANVAS*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CANVAS_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_cb.c b/src/libs/lvgl/src/lv_objx/lv_cb.c
deleted file mode 100644
index c54adf40..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cb.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/**
- * @file lv_cb.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_cb.h"
-#if LV_USE_CB != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_cb"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_bg_design;
-static lv_design_cb_t ancestor_bullet_design;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a check box objects
- * @param par pointer to an object, it will be the parent of the new check box
- * @param copy pointer to a check box object, if not NULL then the new object will be copied from it
- * @return pointer to the created check box
- */
-lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
-{
-
- LV_LOG_TRACE("check box create started");
-
- /*Create the ancestor basic object*/
- lv_obj_t * new_cb = lv_btn_create(par, copy);
- LV_ASSERT_MEM(new_cb);
- if(new_cb == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cb);
- if(ancestor_bg_design == NULL) ancestor_bg_design = lv_obj_get_design_cb(new_cb);
-
- lv_cb_ext_t * ext = lv_obj_allocate_ext_attr(new_cb, sizeof(lv_cb_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->bullet = NULL;
- ext->label = NULL;
-
- lv_obj_set_signal_cb(new_cb, lv_cb_signal);
- lv_obj_set_design_cb(new_cb, lv_cb_design);
-
- /*Init the new checkbox object*/
- if(copy == NULL) {
- ext->bullet = lv_btn_create(new_cb, NULL);
- if(ancestor_bullet_design == NULL) ancestor_bullet_design = lv_obj_get_design_cb(ext->bullet);
- lv_obj_set_click(ext->bullet, false);
-
- ext->label = lv_label_create(new_cb, NULL);
-
- lv_cb_set_text(new_cb, "Check box");
- lv_btn_set_layout(new_cb, LV_LAYOUT_ROW_M);
- lv_btn_set_fit(new_cb, LV_FIT_TIGHT);
- lv_btn_set_toggle(new_cb, true);
- lv_obj_set_protect(new_cb, LV_PROTECT_PRESS_LOST);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_cb_set_style(new_cb, LV_CB_STYLE_BG, th->style.cb.bg);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, th->style.cb.box.rel);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_PR, th->style.cb.box.pr);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_REL, th->style.cb.box.tgl_rel);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_PR, th->style.cb.box.tgl_pr);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_INA, th->style.cb.box.ina);
- } else {
- lv_cb_set_style(new_cb, LV_CB_STYLE_BG, &lv_style_transp);
- lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, &lv_style_pretty);
- }
- } else {
- lv_cb_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->bullet = lv_btn_create(new_cb, copy_ext->bullet);
- ext->label = lv_label_create(new_cb, copy_ext->label);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_cb);
- }
-
- lv_obj_set_design_cb(ext->bullet, lv_bullet_design);
-
- LV_LOG_INFO("check box created");
-
- return new_cb;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of a check box. `txt` will be copied and may be deallocated
- * after this function returns.
- * @param cb pointer to a check box
- * @param txt the text of the check box. NULL to refresh with the current text.
- */
-void lv_cb_set_text(lv_obj_t * cb, const char * txt)
-{
- LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
-
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
- lv_label_set_text(ext->label, txt);
-}
-
-/**
- * Set the text of a check box. `txt` must not be deallocated during the life
- * of this checkbox.
- * @param cb pointer to a check box
- * @param txt the text of the check box. NULL to refresh with the current text.
- */
-void lv_cb_set_static_text(lv_obj_t * cb, const char * txt)
-{
- LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
-
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
- lv_label_set_static_text(ext->label, txt);
-}
-
-/**
- * Set a style of a check box
- * @param cb pointer to check box object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
-
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
-
- switch(type) {
- case LV_CB_STYLE_BG:
- lv_btn_set_style(cb, LV_BTN_STYLE_REL, style);
- lv_btn_set_style(cb, LV_BTN_STYLE_PR, style);
- lv_btn_set_style(cb, LV_BTN_STYLE_TGL_REL, style);
- lv_btn_set_style(cb, LV_BTN_STYLE_TGL_PR, style);
- lv_btn_set_style(cb, LV_BTN_STYLE_INA, style);
- break;
- case LV_CB_STYLE_BOX_REL: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_REL, style); break;
- case LV_CB_STYLE_BOX_PR: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_PR, style); break;
- case LV_CB_STYLE_BOX_TGL_REL: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_TGL_REL, style); break;
- case LV_CB_STYLE_BOX_TGL_PR: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_TGL_PR, style); break;
- case LV_CB_STYLE_BOX_INA: lv_btn_set_style(ext->bullet, LV_BTN_STYLE_INA, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a check box
- * @param cb pointer to check box object
- * @return pointer to the text of the check box
- */
-const char * lv_cb_get_text(const lv_obj_t * cb)
-{
- LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
-
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
- return lv_label_get_text(ext->label);
-}
-
-/**
- * Get a style of a button
- * @param cb pointer to check box object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type)
-{
- LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
-
- switch(type) {
- case LV_CB_STYLE_BG: style = lv_btn_get_style(cb, LV_BTN_STYLE_REL); break;
- case LV_CB_STYLE_BOX_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_REL); break;
- case LV_CB_STYLE_BOX_PR: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_PR); break;
- case LV_CB_STYLE_BOX_TGL_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_TGL_REL); break;
- case LV_CB_STYLE_BOX_TGL_PR: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_TGL_PR); break;
- case LV_CB_STYLE_BOX_INA: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_INA); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the check boxes
- * @param cb pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t mode)
-{
- bool result = true;
-
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask_p area*/
- result = ancestor_bg_design(cb, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN || mode == LV_DESIGN_DRAW_POST) {
- lv_cb_ext_t * cb_ext = lv_obj_get_ext_attr(cb);
- lv_btn_ext_t * bullet_ext = lv_obj_get_ext_attr(cb_ext->bullet);
-
- /*Be sure the state of the bullet is the same as the parent button*/
- bullet_ext->state = cb_ext->bg_btn.state;
-
- result = ancestor_bg_design(cb, mask, mode);
-
- } else {
- result = ancestor_bg_design(cb, mask, mode);
- }
-
- return result;
-}
-
-/**
- * Handle the drawing related tasks of the check boxes
- * @param bullet pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_bullet_design(bullet, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
-#if LV_USE_GROUP
- /* If the check box is the active in a group and
- * the background is not visible (transparent)
- * then activate the style of the bullet*/
- const lv_style_t * style_ori = lv_obj_get_style(bullet);
- lv_obj_t * bg = lv_obj_get_parent(bullet);
- const lv_style_t * style_page = lv_obj_get_style(bg);
- lv_group_t * g = lv_obj_get_group(bg);
- if(style_page->body.opa == LV_OPA_TRANSP) { /*Is the Background visible?*/
- if(lv_group_get_focused(g) == bg) {
- lv_style_t * style_mod;
- style_mod = lv_group_mod_style(g, style_ori);
- bullet->style_p = style_mod; /*Temporally change the style to the activated */
- }
- }
-#endif
- ancestor_bullet_design(bullet, mask, mode);
-
-#if LV_USE_GROUP
- bullet->style_p = style_ori; /*Revert the style*/
-#endif
- } else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_bullet_design(bullet, mask, mode);
- }
-
- return true;
-}
-
-/**
- * Signal function of the check box
- * @param cb pointer to a check box object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(cb, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
-
- if(sign == LV_SIGNAL_STYLE_CHG) {
- const lv_style_t * label_style = lv_label_get_style(ext->label, LV_LABEL_STYLE_MAIN);
- lv_obj_set_size(ext->bullet, lv_font_get_line_height(label_style->text.font),
- lv_font_get_line_height(label_style->text.font));
- lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
- } else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN || c == LV_KEY_LEFT || c == LV_KEY_UP) {
- /*Follow the backgrounds state with the bullet*/
- lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
- }
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_cb.h b/src/libs/lvgl/src/lv_objx/lv_cb.h
deleted file mode 100644
index a6b1e74a..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cb.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * @file lv_cb.h
- *
- */
-
-#ifndef LV_CB_H
-#define LV_CB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CB != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BTN == 0
-#error "lv_cb: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_cb: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_btn.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of check box*/
-typedef struct
-{
- lv_btn_ext_t bg_btn; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * bullet; /*Pointer to button*/
- lv_obj_t * label; /*Pointer to label*/
-} lv_cb_ext_t;
-
-/** Checkbox styles. */
-enum {
- LV_CB_STYLE_BG, /**< Style of object background. */
- LV_CB_STYLE_BOX_REL, /**< Style of box (released). */
- LV_CB_STYLE_BOX_PR, /**< Style of box (pressed). */
- LV_CB_STYLE_BOX_TGL_REL, /**< Style of box (released but checked). */
- LV_CB_STYLE_BOX_TGL_PR, /**< Style of box (pressed and checked). */
- LV_CB_STYLE_BOX_INA, /**< Style of disabled box */
-};
-typedef uint8_t lv_cb_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a check box objects
- * @param par pointer to an object, it will be the parent of the new check box
- * @param copy pointer to a check box object, if not NULL then the new object will be copied from it
- * @return pointer to the created check box
- */
-lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of a check box. `txt` will be copied and may be deallocated
- * after this function returns.
- * @param cb pointer to a check box
- * @param txt the text of the check box. NULL to refresh with the current text.
- */
-void lv_cb_set_text(lv_obj_t * cb, const char * txt);
-
-/**
- * Set the text of a check box. `txt` must not be deallocated during the life
- * of this checkbox.
- * @param cb pointer to a check box
- * @param txt the text of the check box. NULL to refresh with the current text.
- */
-void lv_cb_set_static_text(lv_obj_t * cb, const char * txt);
-
-/**
- * Set the state of the check box
- * @param cb pointer to a check box object
- * @param checked true: make the check box checked; false: make it unchecked
- */
-static inline void lv_cb_set_checked(lv_obj_t * cb, bool checked)
-{
- lv_btn_set_state(cb, checked ? LV_BTN_STATE_TGL_REL : LV_BTN_STATE_REL);
-}
-
-/**
- * Make the check box inactive (disabled)
- * @param cb pointer to a check box object
- */
-static inline void lv_cb_set_inactive(lv_obj_t * cb)
-{
- lv_btn_set_state(cb, LV_BTN_STATE_INA);
-}
-
-/**
- * Set a style of a check box
- * @param cb pointer to check box object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a check box
- * @param cb pointer to check box object
- * @return pointer to the text of the check box
- */
-const char * lv_cb_get_text(const lv_obj_t * cb);
-
-/**
- * Get the current state of the check box
- * @param cb pointer to a check box object
- * @return true: checked; false: not checked
- */
-static inline bool lv_cb_is_checked(const lv_obj_t * cb)
-{
- return lv_btn_get_state(cb) == LV_BTN_STATE_REL ? false : true;
-}
-
-/**
- * Get whether the check box is inactive or not.
- * @param cb pointer to a check box object
- * @return true: inactive; false: not inactive
- */
-static inline bool lv_cb_is_inactive(const lv_obj_t * cb)
-{
- return lv_btn_get_state(cb) == LV_BTN_STATE_INA ? true :false;
-}
-
-/**
- * Get a style of a button
- * @param cb pointer to check box object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_CB*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CB_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_chart.c b/src/libs/lvgl/src/lv_objx/lv_chart.c
deleted file mode 100644
index 2dfdef0e..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_chart.c
+++ /dev/null
@@ -1,1557 +0,0 @@
-/**
- * @file lv_chart.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_chart.h"
-#if LV_USE_CHART != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_chart"
-
-#define LV_CHART_YMIN_DEF 0
-#define LV_CHART_YMAX_DEF 100
-#define LV_CHART_HDIV_DEF 3
-#define LV_CHART_VDIV_DEF 5
-#define LV_CHART_PNUM_DEF 10
-#define LV_CHART_AXIS_TO_LABEL_DISTANCE 4
-#define LV_CHART_AXIS_MAJOR_TICK_LEN_COE 1 / 15
-#define LV_CHART_AXIS_MINOR_TICK_LEN_COE 2 / 3
-#define LV_CHART_AXIS_PRIMARY_Y 1
-#define LV_CHART_AXIS_SECONDARY_Y 0
-#define LV_CHART_LABEL_ITERATOR_FORWARD 1
-#define LV_CHART_LABEL_ITERATOR_REVERSE 0
-
-/**********************
- * TYPEDEFS
- **********************/
-
-typedef struct {
- const char * list_start;
- const char * current_pos;
- uint8_t items_left;
- uint8_t is_reverse_iter;
-} lv_chart_label_iterator_t;
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param);
-static void lv_chart_draw_div(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_lines(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_vertical_lines(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_draw_axes(lv_obj_t * chart, const lv_area_t * mask);
-static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i);
-static void lv_chart_inv_points(lv_obj_t * chart, uint16_t i);
-static void lv_chart_inv_cols(lv_obj_t * chart, uint16_t i);
-static void lv_chart_get_next_label(lv_chart_label_iterator_t * iterator, char * buf);
-static inline bool lv_chart_is_tick_with_label(uint8_t tick_num, lv_chart_axis_cfg_t * axis);
-static lv_chart_label_iterator_t lv_chart_create_label_iter(const char * list, uint8_t iterator_dir);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design_f;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a chart background objects
- * @param par pointer to an object, it will be the parent of the new chart background
- * @param copy pointer to a chart background object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created chart background
- */
-lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("chart create started");
-
- /*Create the ancestor basic object*/
- lv_obj_t * new_chart = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_chart);
- if(new_chart == NULL) return NULL;
-
- /*Allocate the object type specific extended data*/
- lv_chart_ext_t * ext = lv_obj_allocate_ext_attr(new_chart, sizeof(lv_chart_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- lv_ll_init(&ext->series_ll, sizeof(lv_chart_series_t));
-
- ext->series.num = 0;
- ext->ymin = LV_CHART_YMIN_DEF;
- ext->ymax = LV_CHART_YMAX_DEF;
- ext->hdiv_cnt = LV_CHART_HDIV_DEF;
- ext->vdiv_cnt = LV_CHART_VDIV_DEF;
- ext->point_cnt = LV_CHART_PNUM_DEF;
- ext->type = LV_CHART_TYPE_LINE;
- ext->update_mode = LV_CHART_UPDATE_MODE_SHIFT;
- ext->series.opa = LV_OPA_COVER;
- ext->series.dark = LV_OPA_50;
- ext->series.width = 2;
- ext->margin = 0;
- memset(&ext->x_axis, 0, sizeof(ext->x_axis));
- memset(&ext->y_axis, 0, sizeof(ext->y_axis));
- memset(&ext->secondary_y_axis, 0, sizeof(ext->secondary_y_axis));
- ext->x_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
- ext->x_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
- ext->y_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
- ext->y_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
- ext->secondary_y_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
- ext->secondary_y_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
-
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_chart);
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_chart);
-
- lv_obj_set_signal_cb(new_chart, lv_chart_signal);
- lv_obj_set_design_cb(new_chart, lv_chart_design);
-
- /*Init the new chart background object*/
- if(copy == NULL) {
- lv_obj_set_size(new_chart, LV_DPI * 3, LV_DPI * 2);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_chart_set_style(new_chart, LV_CHART_STYLE_MAIN, th->style.chart);
- } else {
- lv_chart_set_style(new_chart, LV_CHART_STYLE_MAIN, &lv_style_pretty);
- }
-
- } else {
- lv_chart_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
-
- ext->type = ext_copy->type;
- ext->ymin = ext_copy->ymin;
- ext->ymax = ext_copy->ymax;
- ext->hdiv_cnt = ext_copy->hdiv_cnt;
- ext->vdiv_cnt = ext_copy->vdiv_cnt;
- ext->point_cnt = ext_copy->point_cnt;
- ext->series.opa = ext_copy->series.opa;
- ext->margin = ext_copy->margin;
- memcpy(&ext->x_axis, &ext_copy->x_axis, sizeof(lv_chart_axis_cfg_t));
- memcpy(&ext->y_axis, &ext_copy->y_axis, sizeof(lv_chart_axis_cfg_t));
- memcpy(&ext->secondary_y_axis, &ext_copy->secondary_y_axis, sizeof(lv_chart_axis_cfg_t));
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_chart);
- }
-
- LV_LOG_INFO("chart created");
-
- return new_chart;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Allocate and add a data series to the chart
- * @param chart pointer to a chart object
- * @param color color of the data series
- * @return pointer to the allocated data series
- */
-lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- lv_chart_series_t * ser = lv_ll_ins_head(&ext->series_ll);
- LV_ASSERT_MEM(ser);
- if(ser == NULL) return NULL;
-
- lv_coord_t def = LV_CHART_POINT_DEF;
-
- if(ser == NULL) return NULL;
-
- ser->color = color;
- ser->points = lv_mem_alloc(sizeof(lv_coord_t) * ext->point_cnt);
- LV_ASSERT_MEM(ser->points);
- if(ser->points == NULL) {
- lv_ll_rem(&ext->series_ll, ser);
- lv_mem_free(ser);
- return NULL;
- }
-
- ser->start_point = 0;
-
- uint16_t i;
- lv_coord_t * p_tmp = ser->points;
- for(i = 0; i < ext->point_cnt; i++) {
- *p_tmp = def;
- p_tmp++;
- }
-
- ext->series.num++;
-
- return ser;
-}
-
-/**
- * Clear the point of a serie
- * @param chart pointer to a chart object
- * @param serie pointer to the chart's serie to clear
- */
-void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(serie);
-
- if(chart == NULL || serie == NULL) return;
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext == NULL) return;
-
- uint32_t i;
- for(i = 0; i < ext->point_cnt; i++) {
- serie->points[i] = LV_CHART_POINT_DEF;
- }
-
- serie->start_point = 0;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the number of horizontal and vertical division lines
- * @param chart pointer to a graph background object
- * @param hdiv number of horizontal division lines
- * @param vdiv number of vertical division lines
- */
-void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->hdiv_cnt == hdiv && ext->vdiv_cnt == vdiv) return;
-
- ext->hdiv_cnt = hdiv;
- ext->vdiv_cnt = vdiv;
-
- lv_obj_invalidate(chart);
-}
-
-/**
- * Set the minimal and maximal y values
- * @param chart pointer to a graph background object
- * @param ymin y minimum value
- * @param ymax y maximum value
- */
-void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->ymin == ymin && ext->ymax == ymax) return;
-
- ext->ymin = ymin;
- ext->ymax = ymax;
-
- lv_chart_refresh(chart);
-}
-
-/**
- * Set a new type for a chart
- * @param chart pointer to a chart object
- * @param type new type of the chart (from 'lv_chart_type_t' enum)
- */
-void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->type == type) return;
-
- ext->type = type;
-
- lv_chart_refresh(chart);
-}
-
-/**
- * Set the number of points on a data line on a chart
- * @param chart pointer r to chart object
- * @param point_cnt new number of points on the data lines
- */
-void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->point_cnt == point_cnt) return;
-
- lv_chart_series_t * ser;
- uint16_t point_cnt_old = ext->point_cnt;
- uint16_t i;
- lv_coord_t def = LV_CHART_POINT_DEF;
-
- if(point_cnt < 1) point_cnt = 1;
-
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- if(ser->start_point != 0) {
- lv_coord_t * new_points = lv_mem_alloc(sizeof(lv_coord_t) * point_cnt);
- LV_ASSERT_MEM(new_points);
- if(new_points == NULL) return;
-
- if(point_cnt >= point_cnt_old) {
- for(i = 0; i < point_cnt_old; i++) {
- new_points[i] =
- ser->points[(i + ser->start_point) % point_cnt_old]; /*Copy old contents to new array*/
- }
- for(i = point_cnt_old; i < point_cnt; i++) {
- new_points[i] = def; /*Fill up the rest with default value*/
- }
- } else {
- for(i = 0; i < point_cnt; i++) {
- new_points[i] =
- ser->points[(i + ser->start_point) % point_cnt_old]; /*Copy old contents to new array*/
- }
- }
-
- /*Switch over pointer from old to new*/
- lv_mem_free(ser->points);
- ser->points = new_points;
- } else {
- ser->points = lv_mem_realloc(ser->points, sizeof(lv_coord_t) * point_cnt);
- LV_ASSERT_MEM(ser->points);
- if(ser->points == NULL) return;
- /*Initialize the new points*/
- if(point_cnt > point_cnt_old) {
- for(i = point_cnt_old - 1; i < point_cnt; i++) {
- ser->points[i] = def;
- }
- }
- }
-
- ser->start_point = 0;
- }
-
- ext->point_cnt = point_cnt;
-
- lv_chart_refresh(chart);
-}
-
-/**
- * Set the opacity of the data series
- * @param chart pointer to a chart object
- * @param opa opacity of the data series
- */
-void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->series.opa == opa) return;
-
- ext->series.opa = opa;
- lv_obj_invalidate(chart);
-}
-
-/**
- * Set the line width or point radius of the data series
- * @param chart pointer to a chart object
- * @param width the new width
- */
-void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->series.width == width) return;
-
- ext->series.width = width;
- lv_obj_invalidate(chart);
-}
-/**
- * Set the dark effect on the bottom of the points or columns
- * @param chart pointer to a chart object
- * @param dark_eff dark effect level (LV_OPA_TRANSP to turn off)
- */
-void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->series.dark == dark_eff) return;
-
- ext->series.dark = dark_eff;
- lv_obj_invalidate(chart);
-}
-
-/**
- * Initialize all data points with a value
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y the new value for all points
- */
-void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(ser);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- uint16_t i;
- for(i = 0; i < ext->point_cnt; i++) {
- ser->points[i] = y;
- }
- ser->start_point = 0;
- lv_chart_refresh(chart);
-}
-
-/**
- * Set the value of points from an array
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y_array array of 'lv_coord_t' points (with 'points count' elements )
- */
-void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y_array[])
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(ser);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- memcpy(ser->points, y_array, ext->point_cnt * (sizeof(lv_coord_t)));
- ser->start_point = 0;
- lv_chart_refresh(chart);
-}
-
-/**
- * Shift all data left and set the rightmost data on a data line
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y the new value of the rightmost data
- */
-void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(ser);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT) {
- ser->points[ser->start_point] =
- y; /*This was the place of the former left most value, after shifting it is the rightmost*/
- ser->start_point = (ser->start_point + 1) % ext->point_cnt;
- lv_chart_refresh(chart);
- } else if(ext->update_mode == LV_CHART_UPDATE_MODE_CIRCULAR) {
- ser->points[ser->start_point] = y;
-
- if(ext->type & LV_CHART_TYPE_LINE) lv_chart_inv_lines(chart, ser->start_point);
- if(ext->type & LV_CHART_TYPE_COLUMN) lv_chart_inv_cols(chart, ser->start_point);
- if(ext->type & LV_CHART_TYPE_POINT) lv_chart_inv_points(chart, ser->start_point);
- if(ext->type & LV_CHART_TYPE_VERTICAL_LINE) lv_chart_inv_lines(chart, ser->start_point);
- if(ext->type & LV_CHART_TYPE_AREA) lv_chart_inv_lines(chart, ser->start_point);
-
- ser->start_point = (ser->start_point + 1) % ext->point_cnt; /*update the x for next incoming y*/
- }
-}
-
-/**
- * Set update mode of the chart object.
- * @param chart pointer to a chart object
- * @param update mode
- */
-void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t update_mode)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- if(ext->update_mode == update_mode) return;
-
- ext->update_mode = update_mode;
- lv_obj_invalidate(chart);
-}
-
-/**
- * Set the length of the tick marks on the x axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->x_axis.major_tick_len = major_tick_len;
- ext->x_axis.minor_tick_len = minor_tick_len;
-}
-
-/**
- * Set the length of the tick marks on the y axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->y_axis.major_tick_len = major_tick_len;
- ext->y_axis.minor_tick_len = minor_tick_len;
-}
-
-/**
- * Set the length of the tick marks on the secondary y axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->secondary_y_axis.major_tick_len = major_tick_len;
- ext->secondary_y_axis.minor_tick_len = minor_tick_len;
-}
-
-/**
- * Set the x-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(list_of_values);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->x_axis.num_tick_marks = num_tick_marks;
- ext->x_axis.list_of_values = list_of_values;
- ext->x_axis.options = options;
-}
-
-/**
- * Set the y-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(list_of_values);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->y_axis.num_tick_marks = num_tick_marks;
- ext->y_axis.list_of_values = list_of_values;
- ext->y_axis.options = options;
-}
-
-/**
- * Set the secondary y-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_secondary_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
- LV_ASSERT_NULL(list_of_values);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->secondary_y_axis.num_tick_marks = num_tick_marks;
- ext->secondary_y_axis.list_of_values = list_of_values;
- ext->secondary_y_axis.options = options;
-}
-
-/**
- * Set the margin around the chart, used for axes value and ticks
- * @param chart pointer to an chart object
- * @param margin value of the margin [px]
- */
-void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- ext->margin = margin;
- lv_obj_refresh_ext_draw_pad(chart);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the type of a chart
- * @param chart pointer to chart object
- * @return type of the chart (from 'lv_chart_t' enum)
- */
-lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->type;
-}
-
-/**
- * Get the data point number per data line on chart
- * @param chart pointer to chart object
- * @return point number on each data line
- */
-uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->point_cnt;
-}
-
-/**
- * Get the opacity of the data series
- * @param chart pointer to chart object
- * @return the opacity of the data series
- */
-lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->series.opa;
-}
-
-/**
- * Get the data series width
- * @param chart pointer to chart object
- * @return the width the data series (lines or points)
- */
-lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->series.width;
-}
-
-/**
- * Get the dark effect level on the bottom of the points or columns
- * @param chart pointer to chart object
- * @return dark effect level (LV_OPA_TRANSP to turn off)
- */
-lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->series.dark;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Refresh a chart if its data line has changed
- * @param chart pointer to chart object
- */
-void lv_chart_refresh(lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_obj_invalidate(chart);
-}
-
-/**
- * Get the margin around the chart, used for axes value and labels
- * @param chart pointer to an chart object
- * @param return value of the margin
- */
-uint16_t lv_chart_get_margin(lv_obj_t * chart)
-{
- LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- return ext->margin;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the chart backgrounds
- * @param chart pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask_p area*/
- return ancestor_design_f(chart, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Draw the background*/
- lv_draw_rect(&chart->coords, mask, lv_obj_get_style(chart), lv_obj_get_opa_scale(chart));
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- lv_chart_draw_div(chart, mask);
-
- /* Adjust the mask to remove the margin (clips chart contents to be within background) */
-
- lv_area_t mask_tmp, adjusted_mask;
- lv_obj_get_coords(chart, &mask_tmp);
-
- bool union_ok = lv_area_intersect(&adjusted_mask, mask, &mask_tmp);
-
- if(union_ok) {
- if(ext->type & LV_CHART_TYPE_LINE) lv_chart_draw_lines(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_COLUMN) lv_chart_draw_cols(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_POINT) lv_chart_draw_points(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_VERTICAL_LINE) lv_chart_draw_vertical_lines(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_AREA) lv_chart_draw_areas(chart, &adjusted_mask);
- }
-
- lv_chart_draw_axes(chart, mask);
- }
- return true;
-}
-
-/**
- * Signal function of the chart background
- * @param chart pointer to a chart background object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- */
-static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param)
-{
- /* Include the ancient signal function */
- lv_res_t res;
- res = ancestor_signal(chart, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- lv_coord_t ** datal;
- LV_LL_READ(ext->series_ll, datal)
- {
- lv_mem_free(*datal);
- }
- lv_ll_clear(&ext->series_ll);
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- /*Provide extra px draw area around the chart*/
- chart->ext_draw_pad = ext->margin;
- }
-
- return res;
-}
-
-/**
- * Draw the division lines on chart background
- * @param chart pointer to chart object
- * @param mask mask, inherited from the design function
- */
-static void lv_chart_draw_div(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- const lv_style_t * style = lv_obj_get_style(chart);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
-
- uint8_t div_i;
- uint8_t div_i_end;
- uint8_t div_i_start;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
-
- if(ext->hdiv_cnt != 0) {
- /*Draw side lines if no border*/
- if(style->body.border.width != 0) {
- div_i_start = 1;
- div_i_end = ext->hdiv_cnt;
- } else {
- div_i_start = 0;
- div_i_end = ext->hdiv_cnt + 1;
- }
-
- p1.x = 0 + x_ofs;
- p2.x = w - 1 + x_ofs;
- for(div_i = div_i_start; div_i <= div_i_end; div_i++) {
- p1.y = (int32_t)((int32_t)(h - style->line.width) * div_i) / (ext->hdiv_cnt + 1);
- p1.y += y_ofs;
- p2.y = p1.y;
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- }
- }
-
- if(ext->vdiv_cnt != 0) {
- /*Draw side lines if no border*/
- if(style->body.border.width != 0) {
- div_i_start = 1;
- div_i_end = ext->vdiv_cnt;
- } else {
- div_i_start = 0;
- div_i_end = ext->vdiv_cnt + 1;
- }
-
- p1.y = 0 + y_ofs;
- p2.y = h + y_ofs - 1;
- for(div_i = div_i_start; div_i <= div_i_end; div_i++) {
- p1.x = (int32_t)((int32_t)(w - style->line.width) * div_i) / (ext->vdiv_cnt + 1);
- p1.x += x_ofs;
- p2.x = p1.x;
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- }
- }
-}
-
-/**
- * Draw the data lines as lines on a chart
- * @param obj pointer to chart object
- */
-static void lv_chart_draw_lines(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- uint16_t i;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
- int32_t y_tmp;
- lv_coord_t p_prev;
- lv_coord_t p_act;
- lv_chart_series_t * ser;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
- lv_style_t style;
- lv_style_copy(&style, &lv_style_plain);
- style.line.opa = ext->series.opa;
- style.line.width = ext->series.width;
-
- /*Go through all data lines*/
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- style.line.color = ser->color;
-
- lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
-
- p1.x = 0 + x_ofs;
- p2.x = 0 + x_ofs;
-
- p_prev = start_point;
- y_tmp = (int32_t)((int32_t)ser->points[p_prev] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
-
- for(i = 1; i < ext->point_cnt; i++) {
- p1.x = p2.x;
- p1.y = p2.y;
-
- p2.x = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
-
- p_act = (start_point + i) % ext->point_cnt;
-
- y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
-
- if(ser->points[p_prev] != LV_CHART_POINT_DEF && ser->points[p_act] != LV_CHART_POINT_DEF)
- lv_draw_line(&p1, &p2, mask, &style, opa_scale);
-
- p_prev = p_act;
- }
- }
-}
-
-/**
- * Draw the data lines as points on a chart
- * @param chart pointer to chart object
- * @param mask mask, inherited from the design function
- */
-static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- uint16_t i;
- lv_area_t cir_a;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
- int32_t y_tmp;
- lv_coord_t p_act;
- lv_chart_series_t * ser;
- uint8_t series_cnt = 0;
- lv_style_t style_point;
- lv_style_copy(&style_point, &lv_style_plain);
-
- style_point.body.border.width = 0;
- style_point.body.radius = LV_RADIUS_CIRCLE;
- style_point.body.opa = ext->series.opa;
- style_point.body.radius = ext->series.width;
-
- /*Go through all data lines*/
-
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
-
- style_point.body.main_color = ser->color;
- style_point.body.grad_color = lv_color_mix(LV_COLOR_BLACK, ser->color, ext->series.dark);
-
- for(i = 0; i < ext->point_cnt; i++) {
- cir_a.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
- cir_a.x2 = cir_a.x1 + style_point.body.radius;
- cir_a.x1 -= style_point.body.radius;
-
- p_act = (start_point + i) % ext->point_cnt;
- y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
-
- cir_a.y1 = h - y_tmp + y_ofs - 1;
- cir_a.y2 = cir_a.y1 + style_point.body.radius;
- cir_a.y1 -= style_point.body.radius;
-
- if(ser->points[p_act] != LV_CHART_POINT_DEF)
- lv_draw_rect(&cir_a, mask, &style_point, lv_obj_get_opa_scale(chart));
- }
- series_cnt++;
- }
-}
-
-/**
- * Draw the data lines as columns on a chart
- * @param chart pointer to chart object
- * @param mask mask, inherited from the design function
- */
-static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- uint16_t i;
- lv_area_t col_a;
- lv_area_t col_mask;
- bool mask_ret;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t h = lv_obj_get_height(chart);
- int32_t y_tmp;
- lv_chart_series_t * ser;
- lv_style_t rects;
- lv_coord_t col_w = w / ((ext->series.num + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/
- lv_coord_t x_ofs = col_w / 2; /*Shift with a half col.*/
-
- lv_style_copy(&rects, &lv_style_plain);
- rects.body.border.width = 0;
- rects.body.radius = 0;
- rects.body.opa = ext->series.opa;
-
- col_a.y2 = chart->coords.y2;
-
- lv_coord_t x_act;
-
- /*Go through all points*/
- for(i = 0; i < ext->point_cnt; i++) {
- x_act = (int32_t)((int32_t)w * i) / ext->point_cnt;
- x_act += chart->coords.x1 + x_ofs;
-
- /*Draw the current point of all data line*/
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
-
- col_a.x1 = x_act;
- col_a.x2 = col_a.x1 + col_w;
- x_act += col_w;
-
- if(col_a.x2 < mask->x1) continue;
- if(col_a.x1 > mask->x2) break;
-
- rects.body.main_color = ser->color;
- rects.body.grad_color = lv_color_mix(LV_COLOR_BLACK, ser->color, ext->series.dark);
-
- lv_coord_t p_act = (start_point + i) % ext->point_cnt;
- y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- col_a.y1 = h - y_tmp + chart->coords.y1;
-
- mask_ret = lv_area_intersect(&col_mask, mask, &col_a);
- if(mask_ret != false && ser->points[p_act] != LV_CHART_POINT_DEF) {
- lv_draw_rect(&chart->coords, &col_mask, &rects, lv_obj_get_opa_scale(chart));
- }
- }
- }
-}
-
-/**
- * Draw the data lines as vertical lines on a chart if there is only 1px between point
- * @param obj pointer to chart object
- */
-static void lv_chart_draw_vertical_lines(lv_obj_t * chart, const lv_area_t * mask)
-{
-
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- lv_coord_t w = lv_obj_get_width(chart);
- /*Vertical lines works only if the width == point count. Else use the normal line type*/
- if(ext->point_cnt != w) {
- lv_chart_draw_lines(chart, mask);
- return;
- }
-
- uint16_t i;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t p_act;
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
- int32_t y_tmp;
- lv_chart_series_t * ser;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
- lv_style_t style;
- lv_style_copy(&style, &lv_style_plain);
- style.line.opa = ext->series.opa;
- style.line.width = ext->series.width;
-
- /*Go through all data lines*/
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
- style.line.color = ser->color;
-
- p1.x = 0 + x_ofs;
- p2.x = 0 + x_ofs;
- y_tmp = (int32_t)((int32_t)ser->points[0] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
- p1.y = p2.y;
-
- for(i = 0; i < ext->point_cnt; i++) {
- p_act = (start_point + i) % ext->point_cnt;
-
- y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
-
- if(p1.y == p2.y) {
- p2.x++;
- }
-
- if(ser->points[p_act] != LV_CHART_POINT_DEF) {
- lv_draw_line(&p1, &p2, mask, &style, opa_scale);
- }
-
- p2.x = ((w * p_act) / (ext->point_cnt - 1)) + x_ofs;
- p1.x = p2.x;
- p1.y = p2.y;
- }
- }
-}
-
-/**
- * Draw the data lines as areas on a chart
- * @param obj pointer to chart object
- */
-static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- uint16_t i;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
- int32_t y_tmp;
- lv_coord_t p_prev;
- lv_coord_t p_act;
- lv_chart_series_t * ser;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
- lv_style_t style;
- lv_style_copy(&style, &lv_style_plain);
-
- /*Go through all data lines*/
- LV_LL_READ_BACK(ext->series_ll, ser)
- {
- lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
- style.body.main_color = ser->color;
- style.body.opa = ext->series.opa;
-
- p2.x = 0 + x_ofs;
-
- p_prev = start_point;
- y_tmp = (int32_t)((int32_t)ser->points[p_prev] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
-
- for(i = 1; i < ext->point_cnt; i++) {
- p1.x = p2.x;
- p1.y = p2.y;
-
- p_act = (start_point + i) % ext->point_cnt;
- p2.x = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
-
- y_tmp = (int32_t)((int32_t)ser->points[p_act] - ext->ymin) * h;
- y_tmp = y_tmp / (ext->ymax - ext->ymin);
- p2.y = h - y_tmp + y_ofs;
-
- if(ser->points[p_prev] != LV_CHART_POINT_DEF && ser->points[p_act] != LV_CHART_POINT_DEF) {
- lv_point_t triangle_points[3];
- triangle_points[0] = p1;
- triangle_points[1] = p2;
- triangle_points[2].x = p1.x;
- triangle_points[2].y = chart->coords.y2;
- lv_draw_triangle(triangle_points, mask, &style, opa_scale);
- triangle_points[2].x = p2.x;
- triangle_points[0].y = chart->coords.y2;
- lv_draw_triangle(triangle_points, mask, &style, opa_scale);
- }
- p_prev = p_act;
- }
- }
-}
-
-/**
- * Create iterator for newline-separated list
- * @param list pointer to newline-separated labels list
- * @param iterator_dir LV_CHART_ITERATOR_FORWARD or LV_CHART_LABEL_ITERATOR_REVERSE
- * @return lv_chart_label_iterator_t
- */
-static lv_chart_label_iterator_t lv_chart_create_label_iter(const char * list, uint8_t iterator_dir)
-{
- lv_chart_label_iterator_t iterator = {0};
- uint8_t j;
-
- iterator.list_start = list;
-
- /* count number of list items */
- for(j = 0; list[j] != '\0'; j++) {
- if(list[j] == '\n')
- iterator.items_left++;
- }
-
- if(iterator_dir == LV_CHART_LABEL_ITERATOR_FORWARD) {
- iterator.is_reverse_iter = 0;
- iterator.current_pos = list;
- } else {
- iterator.is_reverse_iter = 1;
- // -1 to skip '\0' at the end of the string
- iterator.current_pos = list + j - 1;
- }
- iterator.items_left++;
- return iterator;
-}
-
-/**
- * Get next label from iterator created by lv_chart_create_label_iter()
- * @param iterator iterator to get label from
- * @param[out] buf buffer to point next label to
- */
-static void lv_chart_get_next_label(lv_chart_label_iterator_t * iterator, char * buf)
-{
- uint8_t label_len = 0;
- if (iterator->is_reverse_iter) {
- const char * label_start;
- /* count the length of the current label*/
- while ((*iterator->current_pos != '\n') &&
- (iterator->current_pos != iterator->list_start)) {
- iterator->current_pos--;
- label_len++;
- }
-
- label_start = iterator->current_pos;
-
- if (*iterator->current_pos == '\n') {
- /* do not copy \n symbol, +1 to skip it*/
- label_start++;
- /* skip newline*/
- iterator->current_pos--;
- } else {
- /* it is last label in list (first one from the beginning )*/
- label_len++;
- }
-
- /* do not allow output buffer overflow */
- if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
- label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
- }
-
- strncpy(buf, label_start, label_len);
- } else {
- /* search for tick string */
- while(iterator->current_pos[label_len] != '\n' &&
- iterator->current_pos[label_len] != '\0') {
- /* do not overflow the buffer, but move to the end of the current label */
- if(label_len < LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
- buf[label_len] = iterator->current_pos[label_len];
- label_len++;
- } else {
- label_len++;
- }
- }
-
- iterator->current_pos += label_len;
-
- /* do not allow output buffer overflow */
- if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
- label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
- }
-
- if(*iterator->current_pos == '\n') iterator->current_pos++;
- }
-
- /* terminate the string */
- buf[label_len] = '\0';
-}
-
-/**
- * Check whether there should be a label next to tick with given
- * number
- * @param tick_num number of the tick to check
- * @param axis pointer to struct containing info on the axis
- * @return true if label should be located next to current tick
- */
-static inline bool lv_chart_is_tick_with_label(uint8_t tick_num, lv_chart_axis_cfg_t * axis)
-{
- return ((tick_num == 0) || ((tick_num % axis->num_tick_marks) == 0));
-}
-
-static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask, uint8_t which_axis)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- lv_chart_axis_cfg_t * y_axis = (which_axis == LV_CHART_AXIS_PRIMARY_Y) ?
- &ext->y_axis : &ext->secondary_y_axis;
-
- if(y_axis->list_of_values != NULL || y_axis->num_tick_marks != 0) {
-
- const lv_style_t * style = lv_obj_get_style(chart);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
-
- uint8_t i;
- uint8_t num_of_labels;
- uint8_t num_scale_ticks;
- int8_t major_tick_len, minor_tick_len;
- uint8_t iter_dir;
-
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t x_ofs;
- lv_chart_label_iterator_t iter;
- lv_coord_t y_ofs = chart->coords.y1;
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t w = lv_obj_get_width(chart);
- char buf[LV_CHART_AXIS_TICK_LABEL_MAX_LEN + 1]; /* up to N symbols per label + null terminator */
-
- /* chose correct side of the chart */
- if(which_axis == LV_CHART_AXIS_PRIMARY_Y)
- x_ofs = chart->coords.x1;
- else
- x_ofs = chart->coords.x2;
-
- /* calculate the size of tick marks */
- if(y_axis->major_tick_len == LV_CHART_TICK_LENGTH_AUTO)
- major_tick_len = (int32_t)w * LV_CHART_AXIS_MAJOR_TICK_LEN_COE;
- else
- major_tick_len = y_axis->major_tick_len;
-
- if(y_axis->minor_tick_len == LV_CHART_TICK_LENGTH_AUTO)
- minor_tick_len = major_tick_len * LV_CHART_AXIS_MINOR_TICK_LEN_COE;
- else
- minor_tick_len = y_axis->minor_tick_len;
-
- /* tick lines on secondary y axis are drawn in other direction*/
- if(which_axis == LV_CHART_AXIS_SECONDARY_Y) {
- major_tick_len *= -1;
- minor_tick_len *= -1;
- }
-
- iter_dir = (y_axis->options & LV_CHART_AXIS_INVERSE_LABELS_ORDER) ? LV_CHART_LABEL_ITERATOR_REVERSE : LV_CHART_LABEL_ITERATOR_FORWARD;
- iter = lv_chart_create_label_iter(y_axis->list_of_values, iter_dir);
-
- /*determine the number of options */
- num_of_labels = iter.items_left;
-
- /* we can't have string labels without ticks step, set to 1 if not specified */
- if(y_axis->num_tick_marks == 0) y_axis->num_tick_marks = 1;
-
- /* calculate total number of ticks */
- if(num_of_labels < 2)
- num_scale_ticks = y_axis->num_tick_marks;
- else
- num_scale_ticks = (y_axis->num_tick_marks * (num_of_labels - 1));
-
- for(i = 0; i < (num_scale_ticks + 1); i++) { /* one extra loop - it may not exist in the list, empty label */
- /* first point of the tick */
- p1.x = x_ofs;
-
- /* move extra pixel out of chart boundary */
- if (which_axis == LV_CHART_AXIS_PRIMARY_Y)
- p1.x--;
- else
- p1.x++;
-
- /* second point of the tick */
- if((num_of_labels != 0) && (i == 0 || i % y_axis->num_tick_marks == 0))
- p2.x = p1.x - major_tick_len; /* major tick */
- else
- p2.x = p1.x - minor_tick_len; /* minor tick */
-
- /* draw a line at moving y position */
- p2.y = p1.y =
- y_ofs + (int32_t)((int32_t)(h - style->line.width) * i) / num_scale_ticks;
-
- if(y_axis->options & LV_CHART_AXIS_INVERSE_LABELS_ORDER) {
- /*if label order is inversed last tick have number 0*/
- if(i != 0)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- else if((y_axis->options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- } else {
- if(i != num_scale_ticks)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- else if((y_axis->options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- }
-
- /* draw values if available */
- if(num_of_labels != 0) {
- /* add text only to major tick */
- if(lv_chart_is_tick_with_label(i, y_axis)) {
-
- lv_chart_get_next_label(&iter, buf);
-
- /* reserve appropriate area */
- lv_point_t size;
- lv_txt_get_size(&size, buf, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, LV_TXT_FLAG_CENTER);
-
- /* set the area at some distance of the major tick len left of the tick */
- lv_area_t a = {.y1 = p2.y - size.y / 2, .y2 = p2.y + size.y / 2};
-
- if(which_axis == LV_CHART_AXIS_PRIMARY_Y) {
- a.x1 = p2.x - size.x - LV_CHART_AXIS_TO_LABEL_DISTANCE;
- a.x2 = p2.x - LV_CHART_AXIS_TO_LABEL_DISTANCE;
- } else {
- a.x1 = p2.x + LV_CHART_AXIS_TO_LABEL_DISTANCE;
- a.x2 = p2.x + size.x + LV_CHART_AXIS_TO_LABEL_DISTANCE;
- }
-
- lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, lv_obj_get_base_dir(chart));
- }
- }
-
- }
- }
-}
-
-static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- if(ext->x_axis.list_of_values != NULL || ext->x_axis.num_tick_marks != 0) {
-
- const lv_style_t * style = lv_obj_get_style(chart);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
-
- uint8_t i;
- uint8_t num_of_labels;
- uint8_t num_scale_ticks;
- uint8_t major_tick_len, minor_tick_len;
- lv_chart_label_iterator_t iter;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
- lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t w = lv_obj_get_width(chart);
- char buf[LV_CHART_AXIS_TICK_LABEL_MAX_LEN + 1]; /* up to N symbols per label + null terminator */
-
- /* calculate the size of tick marks */
- if(ext->x_axis.major_tick_len == LV_CHART_TICK_LENGTH_AUTO)
- major_tick_len = (int32_t)w * LV_CHART_AXIS_MAJOR_TICK_LEN_COE;
- else
- major_tick_len = ext->x_axis.major_tick_len;
-
- if(ext->x_axis.minor_tick_len == LV_CHART_TICK_LENGTH_AUTO)
- minor_tick_len = major_tick_len * LV_CHART_AXIS_MINOR_TICK_LEN_COE;
- else
- minor_tick_len = ext->x_axis.minor_tick_len;
-
- /*determine the number of options */
- iter = lv_chart_create_label_iter(ext->x_axis.list_of_values, LV_CHART_LABEL_ITERATOR_FORWARD);
- num_of_labels = iter.items_left;
-
- /* we can't have string labels without ticks step, set to 1 if not specified */
- if(ext->x_axis.num_tick_marks == 0) ext->x_axis.num_tick_marks = 1;
-
- /* calculate total number of marks */
- if(num_of_labels < 2)
- num_scale_ticks = ext->x_axis.num_tick_marks;
- else
- num_scale_ticks = (ext->x_axis.num_tick_marks * (num_of_labels - 1));
-
- for(i = 0; i < (num_scale_ticks + 1); i++) { /* one extra loop - it may not exist in the list, empty label */
- /* first point of the tick */
- p1.y = h + y_ofs;
-
- /* second point of the tick */
- if((num_of_labels != 0) && (i == 0 || i % ext->x_axis.num_tick_marks == 0))
- p2.y = p1.y + major_tick_len; /* major tick */
- else
- p2.y = p1.y + minor_tick_len; /* minor tick */
-
- /* draw a line at moving x position */
- p2.x = p1.x = x_ofs + (int32_t)((int32_t)(w - style->line.width) * i) / num_scale_ticks;
-
- if(i != num_scale_ticks)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- else if((ext->x_axis.options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
-
- /* draw values if available */
- if(num_of_labels != 0) {
- /* add text only to major tick */
- if(lv_chart_is_tick_with_label(i, &(ext->x_axis))) {
- lv_chart_get_next_label(&iter, buf);
-
- /* reserve appropriate area */
- lv_point_t size;
- lv_txt_get_size(&size, buf, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, LV_TXT_FLAG_CENTER);
-
- /* set the area at some distance of the major tick len under of the tick */
- lv_area_t a = {(p2.x - size.x / 2), (p2.y + LV_CHART_AXIS_TO_LABEL_DISTANCE), (p2.x + size.x / 2),
- (p2.y + size.y + LV_CHART_AXIS_TO_LABEL_DISTANCE)};
- lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, lv_obj_get_base_dir(chart));
- }
- }
- }
- }
-}
-
-static void lv_chart_draw_axes(lv_obj_t * chart, const lv_area_t * mask)
-{
- lv_chart_draw_y_ticks(chart, mask, LV_CHART_AXIS_PRIMARY_Y);
- lv_chart_draw_y_ticks(chart, mask, LV_CHART_AXIS_SECONDARY_Y);
- lv_chart_draw_x_ticks(chart, mask);
-}
-
-/**
- * invalid area of the new line data lines on a chart
- * @param obj pointer to chart object
- */
-static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t x_ofs = chart->coords.x1;
-
- if(i < ext->point_cnt) {
- lv_area_t coords;
- lv_obj_get_coords(chart, &coords);
- if(i < ext->point_cnt - 1) {
- coords.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs - ext->series.width;
- coords.x2 = ((w * (i + 1)) / (ext->point_cnt - 1)) + x_ofs + ext->series.width;
- lv_obj_invalidate_area(chart, &coords);
- }
-
- if(i > 0) {
- coords.x1 = ((w * (i - 1)) / (ext->point_cnt - 1)) + x_ofs - ext->series.width;
- coords.x2 = ((w * i) / (ext->point_cnt - 1)) + x_ofs + ext->series.width;
- lv_obj_invalidate_area(chart, &coords);
- }
- }
-}
-
-/**
- * invalid area of the new point data lines on a chart
- * @param chart pointer to chart object
- * @param mask mask, inherited from the design function
- */
-static void lv_chart_inv_points(lv_obj_t * chart, uint16_t i)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- lv_area_t cir_a;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t x_ofs = chart->coords.x1;
-
- lv_obj_get_coords(chart, &cir_a);
- cir_a.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs;
- cir_a.x2 = cir_a.x1 + ext->series.width;
- cir_a.x1 -= ext->series.width;
-
- lv_inv_area(lv_obj_get_disp(chart), &cir_a);
-}
-
-/**
- * invalid area of the new column data lines on a chart
- * @param chart pointer to chart object
- * @param mask mask, inherited from the design function
- */
-static void lv_chart_inv_cols(lv_obj_t * chart, uint16_t i)
-{
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
- lv_area_t col_a;
- lv_coord_t w = lv_obj_get_width(chart);
- lv_coord_t col_w = w / ((ext->series.num + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/
- lv_coord_t x_ofs = col_w / 2; /*Shift with a half col.*/
-
- lv_coord_t x_act;
-
- x_act = (int32_t)((int32_t)w * i) / ext->point_cnt;
- x_act += chart->coords.x1 + x_ofs;
-
- lv_obj_get_coords(chart, &col_a);
- col_a.x1 = x_act;
- col_a.x2 = col_a.x1 + col_w;
-
- lv_inv_area(lv_obj_get_disp(chart), &col_a);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_chart.h b/src/libs/lvgl/src/lv_objx/lv_chart.h
deleted file mode 100644
index 55fb9299..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_chart.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * @file lv_chart.h
- *
- */
-
-#ifndef LV_CHART_H
-#define LV_CHART_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CHART != 0
-
-#include "../lv_core/lv_obj.h"
-#include "lv_line.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**Default value of points. Can be used to not draw a point*/
-#define LV_CHART_POINT_DEF (LV_COORD_MIN)
-
-/**Automatically calculate the tick length*/
-#define LV_CHART_TICK_LENGTH_AUTO 255
-
-LV_EXPORT_CONST_INT(LV_CHART_POINT_DEF);
-LV_EXPORT_CONST_INT(LV_CHART_TICK_LENGTH_AUTO);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Chart types*/
-enum {
- LV_CHART_TYPE_NONE = 0x00, /**< Don't draw the series*/
- LV_CHART_TYPE_LINE = 0x01, /**< Connect the points with lines*/
- LV_CHART_TYPE_COLUMN = 0x02, /**< Draw columns*/
- LV_CHART_TYPE_POINT = 0x04, /**< Draw circles on the points*/
- LV_CHART_TYPE_VERTICAL_LINE = 0x08, /**< Draw vertical lines on points (useful when chart width == point count)*/
- LV_CHART_TYPE_AREA = 0x10, /**< Draw area chart*/
-};
-typedef uint8_t lv_chart_type_t;
-
-/** Chart update mode for `lv_chart_set_next`*/
-enum {
- LV_CHART_UPDATE_MODE_SHIFT, /**< Shift old data to the left and add the new one o the right*/
- LV_CHART_UPDATE_MODE_CIRCULAR, /**< Add the new data in a circular way*/
-};
-typedef uint8_t lv_chart_update_mode_t;
-
-typedef struct
-{
- lv_coord_t * points;
- lv_color_t color;
- uint16_t start_point;
-} lv_chart_series_t;
-
-/** Data of axis */
-enum {
- LV_CHART_AXIS_SKIP_LAST_TICK = 0x00, /**< don't draw the last tick */
- LV_CHART_AXIS_DRAW_LAST_TICK = 0x01, /**< draw the last tick */
- LV_CHART_AXIS_INVERSE_LABELS_ORDER = 0x02 /**< draw tick labels in an inversed order*/
-};
-typedef uint8_t lv_chart_axis_options_t;
-
-typedef struct
-{
- const char * list_of_values;
- lv_chart_axis_options_t options;
- uint8_t num_tick_marks;
- uint8_t major_tick_len;
- uint8_t minor_tick_len;
-} lv_chart_axis_cfg_t;
-
-/*Data of chart */
-typedef struct
-{
- /*No inherited ext*/ /*Ext. of ancestor*/
- /*New data for this type */
- lv_ll_t series_ll; /*Linked list for the data line pointers (stores lv_chart_dl_t)*/
- lv_coord_t ymin; /*y min value (used to scale the data)*/
- lv_coord_t ymax; /*y max value (used to scale the data)*/
- uint8_t hdiv_cnt; /*Number of horizontal division lines*/
- uint8_t vdiv_cnt; /*Number of vertical division lines*/
- uint16_t point_cnt; /*Point number in a data line*/
- lv_chart_type_t type; /*Line, column or point chart (from 'lv_chart_type_t')*/
- lv_chart_axis_cfg_t y_axis;
- lv_chart_axis_cfg_t x_axis;
- lv_chart_axis_cfg_t secondary_y_axis;
- uint16_t margin;
- uint8_t update_mode : 1;
- struct
- {
- lv_coord_t width; /*Line width or point radius*/
- uint8_t num; /*Number of data lines in dl_ll*/
- lv_opa_t opa; /*Opacity of data lines*/
- lv_opa_t dark; /*Dark level of the point/column bottoms*/
- } series;
-} lv_chart_ext_t;
-
-enum {
- LV_CHART_STYLE_MAIN,
-};
-typedef uint8_t lv_chart_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a chart background objects
- * @param par pointer to an object, it will be the parent of the new chart background
- * @param copy pointer to a chart background object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created chart background
- */
-lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Allocate and add a data series to the chart
- * @param chart pointer to a chart object
- * @param color color of the data series
- * @return pointer to the allocated data series
- */
-lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color);
-
-/**
- * Clear the point of a serie
- * @param chart pointer to a chart object
- * @param serie pointer to the chart's serie to clear
- */
-void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the number of horizontal and vertical division lines
- * @param chart pointer to a graph background object
- * @param hdiv number of horizontal division lines
- * @param vdiv number of vertical division lines
- */
-void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv);
-
-/**
- * Set the minimal and maximal y values
- * @param chart pointer to a graph background object
- * @param ymin y minimum value
- * @param ymax y maximum value
- */
-void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax);
-
-/**
- * Set a new type for a chart
- * @param chart pointer to a chart object
- * @param type new type of the chart (from 'lv_chart_type_t' enum)
- */
-void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type);
-
-/**
- * Set the number of points on a data line on a chart
- * @param chart pointer r to chart object
- * @param point_cnt new number of points on the data lines
- */
-void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt);
-
-/**
- * Set the opacity of the data series
- * @param chart pointer to a chart object
- * @param opa opacity of the data series
- */
-void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa);
-
-/**
- * Set the line width or point radius of the data series
- * @param chart pointer to a chart object
- * @param width the new width
- */
-void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width);
-
-/**
- * Set the dark effect on the bottom of the points or columns
- * @param chart pointer to a chart object
- * @param dark_eff dark effect level (LV_OPA_TRANSP to turn off)
- */
-void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff);
-
-/**
- * Initialize all data points with a value
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y the new value for all points
- */
-void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y);
-
-/**
- * Set the value of points from an array
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y_array array of 'lv_coord_t' points (with 'points count' elements )
- */
-void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y_array[]);
-
-/**
- * Shift all data right and set the most right data on a data line
- * @param chart pointer to chart object
- * @param ser pointer to a data series on 'chart'
- * @param y the new value of the most right data
- */
-void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y);
-
-/**
- * Set update mode of the chart object.
- * @param chart pointer to a chart object
- * @param update mode
- */
-void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t update_mode);
-
-/**
- * Set the style of a chart
- * @param chart pointer to a chart object
- * @param type which style should be set (can be only `LV_CHART_STYLE_MAIN`)
- * @param style pointer to a style
- */
-static inline void lv_chart_set_style(lv_obj_t * chart, lv_chart_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(chart, style);
-}
-
-/**
- * Set the length of the tick marks on the x axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len);
-
-/**
- * Set the length of the tick marks on the y axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len);
-
-/**
- * Set the length of the tick marks on the secondary y axis
- * @param chart pointer to the chart
- * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where labels are added)
- * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
- * (where no labels are added)
- */
-void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len);
-
-/**
- * Set the x-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options);
-
-/**
- * Set the secondary y-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_secondary_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options);
-
-/**
- * Set the y-axis tick count and labels of a chart
- * @param chart pointer to a chart object
- * @param list_of_values list of string values, terminated with \n, except the last
- * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
- * else number of ticks between two value labels
- * @param options extra options
- */
-void lv_chart_set_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
- lv_chart_axis_options_t options);
-
-/**
- * Set the margin around the chart, used for axes value and ticks
- * @param chart pointer to an chart object
- * @param margin value of the margin [px]
- */
-void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the type of a chart
- * @param chart pointer to chart object
- * @return type of the chart (from 'lv_chart_t' enum)
- */
-lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart);
-
-/**
- * Get the data point number per data line on chart
- * @param chart pointer to chart object
- * @return point number on each data line
- */
-uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart);
-
-/**
- * Get the opacity of the data series
- * @param chart pointer to chart object
- * @return the opacity of the data series
- */
-lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart);
-
-/**
- * Get the data series width
- * @param chart pointer to chart object
- * @return the width the data series (lines or points)
- */
-lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart);
-
-/**
- * Get the dark effect level on the bottom of the points or columns
- * @param chart pointer to chart object
- * @return dark effect level (LV_OPA_TRANSP to turn off)
- */
-lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart);
-
-/**
- * Get the style of an chart object
- * @param chart pointer to an chart object
- * @param type which style should be get (can be only `LV_CHART_STYLE_MAIN`)
- * @return pointer to the chart's style
- */
-static inline const lv_style_t * lv_chart_get_style(const lv_obj_t * chart, lv_chart_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(chart);
-}
-
-/**
- * Get the margin around the chart, used for axes value and labels
- * @param chart pointer to an chart object
- * @param return value of the margin
- */
-uint16_t lv_chart_get_margin(lv_obj_t * chart);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Refresh a chart if its data line has changed
- * @param chart pointer to chart object
- */
-void lv_chart_refresh(lv_obj_t * chart);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_CHART*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CHART_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_cont.c b/src/libs/lvgl/src/lv_objx/lv_cont.c
deleted file mode 100644
index 22e9f514..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cont.c
+++ /dev/null
@@ -1,710 +0,0 @@
-/**
- * @file lv_cont.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_cont.h"
-#if LV_USE_CONT != 0
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_draw/lv_draw_basic.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_bidi.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_cont"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param);
-static void lv_cont_refr_layout(lv_obj_t * cont);
-static void lv_cont_layout_col(lv_obj_t * cont);
-static void lv_cont_layout_row(lv_obj_t * cont);
-static void lv_cont_layout_center(lv_obj_t * cont);
-static void lv_cont_layout_pretty(lv_obj_t * cont);
-static void lv_cont_layout_grid(lv_obj_t * cont);
-static void lv_cont_refr_autofit(lv_obj_t * cont);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a container objects
- * @param par pointer to an object, it will be the parent of the new container
- * @param copy pointer to a container object, if not NULL then the new object will be copied from it
- * @return pointer to the created container
- */
-lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
-{
-
- LV_LOG_TRACE("container create started");
-
- /*Create a basic object*/
- lv_obj_t * new_cont = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_cont);
- if(new_cont == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cont);
-
- lv_obj_allocate_ext_attr(new_cont, sizeof(lv_cont_ext_t));
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(new_cont);
- if(ext == NULL) return NULL;
-
- LV_ASSERT_MEM(ext);
- ext->fit_left = LV_FIT_NONE;
- ext->fit_right = LV_FIT_NONE;
- ext->fit_top = LV_FIT_NONE;
- ext->fit_bottom = LV_FIT_NONE;
- ext->layout = LV_LAYOUT_OFF;
-
- lv_obj_set_signal_cb(new_cont, lv_cont_signal);
-
- /*Init the new container*/
- if(copy == NULL) {
- /*Set the default styles if it's not screen*/
- if(par != NULL) {
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_cont_set_style(new_cont, LV_CONT_STYLE_MAIN, th->style.cont);
- } else {
- lv_cont_set_style(new_cont, LV_CONT_STYLE_MAIN, &lv_style_pretty);
- }
- }
- }
- /*Copy an existing object*/
- else {
- lv_cont_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->fit_left = copy_ext->fit_left;
- ext->fit_right = copy_ext->fit_right;
- ext->fit_top = copy_ext->fit_top;
- ext->fit_bottom = copy_ext->fit_bottom;
- ext->layout = copy_ext->layout;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_cont);
- }
-
- LV_LOG_INFO("container created");
-
- return new_cont;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a layout on a container
- * @param cont pointer to a container object
- * @param layout a layout from 'lv_cont_layout_t'
- */
-void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- if(ext->layout == layout) return;
-
- ext->layout = layout;
-
- /*Send a signal to refresh the layout*/
- cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
-}
-
-/**
- * Set the fit policy in all 4 directions separately.
- * It tell how to change the container's size automatically.
- * @param cont pointer to a container object
- * @param left left fit policy from `lv_fit_t`
- * @param right right fit policy from `lv_fit_t`
- * @param top bottom fit policy from `lv_fit_t`
- * @param bottom bottom fit policy from `lv_fit_t`
- */
-void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_obj_invalidate(cont);
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- if(ext->fit_left == left && ext->fit_right == right && ext->fit_top == top && ext->fit_bottom == bottom) {
- return;
- }
-
- ext->fit_left = left;
- ext->fit_right = right;
- ext->fit_top = top;
- ext->fit_bottom = bottom;
-
- /*Send a signal to refresh the layout*/
- cont->signal_cb(cont, LV_SIGNAL_CHILD_CHG, NULL);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the layout of a container
- * @param cont pointer to container object
- * @return the layout from 'lv_cont_layout_t'
- */
-lv_layout_t lv_cont_get_layout(const lv_obj_t * cont)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- return ext->layout;
-}
-
-/**
- * Get left fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_left(const lv_obj_t * cont)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- return ext->fit_left;
-}
-
-/**
- * Get right fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_right(const lv_obj_t * cont)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- return ext->fit_right;
-}
-
-/**
- * Get top fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_top(const lv_obj_t * cont)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- return ext->fit_top;
-}
-
-/**
- * Get bottom fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_bottom(const lv_obj_t * cont)
-{
- LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
-
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
- return ext->fit_bottom;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the container
- * @param cont pointer to a container object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(cont, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_STYLE_CHG) { /*Recalculate the padding if the style changed*/
- lv_cont_refr_layout(cont);
- lv_cont_refr_autofit(cont);
- } else if(sign == LV_SIGNAL_CHILD_CHG) {
- lv_cont_refr_layout(cont);
- lv_cont_refr_autofit(cont);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- if(lv_obj_get_width(cont) != lv_area_get_width(param) || lv_obj_get_height(cont) != lv_area_get_height(param)) {
- lv_cont_refr_layout(cont);
- lv_cont_refr_autofit(cont);
- }
- } else if(sign == LV_SIGNAL_PARENT_SIZE_CHG) {
- /*FLOOD and FILL fit needs to be refreshed if the parent size has changed*/
- lv_cont_refr_autofit(cont);
-
- }
-
- return res;
-}
-
-/**
- * Refresh the layout of a container
- * @param cont pointer to an object which layout should be refreshed
- */
-static void lv_cont_refr_layout(lv_obj_t * cont)
-{
- lv_layout_t type = lv_cont_get_layout(cont);
-
- /*'cont' has to be at least 1 child*/
- if(lv_obj_get_child(cont, NULL) == NULL) return;
-
- if(type == LV_LAYOUT_OFF) return;
-
- if(type == LV_LAYOUT_CENTER) {
- lv_cont_layout_center(cont);
- } else if(type == LV_LAYOUT_COL_L || type == LV_LAYOUT_COL_M || type == LV_LAYOUT_COL_R) {
- lv_cont_layout_col(cont);
- } else if(type == LV_LAYOUT_ROW_T || type == LV_LAYOUT_ROW_M || type == LV_LAYOUT_ROW_B) {
- lv_cont_layout_row(cont);
- } else if(type == LV_LAYOUT_PRETTY) {
- lv_cont_layout_pretty(cont);
- } else if(type == LV_LAYOUT_GRID) {
- lv_cont_layout_grid(cont);
- }
-}
-
-/**
- * Handle column type layouts
- * @param cont pointer to an object which layout should be handled
- */
-static void lv_cont_layout_col(lv_obj_t * cont)
-{
- lv_layout_t type = lv_cont_get_layout(cont);
- lv_obj_t * child;
-
- /*Adjust margin and get the alignment type*/
- lv_align_t align;
- const lv_style_t * style = lv_obj_get_style(cont);
- lv_coord_t hpad_corr;
-
- switch(type) {
- case LV_LAYOUT_COL_L:
- hpad_corr = style->body.padding.left;
- align = LV_ALIGN_IN_TOP_LEFT;
- break;
- case LV_LAYOUT_COL_M:
- hpad_corr = 0;
- align = LV_ALIGN_IN_TOP_MID;
- break;
- case LV_LAYOUT_COL_R:
- hpad_corr = -style->body.padding.right;
- align = LV_ALIGN_IN_TOP_RIGHT;
- break;
- default:
- hpad_corr = 0;
- align = LV_ALIGN_IN_TOP_LEFT;
- break;
- }
-
- /* Disable child change action because the children will be moved a lot
- * an unnecessary child change signals could be sent*/
- lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
- /* Align the children */
- lv_coord_t last_cord = style->body.padding.top;
- LV_LL_READ_BACK(cont->child_ll, child)
- {
- if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
-
- lv_obj_align(child, cont, align, hpad_corr, last_cord);
- last_cord += lv_obj_get_height(child) + style->body.padding.inner;
- }
-
- lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
-}
-
-/**
- * Handle row type layouts
- * @param cont pointer to an object which layout should be handled
- */
-static void lv_cont_layout_row(lv_obj_t * cont)
-{
- lv_layout_t type = lv_cont_get_layout(cont);
- lv_obj_t * child;
-
- /*Adjust margin and get the alignment type*/
- lv_align_t align;
- const lv_style_t * style = lv_obj_get_style(cont);
- lv_coord_t vpad_corr;
- lv_bidi_dir_t base_dir = lv_obj_get_base_dir(cont);
- switch(type) {
- case LV_LAYOUT_ROW_T:
- vpad_corr = style->body.padding.top;
- align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : LV_ALIGN_IN_TOP_LEFT;
- break;
- case LV_LAYOUT_ROW_M:
- vpad_corr = 0;
- align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_RIGHT_MID: LV_ALIGN_IN_LEFT_MID;
- break;
- case LV_LAYOUT_ROW_B:
- vpad_corr = -style->body.padding.bottom;
- align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_BOTTOM_RIGHT: LV_ALIGN_IN_BOTTOM_LEFT;
- break;
- default:
- vpad_corr = 0;
- align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : LV_ALIGN_IN_TOP_LEFT;
- break;
- }
-
- /* Disable child change action because the children will be moved a lot
- * an unnecessary child change signals could be sent*/
- lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
-
- /* Align the children */
- lv_coord_t last_cord;
- if(base_dir == LV_BIDI_DIR_RTL) last_cord = style->body.padding.right;
- else last_cord = style->body.padding.left;
-
- LV_LL_READ_BACK(cont->child_ll, child)
- {
- if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
-
-// last_cord -= lv_obj_get_width(child);
-
- if(base_dir == LV_BIDI_DIR_RTL) lv_obj_align(child, cont, align, -last_cord, vpad_corr);
- else lv_obj_align(child, cont, align, last_cord, vpad_corr);
-
- last_cord += lv_obj_get_width(child) + style->body.padding.inner;
- }
-
- lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
-}
-
-/**
- * Handle the center layout
- * @param cont pointer to an object which layout should be handled
- */
-static void lv_cont_layout_center(lv_obj_t * cont)
-{
- lv_obj_t * child;
- const lv_style_t * style = lv_obj_get_style(cont);
- uint32_t obj_num = 0;
- lv_coord_t h_tot = 0;
-
- LV_LL_READ(cont->child_ll, child)
- {
- if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
- h_tot += lv_obj_get_height(child) + style->body.padding.inner;
- obj_num++;
- }
-
- if(obj_num == 0) return;
-
- h_tot -= style->body.padding.inner;
-
- /* Disable child change action because the children will be moved a lot
- * an unnecessary child change signals could be sent*/
- lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
-
- /* Align the children */
- lv_coord_t last_cord = -(h_tot / 2);
- LV_LL_READ_BACK(cont->child_ll, child)
- {
- if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
-
- lv_obj_align(child, cont, LV_ALIGN_CENTER, 0, last_cord + lv_obj_get_height(child) / 2);
- last_cord += lv_obj_get_height(child) + style->body.padding.inner;
- }
-
- lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
-}
-
-/**
- * Handle the pretty layout. Put as many object as possible in row
- * then begin a new row
- * @param cont pointer to an object which layout should be handled
- */
-static void lv_cont_layout_pretty(lv_obj_t * cont)
-{
- lv_obj_t * child_rs; /* Row starter child */
- lv_obj_t * child_rc; /* Row closer child */
- lv_obj_t * child_tmp; /* Temporary child */
- const lv_style_t * style = lv_obj_get_style(cont);
- lv_coord_t w_obj = lv_obj_get_width(cont);
- lv_coord_t act_y = style->body.padding.top;
- /* Disable child change action because the children will be moved a lot
- * an unnecessary child change signals could be sent*/
-
- child_rs = lv_ll_get_tail(&cont->child_ll); /*Set the row starter child*/
- if(child_rs == NULL) return; /*Return if no child*/
-
- lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
-
- child_rc = child_rs; /*Initially the the row starter and closer is the same*/
- while(child_rs != NULL) {
- lv_coord_t h_row = 0;
- lv_coord_t w_row =
- style->body.padding.left + style->body.padding.right; /*The width is at least the left+right hpad*/
- uint32_t obj_num = 0;
-
- /*Find the row closer object and collect some data*/
- do {
- if(lv_obj_get_hidden(child_rc) == false && lv_obj_is_protected(child_rc, LV_PROTECT_POS) == false) {
- /*If this object is already not fit then break*/
- if(w_row + lv_obj_get_width(child_rc) > w_obj) {
- /*Step back one child because the last already not fit, so the previous is the
- * closer*/
- if(child_rc != NULL && obj_num != 0) {
- child_rc = lv_ll_get_next(&cont->child_ll, child_rc);
- }
- break;
- }
- w_row += lv_obj_get_width(child_rc) + style->body.padding.inner; /*Add the object width + opad*/
- h_row = LV_MATH_MAX(h_row, lv_obj_get_height(child_rc)); /*Search the highest object*/
- obj_num++;
- if(lv_obj_is_protected(child_rc, LV_PROTECT_FOLLOW))
- break; /*If can not be followed by an other object then break here*/
- }
- child_rc = lv_ll_get_prev(&cont->child_ll, child_rc); /*Load the next object*/
- if(obj_num == 0)
- child_rs = child_rc; /*If the first object was hidden (or too long) then set the
- next as first */
- } while(child_rc != NULL);
-
- /*If the object is too long then align it to the middle*/
- if(obj_num == 0) {
- if(child_rc != NULL) {
- lv_obj_align(child_rc, cont, LV_ALIGN_IN_TOP_MID, 0, act_y);
- h_row = lv_obj_get_height(child_rc); /*Not set previously because of the early break*/
- }
- }
- /*If there is only one object in the row then align it to the middle*/
- else if(obj_num == 1) {
- lv_obj_align(child_rs, cont, LV_ALIGN_IN_TOP_MID, 0, act_y);
- }
- /*If there are two object in the row then align them proportionally*/
- else if(obj_num == 2) {
- lv_obj_t * obj1 = child_rs;
- lv_obj_t * obj2 = lv_ll_get_prev(&cont->child_ll, child_rs);
- w_row = lv_obj_get_width(obj1) + lv_obj_get_width(obj2);
- lv_coord_t pad = (w_obj - w_row) / 3;
- lv_obj_align(obj1, cont, LV_ALIGN_IN_TOP_LEFT, pad, act_y + (h_row - lv_obj_get_height(obj1)) / 2);
- lv_obj_align(obj2, cont, LV_ALIGN_IN_TOP_RIGHT, -pad, act_y + (h_row - lv_obj_get_height(obj2)) / 2);
- }
- /* Align the children (from child_rs to child_rc)*/
- else {
- w_row -= style->body.padding.inner * obj_num;
- lv_coord_t new_opad = (w_obj - w_row) / (obj_num - 1);
- lv_coord_t act_x = style->body.padding.left; /*x init*/
- child_tmp = child_rs;
- while(child_tmp != NULL) {
- if(lv_obj_get_hidden(child_tmp) == false && lv_obj_is_protected(child_tmp, LV_PROTECT_POS) == false) {
- lv_obj_align(child_tmp, cont, LV_ALIGN_IN_TOP_LEFT, act_x,
- act_y + (h_row - lv_obj_get_height(child_tmp)) / 2);
- act_x += lv_obj_get_width(child_tmp) + new_opad;
- }
- if(child_tmp == child_rc) break;
- child_tmp = lv_ll_get_prev(&cont->child_ll, child_tmp);
- }
- }
-
- if(child_rc == NULL) break;
- act_y += style->body.padding.inner + h_row; /*y increment*/
- child_rs = lv_ll_get_prev(&cont->child_ll, child_rc); /*Go to the next object*/
- child_rc = child_rs;
- }
- lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
-}
-
-/**
- * Handle the grid layout. Align same-sized objects in a grid
- * @param cont pointer to an object which layout should be handled
- */
-static void lv_cont_layout_grid(lv_obj_t * cont)
-{
- lv_obj_t * child;
- const lv_style_t * style = lv_obj_get_style(cont);
- lv_coord_t w_tot = lv_obj_get_width(cont);
- lv_coord_t w_obj = lv_obj_get_width(lv_obj_get_child(cont, NULL));
- lv_coord_t w_fit = lv_obj_get_width_fit(cont);
- lv_coord_t h_obj = lv_obj_get_height(lv_obj_get_child(cont, NULL));
- uint16_t obj_row = (w_fit) / (w_obj + style->body.padding.inner); /*Obj. num. in a row*/
- lv_coord_t x_ofs;
- if(obj_row > 1) {
- x_ofs = w_obj + (w_fit - (obj_row * w_obj)) / (obj_row - 1);
- } else {
- x_ofs = w_tot / 2 - w_obj / 2;
- }
- lv_coord_t y_ofs = h_obj + style->body.padding.inner;
-
- /* Disable child change action because the children will be moved a lot
- * an unnecessary child change signals could be sent*/
- lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
-
- /* Align the children */
- lv_coord_t act_x = style->body.padding.left;
- lv_coord_t act_y = style->body.padding.top;
- uint16_t obj_cnt = 0;
- LV_LL_READ_BACK(cont->child_ll, child)
- {
- if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
-
- if(obj_row > 1) {
- lv_obj_set_pos(child, act_x, act_y);
- act_x += x_ofs;
- } else {
- lv_obj_set_pos(child, x_ofs, act_y);
- }
- obj_cnt++;
-
- if(obj_cnt >= obj_row) {
- obj_cnt = 0;
- act_x = style->body.padding.left;
- act_y += y_ofs;
- }
- }
-
- lv_obj_clear_protect(cont, LV_PROTECT_CHILD_CHG);
-}
-
-/**
- * Handle auto fit. Set the size of the object to involve all children.
- * @param cont pointer to an object which size will be modified
- */
-static void lv_cont_refr_autofit(lv_obj_t * cont)
-{
- lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
-
- if(ext->fit_left == LV_FIT_NONE && ext->fit_right == LV_FIT_NONE && ext->fit_top == LV_FIT_NONE &&
- ext->fit_bottom == LV_FIT_NONE) {
- return;
- }
-
- lv_area_t tight_area;
- lv_area_t ori;
- const lv_style_t * style = lv_obj_get_style(cont);
- lv_obj_t * child_i;
-
- lv_obj_t * par = lv_obj_get_parent(cont);
- const lv_style_t * par_style = lv_obj_get_style(par);
- lv_area_t flood_area;
- lv_area_copy(&flood_area, &par->coords);
- flood_area.x1 += par_style->body.padding.left;
- flood_area.x2 -= par_style->body.padding.right;
- flood_area.y1 += par_style->body.padding.top;
- flood_area.y2 -= par_style->body.padding.bottom;
-
- /*Search the side coordinates of the children*/
- lv_obj_get_coords(cont, &ori);
- lv_obj_get_coords(cont, &tight_area);
-
- bool has_children = lv_ll_is_empty(&cont->child_ll) ? false : true;
-
- if(has_children) {
- tight_area.x1 = LV_COORD_MAX;
- tight_area.y1 = LV_COORD_MAX;
- tight_area.x2 = LV_COORD_MIN;
- tight_area.y2 = LV_COORD_MIN;
-
- LV_LL_READ(cont->child_ll, child_i)
- {
- if(lv_obj_get_hidden(child_i) != false) continue;
- tight_area.x1 = LV_MATH_MIN(tight_area.x1, child_i->coords.x1);
- tight_area.y1 = LV_MATH_MIN(tight_area.y1, child_i->coords.y1);
- tight_area.x2 = LV_MATH_MAX(tight_area.x2, child_i->coords.x2);
- tight_area.y2 = LV_MATH_MAX(tight_area.y2, child_i->coords.y2);
- }
-
- tight_area.x1 -= style->body.padding.left;
- tight_area.x2 += style->body.padding.right;
- tight_area.y1 -= style->body.padding.top;
- tight_area.y2 += style->body.padding.bottom;
- }
-
- lv_area_t new_area;
- lv_area_copy(&new_area, &ori);
-
- switch(ext->fit_left) {
- case LV_FIT_TIGHT: new_area.x1 = tight_area.x1; break;
- case LV_FIT_FLOOD: new_area.x1 = flood_area.x1; break;
- case LV_FIT_FILL: new_area.x1 = has_children ? LV_MATH_MIN(tight_area.x1, flood_area.x1) : flood_area.x1; break;
- default: break;
- }
-
- switch(ext->fit_right) {
- case LV_FIT_TIGHT: new_area.x2 = tight_area.x2; break;
- case LV_FIT_FLOOD: new_area.x2 = flood_area.x2; break;
- case LV_FIT_FILL: new_area.x2 = has_children ? LV_MATH_MAX(tight_area.x2, flood_area.x2) : flood_area.x2; break;
- default: break;
- }
-
- switch(ext->fit_top) {
- case LV_FIT_TIGHT: new_area.y1 = tight_area.y1; break;
- case LV_FIT_FLOOD: new_area.y1 = flood_area.y1; break;
- case LV_FIT_FILL: new_area.y1 = has_children ? LV_MATH_MIN(tight_area.y1, flood_area.y1) : flood_area.y1; break;
- default: break;
- }
-
- switch(ext->fit_bottom) {
- case LV_FIT_TIGHT: new_area.y2 = tight_area.y2; break;
- case LV_FIT_FLOOD: new_area.y2 = flood_area.y2; break;
- case LV_FIT_FILL: new_area.y2 = has_children ? LV_MATH_MAX(tight_area.y2, flood_area.y2) : flood_area.y2; break;
- default: break;
- }
-
- /*Do nothing if the coordinates are not changed*/
- if(cont->coords.x1 != new_area.x1 || cont->coords.y1 != new_area.y1 || cont->coords.x2 != new_area.x2 ||
- cont->coords.y2 != new_area.y2) {
-
- lv_obj_invalidate(cont);
- lv_area_copy(&cont->coords, &new_area);
- lv_obj_invalidate(cont);
-
- /*Notify the object about its new coordinates*/
- cont->signal_cb(cont, LV_SIGNAL_CORD_CHG, &ori);
-
- /*Inform the parent about the new coordinates*/
- par->signal_cb(par, LV_SIGNAL_CHILD_CHG, cont);
-
- if(lv_obj_get_auto_realign(cont)) {
- lv_obj_realign(cont);
- }
-
- /*Tell the children the parent's size has changed*/
- LV_LL_READ(cont->child_ll, child_i)
- {
- child_i->signal_cb(child_i, LV_SIGNAL_PARENT_SIZE_CHG, NULL);
- }
- }
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_cont.h b/src/libs/lvgl/src/lv_objx/lv_cont.h
deleted file mode 100644
index d4ed19fe..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cont.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/**
- * @file lv_cont.h
- *
- */
-
-#ifndef LV_CONT_H
-#define LV_CONT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CONT != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Container layout options*/
-enum {
- LV_LAYOUT_OFF = 0, /**< No layout */
- LV_LAYOUT_CENTER, /**< Center objects */
- LV_LAYOUT_COL_L, /**< Column left align*/
- LV_LAYOUT_COL_M, /**< Column middle align*/
- LV_LAYOUT_COL_R, /**< Column right align*/
- LV_LAYOUT_ROW_T, /**< Row top align*/
- LV_LAYOUT_ROW_M, /**< Row middle align*/
- LV_LAYOUT_ROW_B, /**< Row bottom align*/
- LV_LAYOUT_PRETTY, /**< Put as many object as possible in row and begin a new row*/
- LV_LAYOUT_GRID, /**< Align same-sized object into a grid*/
- _LV_LAYOUT_NUM
-};
-typedef uint8_t lv_layout_t;
-
-/**
- * How to resize the container around the children.
- */
-enum {
- LV_FIT_NONE, /**< Do not change the size automatically*/
- LV_FIT_TIGHT, /**< Shrink wrap around the children */
- LV_FIT_FLOOD, /**< Align the size to the parent's edge*/
- LV_FIT_FILL, /**< Align the size to the parent's edge first but if there is an object out of it
- then get larger */
- _LV_FIT_NUM
-};
-typedef uint8_t lv_fit_t;
-
-typedef struct
-{
- /*Inherited from 'base_obj' so no inherited ext. */ /*Ext. of ancestor*/
- /*New data for this type */
- uint8_t layout : 4; /*A layout from 'lv_layout_t' enum*/
- uint8_t fit_left : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_right : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_top : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_bottom : 2; /*A fit type from `lv_fit_t` enum */
-} lv_cont_ext_t;
-
-/*Styles*/
-enum {
- LV_CONT_STYLE_MAIN,
-};
-typedef uint8_t lv_cont_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a container objects
- * @param par pointer to an object, it will be the parent of the new container
- * @param copy pointer to a container object, if not NULL then the new object will be copied from it
- * @return pointer to the created container
- */
-lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a layout on a container
- * @param cont pointer to a container object
- * @param layout a layout from 'lv_cont_layout_t'
- */
-void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout);
-
-/**
- * Set the fit policy in all 4 directions separately.
- * It tell how to change the container's size automatically.
- * @param cont pointer to a container object
- * @param left left fit policy from `lv_fit_t`
- * @param right right fit policy from `lv_fit_t`
- * @param top top fit policy from `lv_fit_t`
- * @param bottom bottom fit policy from `lv_fit_t`
- */
-void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom);
-
-/**
- * Set the fit policy horizontally and vertically separately.
- * It tells how to change the container's size automatically.
- * @param cont pointer to a container object
- * @param hor horizontal fit policy from `lv_fit_t`
- * @param ver vertical fit policy from `lv_fit_t`
- */
-static inline void lv_cont_set_fit2(lv_obj_t * cont, lv_fit_t hor, lv_fit_t ver)
-{
- lv_cont_set_fit4(cont, hor, hor, ver, ver);
-}
-
-/**
- * Set the fit policy in all 4 direction at once.
- * It tells how to change the container's size automatically.
- * @param cont pointer to a container object
- * @param fit fit policy from `lv_fit_t`
- */
-static inline void lv_cont_set_fit(lv_obj_t * cont, lv_fit_t fit)
-{
- lv_cont_set_fit4(cont, fit, fit, fit, fit);
-}
-
-/**
- * Set the style of a container
- * @param cont pointer to a container object
- * @param type which style should be set (can be only `LV_CONT_STYLE_MAIN`)
- * @param style pointer to the new style
- */
-static inline void lv_cont_set_style(lv_obj_t * cont, lv_cont_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(cont, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the layout of a container
- * @param cont pointer to container object
- * @return the layout from 'lv_cont_layout_t'
- */
-lv_layout_t lv_cont_get_layout(const lv_obj_t * cont);
-
-/**
- * Get left fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_left(const lv_obj_t * cont);
-
-/**
- * Get right fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_right(const lv_obj_t * cont);
-
-/**
- * Get top fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_top(const lv_obj_t * cont);
-
-/**
- * Get bottom fit mode of a container
- * @param cont pointer to a container object
- * @return an element of `lv_fit_t`
- */
-lv_fit_t lv_cont_get_fit_bottom(const lv_obj_t * cont);
-
-/**
- * Get the style of a container
- * @param cont pointer to a container object
- * @param type which style should be get (can be only `LV_CONT_STYLE_MAIN`)
- * @return pointer to the container's style
- */
-static inline const lv_style_t * lv_cont_get_style(const lv_obj_t * cont, lv_cont_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(cont);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_CONT*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CONT_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_cpicker.c b/src/libs/lvgl/src/lv_objx/lv_cpicker.c
deleted file mode 100644
index 65826673..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cpicker.c
+++ /dev/null
@@ -1,1068 +0,0 @@
-/**
- * @file lv_cpicker.c
- *
- * From @AloyseTech and @paulpv.
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_cpicker.h"
-#if LV_USE_CPICKER != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw_arc.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_cpicker"
-
-#ifndef LV_CPICKER_DEF_TYPE
-#define LV_CPICKER_DEF_TYPE LV_CPICKER_TYPE_DISC
-#endif
-
-#ifndef LV_CPICKER_DEF_HUE
-#define LV_CPICKER_DEF_HUE 0
-#endif
-
-#ifndef LV_CPICKER_DEF_SATURATION
-#define LV_CPICKER_DEF_SATURATION 100
-#endif
-
-#ifndef LV_CPICKER_DEF_VALUE
-#define LV_CPICKER_DEF_VALUE 100
-#endif
-
-#ifndef LV_CPICKER_DEF_HSV
-#define LV_CPICKER_DEF_HSV ((lv_color_hsv_t){LV_CPICKER_DEF_HUE, LV_CPICKER_DEF_SATURATION, LV_CPICKER_DEF_VALUE})
-#endif
-
-#ifndef LV_CPICKER_DEF_QF /*quantization factor*/
-#define LV_CPICKER_DEF_QF 3
-#endif
-
-#define TRI_OFFSET 2
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * param);
-
-static void draw_rect_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
-static void draw_disc_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
-static void draw_indic(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
-static void invalidate_indic(lv_obj_t * cpicker);
-static lv_area_t get_indic_area(lv_obj_t * cpicker);
-
-static void next_color_mode(lv_obj_t * cpicker);
-static lv_res_t double_click_reset(lv_obj_t * cpicker);
-static void refr_indic_pos(lv_obj_t * cpicker);
-static lv_color_t angle_to_mode_color(lv_obj_t * cpicker, uint16_t angle);
-static uint16_t get_angle(lv_obj_t * cpicker);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a color_picker object
- * @param par pointer to an object, it will be the parent of the new color_picker
- * @param copy pointer to a color_picker object, if not NULL then the new object will be copied from it
- * @return pointer to the created color_picker
- */
-lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("color_picker create started");
-
- lv_obj_t * new_cpicker = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_cpicker);
- if(new_cpicker == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cpicker);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_cpicker);
-
- /*Allocate the extended data*/
- lv_cpicker_ext_t * ext = lv_obj_allocate_ext_attr(new_cpicker, sizeof(lv_cpicker_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->type = LV_CPICKER_DEF_TYPE;
- ext->hsv = LV_CPICKER_DEF_HSV;
- ext->indic.style = &lv_style_plain;
- ext->indic.colored = 0;
- ext->color_mode = LV_CPICKER_COLOR_MODE_HUE;
- ext->color_mode_fixed = 0;
- ext->preview = 0;
- ext->last_click_time = 0;
- ext->last_change_time = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_cpicker, lv_cpicker_signal);
- lv_obj_set_design_cb(new_cpicker, lv_cpicker_design);
-
- /*If no copy do the basic initialization*/
- if(copy == NULL) {
- lv_obj_set_size(new_cpicker, LV_DPI * 2, LV_DPI * 2);
- lv_obj_set_protect(new_cpicker, LV_PROTECT_PRESS_LOST);
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_cpicker_set_style(new_cpicker, LV_CPICKER_STYLE_MAIN, th->style.bg);
- } else {
- lv_cpicker_set_style(new_cpicker, LV_CPICKER_STYLE_MAIN, &lv_style_plain);
- }
- }
- /*Copy 'copy'*/
- else {
- lv_cpicker_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->type = copy_ext->type;
- ext->color_mode = copy_ext->color_mode;
- ext->color_mode_fixed = copy_ext->color_mode_fixed;
- ext->preview = copy_ext->preview;
- ext->hsv = copy_ext->hsv;
- ext->indic.colored = copy_ext->indic.colored;
- ext->indic.style = copy_ext->indic.style;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_cpicker);
- }
- refr_indic_pos(new_cpicker);
-
- LV_LOG_INFO("color_picker created");
-
- return new_cpicker;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new type for a cpicker
- * @param cpicker pointer to a cpicker object
- * @param type new type of the cpicker (from 'lv_cpicker_type_t' enum)
- */
-void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- if(ext->type == type) return;
-
- ext->type = type;
- lv_obj_refresh_ext_draw_pad(cpicker);
- refr_indic_pos(cpicker);
-
- lv_obj_invalidate(cpicker);
-}
-
-/**
- * Set a style of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_t * style)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- switch(type) {
- case LV_CPICKER_STYLE_MAIN:
- lv_obj_set_style(cpicker, style);
- break;
- case LV_CPICKER_STYLE_INDICATOR:
- ext->indic.style = style;
- lv_obj_invalidate(cpicker);
- break;
- }
-}
-
-/**
- * Set the current hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param hue current selected hue [0..360]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue)
-{
- lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
- hsv.h = hue;
- return lv_cpicker_set_hsv(cpicker, hsv);
-}
-
-/**
- * Set the current saturation of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param saturation current selected saturation [0..100]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation)
-{
- lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
- hsv.s = saturation;
- return lv_cpicker_set_hsv(cpicker, hsv);
-}
-
-/**
- * Set the current value of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param val current selected value [0..100]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val)
-{
- lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
- hsv.v = val;
- return lv_cpicker_set_hsv(cpicker, hsv);
-}
-
-/**
- * Set the current hsv of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param color current selected hsv
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- if (hsv.h > 360) hsv.h %= 360;
- if (hsv.s > 100) hsv.s = 100;
- if (hsv.v > 100) hsv.v = 100;
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- if (ext->hsv.h == hsv.h && ext->hsv.s == hsv.s && ext->hsv.v == hsv.v) return false;
-
- ext->hsv = hsv;
-
- refr_indic_pos(cpicker);
-
- if (ext->preview && ext->type == LV_CPICKER_TYPE_DISC) {
- lv_obj_invalidate(cpicker);
- }
-
- return true;
-}
-
-/**
- * Set the current color of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param color current selected color
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color)
-{
- lv_color32_t c32;
- c32.full = lv_color_to32(color);
-
- return lv_cpicker_set_hsv(cpicker,
- lv_color_rgb_to_hsv(c32.ch.red, c32.ch.green, c32.ch.blue));
-}
-
-/**
- * Set the current color mode.
- * @param cpicker pointer to colorpicker object
- * @param mode color mode (hue/sat/val)
- */
-void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- ext->color_mode = mode;
- refr_indic_pos(cpicker);
- lv_obj_invalidate(cpicker);
-}
-
-/**
- * Set if the color mode is changed on long press on center
- * @param cpicker pointer to colorpicker object
- * @param fixed color mode cannot be changed on long press
- */
-void lv_cpicker_set_color_mode_fixed(lv_obj_t * cpicker, bool fixed)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- ext->color_mode_fixed = fixed;
-}
-
-/**
- * Make the indicator to be colored to the current color
- * @param cpicker pointer to colorpicker object
- * @param en true: color the indicator; false: not color the indicator
- */
-void lv_cpicker_set_indic_colored(lv_obj_t * cpicker, bool en)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- ext->indic.colored = en ? 1 : 0;
- invalidate_indic(cpicker);
-}
-
-/**
- * Add a color preview in the middle of the DISC type color picker
- * @param cpicker pointer to colorpicker object
- * @param en true: enable preview; false: disable preview
- */
-void lv_cpicker_set_preview(lv_obj_t * cpicker, bool en)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- ext->preview = en ? 1 : 0;
- lv_obj_invalidate(cpicker);
-}
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current color mode.
- * @param cpicker pointer to colorpicker object
- * @return color mode (hue/sat/val)
- */
-lv_cpicker_color_mode_t lv_cpicker_get_color_mode(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->color_mode;
-}
-
-/**
- * Get if the color mode is changed on long press on center
- * @param cpicker pointer to colorpicker object
- * @return mode cannot be changed on long press
- */
-bool lv_cpicker_get_color_mode_fixed(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->color_mode_fixed;
-}
-
-/**
- * Get style of a color_picker.
- * @param cpicker pointer to color_picker object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_cpicker_get_style(const lv_obj_t * cpicker, lv_cpicker_style_t type)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- switch(type) {
- case LV_CPICKER_STYLE_MAIN:
- return lv_obj_get_style(cpicker);
- case LV_CPICKER_STYLE_INDICATOR:
- return ext->indic.style;
- default:
- return NULL;
- }
-
- /*To avoid warning*/
- return NULL;
-}
-
-/**
- * Get the current selected hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return hue current selected hue
- */
-uint16_t lv_cpicker_get_hue(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->hsv.h;
-}
-
-/**
- * Get the current selected saturation of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected saturation
- */
-uint8_t lv_cpicker_get_saturation(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->hsv.s;
-}
-
-/**
- * Get the current selected hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected value
- */
-uint8_t lv_cpicker_get_value(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->hsv.v;
-}
-
-/**
- * Get the current selected hsv of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected hsv
- */
-lv_color_hsv_t lv_cpicker_get_hsv(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->hsv;
-}
-
-/**
- * Get the current selected color of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return color current selected color
- */
-lv_color_t lv_cpicker_get_color(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return lv_color_hsv_to_rgb(ext->hsv.h, ext->hsv.s, ext->hsv.v);
-}
-
-/**
- * Whether the indicator is colored to the current color or not
- * @param cpicker pointer to colorpicker object
- * @return true: color the indicator; false: not color the indicator
- */
-bool lv_cpicker_get_indic_colored(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->indic.colored ? true : false;
-}
-
-/**
- * Whether the preview is enabled or not
- * @param cpicker pointer to colorpicker object
- * @return en true: preview is enabled; false: preview is disabled
- */
-bool lv_cpicker_get_preview(lv_obj_t * cpicker)
-{
- LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- return ext->preview ? true : false;
-}
-
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-
-/**
- * Handle the drawing related tasks of the color_picker
- * @param cpicker pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @return true/false, depends on 'mode'
- */
-static bool lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(cpicker);
-
- if(ext->type == LV_CPICKER_TYPE_DISC) {
- draw_disc_grad(cpicker, mask, opa_scale);
- } else if(ext->type == LV_CPICKER_TYPE_RECT) {
- draw_rect_grad(cpicker, mask, opa_scale);
- }
-
- draw_indic(cpicker, mask, opa_scale);
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-static void draw_disc_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- int16_t start_angle = 0; /*Default*/
- int16_t end_angle = 360 - LV_CPICKER_DEF_QF; /*Default*/
-
- lv_coord_t w = lv_obj_get_width(cpicker);
- lv_coord_t h = lv_obj_get_height(cpicker);
- lv_coord_t cx = cpicker->coords.x1 + w / 2;
- lv_coord_t cy = cpicker->coords.y1 + h / 2;
- lv_coord_t r = w / 2;
-
- /*if the mask does not include the center of the object
- * redrawing all the wheel is not necessary;
- * only a given angular range
- */
- lv_point_t center = {cx, cy};
- if(!lv_area_is_point_on(mask, &center))
- {
- /*get angle from center of object to each corners of the area*/
- int16_t dr, ur, ul, dl;
- dr = lv_atan2(mask->x2 - cx, mask->y2 - cy);
- ur = lv_atan2(mask->x2 - cx, mask->y1 - cy);
- ul = lv_atan2(mask->x1 - cx, mask->y1 - cy);
- dl = lv_atan2(mask->x1 - cx, mask->y2 - cy);
-
- /*check area position from object axis*/
- bool left = (mask->x2 < cx && mask->x1 < cx) ? true : false;
- bool onYaxis = (mask->x2 > cx && mask->x1 < cx) ? true : false;
- bool right = (mask->x2 > cx && mask->x1 > cx) ? true : false;
- bool top = (mask->y2 < cy && mask->y1 < cy) ? true : false;
- bool onXaxis = (mask->y2 > cy && mask->y1 < cy) ? true : false;
- bool bottom = (mask->y2 > cy && mask->y1 > cy) ? true : false;
-
- /*store angular range*/
- if(right && bottom) {
- start_angle = dl;
- end_angle = ur;
- } else if(right && onXaxis) {
- start_angle = dl;
- end_angle = ul;
- } else if(right && top) {
- start_angle = dr;
- end_angle = ul;
- } else if(onYaxis && top) {
- start_angle = dr;
- end_angle = dl;
- } else if(left && top) {
- start_angle = ur;
- end_angle = dl;
- } else if(left && onXaxis) {
- start_angle = ur;
- end_angle = dr;
- } else if(left && bottom) {
- start_angle = ul;
- end_angle = dr;
- } else if(onYaxis && bottom) {
- start_angle = ul;
- end_angle = ur;
- }
-
- /*rollover angle*/
- if(start_angle > end_angle) end_angle += 360;
-
- /*round to QF factor*/
- start_angle = (start_angle/LV_CPICKER_DEF_QF) * LV_CPICKER_DEF_QF;
- end_angle = (end_angle / LV_CPICKER_DEF_QF) * LV_CPICKER_DEF_QF;
-
- /*shift angle if necessary before adding offset*/
- if((start_angle - LV_CPICKER_DEF_QF) < 0) {
- start_angle += 360;
- end_angle += 360;
- }
-
- /*ensure overlapping by adding offset*/
- start_angle -= LV_CPICKER_DEF_QF;
- end_angle += LV_CPICKER_DEF_QF;
- }
-
- lv_point_t triangle_points[3];
- lv_style_t style;
- lv_style_copy(&style, &lv_style_plain);
- uint16_t i;
- for(i = start_angle; i <= end_angle; i+= LV_CPICKER_DEF_QF) {
- style.body.main_color = angle_to_mode_color(cpicker, i);
- style.body.grad_color = style.body.main_color;
-
- triangle_points[0].x = cx;
- triangle_points[0].y = cy;
-
- triangle_points[1].x = cx + (r * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
- triangle_points[1].y = cy + (r * lv_trigo_sin(i + 90) >> LV_TRIGO_SHIFT);
-
- if(i == end_angle || i == (360 - LV_CPICKER_DEF_QF)) {
- /*the last triangle is drawn without additional overlapping pixels*/
- triangle_points[2].x = cx + (r * lv_trigo_sin(i + LV_CPICKER_DEF_QF) >> LV_TRIGO_SHIFT);
- triangle_points[2].y = cy + (r * lv_trigo_sin(i + LV_CPICKER_DEF_QF + 90) >> LV_TRIGO_SHIFT);
- } else {
- triangle_points[2].x = cx + (r * lv_trigo_sin(i + LV_CPICKER_DEF_QF + TRI_OFFSET) >> LV_TRIGO_SHIFT);
- triangle_points[2].y = cy + (r * lv_trigo_sin(i + LV_CPICKER_DEF_QF + TRI_OFFSET + 90) >> LV_TRIGO_SHIFT);
- }
-
- lv_draw_triangle(triangle_points, mask, &style, LV_OPA_COVER);
- }
-
- /*Mask out the center area*/
- const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
- lv_style_copy(&style, style_main);
- style.body.radius = LV_RADIUS_CIRCLE;
- lv_area_t area_mid;
- lv_area_copy(&area_mid, &cpicker->coords);
- lv_area_increment(&area_mid, -style_main->line.width);
-
- lv_draw_rect(&area_mid, mask, &style, opa_scale);
-
- if(ext->preview) {
- lv_color_t color = lv_cpicker_get_color(cpicker);
- style.body.main_color = color;
- style.body.grad_color = color;
- lv_area_increment(&area_mid, -style_main->line.width / 2);
-
- lv_draw_rect(&area_mid, mask, &style, opa_scale);
- }
-}
-
-static void draw_rect_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
-{
- lv_style_t style;
- lv_style_copy(&style, lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN));
-
- lv_area_t grad_area;
- lv_obj_get_coords(cpicker, &grad_area);
-
- if(style.body.radius) {
- lv_coord_t h = lv_obj_get_height(cpicker);
- lv_coord_t r = style.body.radius;
- if(r > h / 2) r = h / 2;
- /*Make the gradient area smaller with a half circle on both ends*/
- grad_area.x1 += r;
- grad_area.x2 -= r;
-
- /*Draw the left rounded end*/
- lv_area_t rounded_edge_area;
- lv_obj_get_coords(cpicker, &rounded_edge_area);
- rounded_edge_area.x2 = rounded_edge_area.x1 + 2 * r;
-
- style.body.main_color = angle_to_mode_color(cpicker, 0);
- style.body.grad_color = style.body.main_color;
-
- lv_draw_rect(&rounded_edge_area, mask, &style, opa_scale);
-
- /*Draw the right rounded end*/
- lv_obj_get_coords(cpicker, &rounded_edge_area);
- rounded_edge_area.x1 = rounded_edge_area.x2 - 2 * r;
-
- style.body.main_color = angle_to_mode_color(cpicker, 359);
- style.body.grad_color = style.body.main_color;
-
- lv_draw_rect(&rounded_edge_area, mask, &style, opa_scale);
- }
-
- lv_coord_t grad_w = lv_area_get_width(&grad_area);
- uint16_t i_step = LV_MATH_MAX(LV_CPICKER_DEF_QF, 360 / grad_w);
- style.body.radius = 0;
- style.body.border.width = 0;
- style.body.shadow.width = 0;
- style.body.opa = LV_OPA_COVER;
-
- uint16_t i;
- for(i = 0; i < 360; i += i_step) {
- style.body.main_color = angle_to_mode_color(cpicker, i);
- style.body.grad_color = style.body.main_color;
-
- /*the following attribute might need changing between index to add border, shadow, radius etc*/
- lv_area_t rect_area;
-
- /*scale angle (hue/sat/val) to linear coordinate*/
- lv_coord_t xi = (i * grad_w) / 360;
-
- rect_area.x1 = LV_MATH_MIN(grad_area.x1 + xi, grad_area.x1 + grad_w - i_step);
- rect_area.y1 = grad_area.y1;
- rect_area.x2 = rect_area.x1 + i_step;
- rect_area.y2 = grad_area.y2;
-
- lv_draw_rect(&rect_area, mask, &style, opa_scale);
- }
-}
-
-static void draw_indic(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- lv_style_t style_cir;
- lv_style_copy(&style_cir, ext->indic.style);
- style_cir.body.radius = LV_RADIUS_CIRCLE;
-
- if(ext->indic.colored) {
- style_cir.body.main_color = lv_cpicker_get_color(cpicker);
- style_cir.body.grad_color = style_cir.body.main_color;
- }
-
- lv_area_t indic_area = get_indic_area(cpicker);
-
- lv_draw_rect(&indic_area, mask, &style_cir, opa_scale);
-}
-
-static void invalidate_indic(lv_obj_t * cpicker)
-{
- lv_area_t indic_area = get_indic_area(cpicker);
-
- lv_obj_invalidate_area(cpicker, &indic_area);
-}
-
-static lv_area_t get_indic_area(lv_obj_t * cpicker)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
- const lv_style_t * style_indic = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_INDICATOR);
-
- uint16_t r = 0;
- if(ext->type == LV_CPICKER_TYPE_DISC) r = style_main->line.width / 2;
- else if(ext->type == LV_CPICKER_TYPE_RECT) {
- lv_coord_t h = lv_obj_get_height(cpicker);
- r = h / 2;
- }
-
- lv_area_t indic_area;
- indic_area.x1 = cpicker->coords.x1 + ext->indic.pos.x - r - style_indic->body.padding.left;
- indic_area.y1 = cpicker->coords.y1 + ext->indic.pos.y - r - style_indic->body.padding.right;
- indic_area.x2 = cpicker->coords.x1 + ext->indic.pos.x + r + style_indic->body.padding.top;
- indic_area.y2 = cpicker->coords.y1 + ext->indic.pos.y + r + style_indic->body.padding.bottom;
-
- return indic_area;
-}
-
-/**
- * Signal function of the color_picker
- * @param cpicker pointer to a color_picker object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * param)
-{
- /* Include the ancient signal function */
- lv_res_t res = ancestor_signal(cpicker, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style_indic = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_INDICATOR);
- lv_coord_t indic_pad = LV_MATH_MAX(style_indic->body.padding.left, style_indic->body.padding.right);
- indic_pad = LV_MATH_MAX(indic_pad, style_indic->body.padding.top);
- indic_pad = LV_MATH_MAX(indic_pad, style_indic->body.padding.bottom);
-
- if(ext->type == LV_CPICKER_TYPE_RECT) indic_pad += LV_MATH_MAX(indic_pad, lv_obj_get_height(cpicker) / 2);
-
- cpicker->ext_draw_pad = LV_MATH_MAX(cpicker->ext_draw_pad, indic_pad);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /*Refresh extended draw area to make knob visible*/
- if(lv_obj_get_width(cpicker) != lv_area_get_width(param) ||
- lv_obj_get_height(cpicker) != lv_area_get_height(param)) {
- lv_obj_refresh_ext_draw_pad(cpicker);
- refr_indic_pos(cpicker);
- }
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- /*Refresh extended draw area to make knob visible*/
- lv_obj_refresh_ext_draw_pad(cpicker);
- refr_indic_pos(cpicker);
- }
- else if(sign == LV_SIGNAL_CONTROL) {
- uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
- if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- lv_color_hsv_t hsv_cur;
- hsv_cur = ext->hsv;
-
- switch(ext->color_mode) {
- case LV_CPICKER_COLOR_MODE_HUE:
- hsv_cur.h = (ext->hsv.h + 1) % 360;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- hsv_cur.s = (ext->hsv.s + 1) % 100;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- hsv_cur.v = (ext->hsv.v + 1) % 100;
- break;
- }
-
- if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
- res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- }
- else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- lv_color_hsv_t hsv_cur;
- hsv_cur = ext->hsv;
-
- switch(ext->color_mode) {
- case LV_CPICKER_COLOR_MODE_HUE:
- hsv_cur.h = ext->hsv.h > 0?(ext->hsv.h - 1) : 360;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- hsv_cur.s = ext->hsv.s > 0?(ext->hsv.s - 1) : 100;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- hsv_cur.v = ext->hsv.v > 0?(ext->hsv.v - 1) : 100;
- break;
- }
-
- if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
- res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- }
- }
- else if(sign == LV_SIGNAL_PRESSED) {
- ext->last_change_time = lv_tick_get();
- lv_indev_get_point(lv_indev_get_act(), &ext->last_press_point);
- res = double_click_reset(cpicker);
- if(res != LV_RES_OK) return res;
- } else if(sign == LV_SIGNAL_PRESSING) {
- lv_indev_t * indev = lv_indev_get_act();
- if(indev == NULL) return res;
-
- lv_point_t p;
- lv_indev_get_point(indev, &p);
-
- if((LV_MATH_ABS(p.x - ext->last_press_point.x) > indev->driver.drag_limit / 2) ||
- (LV_MATH_ABS(p.y - ext->last_press_point.y) > indev->driver.drag_limit / 2)) {
- ext->last_change_time = lv_tick_get();
- ext->last_press_point.x = p.x;
- ext->last_press_point.y = p.y;
- }
-
- p.x -= cpicker->coords.x1;
- p.y -= cpicker->coords.y1;
-
- /*Ignore pressing in the inner area*/
- uint16_t w = lv_obj_get_width(cpicker);
-
- int16_t angle = 0;
-
- if(ext->type == LV_CPICKER_TYPE_RECT) {
- /*If pressed long enough without change go to next color mode*/
- uint32_t diff = lv_tick_elaps(ext->last_change_time);
- if(diff > (uint32_t)indev->driver.long_press_time * 2 && !ext->color_mode_fixed) {
- next_color_mode(cpicker);
- lv_indev_wait_release(lv_indev_get_act());
- return res;
- }
-
- angle = (p.x * 360) / w;
- if(angle < 0) angle = 0;
- if(angle >= 360) angle = 359;
-
- } else if(ext->type == LV_CPICKER_TYPE_DISC) {
- const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
- lv_coord_t r_in = w / 2;
- p.x -= r_in;
- p.y -= r_in;
- r_in -= style_main->line.width;
-
- if(r_in > LV_DPI / 2) {
- r_in -= style_main->line.width; /* to let some sensitive space inside*/
-
- if(r_in < LV_DPI / 2) r_in = LV_DPI / 2;
- }
-
- /*If the inner area is being pressed, go to the next color mode on long press*/
- if(p.x * p.x + p.y * p.y < r_in * r_in) {
- uint32_t diff = lv_tick_elaps(ext->last_change_time);
- if(diff > indev->driver.long_press_time && !ext->color_mode_fixed) {
- next_color_mode(cpicker);
- lv_indev_wait_release(lv_indev_get_act());
- }
- return res;
- }
-
- angle = lv_atan2(p.x, p.y) % 360;
- }
-
- lv_color_hsv_t hsv_cur;
- hsv_cur = ext->hsv;
-
- switch(ext->color_mode) {
- case LV_CPICKER_COLOR_MODE_HUE:
- hsv_cur.h = angle;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- hsv_cur.s = (angle * 100) / 360;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- hsv_cur.v = (angle * 100) / 360;
- break;
- }
-
- if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
- res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- }
-
- return res;
-}
-
-static void next_color_mode(lv_obj_t * cpicker)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- ext->color_mode = (ext->color_mode + 1) % 3;
- refr_indic_pos(cpicker);
- lv_obj_invalidate(cpicker);
-}
-
-static void refr_indic_pos(lv_obj_t * cpicker)
-{
- invalidate_indic(cpicker);
-
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- lv_coord_t w = lv_obj_get_width(cpicker);
- lv_coord_t h = lv_obj_get_height(cpicker);
-
- if(ext->type == LV_CPICKER_TYPE_RECT) {
- lv_coord_t ind_pos = 0;
- switch(ext->color_mode) {
- case LV_CPICKER_COLOR_MODE_HUE:
- ind_pos += (ext->hsv.h * w) / 360;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- ind_pos += (ext->hsv.s * w) / 100;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- ind_pos += (ext->hsv.v * w) / 100;
- break;
- }
-
- ext->indic.pos.x = ind_pos;
- ext->indic.pos.y = h / 2;
- } else if(ext->type == LV_CPICKER_TYPE_DISC) {
- const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
- lv_coord_t r = w / 2 - style_main->line.width / 2;
- uint16_t angle = get_angle(cpicker);
- ext->indic.pos.x = (((int32_t)r * lv_trigo_sin(angle)) >> LV_TRIGO_SHIFT);
- ext->indic.pos.y = (((int32_t)r * lv_trigo_sin(angle + 90)) >> LV_TRIGO_SHIFT);
- ext->indic.pos.x = ext->indic.pos.x + w / 2;
- ext->indic.pos.y = ext->indic.pos.y + h / 2;
- }
-
- invalidate_indic(cpicker);
-}
-
-static lv_res_t double_click_reset(lv_obj_t * cpicker)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- lv_indev_t * indev = lv_indev_get_act();
- /*Double clicked? Use long press time as double click time out*/
- if(lv_tick_elaps(ext->last_click_time) < indev->driver.long_press_time) {
- lv_color_hsv_t hsv_cur;
- hsv_cur = ext->hsv;
-
- switch(ext->color_mode) {
- case LV_CPICKER_COLOR_MODE_HUE:
- hsv_cur.h = LV_CPICKER_DEF_HUE;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- hsv_cur.s = LV_CPICKER_DEF_SATURATION;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- hsv_cur.v = LV_CPICKER_DEF_VALUE;
- break;
- }
-
- if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
- lv_res_t res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- }
- ext->last_click_time = lv_tick_get();
-
- return LV_RES_OK;
-}
-
-static lv_color_t angle_to_mode_color(lv_obj_t * cpicker, uint16_t angle)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- lv_color_t color;
- switch(ext->color_mode)
- {
- default:
- case LV_CPICKER_COLOR_MODE_HUE:
- color = lv_color_hsv_to_rgb(angle % 360, ext->hsv.s, ext->hsv.v);
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- color = lv_color_hsv_to_rgb(ext->hsv.h, ((angle % 360) * 100) / 360, ext->hsv.v);
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- color = lv_color_hsv_to_rgb(ext->hsv.h, ext->hsv.s, ((angle % 360) * 100) / 360);
- break;
- }
- return color;
-}
-
-static uint16_t get_angle(lv_obj_t * cpicker)
-{
- lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
- uint16_t angle;
- switch(ext->color_mode)
- {
- default:
- case LV_CPICKER_COLOR_MODE_HUE:
- angle = ext->hsv.h;
- break;
- case LV_CPICKER_COLOR_MODE_SATURATION:
- angle = (ext->hsv.s * 360) / 100;
- break;
- case LV_CPICKER_COLOR_MODE_VALUE:
- angle = (ext->hsv.v * 360) / 100 ;
- break;
- }
- return angle;
-}
-
-#endif /* LV_USE_CPICKER != 0 */
diff --git a/src/libs/lvgl/src/lv_objx/lv_cpicker.h b/src/libs/lvgl/src/lv_objx/lv_cpicker.h
deleted file mode 100644
index a9feee5a..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_cpicker.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
- * @file lv_cpicker.h
- *
- */
-
-#ifndef LV_CPICKER_H
-#define LV_CPICKER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_CPICKER != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-enum {
- LV_CPICKER_TYPE_RECT,
- LV_CPICKER_TYPE_DISC,
-};
-typedef uint8_t lv_cpicker_type_t;
-
-enum {
- LV_CPICKER_COLOR_MODE_HUE,
- LV_CPICKER_COLOR_MODE_SATURATION,
- LV_CPICKER_COLOR_MODE_VALUE
-};
-typedef uint8_t lv_cpicker_color_mode_t;
-
-
-
-/*Data of colorpicker*/
-typedef struct {
- lv_color_hsv_t hsv;
- struct {
- lv_style_t * style;
- lv_point_t pos;
- uint8_t colored :1;
-
- } indic;
- uint32_t last_click_time;
- uint32_t last_change_time;
- lv_point_t last_press_point;
- lv_cpicker_color_mode_t color_mode :2;
- uint8_t color_mode_fixed :1;
- lv_cpicker_type_t type :1;
- uint8_t preview :1;
-} lv_cpicker_ext_t;
-
-/*Styles*/
-enum {
- LV_CPICKER_STYLE_MAIN,
- LV_CPICKER_STYLE_INDICATOR,
-};
-typedef uint8_t lv_cpicker_style_t;
-
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a colorpicker objects
- * @param par pointer to an object, it will be the parent of the new colorpicker
- * @param copy pointer to a colorpicker object, if not NULL then the new object will be copied from it
- * @return pointer to the created colorpicker
- */
-lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new type for a colorpicker
- * @param cpicker pointer to a colorpicker object
- * @param type new type of the colorpicker (from 'lv_cpicker_type_t' enum)
- */
-void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type);
-
-/**
- * Set a style of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_t *style);
-
-/**
- * Set the current hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param hue current selected hue [0..360]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue);
-
-/**
- * Set the current saturation of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param saturation current selected saturation [0..100]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation);
-
-/**
- * Set the current value of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param val current selected value [0..100]
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val);
-
-/**
- * Set the current hsv of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param hsv current selected hsv
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv);
-
-/**
- * Set the current color of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param color current selected color
- * @return true if changed, otherwise false
- */
-bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color);
-
-/**
- * Set the current color mode.
- * @param cpicker pointer to colorpicker object
- * @param mode color mode (hue/sat/val)
- */
-void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode);
-
-/**
- * Set if the color mode is changed on long press on center
- * @param cpicker pointer to colorpicker object
- * @param fixed color mode cannot be changed on long press
- */
-void lv_cpicker_set_color_mode_fixed(lv_obj_t * cpicker, bool fixed);
-
-/**
- * Make the indicator to be colored to the current color
- * @param cpicker pointer to colorpicker object
- * @param en true: color the indicator; false: not color the indicator
- */
-void lv_cpicker_set_indic_colored(lv_obj_t * cpicker, bool en);
-
-/**
- * Add a color preview in the middle of the DISC type color picker
- * @param cpicker pointer to colorpicker object
- * @param en true: enable preview; false: disable preview
- */
-void lv_cpicker_set_preview(lv_obj_t * cpicker, bool en);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the current color mode.
- * @param cpicker pointer to colorpicker object
- * @return color mode (hue/sat/val)
- */
-lv_cpicker_color_mode_t lv_cpicker_get_color_mode(lv_obj_t * cpicker);
-
-/**
- * Get if the color mode is changed on long press on center
- * @param cpicker pointer to colorpicker object
- * @return mode cannot be changed on long press
- */
-bool lv_cpicker_get_color_mode_fixed(lv_obj_t * cpicker);
-
-/**
- * Get style of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @param type which style should be get
- * @return pointer to the style
- */
-const lv_style_t * lv_cpicker_get_style(const lv_obj_t * cpicker, lv_cpicker_style_t type);
-
-/**
- * Get the current hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected hue
- */
-uint16_t lv_cpicker_get_hue(lv_obj_t * cpicker);
-
-/**
- * Get the current saturation of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected saturation
- */
-uint8_t lv_cpicker_get_saturation(lv_obj_t * cpicker);
-
-/**
- * Get the current hue of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected value
- */
-uint8_t lv_cpicker_get_value(lv_obj_t * cpicker);
-
-/**
- * Get the current selected hsv of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected hsv
- */
-lv_color_hsv_t lv_cpicker_get_hsv(lv_obj_t * cpicker);
-
-/**
- * Get the current selected color of a colorpicker.
- * @param cpicker pointer to colorpicker object
- * @return current selected color
- */
-lv_color_t lv_cpicker_get_color(lv_obj_t * cpicker);
-
-/**
- * Whether the indicator is colored to the current color or not
- * @param cpicker pointer to colorpicker object
- * @return true: color the indicator; false: not color the indicator
- */
-bool lv_cpicker_get_indic_colored(lv_obj_t * cpicker);
-
-/**
- * Whether the preview is enabled or not
- * @param cpicker pointer to colorpicker object
- * @return en true: preview is enabled; false: preview is disabled
- */
-bool lv_cpicker_get_preview(lv_obj_t * cpicker);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_CPICKER*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_CPICKER_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_ddlist.c b/src/libs/lvgl/src/lv_objx/lv_ddlist.c
deleted file mode 100644
index fb57cd2f..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_ddlist.c
+++ /dev/null
@@ -1,1032 +0,0 @@
-/**
- * @file lv_ddlist.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_ddlist.h"
-#if LV_USE_DDLIST != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_font/lv_symbol_def.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_math.h"
-#include <string.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_ddlist"
-
-#if LV_USE_ANIMATION == 0
-#undef LV_DDLIST_DEF_ANIM_TIME
-#define LV_DDLIST_DEF_ANIM_TIME 0 /*No animation*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * param);
-static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
-static lv_res_t release_handler(lv_obj_t * ddlist);
-static void lv_ddlist_refr_size(lv_obj_t * ddlist, lv_anim_enable_t anim);
-static void lv_ddlist_pos_current_option(lv_obj_t * ddlist);
-static void lv_ddlist_refr_width(lv_obj_t * ddlist);
-#if LV_USE_ANIMATION
-static void lv_ddlist_anim_ready_cb(lv_anim_t * a);
-static void lv_ddlist_anim_finish(lv_obj_t * ddlist);
-static void lv_ddlist_adjust_height(lv_obj_t * ddlist, lv_anim_value_t height);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_signal_cb_t ancestor_scrl_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a drop down list objects
- * @param par pointer to an object, it will be the parent of the new drop down list
- * @param copy pointer to a drop down list object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created drop down list
- */
-lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("drop down list create started");
-
- /*Create the ancestor drop down list*/
- lv_obj_t * new_ddlist = lv_page_create(par, copy);
- LV_ASSERT_MEM(new_ddlist);
- if(new_ddlist == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_ddlist);
- if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_ddlist));
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_ddlist);
-
- /*Allocate the drop down list type specific extended data*/
- lv_ddlist_ext_t * ext = lv_obj_allocate_ext_attr(new_ddlist, sizeof(lv_ddlist_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->label = NULL;
- ext->opened = 0;
- ext->fix_height = 0;
- ext->sel_opt_id = 0;
- ext->sel_opt_id_ori = 0;
- ext->option_cnt = 0;
- ext->sel_style = &lv_style_plain_color;
- ext->draw_arrow = 0; /*Do not draw arrow by default*/
- ext->stay_open = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_ddlist, lv_ddlist_signal);
- lv_obj_set_signal_cb(lv_page_get_scrl(new_ddlist), lv_ddlist_scrl_signal);
- lv_obj_set_design_cb(new_ddlist, lv_ddlist_design);
-
- /*Init the new drop down list drop down list*/
- if(copy == NULL) {
- lv_page_set_anim_time(new_ddlist, LV_DDLIST_DEF_ANIM_TIME);
-
- lv_obj_t * scrl = lv_page_get_scrl(new_ddlist);
- lv_obj_set_drag(scrl, false);
- lv_page_set_scrl_fit2(new_ddlist, LV_FIT_FILL, LV_FIT_TIGHT);
-
- /*Save (a later restore) the original X coordinate because it changes as the FITs applies*/
- lv_coord_t x;
- if(lv_obj_get_base_dir(new_ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(new_ddlist) + lv_obj_get_width(new_ddlist);
- else x = lv_obj_get_x(new_ddlist);
-
- ext->label = lv_label_create(new_ddlist, NULL);
- lv_cont_set_fit2(new_ddlist, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_page_set_sb_mode(new_ddlist, LV_SB_MODE_HIDE);
- lv_page_set_style(new_ddlist, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);
-
- lv_ddlist_set_options(new_ddlist, "Option 1\nOption 2\nOption 3");
-
- /*Restore the original X coordinate*/
- if(lv_obj_get_base_dir(new_ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(new_ddlist, x - lv_obj_get_width(new_ddlist));
- else lv_obj_set_x(new_ddlist, x);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, th->style.ddlist.bg);
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, th->style.ddlist.sel);
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, th->style.ddlist.sb);
- } else {
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, &lv_style_pretty);
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, &lv_style_plain_color);
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, &lv_style_pretty_color);
- }
-
-
- }
- /*Copy an existing drop down list*/
- else {
- lv_ddlist_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->label = lv_label_create(new_ddlist, copy_ext->label);
- lv_label_set_text(ext->label, lv_label_get_text(copy_ext->label));
- ext->sel_opt_id = copy_ext->sel_opt_id;
- ext->sel_opt_id_ori = copy_ext->sel_opt_id;
- ext->fix_height = copy_ext->fix_height;
- ext->option_cnt = copy_ext->option_cnt;
- ext->sel_style = copy_ext->sel_style;
- ext->draw_arrow = copy_ext->draw_arrow;
- ext->stay_open = copy_ext->stay_open;
-
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, lv_ddlist_get_style(copy, LV_DDLIST_STYLE_BG));
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, lv_ddlist_get_style(copy, LV_DDLIST_STYLE_SB));
- lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, lv_ddlist_get_style(copy, LV_DDLIST_STYLE_SEL));
-
- }
-
- LV_LOG_INFO("drop down list created");
-
- return new_ddlist;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the options in a drop down list from a string
- * @param ddlist pointer to drop down list object
- * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
- */
-void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
- LV_ASSERT_STR(options);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*Count the '\n'-s to determine the number of options*/
- ext->option_cnt = 0;
- uint16_t i;
- for(i = 0; options[i] != '\0'; i++) {
- if(options[i] == '\n') ext->option_cnt++;
- }
- ext->option_cnt++; /*Last option has no `\n`*/
- ext->sel_opt_id = 0;
- ext->sel_opt_id_ori = 0;
-
- lv_label_set_text(ext->label, options);
-
- lv_ddlist_refr_width(ddlist);
-
- lv_label_align_t align = lv_label_get_align(ext->label);
- switch(align) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-
- lv_ddlist_refr_size(ddlist, false);
-}
-
-/**
- * Set the selected option
- * @param ddlist pointer to drop down list object
- * @param sel_opt id of the selected option (0 ... number of option - 1);
- */
-void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- if(ext->sel_opt_id == sel_opt) return;
-
- ext->sel_opt_id = sel_opt < ext->option_cnt ? sel_opt : ext->option_cnt - 1;
- ext->sel_opt_id_ori = ext->sel_opt_id;
- /*Move the list to show the current option*/
- if(ext->opened == 0) {
- lv_ddlist_pos_current_option(ddlist);
- } else {
- lv_obj_invalidate(ddlist);
- }
-}
-
-/**
- * Set a fix height for the drop down list
- * If 0 then the opened ddlist will be auto. sized else the set height will be applied.
- * @param ddlist pointer to a drop down list
- * @param h the height when the list is opened (0: auto size)
- */
-void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- if(ext->fix_height == h) return;
-
- ext->fix_height = h;
-
- lv_ddlist_refr_size(ddlist, false);
-}
-
-/**
- * Set a fix width for the drop down list
- * @param ddlist pointer to a drop down list
- * @param w the width when the list is opened (0: auto size)
- */
-void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- if(w == 0) {
- lv_cont_set_fit2(ddlist, LV_FIT_TIGHT, lv_cont_get_fit_bottom(ddlist));
- } else {
- lv_cont_set_fit2(ddlist, LV_FIT_NONE, lv_cont_get_fit_bottom(ddlist));
- lv_obj_set_width(ddlist, w);
- }
-
- switch(lv_label_get_align(ext->label)) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-
- lv_ddlist_refr_size(ddlist, false);
-}
-
-/**
- * Set arrow draw in a drop down list
- * @param ddlist pointer to drop down list object
- * @param en enable/disable a arrow draw. E.g. "true" for draw.
- */
-void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*Set the flag*/
- ext->draw_arrow = en ? 1 : 0;
-}
-
-/**
- * Leave the list opened when a new value is selected
- * @param ddlist pointer to drop down list object
- * @param en enable/disable "stay open" feature
- */
-void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*Set the flag*/
- ext->stay_open = en ? 1 : 0;
-}
-
-/**
- * Set a style of a drop down list
- * @param ddlist pointer to a drop down list object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- switch(type) {
- case LV_DDLIST_STYLE_BG:
- lv_page_set_style(ddlist, LV_PAGE_STYLE_BG, style);
- lv_ddlist_refr_width(ddlist);
- break;
- case LV_DDLIST_STYLE_SB: lv_page_set_style(ddlist, LV_PAGE_STYLE_SB, style); break;
- case LV_DDLIST_STYLE_SEL:
- ext->sel_style = style;
- lv_obj_t * scrl = lv_page_get_scrl(ddlist);
- lv_obj_refresh_ext_draw_pad(scrl); /*Because of the wider selected rectangle*/
- break;
- }
-}
-
-void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- lv_label_set_align(ext->label, align);
- switch(align) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-}
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the options of a drop down list
- * @param ddlist pointer to drop down list object
- * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
- */
-const char * lv_ddlist_get_options(const lv_obj_t * ddlist)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- return lv_label_get_text(ext->label);
-}
-
-/**
- * Get the selected option
- * @param ddlist pointer to drop down list object
- * @return id of the selected option (0 ... number of option - 1);
- */
-uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- return ext->sel_opt_id;
-}
-
-/**
- * Get the current selected option as a string
- * @param ddlist pointer to ddlist object
- * @param buf pointer to an array to store the string
- * @param buf_size size of `buf` in bytes. 0: to ignore it.
- */
-void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t buf_size)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- uint16_t i;
- uint16_t line = 0;
- const char * opt_txt = lv_label_get_text(ext->label);
- size_t txt_len = strlen(opt_txt);
-
- for(i = 0; i < txt_len && line != ext->sel_opt_id; i++) {
- if(opt_txt[i] == '\n') line++;
- }
-
- uint16_t c;
- for(c = 0; opt_txt[i] != '\n' && i < txt_len; c++, i++) {
- if(buf_size && c >= buf_size - 1) {
- LV_LOG_WARN("lv_ddlist_get_selected_str: the buffer was too small")
- break;
- }
- buf[c] = opt_txt[i];
- }
-
- buf[c] = '\0';
-}
-
-/**
- * Get the fix height value.
- * @param ddlist pointer to a drop down list object
- * @return the height if the ddlist is opened (0: auto size)
- */
-lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- return ext->fix_height;
-}
-
-/**
- * Get arrow draw in a drop down list
- * @param ddlist pointer to drop down list object
- */
-bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- return ext->draw_arrow ? true : false;
-}
-
-/**
- * Get whether the drop down list stay open after selecting a value or not
- * @param ddlist pointer to drop down list object
- */
-bool lv_ddlist_get_stay_open(lv_obj_t * ddlist)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- return ext->stay_open ? true : false;
-}
-
-/**
- * Get a style of a drop down list
- * @param ddlist pointer to a drop down list object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_style_t type)
-{
- LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- switch(type) {
- case LV_DDLIST_STYLE_BG: return lv_page_get_style(ddlist, LV_PAGE_STYLE_BG);
- case LV_DDLIST_STYLE_SB: return lv_page_get_style(ddlist, LV_PAGE_STYLE_SB);
- case LV_DDLIST_STYLE_SEL: return ext->sel_style;
- default: return NULL;
- }
-
- /*To avoid warning*/
- return NULL;
-}
-
-lv_label_align_t lv_ddlist_get_align(const lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- return lv_label_get_align(ext->label);
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Open the drop down list with or without animation
- * @param ddlist pointer to drop down list object
- * @param anim_en LV_ANIM_EN: use animation; LV_ANIM_OFF: not use animations
- */
-void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
-{
-#if LV_USE_ANIMATION == 0
- anim = false;
-#endif
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- ext->opened = 1;
- lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
- lv_ddlist_refr_size(ddlist, anim);
-}
-
-/**
- * Close (Collapse) the drop down list
- * @param ddlist pointer to drop down list object
- * @param anim_en LV_ANIM_ON: use animation; LV_ANIM_OFF: not use animations
- */
-void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim)
-{
-#if LV_USE_ANIMATION == 0
- anim = false;
-#endif
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- ext->opened = 0;
- lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
- lv_ddlist_refr_size(ddlist, anim);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Get the text alignment flag for a drop down list.
- * @param ddlist drop down list
- * @return text alignment flag
- */
-static lv_txt_flag_t lv_ddlist_get_txt_flag(const lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*The label might be already deleted so just return with some value*/
- if(!ext->label) return LV_TXT_FLAG_CENTER;
-
- lv_label_align_t align = lv_label_get_align(ext->label);
-
- switch(align) {
- default:
- case LV_LABEL_ALIGN_LEFT: return LV_TXT_FLAG_NONE;
- case LV_LABEL_ALIGN_CENTER: return LV_TXT_FLAG_CENTER;
- case LV_LABEL_ALIGN_RIGHT: return LV_TXT_FLAG_RIGHT;
- }
-}
-
-/**
- * Handle the drawing related tasks of the drop down lists
- * @param ddlist pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(ddlist, mask, mode);
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- ancestor_design(ddlist, mask, mode);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(ddlist);
- /*If the list is opened draw a rectangle under the selected item*/
- if(ext->opened != 0 || ext->force_sel) {
- const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
- const lv_font_t * font = style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
-
- /*Draw the selected*/
- lv_area_t rect_area;
- rect_area.y1 = ext->label->coords.y1;
- rect_area.y1 += ext->sel_opt_id * (font_h + style->text.line_space);
- rect_area.y1 -= style->text.line_space / 2;
-
- rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
- rect_area.x1 = ddlist->coords.x1;
- rect_area.x2 = ddlist->coords.x2;
-
- lv_draw_rect(&rect_area, mask, ext->sel_style, opa_scale);
- }
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- /*Redraw the text on the selected area with a different color*/
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(ddlist);
-
- /*Redraw only in opened state*/
- if(ext->opened || ext->force_sel) {
- const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
- const lv_font_t * font = style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
-
- lv_area_t area_sel;
- area_sel.y1 = ext->label->coords.y1;
- area_sel.y1 += ext->sel_opt_id * (font_h + style->text.line_space);
- area_sel.y1 -= style->text.line_space / 2;
-
- area_sel.y2 = area_sel.y1 + font_h + style->text.line_space - 1;
- area_sel.x1 = ddlist->coords.x1;
- area_sel.x2 = ddlist->coords.x2;
- lv_area_t mask_sel;
- bool area_ok;
- area_ok = lv_area_intersect(&mask_sel, mask, &area_sel);
- if(area_ok) {
- const lv_style_t * sel_style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_SEL);
- lv_style_t new_style;
- lv_style_copy(&new_style, style);
- new_style.text.color = sel_style->text.color;
- new_style.text.opa = sel_style->text.opa;
- lv_txt_flag_t flag = lv_ddlist_get_txt_flag(ddlist);
- lv_draw_label(&ext->label->coords, &mask_sel, &new_style, opa_scale, lv_label_get_text(ext->label),
- flag, NULL, NULL, NULL, lv_obj_get_base_dir(ddlist));
- }
- }
-
- /*Add a down symbol in ddlist when closed*/
- else {
- /*Draw a arrow in ddlist if enabled*/
- if(ext->draw_arrow) {
- const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
- const lv_font_t * font = style->text.font;
- const lv_style_t * sel_style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
- lv_coord_t font_h = lv_font_get_line_height(font);
- lv_style_t new_style;
- lv_style_copy(&new_style, style);
- new_style.text.color = sel_style->text.color;
- new_style.text.opa = sel_style->text.opa;
- lv_area_t area_arrow;
- lv_coord_t arrow_width = lv_txt_get_width(LV_SYMBOL_DOWN, (uint16_t)strlen(LV_SYMBOL_DOWN), sel_style->text.font, 0, 0);
- if(lv_label_get_align(ext->label) != LV_LABEL_ALIGN_RIGHT) {
- area_arrow.x2 = ddlist->coords.x2 - style->body.padding.right;
- area_arrow.x1 = area_arrow.x2 - arrow_width;
- } else {
- area_arrow.x1 = ddlist->coords.x1 + style->body.padding.left;
- area_arrow.x2 = area_arrow.x1 + arrow_width;
- }
-
- area_arrow.y1 = ddlist->coords.y1 + style->text.line_space;
- area_arrow.y2 = area_arrow.y1 + font_h;
-
- lv_area_t mask_arrow;
- bool area_ok;
- area_ok = lv_area_intersect(&mask_arrow, mask, &area_arrow);
- if(area_ok) {
- /*Use a down arrow in ddlist, you can replace it with yourcustom symbol*/
- lv_draw_label(&area_arrow, &mask_arrow, &new_style, opa_scale, LV_SYMBOL_DOWN, LV_TXT_FLAG_NONE,
- NULL, NULL, NULL, lv_obj_get_base_dir(ddlist));
- }
- }
- }
- /*Draw the scrollbar in the ancestor page design function*/
- ancestor_design(ddlist, mask, mode);
- }
-
- return true;
-}
-
-/**
- * Signal function of the drop down list
- * @param ddlist pointer to a drop down list object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * param)
-{
- lv_res_t res;
- /* Include the ancient signal function */
- res = ancestor_signal(ddlist, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- if(sign == LV_SIGNAL_STYLE_CHG) {
- lv_ddlist_refr_size(ddlist, 0);
- } else if(sign == LV_SIGNAL_BASE_DIR_CHG) {
- lv_label_align_t align = lv_label_get_align(ext->label);
- switch(align) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-
- lv_ddlist_refr_size(ddlist, 0);
- } else if(sign == LV_SIGNAL_CLEANUP) {
- ext->label = NULL;
- } else if(sign == LV_SIGNAL_FOCUS) {
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(ddlist);
- bool editing = lv_group_get_editing(g);
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
-
- /*Encoders need special handling*/
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- /*Open the list if editing*/
- if(editing) {
- ext->opened = true;
- ext->sel_opt_id_ori = ext->sel_opt_id;
- lv_ddlist_refr_size(ddlist, true);
- }
- /*Close the lift if navigating*/
- else {
- ext->opened = false;
- ext->sel_opt_id = ext->sel_opt_id_ori;
- lv_ddlist_refr_size(ddlist, true);
- }
- } else {
- /*Open the list if closed*/
- if(!ext->opened) {
- ext->opened = true;
- ext->sel_opt_id_ori = ext->sel_opt_id; /*Save the current value. Used to revert this
- state if ENER wont't be pressed*/
- lv_ddlist_refr_size(ddlist, true);
- }
- }
-#endif
- } else if(sign == LV_SIGNAL_RELEASED) {
- release_handler(ddlist);
- } else if(sign == LV_SIGNAL_DEFOCUS) {
- if(ext->opened) {
- ext->opened = false;
- ext->sel_opt_id = ext->sel_opt_id_ori;
- lv_ddlist_refr_size(ddlist, true);
- }
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
- if(!ext->opened) {
- ext->opened = 1;
- lv_ddlist_refr_size(ddlist, true);
- }
-
- if(ext->sel_opt_id + 1 < ext->option_cnt) {
- ext->sel_opt_id++;
- lv_ddlist_pos_current_option(ddlist);
- lv_obj_invalidate(ddlist);
- }
- } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
- if(!ext->opened) {
- ext->opened = 1;
- lv_ddlist_refr_size(ddlist, true);
- }
- if(ext->sel_opt_id > 0) {
- ext->sel_opt_id--;
- lv_ddlist_pos_current_option(ddlist);
- lv_obj_invalidate(ddlist);
- }
- } else if(c == LV_KEY_ESC) {
- if(ext->opened) {
- ext->opened = 0;
- ext->sel_opt_id = ext->sel_opt_id_ori;
- lv_ddlist_refr_size(ddlist, true);
- }
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- }
-
- return res;
-}
-
-/**
- * Signal function of the drop down list's scrollable part
- * @param scrl pointer to a drop down list's scrollable part
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_scrl_signal(scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * ddlist = lv_obj_get_parent(scrl);
-
- if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- /*TODO review this*/
- /* Because of the wider selected rectangle ext. size
- * In this way by dragging the scrollable part the wider rectangle area can be redrawn too*/
- const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
- lv_coord_t hpad = LV_MATH_MAX(style->body.padding.left, style->body.padding.right);
- if(scrl->ext_draw_pad < hpad) scrl->ext_draw_pad = hpad;
- } else if(sign == LV_SIGNAL_RELEASED) {
- if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
- release_handler(ddlist);
- }
- } else if(sign == LV_SIGNAL_CLEANUP) {
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- ext->label = NULL; /*The label is already deleted*/
- }
-
- return res;
-}
-
-/**
- * Called when a drop down list is released to open it or set new option
- * @param ddlist pointer to a drop down list object
- * @return LV_ACTION_RES_INV if the ddlist it deleted in the user callback else LV_ACTION_RES_OK
- */
-static lv_res_t release_handler(lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*Only deal with clickable drop down lists*/
- if(!lv_obj_get_click(ddlist))
- return LV_RES_OK;
-
- if(ext->opened == 0) { /*Open the list*/
- ext->opened = 1;
- lv_obj_set_drag(lv_page_get_scrl(ddlist), true);
- lv_ddlist_refr_size(ddlist, true);
- } else {
-
- lv_indev_t * indev = lv_indev_get_act();
-#if LV_USE_GROUP
- /*Leave edit mode once a new item is selected*/
- if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
- ext->sel_opt_id_ori = ext->sel_opt_id;
- lv_group_t * g = lv_obj_get_group(ddlist);
- if(lv_group_get_editing(g)) {
- lv_group_set_editing(g, false);
- }
- }
-#endif
-
- /*Search the clicked option (For KEYPAD and ENCODER the new value should be already set)*/
- if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
- lv_point_t p;
- lv_indev_get_point(indev, &p);
- p.y -= ext->label->coords.y1;
- p.x -= ext->label->coords.x1;
- uint16_t letter_i;
- letter_i = lv_label_get_letter_on(ext->label, &p);
-
- uint16_t new_opt = 0;
- const char * txt = lv_label_get_text(ext->label);
- uint32_t i = 0;
- uint32_t i_prev = 0;
-
- uint32_t letter_cnt = 0;
- uint32_t letter;
- for(letter_cnt = 0; letter_cnt < letter_i; letter_cnt++) {
- letter = lv_txt_encoded_next(txt, &i);
- /*Count he lines to reach the clicked letter. But ignore the last '\n' because it
- * still belongs to the clicked line*/
- if(letter == '\n' && i_prev != letter_i) new_opt++;
- i_prev = i;
- }
-
- ext->sel_opt_id = new_opt;
- ext->sel_opt_id_ori = ext->sel_opt_id;
- }
-
- uint32_t id = ext->sel_opt_id; /*Just to use uint32_t in event data*/
- lv_res_t res = lv_event_send(ddlist, LV_EVENT_VALUE_CHANGED, &id);
- if(res != LV_RES_OK) return res;
-
- if(ext->stay_open == 0) {
- ext->opened = 0;
- lv_obj_set_drag(lv_page_get_scrl(ddlist), false);
- lv_ddlist_refr_size(ddlist, true);
- } else {
- lv_obj_invalidate(ddlist);
- }
- }
-
- return LV_RES_OK;
-}
-
-/**
- * Refresh the size of drop down list according to its status (open or closed)
- * @param ddlist pointer to a drop down list object
- * @param anim Change the size (open/close) with or without animation (true/false)
- */
-static void lv_ddlist_refr_size(lv_obj_t * ddlist, lv_anim_enable_t anim)
-{
-#if LV_USE_ANIMATION == 0
- anim = false;
-#endif
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- const lv_style_t * style = lv_obj_get_style(ddlist);
- lv_coord_t new_height;
-
- /*Open the list*/
- if(ext->opened) {
- if(ext->fix_height == 0) {
- new_height =
- lv_obj_get_height(lv_page_get_scrl(ddlist)) + style->body.padding.top + style->body.padding.bottom;
- } else {
- new_height = ext->fix_height;
- }
-
- }
- /*Close the list*/
- else {
- const lv_font_t * font = style->text.font;
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
- lv_coord_t font_h = lv_font_get_line_height(font);
- new_height = font_h + 2 * label_style->text.line_space;
-
- lv_page_set_sb_mode(ddlist, LV_SB_MODE_HIDE);
- }
-
- if(anim == LV_ANIM_OFF) {
- lv_obj_set_height(ddlist, new_height);
- lv_ddlist_pos_current_option(ddlist);
- if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
-#if LV_USE_ANIMATION
- lv_anim_del(ddlist, (lv_anim_exec_xcb_t)lv_ddlist_adjust_height); /*If an animation is in progress then
- it will overwrite this changes*/
-
- /*Force animation complete to fix highlight selection*/
- lv_ddlist_anim_finish(ddlist);
- } else {
- /*Run the animation only if the the size will be different*/
- if(lv_obj_get_height(ddlist) != new_height) {
- lv_anim_t a;
- a.var = ddlist;
- a.start = lv_obj_get_height(ddlist);
- a.end = new_height;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_ddlist_adjust_height;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_ddlist_anim_ready_cb;
- a.act_time = 0;
- a.time = lv_ddlist_get_anim_time(ddlist);
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
-
- ext->force_sel = 1; /*Keep the list item selected*/
- lv_anim_create(&a);
- }
-#endif
- }
-}
-
-#if LV_USE_ANIMATION
-/**
- * Position the list and remove the selection highlight if it's closed.
- * Called at end of list animation.
- * @param a pointer to the animation
- */
-static void lv_ddlist_anim_ready_cb(lv_anim_t * a)
-{
- lv_obj_t * ddlist = a->var;
- lv_ddlist_anim_finish(ddlist);
-}
-
-/**
- * Clean up after the open animation
- * @param ddlist
- */
-static void lv_ddlist_anim_finish(lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- lv_ddlist_pos_current_option(ddlist);
- ext->force_sel = 0; /*Turn off drawing of selection*/
- if(ext->opened) lv_page_set_sb_mode(ddlist, LV_SB_MODE_UNHIDE);
-}
-
-/**
- * Adjusts the ddlist's height and then positions the option within it's new height.
- * This keeps the option visible during animation.
- * @param ddlist Drop down list object
- * @param height New drop down list height
- */
-static void lv_ddlist_adjust_height(lv_obj_t * ddlist, lv_anim_value_t height)
-{
- lv_obj_set_height(ddlist, height);
- lv_ddlist_pos_current_option(ddlist);
-}
-#endif
-
-/**
- * Set the position of list when it is closed to show the selected item
- * @param ddlist pointer to a drop down list
- */
-static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- const lv_style_t * style = lv_obj_get_style(ddlist);
- const lv_font_t * font = style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
- lv_obj_t * scrl = lv_page_get_scrl(ddlist);
-
- lv_coord_t h = lv_obj_get_height(ddlist);
- lv_coord_t line_y1 =
- ext->sel_opt_id * (font_h + label_style->text.line_space) + ext->label->coords.y1 - scrl->coords.y1;
-
- lv_obj_set_y(scrl, -line_y1 + (h - font_h) / 2);
- lv_obj_invalidate(ddlist);
-}
-
-/**
- * Be sure the width of the scrollable exactly fits the ddlist
- * @param ddlist pointer to a ddlist
- */
-static void lv_ddlist_refr_width(lv_obj_t * ddlist)
-{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
-
- /*Save the current x coordinate because it should be kept after the refrsh*/
- lv_coord_t x;
- if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(ddlist) + lv_obj_get_width(ddlist);
- else x = lv_obj_get_x(ddlist);
-
- /*Set the TIGHT fit horizontally the set the width to the content*/
- lv_page_set_scrl_fit2(ddlist, LV_FIT_TIGHT, lv_page_get_scrl_fit_bottom(ddlist));
-
- /*Revert FILL fit to fill the parent with the options area. It allows to RIGHT/CENTER align the text*/
- lv_page_set_scrl_fit2(ddlist, LV_FIT_FILL, lv_page_get_scrl_fit_bottom(ddlist));
-
- if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(ddlist, x - lv_obj_get_width(ddlist));
- else lv_obj_set_x(ddlist, x);
-
- switch(lv_label_get_align(ext->label)) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_ddlist.h b/src/libs/lvgl/src/lv_objx/lv_ddlist.h
deleted file mode 100644
index ee6c1f70..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_ddlist.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/**
- * @file lv_ddlist.h
- *
- */
-
-#ifndef LV_DDLIST_H
-#define LV_DDLIST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_DDLIST != 0
-
-/*Testing of dependencies*/
-#if LV_USE_PAGE == 0
-#error "lv_ddlist: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_ddlist: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_objx/lv_page.h"
-#include "../lv_objx/lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of drop down list*/
-typedef struct
-{
- lv_page_ext_t page; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * label; /*Label for the options*/
- const lv_style_t * sel_style; /*Style of the selected option*/
- uint16_t option_cnt; /*Number of options*/
- uint16_t sel_opt_id; /*Index of the current option*/
- uint16_t sel_opt_id_ori; /*Store the original index on focus*/
- uint8_t opened : 1; /*1: The list is opened (handled by the library)*/
- uint8_t force_sel : 1; /*1: Keep the selection highlight even if the list is closed*/
- uint8_t draw_arrow : 1; /*1: Draw arrow*/
- uint8_t stay_open : 1; /*1: Don't close the list when a new item is selected*/
- lv_coord_t fix_height; /*Height of the ddlist when opened. (0: auto-size)*/
-} lv_ddlist_ext_t;
-
-enum {
- LV_DDLIST_STYLE_BG,
- LV_DDLIST_STYLE_SEL,
- LV_DDLIST_STYLE_SB,
-};
-typedef uint8_t lv_ddlist_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-/**
- * Create a drop down list objects
- * @param par pointer to an object, it will be the parent of the new drop down list
- * @param copy pointer to a drop down list object, if not NULL then the new object will be copied
- * from it
- * @return pointer to the created drop down list
- */
-lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the options in a drop down list from a string
- * @param ddlist pointer to drop down list object
- * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
- */
-void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options);
-
-/**
- * Set the selected option
- * @param ddlist pointer to drop down list object
- * @param sel_opt id of the selected option (0 ... number of option - 1);
- */
-void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt);
-
-/**
- * Set a fix height for the drop down list
- * If 0 then the opened ddlist will be auto. sized else the set height will be applied.
- * @param ddlist pointer to a drop down list
- * @param h the height when the list is opened (0: auto size)
- */
-void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h);
-
-/**
- * Set a fix width for the drop down list
- * @param ddlist pointer to a drop down list
- * @param w the width when the list is opened (0: auto size)
- */
-void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w);
-
-/**
- * Set arrow draw in a drop down list
- * @param ddlist pointer to drop down list object
- * @param en enable/disable a arrow draw. E.g. "true" for draw.
- */
-void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en);
-
-/**
- * Leave the list opened when a new value is selected
- * @param ddlist pointer to drop down list object
- * @param en enable/disable "stay open" feature
- */
-void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en);
-
-/**
- * Set the scroll bar mode of a drop down list
- * @param ddlist pointer to a drop down list object
- * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
- */
-static inline void lv_ddlist_set_sb_mode(lv_obj_t * ddlist, lv_sb_mode_t mode)
-{
- lv_page_set_sb_mode(ddlist, mode);
-}
-/**
- * Set the open/close animation time.
- * @param ddlist pointer to a drop down list
- * @param anim_time: open/close animation time [ms]
- */
-static inline void lv_ddlist_set_anim_time(lv_obj_t * ddlist, uint16_t anim_time)
-{
- lv_page_set_anim_time(ddlist, anim_time);
-}
-
-/**
- * Set a style of a drop down list
- * @param ddlist pointer to a drop down list object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_style_t * style);
-
-/**
- * Set the alignment of the labels in a drop down list
- * @param ddlist pointer to a drop down list object
- * @param align alignment of labels
- */
-void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the options of a drop down list
- * @param ddlist pointer to drop down list object
- * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
- */
-const char * lv_ddlist_get_options(const lv_obj_t * ddlist);
-
-/**
- * Get the selected option
- * @param ddlist pointer to drop down list object
- * @return id of the selected option (0 ... number of option - 1);
- */
-uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist);
-
-/**
- * Get the current selected option as a string
- * @param ddlist pointer to ddlist object
- * @param buf pointer to an array to store the string
- * @param buf_size size of `buf` in bytes. 0: to ignore it.
- */
-void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t buf_size);
-
-/**
- * Get the fix height value.
- * @param ddlist pointer to a drop down list object
- * @return the height if the ddlist is opened (0: auto size)
- */
-lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist);
-
-/**
- * Get arrow draw in a drop down list
- * @param ddlist pointer to drop down list object
- */
-bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist);
-
-/**
- * Get whether the drop down list stay open after selecting a value or not
- * @param ddlist pointer to drop down list object
- */
-bool lv_ddlist_get_stay_open(lv_obj_t * ddlist);
-
-/**
- * Get the scroll bar mode of a drop down list
- * @param ddlist pointer to a drop down list object
- * @return scrollbar mode from 'lv_page_sb_mode_t' enum
- */
-static inline lv_sb_mode_t lv_ddlist_get_sb_mode(const lv_obj_t * ddlist)
-{
- return lv_page_get_sb_mode(ddlist);
-}
-
-/**
- * Get the open/close animation time.
- * @param ddlist pointer to a drop down list
- * @return open/close animation time [ms]
- */
-static inline uint16_t lv_ddlist_get_anim_time(const lv_obj_t * ddlist)
-{
- return lv_page_get_anim_time(ddlist);
-}
-
-/**
- * Get a style of a drop down list
- * @param ddlist pointer to a drop down list object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_style_t type);
-
-/**
- * Get the alignment of the labels in a drop down list
- * @param ddlist pointer to a drop down list object
- * @return alignment of labels
- */
-lv_label_align_t lv_ddlist_get_align(const lv_obj_t * ddlist);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Open the drop down list with or without animation
- * @param ddlist pointer to drop down list object
- * @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
- */
-void lv_ddlist_open(lv_obj_t * ddlist, lv_anim_enable_t anim);
-
-/**
- * Close (Collapse) the drop down list
- * @param ddlist pointer to drop down list object
- * @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
- */
-void lv_ddlist_close(lv_obj_t * ddlist, lv_anim_enable_t anim);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_DDLIST*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DDLIST_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_gauge.c b/src/libs/lvgl/src/lv_objx/lv_gauge.c
deleted file mode 100644
index 7191d832..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_gauge.c
+++ /dev/null
@@ -1,473 +0,0 @@
-/**
- * @file lv_gauge.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_gauge.h"
-#if LV_USE_GAUGE != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_txt.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_utils.h"
-#include <stdio.h>
-#include <string.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_gauge"
-
-#define LV_GAUGE_DEF_NEEDLE_COLOR LV_COLOR_RED
-#define LV_GAUGE_DEF_LABEL_COUNT 6
-#define LV_GAUGE_DEF_LINE_COUNT 21 /*Should be: ((label_cnt - 1) * internal_lines) + 1*/
-#define LV_GAUGE_DEF_ANGLE 220
-#define LV_GAUGE_INTERPOLATE_SHIFT 5 /*Interpolate the needle drawing between to degrees*/
-#define LV_GAUGE_INTERPOLATE_MASK 0x1F
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param);
-static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask);
-static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a gauge objects
- * @param par pointer to an object, it will be the parent of the new gauge
- * @param copy pointer to a gauge object, if not NULL then the new object will be copied from it
- * @return pointer to the created gauge
- */
-lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("gauge create started");
-
- /*Create the ancestor gauge*/
- lv_obj_t * new_gauge = lv_lmeter_create(par, copy);
- LV_ASSERT_MEM(new_gauge);
- if(new_gauge == NULL) return NULL;
-
- /*Allocate the gauge type specific extended data*/
- lv_gauge_ext_t * ext = lv_obj_allocate_ext_attr(new_gauge, sizeof(lv_gauge_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->needle_count = 0;
- ext->values = NULL;
- ext->needle_colors = NULL;
- ext->label_count = LV_GAUGE_DEF_LABEL_COUNT;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_gauge);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_gauge);
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_gauge, lv_gauge_signal);
- lv_obj_set_design_cb(new_gauge, lv_gauge_design);
-
- /*Init the new gauge gauge*/
- if(copy == NULL) {
- lv_gauge_set_scale(new_gauge, LV_GAUGE_DEF_ANGLE, LV_GAUGE_DEF_LINE_COUNT, LV_GAUGE_DEF_LABEL_COUNT);
- lv_gauge_set_needle_count(new_gauge, 1, NULL);
- lv_gauge_set_critical_value(new_gauge, 80);
- lv_obj_set_size(new_gauge, 2 * LV_DPI, 2 * LV_DPI);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_gauge_set_style(new_gauge, LV_GAUGE_STYLE_MAIN, th->style.gauge);
- } else {
- lv_gauge_set_style(new_gauge, LV_GAUGE_STYLE_MAIN, &lv_style_pretty_color);
- }
- }
- /*Copy an existing gauge*/
- else {
- lv_gauge_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- lv_gauge_set_needle_count(new_gauge, copy_ext->needle_count, copy_ext->needle_colors);
-
- uint8_t i;
- for(i = 0; i < ext->needle_count; i++) {
- ext->values[i] = copy_ext->values[i];
- }
- ext->label_count = copy_ext->label_count;
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_gauge);
- }
-
- LV_LOG_INFO("gauge created");
-
- return new_gauge;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the number of needles
- * @param gauge pointer to gauge object
- * @param needle_cnt new count of needles
- * @param colors an array of colors for needles (with 'num' elements)
- */
-void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[])
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
-
- if(ext->needle_count != needle_cnt) {
- if(ext->values != NULL) {
- lv_mem_free(ext->values);
- ext->values = NULL;
- }
-
- ext->values = lv_mem_realloc(ext->values, needle_cnt * sizeof(int16_t));
- LV_ASSERT_MEM(ext->values);
- if(ext->values == NULL) return;
-
- int16_t min = lv_gauge_get_min_value(gauge);
- uint8_t n;
- for(n = ext->needle_count; n < needle_cnt; n++) {
- ext->values[n] = min;
- }
-
- ext->needle_count = needle_cnt;
- }
-
- ext->needle_colors = colors;
- lv_obj_invalidate(gauge);
-}
-
-/**
- * Set the value of a needle
- * @param gauge pointer to a gauge
- * @param needle_id the id of the needle
- * @param value the new value
- */
-void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value)
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
-
- if(needle_id >= ext->needle_count) return;
- if(ext->values[needle_id] == value) return;
-
- int16_t min = lv_gauge_get_min_value(gauge);
- int16_t max = lv_gauge_get_max_value(gauge);
-
- if(value > max)
- value = max;
- else if(value < min)
- value = min;
-
- ext->values[needle_id] = value;
-
- lv_obj_invalidate(gauge);
-}
-
-/**
- * Set the scale settings of a gauge
- * @param gauge pointer to a gauge object
- * @param angle angle of the scale (0..360)
- * @param line_cnt count of scale lines.
- * The get a given "subdivision" lines between label, `line_cnt` = (sub_div + 1) * (label_cnt - 1) +
- * 1
- * @param label_cnt count of scale labels.
- */
-void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt)
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_lmeter_set_scale(gauge, angle, line_cnt);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- ext->label_count = label_cnt;
- lv_obj_invalidate(gauge);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a needle
- * @param gauge pointer to gauge object
- * @param needle the id of the needle
- * @return the value of the needle [min,max]
- */
-int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle)
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- int16_t min = lv_gauge_get_min_value(gauge);
-
- if(needle >= ext->needle_count) return min;
-
- return ext->values[needle];
-}
-
-/**
- * Get the count of needles on a gauge
- * @param gauge pointer to gauge
- * @return count of needles
- */
-uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge)
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- return ext->needle_count;
-}
-
-/**
- * Set the number of labels (and the thicker lines too)
- * @param gauge pointer to a gauge object
- * @return count of labels
- */
-uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge)
-{
- LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- return ext->label_count;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the gauges
- * @param gauge pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
-
- /* Store the real pointer because of 'lv_group'
- * If the object is in focus 'lv_obj_get_style()' will give a pointer to tmp style
- * and to the real object style. It is important because of style change tricks below*/
- const lv_style_t * style_ori_p = gauge->style_p;
- const lv_style_t * style = lv_obj_get_style(gauge);
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
-
- lv_gauge_draw_scale(gauge, mask);
-
- /*Draw the ancestor line meter with max value to show the rainbow like line colors*/
- uint16_t line_cnt_tmp = ext->lmeter.line_cnt;
- ancestor_design(gauge, mask, mode); /*To draw lines*/
-
- /*Temporally modify the line meter to draw longer lines where labels are*/
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style);
- ext->lmeter.line_cnt = ext->label_count; /*Only to labels*/
- style_tmp.body.padding.left = style_tmp.body.padding.left * 2; /*Longer lines*/
- style_tmp.body.padding.right = style_tmp.body.padding.right * 2; /*Longer lines*/
- gauge->style_p = &style_tmp;
-
- ancestor_design(gauge, mask, mode); /*To draw lines*/
-
- ext->lmeter.line_cnt = line_cnt_tmp; /*Restore the parameters*/
- gauge->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
-
- lv_gauge_draw_needle(gauge, mask);
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(gauge, mask, mode);
- }
-
- return true;
-}
-
-/**
- * Signal function of the gauge
- * @param gauge pointer to a gauge object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(gauge, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- if(sign == LV_SIGNAL_CLEANUP) {
- lv_mem_free(ext->values);
- ext->values = NULL;
- }
-
- return res;
-}
-
-/**
- * Draw the scale on a gauge
- * @param gauge pointer to gauge object
- * @param mask mask of drawing
- */
-static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask)
-{
- char scale_txt[16];
-
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- const lv_style_t * style = lv_obj_get_style(gauge);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(gauge);
- lv_coord_t r = lv_obj_get_width(gauge) / 2 - (3 * style->body.padding.left) - style->body.padding.inner;
- lv_coord_t x_ofs = lv_obj_get_width(gauge) / 2 + gauge->coords.x1;
- lv_coord_t y_ofs = lv_obj_get_height(gauge) / 2 + gauge->coords.y1;
- int16_t scale_angle = lv_lmeter_get_scale_angle(gauge);
- uint16_t label_num = ext->label_count;
- int16_t angle_ofs = 90 + (360 - scale_angle) / 2;
- int16_t min = lv_gauge_get_min_value(gauge);
- int16_t max = lv_gauge_get_max_value(gauge);
-
- uint8_t i;
- for(i = 0; i < label_num; i++) {
- /*Calculate the position a scale label*/
- int16_t angle = (i * scale_angle) / (label_num - 1) + angle_ofs;
-
- lv_coord_t y = (int32_t)((int32_t)lv_trigo_sin(angle) * r) / LV_TRIGO_SIN_MAX;
- y += y_ofs;
-
- lv_coord_t x = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r) / LV_TRIGO_SIN_MAX;
- x += x_ofs;
-
- int16_t scale_act = (int32_t)((int32_t)(max - min) * i) / (label_num - 1);
- scale_act += min;
- lv_utils_num_to_str(scale_act, scale_txt);
-
- lv_area_t label_cord;
- lv_point_t label_size;
- lv_txt_get_size(&label_size, scale_txt, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, LV_TXT_FLAG_NONE);
-
- /*Draw the label*/
- label_cord.x1 = x - label_size.x / 2;
- label_cord.y1 = y - label_size.y / 2;
- label_cord.x2 = label_cord.x1 + label_size.x;
- label_cord.y2 = label_cord.y1 + label_size.y;
-
- lv_draw_label(&label_cord, mask, style, opa_scale, scale_txt, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(gauge));
- }
-}
-/**
- * Draw the needles of a gauge
- * @param gauge pointer to gauge object
- * @param mask mask of drawing
- */
-static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask)
-{
- lv_style_t style_needle;
- lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- const lv_style_t * style = lv_gauge_get_style(gauge, LV_GAUGE_STYLE_MAIN);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(gauge);
-
- lv_coord_t r = lv_obj_get_width(gauge) / 2 - style->body.padding.left;
- lv_coord_t x_ofs = lv_obj_get_width(gauge) / 2 + gauge->coords.x1;
- lv_coord_t y_ofs = lv_obj_get_height(gauge) / 2 + gauge->coords.y1;
- uint16_t angle = lv_lmeter_get_scale_angle(gauge);
- int16_t angle_ofs = 90 + (360 - angle) / 2;
- int16_t min = lv_gauge_get_min_value(gauge);
- int16_t max = lv_gauge_get_max_value(gauge);
- lv_point_t p_mid;
- lv_point_t p_end;
- lv_point_t p_end_low;
- lv_point_t p_end_high;
- uint8_t i;
-
- lv_style_copy(&style_needle, style);
-
- p_mid.x = x_ofs;
- p_mid.y = y_ofs;
- for(i = 0; i < ext->needle_count; i++) {
- /*Calculate the end point of a needle*/
- int16_t needle_angle =
- (ext->values[i] - min) * angle * (1 << LV_GAUGE_INTERPOLATE_SHIFT) / (max - min);
-
- int16_t needle_angle_low = (needle_angle >> LV_GAUGE_INTERPOLATE_SHIFT) + angle_ofs;
- int16_t needle_angle_high = needle_angle_low + 1;
-
- p_end_low.y = (lv_trigo_sin(needle_angle_low) * r) / LV_TRIGO_SIN_MAX + y_ofs;
- p_end_low.x = (lv_trigo_sin(needle_angle_low + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
-
- p_end_high.y = (lv_trigo_sin(needle_angle_high) * r) / LV_TRIGO_SIN_MAX + y_ofs;
- p_end_high.x = (lv_trigo_sin(needle_angle_high + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
-
- uint16_t rem = needle_angle & ((1 << LV_GAUGE_INTERPOLATE_SHIFT) - 1);
- int16_t x_mod = ((LV_MATH_ABS(p_end_high.x - p_end_low.x)) * rem) >> LV_GAUGE_INTERPOLATE_SHIFT;
- int16_t y_mod = ((LV_MATH_ABS(p_end_high.y - p_end_low.y)) * rem) >> LV_GAUGE_INTERPOLATE_SHIFT;
-
- if(p_end_high.x < p_end_low.x) x_mod = -x_mod;
- if(p_end_high.y < p_end_low.y) y_mod = -y_mod;
-
- p_end.x = p_end_low.x + x_mod;
- p_end.y = p_end_low.y + y_mod;
-
- /*Draw the needle with the corresponding color*/
- if(ext->needle_colors == NULL)
- style_needle.line.color = LV_GAUGE_DEF_NEEDLE_COLOR;
- else
- style_needle.line.color = ext->needle_colors[i];
-
- lv_draw_line(&p_mid, &p_end, mask, &style_needle, opa_scale);
- }
-
- /*Draw the needle middle area*/
- lv_style_t style_neddle_mid;
- lv_style_copy(&style_neddle_mid, &lv_style_plain);
- style_neddle_mid.body.main_color = style->body.border.color;
- style_neddle_mid.body.grad_color = style->body.border.color;
- style_neddle_mid.body.radius = LV_RADIUS_CIRCLE;
-
- lv_area_t nm_cord;
- nm_cord.x1 = x_ofs - style->body.radius;
- nm_cord.y1 = y_ofs - style->body.radius;
- nm_cord.x2 = x_ofs + style->body.radius;
- nm_cord.y2 = y_ofs + style->body.radius;
-
- lv_draw_rect(&nm_cord, mask, &style_neddle_mid, lv_obj_get_opa_scale(gauge));
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_gauge.h b/src/libs/lvgl/src/lv_objx/lv_gauge.h
deleted file mode 100644
index 408c1125..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_gauge.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * @file lv_gauge.h
- *
- */
-
-#ifndef LV_GAUGE_H
-#define LV_GAUGE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_GAUGE != 0
-
-/*Testing of dependencies*/
-#if LV_USE_LMETER == 0
-#error "lv_gauge: lv_lmeter is required. Enable it in lv_conf.h (LV_USE_LMETER 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_lmeter.h"
-#include "lv_label.h"
-#include "lv_line.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of gauge*/
-typedef struct
-{
- lv_lmeter_ext_t lmeter; /*Ext. of ancestor*/
- /*New data for this type */
- int16_t * values; /*Array of the set values (for needles) */
- const lv_color_t * needle_colors; /*Color of the needles (lv_color_t my_colors[needle_num])*/
- uint8_t needle_count; /*Number of needles*/
- uint8_t label_count; /*Number of labels on the scale*/
-} lv_gauge_ext_t;
-
-/*Styles*/
-enum {
- LV_GAUGE_STYLE_MAIN,
-};
-typedef uint8_t lv_gauge_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a gauge objects
- * @param par pointer to an object, it will be the parent of the new gauge
- * @param copy pointer to a gauge object, if not NULL then the new object will be copied from it
- * @return pointer to the created gauge
- */
-lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the number of needles
- * @param gauge pointer to gauge object
- * @param needle_cnt new count of needles
- * @param colors an array of colors for needles (with 'num' elements)
- */
-void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[]);
-
-/**
- * Set the value of a needle
- * @param gauge pointer to a gauge
- * @param needle_id the id of the needle
- * @param value the new value
- */
-void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value);
-
-/**
- * Set minimum and the maximum values of a gauge
- * @param gauge pointer to he gauge object
- * @param min minimum value
- * @param max maximum value
- */
-static inline void lv_gauge_set_range(lv_obj_t * gauge, int16_t min, int16_t max)
-{
- lv_lmeter_set_range(gauge, min, max);
-}
-
-/**
- * Set a critical value on the scale. After this value 'line.color' scale lines will be drawn
- * @param gauge pointer to a gauge object
- * @param value the critical value
- */
-static inline void lv_gauge_set_critical_value(lv_obj_t * gauge, int16_t value)
-{
- lv_lmeter_set_value(gauge, value);
-}
-
-/**
- * Set the scale settings of a gauge
- * @param gauge pointer to a gauge object
- * @param angle angle of the scale (0..360)
- * @param line_cnt count of scale lines.
- * The get a given "subdivision" lines between label, `line_cnt` = (sub_div + 1) * (label_cnt - 1) +
- * 1
- * @param label_cnt count of scale labels.
- */
-void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt);
-
-/**
- * Set the styles of a gauge
- * @param gauge pointer to a gauge object
- * @param type which style should be set (can be only `LV_GAUGE_STYLE_MAIN`)
- * @param style set the style of the gauge
- * */
-static inline void lv_gauge_set_style(lv_obj_t * gauge, lv_gauge_style_t type, lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(gauge, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a needle
- * @param gauge pointer to gauge object
- * @param needle the id of the needle
- * @return the value of the needle [min,max]
- */
-int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle);
-
-/**
- * Get the count of needles on a gauge
- * @param gauge pointer to gauge
- * @return count of needles
- */
-uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge);
-
-/**
- * Get the minimum value of a gauge
- * @param gauge pointer to a gauge object
- * @return the minimum value of the gauge
- */
-static inline int16_t lv_gauge_get_min_value(const lv_obj_t * lmeter)
-{
- return lv_lmeter_get_min_value(lmeter);
-}
-
-/**
- * Get the maximum value of a gauge
- * @param gauge pointer to a gauge object
- * @return the maximum value of the gauge
- */
-static inline int16_t lv_gauge_get_max_value(const lv_obj_t * lmeter)
-{
- return lv_lmeter_get_max_value(lmeter);
-}
-
-/**
- * Get a critical value on the scale.
- * @param gauge pointer to a gauge object
- * @return the critical value
- */
-static inline int16_t lv_gauge_get_critical_value(const lv_obj_t * gauge)
-{
- return lv_lmeter_get_value(gauge);
-}
-
-/**
- * Set the number of labels (and the thicker lines too)
- * @param gauge pointer to a gauge object
- * @return count of labels
- */
-uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge);
-
-/**
- * Get the scale number of a gauge
- * @param gauge pointer to a gauge object
- * @return number of the scale units
- */
-static inline uint16_t lv_gauge_get_line_count(const lv_obj_t * gauge)
-{
- return lv_lmeter_get_line_count(gauge);
-}
-
-/**
- * Get the scale angle of a gauge
- * @param gauge pointer to a gauge object
- * @return angle of the scale
- */
-static inline uint16_t lv_gauge_get_scale_angle(const lv_obj_t * gauge)
-{
- return lv_lmeter_get_scale_angle(gauge);
-}
-
-/**
- * Get the style of a gauge
- * @param gauge pointer to a gauge object
- * @param type which style should be get (can be only `LV_GAUGE_STYLE_MAIN`)
- * @return pointer to the gauge's style
- */
-static inline const lv_style_t * lv_gauge_get_style(const lv_obj_t * gauge, lv_gauge_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(gauge);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_GAUGE*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_GAUGE_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_img.c b/src/libs/lvgl/src/lv_objx/lv_img.c
deleted file mode 100644
index bf0269f9..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_img.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/**
- * @file lv_img.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_img.h"
-#if LV_USE_IMG != 0
-
-/*Testing of dependencies*/
-#if LV_USE_LABEL == 0
-#error "lv_img: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_draw/lv_img_decoder.h"
-#include "../lv_misc/lv_fs.h"
-#include "../lv_misc/lv_txt.h"
-#include "../lv_misc/lv_log.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_img"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create an image objects
- * @param par pointer to an object, it will be the parent of the new button
- * @param copy pointer to a image object, if not NULL then the new object will be copied from it
- * @return pointer to the created image
- */
-lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("image create started");
-
- lv_obj_t * new_img = NULL;
-
- /*Create a basic object*/
- new_img = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_img);
- if(new_img == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_img);
-
- /*Extend the basic object to image object*/
- lv_img_ext_t * ext = lv_obj_allocate_ext_attr(new_img, sizeof(lv_img_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->src = NULL;
- ext->src_type = LV_IMG_SRC_UNKNOWN;
- ext->cf = LV_IMG_CF_UNKNOWN;
- ext->w = lv_obj_get_width(new_img);
- ext->h = lv_obj_get_height(new_img);
- ext->auto_size = 1;
- ext->offset.x = 0;
- ext->offset.y = 0;
-
- /*Init the new object*/
- lv_obj_set_signal_cb(new_img, lv_img_signal);
- lv_obj_set_design_cb(new_img, lv_img_design);
-
- if(copy == NULL) {
- lv_obj_set_click(new_img, false);
- /* Enable auto size for non screens
- * because image screens are wallpapers
- * and must be screen sized*/
- if(par != NULL) {
- ext->auto_size = 1;
- lv_obj_set_style(new_img, NULL); /*Inherit the style by default*/
- } else {
- ext->auto_size = 0;
- lv_obj_set_style(new_img, &lv_style_plain); /*Set a style for screens*/
- }
- } else {
- lv_img_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->auto_size = copy_ext->auto_size;
- lv_img_set_src(new_img, copy_ext->src);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_img);
- }
-
- LV_LOG_INFO("image created");
-
- return new_img;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the pixel map to display by the image
- * @param img pointer to an image object
- * @param data the image data
- */
-void lv_img_set_src(lv_obj_t * img, const void * src_img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_src_t src_type = lv_img_src_get_type(src_img);
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
-#if LV_USE_LOG && LV_LOG_LEVEL >= LV_LOG_LEVEL_INFO
- switch(src_type) {
- case LV_IMG_SRC_FILE: LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_FILE` type found"); break;
- case LV_IMG_SRC_VARIABLE: LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_VARIABLE` type found"); break;
- case LV_IMG_SRC_SYMBOL: LV_LOG_TRACE("lv_img_set_src: `LV_IMG_SRC_SYMBOL` type found"); break;
- default: LV_LOG_WARN("lv_img_set_src: unknown type");
- }
-#endif
-
- /*If the new source type is unknown free the memories of the old source*/
- if(src_type == LV_IMG_SRC_UNKNOWN) {
- LV_LOG_WARN("lv_img_set_src: unknown image type");
- if(ext->src_type == LV_IMG_SRC_SYMBOL || ext->src_type == LV_IMG_SRC_FILE) {
- lv_mem_free(ext->src);
- }
- ext->src = NULL;
- ext->src_type = LV_IMG_SRC_UNKNOWN;
- return;
- }
-
- lv_img_header_t header;
- lv_img_decoder_get_info(src_img, &header);
-
- /*Save the source*/
- if(src_type == LV_IMG_SRC_VARIABLE) {
- LV_LOG_INFO("lv_img_set_src: `LV_IMG_SRC_VARIABLE` type found");
-
- /*If memory was allocated because of the previous `src_type` then free it*/
- if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
- lv_mem_free(ext->src);
- }
- ext->src = src_img;
- } else if(src_type == LV_IMG_SRC_FILE || src_type == LV_IMG_SRC_SYMBOL) {
- /* If the new and the old src are the same then it was only a refresh.*/
- if(ext->src != src_img) {
- const void * old_src = NULL;
- /* If memory was allocated because of the previous `src_type` then save its pointer and free after allocation.
- * It's important to allocate first to be sure the new data will be on a new address.
- * Else `img_cache` wouldn't see the change in source.*/
- if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
- old_src = ext->src;
- }
- char * new_str = lv_mem_alloc(strlen(src_img) + 1);
- LV_ASSERT_MEM(new_str);
- if(new_str == NULL) return;
- strcpy(new_str, src_img);
- ext->src = new_str;
-
- if(old_src) lv_mem_free(old_src);
- }
- }
-
- if(src_type == LV_IMG_SRC_SYMBOL) {
- /*`lv_img_dsc_get_info` couldn't set the with and height of a font so set it here*/
- const lv_style_t * style = lv_img_get_style(img, LV_IMG_STYLE_MAIN);
- lv_point_t size;
- lv_txt_get_size(&size, src_img, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, LV_TXT_FLAG_NONE);
- header.w = size.x;
- header.h = size.y;
- }
-
- ext->src_type = src_type;
- ext->w = header.w;
- ext->h = header.h;
- ext->cf = header.cf;
-
- if(lv_img_get_auto_size(img) != false) {
- lv_obj_set_size(img, ext->w, ext->h);
- }
-
- lv_obj_invalidate(img);
-}
-
-/**
- * Enable the auto size feature.
- * If enabled the object size will be same as the picture size.
- * @param img pointer to an image
- * @param en true: auto size enable, false: auto size disable
- */
-void lv_img_set_auto_size(lv_obj_t * img, bool en)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- ext->auto_size = (en == false ? 0 : 1);
-}
-
-/**
- * Set an offset for the source of an image.
- * so the image will be displayed from the new origin.
- * @param img pointer to an image
- * @param x: the new offset along x axis.
- */
-void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- if(x < ext->w - 1) {
- ext->offset.x = x;
- lv_obj_invalidate(img);
- }
-}
-
-/**
- * Set an offset for the source of an image.
- * so the image will be displayed from the new origin.
- * @param img pointer to an image
- * @param y: the new offset along y axis.
- */
-void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- if(y < ext->h - 1) {
- ext->offset.y = y;
- lv_obj_invalidate(img);
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the source of the image
- * @param img pointer to an image object
- * @return the image source (symbol, file name or C array)
- */
-const void * lv_img_get_src(lv_obj_t * img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- return ext->src;
-}
-
-/**
- * Get the name of the file set for an image
- * @param img pointer to an image
- * @return file name
- */
-const char * lv_img_get_file_name(const lv_obj_t * img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- if(ext->src_type == LV_IMG_SRC_FILE)
- return ext->src;
- else
- return "";
-}
-
-/**
- * Get the auto size enable attribute
- * @param img pointer to an image
- * @return true: auto size is enabled, false: auto size is disabled
- */
-bool lv_img_get_auto_size(const lv_obj_t * img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- return ext->auto_size == 0 ? false : true;
-}
-
-/**
- * Get the offset.x attribute of the img object.
- * @param img pointer to an image
- * @return offset.x value.
- */
-lv_coord_t lv_img_get_offset_x(lv_obj_t * img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- return ext->offset.x;
-}
-
-/**
- * Get the offset.y attribute of the img object.
- * @param img pointer to an image
- * @return offset.y value.
- */
-lv_coord_t lv_img_get_offset_y(lv_obj_t * img)
-{
- LV_ASSERT_OBJ(img, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- return ext->offset.y;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the images
- * @param img pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode_t mode)
-{
- const lv_style_t * style = lv_obj_get_style(img);
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
-
- if(mode == LV_DESIGN_COVER_CHK) {
- bool cover = false;
- if(ext->src_type == LV_IMG_SRC_UNKNOWN || ext->src_type == LV_IMG_SRC_SYMBOL) return false;
-
- if(ext->cf == LV_IMG_CF_TRUE_COLOR || ext->cf == LV_IMG_CF_RAW) cover = lv_area_is_in(mask, &img->coords);
-
- const lv_style_t * style = lv_img_get_style(img, LV_IMG_STYLE_MAIN);
- if(style->image.opa < LV_OPA_MAX) return false;
-
- return cover;
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- if(ext->h == 0 || ext->w == 0) return true;
- lv_area_t coords;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(img);
-
- lv_obj_get_coords(img, &coords);
-
- if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_VARIABLE) {
- coords.x1 -= ext->offset.x;
- coords.y1 -= ext->offset.y;
-
- LV_LOG_TRACE("lv_img_design: start to draw image");
- lv_area_t cords_tmp;
- cords_tmp.y1 = coords.y1;
- cords_tmp.y2 = coords.y1 + ext->h - 1;
-
- for(; cords_tmp.y1 <= coords.y2; cords_tmp.y1 += ext->h, cords_tmp.y2 += ext->h) {
- cords_tmp.x1 = coords.x1;
- cords_tmp.x2 = coords.x1 + ext->w - 1;
- for(; cords_tmp.x1 <= coords.x2; cords_tmp.x1 += ext->w, cords_tmp.x2 += ext->w) {
- lv_draw_img(&cords_tmp, mask, ext->src, style, opa_scale);
- }
- }
- } else if(ext->src_type == LV_IMG_SRC_SYMBOL) {
- LV_LOG_TRACE("lv_img_design: start to draw symbol");
- lv_style_t style_mod;
- lv_style_copy(&style_mod, style);
- style_mod.text.color = style->image.color;
- lv_draw_label(&coords, mask, &style_mod, opa_scale, ext->src, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(img));
- } else {
- /*Trigger the error handler of image drawer*/
- LV_LOG_WARN("lv_img_design: image source type is unknown");
- lv_draw_img(&img->coords, mask, NULL, style, opa_scale);
- }
- }
-
- return true;
-}
-
-/**
- * Signal function of the image
- * @param img pointer to an image object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(img, sign, param);
- if(res != LV_RES_OK) return res;
-
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
- if(sign == LV_SIGNAL_CLEANUP) {
- if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
- lv_mem_free(ext->src);
- ext->src = NULL;
- ext->src_type = LV_IMG_SRC_UNKNOWN;
- }
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- /*Refresh the file name to refresh the symbol text size*/
- if(ext->src_type == LV_IMG_SRC_SYMBOL) {
- lv_img_set_src(img, ext->src);
- }
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_img.h b/src/libs/lvgl/src/lv_objx/lv_img.h
deleted file mode 100644
index d1e14d20..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_img.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * @file lv_img.h
- *
- */
-
-#ifndef LV_IMG_H
-#define LV_IMG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_IMG != 0
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_misc/lv_fs.h"
-#include "lv_label.h"
-#include "../lv_draw/lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of image*/
-typedef struct
-{
- /*No inherited ext. because inherited from the base object*/ /*Ext. of ancestor*/
- /*New data for this type */
- const void * src; /*Image source: Pointer to an array or a file or a symbol*/
- lv_point_t offset;
- lv_coord_t w; /*Width of the image (Handled by the library)*/
- lv_coord_t h; /*Height of the image (Handled by the library)*/
- uint8_t src_type : 2; /*See: lv_img_src_t*/
- uint8_t auto_size : 1; /*1: automatically set the object size to the image size*/
- uint8_t cf : 5; /*Color format from `lv_img_color_format_t`*/
-} lv_img_ext_t;
-
-/*Styles*/
-enum {
- LV_IMG_STYLE_MAIN,
-};
-typedef uint8_t lv_img_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create an image objects
- * @param par pointer to an object, it will be the parent of the new button
- * @param copy pointer to a image object, if not NULL then the new object will be copied from it
- * @return pointer to the created image
- */
-lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the pixel map to display by the image
- * @param img pointer to an image object
- * @param data the image data
- */
-void lv_img_set_src(lv_obj_t * img, const void * src_img);
-
-/**
- * Enable the auto size feature.
- * If enabled the object size will be same as the picture size.
- * @param img pointer to an image
- * @param en true: auto size enable, false: auto size disable
- */
-void lv_img_set_auto_size(lv_obj_t * img, bool autosize_en);
-
-/**
- * Set an offset for the source of an image.
- * so the image will be displayed from the new origin.
- * @param img pointer to an image
- * @param x: the new offset along x axis.
- */
-void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x);
-
-/**
- * Set an offset for the source of an image.
- * so the image will be displayed from the new origin.
- * @param img pointer to an image
- * @param y: the new offset along y axis.
- */
-void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y);
-
-/**
- * Set the style of an image
- * @param img pointer to an image object
- * @param type which style should be set (can be only `LV_IMG_STYLE_MAIN`)
- * @param style pointer to a style
- */
-static inline void lv_img_set_style(lv_obj_t * img, lv_img_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(img, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the source of the image
- * @param img pointer to an image object
- * @return the image source (symbol, file name or C array)
- */
-const void * lv_img_get_src(lv_obj_t * img);
-
-/**
- * Get the name of the file set for an image
- * @param img pointer to an image
- * @return file name
- */
-const char * lv_img_get_file_name(const lv_obj_t * img);
-
-/**
- * Get the auto size enable attribute
- * @param img pointer to an image
- * @return true: auto size is enabled, false: auto size is disabled
- */
-bool lv_img_get_auto_size(const lv_obj_t * img);
-
-/**
- * Get the offset.x attribute of the img object.
- * @param img pointer to an image
- * @return offset.x value.
- */
-lv_coord_t lv_img_get_offset_x(lv_obj_t * img);
-
-/**
- * Get the offset.y attribute of the img object.
- * @param img pointer to an image
- * @return offset.y value.
- */
-lv_coord_t lv_img_get_offset_y(lv_obj_t * img);
-
-/**
- * Get the style of an image object
- * @param img pointer to an image object
- * @param type which style should be get (can be only `LV_IMG_STYLE_MAIN`)
- * @return pointer to the image's style
- */
-static inline const lv_style_t * lv_img_get_style(const lv_obj_t * img, lv_img_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(img);
-}
-
-/**********************
- * MACROS
- **********************/
-
-/*Use this macro to declare an image in a c file*/
-#define LV_IMG_DECLARE(var_name) extern const lv_img_dsc_t var_name;
-
-#endif /*LV_USE_IMG*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_IMG_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_imgbtn.c b/src/libs/lvgl/src/lv_objx/lv_imgbtn.c
deleted file mode 100644
index 522df301..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_imgbtn.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/**
- * @file lv_imgbtn.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "../lv_core/lv_debug.h"
-#include "lv_imgbtn.h"
-#include "lv_label.h"
-
-#if LV_USE_IMGBTN != 0
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_imgbtn"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param);
-static void refr_img(lv_obj_t * imgbtn);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a image button object
- * @param par pointer to an object, it will be the parent of the new image button
- * @param copy pointer to a image button object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created image button
- */
-lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("image button create started");
-
- /*Create the ancestor of image button*/
- lv_obj_t * new_imgbtn = lv_btn_create(par, copy);
- LV_ASSERT_MEM(new_imgbtn);
- if(new_imgbtn == NULL) return NULL;
-
- /*Allocate the image button type specific extended data*/
- lv_imgbtn_ext_t * ext = lv_obj_allocate_ext_attr(new_imgbtn, sizeof(lv_imgbtn_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_imgbtn);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_imgbtn);
-
- /*Initialize the allocated 'ext' */
-#if LV_IMGBTN_TILED == 0
- memset((void*)ext->img_src, 0, sizeof(ext->img_src));
-#else
- memset(ext->img_src_left, 0, sizeof(ext->img_src_left));
- memset(ext->img_src_mid, 0, sizeof(ext->img_src_mid));
- memset(ext->img_src_right, 0, sizeof(ext->img_src_right));
-#endif
-
- ext->act_cf = LV_IMG_CF_UNKNOWN;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_imgbtn, lv_imgbtn_signal);
- lv_obj_set_design_cb(new_imgbtn, lv_imgbtn_design);
-
- /*Init the new image button image button*/
- if(copy == NULL) {
-
- }
- /*Copy an existing image button*/
- else {
- lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
-#if LV_IMGBTN_TILED == 0
- memcpy((void*)ext->img_src, copy_ext->img_src, sizeof(ext->img_src));
-#else
- memcpy((void*)ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left));
- memcpy((void*)ext->img_src_mid, copy_ext->img_src_mid, sizeof(ext->img_src_mid));
- memcpy((void*)ext->img_src_right, copy_ext->img_src_right, sizeof(ext->img_src_right));
-#endif
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_imgbtn);
- }
-
- LV_LOG_INFO("image button created");
-
- return new_imgbtn;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-#if LV_IMGBTN_TILED == 0
-/**
- * Set images for a state of the image button
- * @param imgbtn pointer to an image button object
- * @param state for which state set the new image (from `lv_btn_state_t`) `
- * @param src pointer to an image source (a C array or path to a file)
- */
-void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- ext->img_src[state] = src;
-
- refr_img(imgbtn);
-}
-
-#else
-/**
- * Set images for a state of the image button
- * @param imgbtn pointer to an image button object
- * @param state for which state set the new image (from `lv_btn_state_t`) `
- * @param src_left pointer to an image source for the left side of the button (a C array or path to
- * a file)
- * @param src_mid pointer to an image source for the middle of the button (ideally 1px wide) (a C
- * array or path to a file)
- * @param src_right pointer to an image source for the right side of the button (a C array or path
- * to a file)
- */
-void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
- const void * src_right)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
-
- if(lv_img_src_get_type(src_left) == LV_IMG_SRC_SYMBOL ||
- lv_img_src_get_type(src_mid) == LV_IMG_SRC_SYMBOL ||
- lv_img_src_get_type(src_right) == LV_IMG_SRC_SYMBOL )
- {
- LV_LOG_WARN("lv_imgbtn_set_src: symbols are not supported in tiled mode");
- return;
- }
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- ext->img_src_left[state] = src_left;
- ext->img_src_mid[state] = src_mid;
- ext->img_src_right[state] = src_right;
-
- refr_img(imgbtn);
-}
-
-#endif
-
-/**
- * Set a style of a image button.
- * @param imgbtn pointer to image button object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_btn_set_style(imgbtn, type, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-#if LV_IMGBTN_TILED == 0
-/**
- * Get the images in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to an image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- return ext->img_src[state];
-}
-#else
-
-/**
- * Get the left image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the left image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_left(lv_obj_t * imgbtn, lv_btn_state_t state)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- return ext->img_src_left[state];
-}
-
-/**
- * Get the middle image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the middle image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_middle(lv_obj_t * imgbtn, lv_btn_state_t state)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- return ext->img_src_mid[state];
-}
-
-/**
- * Get the right image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the left image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_right(lv_obj_t * imgbtn, lv_btn_state_t state)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
-
- return ext->img_src_right[state];
-}
-
-#endif
-
-/**
- * Get style of a image button.
- * @param imgbtn pointer to image button object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, lv_imgbtn_style_t type)
-{
- LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
-
- return lv_btn_get_style(imgbtn, type);
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/*
- * New object specific "other" functions come here
- */
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the image buttons
- * @param imgbtn pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
- bool cover = false;
- if(ext->act_cf == LV_IMG_CF_TRUE_COLOR || ext->act_cf == LV_IMG_CF_RAW) {
- cover = lv_area_is_in(mask, &imgbtn->coords);
- }
-
- return cover;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Just draw an image*/
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
- lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
- const lv_style_t * style = lv_imgbtn_get_style(imgbtn, state);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(imgbtn);
-
-
-
-#if LV_IMGBTN_TILED == 0
- const void * src = ext->img_src[state];
- if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
- lv_draw_label(&imgbtn->coords, mask, style, opa_scale, src, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(imgbtn));
- } else {
- lv_draw_img(&imgbtn->coords, mask, src, style, opa_scale);
- }
-#else
- const void * src;
- src = ext->img_src_left[state];
- if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
- LV_LOG_WARN("lv_imgbtn_design: SYMBOLS are not supported in tiled mode")
- return true;
- }
-
- lv_img_header_t header;
- lv_area_t coords;
- lv_coord_t left_w = 0;
- lv_coord_t right_w = 0;
-
- if(src) {
- lv_img_decoder_get_info(src, &header);
- left_w = header.w;
- coords.x1 = imgbtn->coords.x1;
- coords.y1 = imgbtn->coords.y1;
- coords.x2 = coords.x1 + header.w - 1;
- coords.y2 = coords.y1 + header.h - 1;
- lv_draw_img(&coords, mask, src, style, opa_scale);
- }
-
- src = ext->img_src_right[state];
- if(src) {
- lv_img_decoder_get_info(src, &header);
- right_w = header.w;
- coords.x1 = imgbtn->coords.x2 - header.w + 1;
- coords.y1 = imgbtn->coords.y1;
- coords.x2 = imgbtn->coords.x2;
- coords.y2 = imgbtn->coords.y1 + header.h - 1;
- lv_draw_img(&coords, mask, src, style, opa_scale);
- }
-
- src = ext->img_src_mid[state];
- if(src) {
- lv_coord_t obj_w = lv_obj_get_width(imgbtn);
- lv_coord_t i;
- lv_img_decoder_get_info(src, &header);
-
- coords.x1 = imgbtn->coords.x1 + left_w;
- coords.y1 = imgbtn->coords.y1;
- coords.x2 = coords.x1 + header.w - 1;
- coords.y2 = imgbtn->coords.y1 + header.h - 1;
-
- for(i = 0; i < obj_w - right_w - left_w; i += header.w) {
- lv_draw_img(&coords, mask, src, style, opa_scale);
- coords.x1 = coords.x2 + 1;
- coords.x2 += header.w;
- }
- }
-
-#endif
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the image button
- * @param imgbtn pointer to a image button object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(imgbtn, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_STYLE_CHG) {
- /* If the style changed then the button was clicked, released etc. so probably the state was
- * changed as well Set the new image for the new state.*/
- refr_img(imgbtn);
- } else if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-static void refr_img(lv_obj_t * imgbtn)
-{
- lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
- lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
- lv_img_header_t header;
-
-#if LV_IMGBTN_TILED == 0
- const void * src = ext->img_src[state];
-#else
- const void * src = ext->img_src_mid[state];
-#endif
-
- lv_res_t info_res = LV_RES_OK;
- if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
- const lv_style_t * style = ext->btn.styles[state];
- header.h = lv_font_get_line_height(style->text.font);
- header.w = lv_txt_get_width(src, (uint16_t)strlen(src), style->text.font, style->text.letter_space, LV_TXT_FLAG_NONE);
- header.always_zero = 0;
- header.cf = LV_IMG_CF_ALPHA_1BIT;
- } else {
- info_res = lv_img_decoder_get_info(src, &header);
- }
-
- if(info_res == LV_RES_OK) {
- ext->act_cf = header.cf;
-#if LV_IMGBTN_TILED == 0
- lv_obj_set_size(imgbtn, header.w, header.h);
-#else
- lv_obj_set_height(imgbtn, header.h);
-#endif
- } else {
- ext->act_cf = LV_IMG_CF_UNKNOWN;
- }
-
- lv_obj_invalidate(imgbtn);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_imgbtn.h b/src/libs/lvgl/src/lv_objx/lv_imgbtn.h
deleted file mode 100644
index b28b74ff..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_imgbtn.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * @file lv_imgbtn.h
- *
- */
-
-#ifndef LV_IMGBTN_H
-#define LV_IMGBTN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_IMGBTN != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BTN == 0
-#error "lv_imgbtn: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_btn.h"
-#include "../lv_draw/lv_draw_img.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of image button*/
-typedef struct
-{
- lv_btn_ext_t btn; /*Ext. of ancestor*/
- /*New data for this type */
-#if LV_IMGBTN_TILED == 0
- const void * img_src[_LV_BTN_STATE_NUM]; /*Store images to each state*/
-#else
- const void * img_src_left[_LV_BTN_STATE_NUM]; /*Store left side images to each state*/
- const void * img_src_mid[_LV_BTN_STATE_NUM]; /*Store center images to each state*/
- const void * img_src_right[_LV_BTN_STATE_NUM]; /*Store right side images to each state*/
-#endif
- lv_img_cf_t act_cf; /*Color format of the currently active image*/
-} lv_imgbtn_ext_t;
-
-/*Styles*/
-enum {
- LV_IMGBTN_STYLE_REL, /**< Same meaning as ordinary button styles. */
- LV_IMGBTN_STYLE_PR,
- LV_IMGBTN_STYLE_TGL_REL,
- LV_IMGBTN_STYLE_TGL_PR,
- LV_IMGBTN_STYLE_INA,
-};
-typedef uint8_t lv_imgbtn_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a image button objects
- * @param par pointer to an object, it will be the parent of the new image button
- * @param copy pointer to a image button object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created image button
- */
-lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*=====================
- * Setter functions
- *====================*/
-
-#if LV_IMGBTN_TILED == 0
-/**
- * Set images for a state of the image button
- * @param imgbtn pointer to an image button object
- * @param state for which state set the new image (from `lv_btn_state_t`) `
- * @param src pointer to an image source (a C array or path to a file)
- */
-void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src);
-#else
-/**
- * Set images for a state of the image button
- * @param imgbtn pointer to an image button object
- * @param state for which state set the new image (from `lv_btn_state_t`) `
- * @param src_left pointer to an image source for the left side of the button (a C array or path to
- * a file)
- * @param src_mid pointer to an image source for the middle of the button (ideally 1px wide) (a C
- * array or path to a file)
- * @param src_right pointer to an image source for the right side of the button (a C array or path
- * to a file)
- */
-void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
- const void * src_right);
-
-#endif
-
-/**
- * Enable the toggled states. On release the button will change from/to toggled state.
- * @param imgbtn pointer to an image button object
- * @param tgl true: enable toggled states, false: disable
- */
-static inline void lv_imgbtn_set_toggle(lv_obj_t * imgbtn, bool tgl)
-{
- lv_btn_set_toggle(imgbtn, tgl);
-}
-
-/**
- * Set the state of the image button
- * @param imgbtn pointer to an image button object
- * @param state the new state of the button (from lv_btn_state_t enum)
- */
-static inline void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t state)
-{
- lv_btn_set_state(imgbtn, state);
-}
-
-/**
- * Toggle the state of the image button (ON->OFF, OFF->ON)
- * @param imgbtn pointer to a image button object
- */
-static inline void lv_imgbtn_toggle(lv_obj_t * imgbtn)
-{
- lv_btn_toggle(imgbtn);
-}
-
-/**
- * Set a style of a image button.
- * @param imgbtn pointer to image button object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-#if LV_IMGBTN_TILED == 0
-/**
- * Get the images in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to an image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state);
-
-#else
-
-/**
- * Get the left image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the left image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_left(lv_obj_t * imgbtn, lv_btn_state_t state);
-
-/**
- * Get the middle image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the middle image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_middle(lv_obj_t * imgbtn, lv_btn_state_t state);
-
-/**
- * Get the right image in a given state
- * @param imgbtn pointer to an image button object
- * @param state the state where to get the image (from `lv_btn_state_t`) `
- * @return pointer to the left image source (a C array or path to a file)
- */
-const void * lv_imgbtn_get_src_right(lv_obj_t * imgbtn, lv_btn_state_t state);
-
-#endif
-/**
- * Get the current state of the image button
- * @param imgbtn pointer to a image button object
- * @return the state of the button (from lv_btn_state_t enum)
- */
-static inline lv_btn_state_t lv_imgbtn_get_state(const lv_obj_t * imgbtn)
-{
- return lv_btn_get_state(imgbtn);
-}
-
-/**
- * Get the toggle enable attribute of the image button
- * @param imgbtn pointer to a image button object
- * @return ture: toggle enabled, false: disabled
- */
-static inline bool lv_imgbtn_get_toggle(const lv_obj_t * imgbtn)
-{
- return lv_btn_get_toggle(imgbtn);
-}
-
-/**
- * Get style of a image button.
- * @param imgbtn pointer to image button object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, lv_imgbtn_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_IMGBTN*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_IMGBTN_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_kb.c b/src/libs/lvgl/src/lv_objx/lv_kb.c
deleted file mode 100644
index 1913316a..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_kb.c
+++ /dev/null
@@ -1,471 +0,0 @@
-
-/**
- * @file lv_kb.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_kb.h"
-#if LV_USE_KB != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "lv_ta.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_kb"
-
-#define LV_KB_CTRL_BTN_FLAGS (LV_BTNM_CTRL_NO_REPEAT | LV_BTNM_CTRL_CLICK_TRIG)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-/* clang-format off */
-static const char * kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n",
- "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n",
- "_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n",
- LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
-
-static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = {
- LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
- LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-
-static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
- "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
- "_", "-", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n",
- LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
-
-static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = {
- LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
- LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-
-static const char * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
- "abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n",
- "\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n",
- LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
-
-static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-
-static const char * kb_map_num[] = {"1", "2", "3", LV_SYMBOL_CLOSE, "\n",
- "4", "5", "6", LV_SYMBOL_OK, "\n",
- "7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
- "+/-", "0", ".", LV_SYMBOL_LEFT, LV_SYMBOL_RIGHT, ""};
-
-static const lv_btnm_ctrl_t kb_ctrl_num_map[] = {
- 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- 1, 1, 1, 2,
- 1, 1, 1, 1, 1};
-/* clang-format on */
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a keyboard objects
- * @param par pointer to an object, it will be the parent of the new keyboard
- * @param copy pointer to a keyboard object, if not NULL then the new object will be copied from it
- * @return pointer to the created keyboard
- */
-lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("keyboard create started");
-
- /*Create the ancestor of keyboard*/
- lv_obj_t * new_kb = lv_btnm_create(par, copy);
- LV_ASSERT_MEM(new_kb);
- if(new_kb == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_kb);
-
- /*Allocate the keyboard type specific extended data*/
- lv_kb_ext_t * ext = lv_obj_allocate_ext_attr(new_kb, sizeof(lv_kb_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
-
- ext->ta = NULL;
- ext->mode = LV_KB_MODE_TEXT;
- ext->cursor_mng = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_kb, lv_kb_signal);
-
- /*Init the new keyboard keyboard*/
- if(copy == NULL) {
- /* Set a size which fits into the parent.
- * Don't use `par` directly because if the window is created on a page it is moved to the
- * scrollable so the parent has changed */
- lv_obj_set_size(new_kb, lv_obj_get_width_fit(lv_obj_get_parent(new_kb)),
- lv_obj_get_height_fit(lv_obj_get_parent(new_kb)) / 2);
-
- lv_obj_align(new_kb, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
- lv_obj_set_event_cb(new_kb, lv_kb_def_event_cb);
- lv_btnm_set_map(new_kb, kb_map_lc);
- lv_btnm_set_ctrl_map(new_kb, kb_ctrl_lc_map);
- lv_obj_set_base_dir(new_kb, LV_BIDI_DIR_LTR);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_kb_set_style(new_kb, LV_KB_STYLE_BG, th->style.kb.bg);
- lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_REL, th->style.kb.btn.rel);
- lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_PR, th->style.kb.btn.pr);
- lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_REL, th->style.kb.btn.tgl_rel);
- lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_PR, th->style.kb.btn.tgl_pr);
- lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_INA, th->style.kb.btn.ina);
- } else {
- /*Let the button matrix's styles*/
- }
- }
- /*Copy an existing keyboard*/
- else {
- lv_kb_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->ta = NULL;
- ext->ta = copy_ext->ta;
- ext->mode = copy_ext->mode;
- ext->cursor_mng = copy_ext->cursor_mng;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_kb);
- }
-
- LV_LOG_INFO("keyboard created");
-
- return new_kb;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Assign a Text Area to the Keyboard. The pressed characters will be put there.
- * @param kb pointer to a Keyboard object
- * @param ta pointer to a Text Area object to write there
- */
-void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
- if(ta) LV_ASSERT_OBJ(ta, "lv_ta");
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- lv_cursor_type_t cur_type;
-
- /*Hide the cursor of the old Text area if cursor management is enabled*/
- if(ext->ta && ext->cursor_mng) {
- cur_type = lv_ta_get_cursor_type(ext->ta);
- lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
- }
-
- ext->ta = ta;
-
- /*Show the cursor of the new Text area if cursor management is enabled*/
- if(ext->ta && ext->cursor_mng) {
- cur_type = lv_ta_get_cursor_type(ext->ta);
- lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
- }
-}
-
-/**
- * Set a new a mode (text or number map)
- * @param kb pointer to a Keyboard object
- * @param mode the mode from 'lv_kb_mode_t'
- */
-void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- if(ext->mode == mode) return;
-
- ext->mode = mode;
- if(mode == LV_KB_MODE_TEXT) {
- lv_btnm_set_map(kb, kb_map_lc);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
- } else if(mode == LV_KB_MODE_NUM) {
- lv_btnm_set_map(kb, kb_map_num);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_num_map);
- } else if(mode == LV_KB_MODE_TEXT_UPPER) {
- lv_btnm_set_map(kb, kb_map_uc);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
- }
-}
-
-/**
- * Automatically hide or show the cursor of Text Area
- * @param kb pointer to a Keyboard object
- * @param en true: show cursor on the current text area, false: hide cursor
- */
-void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- if(ext->cursor_mng == en) return;
-
- ext->cursor_mng = en == false ? 0 : 1;
-
- if(ext->ta) {
- lv_cursor_type_t cur_type;
- cur_type = lv_ta_get_cursor_type(ext->ta);
-
- if(ext->cursor_mng) {
- lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
- } else {
- lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
- }
- }
-}
-
-/**
- * Set a style of a keyboard
- * @param kb pointer to a keyboard object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- switch(type) {
- case LV_KB_STYLE_BG: lv_btnm_set_style(kb, LV_BTNM_STYLE_BG, style); break;
- case LV_KB_STYLE_BTN_REL: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_REL, style); break;
- case LV_KB_STYLE_BTN_PR: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_PR, style); break;
- case LV_KB_STYLE_BTN_TGL_REL: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
- case LV_KB_STYLE_BTN_TGL_PR: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
- case LV_KB_STYLE_BTN_INA: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_INA, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Assign a Text Area to the Keyboard. The pressed characters will be put there.
- * @param kb pointer to a Keyboard object
- * @return pointer to the assigned Text Area object
- */
-lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- return ext->ta;
-}
-
-/**
- * Set a new a mode (text or number map)
- * @param kb pointer to a Keyboard object
- * @return the current mode from 'lv_kb_mode_t'
- */
-lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- return ext->mode;
-}
-
-/**
- * Get the current cursor manage mode.
- * @param kb pointer to a Keyboard object
- * @return true: show cursor on the current text area, false: hide cursor
- */
-bool lv_kb_get_cursor_manage(const lv_obj_t * kb)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- return ext->cursor_mng == 0 ? false : true;
-}
-
-/**
- * Get a style of a keyboard
- * @param kb pointer to a keyboard object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
-
- switch(type) {
- case LV_KB_STYLE_BG: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BG); break;
- case LV_KB_STYLE_BTN_REL: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_REL); break;
- case LV_KB_STYLE_BTN_PR: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_PR); break;
- case LV_KB_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_TGL_REL); break;
- case LV_KB_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_TGL_PR); break;
- case LV_KB_STYLE_BTN_INA: style = lv_btnm_get_style(kb, LV_BTNM_STYLE_BTN_INA); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Default keyboard event to add characters to the Text area and change the map.
- * If a custom `event_cb` is added to the keyboard this function be called from it to handle the
- * button clicks
- * @param kb pointer to a keyboard
- * @param event the triggering event
- */
-void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event)
-{
- LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
-
- if(event != LV_EVENT_VALUE_CHANGED) return;
-
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- uint16_t btn_id = lv_btnm_get_active_btn(kb);
- if(btn_id == LV_BTNM_BTN_NONE) return;
- if(lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_HIDDEN | LV_BTNM_CTRL_INACTIVE)) return;
- if(lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_NO_REPEAT) && event == LV_EVENT_LONG_PRESSED_REPEAT) return;
-
- const char * txt = lv_btnm_get_active_btn_text(kb);
- if(txt == NULL) return;
-
- /*Do the corresponding action according to the text of the button*/
- if(strcmp(txt, "abc") == 0) {
- lv_btnm_set_map(kb, kb_map_lc);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map);
- return;
- } else if(strcmp(txt, "ABC") == 0) {
- lv_btnm_set_map(kb, kb_map_uc);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
- return;
- } else if(strcmp(txt, "1#") == 0) {
- lv_btnm_set_map(kb, kb_map_spec);
- lv_btnm_set_ctrl_map(kb, kb_ctrl_spec_map);
- return;
- } else if(strcmp(txt, LV_SYMBOL_CLOSE) == 0) {
- if(kb->event_cb != lv_kb_def_event_cb) {
- lv_res_t res = lv_event_send(kb, LV_EVENT_CANCEL, NULL);
- if(res != LV_RES_OK) return;
- } else {
- lv_kb_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
- lv_obj_del(kb);
- return;
- }
- return;
- } else if(strcmp(txt, LV_SYMBOL_OK) == 0) {
- if(kb->event_cb != lv_kb_def_event_cb) {
- lv_res_t res = lv_event_send(kb, LV_EVENT_APPLY, NULL);
- if(res != LV_RES_OK) return;
- } else {
- lv_kb_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
- }
- return;
- }
-
- /*Add the characters to the text area if set*/
- if(ext->ta == NULL) return;
-
- if(strcmp(txt, "Enter") == 0 || strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
- lv_ta_add_char(ext->ta, '\n');
- else if(strcmp(txt, LV_SYMBOL_LEFT) == 0)
- lv_ta_cursor_left(ext->ta);
- else if(strcmp(txt, LV_SYMBOL_RIGHT) == 0)
- lv_ta_cursor_right(ext->ta);
- else if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
- lv_ta_del_char(ext->ta);
- else if(strcmp(txt, "+/-") == 0) {
- uint16_t cur = lv_ta_get_cursor_pos(ext->ta);
- const char * ta_txt = lv_ta_get_text(ext->ta);
- if(ta_txt[0] == '-') {
- lv_ta_set_cursor_pos(ext->ta, 1);
- lv_ta_del_char(ext->ta);
- lv_ta_add_char(ext->ta, '+');
- lv_ta_set_cursor_pos(ext->ta, cur);
- } else if(ta_txt[0] == '+') {
- lv_ta_set_cursor_pos(ext->ta, 1);
- lv_ta_del_char(ext->ta);
- lv_ta_add_char(ext->ta, '-');
- lv_ta_set_cursor_pos(ext->ta, cur);
- } else {
- lv_ta_set_cursor_pos(ext->ta, 0);
- lv_ta_add_char(ext->ta, '-');
- lv_ta_set_cursor_pos(ext->ta, cur + 1);
- }
- } else {
- lv_ta_add_text(ext->ta, txt);
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the keyboard
- * @param kb pointer to a keyboard object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(kb, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_FOCUS) {
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- /*Show the cursor of the new Text area if cursor management is enabled*/
- if(ext->ta && ext->cursor_mng) {
- lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
- lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN));
- }
- } else if(sign == LV_SIGNAL_DEFOCUS) {
- lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
- /*Show the cursor of the new Text area if cursor management is enabled*/
- if(ext->ta && ext->cursor_mng) {
- lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
- lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
- }
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_kb.h b/src/libs/lvgl/src/lv_objx/lv_kb.h
deleted file mode 100644
index 74d9c1f0..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_kb.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/**
- * @file lv_kb.h
- *
- */
-
-#ifndef LV_KB_H
-#define LV_KB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_KB != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BTNM == 0
-#error "lv_kb: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM 1) "
-#endif
-
-#if LV_USE_TA == 0
-#error "lv_kb: lv_ta is required. Enable it in lv_conf.h (LV_USE_TA 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_btnm.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Current keyboard mode. */
-enum {
- LV_KB_MODE_TEXT,
- LV_KB_MODE_NUM,
- LV_KB_MODE_TEXT_UPPER,
-};
-typedef uint8_t lv_kb_mode_t;
-
-/*Data of keyboard*/
-typedef struct
-{
- lv_btnm_ext_t btnm; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * ta; /*Pointer to the assigned text area*/
- lv_kb_mode_t mode; /*Key map type*/
- uint8_t cursor_mng : 1; /*1: automatically show/hide cursor when a text area is assigned or left*/
-} lv_kb_ext_t;
-
-enum {
- LV_KB_STYLE_BG,
- LV_KB_STYLE_BTN_REL,
- LV_KB_STYLE_BTN_PR,
- LV_KB_STYLE_BTN_TGL_REL,
- LV_KB_STYLE_BTN_TGL_PR,
- LV_KB_STYLE_BTN_INA,
-};
-typedef uint8_t lv_kb_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a keyboard objects
- * @param par pointer to an object, it will be the parent of the new keyboard
- * @param copy pointer to a keyboard object, if not NULL then the new object will be copied from it
- * @return pointer to the created keyboard
- */
-lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Assign a Text Area to the Keyboard. The pressed characters will be put there.
- * @param kb pointer to a Keyboard object
- * @param ta pointer to a Text Area object to write there
- */
-void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta);
-
-/**
- * Set a new a mode (text or number map)
- * @param kb pointer to a Keyboard object
- * @param mode the mode from 'lv_kb_mode_t'
- */
-void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode);
-
-/**
- * Automatically hide or show the cursor of the current Text Area
- * @param kb pointer to a Keyboard object
- * @param en true: show cursor on the current text area, false: hide cursor
- */
-void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en);
-
-/**
- * Set a new map for the keyboard
- * @param kb pointer to a Keyboard object
- * @param map pointer to a string array to describe the map.
- * See 'lv_btnm_set_map()' for more info.
- */
-static inline void lv_kb_set_map(lv_obj_t * kb, const char * map[])
-{
- lv_btnm_set_map(kb, map);
-}
-
-/**
- * Set the button control map (hidden, disabled etc.) for the keyboard. The
- * control map array will be copied and so may be deallocated after this
- * function returns.
- * @param kb pointer to a keyboard object
- * @param ctrl_map pointer to an array of `lv_btn_ctrl_t` control bytes.
- * See: `lv_btnm_set_ctrl_map` for more details.
- */
-static inline void lv_kb_set_ctrl_map(lv_obj_t * kb, const lv_btnm_ctrl_t ctrl_map[])
-{
- lv_btnm_set_ctrl_map(kb, ctrl_map);
-}
-
-/**
- * Set a style of a keyboard
- * @param kb pointer to a keyboard object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Assign a Text Area to the Keyboard. The pressed characters will be put there.
- * @param kb pointer to a Keyboard object
- * @return pointer to the assigned Text Area object
- */
-lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb);
-
-/**
- * Set a new a mode (text or number map)
- * @param kb pointer to a Keyboard object
- * @return the current mode from 'lv_kb_mode_t'
- */
-lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb);
-
-/**
- * Get the current cursor manage mode.
- * @param kb pointer to a Keyboard object
- * @return true: show cursor on the current text area, false: hide cursor
- */
-bool lv_kb_get_cursor_manage(const lv_obj_t * kb);
-
-/**
- * Get the current map of a keyboard
- * @param kb pointer to a keyboard object
- * @return the current map
- */
-static inline const char ** lv_kb_get_map_array(const lv_obj_t * kb)
-{
- return lv_btnm_get_map_array(kb);
-}
-
-/**
- * Get a style of a keyboard
- * @param kb pointer to a keyboard object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Default keyboard event to add characters to the Text area and change the map.
- * If a custom `event_cb` is added to the keyboard this function be called from it to handle the
- * button clicks
- * @param kb pointer to a keyboard
- * @param event the triggering event
- */
-void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_KB*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_KB_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_label.c b/src/libs/lvgl/src/lv_objx/lv_label.c
deleted file mode 100644
index 5c870d05..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_label.c
+++ /dev/null
@@ -1,1441 +0,0 @@
-/**
- * @file lv_rect.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_label.h"
-#if LV_USE_LABEL != 0
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_bidi.h"
-#include "../lv_misc/lv_printf.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_label"
-
-/*Test configurations*/
-#ifndef LV_LABEL_DEF_SCROLL_SPEED
-#define LV_LABEL_DEF_SCROLL_SPEED (25)
-#endif
-
-#define LV_LABEL_DOT_END_INV 0xFFFF
-#define LV_LABEL_HINT_HEIGHT_LIMIT \
- 1024 /*Enable "hint" to buffer info about labels larger than this. (Speed up their drawing)*/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param);
-static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_mode_t mode);
-static void lv_label_refr_text(lv_obj_t * label);
-static void lv_label_revert_dots(lv_obj_t * label);
-
-#if LV_USE_ANIMATION
-static void lv_label_set_offset_x(lv_obj_t * label, lv_coord_t x);
-static void lv_label_set_offset_y(lv_obj_t * label, lv_coord_t y);
-#endif
-
-static bool lv_label_set_dot_tmp(lv_obj_t * label, char * data, uint16_t len);
-static char * lv_label_get_dot_tmp(lv_obj_t * label);
-static void lv_label_dot_tmp_free(lv_obj_t * label);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a label objects
- * @param par pointer to an object, it will be the parent of the new label
- * @param copy pointer to a button object, if not NULL then the new object will be copied from it
- * @return pointer to the created button
- */
-lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("label create started");
-
- /*Create a basic object*/
- lv_obj_t * new_label = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_label);
- if(new_label == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_label);
-
- /*Extend the basic object to a label object*/
- lv_obj_allocate_ext_attr(new_label, sizeof(lv_label_ext_t));
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(new_label);
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->text = NULL;
- ext->static_txt = 0;
- ext->recolor = 0;
- ext->body_draw = 0;
- ext->align = LV_LABEL_ALIGN_AUTO;
- ext->dot_end = LV_LABEL_DOT_END_INV;
- ext->long_mode = LV_LABEL_LONG_EXPAND;
-#if LV_USE_ANIMATION
- ext->anim_speed = LV_LABEL_DEF_SCROLL_SPEED;
-#endif
- ext->offset.x = 0;
- ext->offset.y = 0;
-
-#if LV_LABEL_LONG_TXT_HINT
- ext->hint.line_start = -1;
- ext->hint.coord_y = 0;
- ext->hint.y = 0;
-#endif
-
-#if LV_LABEL_TEXT_SEL
- ext->txt_sel_start = LV_DRAW_LABEL_NO_TXT_SEL;
- ext->txt_sel_end = LV_DRAW_LABEL_NO_TXT_SEL;
-#endif
- ext->dot.tmp_ptr = NULL;
- ext->dot_tmp_alloc = 0;
-
- lv_obj_set_design_cb(new_label, lv_label_design);
- lv_obj_set_signal_cb(new_label, lv_label_signal);
-
- /*Init the new label*/
- if(copy == NULL) {
- lv_obj_set_click(new_label, false);
- lv_label_set_long_mode(new_label, LV_LABEL_LONG_EXPAND);
- lv_label_set_text(new_label, "Text");
- lv_label_set_style(new_label, LV_LABEL_STYLE_MAIN, NULL); /*Inherit parent's style*/
- }
- /*Copy 'copy' if not NULL*/
- else {
- lv_label_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- lv_label_set_long_mode(new_label, lv_label_get_long_mode(copy));
- lv_label_set_recolor(new_label, lv_label_get_recolor(copy));
- lv_label_set_body_draw(new_label, lv_label_get_body_draw(copy));
- lv_label_set_align(new_label, lv_label_get_align(copy));
- if(copy_ext->static_txt == 0)
- lv_label_set_text(new_label, lv_label_get_text(copy));
- else
- lv_label_set_static_text(new_label, lv_label_get_text(copy));
-
- /*In DOT mode save the text byte-to-byte because a '\0' can be in the middle*/
- if(copy_ext->long_mode == LV_LABEL_LONG_DOT) {
- ext->text = lv_mem_realloc(ext->text, lv_mem_get_size(copy_ext->text));
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return NULL;
- memcpy(ext->text, copy_ext->text, lv_mem_get_size(copy_ext->text));
- }
-
- if(copy_ext->dot_tmp_alloc && copy_ext->dot.tmp_ptr) {
- uint16_t len = (uint16_t )strlen(copy_ext->dot.tmp_ptr);
- lv_label_set_dot_tmp(new_label, ext->dot.tmp_ptr, len);
- } else {
- memcpy(ext->dot.tmp, copy_ext->dot.tmp, sizeof(ext->dot.tmp));
- }
- ext->dot_tmp_alloc = copy_ext->dot_tmp_alloc;
- ext->dot_end = copy_ext->dot_end;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_label);
- }
-
- LV_LOG_INFO("label created");
-
- return new_label;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new text for a label. Memory will be allocated to store the text by the label.
- * @param label pointer to a label object
- * @param text '\0' terminated character string. NULL to refresh with the current text.
- */
-void lv_label_set_text(lv_obj_t * label, const char * text)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_obj_invalidate(label);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- /*If text is NULL then refresh */
- if(text == NULL) {
- lv_label_refr_text(label);
- return;
- }
-
- LV_ASSERT_STR(text);
-
- if(ext->text == text) {
- /*If set its own text then reallocate it (maybe its size changed)*/
- ext->text = lv_mem_realloc(ext->text, strlen(ext->text) + 1);
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return;
- } else {
- /*Allocate space for the new text*/
- size_t len = strlen(text) + 1;
- if(ext->text != NULL && ext->static_txt == 0) {
- lv_mem_free(ext->text);
- ext->text = NULL;
- }
-
- ext->text = lv_mem_alloc(len);
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return;
-
- strcpy(ext->text, text);
-
- /*Now the text is dynamically allocated*/
- ext->static_txt = 0;
- }
-
- lv_label_refr_text(label);
-}
-
-/**
- * Set a new formatted text for a label. Memory will be allocated to store the text by the label.
- * @param label pointer to a label object
- * @param fmt `printf`-like format
- */
-void lv_label_set_text_fmt(lv_obj_t * label, const char * fmt, ...)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
- LV_ASSERT_STR(fmt);
-
- lv_obj_invalidate(label);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- /*If text is NULL then refresh */
- if(fmt == NULL) {
- lv_label_refr_text(label);
- return;
- }
-
- if(ext->text != NULL && ext->static_txt == 0) {
- lv_mem_free(ext->text);
- ext->text = NULL;
- }
-
- va_list ap, ap2;
- va_start(ap, fmt);
- va_copy(ap2, ap);
-
- /*Allocate space for the new text by using trick from C99 standard section 7.19.6.12 */
- uint32_t len = lv_vsnprintf(NULL, 0, fmt, ap);
-
- va_end(ap);
-
-
- ext->text = lv_mem_alloc(len+1);
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return;
- ext->text[len-1] = 0; /* Ensure NULL termination */
-
- lv_vsnprintf(ext->text, len+1, fmt, ap2);
-
- va_end(ap2);
- ext->static_txt = 0; /*Now the text is dynamically allocated*/
-
- lv_label_refr_text(label);
-}
-
-/**
- * Set a new text for a label from a character array. The array don't has to be '\0' terminated.
- * Memory will be allocated to store the array by the label.
- * @param label pointer to a label object
- * @param array array of characters or NULL to refresh the label
- * @param size the size of 'array' in bytes
- */
-void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_obj_invalidate(label);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- /*If trying to set its own text or the array is NULL then refresh */
- if(array == ext->text || array == NULL) {
- lv_label_refr_text(label);
- return;
- }
-
- /*Allocate space for the new text*/
- if(ext->text != NULL && ext->static_txt == 0) {
- lv_mem_free(ext->text);
- ext->text = NULL;
- }
- ext->text = lv_mem_alloc(size + 1);
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return;
-
- memcpy(ext->text, array, size);
- ext->text[size] = '\0';
- ext->static_txt = 0; /*Now the text is dynamically allocated*/
-
- lv_label_refr_text(label);
-}
-
-/**
- * Set a static text. It will not be saved by the label so the 'text' variable
- * has to be 'alive' while the label exist.
- * @param label pointer to a label object
- * @param text pointer to a text. NULL to refresh with the current text.
- */
-void lv_label_set_static_text(lv_obj_t * label, const char * text)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->static_txt == 0 && ext->text != NULL) {
- lv_mem_free(ext->text);
- ext->text = NULL;
- }
-
- if(text != NULL) {
- ext->static_txt = 1;
- ext->text = (char *)text;
- }
-
- lv_label_refr_text(label);
-}
-
-/**
- * Set the behavior of the label with longer text then the object size
- * @param label pointer to a label object
- * @param long_mode the new mode from 'lv_label_long_mode' enum.
- * In LV_LONG_BREAK/LONG/ROLL the size of the label should be set AFTER this
- * function
- */
-void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
-#if LV_USE_ANIMATION
- /*Delete the old animation (if exists)*/
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_x);
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_obj_set_y);
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
-#endif
- ext->offset.x = 0;
- ext->offset.y = 0;
-
- if(long_mode == LV_LABEL_LONG_SROLL || long_mode == LV_LABEL_LONG_SROLL_CIRC || long_mode == LV_LABEL_LONG_CROP)
- ext->expand = 1;
- else
- ext->expand = 0;
-
- /*Restore the character under the dots*/
- if(ext->long_mode == LV_LABEL_LONG_DOT && ext->dot_end != LV_LABEL_DOT_END_INV) {
- lv_label_revert_dots(label);
- }
-
- ext->long_mode = long_mode;
- lv_label_refr_text(label);
-}
-
-/**
- * Set the align of the label (left or center)
- * @param label pointer to a label object
- * @param align 'LV_LABEL_ALIGN_LEFT' or 'LV_LABEL_ALIGN_LEFT'
- */
-void lv_label_set_align(lv_obj_t * label, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->align == align) return;
-
- ext->align = align;
-
- lv_obj_invalidate(label); /*Enough to invalidate because alignment is only drawing related
- (lv_refr_label_text() not required)*/
-}
-
-/**
- * Enable the recoloring by in-line commands
- * @param label pointer to a label object
- * @param en true: enable recoloring, false: disable
- */
-void lv_label_set_recolor(lv_obj_t * label, bool en)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->recolor == en) return;
-
- ext->recolor = en == false ? 0 : 1;
-
- lv_label_refr_text(label); /*Refresh the text because the potential colo codes in text needs to
- be hided or revealed*/
-}
-
-/**
- * Set the label to draw (or not draw) background specified in its style's body
- * @param label pointer to a label object
- * @param en true: draw body; false: don't draw body
- */
-void lv_label_set_body_draw(lv_obj_t * label, bool en)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->body_draw == en) return;
-
- ext->body_draw = en == false ? 0 : 1;
-
- lv_obj_refresh_ext_draw_pad(label);
-
- lv_obj_invalidate(label);
-}
-
-/**
- * Set the label's animation speed in LV_LABEL_LONG_SROLL/SCROLL_CIRC modes
- * @param label pointer to a label object
- * @param anim_speed speed of animation in px/sec unit
- */
-void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->anim_speed == anim_speed) return;
-
- ext->anim_speed = anim_speed;
-
- if(ext->long_mode == LV_LABEL_LONG_SROLL || ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
- lv_label_refr_text(label);
- }
-#else
- (void)label; /*Unused*/
- (void)anim_speed; /*Unused*/
-#endif
-}
-
-void lv_label_set_text_sel_start(lv_obj_t * label, uint16_t index)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->txt_sel_start = index;
- lv_obj_invalidate(label);
-#else
- (void)label; /*Unused*/
- (void)index; /*Unused*/
-#endif
-}
-
-void lv_label_set_text_sel_end(lv_obj_t * label, uint16_t index)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->txt_sel_end = index;
- lv_obj_invalidate(label);
-#else
- (void)label; /*Unused*/
- (void)index; /*Unused*/
-#endif
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a label
- * @param label pointer to a label object
- * @return the text of the label
- */
-char * lv_label_get_text(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- return ext->text;
-}
-
-/**
- * Get the long mode of a label
- * @param label pointer to a label object
- * @return the long mode
- */
-lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->long_mode;
-}
-
-/**
- * Get the align attribute
- * @param label pointer to a label object
- * @return LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER
- */
-lv_label_align_t lv_label_get_align(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- lv_label_align_t align = ext->align;
-
- if(align == LV_LABEL_ALIGN_AUTO) {
-#if LV_USE_BIDI
- lv_bidi_dir_t base_dir = lv_obj_get_base_dir(label);
- if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(ext->text);
-
- if(base_dir == LV_BIDI_DIR_LTR) align = LV_LABEL_ALIGN_LEFT;
- else if (base_dir == LV_BIDI_DIR_RTL) align = LV_LABEL_ALIGN_RIGHT;
-#else
- align = LV_LABEL_ALIGN_LEFT;
-#endif
- }
-
- return align;
-}
-
-/**
- * Get the recoloring attribute
- * @param label pointer to a label object
- * @return true: recoloring is enabled, false: disable
- */
-bool lv_label_get_recolor(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->recolor == 0 ? false : true;
-}
-
-/**
- * Get the body draw attribute
- * @param label pointer to a label object
- * @return true: draw body; false: don't draw body
- */
-bool lv_label_get_body_draw(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->body_draw == 0 ? false : true;
-}
-
-/**
- * Get the label's animation speed in LV_LABEL_LONG_ROLL and SCROLL modes
- * @param label pointer to a label object
- * @return speed of animation in px/sec unit
- */
-uint16_t lv_label_get_anim_speed(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->anim_speed;
-#else
- (void)label; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Get the relative x and y coordinates of a letter
- * @param label pointer to a label object
- * @param index index of the letter [0 ... text length]. Expressed in character index, not byte
- * index (different in UTF-8)
- * @param pos store the result here (E.g. index = 0 gives 0;0 coordinates)
- */
-void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t char_id, lv_point_t * pos)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
- LV_ASSERT_NULL(pos);
-
- const char * txt = lv_label_get_text(label);
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- uint32_t line_start = 0;
- uint32_t new_line_start = 0;
- lv_coord_t max_w = lv_obj_get_width(label);
- const lv_style_t * style = lv_obj_get_style(label);
- const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
- lv_coord_t y = 0;
- lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
-
- if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
- if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
-
- lv_label_align_t align = lv_label_get_align(label);
- if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
- if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
-
- /*If the width will be expanded the set the max length to very big */
- if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
- max_w = LV_COORD_MAX;
- }
-
- uint16_t byte_id = lv_txt_encoded_get_byte_id(txt, char_id);
-
- /*Search the line of the index letter */;
- while(txt[new_line_start] != '\0') {
- new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag);
- if(byte_id < new_line_start || txt[new_line_start] == '\0')
- break; /*The line of 'index' letter begins at 'line_start'*/
-
- y += letter_height + style->text.line_space;
- line_start = new_line_start;
- }
-
- /*If the last character is line break then go to the next line*/
- if(byte_id > 0) {
- if((txt[byte_id - 1] == '\n' || txt[byte_id - 1] == '\r') && txt[byte_id] == '\0') {
- y += letter_height + style->text.line_space;
- line_start = byte_id;
- }
- }
-
- const char *bidi_txt;
- uint16_t visual_byte_pos;
-#if LV_USE_BIDI
- /*Handle Bidi*/
- if(new_line_start == byte_id) {
- visual_byte_pos = byte_id - line_start;
- bidi_txt = &txt[line_start];
- }
- else {
- uint16_t line_char_id = lv_txt_encoded_get_char_id(&txt[line_start], byte_id - line_start);
-
- bool is_rtl;
- char *mutable_bidi_txt;
- uint16_t visual_char_pos = lv_bidi_get_visual_pos(&txt[line_start], &mutable_bidi_txt, new_line_start - line_start, lv_obj_get_base_dir(label), line_char_id, &is_rtl);
- bidi_txt = mutable_bidi_txt;
- if (is_rtl) visual_char_pos++;
- visual_byte_pos = lv_txt_encoded_get_byte_id(bidi_txt, visual_char_pos);
- }
-#else
- bidi_txt = &txt[line_start];
- visual_byte_pos = byte_id - line_start;
-#endif
-
-
- /*Calculate the x coordinate*/
- lv_coord_t x = lv_txt_get_width(bidi_txt, visual_byte_pos, font, style->text.letter_space, flag);
-
- if(char_id != line_start) x += style->text.letter_space;
-
- if(align == LV_LABEL_ALIGN_CENTER) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
- x += lv_obj_get_width(label) / 2 - line_w / 2;
-
- } else if(align == LV_LABEL_ALIGN_RIGHT) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
-
- x += lv_obj_get_width(label) - line_w;
- }
- pos->x = x;
- pos->y = y;
-}
-
-/**
- * Get the index of letter on a relative point of a label
- * @param label pointer to label object
- * @param pos pointer to point with coordinates on a the label
- * @return the index of the letter on the 'pos_p' point (E.g. on 0;0 is the 0. letter)
- * Expressed in character index and not byte index (different in UTF-8)
- */
-uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
- LV_ASSERT_NULL(pos);
-
- const char * txt = lv_label_get_text(label);
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- uint32_t line_start = 0;
- uint32_t new_line_start = 0;
- lv_coord_t max_w = lv_obj_get_width(label);
- const lv_style_t * style = lv_obj_get_style(label);
- const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
- lv_coord_t y = 0;
- lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
- uint16_t logical_pos;
- char *bidi_txt;
-
- if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
- if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
-
- lv_label_align_t align = lv_label_get_align(label);
- if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
- if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
-
- /*If the width will be expanded set the max length to very big */
- if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
- max_w = LV_COORD_MAX;
- }
-
- /*Search the line of the index letter */;
- while(txt[line_start] != '\0') {
- new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag);
-
- if(pos->y <= y + letter_height) {
- /*The line is found (stored in 'line_start')*/
- /* Include the NULL terminator in the last line */
- uint32_t tmp = new_line_start;
- uint32_t letter;
- letter = lv_txt_encoded_prev(txt, &tmp);
- if(letter != '\n' && txt[new_line_start] == '\0' ) new_line_start++;
- break;
- }
- y += letter_height + style->text.line_space;
-
- line_start = new_line_start;
- }
-
-#if LV_USE_BIDI
- bidi_txt = lv_draw_get_buf(new_line_start - line_start + 1);
- uint16_t txt_len = new_line_start - line_start;
- if(bidi_txt[new_line_start] == '\0') txt_len--;
- lv_bidi_process_paragraph(txt + line_start, bidi_txt, txt_len, lv_obj_get_base_dir(label), NULL, 0);
-#else
- bidi_txt = (char*)txt + line_start;
-#endif
-
- /*Calculate the x coordinate*/
- lv_coord_t x = 0;
- if(align == LV_LABEL_ALIGN_CENTER) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
- x += lv_obj_get_width(label) / 2 - line_w / 2;
- }
- else if(align == LV_LABEL_ALIGN_RIGHT) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
- x += lv_obj_get_width(label) - line_w;
- }
-
- lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
-
- uint32_t i = 0;
- uint32_t i_act = i;
- uint32_t letter;
- uint32_t letter_next;
-
- if(new_line_start > 0) {
- while(i + line_start < new_line_start) {
- /* Get the current letter.*/
- letter = lv_txt_encoded_next(bidi_txt, &i);
-
- /*Get the next letter too for kerning*/
- letter_next = lv_txt_encoded_next(&bidi_txt[i], NULL);
-
- /*Handle the recolor command*/
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(&cmd_state, bidi_txt[i]) != false) {
- continue; /*Skip the letter is it is part of a command*/
- }
- }
-
- x += lv_font_get_glyph_width(font, letter, letter_next);
-
- /*Finish if the x position or the last char of the line is reached*/
- if(pos->x < x || i + line_start == new_line_start) {
- i = i_act;
- break;
- }
- x += style->text.letter_space;
- i_act = i;
- }
- }
-
-#if LV_USE_BIDI
- /*Handle Bidi*/
- bool is_rtl;
- logical_pos = lv_bidi_get_logical_pos(&txt[line_start], NULL, txt_len, lv_obj_get_base_dir(label), lv_txt_encoded_get_char_id(bidi_txt, i), &is_rtl);
- if (is_rtl) logical_pos++;
-#else
- logical_pos = lv_txt_encoded_get_char_id(bidi_txt, i);
-#endif
-
- return logical_pos + lv_txt_encoded_get_char_id(txt, line_start);
-}
-
-/**
- * @brief Get the selection start index.
- * @param label pointer to a label object.
- * @return selection start index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
- */
-uint16_t lv_label_get_text_sel_start(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->txt_sel_start;
-
-#else
- (void)label; /*Unused*/
- return LV_LABEL_TEXT_SEL_OFF;
-#endif
-}
-
-/**
- * @brief Get the selection end index.
- * @param label pointer to a label object.
- * @return selection end index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
- */
-uint16_t lv_label_get_text_sel_end(const lv_obj_t * label)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->txt_sel_end;
-#else
- (void)label; /*Unused*/
- return LV_LABEL_TEXT_SEL_OFF;
-#endif
-}
-
-/**
- * Check if a character is drawn under a point.
- * @param label Label object
- * @param pos Point to check for characte under
- * @return whether a character is drawn under the point
- */
-bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
- LV_ASSERT_NULL(pos);
-
- const char * txt = lv_label_get_text(label);
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- uint32_t line_start = 0;
- uint32_t new_line_start = 0;
- lv_coord_t max_w = lv_obj_get_width(label);
- const lv_style_t * style = lv_obj_get_style(label);
- const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
- lv_coord_t y = 0;
- lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
- lv_label_align_t align = lv_label_get_align(label);
-
- if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
- if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
-
- /*If the width will be expanded set the max length to very big */
- if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
- max_w = LV_COORD_MAX;
- }
-
- /*Search the line of the index letter */;
- while(txt[line_start] != '\0') {
- new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag);
-
- if(pos->y <= y + letter_height) break; /*The line is found (stored in 'line_start')*/
- y += letter_height + style->text.line_space;
-
- line_start = new_line_start;
- }
-
- /*Calculate the x coordinate*/
- lv_coord_t x = 0;
- lv_coord_t last_x = 0;
- if(align == LV_LABEL_ALIGN_CENTER) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
- x += lv_obj_get_width(label) / 2 - line_w / 2;
- }
- else if(align == LV_LABEL_ALIGN_RIGHT) {
- lv_coord_t line_w;
- line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
- x += lv_obj_get_width(label) - line_w;
- }
-
- lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
-
- uint32_t i = line_start;
- uint32_t i_current = i;
- uint32_t letter = '\0';
- uint32_t letter_next = '\0';
-
- if(new_line_start > 0) {
- while(i <= new_line_start - 1) {
- /* Get the current letter
- * Be careful 'i' already points to the next character */
- letter = lv_txt_encoded_next(txt, &i);
-
- /*Get the next letter for kerning*/
- letter_next = lv_txt_encoded_next(&txt[i], NULL);
-
- /*Handle the recolor command*/
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(&cmd_state, txt[i]) != false) {
- continue; /*Skip the letter is it is part of a command*/
- }
- }
- last_x = x;
- x += lv_font_get_glyph_width(font, letter, letter_next);
- if(pos->x < x) {
- i = i_current;
- break;
- }
- x += style->text.letter_space;
- i_current = i;
- }
- }
-
- int32_t max_diff = lv_font_get_glyph_width(font, letter, letter_next) + style->text.letter_space + 1;
- return (pos->x >= (last_x - style->text.letter_space) && pos->x <= (last_x + max_diff));
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Insert a text to the label. The label text can not be static.
- * @param label pointer to a label object
- * @param pos character index to insert. Expressed in character index and not byte index (Different
- * in UTF-8) 0: before first char. LV_LABEL_POS_LAST: after last char.
- * @param txt pointer to the text to insert
- */
-void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
- LV_ASSERT_STR(txt);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- /*Can not append to static text*/
- if(ext->static_txt != 0) return;
-
- lv_obj_invalidate(label);
-
- /*Allocate space for the new text*/
- size_t old_len = strlen(ext->text);
- size_t ins_len = strlen(txt);
- size_t new_len = ins_len + old_len;
- ext->text = lv_mem_realloc(ext->text, new_len + 1);
- LV_ASSERT_MEM(ext->text);
- if(ext->text == NULL) return;
-
- if(pos == LV_LABEL_POS_LAST) {
- pos = lv_txt_get_encoded_length(ext->text);
- }
-
- lv_txt_ins(ext->text, pos, txt);
- lv_label_refr_text(label);
-}
-
-/**
- * Delete characters from a label. The label text can not be static.
- * @param label pointer to a label object
- * @param pos character index to insert. Expressed in character index and not byte index (Different
- * in UTF-8) 0: before first char.
- * @param cnt number of characters to cut
- */
-void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt)
-{
- LV_ASSERT_OBJ(label, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- /*Can not append to static text*/
- if(ext->static_txt != 0) return;
-
- lv_obj_invalidate(label);
-
- char * label_txt = lv_label_get_text(label);
- /*Delete the characters*/
- lv_txt_cut(label_txt, pos, cnt);
-
- /*Refresh the label*/
- lv_label_refr_text(label);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the labels
- * @param label pointer to a label object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /* A label never covers an area */
- if(mode == LV_DESIGN_COVER_CHK)
- return false;
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_area_t coords;
- const lv_style_t * style = lv_obj_get_style(label);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(label);
- lv_obj_get_coords(label, &coords);
-
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(label);
- if(lv_group_get_focused(g) == label) {
- lv_draw_rect(&coords, mask, style, opa_scale);
- }
-#endif
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- if(ext->body_draw) {
- lv_area_t bg;
- lv_obj_get_coords(label, &bg);
- bg.x1 -= style->body.padding.left;
- bg.x2 += style->body.padding.right;
- bg.y1 -= style->body.padding.top;
- bg.y2 += style->body.padding.bottom;
-
- lv_draw_rect(&bg, mask, style, lv_obj_get_opa_scale(label));
- }
-
- lv_label_align_t align = lv_label_get_align(label);
-
- lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
- if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
- if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
- if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
-
- /* In ROLL mode the CENTER and RIGHT are pointless so remove them.
- * (In addition they will result mis-alignment is this case)*/
- if((ext->long_mode == LV_LABEL_LONG_SROLL || ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) &&
- (ext->align == LV_LABEL_ALIGN_CENTER || ext->align == LV_LABEL_ALIGN_RIGHT)) {
- lv_point_t size;
- lv_txt_get_size(&size, ext->text, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, flag);
- if(size.x > lv_obj_get_width(label)) {
- flag &= ~LV_TXT_FLAG_RIGHT;
- flag &= ~LV_TXT_FLAG_CENTER;
- }
- }
-#if LV_LABEL_LONG_TXT_HINT
- lv_draw_label_hint_t * hint = &ext->hint;
- if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC || lv_obj_get_height(label) < LV_LABEL_HINT_HEIGHT_LIMIT)
- hint = NULL;
-
-#else
- /*Just for compatibility*/
- lv_draw_label_hint_t * hint = NULL;
-#endif
- lv_draw_label_txt_sel_t sel;
-
- sel.start = lv_label_get_text_sel_start(label);
- sel.end = lv_label_get_text_sel_end(label);
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ext->offset, &sel, hint, lv_obj_get_base_dir(label));
-
-
- if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
- lv_point_t size;
- lv_txt_get_size(&size, ext->text, style->text.font, style->text.letter_space, style->text.line_space,
- LV_COORD_MAX, flag);
-
- lv_point_t ofs;
-
- /*Draw the text again next to the original to make an circular effect */
- if(size.x > lv_obj_get_width(label)) {
- ofs.x = ext->offset.x + size.x +
- lv_font_get_glyph_width(style->text.font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
- ofs.y = ext->offset.y;
-
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs, &sel, NULL, lv_obj_get_base_dir(label));
- }
-
- /*Draw the text again below the original to make an circular effect */
- if(size.y > lv_obj_get_height(label)) {
- ofs.x = ext->offset.x;
- ofs.y = ext->offset.y + size.y + lv_font_get_line_height(style->text.font);
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs, &sel, NULL, lv_obj_get_base_dir(label));
- }
- }
- }
- return true;
-}
-
-/**
- * Signal function of the label
- * @param label pointer to a label object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(label, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(sign == LV_SIGNAL_CLEANUP) {
- if(ext->static_txt == 0) {
- lv_mem_free(ext->text);
- ext->text = NULL;
- }
- lv_label_dot_tmp_free(label);
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- /*Revert dots for proper refresh*/
- lv_label_revert_dots(label);
-
- lv_label_refr_text(label);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- if(lv_area_get_width(&label->coords) != lv_area_get_width(param) ||
- lv_area_get_height(&label->coords) != lv_area_get_height(param)) {
- lv_label_revert_dots(label);
- lv_label_refr_text(label);
- }
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- if(ext->body_draw) {
- const lv_style_t * style = lv_label_get_style(label, LV_LABEL_STYLE_MAIN);
-
- label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.left);
- label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.right);
- label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.top);
- label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.bottom);
- }
- }
- else if(sign == LV_SIGNAL_BASE_DIR_CHG) {
-#if LV_USE_BIDI
- if(ext->static_txt == 0) lv_label_set_text(label, NULL);
-#endif
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_label";
- }
-
- return res;
-}
-
-/**
- * Refresh the label with its text stored in its extended data
- * @param label pointer to a label object
- */
-static void lv_label_refr_text(lv_obj_t * label)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
-
- if(ext->text == NULL) return;
-#if LV_LABEL_LONG_TXT_HINT
- ext->hint.line_start = -1; /*The hint is invalid if the text changes*/
-#endif
-
- lv_coord_t max_w = lv_obj_get_width(label);
- const lv_style_t * style = lv_obj_get_style(label);
- const lv_font_t * font = style->text.font;
-
- /*If the width will be expanded set the max length to very big */
- if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
- max_w = LV_COORD_MAX;
- }
-
- /*Calc. the height and longest line*/
- lv_point_t size;
- lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
- if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
- if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- lv_txt_get_size(&size, ext->text, font, style->text.letter_space, style->text.line_space, max_w, flag);
-
- /*Set the full size in expand mode*/
- if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
- lv_obj_set_size(label, size.x, size.y);
- }
- /*In roll mode keep the size but start offset animations*/
- else if(ext->long_mode == LV_LABEL_LONG_SROLL) {
-#if LV_USE_ANIMATION
- lv_anim_t anim;
- anim.var = label;
- anim.repeat = 1;
- anim.playback = 1;
- anim.start = 0;
- anim.ready_cb = NULL;
- anim.path_cb = lv_anim_path_linear;
- anim.playback_pause =
- (((lv_font_get_glyph_width(style->text.font, ' ', ' ') + style->text.letter_space) * 1000) /
- ext->anim_speed) *
- LV_LABEL_WAIT_CHAR_COUNT;
- anim.repeat_pause = anim.playback_pause;
- anim.act_time = -anim.playback_pause;
-
- bool hor_anim = false;
- if(size.x > lv_obj_get_width(label)) {
- anim.end = lv_obj_get_width(label) - size.x;
- anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_x;
- anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
- lv_anim_create(&anim);
- hor_anim = true;
- } else {
- /*Delete the offset animation if not required*/
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
- ext->offset.x = 0;
- }
-
- if(size.y > lv_obj_get_height(label) && hor_anim == false) {
- anim.end = lv_obj_get_height(label) - size.y - (lv_font_get_line_height(font));
- anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_y;
-
- anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
- lv_anim_create(&anim);
- } else {
- /*Delete the offset animation if not required*/
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
- ext->offset.y = 0;
- }
-#endif
- }
- /*In roll inf. mode keep the size but start offset animations*/
- else if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
-#if LV_USE_ANIMATION
- lv_label_align_t align = lv_label_get_align(label);
-
- lv_anim_t anim;
- anim.var = label;
- anim.repeat = 1;
- anim.playback = 0;
- anim.act_time = -(((lv_font_get_glyph_width(style->text.font, ' ', ' ') + style->text.letter_space) * 1000) /
- ext->anim_speed) *
- LV_LABEL_WAIT_CHAR_COUNT;
- anim.ready_cb = NULL;
- anim.path_cb = lv_anim_path_linear;
- anim.playback_pause = 0;
- anim.repeat_pause = 0;
-
- bool hor_anim = false;
- if(size.x > lv_obj_get_width(label)) {
- if(align == LV_LABEL_ALIGN_RIGHT) {
- anim.end = 0;
- anim.start = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
- } else {
- anim.start = 0;
- anim.end = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
- }
-
- anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_x;
- anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
- lv_anim_create(&anim);
- hor_anim = true;
- } else {
- /*Delete the offset animation if not required*/
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_x);
- ext->offset.x = 0;
- }
-
- if(size.y > lv_obj_get_height(label) && hor_anim == false) {
- if(align == LV_LABEL_ALIGN_RIGHT) {
- anim.end = 0;
- anim.start = -size.y - (lv_font_get_line_height(font));
- } else {
- anim.start = 0;
- anim.end = -size.y - (lv_font_get_line_height(font));
- }
-
- anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_y;
- anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
- lv_anim_create(&anim);
- } else {
- /*Delete the offset animation if not required*/
- lv_anim_del(label, (lv_anim_exec_xcb_t)lv_label_set_offset_y);
- ext->offset.y = 0;
- }
-#endif
- } else if(ext->long_mode == LV_LABEL_LONG_DOT) {
- if(size.y <= lv_obj_get_height(label)) { /*No dots are required, the text is short enough*/
- ext->dot_end = LV_LABEL_DOT_END_INV;
- } else if(lv_txt_get_encoded_length(ext->text) <= LV_LABEL_DOT_NUM) { /*Don't turn to dots all the characters*/
- ext->dot_end = LV_LABEL_DOT_END_INV;
- } else {
- lv_point_t p;
- p.x = lv_obj_get_width(label) -
- (lv_font_get_glyph_width(style->text.font, '.', '.') + style->text.letter_space) *
- LV_LABEL_DOT_NUM; /*Shrink with dots*/
- p.y = lv_obj_get_height(label);
- p.y -= p.y %
- (lv_font_get_line_height(style->text.font) + style->text.line_space); /*Round down to the last line*/
- p.y -= style->text.line_space; /*Trim the last line space*/
- uint32_t letter_id = lv_label_get_letter_on(label, &p);
-
-
- /*Be sure there is space for the dots*/
- size_t txt_len = strlen(ext->text);
- uint32_t byte_id = lv_txt_encoded_get_byte_id(ext->text, letter_id);
- while(byte_id + LV_LABEL_DOT_NUM > txt_len) {
- byte_id -= lv_txt_encoded_size(&ext->text[byte_id]);
- letter_id--;
- }
-
- /*Save letters under the dots and replace them with dots*/
- uint32_t byte_id_ori = byte_id;
- uint32_t i;
- uint8_t len = 0;
- for(i = 0; i <= LV_LABEL_DOT_NUM; i++) {
- len += lv_txt_encoded_size(&ext->text[byte_id]);
- lv_txt_encoded_next(ext->text, &byte_id);
- }
-
- if(lv_label_set_dot_tmp(label, &ext->text[byte_id_ori], len)) {
- for(i = 0; i < LV_LABEL_DOT_NUM; i++) {
- ext->text[byte_id_ori + i] = '.';
- }
- ext->text[byte_id_ori + LV_LABEL_DOT_NUM] = '\0';
- ext->dot_end = letter_id + LV_LABEL_DOT_NUM;
- }
- }
- }
- /*In break mode only the height can change*/
- else if(ext->long_mode == LV_LABEL_LONG_BREAK) {
- lv_obj_set_height(label, size.y);
- }
- /*Do not set the size in Clip mode*/
- else if(ext->long_mode == LV_LABEL_LONG_CROP) {
- /*Do nothing*/
- }
-
- lv_obj_invalidate(label);
-}
-
-static void lv_label_revert_dots(lv_obj_t * label)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->long_mode != LV_LABEL_LONG_DOT) return;
- if(ext->dot_end == LV_LABEL_DOT_END_INV) return;
- uint32_t letter_i = ext->dot_end - LV_LABEL_DOT_NUM;
- uint32_t byte_i = lv_txt_encoded_get_byte_id(ext->text, letter_i);
-
- /*Restore the characters*/
- uint8_t i = 0;
- char * dot_tmp = lv_label_get_dot_tmp(label);
- while(ext->text[byte_i + i] != '\0') {
- ext->text[byte_i + i] = dot_tmp[i];
- i++;
- }
- ext->text[byte_i + i] = dot_tmp[i];
- lv_label_dot_tmp_free(label);
-
- ext->dot_end = LV_LABEL_DOT_END_INV;
-}
-
-#if LV_USE_ANIMATION
-static void lv_label_set_offset_x(lv_obj_t * label, lv_coord_t x)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->offset.x = x;
- lv_obj_invalidate(label);
-}
-
-static void lv_label_set_offset_y(lv_obj_t * label, lv_coord_t y)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->offset.y = y;
- lv_obj_invalidate(label);
-}
-#endif
-
-/**
- * Store `len` characters from `data`. Allocates space if necessary.
- *
- * @param label pointer to label object
- * @param len Number of characters to store.
- * @return true on success.
- */
-static bool lv_label_set_dot_tmp(lv_obj_t * label, char * data, uint16_t len)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- lv_label_dot_tmp_free(label); /* Deallocate any existing space */
- if(len > sizeof(char *)) {
- /* Memory needs to be allocated. Allocates an additional byte
- * for a NULL-terminator so it can be copied. */
- ext->dot.tmp_ptr = lv_mem_alloc(len + 1);
- if(ext->dot.tmp_ptr == NULL) {
- LV_LOG_ERROR("Failed to allocate memory for dot_tmp_ptr");
- return false;
- }
- memcpy(ext->dot.tmp_ptr, data, len);
- ext->dot.tmp_ptr[len] = '\0';
- ext->dot_tmp_alloc = true;
- } else {
- /* Characters can be directly stored in object */
- ext->dot_tmp_alloc = false;
- memcpy(ext->dot.tmp, data, len);
- }
- return true;
-}
-
-/**
- * Get the stored dot_tmp characters
- * @param label pointer to label object
- * @return char pointer to a stored characters. Is *not* necessarily NULL-terminated.
- */
-static char * lv_label_get_dot_tmp(lv_obj_t * label)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->dot_tmp_alloc) {
- return ext->dot.tmp_ptr;
- } else {
- return ext->dot.tmp;
- }
-}
-
-/**
- * Free the dot_tmp_ptr field if it was previously allocated.
- * Always clears the field
- * @param label pointer to label object.
- */
-static void lv_label_dot_tmp_free(lv_obj_t * label)
-{
- lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- if(ext->dot_tmp_alloc && ext->dot.tmp_ptr) {
- lv_mem_free(ext->dot.tmp_ptr);
- }
- ext->dot_tmp_alloc = false;
- ext->dot.tmp_ptr = NULL;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_label.h b/src/libs/lvgl/src/lv_objx/lv_label.h
deleted file mode 100644
index faa21684..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_label.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/**
- * @file lv_rect.h
- *
- */
-
-#ifndef LV_LABEL_H
-#define LV_LABEL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_LABEL != 0
-
-#include <stdarg.h>
-#include "../lv_core/lv_obj.h"
-#include "../lv_font/lv_font.h"
-#include "../lv_font/lv_symbol_def.h"
-#include "../lv_misc/lv_txt.h"
-#include "../lv_draw/lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_LABEL_DOT_NUM 3
-#define LV_LABEL_POS_LAST 0xFFFF
-#define LV_LABEL_TEXT_SEL_OFF LV_DRAW_LABEL_NO_TXT_SEL
-
-LV_EXPORT_CONST_INT(LV_LABEL_DOT_NUM);
-LV_EXPORT_CONST_INT(LV_LABEL_POS_LAST);
-LV_EXPORT_CONST_INT(LV_LABEL_TEXT_SEL_OFF);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Long mode behaviors. Used in 'lv_label_ext_t' */
-enum {
- LV_LABEL_LONG_EXPAND, /**< Expand the object size to the text size*/
- LV_LABEL_LONG_BREAK, /**< Keep the object width, break the too long lines and expand the object
- height*/
- LV_LABEL_LONG_DOT, /**< Keep the size and write dots at the end if the text is too long*/
- LV_LABEL_LONG_SROLL, /**< Keep the size and roll the text back and forth*/
- LV_LABEL_LONG_SROLL_CIRC, /**< Keep the size and roll the text circularly*/
- LV_LABEL_LONG_CROP, /**< Keep the size and crop the text out of it*/
-};
-typedef uint8_t lv_label_long_mode_t;
-
-/** Label align policy*/
-enum {
- LV_LABEL_ALIGN_LEFT, /**< Align text to left */
- LV_LABEL_ALIGN_CENTER, /**< Align text to center */
- LV_LABEL_ALIGN_RIGHT, /**< Align text to right */
- LV_LABEL_ALIGN_AUTO, /**< Use LEFT or RIGHT depending on the direction of the text (LTR/RTL)*/
-};
-typedef uint8_t lv_label_align_t;
-
-/** Data of label*/
-typedef struct
-{
- /*Inherited from 'base_obj' so no inherited ext.*/ /*Ext. of ancestor*/
- /*New data for this type */
- char * text; /*Text of the label*/
-
- union
- {
- char * tmp_ptr; /* Pointer to the allocated memory containing the character which are replaced by dots (Handled
- by the library)*/
- char tmp[LV_LABEL_DOT_NUM + 1]; /* Directly store the characters if <=4 characters */
- } dot;
- uint16_t dot_end; /*The text end position in dot mode (Handled by the library)*/
- lv_point_t offset; /*Text draw position offset*/
-#if LV_LABEL_LONG_TXT_HINT
- lv_draw_label_hint_t hint; /*Used to buffer info about large text*/
-#endif
-
-#if LV_USE_ANIMATION
- uint16_t anim_speed; /*Speed of scroll and roll animation in px/sec unit*/
-#endif
-
-#if LV_LABEL_TEXT_SEL
- uint16_t txt_sel_start; /*Left-most selection character*/
- uint16_t txt_sel_end; /*Right-most selection character*/
-#endif
-
- lv_label_long_mode_t long_mode : 3; /*Determinate what to do with the long texts*/
- uint8_t static_txt : 1; /*Flag to indicate the text is static*/
- uint8_t align : 2; /*Align type from 'lv_label_align_t'*/
- uint8_t recolor : 1; /*Enable in-line letter re-coloring*/
- uint8_t expand : 1; /*Ignore real width (used by the library with LV_LABEL_LONG_ROLL)*/
- uint8_t body_draw : 1; /*Draw background body*/
- uint8_t dot_tmp_alloc : 1; /*True if dot_tmp has been allocated. False if dot_tmp directly holds up to 4 bytes of
- characters */
-} lv_label_ext_t;
-
-/** Label styles*/
-enum {
- LV_LABEL_STYLE_MAIN,
-};
-typedef uint8_t lv_label_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a label objects
- * @param par pointer to an object, it will be the parent of the new label
- * @param copy pointer to a button object, if not NULL then the new object will be copied from it
- * @return pointer to the created button
- */
-lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new text for a label. Memory will be allocated to store the text by the label.
- * @param label pointer to a label object
- * @param text '\0' terminated character string. NULL to refresh with the current text.
- */
-void lv_label_set_text(lv_obj_t * label, const char * text);
-
-/**
- * Set a new formatted text for a label. Memory will be allocated to store the text by the label.
- * @param label pointer to a label object
- * @param fmt `printf`-like format
- */
-void lv_label_set_text_fmt(lv_obj_t * label, const char * fmt, ...);
-
-/**
- * Set a new text for a label from a character array. The array don't has to be '\0' terminated.
- * Memory will be allocated to store the array by the label.
- * @param label pointer to a label object
- * @param array array of characters or NULL to refresh the label
- * @param size the size of 'array' in bytes
- */
-void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size);
-
-/**
- * Set a static text. It will not be saved by the label so the 'text' variable
- * has to be 'alive' while the label exist.
- * @param label pointer to a label object
- * @param text pointer to a text. NULL to refresh with the current text.
- */
-void lv_label_set_static_text(lv_obj_t * label, const char * text);
-
-/**
- * Set the behavior of the label with longer text then the object size
- * @param label pointer to a label object
- * @param long_mode the new mode from 'lv_label_long_mode' enum.
- * In LV_LONG_BREAK/LONG/ROLL the size of the label should be set AFTER this
- * function
- */
-void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode);
-
-/**
- * Set the align of the label (left or center)
- * @param label pointer to a label object
- * @param align 'LV_LABEL_ALIGN_LEFT' or 'LV_LABEL_ALIGN_LEFT'
- */
-void lv_label_set_align(lv_obj_t * label, lv_label_align_t align);
-
-/**
- * Enable the recoloring by in-line commands
- * @param label pointer to a label object
- * @param en true: enable recoloring, false: disable
- */
-void lv_label_set_recolor(lv_obj_t * label, bool en);
-
-/**
- * Set the label to draw (or not draw) background specified in its style's body
- * @param label pointer to a label object
- * @param en true: draw body; false: don't draw body
- */
-void lv_label_set_body_draw(lv_obj_t * label, bool en);
-
-/**
- * Set the label's animation speed in LV_LABEL_LONG_SROLL/SCROLL_CIRC modes
- * @param label pointer to a label object
- * @param anim_speed speed of animation in px/sec unit
- */
-void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed);
-
-/**
- * Set the style of an label
- * @param label pointer to an label object
- * @param type which style should be get (can be only `LV_LABEL_STYLE_MAIN`)
- * @param style pointer to a style
- */
-static inline void lv_label_set_style(lv_obj_t * label, lv_label_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(label, style);
-}
-
-/**
- * @brief Set the selection start index.
- * @param label pointer to a label object.
- * @param index index to set. `LV_LABEL_TXT_SEL_OFF` to select nothing.
- */
-void lv_label_set_text_sel_start(lv_obj_t * label, uint16_t index);
-
-/**
- * @brief Set the selection end index.
- * @param label pointer to a label object.
- * @param index index to set. `LV_LABEL_TXT_SEL_OFF` to select nothing.
- */
-void lv_label_set_text_sel_end(lv_obj_t * label, uint16_t index);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a label
- * @param label pointer to a label object
- * @return the text of the label
- */
-char * lv_label_get_text(const lv_obj_t * label);
-
-/**
- * Get the long mode of a label
- * @param label pointer to a label object
- * @return the long mode
- */
-lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label);
-
-/**
- * Get the align attribute
- * @param label pointer to a label object
- * @return LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER
- */
-lv_label_align_t lv_label_get_align(const lv_obj_t * label);
-
-/**
- * Get the recoloring attribute
- * @param label pointer to a label object
- * @return true: recoloring is enabled, false: disable
- */
-bool lv_label_get_recolor(const lv_obj_t * label);
-
-/**
- * Get the body draw attribute
- * @param label pointer to a label object
- * @return true: draw body; false: don't draw body
- */
-bool lv_label_get_body_draw(const lv_obj_t * label);
-
-/**
- * Get the label's animation speed in LV_LABEL_LONG_ROLL and SCROLL modes
- * @param label pointer to a label object
- * @return speed of animation in px/sec unit
- */
-uint16_t lv_label_get_anim_speed(const lv_obj_t * label);
-
-/**
- * Get the relative x and y coordinates of a letter
- * @param label pointer to a label object
- * @param index index of the letter [0 ... text length]. Expressed in character index, not byte
- * index (different in UTF-8)
- * @param pos store the result here (E.g. index = 0 gives 0;0 coordinates)
- */
-void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_point_t * pos);
-
-/**
- * Get the index of letter on a relative point of a label
- * @param label pointer to label object
- * @param pos pointer to point with coordinates on a the label
- * @return the index of the letter on the 'pos_p' point (E.g. on 0;0 is the 0. letter)
- * Expressed in character index and not byte index (different in UTF-8)
- */
-uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos);
-
-/**
- * Check if a character is drawn under a point.
- * @param label Label object
- * @param pos Point to check for characte under
- * @return whether a character is drawn under the point
- */
-bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos);
-
-/**
- * Get the style of an label object
- * @param label pointer to an label object
- * @param type which style should be get (can be only `LV_LABEL_STYLE_MAIN`)
- * @return pointer to the label's style
- */
-static inline const lv_style_t * lv_label_get_style(const lv_obj_t * label, lv_label_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(label);
-}
-
-/**
- * @brief Get the selection start index.
- * @param label pointer to a label object.
- * @return selection start index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
- */
-uint16_t lv_label_get_text_sel_start(const lv_obj_t * label);
-
-/**
- * @brief Get the selection end index.
- * @param label pointer to a label object.
- * @return selection end index. `LV_LABEL_TXT_SEL_OFF` if nothing is selected.
- */
-uint16_t lv_label_get_text_sel_end(const lv_obj_t * label);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Insert a text to the label. The label text can not be static.
- * @param label pointer to a label object
- * @param pos character index to insert. Expressed in character index and not byte index (Different
- * in UTF-8) 0: before first char. LV_LABEL_POS_LAST: after last char.
- * @param txt pointer to the text to insert
- */
-void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt);
-
-/**
- * Delete characters from a label. The label text can not be static.
- * @param label pointer to a label object
- * @param pos character index to insert. Expressed in character index and not byte index (Different
- * in UTF-8) 0: before first char.
- * @param cnt number of characters to cut
- */
-void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_LABEL*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LABEL_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_led.c b/src/libs/lvgl/src/lv_objx/lv_led.c
deleted file mode 100644
index 133ccc8b..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_led.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/**
- * @file lv_led.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_led.h"
-#if LV_USE_LED != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_draw/lv_draw.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_led"
-
-#define LV_LED_WIDTH_DEF (LV_DPI / 3)
-#define LV_LED_HEIGHT_DEF (LV_DPI / 3)
-#define LV_LED_BRIGHT_OFF 100
-#define LV_LED_BRIGHT_ON 255
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_led_signal(lv_obj_t * led, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design_f;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a led objects
- * @param par pointer to an object, it will be the parent of the new led
- * @param copy pointer to a led object, if not NULL then the new object will be copied from it
- * @return pointer to the created led
- */
-lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("led create started");
-
- /*Create the ancestor basic object*/
- lv_obj_t * new_led = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_led);
- if(new_led == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_led);
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_led);
-
- /*Allocate the object type specific extended data*/
- lv_led_ext_t * ext = lv_obj_allocate_ext_attr(new_led, sizeof(lv_led_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->bright = LV_LED_BRIGHT_ON;
-
- lv_obj_set_signal_cb(new_led, lv_led_signal);
- lv_obj_set_design_cb(new_led, lv_led_design);
-
- /*Init the new led object*/
- if(copy == NULL) {
- lv_obj_set_size(new_led, LV_LED_WIDTH_DEF, LV_LED_HEIGHT_DEF);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_led_set_style(new_led, LV_LED_STYLE_MAIN, th->style.led);
- } else {
- lv_led_set_style(new_led, LV_LED_STYLE_MAIN, &lv_style_pretty_color);
- }
- }
- /*Copy an existing object*/
- else {
- lv_led_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->bright = copy_ext->bright;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_led);
- }
-
- LV_LOG_INFO("led created");
-
- return new_led;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the brightness of a LED object
- * @param led pointer to a LED object
- * @param bright 0 (max. dark) ... 255 (max. light)
- */
-void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
-{
- LV_ASSERT_OBJ(led, LV_OBJX_NAME);
-
- /*Set the brightness*/
- lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
- if(ext->bright == bright) return;
-
- ext->bright = bright;
-
- /*Invalidate the object there fore it will be redrawn*/
- lv_obj_invalidate(led);
-}
-
-/**
- * Light on a LED
- * @param led pointer to a LED object
- */
-void lv_led_on(lv_obj_t * led)
-{
- LV_ASSERT_OBJ(led, LV_OBJX_NAME);
-
- lv_led_set_bright(led, LV_LED_BRIGHT_ON);
-}
-
-/**
- * Light off a LED
- * @param led pointer to a LED object
- */
-void lv_led_off(lv_obj_t * led)
-{
- LV_ASSERT_OBJ(led, LV_OBJX_NAME);
-
- lv_led_set_bright(led, LV_LED_BRIGHT_OFF);
-}
-
-/**
- * Toggle the state of a LED
- * @param led pointer to a LED object
- */
-void lv_led_toggle(lv_obj_t * led)
-{
- LV_ASSERT_OBJ(led, LV_OBJX_NAME);
-
- uint8_t bright = lv_led_get_bright(led);
- if(bright > (LV_LED_BRIGHT_OFF + LV_LED_BRIGHT_ON) >> 1)
- lv_led_off(led);
- else
- lv_led_on(led);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the brightness of a LEd object
- * @param led pointer to LED object
- * @return bright 0 (max. dark) ... 255 (max. light)
- */
-uint8_t lv_led_get_bright(const lv_obj_t * led)
-{
- LV_ASSERT_OBJ(led, LV_OBJX_NAME);
-
- lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
- return ext->bright;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the leds
- * @param led pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask area*/
- return ancestor_design_f(led, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Make darker colors in a temporary style according to the brightness*/
- lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
- const lv_style_t * style = lv_obj_get_style(led);
-
- /* Store the real pointer because of 'lv_group'
- * If the object is in focus 'lv_obj_get_style()' will give a pointer to tmp style
- * and to the real object style. It is important because of style change tricks below*/
- const lv_style_t * style_ori_p = led->style_p;
-
- /*Create a temporal style*/
- lv_style_t leds_tmp;
- memcpy(&leds_tmp, style, sizeof(leds_tmp));
-
- /*Mix. the color with black proportionally with brightness*/
- leds_tmp.body.main_color = lv_color_mix(leds_tmp.body.main_color, LV_COLOR_BLACK, ext->bright);
- leds_tmp.body.grad_color = lv_color_mix(leds_tmp.body.grad_color, LV_COLOR_BLACK, ext->bright);
- leds_tmp.body.border.color = lv_color_mix(leds_tmp.body.border.color, LV_COLOR_BLACK, ext->bright);
-
- /*Set the current swidth according to brightness proportionally between LV_LED_BRIGHT_OFF
- * and LV_LED_BRIGHT_ON*/
- uint16_t bright_tmp = ext->bright;
- leds_tmp.body.shadow.width =
- ((bright_tmp - LV_LED_BRIGHT_OFF) * style->body.shadow.width) / (LV_LED_BRIGHT_ON - LV_LED_BRIGHT_OFF);
-
- led->style_p = &leds_tmp;
- ancestor_design_f(led, mask, mode);
- led->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
- }
- return true;
-}
-
-/**
- * Signal function of the led
- * @param led pointer to a led object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_led_signal(lv_obj_t * led, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(led, sign, param);
- if(res != LV_RES_OK) return res;
-
- if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_led";
- }
-
- return res;
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_led.h b/src/libs/lvgl/src/lv_objx/lv_led.h
deleted file mode 100644
index a0c9125e..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_led.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * @file lv_led.h
- *
- */
-
-#ifndef LV_LED_H
-#define LV_LED_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_LED != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of led*/
-typedef struct
-{
- /*No inherited ext.*/
- /*New data for this type */
- uint8_t bright; /*Current brightness of the LED (0..255)*/
-} lv_led_ext_t;
-
-/*Styles*/
-enum {
- LV_LED_STYLE_MAIN,
-};
-typedef uint8_t lv_led_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a led objects
- * @param par pointer to an object, it will be the parent of the new led
- * @param copy pointer to a led object, if not NULL then the new object will be copied from it
- * @return pointer to the created led
- */
-lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/**
- * Set the brightness of a LED object
- * @param led pointer to a LED object
- * @param bright 0 (max. dark) ... 255 (max. light)
- */
-void lv_led_set_bright(lv_obj_t * led, uint8_t bright);
-
-/**
- * Light on a LED
- * @param led pointer to a LED object
- */
-void lv_led_on(lv_obj_t * led);
-
-/**
- * Light off a LED
- * @param led pointer to a LED object
- */
-void lv_led_off(lv_obj_t * led);
-
-/**
- * Toggle the state of a LED
- * @param led pointer to a LED object
- */
-void lv_led_toggle(lv_obj_t * led);
-
-/**
- * Set the style of a led
- * @param led pointer to a led object
- * @param type which style should be set (can be only `LV_LED_STYLE_MAIN`)
- * @param style pointer to a style
- */
-static inline void lv_led_set_style(lv_obj_t * led, lv_led_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(led, style);
-}
-
-/**
- * Get the brightness of a LEd object
- * @param led pointer to LED object
- * @return bright 0 (max. dark) ... 255 (max. light)
- */
-uint8_t lv_led_get_bright(const lv_obj_t * led);
-
-/**
- * Get the style of an led object
- * @param led pointer to an led object
- * @param type which style should be get (can be only `LV_CHART_STYLE_MAIN`)
- * @return pointer to the led's style
- */
-static inline const lv_style_t * lv_led_get_style(const lv_obj_t * led, lv_led_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(led);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_LED*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LED_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_line.c b/src/libs/lvgl/src/lv_objx/lv_line.c
deleted file mode 100644
index ec9e35da..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_line.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/**
- * @file lv_line.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_line.h"
-
-#if LV_USE_LINE != 0
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_misc/lv_math.h"
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_line"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a line objects
- * @param par pointer to an object, it will be the parent of the new line
- * @return pointer to the created line
- */
-lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("line create started");
-
- /*Create a basic object*/
- lv_obj_t * new_line = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_line);
- if(new_line == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_line);
-
- /*Extend the basic object to line object*/
- lv_line_ext_t * ext = lv_obj_allocate_ext_attr(new_line, sizeof(lv_line_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->point_num = 0;
- ext->point_array = NULL;
- ext->auto_size = 1;
- ext->y_inv = 0;
-
- lv_obj_set_design_cb(new_line, lv_line_design);
- lv_obj_set_signal_cb(new_line, lv_line_signal);
-
- /*Init the new line*/
- if(copy == NULL) {
- lv_obj_set_size(new_line, LV_DPI,
- LV_DPI); /*Auto size is enables, but set default size until no points are added*/
- lv_obj_set_style(new_line, NULL); /*Inherit parent's style*/
- lv_obj_set_click(new_line, false);
- }
- /*Copy an existing object*/
- else {
- lv_line_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- lv_line_set_auto_size(new_line, lv_line_get_auto_size(copy));
- lv_line_set_y_invert(new_line, lv_line_get_y_invert(copy));
- lv_line_set_auto_size(new_line, lv_line_get_auto_size(copy));
- lv_line_set_points(new_line, copy_ext->point_array, copy_ext->point_num);
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_line);
- }
-
- LV_LOG_INFO("line created");
-
- return new_line;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set an array of points. The line object will connect these points.
- * @param line pointer to a line object
- * @param point_a an array of points. Only the address is saved,
- * so the array can NOT be a local variable which will be destroyed
- * @param point_num number of points in 'point_a'
- */
-void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t point_num)
-{
- LV_ASSERT_OBJ(line, LV_OBJX_NAME);
-
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
- ext->point_array = point_a;
- ext->point_num = point_num;
-
- if(point_num > 0 && ext->auto_size != 0) {
- uint16_t i;
- lv_coord_t xmax = LV_COORD_MIN;
- lv_coord_t ymax = LV_COORD_MIN;
- for(i = 0; i < point_num; i++) {
- xmax = LV_MATH_MAX(point_a[i].x, xmax);
- ymax = LV_MATH_MAX(point_a[i].y, ymax);
- }
-
- const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
- lv_obj_set_size(line, xmax + style->line.width, ymax + style->line.width);
- }
-
- lv_obj_invalidate(line);
-}
-
-/**
- * Enable (or disable) the auto-size option. The size of the object will fit to its points.
- * (set width to x max and height to y max)
- * @param line pointer to a line object
- * @param en true: auto size is enabled, false: auto size is disabled
- */
-void lv_line_set_auto_size(lv_obj_t * line, bool en)
-{
- LV_ASSERT_OBJ(line, LV_OBJX_NAME);
-
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
- if(ext->auto_size == en) return;
-
- ext->auto_size = en == false ? 0 : 1;
-
- /*Refresh the object*/
- if(en) lv_line_set_points(line, ext->point_array, ext->point_num);
-}
-
-/**
- * Enable (or disable) the y coordinate inversion.
- * If enabled then y will be subtracted from the height of the object,
- * therefore the y=0 coordinate will be on the bottom.
- * @param line pointer to a line object
- * @param en true: enable the y inversion, false:disable the y inversion
- */
-void lv_line_set_y_invert(lv_obj_t * line, bool en)
-{
- LV_ASSERT_OBJ(line, LV_OBJX_NAME);
-
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
- if(ext->y_inv == en) return;
-
- ext->y_inv = en == false ? 0 : 1;
-
- lv_obj_invalidate(line);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the auto size attribute
- * @param line pointer to a line object
- * @return true: auto size is enabled, false: disabled
- */
-bool lv_line_get_auto_size(const lv_obj_t * line)
-{
- LV_ASSERT_OBJ(line, LV_OBJX_NAME);
-
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
-
- return ext->auto_size == 0 ? false : true;
-}
-
-/**
- * Get the y inversion attribute
- * @param line pointer to a line object
- * @return true: y inversion is enabled, false: disabled
- */
-bool lv_line_get_y_invert(const lv_obj_t * line)
-{
- LV_ASSERT_OBJ(line, LV_OBJX_NAME);
-
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
-
- return ext->y_inv == 0 ? false : true;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the lines
- * @param line pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*A line never covers an area*/
- if(mode == LV_DESIGN_COVER_CHK)
- return false;
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
-
- if(ext->point_num == 0 || ext->point_array == NULL) return false;
-
- const lv_style_t * style = lv_obj_get_style(line);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(line);
- lv_area_t area;
- lv_obj_get_coords(line, &area);
- lv_coord_t x_ofs = area.x1;
- lv_coord_t y_ofs = area.y1;
- lv_point_t p1;
- lv_point_t p2;
- lv_coord_t h = lv_obj_get_height(line);
- uint16_t i;
-
- lv_style_t circle_style_tmp; /*If rounded...*/
- if(style->line.rounded) {
- lv_style_copy(&circle_style_tmp, style);
- circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
- circle_style_tmp.body.main_color = style->line.color;
- circle_style_tmp.body.grad_color = style->line.color;
- circle_style_tmp.body.opa = style->line.opa;
- }
- lv_area_t circle_area;
-
- /*Read all points and draw the lines*/
- for(i = 0; i < ext->point_num - 1; i++) {
-
- p1.x = ext->point_array[i].x + x_ofs;
- p2.x = ext->point_array[i + 1].x + x_ofs;
-
- if(ext->y_inv == 0) {
- p1.y = ext->point_array[i].y + y_ofs;
- p2.y = ext->point_array[i + 1].y + y_ofs;
- } else {
- p1.y = h - ext->point_array[i].y + y_ofs;
- p2.y = h - ext->point_array[i + 1].y + y_ofs;
- }
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
-
- /*Draw circle on the joints if enabled*/
- if(style->line.rounded) {
- circle_area.x1 = p1.x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = p1.y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = p1.x + ((style->line.width - 1) >> 1);
- circle_area.y2 = p1.y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, mask, &circle_style_tmp, opa_scale);
- }
- }
-
- /*Draw circle on the last point too if enabled*/
- if(style->line.rounded) {
- circle_area.x1 = p2.x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = p2.y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = p2.x + ((style->line.width - 1) >> 1);
- circle_area.y2 = p2.y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, mask, &circle_style_tmp, opa_scale);
- }
- }
- return true;
-}
-
-/**
- * Signal function of the line
- * @param line pointer to a line object
- * @param sign a signal type from lv_signal_t enum
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(line, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
- if(line->ext_draw_pad < style->line.width) line->ext_draw_pad = style->line.width;
- }
-
- return res;
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_line.h b/src/libs/lvgl/src/lv_objx/lv_line.h
deleted file mode 100644
index cfea7368..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_line.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/**
- * @file lv_line.h
- *
- */
-
-#ifndef LV_LINE_H
-#define LV_LINE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_LINE != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of line*/
-typedef struct
-{
- /*Inherited from 'base_obj' so no inherited ext.*/ /*Ext. of ancestor*/
- const lv_point_t * point_array; /*Pointer to an array with the points of the line*/
- uint16_t point_num; /*Number of points in 'point_array' */
- uint8_t auto_size : 1; /*1: set obj. width to x max and obj. height to y max */
- uint8_t y_inv : 1; /*1: y == 0 will be on the bottom*/
-} lv_line_ext_t;
-
-/*Styles*/
-enum {
- LV_LINE_STYLE_MAIN,
-};
-typedef uint8_t lv_line_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a line objects
- * @param par pointer to an object, it will be the parent of the new line
- * @return pointer to the created line
- */
-lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set an array of points. The line object will connect these points.
- * @param line pointer to a line object
- * @param point_a an array of points. Only the address is saved,
- * so the array can NOT be a local variable which will be destroyed
- * @param point_num number of points in 'point_a'
- */
-void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t point_num);
-
-/**
- * Enable (or disable) the auto-size option. The size of the object will fit to its points.
- * (set width to x max and height to y max)
- * @param line pointer to a line object
- * @param en true: auto size is enabled, false: auto size is disabled
- */
-void lv_line_set_auto_size(lv_obj_t * line, bool en);
-
-/**
- * Enable (or disable) the y coordinate inversion.
- * If enabled then y will be subtracted from the height of the object,
- * therefore the y=0 coordinate will be on the bottom.
- * @param line pointer to a line object
- * @param en true: enable the y inversion, false:disable the y inversion
- */
-void lv_line_set_y_invert(lv_obj_t * line, bool en);
-
-#define lv_line_set_y_inv \
- lv_line_set_y_invert /*The name was inconsistent. In v.6.0 only `lv_line_set_y_invert`will \
- work */
-
-/**
- * Set the style of a line
- * @param line pointer to a line object
- * @param type which style should be set (can be only `LV_LINE_STYLE_MAIN`)
- * @param style pointer to a style
- */
-static inline void lv_line_set_style(lv_obj_t * line, lv_line_style_t type, const lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(line, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the auto size attribute
- * @param line pointer to a line object
- * @return true: auto size is enabled, false: disabled
- */
-bool lv_line_get_auto_size(const lv_obj_t * line);
-
-/**
- * Get the y inversion attribute
- * @param line pointer to a line object
- * @return true: y inversion is enabled, false: disabled
- */
-bool lv_line_get_y_invert(const lv_obj_t * line);
-
-/**
- * Get the style of an line object
- * @param line pointer to an line object
- * @param type which style should be get (can be only `LV_LINE_STYLE_MAIN`)
- * @return pointer to the line's style
- */
-static inline const lv_style_t * lv_line_get_style(const lv_obj_t * line, lv_line_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(line);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_LINE*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LINE_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_list.c b/src/libs/lvgl/src/lv_objx/lv_list.c
deleted file mode 100644
index 54fe16a2..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_list.c
+++ /dev/null
@@ -1,1067 +0,0 @@
-/**
- * @file lv_list.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_list.h"
-#if LV_USE_LIST != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_list"
-
-#define LV_LIST_LAYOUT_DEF LV_LAYOUT_COL_M
-
-#if LV_USE_ANIMATION == 0
-#undef LV_LIST_DEF_ANIM_TIME
-#define LV_LIST_DEF_ANIM_TIME 0
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param);
-static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param);
-static void lv_list_btn_single_select(lv_obj_t * btn);
-static bool lv_list_is_list_btn(lv_obj_t * list_btn);
-static bool lv_list_is_list_img(lv_obj_t * list_btn);
-static bool lv_list_is_list_label(lv_obj_t * list_btn);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-#if LV_USE_IMG
-static lv_signal_cb_t img_signal;
-#endif
-static lv_signal_cb_t label_signal;
-static lv_signal_cb_t ancestor_page_signal;
-static lv_signal_cb_t ancestor_btn_signal;
-
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a list objects
- * @param par pointer to an object, it will be the parent of the new list
- * @param copy pointer to a list object, if not NULL then the new object will be copied from it
- * @return pointer to the created list
- */
-lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("list create started");
-
- /*Create the ancestor basic object*/
- lv_obj_t * new_list = lv_page_create(par, copy);
- LV_ASSERT_MEM(new_list);
- if(new_list == NULL) return NULL;
-
- if(ancestor_page_signal == NULL) ancestor_page_signal = lv_obj_get_signal_cb(new_list);
-
- lv_list_ext_t * ext = lv_obj_allocate_ext_attr(new_list, sizeof(lv_list_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->style_img = NULL;
- ext->styles_btn[LV_BTN_STATE_REL] = &lv_style_btn_rel;
- ext->styles_btn[LV_BTN_STATE_PR] = &lv_style_btn_pr;
- ext->styles_btn[LV_BTN_STATE_TGL_REL] = &lv_style_btn_tgl_rel;
- ext->styles_btn[LV_BTN_STATE_TGL_PR] = &lv_style_btn_tgl_pr;
- ext->styles_btn[LV_BTN_STATE_INA] = &lv_style_btn_ina;
- ext->single_mode = false;
- ext->size = 0;
-
-#if LV_USE_GROUP
- ext->last_sel = NULL;
- ext->selected_btn = NULL;
- ext->last_clicked_btn = NULL;
-#endif
-
- lv_obj_set_signal_cb(new_list, lv_list_signal);
-
- /*Init the new list object*/
- if(copy == NULL) {
- lv_page_set_anim_time(new_list, LV_LIST_DEF_ANIM_TIME);
- lv_page_set_scrl_fit2(new_list, LV_FIT_FLOOD, LV_FIT_TIGHT);
- lv_obj_set_size(new_list, 2 * LV_DPI, 3 * LV_DPI);
- lv_page_set_scrl_layout(new_list, LV_LIST_LAYOUT_DEF);
- lv_list_set_sb_mode(new_list, LV_SB_MODE_DRAG);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_list_set_style(new_list, LV_LIST_STYLE_BG, th->style.list.bg);
- lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, th->style.list.scrl);
- lv_list_set_style(new_list, LV_LIST_STYLE_SB, th->style.list.sb);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, th->style.list.btn.rel);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, th->style.list.btn.pr);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, th->style.list.btn.tgl_rel);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, th->style.list.btn.tgl_pr);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, th->style.list.btn.ina);
- } else {
- lv_list_set_style(new_list, LV_LIST_STYLE_BG, &lv_style_transp_fit);
- lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, &lv_style_pretty);
- }
- } else {
- lv_list_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
-
- lv_obj_t * copy_btn = lv_list_get_next_btn(copy, NULL);
- while(copy_btn) {
- const void * img_src = NULL;
-#if LV_USE_IMG
- lv_obj_t * copy_img = lv_list_get_btn_img(copy_btn);
- if(copy_img) img_src = lv_img_get_src(copy_img);
-#endif
- lv_list_add_btn(new_list, img_src, lv_list_get_btn_text(copy_btn));
- copy_btn = lv_list_get_next_btn(copy, copy_btn);
- }
-
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, copy_ext->styles_btn[LV_BTN_STATE_REL]);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, copy_ext->styles_btn[LV_BTN_STATE_PR]);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, copy_ext->styles_btn[LV_BTN_STATE_TGL_REL]);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, copy_ext->styles_btn[LV_BTN_STATE_TGL_REL]);
- lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, copy_ext->styles_btn[LV_BTN_STATE_INA]);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_list);
- }
-
- LV_LOG_INFO("list created");
-
- return new_list;
-}
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param list pointer to an object
- */
-void lv_list_clean(lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_obj_t * scrl = lv_page_get_scrl(list);
- lv_obj_clean(scrl);
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->size = 0;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add a list element to the list
- * @param list pointer to list object
- * @param img_fn file name of an image before the text (NULL if unused)
- * @param txt text of the list element (NULL if unused)
- * @return pointer to the new list element which can be customized (a button)
- */
-lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * txt)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_obj_t * last_btn = lv_list_get_prev_btn(list, NULL);
-
- /*The coordinates may changed due to autofit so revert them at the end*/
- lv_coord_t pos_x_ori = lv_obj_get_x(list);
- lv_coord_t pos_y_ori = lv_obj_get_y(list);
-
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->size++;
- /*Create a list element with the image an the text*/
- lv_obj_t * liste;
- liste = lv_btn_create(list, NULL);
-
- /*Save the original signal function because it will be required in `lv_list_btn_signal`*/
- if(ancestor_btn_signal == NULL) ancestor_btn_signal = lv_obj_get_signal_cb(liste);
-
- /*Set the default styles*/
- lv_btn_set_style(liste, LV_BTN_STYLE_REL, ext->styles_btn[LV_BTN_STATE_REL]);
- lv_btn_set_style(liste, LV_BTN_STYLE_PR, ext->styles_btn[LV_BTN_STATE_PR]);
- lv_btn_set_style(liste, LV_BTN_STYLE_TGL_REL, ext->styles_btn[LV_BTN_STATE_TGL_REL]);
- lv_btn_set_style(liste, LV_BTN_STYLE_TGL_PR, ext->styles_btn[LV_BTN_STATE_TGL_PR]);
- lv_btn_set_style(liste, LV_BTN_STYLE_INA, ext->styles_btn[LV_BTN_STATE_INA]);
-
- lv_page_glue_obj(liste, true);
- lv_btn_set_layout(liste, LV_LAYOUT_ROW_M);
-
- lv_layout_t list_layout = lv_list_get_layout(list);
- bool layout_ver = false;
- if(list_layout == LV_LAYOUT_COL_M || list_layout == LV_LAYOUT_COL_L || list_layout == LV_LAYOUT_COL_R) {
- layout_ver = true;
- }
-
- if(layout_ver) {
- lv_btn_set_fit2(liste, LV_FIT_FLOOD, LV_FIT_TIGHT);
- } else {
- lv_coord_t w = last_btn ? lv_obj_get_width(last_btn) : (LV_DPI * 3) / 2;
- lv_btn_set_fit2(liste, LV_FIT_NONE, LV_FIT_TIGHT);
- lv_obj_set_width(liste, w);
- }
-
-
- lv_obj_set_protect(liste, LV_PROTECT_PRESS_LOST);
- lv_obj_set_signal_cb(liste, lv_list_btn_signal);
-
-#if LV_USE_IMG != 0
- lv_obj_t * img = NULL;
- if(img_src) {
- img = lv_img_create(liste, NULL);
- lv_img_set_src(img, img_src);
- lv_obj_set_style(img, ext->style_img);
- lv_obj_set_click(img, false);
- if(img_signal == NULL) img_signal = lv_obj_get_signal_cb(img);
- }
-#endif
- if(txt != NULL) {
- lv_coord_t btn_hor_pad = ext->styles_btn[LV_BTN_STYLE_REL]->body.padding.left -
- ext->styles_btn[LV_BTN_STYLE_REL]->body.padding.right;
- lv_obj_t * label = lv_label_create(liste, NULL);
- lv_label_set_text(label, txt);
- lv_obj_set_click(label, false);
- lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL_CIRC);
- if(lv_obj_get_base_dir(liste) == LV_BIDI_DIR_RTL) lv_obj_set_width(label, label->coords.x2 - liste->coords.x1 - btn_hor_pad);
- else lv_obj_set_width(label, liste->coords.x2 - label->coords.x1 - btn_hor_pad);
- if(label_signal == NULL) label_signal = lv_obj_get_signal_cb(label);
- }
-#if LV_USE_GROUP
- /* If this is the first item to be added to the list and the list is
- * focused, select it */
- {
- lv_group_t * g = lv_obj_get_group(list);
- if(ext->size == 1 && lv_group_get_focused(g) == list) {
- lv_list_set_btn_selected(list, liste);
- }
- }
-#endif
-
- lv_obj_set_pos(list, pos_x_ori, pos_y_ori);
-
- return liste;
-}
-
-/**
- * Remove the index of the button in the list
- * @param list pointer to a list object
- * @param index pointer to a the button's index in the list, index must be 0 <= index <
- * lv_list_ext_t.size
- * @return true: successfully deleted
- */
-bool lv_list_remove(const lv_obj_t * list, uint16_t index)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- if(index >= ext->size) return false;
- uint16_t count = 0;
- lv_obj_t * e = lv_list_get_next_btn(list, NULL);
- while(e != NULL) {
- if(count == index) {
- lv_obj_del(e);
- ext->size--;
- return true;
- }
- e = lv_list_get_next_btn(list, e);
- count++;
- }
- return false;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set single button selected mode, only one button will be selected if enabled.
- * @param list pointer to the currently pressed list object
- * @param mode, enable(true)/disable(false) single selected mode.
- */
-void lv_list_set_single_mode(lv_obj_t * list, bool mode)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
-
- ext->single_mode = mode;
-}
-
-#if LV_USE_GROUP
-
-/**
- * Make a button selected
- * @param list pointer to a list object
- * @param btn pointer to a button to select
- * NULL to not select any buttons
- */
-void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
- if(btn) LV_ASSERT_OBJ(list, "lv_btn");
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
-
- if(ext->selected_btn) {
- lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
- if(s == LV_BTN_STATE_PR)
- lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_REL);
- else if(s == LV_BTN_STATE_TGL_PR)
- lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_REL);
- }
-
- ext->selected_btn = btn;
-
- /*Don't forget which button was selected.
- * It will be restored when the list is focused.*/
- if(btn != NULL) {
- ext->last_sel = btn;
- }
-
- if(ext->selected_btn) {
- lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
- if(s == LV_BTN_STATE_REL)
- lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_PR);
- else if(s == LV_BTN_STATE_TGL_REL)
- lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_PR);
-
- lv_page_focus(list, ext->selected_btn, LV_ANIM_ON);
- }
-}
-
-#endif
-
-/**
- * Set a style of a list
- * @param list pointer to a list object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- lv_btn_style_t btn_style_refr = LV_BTN_STYLE_REL;
- lv_obj_t * btn;
-
- switch(type) {
- case LV_LIST_STYLE_BG:
- lv_page_set_style(list, LV_PAGE_STYLE_BG, style);
- /*style change signal will call 'refr_btn_width' */
- break;
- case LV_LIST_STYLE_SCRL: lv_page_set_style(list, LV_PAGE_STYLE_SCRL, style); break;
- case LV_LIST_STYLE_SB: lv_page_set_style(list, LV_PAGE_STYLE_SB, style); break;
- case LV_LIST_STYLE_EDGE_FLASH: lv_page_set_style(list, LV_PAGE_STYLE_EDGE_FLASH, style); break;
- case LV_LIST_STYLE_BTN_REL:
- ext->styles_btn[LV_BTN_STATE_REL] = style;
- btn_style_refr = LV_BTN_STYLE_REL;
- break;
- case LV_LIST_STYLE_BTN_PR:
- ext->styles_btn[LV_BTN_STATE_PR] = style;
- btn_style_refr = LV_BTN_STYLE_PR;
- break;
- case LV_LIST_STYLE_BTN_TGL_REL:
- ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
- btn_style_refr = LV_BTN_STYLE_TGL_REL;
- break;
- case LV_LIST_STYLE_BTN_TGL_PR:
- ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
- btn_style_refr = LV_BTN_STYLE_TGL_PR;
- break;
- case LV_LIST_STYLE_BTN_INA:
- ext->styles_btn[LV_BTN_STATE_INA] = style;
- btn_style_refr = LV_BTN_STYLE_INA;
- break;
- }
-
- /*Refresh existing buttons' style*/
- if(type == LV_LIST_STYLE_BTN_PR || type == LV_LIST_STYLE_BTN_REL || type == LV_LIST_STYLE_BTN_TGL_REL ||
- type == LV_LIST_STYLE_BTN_TGL_PR || type == LV_LIST_STYLE_BTN_INA) {
- btn = lv_list_get_prev_btn(list, NULL);
- while(btn != NULL) {
- lv_btn_set_style(btn, btn_style_refr, ext->styles_btn[btn_style_refr]);
- btn = lv_list_get_prev_btn(list, btn);
- }
- }
-}
-
-/**
- * Set layout of a list
- * @param list pointer to a list object
- * @param layout which layout should be used
- */
- void lv_list_set_layout(lv_obj_t * list, lv_layout_t layout)
- {
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- /* Update list layout if necessary */
- if (layout == lv_list_get_layout(list)) return;
-
- /* Get the first button on the list */
- lv_obj_t * btn = lv_list_get_prev_btn(list, NULL);
-
- /* Visit all buttons on the list and update their layout */
- while(btn != NULL) {
- /*If a column layout set the buttons' width to list width*/
- if(layout == LV_LAYOUT_COL_M || layout == LV_LAYOUT_COL_L || layout == LV_LAYOUT_COL_R) {
- lv_btn_set_fit2(btn, LV_FIT_FLOOD, LV_FIT_TIGHT);
- }
- /*If a row layout set the buttons' width according to the content*/
- else if (layout == LV_LAYOUT_ROW_M || layout == LV_LAYOUT_ROW_T || layout == LV_LAYOUT_ROW_B) {
- lv_btn_set_fit(btn, LV_FIT_TIGHT);
- }
-
- btn = lv_list_get_prev_btn(list, btn);
- }
-
- if(layout == LV_LAYOUT_COL_M || layout == LV_LAYOUT_COL_L || layout == LV_LAYOUT_COL_R) {
- lv_page_set_scrl_fit2(list, LV_FIT_FLOOD, LV_FIT_TIGHT);
- } else if (layout == LV_LAYOUT_ROW_M || layout == LV_LAYOUT_ROW_T || layout == LV_LAYOUT_ROW_B) {
- lv_page_set_scrl_fit2(list, LV_FIT_TIGHT, LV_FIT_TIGHT);
- lv_cont_set_fit2(list, LV_FIT_NONE, LV_FIT_TIGHT);
- }
-
- lv_page_set_scrl_layout(list, layout);
- }
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get single button selected mode.
- * @param list pointer to the currently pressed list object.
- */
-bool lv_list_get_single_mode(lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
-
- return (ext->single_mode);
-}
-
-/**
- * Get the text of a list element
- * @param btn pointer to list element
- * @return pointer to the text
- */
-const char * lv_list_get_btn_text(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, "lv_btn");
-
- lv_obj_t * label = lv_list_get_btn_label(btn);
- if(label == NULL) return "";
- return lv_label_get_text(label);
-}
-
-/**
- * Get the label object from a list element
- * @param btn pointer to a list element (button)
- * @return pointer to the label from the list element or NULL if not found
- */
-lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, "lv_btn");
-
- lv_obj_t * label = lv_obj_get_child(btn, NULL);
- if(label == NULL) return NULL;
-
- while(lv_list_is_list_label(label) == false) {
- label = lv_obj_get_child(btn, label);
- if(label == NULL) break;
- }
-
- return label;
-}
-
-/**
- * Get the image object from a list element
- * @param btn pointer to a list element (button)
- * @return pointer to the image from the list element or NULL if not found
- */
-lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(btn, "lv_btn");
-
-#if LV_USE_IMG != 0
- lv_obj_t * img = lv_obj_get_child(btn, NULL);
- if(img == NULL) return NULL;
-
- while(lv_list_is_list_img(img) == false) {
- img = lv_obj_get_child(btn, img);
- if(img == NULL) break;
- }
-
- return img;
-#else
- return NULL;
-#endif
-}
-
-/**
- * Get the previous button from list. (Starts from the bottom button)
- * @param list pointer to a list object
- * @param prev_btn pointer to button. Search the previous before it.
- * @return pointer to the previous button or NULL when no more buttons
- */
-lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- /* Not a good practice but user can add/create objects to the lists manually.
- * When getting the next button try to be sure that it is at least a button */
-
- lv_obj_t * btn;
- lv_obj_t * scrl = lv_page_get_scrl(list);
-
- btn = lv_obj_get_child(scrl, prev_btn);
- if(btn == NULL) return NULL;
-
- while(lv_list_is_list_btn(btn) == false) {
- btn = lv_obj_get_child(scrl, btn);
- if(btn == NULL) break;
- }
-
- return btn;
-}
-
-/**
- * Get the next button from list. (Starts from the top button)
- * @param list pointer to a list object
- * @param prev_btn pointer to button. Search the next after it.
- * @return pointer to the next button or NULL when no more buttons
- */
-lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- /* Not a good practice but user can add/create objects to the lists manually.
- * When getting the next button try to be sure that it is at least a button */
-
- lv_obj_t * btn;
- lv_obj_t * scrl = lv_page_get_scrl(list);
-
- btn = lv_obj_get_child_back(scrl, prev_btn);
- if(btn == NULL) return NULL;
-
- while(lv_list_is_list_btn(btn) == false) {
- btn = lv_obj_get_child_back(scrl, btn);
- if(btn == NULL) break;
- }
-
- return btn;
-}
-
-/**
- * Get the index of the button in the list
- * @param list pointer to a list object. If NULL, assumes btn is part of a list.
- * @param btn pointer to a list element (button)
- * @return the index of the button in the list, or -1 of the button not in this list
- */
-int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
- LV_ASSERT_OBJ(btn, "lv_btn");
-
- int index = 0;
- if(list == NULL) {
- /* no list provided, assuming btn is part of a list */
- list = lv_obj_get_parent(lv_obj_get_parent(btn));
- }
- lv_obj_t * e = lv_list_get_next_btn(list, NULL);
- while(e != NULL) {
- if(e == btn) {
- return index;
- }
- index++;
- e = lv_list_get_next_btn(list, e);
- }
- return -1;
-}
-
-/**
- * Get the number of buttons in the list
- * @param list pointer to a list object
- * @return the number of buttons in the list
- */
-uint16_t lv_list_get_size(const lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- return ext->size;
-}
-
-#if LV_USE_GROUP
-/**
- * Get the currently selected button
- * @param list pointer to a list object
- * @return pointer to the selected button
- */
-lv_obj_t * lv_list_get_btn_selected(const lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- return ext->selected_btn;
-}
-#endif
-
-/**
- * Get layout of a list
- * @param list pointer to a list object
- * @return layout of the list object
- */
-lv_layout_t lv_list_get_layout(lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- return lv_page_get_scrl_layout(list);
-}
-
-/**
- * Get a style of a list
- * @param list pointer to a list object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
-
- switch(type) {
- case LV_LIST_STYLE_BG: style = lv_page_get_style(list, LV_PAGE_STYLE_BG); break;
- case LV_LIST_STYLE_SCRL: style = lv_page_get_style(list, LV_PAGE_STYLE_SCRL); break;
- case LV_LIST_STYLE_SB: style = lv_page_get_style(list, LV_PAGE_STYLE_SB); break;
- case LV_LIST_STYLE_EDGE_FLASH: style = lv_page_get_style(list, LV_PAGE_STYLE_EDGE_FLASH); break;
- case LV_LIST_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; break;
- case LV_LIST_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; break;
- case LV_LIST_STYLE_BTN_TGL_REL: style = ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
- case LV_LIST_STYLE_BTN_TGL_PR: style = ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
- case LV_LIST_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_INA]; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Move the list elements up by one
- * @param list pointer a to list object
- */
-void lv_list_up(const lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- /*Search the first list element which 'y' coordinate is below the parent
- * and position the list to show this element on the bottom*/
- lv_obj_t * scrl = lv_page_get_scrl(list);
- lv_obj_t * e;
- lv_obj_t * e_prev = NULL;
-
- e = lv_list_get_prev_btn(list, NULL);
- while(e != NULL) {
- if(e->coords.y2 <= list->coords.y2) {
- if(e_prev != NULL) {
- lv_coord_t new_y = lv_obj_get_height(list) - (lv_obj_get_y(e_prev) + lv_obj_get_height(e_prev));
- if(lv_list_get_anim_time(list) == 0) {
- lv_obj_set_y(scrl, new_y);
- } else {
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.var = scrl;
- a.start = lv_obj_get_y(scrl);
- a.end = new_y;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = LV_LIST_DEF_ANIM_TIME;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-#endif
- }
- }
- break;
- }
- e_prev = e;
- e = lv_list_get_prev_btn(list, e);
- }
-}
-
-/**
- * Move the list elements down by one
- * @param list pointer to a list object
- */
-void lv_list_down(const lv_obj_t * list)
-{
- LV_ASSERT_OBJ(list, LV_OBJX_NAME);
-
- /*Search the first list element which 'y' coordinate is above the parent
- * and position the list to show this element on the top*/
- lv_obj_t * scrl = lv_page_get_scrl(list);
- lv_obj_t * e;
- e = lv_list_get_prev_btn(list, NULL);
- while(e != NULL) {
- if(e->coords.y1 < list->coords.y1) {
- lv_coord_t new_y = -lv_obj_get_y(e);
- if(lv_list_get_anim_time(list) == 0) {
- lv_obj_set_y(scrl, new_y);
- } else {
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.var = scrl;
- a.start = lv_obj_get_y(scrl);
- a.end = new_y;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = LV_LIST_DEF_ANIM_TIME;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-#endif
- }
- break;
- }
- e = lv_list_get_prev_btn(list, e);
- }
-}
-
-/**
- * Focus on a list button. It ensures that the button will be visible on the list.
- * @param btn pointer to a list button to focus
- * @param anim_en LV_ANIM_ON: scroll with animation, LV_ANOM_OFF: without animation
- */
-void lv_list_focus(const lv_obj_t * btn, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(btn, "");
-
-#if LV_USE_ANIMATION == 0
- anim = false;
-#endif
-
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
-
- lv_page_focus(list, btn, anim == LV_ANIM_OFF ? 0 : lv_list_get_anim_time(list));
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the list
- * @param list pointer to a list object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_page_signal(list, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESSING ||
- sign == LV_SIGNAL_LONG_PRESS || sign == LV_SIGNAL_LONG_PRESS_REP) {
-#if LV_USE_GROUP
- /*If pressed/released etc by a KEYPAD or ENCODER delegate signal to the button*/
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_type_t indev_type = lv_indev_get_type(indev);
- if(indev_type == LV_INDEV_TYPE_KEYPAD ||
- (indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(list)))) {
- /*Get the 'pressed' button*/
- lv_obj_t * btn = NULL;
- btn = lv_list_get_prev_btn(list, btn);
- while(btn != NULL) {
- if(lv_btn_get_state(btn) == LV_BTN_STATE_PR) break;
- btn = lv_list_get_prev_btn(list, btn);
- }
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
-
- /*The page receives the key presses so the events should be propagated to the selected
- * button*/
- if(btn) {
- if(sign == LV_SIGNAL_PRESSED) {
- res = lv_event_send(btn, LV_EVENT_PRESSED, NULL);
- } else if(sign == LV_SIGNAL_PRESSING) {
- res = lv_event_send(btn, LV_EVENT_PRESSING, NULL);
- } else if(sign == LV_SIGNAL_LONG_PRESS) {
- res = lv_event_send(btn, LV_EVENT_LONG_PRESSED, NULL);
- } else if(sign == LV_SIGNAL_LONG_PRESS_REP) {
- res = lv_event_send(btn, LV_EVENT_LONG_PRESSED_REPEAT, NULL);
- } else if(sign == LV_SIGNAL_RELEASED) {
-#if LV_USE_GROUP
- ext->last_sel = btn;
-#endif
- if(indev->proc.long_pr_sent == 0) {
- res = lv_event_send(btn, LV_EVENT_SHORT_CLICKED, NULL);
- }
- if(lv_indev_is_dragging(indev) == false && res == LV_RES_OK) {
- res = lv_event_send(btn, LV_EVENT_CLICKED, NULL);
- }
- if(res == LV_RES_OK) {
- res = lv_event_send(btn, LV_EVENT_RELEASED, NULL);
- }
- }
- }
- }
-#endif
- } else if(sign == LV_SIGNAL_FOCUS) {
-
-#if LV_USE_GROUP
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
- /*With ENCODER select the first button only in edit mode*/
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- lv_group_t * g = lv_obj_get_group(list);
- if(lv_group_get_editing(g)) {
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- if(ext->last_sel) {
- /* Select the last used button */
- lv_list_set_btn_selected(list, ext->last_sel);
- } else {
- /*Get the first button and mark it as selected*/
- lv_list_set_btn_selected(list, lv_list_get_next_btn(list, NULL));
- }
- } else {
- lv_list_set_btn_selected(list, NULL);
- }
- }
- /*Else select the clicked button*/
- else {
- /*Mark the last clicked button (if any) as selected because it triggered the focus*/
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- if(ext->last_clicked_btn) {
- lv_list_set_btn_selected(list, ext->last_clicked_btn);
- ext->last_clicked_btn = NULL;
-
- } else {
- if(ext->last_sel) {
- /* Select the last used button */
- lv_list_set_btn_selected(list, ext->last_sel);
- } else {
- /*Get the first button and mark it as selected*/
- lv_list_set_btn_selected(list, lv_list_get_next_btn(list, NULL));
- }
- }
- }
-#endif
- } else if(sign == LV_SIGNAL_DEFOCUS) {
-
-#if LV_USE_GROUP
- /*De-select the selected btn*/
- lv_list_set_btn_selected(list, NULL);
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->last_clicked_btn = NULL; /*button click will be set if click happens before focus*/
- ext->selected_btn = NULL;
-#endif
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- } else if(sign == LV_SIGNAL_CONTROL) {
-
-#if LV_USE_GROUP
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- /*If there is a valid selected button the make the previous selected*/
- if(ext->selected_btn) {
- lv_obj_t * btn_prev = lv_list_get_next_btn(list, ext->selected_btn);
- if(btn_prev) lv_list_set_btn_selected(list, btn_prev);
- }
- /*If there is no selected button the make the first selected*/
- else {
- lv_obj_t * btn = lv_list_get_next_btn(list, NULL);
- if(btn)
- lv_list_set_btn_selected(list,
- btn); /*If there are no buttons on the list then there is no first button*/
- }
- } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- /*If there is a valid selected button the make the next selected*/
- if(ext->selected_btn != NULL) {
- lv_obj_t * btn_next = lv_list_get_prev_btn(list, ext->selected_btn);
- if(btn_next) lv_list_set_btn_selected(list, btn_next);
- }
- /*If there is no selected button the make the first selected*/
- else {
- lv_obj_t * btn = lv_list_get_next_btn(list, NULL);
- if(btn) lv_list_set_btn_selected(list, btn);
- }
- }
-#endif
- }
- return res;
-}
-
-/**
- * Signal function of the list buttons
- * @param btn pointer to a button on the list
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_btn_signal(btn, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- if(sign == LV_SIGNAL_RELEASED) {
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->page.scroll_prop_ip = 0;
-
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(list);
- if(lv_group_get_focused(g) == list && lv_indev_is_dragging(lv_indev_get_act()) == false) {
- /* Is the list is focused then be sure only the button being released
- * has a pressed state to indicate the selected state on the list*/
- lv_obj_t * btn_i = lv_list_get_prev_btn(list, NULL);
- while(btn_i) {
- lv_btn_state_t s = lv_btn_get_state(btn_i);
- if(s == LV_BTN_STATE_PR)
- lv_btn_set_state(btn_i, LV_BTN_STATE_REL);
- else if(s == LV_BTN_STATE_TGL_PR)
- lv_btn_set_state(btn_i, LV_BTN_STATE_TGL_REL);
- btn_i = lv_list_get_prev_btn(list, btn_i);
- }
-
- /*Make the released button "selected"*/
- lv_list_set_btn_selected(list, btn);
- }
-
- /* If `click_focus == 1` then LV_SIGNAL_FOCUS need to know which button triggered the focus
- * to mark it as selected (pressed state)*/
- ext->last_clicked_btn = btn;
-#endif
- if(lv_indev_is_dragging(lv_indev_get_act()) == false && ext->single_mode) {
- lv_list_btn_single_select(btn);
- }
- } else if(sign == LV_SIGNAL_PRESS_LOST) {
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->page.scroll_prop_ip = 0;
- } else if(sign == LV_SIGNAL_CLEANUP) {
-
-#if LV_USE_GROUP
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
- lv_obj_t * sel = lv_list_get_btn_selected(list);
- if(sel == btn) lv_list_set_btn_selected(list, lv_list_get_next_btn(list, btn));
-#endif
- }
-
- return res;
-}
-
-/**
- * Make a single button selected in the list, deselect others.
- * @param btn pointer to the currently pressed list btn object
- */
-static void lv_list_btn_single_select(lv_obj_t * btn)
-{
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
-
- lv_obj_t * e = lv_list_get_next_btn(list, NULL);
- do {
- if(e == btn) {
- lv_btn_set_state(e, LV_BTN_STATE_TGL_REL);
- } else {
- lv_btn_set_state(e, LV_BTN_STATE_REL);
- }
- e = lv_list_get_next_btn(list, e);
- } while(e != NULL);
-}
-
-/**
- * Check if this is really a list button or another object.
- * @param list_btn List button
- */
-static bool lv_list_is_list_btn(lv_obj_t * list_btn)
-{
- lv_obj_type_t type;
-
- lv_obj_get_type(list_btn, &type);
- uint8_t cnt;
- for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
- if(type.type[cnt] == NULL) break;
- if(!strcmp(type.type[cnt], "lv_btn")) return true;
- }
- return false;
-}
-
-/**
- * Check if this is really a list label or another object.
- * @param list_label List label
- */
-static bool lv_list_is_list_label(lv_obj_t * list_label)
-{
- lv_obj_type_t type;
-
- lv_obj_get_type(list_label, &type);
- uint8_t cnt;
- for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
- if(type.type[cnt] == NULL) break;
- if(!strcmp(type.type[cnt], "lv_label")) return true;
- }
- return false;
-}
-
-/**
- * Check if this is really a list image or another object.
- * @param list_image List image
- */
-static bool lv_list_is_list_img(lv_obj_t * list_img)
-{
- lv_obj_type_t type;
-
- lv_obj_get_type(list_img, &type);
- uint8_t cnt;
- for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
- if(type.type[cnt] == NULL) break;
- if(!strcmp(type.type[cnt], "lv_img")) return true;
- }
- return false;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_list.h b/src/libs/lvgl/src/lv_objx/lv_list.h
deleted file mode 100644
index e17bc87d..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_list.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/**
- * @file lv_list.h
- *
- */
-
-#ifndef LV_LIST_H
-#define LV_LIST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_LIST != 0
-
-/*Testing of dependencies*/
-#if LV_USE_PAGE == 0
-#error "lv_list: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE 1) "
-#endif
-
-#if LV_USE_BTN == 0
-#error "lv_list: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_list: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_page.h"
-#include "lv_btn.h"
-#include "lv_label.h"
-#include "lv_img.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of list*/
-typedef struct
-{
- lv_page_ext_t page; /*Ext. of ancestor*/
- /*New data for this type */
- const lv_style_t * styles_btn[_LV_BTN_STATE_NUM]; /*Styles of the list element buttons*/
- const lv_style_t * style_img; /*Style of the list element images on buttons*/
- uint16_t size; /*the number of items(buttons) in the list*/
-
- uint8_t single_mode : 1; /* whether single selected mode is enabled */
-
-#if LV_USE_GROUP
- lv_obj_t * last_sel; /* The last selected button. It will be reverted when the list is focused again */
- lv_obj_t * selected_btn; /* The button is currently being selected*/
- /*Used to make the last clicked button pressed (selected) when the list become focused and
- * `click_focus == 1`*/
- lv_obj_t * last_clicked_btn;
-#endif
-} lv_list_ext_t;
-
-/** List styles. */
-enum {
- LV_LIST_STYLE_BG, /**< List background style */
- LV_LIST_STYLE_SCRL, /**< List scrollable area style. */
- LV_LIST_STYLE_SB, /**< List scrollbar style. */
- LV_LIST_STYLE_EDGE_FLASH, /**< List edge flash style. */
- LV_LIST_STYLE_BTN_REL, /**< Same meaning as the ordinary button styles. */
- LV_LIST_STYLE_BTN_PR,
- LV_LIST_STYLE_BTN_TGL_REL,
- LV_LIST_STYLE_BTN_TGL_PR,
- LV_LIST_STYLE_BTN_INA,
-};
-typedef uint8_t lv_list_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a list objects
- * @param par pointer to an object, it will be the parent of the new list
- * @param copy pointer to a list object, if not NULL then the new object will be copied from it
- * @return pointer to the created list
- */
-lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param list pointer to an object
- */
-void lv_list_clean(lv_obj_t * list);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add a list element to the list
- * @param list pointer to list object
- * @param img_fn file name of an image before the text (NULL if unused)
- * @param txt text of the list element (NULL if unused)
- * @return pointer to the new list element which can be customized (a button)
- */
-lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * txt);
-
-/**
- * Remove the index of the button in the list
- * @param list pointer to a list object
- * @param index pointer to a the button's index in the list, index must be 0 <= index <
- * lv_list_ext_t.size
- * @return true: successfully deleted
- */
-bool lv_list_remove(const lv_obj_t * list, uint16_t index);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set single button selected mode, only one button will be selected if enabled.
- * @param list pointer to the currently pressed list object
- * @param mode enable(true)/disable(false) single selected mode.
- */
-void lv_list_set_single_mode(lv_obj_t * list, bool mode);
-
-#if LV_USE_GROUP
-
-/**
- * Make a button selected
- * @param list pointer to a list object
- * @param btn pointer to a button to select
- * NULL to not select any buttons
- */
-void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn);
-#endif
-
-/**
- * Set the scroll bar mode of a list
- * @param list pointer to a list object
- * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
- */
-static inline void lv_list_set_sb_mode(lv_obj_t * list, lv_sb_mode_t mode)
-{
- lv_page_set_sb_mode(list, mode);
-}
-
-/**
- * Enable the scroll propagation feature. If enabled then the List will move its parent if there is
- * no more space to scroll.
- * @param list pointer to a List
- * @param en true or false to enable/disable scroll propagation
- */
-static inline void lv_list_set_scroll_propagation(lv_obj_t * list, bool en)
-{
- lv_page_set_scroll_propagation(list, en);
-}
-
-/**
- * Enable the edge flash effect. (Show an arc when the an edge is reached)
- * @param list pointer to a List
- * @param en true or false to enable/disable end flash
- */
-static inline void lv_list_set_edge_flash(lv_obj_t * list, bool en)
-{
- lv_page_set_edge_flash(list, en);
-}
-
-/**
- * Set scroll animation duration on 'list_up()' 'list_down()' 'list_focus()'
- * @param list pointer to a list object
- * @param anim_time duration of animation [ms]
- */
-static inline void lv_list_set_anim_time(lv_obj_t * list, uint16_t anim_time)
-{
- lv_page_set_anim_time(list, anim_time);
-}
-
-/**
- * Set a style of a list
- * @param list pointer to a list object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t * style);
-
-/**
- * Set layout of a list
- * @param list pointer to a list object
- * @param layout which layout should be used
- */
-void lv_list_set_layout(lv_obj_t * list, lv_layout_t layout);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get single button selected mode.
- * @param list pointer to the currently pressed list object.
- */
-bool lv_list_get_single_mode(lv_obj_t * list);
-
-/**
- * Get the text of a list element
- * @param btn pointer to list element
- * @return pointer to the text
- */
-const char * lv_list_get_btn_text(const lv_obj_t * btn);
-/**
- * Get the label object from a list element
- * @param btn pointer to a list element (button)
- * @return pointer to the label from the list element or NULL if not found
- */
-lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn);
-
-/**
- * Get the image object from a list element
- * @param btn pointer to a list element (button)
- * @return pointer to the image from the list element or NULL if not found
- */
-lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn);
-
-/**
- * Get the next button from list. (Starts from the bottom button)
- * @param list pointer to a list object
- * @param prev_btn pointer to button. Search the next after it.
- * @return pointer to the next button or NULL when no more buttons
- */
-lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn);
-
-/**
- * Get the previous button from list. (Starts from the top button)
- * @param list pointer to a list object
- * @param prev_btn pointer to button. Search the previous before it.
- * @return pointer to the previous button or NULL when no more buttons
- */
-lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn);
-
-/**
- * Get the index of the button in the list
- * @param list pointer to a list object. If NULL, assumes btn is part of a list.
- * @param btn pointer to a list element (button)
- * @return the index of the button in the list, or -1 of the button not in this list
- */
-int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn);
-
-/**
- * Get the number of buttons in the list
- * @param list pointer to a list object
- * @return the number of buttons in the list
- */
-uint16_t lv_list_get_size(const lv_obj_t * list);
-
-#if LV_USE_GROUP
-/**
- * Get the currently selected button. Can be used while navigating in the list with a keypad.
- * @param list pointer to a list object
- * @return pointer to the selected button
- */
-lv_obj_t * lv_list_get_btn_selected(const lv_obj_t * list);
-#endif
-
-/**
- * Get layout of a list
- * @param list pointer to a list object
- * @return layout of the list object
- */
-lv_layout_t lv_list_get_layout(lv_obj_t * list);
-
-/**
- * Get the scroll bar mode of a list
- * @param list pointer to a list object
- * @return scrollbar mode from 'lv_page_sb_mode_t' enum
- */
-static inline lv_sb_mode_t lv_list_get_sb_mode(const lv_obj_t * list)
-{
- return lv_page_get_sb_mode(list);
-}
-
-/**
- * Get the scroll propagation property
- * @param list pointer to a List
- * @return true or false
- */
-static inline bool lv_list_get_scroll_propagation(lv_obj_t * list)
-{
- return lv_page_get_scroll_propagation(list);
-}
-
-/**
- * Get the scroll propagation property
- * @param list pointer to a List
- * @return true or false
- */
-static inline bool lv_list_get_edge_flash(lv_obj_t * list)
-{
- return lv_page_get_edge_flash(list);
-}
-
-/**
- * Get scroll animation duration
- * @param list pointer to a list object
- * @return duration of animation [ms]
- */
-static inline uint16_t lv_list_get_anim_time(const lv_obj_t * list)
-{
- return lv_page_get_anim_time(list);
-}
-
-/**
- * Get a style of a list
- * @param list pointer to a list object
- * @param type which style should be get
- * @return style pointer to a style
- * */
-const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Move the list elements up by one
- * @param list pointer a to list object
- */
-void lv_list_up(const lv_obj_t * list);
-/**
- * Move the list elements down by one
- * @param list pointer to a list object
- */
-void lv_list_down(const lv_obj_t * list);
-
-/**
- * Focus on a list button. It ensures that the button will be visible on the list.
- * @param btn pointer to a list button to focus
- * @param anim LV_ANOM_ON: scroll with animation, LV_ANIM_OFF: without animation
- */
-void lv_list_focus(const lv_obj_t * btn, lv_anim_enable_t anim);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_LIST*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LIST_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_lmeter.c b/src/libs/lvgl/src/lv_objx/lv_lmeter.c
deleted file mode 100644
index d1f21014..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_lmeter.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/**
- * @file lv_lmeter.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_lmeter.h"
-#if LV_USE_LMETER != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_lmeter"
-
-#define LV_LMETER_LINE_UPSCALE 5 /*2^x upscale of line to make rounding*/
-#define LV_LMETER_LINE_UPSCALE_MASK ((1 << LV_LMETER_LINE_UPSCALE) - 1)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * param);
-static lv_coord_t lv_lmeter_coord_round(int32_t x);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a line meter objects
- * @param par pointer to an object, it will be the parent of the new line meter
- * @param copy pointer to a line meter object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created line meter
- */
-lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("line meter create started");
-
- /*Create the ancestor of line meter*/
- lv_obj_t * new_lmeter = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_lmeter);
- if(new_lmeter == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_lmeter);
-
- /*Allocate the line meter type specific extended data*/
- lv_lmeter_ext_t * ext = lv_obj_allocate_ext_attr(new_lmeter, sizeof(lv_lmeter_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->min_value = 0;
- ext->max_value = 100;
- ext->cur_value = 0;
- ext->line_cnt = 21; /*Odd scale number looks better*/
- ext->scale_angle = 240; /*(scale_num - 1) * N looks better */
- ext->angle_ofs = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_lmeter, lv_lmeter_signal);
- lv_obj_set_design_cb(new_lmeter, lv_lmeter_design);
-
- /*Init the new line meter line meter*/
- if(copy == NULL) {
- lv_obj_set_size(new_lmeter, LV_DPI, LV_DPI);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_lmeter_set_style(new_lmeter, LV_LMETER_STYLE_MAIN, th->style.lmeter);
- } else {
- lv_lmeter_set_style(new_lmeter, LV_LMETER_STYLE_MAIN, &lv_style_pretty_color);
- }
- }
- /*Copy an existing line meter*/
- else {
- lv_lmeter_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->scale_angle = copy_ext->scale_angle;
- ext->line_cnt = copy_ext->line_cnt;
- ext->min_value = copy_ext->min_value;
- ext->max_value = copy_ext->max_value;
- ext->cur_value = copy_ext->cur_value;
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_lmeter);
- }
-
- LV_LOG_INFO("line meter created");
-
- return new_lmeter;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new value on the line meter
- * @param lmeter pointer to a line meter object
- * @param value new value
- */
-void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- if(ext->cur_value == value) return;
-
- ext->cur_value = value > ext->max_value ? ext->max_value : value;
- ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : ext->cur_value;
- lv_obj_invalidate(lmeter);
-}
-
-/**
- * Set minimum and the maximum values of a line meter
- * @param lmeter pointer to he line meter object
- * @param min minimum value
- * @param max maximum value
- */
-void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- if(ext->min_value == min && ext->max_value == max) return;
-
- ext->max_value = max;
- ext->min_value = min;
- if(ext->cur_value > max) {
- ext->cur_value = max;
- lv_lmeter_set_value(lmeter, ext->cur_value);
- }
- if(ext->cur_value < min) {
- ext->cur_value = min;
- lv_lmeter_set_value(lmeter, ext->cur_value);
- }
- lv_obj_invalidate(lmeter);
-}
-
-/**
- * Set the scale settings of a line meter
- * @param lmeter pointer to a line meter object
- * @param angle angle of the scale (0..360)
- * @param line_cnt number of lines
- */
-void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- if(ext->scale_angle == angle && ext->line_cnt == line_cnt) return;
-
- ext->scale_angle = angle;
- ext->line_cnt = line_cnt;
-
- lv_obj_invalidate(lmeter);
-}
-
-/**
- * Set the set an offset for the line meter's angles to rotate it.
- * @param lmeter pointer to a line meter object
- * @param angle angle where the meter will be facing (with its center)
- */
-void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle)
-{
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- if(ext->angle_ofs == angle) return;
-
- ext->angle_ofs = angle;
-
- lv_obj_invalidate(lmeter);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the value of the line meter
- */
-int16_t lv_lmeter_get_value(const lv_obj_t * lmeter)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- return ext->cur_value;
-}
-
-/**
- * Get the minimum value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the minimum value of the line meter
- */
-int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- return ext->min_value;
-}
-
-/**
- * Get the maximum value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the maximum value of the line meter
- */
-int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- return ext->max_value;
-}
-
-/**
- * Get the scale number of a line meter
- * @param lmeter pointer to a line meter object
- * @return number of the scale units
- */
-uint16_t lv_lmeter_get_line_count(const lv_obj_t * lmeter)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- return ext->line_cnt;
-}
-
-/**
- * Get the scale angle of a line meter
- * @param lmeter pointer to a line meter object
- * @return angle_ofs of the scale
- */
-uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter)
-{
- LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
-
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- return ext->scale_angle;
-}
-
-/**
- * get the set an offset for the line meter.
- * @param lmeter pointer to a line meter object
- * @return angle offset (0..360)
- */
-uint16_t lv_lmeter_get_angle_offset(lv_obj_t * lmeter)
-{
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
-
- return ext->angle_ofs;
-}
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the line meters
- * @param lmeter pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
- const lv_style_t * style = lv_obj_get_style(lmeter);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(lmeter);
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style);
-
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(lmeter);
- if(lv_group_get_focused(g) == lmeter) {
- style_tmp.line.width += 1;
- }
-#endif
-
- lv_coord_t r_out = lv_obj_get_width(lmeter) / 2;
- lv_coord_t r_in = r_out - style->body.padding.left;
- if(r_in < 1) r_in = 1;
-
- lv_coord_t x_ofs = lv_obj_get_width(lmeter) / 2 + lmeter->coords.x1;
- lv_coord_t y_ofs = lv_obj_get_height(lmeter) / 2 + lmeter->coords.y1;
- int16_t angle_ofs = ext->angle_ofs + 90 + (360 - ext->scale_angle) / 2;
- int16_t level =
- (int32_t)((int32_t)(ext->cur_value - ext->min_value) * ext->line_cnt) / (ext->max_value - ext->min_value);
- uint8_t i;
-
- style_tmp.line.color = style->body.main_color;
-
- /*Calculate every coordinate in a bigger size to make rounding later*/
- r_out = r_out << LV_LMETER_LINE_UPSCALE;
- r_in = r_in << LV_LMETER_LINE_UPSCALE;
-
- for(i = 0; i < ext->line_cnt; i++) {
- /*Calculate the position a scale label*/
- int16_t angle = (i * ext->scale_angle) / (ext->line_cnt - 1) + angle_ofs;
-
- lv_coord_t y_out = (int32_t)((int32_t)lv_trigo_sin(angle) * r_out) >> LV_TRIGO_SHIFT;
- lv_coord_t x_out = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_out) >> LV_TRIGO_SHIFT;
- lv_coord_t y_in = (int32_t)((int32_t)lv_trigo_sin(angle) * r_in) >> LV_TRIGO_SHIFT;
- lv_coord_t x_in = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_in) >> LV_TRIGO_SHIFT;
-
- /*Rounding*/
- x_out = lv_lmeter_coord_round(x_out);
- x_in = lv_lmeter_coord_round(x_in);
- y_out = lv_lmeter_coord_round(y_out);
- y_in = lv_lmeter_coord_round(y_in);
-
- lv_point_t p1;
- lv_point_t p2;
-
- p2.x = x_in + x_ofs;
- p2.y = y_in + y_ofs;
-
- p1.x = x_out + x_ofs;
- p1.y = y_out + y_ofs;
-
- if(i >= level)
- style_tmp.line.color = style->line.color;
- else {
- style_tmp.line.color =
- lv_color_mix(style->body.grad_color, style->body.main_color, (255 * i) / ext->line_cnt);
- }
-
- lv_draw_line(&p1, &p2, mask, &style_tmp, opa_scale);
- }
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the line meter
- * @param lmeter pointer to a line meter object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(lmeter, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- lv_obj_refresh_ext_draw_pad(lmeter);
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style = lv_lmeter_get_style(lmeter, LV_LMETER_STYLE_MAIN);
- lmeter->ext_draw_pad = LV_MATH_MAX(lmeter->ext_draw_pad, style->line.width);
- }
-
- return res;
-}
-
-/**
- * Round a coordinate which is upscaled (>=x.5 -> x + 1; <x.5 -> x)
- * @param x a coordinate which is greater then it should be
- * @return the downscaled and rounded coordinate (+-1)
- */
-static lv_coord_t lv_lmeter_coord_round(int32_t x)
-{
-#if LV_LMETER_LINE_UPSCALE > 0
- bool was_negative = false;
- if(x < 0) {
- was_negative = true;
- x = -x;
- }
-
- x = (x >> LV_LMETER_LINE_UPSCALE) + ((x & LV_LMETER_LINE_UPSCALE_MASK) >> (LV_LMETER_LINE_UPSCALE - 1));
-
- if(was_negative) x = -x;
-
- return x;
-#else
- return x;
-#endif
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_lmeter.h b/src/libs/lvgl/src/lv_objx/lv_lmeter.h
deleted file mode 100644
index 6deac8ce..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_lmeter.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * @file lv_lmeter.h
- *
- */
-
-#ifndef LV_LMETER_H
-#define LV_LMETER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_LMETER != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of line meter*/
-typedef struct
-{
- /*No inherited ext.*/ /*Ext. of ancestor*/
- /*New data for this type */
- uint16_t scale_angle; /*Angle of the scale in deg. (0..360)*/
- uint16_t angle_ofs;
- uint16_t line_cnt; /*Count of lines */
- int16_t cur_value;
- int16_t min_value;
- int16_t max_value;
-} lv_lmeter_ext_t;
-
-/*Styles*/
-enum {
- LV_LMETER_STYLE_MAIN,
-};
-typedef uint8_t lv_lmeter_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a line meter objects
- * @param par pointer to an object, it will be the parent of the new line meter
- * @param copy pointer to a line meter object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created line meter
- */
-lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new value on the line meter
- * @param lmeter pointer to a line meter object
- * @param value new value
- */
-void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value);
-
-/**
- * Set minimum and the maximum values of a line meter
- * @param lmeter pointer to he line meter object
- * @param min minimum value
- * @param max maximum value
- */
-void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max);
-
-/**
- * Set the scale settings of a line meter
- * @param lmeter pointer to a line meter object
- * @param angle angle of the scale (0..360)
- * @param line_cnt number of lines
- */
-void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt);
-
-/**
- * Set the set an offset for the line meter's angles to rotate it.
- * @param lmeter pointer to a line meter object
- * @param angle angle offset (0..360), rotates clockwise
- */
-void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle);
-
-/**
- * Set the styles of a line meter
- * @param lmeter pointer to a line meter object
- * @param type which style should be set (can be only `LV_LMETER_STYLE_MAIN`)
- * @param style set the style of the line meter
- */
-static inline void lv_lmeter_set_style(lv_obj_t * lmeter, lv_lmeter_style_t type, lv_style_t * style)
-{
- (void)type; /*Unused*/
- lv_obj_set_style(lmeter, style);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the value of the line meter
- */
-int16_t lv_lmeter_get_value(const lv_obj_t * lmeter);
-
-/**
- * Get the minimum value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the minimum value of the line meter
- */
-int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter);
-
-/**
- * Get the maximum value of a line meter
- * @param lmeter pointer to a line meter object
- * @return the maximum value of the line meter
- */
-int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter);
-
-/**
- * Get the scale number of a line meter
- * @param lmeter pointer to a line meter object
- * @return number of the scale units
- */
-uint16_t lv_lmeter_get_line_count(const lv_obj_t * lmeter);
-
-/**
- * Get the scale angle of a line meter
- * @param lmeter pointer to a line meter object
- * @return angle of the scale
- */
-uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter);
-
-/**
- * get the set an offset for the line meter.
- * @param lmeter pointer to a line meter object
- * @return angle offset (0..360)
- */
-uint16_t lv_lmeter_get_angle_offset(lv_obj_t * lmeter);
-
-/**
- * Get the style of a line meter
- * @param lmeter pointer to a line meter object
- * @param type which style should be get (can be only `LV_LMETER_STYLE_MAIN`)
- * @return pointer to the line meter's style
- */
-static inline const lv_style_t * lv_lmeter_get_style(const lv_obj_t * lmeter, lv_lmeter_style_t type)
-{
- (void)type; /*Unused*/
- return lv_obj_get_style(lmeter);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_LMETER*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_LMETER_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_mbox.c b/src/libs/lvgl/src/lv_objx/lv_mbox.c
deleted file mode 100644
index f56904cb..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_mbox.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/**
- * @file lv_mbox.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_mbox.h"
-#if LV_USE_MBOX != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_mbos"
-
-#if LV_USE_ANIMATION
-#ifndef LV_MBOX_CLOSE_ANIM_TIME
-#define LV_MBOX_CLOSE_ANIM_TIME 200 /*List close animation time) */
-#endif
-#else
-#undef LV_MBOX_CLOSE_ANIM_TIME
-#define LV_MBOX_CLOSE_ANIM_TIME 0 /*No animations*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param);
-static void mbox_realign(lv_obj_t * mbox);
-#if LV_USE_ANIMATION
-static void lv_mbox_close_ready_cb(lv_anim_t * a);
-#endif
-static void lv_mbox_default_event_cb(lv_obj_t * mbox, lv_event_t event);
-static void lv_mbox_btnm_event_cb(lv_obj_t * btnm, lv_event_t event);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a message box objects
- * @param par pointer to an object, it will be the parent of the new message box
- * @param copy pointer to a message box object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created message box
- */
-lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("mesasge box create started");
-
- /*Create the ancestor message box*/
- lv_obj_t * new_mbox = lv_cont_create(par, copy);
- LV_ASSERT_MEM(new_mbox);
- if(new_mbox == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_mbox);
-
- /*Allocate the message box type specific extended data*/
- lv_mbox_ext_t * ext = lv_obj_allocate_ext_attr(new_mbox, sizeof(lv_mbox_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->text = NULL;
- ext->btnm = NULL;
-#if LV_USE_ANIMATION
- ext->anim_time = LV_MBOX_CLOSE_ANIM_TIME;
-#endif
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_mbox, lv_mbox_signal);
-
- /*Init the new message box message box*/
- if(copy == NULL) {
- ext->text = lv_label_create(new_mbox, NULL);
- lv_label_set_align(ext->text, LV_LABEL_ALIGN_CENTER);
- lv_label_set_long_mode(ext->text, LV_LABEL_LONG_BREAK);
- lv_label_set_text(ext->text, "Message");
-
- lv_cont_set_layout(new_mbox, LV_LAYOUT_COL_M);
- lv_cont_set_fit2(new_mbox, LV_FIT_NONE, LV_FIT_TIGHT);
- lv_obj_set_width(new_mbox, LV_DPI * 2);
- lv_obj_align(new_mbox, NULL, LV_ALIGN_CENTER, 0, 0);
- lv_obj_set_event_cb(new_mbox, lv_mbox_default_event_cb);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, th->style.mbox.bg);
- } else {
- lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, &lv_style_pretty);
- }
-
- }
- /*Copy an existing message box*/
- else {
- lv_mbox_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
-
- ext->text = lv_label_create(new_mbox, copy_ext->text);
-
- /*Copy the buttons and the label on them*/
- if(copy_ext->btnm) ext->btnm = lv_btnm_create(new_mbox, copy_ext->btnm);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_mbox);
- }
-
- LV_LOG_INFO("mesasge box created");
-
- return new_mbox;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add button to the message box
- * @param mbox pointer to message box object
- * @param btn_map button descriptor (button matrix map).
- * E.g. a const char *txt[] = {"ok", "close", ""} (Can not be local variable)
- */
-void lv_mbox_add_btns(lv_obj_t * mbox, const char * btn_map[])
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
- LV_ASSERT_NULL(btn_map);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- /*Create a button matrix if not exists yet*/
- if(ext->btnm == NULL) {
- ext->btnm = lv_btnm_create(mbox, NULL);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_BG, th->style.mbox.btn.bg);
- lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_REL, th->style.mbox.btn.rel);
- lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_PR, th->style.mbox.btn.pr);
- } else {
- lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, &lv_style_transp_fit);
- }
- }
-
- lv_btnm_set_map(ext->btnm, btn_map);
- lv_btnm_set_btn_ctrl_all(ext->btnm, LV_BTNM_CTRL_CLICK_TRIG | LV_BTNM_CTRL_NO_REPEAT);
- lv_obj_set_event_cb(ext->btnm, lv_mbox_btnm_event_cb);
-
- mbox_realign(mbox);
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of the message box
- * @param mbox pointer to a message box
- * @param txt a '\0' terminated character string which will be the message box text
- */
-void lv_mbox_set_text(lv_obj_t * mbox, const char * txt)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
- LV_ASSERT_STR(txt);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- lv_label_set_text(ext->text, txt);
-
- mbox_realign(mbox);
-}
-
-/**
- * Set animation duration
- * @param mbox pointer to a message box object
- * @param anim_time animation length in milliseconds (0: no animation)
- */
-void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- anim_time = 0;
- ext->anim_time = anim_time;
-#else
- (void)mbox;
- (void)anim_time;
-#endif
-}
-
-/**
- * Automatically delete the message box after a given time
- * @param mbox pointer to a message box object
- * @param delay a time (in milliseconds) to wait before delete the message box
- */
-void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- if(lv_mbox_get_anim_time(mbox) != 0) {
- /*Add shrinking animations*/
- lv_anim_t a;
- a.var = mbox;
- a.start = lv_obj_get_height(mbox);
- a.end = 0;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_height;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = -delay;
- a.time = lv_mbox_get_anim_time(mbox);
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-
- a.start = lv_obj_get_width(mbox);
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_width;
- a.ready_cb = lv_mbox_close_ready_cb;
- lv_anim_create(&a);
-
- /*Disable fit to let shrinking work*/
- lv_cont_set_fit(mbox, LV_FIT_NONE);
- } else {
- /*Create an animation to delete the mbox `delay` ms later*/
- lv_anim_t a;
- a.var = mbox;
- a.start = 0;
- a.end = 1;
- a.exec_cb = (lv_anim_exec_xcb_t)NULL;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_mbox_close_ready_cb;
- a.act_time = -delay;
- a.time = 0;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#else
- (void)delay; /*Unused*/
- lv_obj_del(mbox);
-#endif
-}
-
-/**
- * Stop the auto. closing of message box
- * @param mbox pointer to a message box object
- */
-void lv_mbox_stop_auto_close(lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_anim_del(mbox, NULL);
-#else
- (void)mbox; /*Unused*/
-#endif
-}
-
-/**
- * Set a style of a message box
- * @param mbox pointer to a message box object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- switch(type) {
- case LV_MBOX_STYLE_BG: lv_obj_set_style(mbox, style); break;
- case LV_MBOX_STYLE_BTN_BG: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, style); break;
- case LV_MBOX_STYLE_BTN_REL: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_REL, style); break;
- case LV_MBOX_STYLE_BTN_PR: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_PR, style); break;
- case LV_MBOX_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
- case LV_MBOX_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
- case LV_MBOX_STYLE_BTN_INA: lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BTN_INA, style); break;
- }
-
- mbox_realign(mbox);
-}
-
-/**
- * Set whether recoloring is enabled
- * @param btnm pointer to button matrix object
- * @param en whether recoloring is enabled
- */
-void lv_mbox_set_recolor(lv_obj_t * mbox, bool en)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- if(ext->btnm) lv_btnm_set_recolor(ext->btnm, en);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of the message box
- * @param mbox pointer to a message box object
- * @return pointer to the text of the message box
- */
-const char * lv_mbox_get_text(const lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- return lv_label_get_text(ext->text);
-}
-
-/**
- * Get the index of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`.
- * @param btnm pointer to button matrix object
- * @return index of the last released button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- if(ext->btnm)
- return lv_btnm_get_active_btn(ext->btnm);
- else
- return LV_BTNM_BTN_NONE;
-}
-
-/**
- * Get the text of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`.
- * @param btnm pointer to button matrix object
- * @return text of the last released button (NULL: if unset)
- */
-const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- if(ext->btnm)
- return lv_btnm_get_active_btn_text(ext->btnm);
- else
- return NULL;
-}
-
-/**
- * Get the animation duration (close animation time)
- * @param mbox pointer to a message box object
- * @return animation length in milliseconds (0: no animation)
- */
-uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- return ext->anim_time;
-#else
- (void)mbox;
- return 0;
-#endif
-}
-
-/**
- * Get a style of a message box
- * @param mbox pointer to a message box object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- switch(type) {
- case LV_MBOX_STYLE_BG: style = lv_obj_get_style(mbox); break;
- case LV_MBOX_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BG); break;
- case LV_MBOX_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_REL); break;
- case LV_MBOX_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_PR); break;
- case LV_MBOX_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_REL); break;
- case LV_MBOX_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_TGL_PR); break;
- case LV_MBOX_STYLE_BTN_INA: style = lv_btnm_get_style(ext->btnm, LV_BTNM_STYLE_BTN_INA); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**
- * Get whether recoloring is enabled
- * @param mbox pointer to a message box object
- * @return whether recoloring is enabled
- */
-bool lv_mbox_get_recolor(const lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- if(!ext->btnm) return false;
-
- return lv_btnm_get_recolor(ext->btnm);
-}
-
-/**
- * Get message box button matrix
- * @param mbox pointer to a message box object
- * @return pointer to button matrix object
- * @remarks return value will be NULL unless `lv_mbox_add_btns` has been already called
- */
-lv_obj_t * lv_mbox_get_btnm(lv_obj_t * mbox)
-{
- LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- return ext->btnm;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the message box
- * @param mbox pointer to a message box object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /*Translate LV_KEY_UP/DOWN to LV_KEY_LEFT/RIGHT */
- char c_trans = 0;
- if(sign == LV_SIGNAL_CONTROL) {
- c_trans = *((char *)param);
- if(c_trans == LV_KEY_DOWN) c_trans = LV_KEY_LEFT;
- if(c_trans == LV_KEY_UP) c_trans = LV_KEY_RIGHT;
-
- param = &c_trans;
- }
-
- /* Include the ancient signal function */
- res = ancestor_signal(mbox, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
- if(sign == LV_SIGNAL_CORD_CHG) {
- if(lv_obj_get_width(mbox) != lv_area_get_width(param)) {
- mbox_realign(mbox);
- }
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- mbox_realign(mbox);
- } else if(sign == LV_SIGNAL_RELEASED) {
- if(ext->btnm) {
- uint32_t btn_id = lv_btnm_get_active_btn(ext->btnm);
- if(btn_id != LV_BTNM_BTN_NONE) lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id);
- }
- } else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_CONTROL ||
- sign == LV_SIGNAL_GET_EDITABLE) {
- if(ext->btnm) {
- ext->btnm->signal_cb(ext->btnm, sign, param);
- }
-
- /* The button matrix with ENCODER input supposes it's in a group but in this case it isn't
- * (Only the message box's container) So so some actions here instead*/
- if(sign == LV_SIGNAL_FOCUS) {
-#if LV_USE_GROUP
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_type_t indev_type = lv_indev_get_type(indev);
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- /*In navigation mode don't select any button but in edit mode select the fist*/
- lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btnm);
- if(lv_group_get_editing(lv_obj_get_group(mbox)))
- btnm_ext->btn_id_pr = 0;
- else
- btnm_ext->btn_id_pr = LV_BTNM_BTN_NONE;
- }
-#endif
- }
- }
-
- return res;
-}
-
-/**
- * Resize the button holder to fit
- * @param mbox pointer to message box object
- */
-static void mbox_realign(lv_obj_t * mbox)
-{
- lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
-
- const lv_style_t * style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BG);
- lv_coord_t w = lv_obj_get_width(mbox) - style->body.padding.left - style->body.padding.right;
-
- if(ext->text) {
- lv_obj_set_width(ext->text, w);
- }
-
- if(ext->btnm) {
- const lv_style_t * btn_bg_style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BTN_BG);
- const lv_style_t * btn_rel_style = lv_mbox_get_style(mbox, LV_MBOX_STYLE_BTN_REL);
- lv_coord_t font_h = lv_font_get_line_height(btn_rel_style->text.font);
- lv_obj_set_size(ext->btnm, w,
- font_h + btn_rel_style->body.padding.top + btn_rel_style->body.padding.bottom +
- btn_bg_style->body.padding.top + btn_bg_style->body.padding.bottom);
- }
-}
-
-#if LV_USE_ANIMATION
-static void lv_mbox_close_ready_cb(lv_anim_t * a)
-{
- lv_obj_del(a->var);
-}
-#endif
-
-static void lv_mbox_default_event_cb(lv_obj_t * mbox, lv_event_t event)
-{
- if(event != LV_EVENT_VALUE_CHANGED) return;
-
- uint32_t btn_id = lv_mbox_get_active_btn(mbox);
- if(btn_id == LV_BTNM_BTN_NONE) return;
-
- lv_mbox_start_auto_close(mbox, 0);
-}
-
-static void lv_mbox_btnm_event_cb(lv_obj_t * btnm, lv_event_t event)
-{
- lv_obj_t * mbox = lv_obj_get_parent(btnm);
-
- /*clang-format off*/
- if(event == LV_EVENT_PRESSED || event == LV_EVENT_PRESSING || event == LV_EVENT_PRESS_LOST ||
- event == LV_EVENT_RELEASED || event == LV_EVENT_SHORT_CLICKED || event == LV_EVENT_CLICKED ||
- event == LV_EVENT_LONG_PRESSED || event == LV_EVENT_LONG_PRESSED_REPEAT ||
- event == LV_EVENT_VALUE_CHANGED) {
- lv_event_send(mbox, event, lv_event_get_data());
- }
- /*clang-format on*/
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_mbox.h b/src/libs/lvgl/src/lv_objx/lv_mbox.h
deleted file mode 100644
index 2068b373..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_mbox.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * @file lv_mbox.h
- *
- */
-
-#ifndef LV_MBOX_H
-#define LV_MBOX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_MBOX != 0
-
-/*Testing of dependencies*/
-#if LV_USE_CONT == 0
-#error "lv_mbox: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT 1) "
-#endif
-
-#if LV_USE_BTNM == 0
-#error "lv_mbox: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_mbox: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_cont.h"
-#include "lv_btnm.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of message box*/
-typedef struct
-{
- lv_cont_ext_t bg; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * text; /*Text of the message box*/
- lv_obj_t * btnm; /*Button matrix for the buttons*/
-#if LV_USE_ANIMATION
- uint16_t anim_time; /*Duration of close animation [ms] (0: no animation)*/
-#endif
-} lv_mbox_ext_t;
-
-/** Message box styles. */
-enum {
- LV_MBOX_STYLE_BG,
- LV_MBOX_STYLE_BTN_BG, /**< Same meaning as ordinary button styles. */
- LV_MBOX_STYLE_BTN_REL,
- LV_MBOX_STYLE_BTN_PR,
- LV_MBOX_STYLE_BTN_TGL_REL,
- LV_MBOX_STYLE_BTN_TGL_PR,
- LV_MBOX_STYLE_BTN_INA,
-};
-typedef uint8_t lv_mbox_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a message box objects
- * @param par pointer to an object, it will be the parent of the new message box
- * @param copy pointer to a message box object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created message box
- */
-lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add button to the message box
- * @param mbox pointer to message box object
- * @param btn_map button descriptor (button matrix map).
- * E.g. a const char *txt[] = {"ok", "close", ""} (Can not be local variable)
- */
-void lv_mbox_add_btns(lv_obj_t * mbox, const char * btn_mapaction[]);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of the message box
- * @param mbox pointer to a message box
- * @param txt a '\0' terminated character string which will be the message box text
- */
-void lv_mbox_set_text(lv_obj_t * mbox, const char * txt);
-
-/**
- * Set animation duration
- * @param mbox pointer to a message box object
- * @param anim_time animation length in milliseconds (0: no animation)
- */
-void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time);
-
-/**
- * Automatically delete the message box after a given time
- * @param mbox pointer to a message box object
- * @param delay a time (in milliseconds) to wait before delete the message box
- */
-void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay);
-
-/**
- * Stop the auto. closing of message box
- * @param mbox pointer to a message box object
- */
-void lv_mbox_stop_auto_close(lv_obj_t * mbox);
-
-/**
- * Set a style of a message box
- * @param mbox pointer to a message box object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t * style);
-
-/**
- * Set whether recoloring is enabled. Must be called after `lv_mbox_add_btns`.
- * @param btnm pointer to button matrix object
- * @param en whether recoloring is enabled
- */
-void lv_mbox_set_recolor(lv_obj_t * mbox, bool en);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of the message box
- * @param mbox pointer to a message box object
- * @return pointer to the text of the message box
- */
-const char * lv_mbox_get_text(const lv_obj_t * mbox);
-
-/**
- * Get the index of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`.
- * @param btnm pointer to button matrix object
- * @return index of the last released button (LV_BTNM_BTN_NONE: if unset)
- */
-uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox);
-
-/**
- * Get the text of the lastly "activated" button by the user (pressed, released etc)
- * Useful in the the `event_cb`.
- * @param btnm pointer to button matrix object
- * @return text of the last released button (NULL: if unset)
- */
-const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox);
-
-/**
- * Get the animation duration (close animation time)
- * @param mbox pointer to a message box object
- * @return animation length in milliseconds (0: no animation)
- */
-uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox);
-
-/**
- * Get a style of a message box
- * @param mbox pointer to a message box object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type);
-
-/**
- * Get whether recoloring is enabled
- * @param mbox pointer to a message box object
- * @return whether recoloring is enabled
- */
-bool lv_mbox_get_recolor(const lv_obj_t * mbox);
-
-/**
- * Get message box button matrix
- * @param mbox pointer to a message box object
- * @return pointer to button matrix object
- * @remarks return value will be NULL unless `lv_mbox_add_btns` has been already called
- */
-lv_obj_t * lv_mbox_get_btnm(lv_obj_t * mbox);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_MBOX*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_MBOX_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_objx.mk b/src/libs/lvgl/src/lv_objx/lv_objx.mk
deleted file mode 100644
index fde2ac77..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_objx.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-CSRCS += lv_arc.c
-CSRCS += lv_bar.c
-CSRCS += lv_cb.c
-CSRCS += lv_cpicker.c
-CSRCS += lv_ddlist.c
-CSRCS += lv_kb.c
-CSRCS += lv_line.c
-CSRCS += lv_mbox.c
-CSRCS += lv_preload.c
-CSRCS += lv_roller.c
-CSRCS += lv_table.c
-CSRCS += lv_tabview.c
-CSRCS += lv_tileview.c
-CSRCS += lv_btn.c
-CSRCS += lv_calendar.c
-CSRCS += lv_chart.c
-CSRCS += lv_canvas.c
-CSRCS += lv_gauge.c
-CSRCS += lv_label.c
-CSRCS += lv_list.c
-CSRCS += lv_slider.c
-CSRCS += lv_ta.c
-CSRCS += lv_spinbox.c
-CSRCS += lv_btnm.c
-CSRCS += lv_cont.c
-CSRCS += lv_img.c
-CSRCS += lv_imgbtn.c
-CSRCS += lv_led.c
-CSRCS += lv_lmeter.c
-CSRCS += lv_page.c
-CSRCS += lv_sw.c
-CSRCS += lv_win.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_objx
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_objx
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_objx"
diff --git a/src/libs/lvgl/src/lv_objx/lv_objx_templ.c b/src/libs/lvgl/src/lv_objx/lv_objx_templ.c
deleted file mode 100644
index d23dcb46..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_objx_templ.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * @file lv_templ.c
- *
- */
-
-/* TODO Remove these instructions
- * Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
- * templ -> object short name with lower case(e.g. btn, label etc)
- * TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
- *
- * You can remove the defined() clause from the #if statement below. This exists because
- * LV_USE_TEMPL is not in lv_conf.h or lv_conf_templ.h by default.
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "../lv_core/lv_debug.h"
-//#include "lv_templ.h" /*TODO uncomment this*/
-
-#if defined(LV_USE_TEMPL) && LV_USE_TEMPL != 0
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_templ"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_templ_signal(lv_obj_t * templ, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_func_t ancestor_signal;
-static lv_design_func_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a template object
- * @param par pointer to an object, it will be the parent of the new template
- * @param copy pointer to a template object, if not NULL then the new object will be copied from it
- * @return pointer to the created template
- */
-lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("template create started");
-
- /*Create the ancestor of template*/
- /*TODO modify it to the ancestor create function */
- lv_obj_t * new_templ = lv_ANCESTOR_create(par, copy);
- lv_mem_assert(new_templ);
- if(new_templ == NULL) return NULL;
-
- /*Allocate the template type specific extended data*/
- lv_templ_ext_t * ext = lv_obj_allocate_ext_attr(new_templ, sizeof(lv_templ_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_func(new_templ);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_func(new_templ);
-
- /*Initialize the allocated 'ext' */
- ext->xyz = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_func(new_templ, lv_templ_signal);
- lv_obj_set_design_func(new_templ, lv_templ_design);
-
- /*Init the new template template*/
- if(copy == NULL) {
-
- }
- /*Copy an existing template*/
- else {
- lv_templ_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_templ);
- }
-
- LV_LOG_INFO("template created");
-
- return new_templ;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*
- * New object specific "add" or "remove" functions come here
- */
-
-/*=====================
- * Setter functions
- *====================*/
-
-/*
- * New object specific "set" functions come here
- */
-
-/**
- * Set a style of a template.
- * @param templ pointer to template object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(templ, LV_OBJX_NAME);
-
- lv_templ_ext_t * ext = lv_obj_get_ext_attr(templ);
-
- switch(type) {
- case LV_TEMPL_STYLE_X: break;
- case LV_TEMPL_STYLE_Y: break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/*
- * New object specific "get" functions come here
- */
-
-/**
- * Get style of a template.
- * @param templ pointer to template object
- * @param type which style should be get
- * @return style pointer to the style
- */
-lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t type)
-{
- LV_ASSERT_OBJ(templ, LV_OBJX_NAME);
-
- lv_templ_ext_t * ext = lv_obj_get_ext_attr(templ);
- lv_style_t * style = NULL;
-
- switch(type) {
- case LV_TEMPL_STYLE_X: style = NULL; /*Replace NULL with a pointer to the style*/
- case LV_TEMPL_STYLE_Y: style = NULL; /*Replace NULL with a pointer to the style*/
- default: style = NULL;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/*
- * New object specific "other" functions come here
- */
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the templates
- * @param templ pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
-
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the template
- * @param templ pointer to a template object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_templ_signal(lv_obj_t * templ, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(templ, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-#else /* Enable this file at the top */
-
-/* This dummy typedef exists purely to silence -Wpedantic. */
-typedef int keep_pedantic_happy;
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_objx_templ.h b/src/libs/lvgl/src/lv_objx/lv_objx_templ.h
deleted file mode 100644
index 82918253..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_objx_templ.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * @file lv_templ.h
- *
- */
-
-/* TODO Remove these instructions
- * Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
- * templ -> object short name with lower case(e.g. btn, label etc)
- * TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
- *
- */
-
-#ifndef LV_TEMPL_H
-#define LV_TEMPL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_TEMPL != 0
-
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of template*/
-typedef struct
-{
- lv_ANCESTOR_ext_t ANCESTOR; /*Ext. of ancestor*/
- /*New data for this type */
-} lv_templ_ext_t;
-
-/*Styles*/
-enum {
- LV_TEMPL_STYLE_X,
- LV_TEMPL_STYLE_Y,
-};
-typedef uint8_t lv_templ_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a template objects
- * @param par pointer to an object, it will be the parent of the new template
- * @param copy pointer to a template object, if not NULL then the new object will be copied from it
- * @return pointer to the created template
- */
-lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a style of a template.
- * @param templ pointer to template object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get style of a template.
- * @param templ pointer to template object
- * @param type which style should be get
- * @return style pointer to the style
- */
-lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_TEMPL*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_page.c b/src/libs/lvgl/src/lv_objx/lv_page.c
deleted file mode 100644
index b39eab51..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_page.c
+++ /dev/null
@@ -1,1263 +0,0 @@
-/**
- * @file lv_page.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "../lv_objx/lv_page.h"
-#if LV_USE_PAGE != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_page"
-
-#define LV_PAGE_SB_MIN_SIZE (LV_DPI / 8)
-
-/*[ms] Scroll anim time on `lv_page_scroll_up/down/left/rigth`*/
-#define LV_PAGE_SCROLL_ANIM_TIME 200
-
-#define LV_PAGE_END_FLASH_SIZE (LV_DPI / 4)
-#define LV_PAGE_END_ANIM_TIME 300
-#define LV_PAGE_END_ANIM_WAIT_TIME 300
-
-#if LV_USE_ANIMATION == 0
-#undef LV_PAGE_DEF_ANIM_TIME
-#define LV_PAGE_DEF_ANIM_TIME 0 /*No animation*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void lv_page_sb_refresh(lv_obj_t * page);
-static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param);
-static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
-static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event);
-#if LV_USE_ANIMATION
-static void edge_flash_anim(void * page, lv_anim_value_t v);
-static void edge_flash_anim_end(lv_anim_t * a);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a page objects
- * @param par pointer to an object, it will be the parent of the new page
- * @param copy pointer to a page object, if not NULL then the new object will be copied from it
- * @return pointer to the created page
- */
-lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("page create started");
-
- /*Create the ancestor object*/
- lv_obj_t * new_page = lv_cont_create(par, copy);
- LV_ASSERT_MEM(new_page);
- if(new_page == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_page);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_page);
-
- /*Allocate the object type specific extended data*/
- lv_page_ext_t * ext = lv_obj_allocate_ext_attr(new_page, sizeof(lv_page_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->scrl = NULL;
- ext->sb.hor_draw = 0;
- ext->sb.ver_draw = 0;
- ext->sb.style = &lv_style_pretty;
- ext->sb.mode = LV_SB_MODE_AUTO;
-#if LV_USE_ANIMATION
- ext->edge_flash.enabled = 0;
- ext->edge_flash.bottom_ip = 0;
- ext->edge_flash.top_ip = 0;
- ext->edge_flash.left_ip = 0;
- ext->edge_flash.right_ip = 0;
- ext->edge_flash.state = 0;
- ext->edge_flash.style = &lv_style_plain_color;
- ext->anim_time = LV_PAGE_DEF_ANIM_TIME;
-#endif
- ext->scroll_prop = 0;
- ext->scroll_prop_ip = 0;
-
- /*Init the new page object*/
- if(copy == NULL) {
- ext->scrl = lv_cont_create(new_page, NULL);
- lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal);
- lv_obj_set_design_cb(ext->scrl, lv_scrl_design);
- lv_obj_set_drag(ext->scrl, true);
- lv_obj_set_drag_throw(ext->scrl, true);
- lv_obj_set_protect(ext->scrl, LV_PROTECT_PARENT | LV_PROTECT_PRESS_LOST);
- lv_cont_set_fit4(ext->scrl, LV_FIT_FILL, LV_FIT_FILL, LV_FIT_FILL, LV_FIT_FILL);
- lv_obj_set_event_cb(ext->scrl, scrl_def_event_cb); /*Propagate some event to the background
- object by default for convenience */
-
- /* Add the signal function only if 'scrolling' is created
- * because everything has to be ready before any signal is received*/
- lv_obj_set_signal_cb(new_page, lv_page_signal);
- lv_obj_set_design_cb(new_page, lv_page_design);
-
- lv_page_set_sb_mode(new_page, ext->sb.mode);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- if(par == NULL) { /*Different styles if it is screen*/
- lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.bg);
- lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_transp);
- } else {
- lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.page.bg);
- lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, th->style.page.scrl);
- }
- lv_page_set_style(new_page, LV_PAGE_STYLE_SB, th->style.page.sb);
- } else {
- lv_page_set_style(new_page, LV_PAGE_STYLE_BG, &lv_style_pretty_color);
- lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_pretty);
- lv_page_set_style(new_page, LV_PAGE_STYLE_SB, &lv_style_pretty_color);
- }
-
- } else {
- lv_page_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->scrl = lv_cont_create(new_page, copy_ext->scrl);
- lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal);
-
- /* Add the signal function only if 'scrolling' is created
- * because everything has to be ready before any signal is received*/
- lv_obj_set_signal_cb(new_page, lv_page_signal);
- lv_obj_set_design_cb(new_page, lv_page_design);
-
- lv_page_set_style(new_page, LV_PAGE_STYLE_BG, lv_page_get_style(copy, LV_PAGE_STYLE_BG));
- lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, lv_page_get_style(copy, LV_PAGE_STYLE_SCRL));
- lv_page_set_style(new_page, LV_PAGE_STYLE_SB, lv_page_get_style(copy, LV_PAGE_STYLE_SB));
-
- lv_page_set_sb_mode(new_page, copy_ext->sb.mode);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_page);
- }
-
- lv_page_sb_refresh(new_page);
-
- LV_LOG_INFO("page created");
-
- return new_page;
-}
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param page pointer to an object
- */
-void lv_page_clean(lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_obj_t * scrl = lv_page_get_scrl(page);
- lv_obj_clean(scrl);
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the scroll bar mode on a page
- * @param page pointer to a page object
- * @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
- */
-void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- if(ext->sb.mode == sb_mode) return;
-
- if(sb_mode == LV_SB_MODE_HIDE)
- ext->sb.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/
- else if(sb_mode == LV_SB_MODE_UNHIDE)
- ext->sb.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/
- else {
- if(ext->sb.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE;
- ext->sb.mode = sb_mode;
- }
-
- ext->sb.hor_draw = 0;
- ext->sb.ver_draw = 0;
-
- lv_page_sb_refresh(page);
- lv_obj_invalidate(page);
-}
-
-/**
- * Set the animation time for the page
- * @param page pointer to a page object
- * @param anim_time animation time in milliseconds
- */
-void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- ext->anim_time = anim_time;
-#else
- (void)page; /*Unused*/
- (void)anim_time; /*Unused*/
-#endif
-}
-
-/**
- * Enable the scroll propagation feature. If enabled then the page will move its parent if there is
- * no more space to scroll.
- * @param page pointer to a Page
- * @param en true or false to enable/disable scroll propagation
- */
-void lv_page_set_scroll_propagation(lv_obj_t * page, bool en)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- ext->scroll_prop = en ? 1 : 0;
-}
-
-/**
- * Enable the edge flash effect. (Show an arc when the an edge is reached)
- * @param page pointer to a Page
- * @param en true or false to enable/disable end flash
- */
-void lv_page_set_edge_flash(lv_obj_t * page, bool en)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- ext->edge_flash.enabled = en ? 1 : 0;
-#else
- (void)page;
- (void)en;
-#endif
-}
-
-/**
- * Set a style of a page
- * @param page pointer to a page object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
-
- switch(type) {
- case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break;
- case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break;
- case LV_PAGE_STYLE_SB:
- ext->sb.style = style;
- lv_area_set_height(&ext->sb.hor_area, ext->sb.style->body.padding.inner);
- lv_area_set_width(&ext->sb.ver_area, ext->sb.style->body.padding.inner);
- lv_page_sb_refresh(page);
- lv_obj_refresh_ext_draw_pad(page);
- lv_obj_invalidate(page);
- break;
-#if LV_USE_ANIMATION
- case LV_PAGE_STYLE_EDGE_FLASH: ext->edge_flash.style = style; break;
-#endif
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the scrollable object of a page
- * @param page pointer to a page object
- * @return pointer to a container which is the scrollable part of the page
- */
-lv_obj_t * lv_page_get_scrl(const lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
-
- return ext->scrl;
-}
-
-/**
- * Get the animation time
- * @param page pointer to a page object
- * @return the animation time in milliseconds
- */
-uint16_t lv_page_get_anim_time(const lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- return ext->anim_time;
-#else
- (void)page; /*Unused*/
- return 0;
-#endif
-}
-
-/**
- * Set the scroll bar mode on a page
- * @param page pointer to a page object
- * @return the mode from 'lv_page_sb.mode_t' enum
- */
-lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- return ext->sb.mode;
-}
-
-/**
- * Get the scroll propagation property
- * @param page pointer to a Page
- * @return true or false
- */
-bool lv_page_get_scroll_propagation(lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- return ext->scroll_prop == 0 ? false : true;
-}
-
-/**
- * Get the edge flash effect property.
- * @param page pointer to a Page
- * return true or false
- */
-bool lv_page_get_edge_flash(lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- return ext->edge_flash.enabled == 0 ? false : true;
-#else
- (void)page;
- return false;
-#endif
-}
-
-/**
- * Get that width which can be set to the children to still not cause overflow (show scrollbars)
- * @param page pointer to a page object
- * @return the width which still fits into the page
- */
-lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
- const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
-
- return lv_obj_get_width(page) - bg_style->body.padding.left - bg_style->body.padding.right -
- scrl_style->body.padding.left - scrl_style->body.padding.right;
-}
-
-/**
- * Get that height which can be set to the children to still not cause overflow (show scrollbars)
- * @param page pointer to a page object
- * @return the height which still fits into the page
- */
-lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
- const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
-
- return lv_obj_get_height(page) - bg_style->body.padding.top - bg_style->body.padding.bottom -
- scrl_style->body.padding.top - scrl_style->body.padding.bottom;
-}
-
-/**
- * Get a style of a page
- * @param page pointer to page object
- * @param type which style should be get
- * @return style pointer to a style
- * */
-const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type)
-{
- LV_ASSERT_OBJ(page, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
-
- switch(type) {
- case LV_PAGE_STYLE_BG: style = lv_obj_get_style(page); break;
- case LV_PAGE_STYLE_SCRL: style = lv_obj_get_style(ext->scrl); break;
- case LV_PAGE_STYLE_SB: style = ext->sb.style; break;
-#if LV_USE_ANIMATION
- case LV_PAGE_STYLE_EDGE_FLASH: style = ext->edge_flash.style; break;
-#endif
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Find whether the page has been scrolled to a certain edge.
- * @param page Page object
- * @param edge Edge to check
- * @return true if the page is on the specified edge
- */
-bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge)
-{
- const lv_style_t * page_style = lv_obj_get_style(page);
- lv_obj_t * scrl = lv_page_get_scrl(page);
- lv_area_t page_coords;
- lv_area_t scrl_coords;
-
- lv_obj_get_coords(scrl, &scrl_coords);
- lv_obj_get_coords(page, &page_coords);
-
- if((edge & LV_PAGE_EDGE_TOP) && scrl_coords.y1 == page_coords.y1 + page_style->body.padding.top) return true;
- if((edge & LV_PAGE_EDGE_BOTTOM) && scrl_coords.y2 == page_coords.y2 - page_style->body.padding.bottom) return true;
- if((edge & LV_PAGE_EDGE_LEFT) && scrl_coords.x1 == page_coords.x1 + page_style->body.padding.left) return true;
- if((edge & LV_PAGE_EDGE_RIGHT) && scrl_coords.x2 == page_coords.x2 - page_style->body.padding.right) return true;
-
- return false;
-}
-
-/**
- * Glue the object to the page. After it the page can be moved (dragged) with this object too.
- * @param obj pointer to an object on a page
- * @param glue true: enable glue, false: disable glue
- */
-void lv_page_glue_obj(lv_obj_t * obj, bool glue)
-{
- lv_obj_set_drag_parent(obj, glue);
- lv_obj_set_drag(obj, glue);
-}
-
-/**
- * Focus on an object. It ensures that the object will be visible on the page.
- * @param page pointer to a page object
- * @param obj pointer to an object to focus (must be on the page)
- * @param anim_en LV_ANIM_ON to focus with animation; LV_ANIM_OFF to focus without animation
- */
-void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t anim_en)
-{
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
-
-#if LV_USE_ANIMATION
- /* Be sure there is no position changing animation in progress
- * because it can overide the current changes*/
- lv_anim_del(page, (lv_anim_exec_xcb_t)lv_obj_set_x);
- lv_anim_del(page, (lv_anim_exec_xcb_t)lv_obj_set_y);
- lv_anim_del(ext->scrl, (lv_anim_exec_xcb_t)lv_obj_set_x);
- lv_anim_del(ext->scrl, (lv_anim_exec_xcb_t)lv_obj_set_y);
-#endif
-
- const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
- const lv_style_t * style_scrl = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
-
- /*If obj is higher then the page focus where the "error" is smaller*/
- lv_coord_t obj_y = obj->coords.y1 - ext->scrl->coords.y1;
- lv_coord_t obj_h = lv_obj_get_height(obj);
- lv_coord_t scrlable_y = lv_obj_get_y(ext->scrl);
- lv_coord_t page_h = lv_obj_get_height(page);
-
- lv_coord_t top_err = -(scrlable_y + obj_y);
- lv_coord_t bot_err = scrlable_y + obj_y + obj_h - page_h;
-
- /*Out of the page on the top*/
- if((obj_h <= page_h && top_err > 0) || (obj_h > page_h && top_err < bot_err)) {
- /*Calculate a new position and let some space above*/
- scrlable_y = -(obj_y - style_scrl->body.padding.top - style->body.padding.top);
- scrlable_y += style_scrl->body.padding.top;
- }
- /*Out of the page on the bottom*/
- else if((obj_h <= page_h && bot_err > 0) || (obj_h > page_h && top_err >= bot_err)) {
- /*Calculate a new position and let some space below*/
- scrlable_y = -(obj_y + style_scrl->body.padding.bottom + style->body.padding.bottom);
- scrlable_y -= style_scrl->body.padding.bottom;
- scrlable_y += page_h - obj_h;
- }
-
- /*If obj is wider then the page focus where the "error" is smaller*/
- lv_coord_t obj_x = obj->coords.x1 - ext->scrl->coords.x1;
- lv_coord_t obj_w = lv_obj_get_width(obj);
- lv_coord_t scrlable_x = lv_obj_get_x(ext->scrl);
- lv_coord_t page_w = lv_obj_get_width(page);
-
- lv_coord_t left_err = -(scrlable_x + obj_x);
- lv_coord_t right_err = scrlable_x + obj_x + obj_w - page_w;
-
- /*Out of the page on the left*/
- if((obj_w <= page_w && left_err > 0) || (obj_w > page_w && left_err < right_err)) {
- /*Calculate a new position and let some space above*/
- scrlable_x = -(obj_x - style_scrl->body.padding.left - style->body.padding.left);
- scrlable_x += style_scrl->body.padding.left;
- }
- /*Out of the page on the rigth*/
- else if((obj_w <= page_w && right_err > 0) || (obj_w > page_w && left_err >= right_err)) {
- /*Calculate a new position and let some space below*/
- scrlable_x = -(obj_x + style_scrl->body.padding.right + style->body.padding.right);
- scrlable_x -= style_scrl->body.padding.right;
- scrlable_x += page_w - obj_w;
- }
-
- if(anim_en == LV_ANIM_OFF || lv_page_get_anim_time(page) == 0) {
- lv_obj_set_y(ext->scrl, scrlable_y);
- lv_obj_set_x(ext->scrl, scrlable_x);
- } else {
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.act_time = 0;
- a.start = lv_obj_get_y(ext->scrl);
- a.end = scrlable_y;
- a.time = lv_page_get_anim_time(page);
- a.ready_cb = NULL;
- a.playback = 0;
- a.repeat = 0;
- a.var = ext->scrl;
- a.path_cb = lv_anim_path_linear;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- lv_anim_create(&a);
-
- a.start = lv_obj_get_x(ext->scrl);
- a.end = scrlable_x;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- lv_anim_create(&a);
-#endif
- }
-}
-
-/**
- * Scroll the page horizontally
- * @param page pointer to a page object
- * @param dist the distance to scroll (< 0: scroll right; > 0 scroll left)
- */
-void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist)
-{
- lv_obj_t * scrl = lv_page_get_scrl(page);
-
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.var = scrl;
- a.start = lv_obj_get_x(scrl);
- a.end = a.start + dist;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = LV_PAGE_SCROLL_ANIM_TIME;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-#else
- lv_obj_set_x(scrl, lv_obj_get_x(scrl) + dist);
-#endif
-}
-
-/**
- * Scroll the page vertically
- * @param page pointer to a page object
- * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
- */
-void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist)
-{
- lv_obj_t * scrl = lv_page_get_scrl(page);
-
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.var = scrl;
- a.start = lv_obj_get_y(scrl);
- a.end = a.start + dist;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = LV_PAGE_SCROLL_ANIM_TIME;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-#else
- lv_obj_set_y(scrl, lv_obj_get_y(scrl) + dist);
-#endif
-}
-
-/**
- * Not intended to use directly by the user but by other object types internally.
- * Start an edge flash animation. Exactly one `ext->edge_flash.xxx_ip` should be set
- * @param page
- */
-void lv_page_start_edge_flash(lv_obj_t * page)
-{
-#if LV_USE_ANIMATION
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- if(ext->edge_flash.enabled) {
- lv_anim_t a;
- a.var = page;
- a.start = 0;
- a.end = LV_PAGE_END_FLASH_SIZE;
- a.exec_cb = (lv_anim_exec_xcb_t)edge_flash_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = edge_flash_anim_end;
- a.act_time = 0;
- a.time = LV_PAGE_END_ANIM_TIME;
- a.playback = 1;
- a.playback_pause = LV_PAGE_END_ANIM_WAIT_TIME;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#else
- (void)page; /*Unused*/
-#endif
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the pages
- * @param page pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(page, mask, mode);
- }
- /*Cache page bg style for temporary modification*/
- const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style);
-
- if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Draw without border*/
- style_tmp.body.border.width = 0;
- lv_draw_rect(&page->coords, mask, &style_tmp, lv_obj_get_opa_scale(page));
-
- } else if(mode == LV_DESIGN_DRAW_POST) {
- /*Draw only a border*/
- style_tmp.body.shadow.width = 0;
- style_tmp.body.opa = LV_OPA_TRANSP;
- lv_draw_rect(&page->coords, mask, &style_tmp, lv_obj_get_opa_scale(page));
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
-
- /*Draw the scrollbars*/
- lv_area_t sb_area;
- if(ext->sb.hor_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) {
- /*Convert the relative coordinates to absolute*/
- lv_area_copy(&sb_area, &ext->sb.hor_area);
- sb_area.x1 += page->coords.x1;
- sb_area.y1 += page->coords.y1;
- sb_area.x2 += page->coords.x1;
- sb_area.y2 += page->coords.y1;
- lv_draw_rect(&sb_area, mask, ext->sb.style, lv_obj_get_opa_scale(page));
- }
-
- if(ext->sb.ver_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) {
- /*Convert the relative coordinates to absolute*/
- lv_area_copy(&sb_area, &ext->sb.ver_area);
- sb_area.x1 += page->coords.x1;
- sb_area.y1 += page->coords.y1;
- sb_area.x2 += page->coords.x1;
- sb_area.y2 += page->coords.y1;
- lv_draw_rect(&sb_area, mask, ext->sb.style, lv_obj_get_opa_scale(page));
- }
-
-#if LV_USE_ANIMATION
- {
- lv_coord_t page_w = lv_obj_get_width(page);
- lv_coord_t page_h = lv_obj_get_height(page);
-
- lv_area_t flash_area;
-
- if(ext->edge_flash.top_ip) {
- flash_area.x1 = page->coords.x1 - page_w;
- flash_area.x2 = page->coords.x2 + page_w;
- flash_area.y1 = page->coords.y1 - 3 * page_w + ext->edge_flash.state;
- flash_area.y2 = page->coords.y1 + ext->edge_flash.state;
- } else if(ext->edge_flash.bottom_ip) {
- flash_area.x1 = page->coords.x1 - page_w;
- flash_area.x2 = page->coords.x2 + page_w;
- flash_area.y1 = page->coords.y2 - ext->edge_flash.state;
- flash_area.y2 = page->coords.y2 + 3 * page_w - ext->edge_flash.state;
- } else if(ext->edge_flash.right_ip) {
- flash_area.x1 = page->coords.x2 - ext->edge_flash.state;
- flash_area.x2 = page->coords.x2 + 3 * page_h - ext->edge_flash.state;
- flash_area.y1 = page->coords.y1 - page_h;
- flash_area.y2 = page->coords.y2 + page_h;
- } else if(ext->edge_flash.left_ip) {
- flash_area.x1 = page->coords.x1 - 3 * page_h + ext->edge_flash.state;
- flash_area.x2 = page->coords.x1 + ext->edge_flash.state;
- flash_area.y1 = page->coords.y1 - page_h;
- flash_area.y2 = page->coords.y2 + page_h;
- }
-
- if(ext->edge_flash.left_ip || ext->edge_flash.right_ip || ext->edge_flash.top_ip ||
- ext->edge_flash.bottom_ip) {
- lv_style_t flash_style;
- lv_style_copy(&flash_style, ext->edge_flash.style);
- flash_style.body.radius = LV_RADIUS_CIRCLE;
- uint32_t opa = (flash_style.body.opa * ext->edge_flash.state) / LV_PAGE_END_FLASH_SIZE;
- flash_style.body.opa = opa;
- lv_draw_rect(&flash_area, mask, &flash_style, lv_obj_get_opa_scale(page));
- }
- }
-#endif
- }
-
- return true;
-}
-
-/**
- * Handle the drawing related tasks of the scrollable object
- * @param scrl pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(scrl, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
-#if LV_USE_GROUP
- /* If the page is focused in a group and
- * the background object is not visible (transparent)
- * then "activate" the style of the scrollable*/
- const lv_style_t * style_scrl_ori = lv_obj_get_style(scrl);
- lv_obj_t * page = lv_obj_get_parent(scrl);
- const lv_style_t * style_page = lv_obj_get_style(page);
- lv_group_t * g = lv_obj_get_group(page);
- if((style_page->body.opa == LV_OPA_TRANSP) &&
- style_page->body.border.width == 0) { /*Is the background visible?*/
- if(lv_group_get_focused(g) == page) {
- lv_style_t * style_mod;
- style_mod = lv_group_mod_style(g, style_scrl_ori);
- /*If still not visible modify the style a littel bit*/
- if((style_mod->body.opa == LV_OPA_TRANSP) && style_mod->body.border.width == 0) {
- style_mod->body.opa = LV_OPA_50;
- style_mod->body.border.width = 1;
- style_mod = lv_group_mod_style(g, style_mod);
- }
-
- scrl->style_p = style_mod; /*Temporally change the style to the activated */
- }
- }
-#endif
- ancestor_design(scrl, mask, mode);
-
-#if LV_USE_GROUP
- scrl->style_p = style_scrl_ori; /*Revert the style*/
-#endif
- } else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(scrl, mask, mode);
- }
-
- return true;
-}
-
-/**
- * Signal function of the page
- * @param page pointer to a page object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(page, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- lv_obj_t * child;
- if(sign == LV_SIGNAL_CHILD_CHG) { /*Automatically move children to the scrollable object*/
- if(ext->scrl == NULL) return LV_RES_OK;
- const lv_style_t * style_bg = lv_page_get_style(page, LV_PAGE_STYLE_BG);
- const lv_style_t * style_scrl = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
- lv_fit_t fit_left = lv_page_get_scrl_fit_left(page);
- lv_fit_t fit_right = lv_page_get_scrl_fit_right(page);
- lv_fit_t fit_top = lv_page_get_scrl_fit_top(page);
- child = lv_obj_get_child(page, NULL);
- while(child != NULL) {
- if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) {
- lv_obj_t * tmp = child;
- child = lv_obj_get_child(page, child); /*Get the next child before move this*/
-
- /* Reposition the child to take padding into account (Only if it's on (0;0) or (widht;height) coordinates now)
- * It's required to keep new the object on the same coordinate if FIT is enabled.*/
- if((tmp->coords.x1 == page->coords.x1) && (fit_left == LV_FIT_TIGHT || fit_left == LV_FIT_FILL)) {
- tmp->coords.x1 += style_scrl->body.padding.left;
- tmp->coords.x2 += style_scrl->body.padding.left;
- }
- else if((tmp->coords.x2 == page->coords.x2) && (fit_right == LV_FIT_TIGHT || fit_right == LV_FIT_FILL)) {
- tmp->coords.x1 -= style_scrl->body.padding.right + style_bg->body.padding.right;
- tmp->coords.x2 -= style_scrl->body.padding.right + style_bg->body.padding.right;
- }
- if((tmp->coords.y1 == page->coords.y1) && (fit_top == LV_FIT_TIGHT || fit_top == LV_FIT_FILL)) {
- tmp->coords.y1 += style_scrl->body.padding.top;
- tmp->coords.y2 += style_scrl->body.padding.top;
- }
- lv_obj_set_parent(tmp, ext->scrl);
- } else {
- child = lv_obj_get_child(page, child);
- }
- }
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_CORD_CHG, &ext->scrl->coords);
-
- /*The scrollbars are important only if they are visible now*/
- if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page);
-
- /*Refresh the ext. size because the scrollbars might be positioned out of the page*/
- lv_obj_refresh_ext_draw_pad(page);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /*Refresh the scrollbar and notify the scrl if the size is changed*/
- if(ext->scrl != NULL && (lv_obj_get_width(page) != lv_area_get_width(param) ||
- lv_obj_get_height(page) != lv_area_get_height(param))) {
- /*If no hor_fit enabled set the scrollable's width to the page's width*/
- ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_CORD_CHG, &ext->scrl->coords);
-
- /*The scrollbars are important only if they are visible now*/
- if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page);
- }
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- /*Ensure ext. size for the scrollbars if they are out of the page*/
- if(page->ext_draw_pad < (-ext->sb.style->body.padding.right))
- page->ext_draw_pad = -ext->sb.style->body.padding.right;
- if(page->ext_draw_pad < (-ext->sb.style->body.padding.bottom))
- page->ext_draw_pad = -ext->sb.style->body.padding.bottom;
- } else if(sign == LV_SIGNAL_CONTROL) {
- uint32_t c = *((uint32_t *)param);
-
- if(c == LV_KEY_DOWN) {
- lv_page_scroll_ver(page, -lv_obj_get_height(page) / 4);
- } else if(c == LV_KEY_UP) {
- lv_page_scroll_ver(page, lv_obj_get_height(page) / 4);
- } else if(c == LV_KEY_RIGHT) {
- /*If the page can't be scrolled horizontally because it's not wide enough then scroll it
- * vertically*/
- if(lv_page_get_scrl_width(page) <= lv_obj_get_width(page))
- lv_page_scroll_ver(page, -lv_obj_get_height(page) / 4);
- else
- lv_page_scroll_hor(page, -lv_obj_get_width(page) / 4);
- } else if(c == LV_KEY_LEFT) {
- /*If the page can't be scrolled horizontally because it's not wide enough then scroll it
- * vertically*/
- if(lv_page_get_scrl_width(page) <= lv_obj_get_width(page))
- lv_page_scroll_ver(page, lv_obj_get_height(page) / 4);
- else
- lv_page_scroll_hor(page, lv_obj_get_width(page) / 4);
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- }
-
- return res;
-}
-
-/**
- * Signal function of the scrollable part of a page
- * @param scrl pointer to the scrollable object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * page = lv_obj_get_parent(scrl);
- const lv_style_t * page_style = lv_obj_get_style(page);
- lv_page_ext_t * page_ext = lv_obj_get_ext_attr(page);
-
- if(sign == LV_SIGNAL_CORD_CHG) {
- /*Limit the position of the scrollable object to be always visible
- * (Do not let its edge inner then its parent respective edge)*/
- lv_coord_t new_x = lv_obj_get_x(scrl);
- lv_coord_t new_y = lv_obj_get_y(scrl);
- bool refr_x = false;
- bool refr_y = false;
- lv_area_t page_coords;
- lv_area_t scrl_coords;
- lv_obj_get_coords(scrl, &scrl_coords);
- lv_obj_get_coords(page, &page_coords);
-
- lv_area_t * ori_coords = (lv_area_t *)param;
- lv_coord_t diff_x = scrl->coords.x1 - ori_coords->x1;
- lv_coord_t diff_y = scrl->coords.y1 - ori_coords->y1;
- lv_coord_t hpad = page_style->body.padding.left + page_style->body.padding.right;
- lv_coord_t vpad = page_style->body.padding.top + page_style->body.padding.bottom;
- lv_obj_t * page_parent = lv_obj_get_parent(page);
-
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t drag_vect;
- lv_indev_get_vect(indev, &drag_vect);
-
- /* Start the scroll propagation if there is drag vector on the indev, but the drag is not
- * started yet and the scrollable is in a corner. It will enable the scroll propagation only
- * when a new scroll begins and not when the scrollable is already being scrolled.*/
- if(page_ext->scroll_prop && page_ext->scroll_prop_ip == 0 && lv_indev_is_dragging(indev) == false) {
- if(((drag_vect.y > 0 && scrl_coords.y1 == page_coords.y1 + page_style->body.padding.top) ||
- (drag_vect.y < 0 && scrl_coords.y2 == page_coords.y2 - page_style->body.padding.bottom)) &&
- ((drag_vect.x > 0 && scrl_coords.x1 == page_coords.x1 + page_style->body.padding.left) ||
- (drag_vect.x < 0 && scrl_coords.x2 == page_coords.x2 - page_style->body.padding.right))) {
-
- if(lv_obj_get_parent(page_parent) != NULL) { /*Do not propagate the scroll to a screen*/
- page_ext->scroll_prop_ip = 1;
- }
- }
- }
-
- /*scrollable width smaller then page width? -> align to left*/
- if(lv_area_get_width(&scrl_coords) + hpad <= lv_area_get_width(&page_coords)) {
- if(scrl_coords.x1 != page_coords.x1 + page_style->body.padding.left) {
- new_x = page_style->body.padding.left;
- refr_x = true;
- }
- } else {
- /*If the scroll propagation is in progress revert the original coordinates (don't let
- * the page scroll)*/
- if(page_ext->scroll_prop_ip) {
- if(drag_vect.x == diff_x) { /*`scrl` is bouncing: drag pos. it somewhere and here it
- is reverted. Handle only the pos. because of drag*/
- new_x = ori_coords->x1 - page_coords.x1;
- refr_x = true;
- }
- }
- /*The edges of the scrollable can not be in the page (minus hpad) */
- else if(scrl_coords.x2 < page_coords.x2 - page_style->body.padding.right) {
- new_x = lv_area_get_width(&page_coords) - lv_area_get_width(&scrl_coords) -
- page_style->body.padding.right; /* Right align */
- refr_x = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.right_ip = 1;
- }
-#endif
- } else if(scrl_coords.x1 > page_coords.x1 + page_style->body.padding.left) {
- new_x = page_style->body.padding.left; /*Left align*/
- refr_x = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.left_ip = 1;
- }
-#endif
- }
- }
-
- /*scrollable height smaller then page height? -> align to top*/
- if(lv_area_get_height(&scrl_coords) + vpad <= lv_area_get_height(&page_coords)) {
- if(scrl_coords.y1 != page_coords.y1 + page_style->body.padding.top) {
- new_y = page_style->body.padding.top;
- refr_y = true;
- }
- } else {
- /*If the scroll propagation is in progress revert the original coordinates (don't let
- * the page scroll)*/
- if(page_ext->scroll_prop_ip) {
- if(drag_vect.y == diff_y) { /*`scrl` is bouncing: drag pos. it somewhere and here it
- is reverted. Handle only the pos. because of drag*/
- new_y = ori_coords->y1 - page_coords.y1;
- refr_y = true;
- }
- }
- /*The edges of the scrollable can not be in the page (minus vpad) */
- else if(scrl_coords.y2 < page_coords.y2 - page_style->body.padding.bottom) {
- new_y = lv_area_get_height(&page_coords) - lv_area_get_height(&scrl_coords) -
- page_style->body.padding.bottom; /* Bottom align */
- refr_y = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.bottom_ip = 1;
- }
-#endif
- } else if(scrl_coords.y1 > page_coords.y1 + page_style->body.padding.top) {
- new_y = page_style->body.padding.top; /*Top align*/
- refr_y = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.top_ip = 1;
- }
-#endif
- }
- }
-
- if(refr_x || refr_y) {
- lv_obj_set_pos(scrl, new_x, new_y);
-
- if(page_ext->scroll_prop_ip) {
- if(refr_y) lv_obj_set_y(page_parent, lv_obj_get_y(page_parent) + diff_y);
- if(refr_x) lv_obj_set_x(page_parent, lv_obj_get_x(page_parent) + diff_x);
- }
- }
-
- lv_page_sb_refresh(page);
- } else if(sign == LV_SIGNAL_DRAG_END) {
-
- /*Scroll propagation is finished on drag end*/
- page_ext->scroll_prop_ip = 0;
-
- /*Hide scrollbars if required*/
- if(page_ext->sb.mode == LV_SB_MODE_DRAG) {
- lv_area_t sb_area_tmp;
- if(page_ext->sb.hor_draw) {
- lv_area_copy(&sb_area_tmp, &page_ext->sb.hor_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- page_ext->sb.hor_draw = 0;
- }
- if(page_ext->sb.ver_draw) {
- lv_area_copy(&sb_area_tmp, &page_ext->sb.ver_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- page_ext->sb.ver_draw = 0;
- }
- }
- } else if(sign == LV_SIGNAL_CLEANUP) {
- page_ext->scrl = NULL;
- }
-
- return res;
-}
-
-/**
- * Propagate the input device related event of the scrollable to the parent page background
- * It is used by default if the scrollable's event is not specified
- * @param scrl pointer to the page's scrollable object
- * @param event type of the event
- * @param data data of the event
- */
-static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event)
-{
- lv_obj_t * page = lv_obj_get_parent(scrl);
-
- /*clang-format off*/
- if(event == LV_EVENT_PRESSED || event == LV_EVENT_PRESSING || event == LV_EVENT_PRESS_LOST ||
- event == LV_EVENT_RELEASED || event == LV_EVENT_SHORT_CLICKED || event == LV_EVENT_CLICKED ||
- event == LV_EVENT_LONG_PRESSED || event == LV_EVENT_LONG_PRESSED_REPEAT ||
- event == LV_EVENT_DRAG_BEGIN || event == LV_EVENT_DRAG_END || event == LV_EVENT_DRAG_THROW_BEGIN) {
- lv_event_send(page, event, lv_event_get_data());
- }
- /*clang-format on*/
-}
-
-/**
- * Refresh the position and size of the scroll bars.
- * @param page pointer to a page object
- */
-static void lv_page_sb_refresh(lv_obj_t * page)
-{
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- const lv_style_t * style = lv_obj_get_style(page);
- lv_obj_t * scrl = ext->scrl;
- lv_coord_t size_tmp;
- lv_coord_t scrl_w = lv_obj_get_width(scrl);
- lv_coord_t scrl_h = lv_obj_get_height(scrl);
- lv_coord_t obj_w = lv_obj_get_width(page);
- lv_coord_t obj_h = lv_obj_get_height(page);
-
- /*Always let 'scrollbar width' padding above, under, left and right to the scrollbars
- * else:
- * - horizontal and vertical scrollbars can overlap on the corners
- * - if the page has radius the scrollbar can be out of the radius */
- lv_coord_t sb_hor_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, style->body.padding.right);
- lv_coord_t sb_ver_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, style->body.padding.bottom);
-
- if(ext->sb.mode == LV_SB_MODE_OFF) return;
-
- if(ext->sb.mode == LV_SB_MODE_ON) {
- ext->sb.hor_draw = 1;
- ext->sb.ver_draw = 1;
- }
-
- /*Invalidate the current (old) scrollbar areas*/
- lv_area_t sb_area_tmp;
- if(ext->sb.hor_draw != 0) {
- lv_area_copy(&sb_area_tmp, &ext->sb.hor_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- }
- if(ext->sb.ver_draw != 0) {
- lv_area_copy(&sb_area_tmp, &ext->sb.ver_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- }
-
- if(ext->sb.mode == LV_SB_MODE_DRAG && lv_indev_is_dragging(lv_indev_get_act()) == false) {
- ext->sb.hor_draw = 0;
- ext->sb.ver_draw = 0;
- return;
- }
-
- /*Full sized horizontal scrollbar*/
- if(scrl_w <= obj_w - style->body.padding.left - style->body.padding.right) {
- lv_area_set_width(&ext->sb.hor_area, obj_w - 2 * sb_hor_pad);
- lv_area_set_pos(&ext->sb.hor_area, sb_hor_pad,
- obj_h - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.bottom);
- if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 0;
- }
- /*Smaller horizontal scrollbar*/
- else {
- size_tmp =
- (obj_w * (obj_w - (2 * sb_hor_pad))) / (scrl_w + style->body.padding.left + style->body.padding.right);
- if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE;
- lv_area_set_width(&ext->sb.hor_area, size_tmp);
-
- lv_area_set_pos(&ext->sb.hor_area,
- sb_hor_pad +
- (-(lv_obj_get_x(scrl) - style->body.padding.left) * (obj_w - size_tmp - 2 * sb_hor_pad)) /
- (scrl_w + style->body.padding.left + style->body.padding.right - obj_w),
- obj_h - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.bottom);
-
- if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 1;
- }
-
- /*Full sized vertical scroll bar*/
- if(scrl_h <= obj_h - style->body.padding.top - style->body.padding.bottom) {
- lv_area_set_height(&ext->sb.ver_area, obj_h - 2 * sb_ver_pad);
- lv_area_set_pos(&ext->sb.ver_area,
- obj_w - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.right, sb_ver_pad);
- if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 0;
- }
- /*Smaller vertical scroll bar*/
- else {
- size_tmp =
- (obj_h * (obj_h - (2 * sb_ver_pad))) / (scrl_h + style->body.padding.top + style->body.padding.bottom);
- if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE;
- lv_area_set_height(&ext->sb.ver_area, size_tmp);
-
- lv_area_set_pos(&ext->sb.ver_area,
- obj_w - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.right,
- sb_ver_pad + (-(lv_obj_get_y(scrl) - ext->sb.style->body.padding.bottom) *
- (obj_h - size_tmp - 2 * sb_ver_pad)) /
- (scrl_h + style->body.padding.top + style->body.padding.bottom - obj_h));
-
- if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 1;
- }
-
- /*Invalidate the new scrollbar areas*/
- if(ext->sb.hor_draw != 0) {
- lv_area_copy(&sb_area_tmp, &ext->sb.hor_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- }
- if(ext->sb.ver_draw != 0) {
- lv_area_copy(&sb_area_tmp, &ext->sb.ver_area);
- sb_area_tmp.x1 += page->coords.x1;
- sb_area_tmp.y1 += page->coords.y1;
- sb_area_tmp.x2 += page->coords.x1;
- sb_area_tmp.y2 += page->coords.y1;
- lv_obj_invalidate_area(page, &sb_area_tmp);
- }
-}
-
-#if LV_USE_ANIMATION
-static void edge_flash_anim(void * page, lv_anim_value_t v)
-{
- lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- ext->edge_flash.state = v;
- lv_obj_invalidate(page);
-}
-
-static void edge_flash_anim_end(lv_anim_t * a)
-{
- lv_page_ext_t * ext = lv_obj_get_ext_attr(a->var);
- ext->edge_flash.top_ip = 0;
- ext->edge_flash.bottom_ip = 0;
- ext->edge_flash.left_ip = 0;
- ext->edge_flash.right_ip = 0;
- lv_obj_invalidate(a->var);
-}
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_page.h b/src/libs/lvgl/src/lv_objx/lv_page.h
deleted file mode 100644
index 6715c92f..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_page.h
+++ /dev/null
@@ -1,416 +0,0 @@
-/**
- * @file lv_page.h
- *
- */
-
-#ifndef LV_PAGE_H
-#define LV_PAGE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_PAGE != 0
-
-/*Testing of dependencies*/
-#if LV_USE_CONT == 0
-#error "lv_page: lv_cont is required. Enable it in lv_conf.h (LV_USE_CONT 1) "
-#endif
-
-#include "lv_cont.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_misc/lv_anim.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Scrollbar modes: shows when should the scrollbars be visible*/
-enum {
- LV_SB_MODE_OFF = 0x0, /**< Never show scrollbars*/
- LV_SB_MODE_ON = 0x1, /**< Always show scrollbars*/
- LV_SB_MODE_DRAG = 0x2, /**< Show scrollbars when page is being dragged*/
- LV_SB_MODE_AUTO = 0x3, /**< Show scrollbars when the scrollable container is large enough to be scrolled*/
- LV_SB_MODE_HIDE = 0x4, /**< Hide the scroll bar temporally*/
- LV_SB_MODE_UNHIDE = 0x5, /**< Unhide the previously hidden scrollbar. Recover it's type too*/
-};
-typedef uint8_t lv_sb_mode_t;
-
-/** Edges: describes the four edges of the page*/
-enum { LV_PAGE_EDGE_LEFT = 0x1, LV_PAGE_EDGE_TOP = 0x2, LV_PAGE_EDGE_RIGHT = 0x4, LV_PAGE_EDGE_BOTTOM = 0x8 };
-typedef uint8_t lv_page_edge_t;
-
-/*Data of page*/
-typedef struct
-{
- lv_cont_ext_t bg; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * scrl; /*The scrollable object on the background*/
- struct
- {
- const lv_style_t * style; /*Style of scrollbars*/
- lv_area_t hor_area; /*Horizontal scrollbar area relative to the page. (Handled by the library) */
- lv_area_t ver_area; /*Vertical scrollbar area relative to the page (Handled by the library)*/
- uint8_t hor_draw : 1; /*1: horizontal scrollbar is visible now (Handled by the library)*/
- uint8_t ver_draw : 1; /*1: vertical scrollbar is visible now (Handled by the library)*/
- lv_sb_mode_t mode : 3; /*Scrollbar visibility from 'lv_page_sb_mode_t'*/
- } sb;
-#if LV_USE_ANIMATION
- struct
- {
- lv_anim_value_t state; /*Store the current size of the edge flash effect*/
- const lv_style_t * style; /*Style of edge flash effect (usually homogeneous circle)*/
- uint8_t enabled : 1; /*1: Show a flash animation on the edge*/
- uint8_t top_ip : 1; /*Used internally to show that top most position is reached (flash is In
- Progress)*/
- uint8_t bottom_ip : 1; /*Used internally to show that bottom most position is reached (flash
- is In Progress)*/
- uint8_t right_ip : 1; /*Used internally to show that right most position is reached (flash
- is In Progress)*/
- uint8_t left_ip : 1; /*Used internally to show that left most position is reached (flash is
- In Progress)*/
- } edge_flash;
-
- uint16_t anim_time; /*Scroll animation time*/
-#endif
-
- uint8_t scroll_prop : 1; /*1: Propagate the scrolling the the parent if the edge is reached*/
- uint8_t scroll_prop_ip : 1; /*1: Scroll propagation is in progress (used by the library)*/
-} lv_page_ext_t;
-
-enum {
- LV_PAGE_STYLE_BG,
- LV_PAGE_STYLE_SCRL,
- LV_PAGE_STYLE_SB,
- LV_PAGE_STYLE_EDGE_FLASH,
-};
-typedef uint8_t lv_page_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a page objects
- * @param par pointer to an object, it will be the parent of the new page
- * @param copy pointer to a page object, if not NULL then the new object will be copied from it
- * @return pointer to the created page
- */
-lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param page pointer to an object
- */
-void lv_page_clean(lv_obj_t * page);
-
-/**
- * Get the scrollable object of a page
- * @param page pointer to a page object
- * @return pointer to a container which is the scrollable part of the page
- */
-lv_obj_t * lv_page_get_scrl(const lv_obj_t * page);
-
-/**
- * Get the animation time
- * @param page pointer to a page object
- * @return the animation time in milliseconds
- */
-uint16_t lv_page_get_anim_time(const lv_obj_t * page);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the scroll bar mode on a page
- * @param page pointer to a page object
- * @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
- */
-void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode);
-
-/**
- * Set the animation time for the page
- * @param page pointer to a page object
- * @param anim_time animation time in milliseconds
- */
-void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time);
-
-/**
- * Enable the scroll propagation feature. If enabled then the page will move its parent if there is
- * no more space to scroll.
- * @param page pointer to a Page
- * @param en true or false to enable/disable scroll propagation
- */
-void lv_page_set_scroll_propagation(lv_obj_t * page, bool en);
-
-/**
- * Enable the edge flash effect. (Show an arc when the an edge is reached)
- * @param page pointer to a Page
- * @param en true or false to enable/disable end flash
- */
-void lv_page_set_edge_flash(lv_obj_t * page, bool en);
-
-/**
- * Set the fit policy in all 4 directions separately.
- * It tell how to change the page size automatically.
- * @param page pointer to a page object
- * @param left left fit policy from `lv_fit_t`
- * @param right right fit policy from `lv_fit_t`
- * @param top bottom fit policy from `lv_fit_t`
- * @param bottom bottom fit policy from `lv_fit_t`
- */
-static inline void lv_page_set_scrl_fit4(lv_obj_t * page, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
-{
- lv_cont_set_fit4(lv_page_get_scrl(page), left, right, top, bottom);
-}
-
-/**
- * Set the fit policy horizontally and vertically separately.
- * It tell how to change the page size automatically.
- * @param page pointer to a page object
- * @param hot horizontal fit policy from `lv_fit_t`
- * @param ver vertical fit policy from `lv_fit_t`
- */
-static inline void lv_page_set_scrl_fit2(lv_obj_t * page, lv_fit_t hor, lv_fit_t ver)
-{
- lv_cont_set_fit2(lv_page_get_scrl(page), hor, ver);
-}
-
-/**
- * Set the fit policyin all 4 direction at once.
- * It tell how to change the page size automatically.
- * @param page pointer to a button object
- * @param fit fit policy from `lv_fit_t`
- */
-static inline void lv_page_set_scrl_fit(lv_obj_t * page, lv_fit_t fit)
-{
- lv_cont_set_fit(lv_page_get_scrl(page), fit);
-}
-
-/**
- * Set width of the scrollable part of a page
- * @param page pointer to a page object
- * @param w the new width of the scrollable (it ha no effect is horizontal fit is enabled)
- */
-static inline void lv_page_set_scrl_width(lv_obj_t * page, lv_coord_t w)
-{
- lv_obj_set_width(lv_page_get_scrl(page), w);
-}
-
-/**
- * Set height of the scrollable part of a page
- * @param page pointer to a page object
- * @param h the new height of the scrollable (it ha no effect is vertical fit is enabled)
- */
-static inline void lv_page_set_scrl_height(lv_obj_t * page, lv_coord_t h)
-{
- lv_obj_set_height(lv_page_get_scrl(page), h);
-}
-
-/**
- * Set the layout of the scrollable part of the page
- * @param page pointer to a page object
- * @param layout a layout from 'lv_cont_layout_t'
- */
-static inline void lv_page_set_scrl_layout(lv_obj_t * page, lv_layout_t layout)
-{
- lv_cont_set_layout(lv_page_get_scrl(page), layout);
-}
-
-/**
- * Set a style of a page
- * @param page pointer to a page object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Set the scroll bar mode on a page
- * @param page pointer to a page object
- * @return the mode from 'lv_page_sb.mode_t' enum
- */
-lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page);
-
-/**
- * Get the scroll propagation property
- * @param page pointer to a Page
- * @return true or false
- */
-bool lv_page_get_scroll_propagation(lv_obj_t * page);
-
-/**
- * Get the edge flash effect property.
- * @param page pointer to a Page
- * return true or false
- */
-bool lv_page_get_edge_flash(lv_obj_t * page);
-
-/**
- * Get that width which can be set to the children to still not cause overflow (show scrollbars)
- * @param page pointer to a page object
- * @return the width which still fits into the page
- */
-lv_coord_t lv_page_get_fit_width(lv_obj_t * page);
-
-/**
- * Get that height which can be set to the children to still not cause overflow (show scrollbars)
- * @param page pointer to a page object
- * @return the height which still fits into the page
- */
-lv_coord_t lv_page_get_fit_height(lv_obj_t * page);
-
-/**
- * Get width of the scrollable part of a page
- * @param page pointer to a page object
- * @return the width of the scrollable
- */
-static inline lv_coord_t lv_page_get_scrl_width(const lv_obj_t * page)
-{
- return lv_obj_get_width(lv_page_get_scrl(page));
-}
-
-/**
- * Get height of the scrollable part of a page
- * @param page pointer to a page object
- * @return the height of the scrollable
- */
-static inline lv_coord_t lv_page_get_scrl_height(const lv_obj_t * page)
-{
- return lv_obj_get_height(lv_page_get_scrl(page));
-}
-
-/**
- * Get the layout of the scrollable part of a page
- * @param page pointer to page object
- * @return the layout from 'lv_cont_layout_t'
- */
-static inline lv_layout_t lv_page_get_scrl_layout(const lv_obj_t * page)
-{
- return lv_cont_get_layout(lv_page_get_scrl(page));
-}
-
-/**
- * Get the left fit mode
- * @param page pointer to a page object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_page_get_scrl_fit_left(const lv_obj_t * page)
-{
- return lv_cont_get_fit_left(lv_page_get_scrl(page));
-}
-
-/**
- * Get the right fit mode
- * @param page pointer to a page object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_page_get_scrl_fit_right(const lv_obj_t * page)
-{
- return lv_cont_get_fit_right(lv_page_get_scrl(page));
-}
-
-/**
- * Get the top fit mode
- * @param page pointer to a page object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_page_get_scrl_fit_top(const lv_obj_t * page)
-{
- return lv_cont_get_fit_top(lv_page_get_scrl(page));
-}
-
-/**
- * Get the bottom fit mode
- * @param page pointer to a page object
- * @return an element of `lv_fit_t`
- */
-static inline lv_fit_t lv_page_get_scrl_fit_bottom(const lv_obj_t * page)
-{
- return lv_cont_get_fit_bottom(lv_page_get_scrl(page));
-}
-
-/**
- * Get a style of a page
- * @param page pointer to page object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Find whether the page has been scrolled to a certain edge.
- * @param page Page object
- * @param edge Edge to check
- * @return true if the page is on the specified edge
- */
-bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge);
-
-/**
- * Glue the object to the page. After it the page can be moved (dragged) with this object too.
- * @param obj pointer to an object on a page
- * @param glue true: enable glue, false: disable glue
- */
-void lv_page_glue_obj(lv_obj_t * obj, bool glue);
-
-/**
- * Focus on an object. It ensures that the object will be visible on the page.
- * @param page pointer to a page object
- * @param obj pointer to an object to focus (must be on the page)
- * @param anim_en LV_ANIM_ON to focus with animation; LV_ANIM_OFF to focus without animation
- */
-void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t anim_en);
-
-/**
- * Scroll the page horizontally
- * @param page pointer to a page object
- * @param dist the distance to scroll (< 0: scroll left; > 0 scroll right)
- */
-void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist);
-
-/**
- * Scroll the page vertically
- * @param page pointer to a page object
- * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
- */
-void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist);
-
-/**
- * Not intended to use directly by the user but by other object types internally.
- * Start an edge flash animation. Exactly one `ext->edge_flash.xxx_ip` should be set
- * @param page
- */
-void lv_page_start_edge_flash(lv_obj_t * page);
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_PAGE*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_PAGE_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_preload.c b/src/libs/lvgl/src/lv_objx/lv_preload.c
deleted file mode 100644
index 2de9ebb1..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_preload.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/**
- * @file lv_preload.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_preload.h"
-#if LV_USE_PRELOAD != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_draw/lv_draw_rect.h"
-#include "../lv_draw/lv_draw_arc.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_preloader"
-
-#ifndef LV_PRELOAD_DEF_ARC_LENGTH
-#define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/
-#endif
-
-#ifndef LV_PRELOAD_DEF_SPIN_TIME
-#define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/
-#endif
-
-#ifndef LV_PRELOAD_DEF_ANIM
-#define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC /*animation type*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a pre loader object
- * @param par pointer to an object, it will be the parent of the new pre loader
- * @param copy pointer to a pre loader object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created pre loader
- */
-lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("preload create started");
-
- /*Create the ancestor of pre loader*/
- lv_obj_t * new_preload = lv_arc_create(par, copy);
- LV_ASSERT_MEM(new_preload);
- if(new_preload == NULL) return NULL;
-
- /*Allocate the pre loader type specific extended data*/
- lv_preload_ext_t * ext = lv_obj_allocate_ext_attr(new_preload, sizeof(lv_preload_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_preload);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_preload);
-
- /*Initialize the allocated 'ext' */
- ext->arc_length = LV_PRELOAD_DEF_ARC_LENGTH;
- ext->anim_type = LV_PRELOAD_DEF_ANIM;
- ext->anim_dir = LV_PRELOAD_DIR_FORWARD;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_preload, lv_preload_signal);
- lv_obj_set_design_cb(new_preload, lv_preload_design);
-
- /*Init the new pre loader pre loader*/
- if(copy == NULL) {
- lv_obj_set_size(new_preload, LV_DPI / 2, LV_DPI / 2);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_preload_set_style(new_preload, LV_PRELOAD_STYLE_MAIN, th->style.preload);
- } else {
- lv_obj_set_style(new_preload, &lv_style_pretty_color);
- }
-
- ext->time = LV_PRELOAD_DEF_SPIN_TIME;
-
- }
- /*Copy an existing pre loader*/
- else {
- lv_preload_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->arc_length = copy_ext->arc_length;
- ext->time = copy_ext->time;
- ext->anim_dir = copy_ext->anim_dir;
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_preload);
- }
-
- lv_preload_set_type(new_preload, ext->anim_type);
-
- LV_LOG_INFO("preload created");
-
- return new_preload;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Set the length of the spinning arc in degrees
- * @param preload pointer to a preload object
- * @param deg length of the arc
- */
-void lv_preload_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
-
- ext->arc_length = deg;
-}
-
-/**
- * Set the spin time of the arc
- * @param preload pointer to a preload object
- * @param time time of one round in milliseconds
- */
-void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
-
- ext->time = time;
- lv_preload_set_type(preload, ext->anim_type);
-}
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a style of a pre loader.
- * @param preload pointer to pre loader object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- switch(type) {
- case LV_PRELOAD_STYLE_MAIN: lv_arc_set_style(preload, LV_ARC_STYLE_MAIN, style); break;
- }
-}
-
-/**
- * Set the animation type of a preloadeer.
- * @param preload pointer to pre loader object
- * @param type animation type of the preload
- * */
-void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
-
- /*delete previous animation*/
- lv_anim_del(preload, NULL);
- switch(type) {
- case LV_PRELOAD_TYPE_FILLSPIN_ARC: {
- ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC;
- lv_anim_t a;
- a.var = preload;
- if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
- /* Clockwise */
- a.start = 360;
- a.end = 0;
- } else {
- a.start = 0;
- a.end = 360;
- }
- a.exec_cb = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
- a.path_cb = lv_anim_path_ease_in_out;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = ext->time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 1;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-
- lv_anim_t b;
- b.var = preload;
- if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
- /* Clockwise */
- b.start = 360 - ext->arc_length;
- b.end = ext->arc_length;
- } else {
- b.start = ext->arc_length;
- b.end = 360 - ext->arc_length;
- }
- b.exec_cb = (lv_anim_exec_xcb_t)lv_preload_set_arc_length;
- b.path_cb = lv_anim_path_ease_in_out;
- b.ready_cb = NULL;
- b.act_time = 0;
- b.time = ext->time;
- b.playback = 1;
- b.playback_pause = 0;
- b.repeat = 1;
- b.repeat_pause = 0;
- lv_anim_create(&b);
- break;
- }
- case LV_PRELOAD_TYPE_CONSTANT_ARC:
- case LV_PRELOAD_TYPE_SPINNING_ARC:
- default: {
- ext->anim_type = type;
- lv_anim_t a;
- a.var = preload;
- if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
- /* Clockwise */
- a.start = 360;
- a.end = 0;
- } else {
- a.start = 0;
- a.end = 360;
- }
- a.exec_cb = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
- a.path_cb = (LV_PRELOAD_TYPE_CONSTANT_ARC == type ?
- lv_anim_path_linear : lv_anim_path_ease_in_out);
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = ext->time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 1;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- break;
- }
- }
-}
-
-void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
-
- ext->anim_dir = dir;
- lv_preload_set_type(preload, ext->anim_type);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the arc length [degree] of the a pre loader
- * @param preload pointer to a pre loader object
- */
-lv_anim_value_t lv_preload_get_arc_length(const lv_obj_t * preload)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
- return ext->arc_length;
-}
-
-/**
- * Get the spin time of the arc
- * @param preload pointer to a pre loader object [milliseconds]
- */
-uint16_t lv_preload_get_spin_time(const lv_obj_t * preload)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
- return ext->time;
-}
-
-/**
- * Get style of a pre loader.
- * @param preload pointer to pre loader object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
-
- switch(type) {
- case LV_PRELOAD_STYLE_MAIN: style = lv_arc_get_style(preload, LV_ARC_STYLE_MAIN); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**
- * Get the animation type of a preloadeer.
- * @param preload pointer to pre loader object
- * @return animation type
- * */
-lv_preload_type_t lv_preload_get_type(lv_obj_t * preload)
-{
- LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
-
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
- return ext->anim_type;
-}
-
-lv_preload_dir_t lv_preload_get_dir(lv_obj_t * preload)
-{
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
- return ext->anim_dir;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Animator function (exec_cb) to rotate the arc of spinner.
- * @param ptr pointer to preloader
- * @param val the current desired value [0..360]
- */
-void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val)
-{
- lv_obj_t * preload = ptr;
- lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
-
- int16_t angle_start = val - ext->arc_length / 2 + 180;
- int16_t angle_end = angle_start + ext->arc_length;
-
- angle_start = angle_start % 360;
- angle_end = angle_end % 360;
-
- lv_arc_set_angles(preload, angle_start, angle_end);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the pre loaders
- * @param preload pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
-
- /*Draw a circle as background*/
- const lv_style_t * style = lv_arc_get_style(preload, LV_ARC_STYLE_MAIN);
- if(style->body.border.width > 0) {
- lv_coord_t r = (LV_MATH_MIN(lv_obj_get_width(preload), lv_obj_get_height(preload))) / 2;
- r -= LV_MATH_MIN(style->body.padding.left, style->body.padding.top);
-
- lv_coord_t x = preload->coords.x1 + lv_obj_get_width(preload) / 2;
- lv_coord_t y = preload->coords.y1 + lv_obj_get_height(preload) / 2;
-
- lv_style_t bg_style;
- lv_style_copy(&bg_style, &lv_style_plain);
- bg_style.body.opa = LV_OPA_TRANSP;
- bg_style.body.radius = LV_RADIUS_CIRCLE;
- bg_style.body.border.color = style->body.border.color;
- bg_style.body.border.width = style->body.border.width;
-
- lv_area_t bg_area;
- bg_area.x1 = x - r;
- bg_area.y1 = y - r;
- bg_area.x2 = x + r;
- bg_area.y2 = y + r;
-
- lv_draw_rect(&bg_area, mask, &bg_style, lv_obj_get_opa_scale(preload));
- }
- /*Draw the arc above the background circle */
- ancestor_design(preload, mask, mode);
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the pre loader
- * @param preload pointer to a pre loader object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(preload, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_preload.h b/src/libs/lvgl/src/lv_objx/lv_preload.h
deleted file mode 100644
index 22b87f32..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_preload.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * @file lv_preload.h
- *
- */
-
-#ifndef LV_PRELOAD_H
-#define LV_PRELOAD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_PRELOAD != 0
-
-/*Testing of dependencies*/
-#if LV_USE_ARC == 0
-#error "lv_preload: lv_arc is required. Enable it in lv_conf.h (LV_USE_ARC 1) "
-#endif
-
-#if LV_USE_ANIMATION == 0
-#error "lv_preload: animations are required. Enable it in lv_conf.h (LV_USE_ANIMATION 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_misc/lv_anim.h"
-#include "lv_arc.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Type of preloader.
- */
-enum {
- LV_PRELOAD_TYPE_SPINNING_ARC,
- LV_PRELOAD_TYPE_FILLSPIN_ARC,
- LV_PRELOAD_TYPE_CONSTANT_ARC,
-};
-typedef uint8_t lv_preload_type_t;
-
-/**
- * Direction the preloader should spin.
- */
-enum {
- LV_PRELOAD_DIR_FORWARD,
- LV_PRELOAD_DIR_BACKWARD,
-};
-typedef uint8_t lv_preload_dir_t;
-
-/*Data of pre loader*/
-typedef struct
-{
- lv_arc_ext_t arc; /*Ext. of ancestor*/
- /*New data for this type */
- lv_anim_value_t arc_length; /*Length of the spinning indicator in degree*/
- uint16_t time; /*Time of one round*/
- lv_preload_type_t anim_type : 2; /*Type of the arc animation*/
- lv_preload_dir_t anim_dir : 1; /*Animation Direction*/
-} lv_preload_ext_t;
-
-/*Styles*/
-enum {
- LV_PRELOAD_STYLE_MAIN,
-};
-typedef uint8_t lv_preload_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a pre loader objects
- * @param par pointer to an object, it will be the parent of the new pre loader
- * @param copy pointer to a pre loader object, if not NULL then the new object will be copied from
- * it
- * @return pointer to the created pre loader
- */
-lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Set the length of the spinning arc in degrees
- * @param preload pointer to a preload object
- * @param deg length of the arc
- */
-void lv_preload_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg);
-
-/**
- * Set the spin time of the arc
- * @param preload pointer to a preload object
- * @param time time of one round in milliseconds
- */
-void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a style of a pre loader.
- * @param preload pointer to pre loader object
- * @param type which style should be set
- * @param style pointer to a style
- * */
-void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_style_t * style);
-
-/**
- * Set the animation type of a preloader.
- * @param preload pointer to pre loader object
- * @param type animation type of the preload
- * */
-void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type);
-
-/**
- * Set the animation direction of a preloader
- * @param preload pointer to pre loader object
- * @param direction animation direction of the preload
- */
-void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the arc length [degree] of the a pre loader
- * @param preload pointer to a pre loader object
- */
-lv_anim_value_t lv_preload_get_arc_length(const lv_obj_t * preload);
-
-/**
- * Get the spin time of the arc
- * @param preload pointer to a pre loader object [milliseconds]
- */
-uint16_t lv_preload_get_spin_time(const lv_obj_t * preload);
-
-/**
- * Get style of a pre loader.
- * @param preload pointer to pre loader object
- * @param type which style should be get
- * @return style pointer to the style
- * */
-const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type);
-
-/**
- * Get the animation type of a preloader.
- * @param preload pointer to pre loader object
- * @return animation type
- * */
-lv_preload_type_t lv_preload_get_type(lv_obj_t * preload);
-
-/**
- * Get the animation direction of a preloader
- * @param preload pointer to pre loader object
- * @return animation direction
- */
-lv_preload_dir_t lv_preload_get_dir(lv_obj_t * preload);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Animator function (exec_cb) to rotate the arc of spinner.
- * @param ptr pointer to preloader
- * @param val the current desired value [0..360]
- */
-void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_PRELOAD*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_PRELOAD_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_roller.c b/src/libs/lvgl/src/lv_objx/lv_roller.c
deleted file mode 100644
index 4d21bbad..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_roller.c
+++ /dev/null
@@ -1,733 +0,0 @@
-/**
- * @file lv_roller.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_roller.h"
-#if LV_USE_ROLLER != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_roller"
-
-#if LV_USE_ANIMATION == 0
-#undef LV_ROLLER_DEF_ANIM_TIME
-#define LV_ROLLER_DEF_ANIM_TIME 0 /*No animation*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_t sign, void * param);
-static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * param);
-static void refr_position(lv_obj_t * roller, lv_anim_enable_t animen);
-static void refr_height(lv_obj_t * roller);
-static void inf_normalize(void * roller_scrl);
-#if LV_USE_ANIMATION
-static void scroll_anim_ready_cb(lv_anim_t * a);
-#endif
-static void draw_bg(lv_obj_t * roller, const lv_area_t * mask);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_signal_cb_t ancestor_scrl_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a roller object
- * @param par pointer to an object, it will be the parent of the new roller
- * @param copy pointer to a roller object, if not NULL then the new object will be copied from it
- * @return pointer to the created roller
- */
-lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("roller create started");
-
- /*Create the ancestor of roller*/
- lv_obj_t * new_roller = lv_ddlist_create(par, copy);
- LV_ASSERT_MEM(new_roller);
- if(new_roller == NULL) return NULL;
-
- if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_roller));
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_roller);
-
- /*Allocate the roller type specific extended data*/
- lv_roller_ext_t * ext = lv_obj_allocate_ext_attr(new_roller, sizeof(lv_roller_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- ext->ddlist.draw_arrow = 0; /*Do not draw arrow by default*/
- ext->mode = LV_ROLLER_MODE_NORMAL;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_roller, lv_roller_signal);
- lv_obj_set_design_cb(new_roller, lv_roller_design);
-
- /*Init the new roller roller*/
- if(copy == NULL) {
- lv_obj_t * scrl = lv_page_get_scrl(new_roller);
- lv_obj_set_drag(scrl, true); /*In ddlist it might be disabled*/
- lv_page_set_scrl_fit2(new_roller, LV_FIT_TIGHT, LV_FIT_NONE); /*Height is specified directly*/
- lv_ddlist_open(new_roller, false);
- lv_ddlist_set_anim_time(new_roller, LV_ROLLER_DEF_ANIM_TIME);
- lv_ddlist_set_stay_open(new_roller, true);
- lv_roller_set_visible_row_count(new_roller, 3);
- lv_label_set_align(ext->ddlist.label, LV_LABEL_ALIGN_CENTER);
-
- lv_obj_set_signal_cb(scrl, lv_roller_scrl_signal);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_roller_set_style(new_roller, LV_ROLLER_STYLE_BG, th->style.roller.bg);
- lv_roller_set_style(new_roller, LV_ROLLER_STYLE_SEL, th->style.roller.sel);
- } else {
- /*Refresh the roller's style*/
- lv_obj_refresh_style(new_roller); /*To set scrollable size automatically*/
- }
- }
- /*Copy an existing roller*/
- else {
- lv_roller_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->mode = copy_ext->mode;
-
- lv_obj_t * scrl = lv_page_get_scrl(new_roller);
- lv_ddlist_open(new_roller, false);
- lv_obj_set_signal_cb(scrl, lv_roller_scrl_signal);
-
- /*Refresh the roller's style*/
- lv_obj_refresh_style(new_roller); /*Refresh the style with new signal function*/
- }
-
- LV_LOG_INFO("roller created");
-
- return new_roller;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the options on a roller
- * @param roller pointer to roller object
- * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
- * @param mode `LV_ROLLER_MODE_NORMAL` or `LV_ROLLER_MODE_INFINITE`
- */
-void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mode_t mode)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
- LV_ASSERT_STR(options);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
-
- if(mode == LV_ROLLER_MODE_NORMAL) {
- ext->mode = LV_ROLLER_MODE_NORMAL;
- lv_ddlist_set_options(roller, options);
-
- /* Make sure the roller's height and the scrollable's height is refreshed.
- * They are refreshed in `LV_SIGNAL_COORD_CHG` but if the new options has the same width
- * that signal won't be called. (It's called because of LV_FIT_TIGHT hor fit)*/
- refr_height(roller);
- refr_position(roller, LV_ANIM_OFF);
- } else {
- ext->mode = LV_ROLLER_MODE_INIFINITE;
-
- size_t opt_len = strlen(options) + 1; /*+1 to add '\n' after option lists*/
- char * opt_extra = lv_mem_alloc(opt_len * LV_ROLLER_INF_PAGES);
- uint8_t i;
- for(i = 0; i < LV_ROLLER_INF_PAGES; i++) {
- strcpy(&opt_extra[opt_len * i], options);
- opt_extra[opt_len * (i + 1) - 1] = '\n';
- }
- opt_extra[opt_len * LV_ROLLER_INF_PAGES - 1] = '\0';
- lv_ddlist_set_options(roller, opt_extra);
- lv_mem_free(opt_extra);
-
- /* Make sure the roller's height and the scrollable's height is refreshed.
- * They are refreshed in `LV_SIGNAL_COORD_CHG` but if the new options has the same width
- * that signal won't be called. (It called because LV_FIT_TIGHT hor fit)*/
- refr_height(roller);
-
- uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
- lv_roller_set_selected(roller, ((LV_ROLLER_INF_PAGES / 2) + 1) * real_id_cnt, false); /*Select the middle page*/
- }
-}
-
-/**
- * Set the align of the roller's options (left or center)
- * @param roller - pointer to a roller object
- * @param align - one of lv_label_align_t values (left, right, center)
- */
-void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
-
- lv_obj_t * label = ext->ddlist.label;
-
- if(label == NULL) return; /*Probably the roller is being deleted if the label is NULL.*/
- lv_label_set_align(label, align);
-
- switch(lv_label_get_align(label)) {
- case LV_LABEL_ALIGN_LEFT: lv_obj_align(label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
- case LV_LABEL_ALIGN_CENTER: lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0); break;
- case LV_LABEL_ALIGN_RIGHT: lv_obj_align(label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
- }
-}
-
-/**
- * Set the selected option
- * @param roller pointer to a roller object
- * @param sel_opt id of the selected option (0 ... number of option - 1);
- * @param anim_en LV_ANIM_ON: set with animation; LV_ANOM_OFF set immediately
- */
-void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
-
- if(lv_roller_get_selected(roller) == sel_opt) return;
-
- lv_ddlist_set_selected(roller, sel_opt);
- refr_position(roller, anim);
-}
-
-/**
- * Set the height to show the given number of rows (options)
- * @param roller pointer to a roller object
- * @param row_cnt number of desired visible rows
- */
-void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
- uint8_t n_line_space = (row_cnt > 1) ? row_cnt - 1 : 1;
- lv_ddlist_set_fix_height(roller, lv_font_get_line_height(style_label->text.font) * row_cnt +
- style_label->text.line_space * n_line_space);
-}
-
-/**
- * Set a style of a roller
- * @param roller pointer to a roller object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- switch(type) {
- case LV_ROLLER_STYLE_BG: lv_obj_set_style(roller, style); break;
- case LV_ROLLER_STYLE_SEL: lv_ddlist_set_style(roller, LV_DDLIST_STYLE_SEL, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the id of the selected option
- * @param roller pointer to a roller object
- * @return id of the selected option (0 ... number of option - 1);
- */
-uint16_t lv_roller_get_selected(const lv_obj_t * roller)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
- uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
- return lv_ddlist_get_selected(roller) % real_id_cnt;
- } else {
- return lv_ddlist_get_selected(roller);
- }
-}
-
-/**
- * Get the align attribute. Default alignment after _create is LV_LABEL_ALIGN_CENTER
- * @param roller pointer to a roller object
- * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER
- */
-lv_label_align_t lv_roller_get_align(const lv_obj_t * roller)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- LV_ASSERT_MEM(ext);
- LV_ASSERT_MEM(ext->ddlist.label);
- return lv_label_get_align(ext->ddlist.label);
-}
-
-/**
- * Get the auto width set attribute
- * @param roller pointer to a roller object
- * @return true: auto size enabled; false: manual width settings enabled
- */
-bool lv_roller_get_hor_fit(const lv_obj_t * roller)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- return lv_page_get_scrl_fit_left(roller);
-}
-
-/**
- * Get a style of a roller
- * @param roller pointer to a roller object
- * @param type which style should be get
- * @return style pointer to a style
- * */
-const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type)
-{
- LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
-
- switch(type) {
- case LV_ROLLER_STYLE_BG: return lv_obj_get_style(roller);
- case LV_ROLLER_STYLE_SEL: return lv_ddlist_get_style(roller, LV_DDLIST_STYLE_SEL);
- default: return NULL;
- }
-
- /*To avoid warning*/
- return NULL;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the rollers
- * @param roller pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- draw_bg(roller, mask);
-
- const lv_style_t * style = lv_roller_get_style(roller, LV_ROLLER_STYLE_BG);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(roller);
- const lv_font_t * font = style->text.font;
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- lv_coord_t font_h = lv_font_get_line_height(font);
- lv_area_t rect_area;
- rect_area.y1 = roller->coords.y1 + lv_obj_get_height(roller) / 2 - font_h / 2 - style->text.line_space / 2;
- if((font_h & 0x1) && (style->text.line_space & 0x1)) rect_area.y1--; /*Compensate the two rounding error*/
- rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
- lv_area_t roller_coords;
- lv_obj_get_coords(roller, &roller_coords);
- lv_obj_get_inner_coords(roller, &roller_coords);
-
- rect_area.x1 = roller_coords.x1;
- rect_area.x2 = roller_coords.x2;
-
- lv_draw_rect(&rect_area, mask, ext->ddlist.sel_style, opa_scale);
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- const lv_style_t * style = lv_roller_get_style(roller, LV_ROLLER_STYLE_BG);
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- const lv_font_t * font = style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
- lv_opa_t opa_scale = lv_obj_get_opa_scale(roller);
-
- /*Redraw the text on the selected area with a different color*/
- lv_area_t rect_area;
- rect_area.y1 = roller->coords.y1 + lv_obj_get_height(roller) / 2 - font_h / 2 - style->text.line_space / 2;
- if((font_h & 0x1) && (style->text.line_space & 0x1)) rect_area.y1--; /*Compensate the two rounding error*/
- rect_area.y2 = rect_area.y1 + font_h + style->text.line_space - 1;
- rect_area.x1 = roller->coords.x1;
- rect_area.x2 = roller->coords.x2;
- lv_area_t mask_sel;
- bool area_ok;
- area_ok = lv_area_intersect(&mask_sel, mask, &rect_area);
- if(area_ok) {
- const lv_style_t * sel_style = lv_roller_get_style(roller, LV_ROLLER_STYLE_SEL);
- lv_style_t new_style;
- lv_txt_flag_t txt_align = LV_TXT_FLAG_NONE;
-
- {
- lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label);
-
- if(LV_LABEL_ALIGN_CENTER == label_align) {
- txt_align |= LV_TXT_FLAG_CENTER;
- } else if(LV_LABEL_ALIGN_RIGHT == label_align) {
- txt_align |= LV_TXT_FLAG_RIGHT;
- }
- }
-
- lv_style_copy(&new_style, style);
- new_style.text.color = sel_style->text.color;
- new_style.text.opa = sel_style->text.opa;
- lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, opa_scale,
- lv_label_get_text(ext->ddlist.label), txt_align, NULL, NULL, NULL, lv_obj_get_base_dir(ext->ddlist.label));
- }
- }
-
- return true;
-}
-
-/**
- * Signal function of the roller
- * @param roller pointer to a roller object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * param)
-{
- lv_res_t res = LV_RES_OK;
-
- /*Don't let the drop down list to handle the control signals. It works differently*/
- if(sign != LV_SIGNAL_CONTROL && sign != LV_SIGNAL_FOCUS && sign != LV_SIGNAL_DEFOCUS) {
- /* Include the ancient signal function */
- res = ancestor_signal(roller, sign, param);
- if(res != LV_RES_OK) return res;
- }
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
-
- if(sign == LV_SIGNAL_STYLE_CHG) {
- refr_height(roller);
-
- refr_position(roller, false);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
-
- if(lv_obj_get_width(roller) != lv_area_get_width(param) ||
- lv_obj_get_height(roller) != lv_area_get_height(param)) {
-
- refr_height(roller);
-#if LV_USE_ANIMATION
- lv_anim_del(lv_page_get_scrl(roller), (lv_anim_exec_xcb_t)lv_obj_set_y);
-#endif
- lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
- refr_position(roller, false);
- }
- } else if(sign == LV_SIGNAL_FOCUS) {
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(roller);
- bool editing = lv_group_get_editing(g);
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
-
- /*Encoders need special handling*/
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- /*In navigate mode revert the original value*/
- if(!editing) {
- if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
- ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori;
- refr_position(roller, true);
- }
- }
- /*Save the current state when entered to edit mode*/
- else {
- ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id;
- }
- } else {
- ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Save the current value. Used to revert this state if
- ENER wont't be pressed*/
- }
-#endif
- } else if(sign == LV_SIGNAL_DEFOCUS) {
-#if LV_USE_GROUP
- /*Revert the original state*/
- if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
- ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori;
- refr_position(roller, true);
- }
-#endif
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
- if(ext->ddlist.sel_opt_id + 1 < ext->ddlist.option_cnt) {
- uint16_t ori_id = ext->ddlist.sel_opt_id_ori; /*lv_roller_set_selceted will overwrite this*/
- lv_roller_set_selected(roller, ext->ddlist.sel_opt_id + 1, true);
- ext->ddlist.sel_opt_id_ori = ori_id;
- }
- } else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
- if(ext->ddlist.sel_opt_id > 0) {
- uint16_t ori_id = ext->ddlist.sel_opt_id_ori; /*lv_roller_set_selceted will overwrite this*/
- lv_roller_set_selected(roller, ext->ddlist.sel_opt_id - 1, true);
- ext->ddlist.sel_opt_id_ori = ori_id;
- }
- }
- }
-
- return res;
-}
-
-/**
- * Signal function of the scrollable part of the roller.
- * @param roller_scrl ointer to the scrollable part of roller (page)
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_scrl_signal(roller_scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_indev_t * indev = lv_indev_get_act();
- int32_t id = -1;
- lv_obj_t * roller = lv_obj_get_parent(roller_scrl);
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
-
- if(ext->ddlist.label == NULL)
- return LV_RES_INV; /*On delete the ddlist signal deletes the label so nothing left to do
- here*/
-
- const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
- const lv_font_t * font = style_label->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
-
- if(sign == LV_SIGNAL_DRAG_END) {
- /*If dragged then align the list to have an element in the middle*/
- lv_coord_t label_y1 = ext->ddlist.label->coords.y1 - roller->coords.y1;
- lv_coord_t label_unit = font_h + style_label->text.line_space;
- lv_coord_t mid = (roller->coords.y2 - roller->coords.y1) / 2;
-
- id = (mid - label_y1 + style_label->text.line_space / 2) / label_unit;
-
- if(id < 0) id = 0;
- if(id >= ext->ddlist.option_cnt) id = ext->ddlist.option_cnt - 1;
-
- ext->ddlist.sel_opt_id = id;
- ext->ddlist.sel_opt_id_ori = id;
- res = lv_event_send(roller, LV_EVENT_VALUE_CHANGED, &id);
- if(res != LV_RES_OK) return res;
- }
- /*If picked an option by clicking then set it*/
- else if(sign == LV_SIGNAL_RELEASED) {
- if(!lv_indev_is_dragging(indev)) {
- id = ext->ddlist.sel_opt_id;
-#if LV_USE_GROUP
- /*In edit mode go to navigate mode if an option is selected*/
- lv_group_t * g = lv_obj_get_group(roller);
- bool editing = lv_group_get_editing(g);
- if(editing) lv_group_set_editing(g, false);
-#endif
- }
- } else if(sign == LV_SIGNAL_PRESSED) {
-#if LV_USE_ANIMATION
- lv_anim_del(roller_scrl, (lv_anim_exec_xcb_t)lv_obj_set_y);
-#endif
- }
-
- /*Position the scrollable according to the new selected option*/
- if(id != -1) {
- refr_position(roller, true);
- }
-
- return res;
-}
-
-/**
- * Draw a rectangle which has gradient on its top and bottom
- * @param roller pointer to a roller object
- * @param mask pointer to the current mask (from the design function)
- */
-static void draw_bg(lv_obj_t * roller, const lv_area_t * mask)
-{
- const lv_style_t * style = lv_roller_get_style(roller, LV_ROLLER_STYLE_BG);
- lv_area_t half_mask;
- lv_area_t half_roller;
- lv_coord_t h = lv_obj_get_height(roller);
- bool union_ok;
- lv_area_copy(&half_roller, &roller->coords);
-
- half_roller.x1 -= roller->ext_draw_pad; /*Add ext size too (e.g. because of shadow draw) */
- half_roller.x2 += roller->ext_draw_pad;
- half_roller.y1 -= roller->ext_draw_pad;
- half_roller.y2 = roller->coords.y1 + h / 2;
-
- union_ok = lv_area_intersect(&half_mask, &half_roller, mask);
-
- half_roller.x1 += roller->ext_draw_pad; /*Revert ext. size adding*/
- half_roller.x2 -= roller->ext_draw_pad;
- half_roller.y1 += roller->ext_draw_pad;
- half_roller.y2 += style->body.radius;
-
- if(union_ok) {
- lv_draw_rect(&half_roller, &half_mask, style, lv_obj_get_opa_scale(roller));
- }
-
- half_roller.x1 -= roller->ext_draw_pad; /*Add ext size too (e.g. because of shadow draw) */
- half_roller.x2 += roller->ext_draw_pad;
- half_roller.y2 = roller->coords.y2 + roller->ext_draw_pad;
- half_roller.y1 = roller->coords.y1 + h / 2;
- if((h & 0x1) == 0) half_roller.y1++; /*With even height the pixels in the middle would be drawn twice*/
-
- union_ok = lv_area_intersect(&half_mask, &half_roller, mask);
-
- half_roller.x1 += roller->ext_draw_pad; /*Revert ext. size adding*/
- half_roller.x2 -= roller->ext_draw_pad;
- half_roller.y2 -= roller->ext_draw_pad;
- half_roller.y1 -= style->body.radius;
-
- if(union_ok) {
- lv_style_t style_tmp;
- memcpy(&style_tmp, style, sizeof(lv_style_t));
- style_tmp.body.main_color = style->body.grad_color;
- style_tmp.body.grad_color = style->body.main_color;
- lv_draw_rect(&half_roller, &half_mask, &style_tmp, lv_obj_get_opa_scale(roller));
- }
-}
-
-/**
- * Refresh the position of the roller. It uses the id stored in: ext->ddlist.selected_option_id
- * @param roller pointer to a roller object
- * @param anim_en LV_ANIM_ON: refresh with animation; LV_ANOM_OFF: without animation
- */
-static void refr_position(lv_obj_t * roller, lv_anim_enable_t anim_en)
-{
-#if LV_USE_ANIMATION == 0
- anim_en = LV_ANIM_OFF;
-#endif
-
- lv_obj_t * roller_scrl = lv_page_get_scrl(roller);
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
- const lv_font_t * font = style_label->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
- lv_coord_t h = lv_obj_get_height(roller);
- uint16_t anim_time = lv_roller_get_anim_time(roller);
-
- /* Normally the animtaion's `end_cb` sets correct position of the roller is infinite.
- * But without animations do it manually*/
- if(anim_en == LV_ANIM_OFF || anim_time == 0) {
- inf_normalize(roller_scrl);
- }
-
- int32_t id = ext->ddlist.sel_opt_id;
- lv_coord_t line_y1 =
- id * (font_h + style_label->text.line_space) + ext->ddlist.label->coords.y1 - roller_scrl->coords.y1;
- lv_coord_t new_y = -line_y1 + (h - font_h) / 2;
-
- if(anim_en == LV_ANIM_OFF || anim_time == 0) {
- lv_obj_set_y(roller_scrl, new_y);
- } else {
-#if LV_USE_ANIMATION
- lv_anim_t a;
- a.var = roller_scrl;
- a.start = lv_obj_get_y(roller_scrl);
- a.end = new_y;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = scroll_anim_ready_cb;
- a.act_time = 0;
- a.time = anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
-#endif
- }
-}
-
-/**
- * Refresh the height of the roller and the scrolable
- * @param roller pointer to roller
- */
-static void refr_height(lv_obj_t * roller)
-{
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- lv_align_t obj_align = LV_ALIGN_IN_LEFT_MID;
- if(ext->ddlist.label) {
- lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label);
- if(LV_LABEL_ALIGN_CENTER == label_align)
- obj_align = LV_ALIGN_CENTER;
- else if(LV_LABEL_ALIGN_RIGHT == label_align)
- obj_align = LV_ALIGN_IN_RIGHT_MID;
- }
-
- lv_obj_set_height(lv_page_get_scrl(roller), lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(roller));
- lv_obj_align(ext->ddlist.label, NULL, obj_align, 0, 0);
-#if LV_USE_ANIMATION
- lv_anim_del(lv_page_get_scrl(roller), (lv_anim_exec_xcb_t)lv_obj_set_y);
-#endif
- lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
-}
-
-/**
- * Set the middle page for the roller if inifinte is enabled
- * @param scrl pointer to the roller's scrollable (lv_obj_t *)
- */
-static void inf_normalize(void * scrl)
-{
- lv_obj_t * roller_scrl = (lv_obj_t *)scrl;
- lv_obj_t * roller = lv_obj_get_parent(roller_scrl);
- lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
-
- if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
- uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
-
- ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id % real_id_cnt;
-
- ext->ddlist.sel_opt_id += (LV_ROLLER_INF_PAGES / 2) * real_id_cnt; /*Select the middle page*/
-
- /*Move to the new id*/
- const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
- const lv_font_t * font = style_label->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
- lv_coord_t h = lv_obj_get_height(roller);
-
- lv_coord_t line_y1 = ext->ddlist.sel_opt_id * (font_h + style_label->text.line_space) +
- ext->ddlist.label->coords.y1 - roller_scrl->coords.y1;
- lv_coord_t new_y = -line_y1 + (h - font_h) / 2;
- lv_obj_set_y(roller_scrl, new_y);
- }
-}
-
-#if LV_USE_ANIMATION
-static void scroll_anim_ready_cb(lv_anim_t * a)
-{
- inf_normalize(a->var);
-}
-#endif
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_roller.h b/src/libs/lvgl/src/lv_objx/lv_roller.h
deleted file mode 100644
index 5303c3aa..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_roller.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * @file lv_roller.h
- *
- */
-
-#ifndef LV_ROLLER_H
-#define LV_ROLLER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_ROLLER != 0
-
-/*Testing of dependencies*/
-#if LV_USE_DDLIST == 0
-#error "lv_roller: lv_ddlist is required. Enable it in lv_conf.h (LV_USE_DDLIST 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_ddlist.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Roller mode. */
-enum {
- LV_ROLLER_MODE_NORMAL, /**< Normal mode (roller ends at the end of the options). */
- LV_ROLLER_MODE_INIFINITE, /**< Infinite mode (roller can be scrolled forever). */
-};
-
-typedef uint8_t lv_roller_mode_t;
-
-
-
-/*Data of roller*/
-typedef struct
-{
- lv_ddlist_ext_t ddlist; /*Ext. of ancestor*/
- /*New data for this type */
- lv_roller_mode_t mode : 1;
-} lv_roller_ext_t;
-
-enum {
- LV_ROLLER_STYLE_BG,
- LV_ROLLER_STYLE_SEL,
-};
-typedef uint8_t lv_roller_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a roller object
- * @param par pointer to an object, it will be the parent of the new roller
- * @param copy pointer to a roller object, if not NULL then the new object will be copied from it
- * @return pointer to the created roller
- */
-lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the options on a roller
- * @param roller pointer to roller object
- * @param options a string with '\n' separated options. E.g. "One\nTwo\nThree"
- * @param mode `LV_ROLLER_MODE_NORMAL` or `LV_ROLLER_MODE_INFINITE`
- */
-void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mode_t mode);
-
-/**
- * Set the align of the roller's options (left, right or center[default])
- * @param roller - pointer to a roller object
- * @param align - one of lv_label_align_t values (left, right, center)
- */
-void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align);
-
-/**
- * Set the selected option
- * @param roller pointer to a roller object
- * @param sel_opt id of the selected option (0 ... number of option - 1);
- * @param anim LV_ANOM_ON: set with animation; LV_ANIM_OFF set immediately
- */
-void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_t anim);
-
-/**
- * Set the height to show the given number of rows (options)
- * @param roller pointer to a roller object
- * @param row_cnt number of desired visible rows
- */
-void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt);
-
-/**
- * Set a fix width for the drop down list
- * @param roller pointer to a roller obejct
- * @param w the width when the list is opened (0: auto size)
- */
-static inline void lv_roller_set_fix_width(lv_obj_t * roller, lv_coord_t w)
-{
- lv_ddlist_set_fix_width(roller, w);
-}
-
-/**
- * Set the open/close animation time.
- * @param roller pointer to a roller object
- * @param anim_time: open/close animation time [ms]
- */
-static inline void lv_roller_set_anim_time(lv_obj_t * roller, uint16_t anim_time)
-{
- lv_ddlist_set_anim_time(roller, anim_time);
-}
-
-/**
- * Set a style of a roller
- * @param roller pointer to a roller object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-/**
- * Get the id of the selected option
- * @param roller pointer to a roller object
- * @return id of the selected option (0 ... number of option - 1);
- */
-uint16_t lv_roller_get_selected(const lv_obj_t * roller);
-
-/**
- * Get the current selected option as a string
- * @param roller pointer to roller object
- * @param buf pointer to an array to store the string
- * @param buf_size size of `buf` in bytes. 0: to ignore it.
- */
-static inline void lv_roller_get_selected_str(const lv_obj_t * roller, char * buf, uint16_t buf_size)
-{
- lv_ddlist_get_selected_str(roller, buf, buf_size);
-}
-
-/**
- * Get the align attribute. Default alignment after _create is LV_LABEL_ALIGN_CENTER
- * @param roller pointer to a roller object
- * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER
- */
-lv_label_align_t lv_roller_get_align(const lv_obj_t * roller);
-
-/**
- * Get the options of a roller
- * @param roller pointer to roller object
- * @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
- */
-static inline const char * lv_roller_get_options(const lv_obj_t * roller)
-{
- return lv_ddlist_get_options(roller);
-}
-
-/**
- * Get the open/close animation time.
- * @param roller pointer to a roller
- * @return open/close animation time [ms]
- */
-static inline uint16_t lv_roller_get_anim_time(const lv_obj_t * roller)
-{
- return lv_ddlist_get_anim_time(roller);
-}
-
-/**
- * Get the auto width set attribute
- * @param roller pointer to a roller object
- * @return true: auto size enabled; false: manual width settings enabled
- */
-bool lv_roller_get_hor_fit(const lv_obj_t * roller);
-
-/**
- * Get a style of a roller
- * @param roller pointer to a roller object
- * @param type which style should be get
- * @return style pointer to a style
- * */
-const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_ROLLER*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_ROLLER_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_slider.c b/src/libs/lvgl/src/lv_objx/lv_slider.c
deleted file mode 100644
index 6e94973d..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_slider.c
+++ /dev/null
@@ -1,620 +0,0 @@
-
-/**
- * @file lv_slider.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_slider.h"
-#if LV_USE_SLIDER != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_core/lv_indev.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_slider"
-
-#define LV_SLIDER_SIZE_MIN 4 /*hor. pad and ver. pad cannot make the bar or indicator smaller then this [px]*/
-#define LV_SLIDER_NOT_PRESSED INT16_MIN
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design_f;
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a slider objects
- * @param par pointer to an object, it will be the parent of the new slider
- * @param copy pointer to a slider object, if not NULL then the new object will be copied from it
- * @return pointer to the created slider
- */
-lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("slider create started");
-
- /*Create the ancestor slider*/
- lv_obj_t * new_slider = lv_bar_create(par, copy);
- LV_ASSERT_MEM(new_slider);
- if(new_slider == NULL) return NULL;
-
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_slider);
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_slider);
-
- /*Allocate the slider type specific extended data*/
- lv_slider_ext_t * ext = lv_obj_allocate_ext_attr(new_slider, sizeof(lv_slider_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
- ext->style_knob = &lv_style_pretty;
- ext->knob_in = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_slider, lv_slider_signal);
- lv_obj_set_design_cb(new_slider, lv_slider_design);
-
- /*Init the new slider slider*/
- if(copy == NULL) {
- lv_obj_set_click(new_slider, true);
- lv_obj_set_protect(new_slider, LV_PROTECT_PRESS_LOST);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_slider_set_style(new_slider, LV_SLIDER_STYLE_BG, th->style.slider.bg);
- lv_slider_set_style(new_slider, LV_SLIDER_STYLE_INDIC, th->style.slider.indic);
- lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, th->style.slider.knob);
- } else {
- lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, ext->style_knob);
- }
- }
- /*Copy an existing slider*/
- else {
- lv_slider_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->style_knob = copy_ext->style_knob;
- ext->knob_in = copy_ext->knob_in;
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_slider);
- }
-
- LV_LOG_INFO("slider created");
-
- return new_slider;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @param in true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
- */
-void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- if(ext->knob_in == in) return;
-
- ext->knob_in = in == false ? 0 : 1;
- lv_obj_invalidate(slider);
-}
-
-/**
- * Set a style of a slider
- * @param slider pointer to a slider object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
-
- switch(type) {
- case LV_SLIDER_STYLE_BG: lv_bar_set_style(slider, LV_BAR_STYLE_BG, style); break;
- case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(slider, LV_BAR_STYLE_INDIC, style); break;
- case LV_SLIDER_STYLE_KNOB:
- ext->style_knob = style;
- lv_obj_refresh_ext_draw_pad(slider);
- break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a slider
- * @param slider pointer to a slider object
- * @return the value of the slider
- */
-int16_t lv_slider_get_value(const lv_obj_t * slider)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
-
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED)
- return ext->drag_value;
- else
- return lv_bar_get_value(slider);
-}
-
-/**
- * Give the slider is being dragged or not
- * @param slider pointer to a slider object
- * @return true: drag in progress false: not dragged
- */
-bool lv_slider_is_dragged(const lv_obj_t * slider)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- return ext->drag_value == LV_SLIDER_NOT_PRESSED ? false : true;
-}
-
-/**
- * Get the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @return true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
- */
-bool lv_slider_get_knob_in(const lv_obj_t * slider)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- return ext->knob_in == 0 ? false : true;
-}
-
-/**
- * Get a style of a slider
- * @param slider pointer to a slider object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_style_t type)
-{
- LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
-
- switch(type) {
- case LV_SLIDER_STYLE_BG: style = lv_bar_get_style(slider, LV_BAR_STYLE_BG); break;
- case LV_SLIDER_STYLE_INDIC: style = lv_bar_get_style(slider, LV_BAR_STYLE_INDIC); break;
- case LV_SLIDER_STYLE_KNOB: style = ext->style_knob; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the sliders
- * @param slider pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
-
- const lv_style_t * style_bg = lv_slider_get_style(slider, LV_SLIDER_STYLE_BG);
- const lv_style_t * style_knob = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
- const lv_style_t * style_indic = lv_slider_get_style(slider, LV_SLIDER_STYLE_INDIC);
-
- lv_opa_t opa_scale = lv_obj_get_opa_scale(slider);
-
- lv_coord_t slider_w = lv_area_get_width(&slider->coords);
- lv_coord_t slider_h = lv_area_get_height(&slider->coords);
-
- /*Draw the bar*/
- lv_area_t area_bg;
- lv_area_copy(&area_bg, &slider->coords);
-
- /*Be sure at least LV_SLIDER_SIZE_MIN size will remain*/
- lv_coord_t pad_top_bg = style_bg->body.padding.top;
- lv_coord_t pad_bottom_bg = style_bg->body.padding.bottom;
- lv_coord_t pad_left_bg = style_bg->body.padding.left;
- lv_coord_t pad_right_bg = style_bg->body.padding.right;
- if(pad_top_bg + pad_bottom_bg + LV_SLIDER_SIZE_MIN > lv_area_get_height(&area_bg)) {
- pad_top_bg = (lv_area_get_height(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_bottom_bg = pad_top_bg;
- }
- if(pad_left_bg + pad_right_bg + LV_SLIDER_SIZE_MIN > lv_area_get_width(&area_bg)) {
- pad_left_bg = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_right_bg = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- }
-
- if(ext->knob_in) { /*Enable extra size if the knob is inside */
- area_bg.x1 += pad_left_bg;
- area_bg.x2 -= pad_right_bg;
- area_bg.y1 += pad_top_bg;
- area_bg.y2 -= pad_bottom_bg;
- } else { /*Let space only in the perpendicular directions*/
- area_bg.x1 += slider_w < slider_h ? pad_left_bg : 0; /*Pad only for vertical slider*/
- area_bg.x2 -= slider_w < slider_h ? pad_right_bg : 0; /*Pad only for vertical slider*/
- area_bg.y1 += slider_w > slider_h ? pad_top_bg : 0; /*Pad only for horizontal slider*/
- area_bg.y2 -= slider_w > slider_h ? pad_bottom_bg : 0; /*Pad only for horizontal slider*/
- }
-
-#if LV_USE_GROUP == 0
- lv_draw_rect(&area_bg, mask, style_bg, lv_obj_get_opa_scale(slider));
-#else
- /* Draw the borders later if the slider is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(slider)) {
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.border.width = 0;
- lv_draw_rect(&area_bg, mask, &style_tmp, opa_scale);
- } else {
- lv_draw_rect(&area_bg, mask, style_bg, opa_scale);
- }
-#endif
-
- /*Draw the indicator*/
- lv_area_t area_indic;
- lv_area_copy(&area_indic, &area_bg);
-
- /*Be sure at least ver pad/hor pad width indicator will remain*/
- lv_coord_t pad_top_indic = style_indic->body.padding.top;
- lv_coord_t pad_bottom_indic = style_indic->body.padding.bottom;
- lv_coord_t pad_left_indic = style_indic->body.padding.left;
- lv_coord_t pad_right_indic = style_indic->body.padding.right;
- if(pad_top_indic + pad_bottom_indic + LV_SLIDER_SIZE_MIN > lv_area_get_height(&area_bg)) {
- pad_top_indic = (lv_area_get_height(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_bottom_indic = pad_top_indic;
- }
- if(pad_left_indic + pad_right_indic + LV_SLIDER_SIZE_MIN > lv_area_get_width(&area_bg)) {
- pad_left_indic = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_right_indic = pad_left_indic;
- }
-
- area_indic.x1 += pad_left_indic;
- area_indic.x2 -= pad_right_indic;
- area_indic.y1 += pad_top_indic;
- area_indic.y2 -= pad_bottom_indic;
-
- lv_coord_t cur_value = lv_slider_get_value(slider);
- lv_coord_t min_value = lv_slider_get_min_value(slider);
- lv_coord_t max_value = lv_slider_get_max_value(slider);
-
- /*If dragged draw to the drag position*/
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED) cur_value = ext->drag_value;
- bool sym = false;
- if(ext->bar.sym && ext->bar.min_value < 0 && ext->bar.max_value > 0) sym = true;
-
- if(slider_w >= slider_h) {
- lv_coord_t indic_w = lv_area_get_width(&area_indic);
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)indic_w * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)indic_w * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- area_indic.x2 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- area_indic.x2 = (int32_t)((int32_t)indic_w * (cur_value - min_value)) / (max_value - min_value);
- }
-
- area_indic.x2 = area_indic.x1 + area_indic.x2 - 1;
- if(sym) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = area_indic.x1 + (-ext->bar.min_value * slider_w) / (ext->bar.max_value - ext->bar.min_value);
- if(area_indic.x2 > zero)
- area_indic.x1 = zero;
- else {
- area_indic.x1 = area_indic.x2;
- area_indic.x2 = zero;
- }
- }
-
- /*Draw the indicator but don't draw an ugly 1px wide rectangle on the left on min.
- * value*/
- if(area_indic.x1 != area_indic.x2) lv_draw_rect(&area_indic, mask, style_indic, opa_scale);
-
- } else {
- lv_coord_t indic_h = lv_area_get_height(&area_indic);
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_y =
- (int32_t)((int32_t)indic_h * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_y =
- (int32_t)((int32_t)indic_h * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- area_indic.y1 = anim_start_y + (((anim_end_y - anim_start_y) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- area_indic.y1 = (int32_t)((int32_t)indic_h * (cur_value - min_value)) / (max_value - min_value);
- }
-
- area_indic.y1 = area_indic.y2 - area_indic.y1 + 1;
-
- if(sym) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = area_indic.y2 - (-ext->bar.min_value * slider_h) / (ext->bar.max_value - ext->bar.min_value);
- if(area_indic.y1 < zero)
- area_indic.y2 = zero;
- else {
- area_indic.y2 = area_indic.y1;
- area_indic.y1 = zero;
- }
- }
-
- /*Draw the indicator but don't draw an ugly 1px height rectangle on the bottom on min.
- * value*/
- if(area_indic.x1 != area_indic.x2) lv_draw_rect(&area_indic, mask, style_indic, opa_scale);
- }
-
- /*Before the knob add the border if required*/
-#if LV_USE_GROUP
- /* Draw the borders later if the bar is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(slider)) {
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.opa = LV_OPA_TRANSP;
- style_tmp.body.shadow.width = 0;
- lv_draw_rect(&area_bg, mask, &style_tmp, opa_scale);
- }
-#endif
-
- /*Draw the knob*/
- lv_area_t knob_area;
- lv_area_copy(&knob_area, &slider->coords);
-
- if(slider_w >= slider_h) {
- if(ext->knob_in == 0) {
- if(sym == false) {
- knob_area.x1 = area_indic.x2 - slider_h / 2;
- } else {
- if(cur_value > 0) knob_area.x1 = area_indic.x2 - slider_h / 2;
- else knob_area.x1 = area_indic.x1 - slider_h / 2;
- }
- knob_area.x2 = knob_area.x1 + slider_h - 1;
- } else {
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- lv_coord_t w = slider_w - slider_h - 1;
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)w * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)w * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- knob_area.x1 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- knob_area.x1 = (int32_t)((int32_t)(slider_w - slider_h - 1) * (cur_value - min_value)) /
- (max_value - min_value);
- }
-
- knob_area.x1 += slider->coords.x1;
- knob_area.x2 = knob_area.x1 + slider_h - 1;
- }
-
- knob_area.y1 = slider->coords.y1;
- knob_area.y2 = slider->coords.y2;
- } else {
- if(ext->knob_in == 0) {
- if(sym == false) {
- knob_area.y1 = area_indic.y1 - slider_w / 2;
- } else {
- if(cur_value > 0) knob_area.y1 = area_indic.y1 - slider_w / 2;
- else knob_area.y1 = area_indic.y2 - slider_w / 2;
- }
- knob_area.y2 = knob_area.y1 + slider_w - 1;
- } else {
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- lv_coord_t h = slider_h - slider_w - 1;
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)h * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)h * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- knob_area.y2 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- knob_area.y2 = (int32_t)((int32_t)(slider_h - slider_w - 1) * (cur_value - min_value)) /
- (max_value - min_value);
- }
-
- knob_area.y2 = slider->coords.y2 - knob_area.y2;
- knob_area.y1 = knob_area.y2 - slider_w - 1;
- }
- knob_area.x1 = slider->coords.x1;
- knob_area.x2 = slider->coords.x2;
- }
- lv_draw_rect(&knob_area, mask, style_knob, opa_scale);
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the slider
- * @param slider pointer to a slider object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(slider, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- lv_point_t p;
- lv_coord_t w = lv_obj_get_width(slider);
- lv_coord_t h = lv_obj_get_height(slider);
-
- if(sign == LV_SIGNAL_PRESSED) {
- ext->drag_value = lv_slider_get_value(slider);
- } else if(sign == LV_SIGNAL_PRESSING) {
- lv_indev_get_point(param, &p);
- int16_t tmp = 0;
- if(w > h) {
- lv_coord_t knob_w = h;
- p.x -=
- slider->coords.x1 + h / 2; /*Modify the point to shift with half knob (important on the start and end)*/
- tmp = (int32_t)((int32_t)p.x * (ext->bar.max_value - ext->bar.min_value + 1)) / (w - knob_w);
- tmp += ext->bar.min_value;
- } else {
- lv_coord_t knob_h = w;
- p.y -=
- slider->coords.y1 + w / 2; /*Modify the point to shift with half knob (important on the start and end)*/
- tmp = (int32_t)((int32_t)p.y * (ext->bar.max_value - ext->bar.min_value + 1)) / (h - knob_h);
- tmp = ext->bar.max_value - tmp; /*Invert the value: smaller value means higher y*/
- }
-
- if(tmp < ext->bar.min_value)
- tmp = ext->bar.min_value;
- else if(tmp > ext->bar.max_value)
- tmp = ext->bar.max_value;
-
- if(tmp != ext->drag_value) {
- ext->drag_value = tmp;
- lv_obj_invalidate(slider);
- res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED) lv_slider_set_value(slider, ext->drag_value, false);
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
-
-#if LV_USE_GROUP
- /*Leave edit mode if released. (No need to wait for LONG_PRESS) */
- lv_group_t * g = lv_obj_get_group(slider);
- bool editing = lv_group_get_editing(g);
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- if(editing) lv_group_set_editing(g, false);
- }
-#endif
-
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /* The knob size depends on slider size.
- * During the drawing method the ext. size is used by the knob so refresh the ext. size.*/
- if(lv_obj_get_width(slider) != lv_area_get_width(param) ||
- lv_obj_get_height(slider) != lv_area_get_height(param)) {
- slider->signal_cb(slider, LV_SIGNAL_REFR_EXT_DRAW_PAD, NULL);
- }
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style = lv_slider_get_style(slider, LV_SLIDER_STYLE_BG);
- const lv_style_t * knob_style = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
-
- lv_coord_t shadow_w = knob_style->body.shadow.width;
- if(ext->knob_in == 0) {
- /* The smaller size is the knob diameter*/
- lv_coord_t x = LV_MATH_MIN(w / 2 + 1 + shadow_w, h / 2 + 1 + shadow_w);
- if(slider->ext_draw_pad < x) slider->ext_draw_pad = x;
- } else {
- lv_coord_t pad = 0;
- pad = LV_MATH_MIN(pad, style->body.padding.top);
- pad = LV_MATH_MIN(pad, style->body.padding.bottom);
- pad = LV_MATH_MIN(pad, style->body.padding.left);
- pad = LV_MATH_MIN(pad, style->body.padding.right);
- if(pad < 0) pad = -pad;
- if(slider->ext_draw_pad < pad) slider->ext_draw_pad = pad;
-
- if(slider->ext_draw_pad < shadow_w) slider->ext_draw_pad = shadow_w;
- }
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
-
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
-
- if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, true);
- res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, true);
- res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- }
-
- return res;
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_slider.h b/src/libs/lvgl/src/lv_objx/lv_slider.h
deleted file mode 100644
index 967c8b68..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_slider.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * @file lv_slider.h
- *
- */
-
-#ifndef LV_SLIDER_H
-#define LV_SLIDER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_SLIDER != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BAR == 0
-#error "lv_slider: lv_bar is required. Enable it in lv_conf.h (LV_USE_BAR 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_bar.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of slider*/
-typedef struct
-{
- lv_bar_ext_t bar; /*Ext. of ancestor*/
- /*New data for this type */
- const lv_style_t * style_knob; /*Style of the knob*/
- int16_t drag_value; /*Store a temporal value during press until release (Handled by the library)*/
- uint8_t knob_in : 1; /*1: Draw the knob inside the bar*/
-} lv_slider_ext_t;
-
-/** Built-in styles of slider*/
-enum {
- LV_SLIDER_STYLE_BG, /** Slider background style. */
- LV_SLIDER_STYLE_INDIC, /** Slider indicator (filled area) style. */
- LV_SLIDER_STYLE_KNOB, /** Slider knob style. */
-};
-typedef uint8_t lv_slider_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a slider objects
- * @param par pointer to an object, it will be the parent of the new slider
- * @param copy pointer to a slider object, if not NULL then the new object will be copied from it
- * @return pointer to the created slider
- */
-lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new value on the slider
- * @param slider pointer to a slider object
- * @param value new value
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-static inline void lv_slider_set_value(lv_obj_t * slider, int16_t value, lv_anim_enable_t anim)
-{
- lv_bar_set_value(slider, value, anim);
-}
-
-/**
- * Set minimum and the maximum values of a bar
- * @param slider pointer to the slider object
- * @param min minimum value
- * @param max maximum value
- */
-static inline void lv_slider_set_range(lv_obj_t * slider, int16_t min, int16_t max)
-{
- lv_bar_set_range(slider, min, max);
-}
-
-/**
- * Make the slider symmetric to zero. The indicator will grow from zero instead of the minimum
- * position.
- * @param slider pointer to a slider object
- * @param en true: enable disable symmetric behavior; false: disable
- */
-static inline void lv_slider_set_anim_time(lv_obj_t * slider, uint16_t anim_time)
-{
- lv_bar_set_anim_time(slider, anim_time);
-}
-
-/**
- * Set the animation time of the slider
- * @param slider pointer to a bar object
- * @param anim_time the animation time in milliseconds.
- */
-static inline void lv_slider_set_sym(lv_obj_t * slider, bool en)
-{
- lv_bar_set_sym(slider, en);
-}
-
-/**
- * Set the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @param in true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
- */
-void lv_slider_set_knob_in(lv_obj_t * slider, bool in);
-
-/**
- * Set a style of a slider
- * @param slider pointer to a slider object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a slider
- * @param slider pointer to a slider object
- * @return the value of the slider
- */
-int16_t lv_slider_get_value(const lv_obj_t * slider);
-
-/**
- * Get the minimum value of a slider
- * @param slider pointer to a slider object
- * @return the minimum value of the slider
- */
-static inline int16_t lv_slider_get_min_value(const lv_obj_t * slider)
-{
- return lv_bar_get_min_value(slider);
-}
-
-/**
- * Get the maximum value of a slider
- * @param slider pointer to a slider object
- * @return the maximum value of the slider
- */
-static inline int16_t lv_slider_get_max_value(const lv_obj_t * slider)
-{
- return lv_bar_get_max_value(slider);
-}
-
-/**
- * Give the slider is being dragged or not
- * @param slider pointer to a slider object
- * @return true: drag in progress false: not dragged
- */
-bool lv_slider_is_dragged(const lv_obj_t * slider);
-
-/**
- * Get the animation time of the slider
- * @param slider pointer to a slider object
- * @return the animation time in milliseconds.
- */
-static inline uint16_t lv_slider_get_anim_time(lv_obj_t * slider)
-{
- return lv_bar_get_anim_time(slider);
-}
-
-/**
- * Get whether the slider is symmetric or not.
- * @param slider pointer to a bar object
- * @return true: symmetric is enabled; false: disable
- */
-static inline bool lv_slider_get_sym(lv_obj_t * slider)
-{
- return lv_bar_get_sym(slider);
-}
-
-/**
- * Get the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @return true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
- */
-bool lv_slider_get_knob_in(const lv_obj_t * slider);
-
-/**
- * Get a style of a slider
- * @param slider pointer to a slider object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_style_t type);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_SLIDER*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_SLIDER_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_spinbox.c b/src/libs/lvgl/src/lv_objx/lv_spinbox.c
deleted file mode 100644
index 6873085a..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_spinbox.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/**
- * @file lv_spinbox.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_spinbox.h"
-
-#if LV_USE_SPINBOX != 0
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_utils.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_spinbox"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * param);
-static void lv_spinbox_updatevalue(lv_obj_t * spinbox);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a spinbox object
- * @param par pointer to an object, it will be the parent of the new spinbox
- * @param copy pointer to a spinbox object, if not NULL then the new object will be copied from it
- * @return pointer to the created spinbox
- */
-lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("spinbox create started");
-
- /*Create the ancestor of spinbox*/
- lv_obj_t * new_spinbox = lv_ta_create(par, copy);
- LV_ASSERT_MEM(new_spinbox);
- if(new_spinbox == NULL) return NULL;
-
- /*Allocate the spinbox type specific extended data*/
- lv_spinbox_ext_t * ext = lv_obj_allocate_ext_attr(new_spinbox, sizeof(lv_spinbox_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_spinbox);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_spinbox);
-
- /*Initialize the allocated 'ext'*/
- ext->value = 0;
- ext->dec_point_pos = 0;
- ext->digit_count = 5;
- ext->digit_padding_left = 0;
- ext->step = 1;
- ext->range_max = 99999;
- ext->range_min = -99999;
-
- lv_ta_set_cursor_type(new_spinbox, LV_CURSOR_BLOCK);
- lv_ta_set_one_line(new_spinbox, true);
- lv_ta_set_cursor_click_pos(new_spinbox, false);
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_spinbox, lv_spinbox_signal);
- lv_obj_set_design_cb(new_spinbox, ancestor_design); /*Leave the Text area's design function*/
-
- /*Init the new spinbox spinbox*/
- if(copy == NULL) {
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_BG, th->style.spinbox.bg);
- lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_CURSOR, th->style.spinbox.cursor);
- lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_SB, th->style.spinbox.sb);
- }
- }
- /*Copy an existing spinbox*/
- else {
- lv_spinbox_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
-
- lv_spinbox_set_value(new_spinbox, copy_ext->value);
- lv_spinbox_set_digit_format(new_spinbox, (uint8_t)copy_ext->digit_count, (uint8_t)copy_ext->dec_point_pos);
- lv_spinbox_set_range(new_spinbox, copy_ext->range_min, copy_ext->range_max);
- lv_spinbox_set_step(new_spinbox, copy_ext->step);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_spinbox);
- }
-
- lv_spinbox_updatevalue(new_spinbox);
-
- LV_LOG_INFO("spinbox created");
-
- return new_spinbox;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set spinbox value
- * @param spinbox pointer to spinbox
- * @param i value to be set
- */
-void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- if(ext == NULL) return;
-
- if(i > ext->range_max) i = ext->range_max;
- if(i < ext->range_min) i = ext->range_min;
-
- ext->value = i;
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**
- * Set spinbox digit format (digit count and decimal format)
- * @param spinbox pointer to spinbox
- * @param digit_count number of digit excluding the decimal separator and the sign
- * @param separator_position number of digit before the decimal point. If 0, decimal point is not
- * shown
- */
-void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, uint8_t separator_position)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- if(ext == NULL) return;
-
- if(digit_count > LV_SPINBOX_MAX_DIGIT_COUNT) digit_count = LV_SPINBOX_MAX_DIGIT_COUNT;
-
- if(separator_position > LV_SPINBOX_MAX_DIGIT_COUNT) separator_position = LV_SPINBOX_MAX_DIGIT_COUNT;
-
- ext->digit_count = digit_count;
- ext->dec_point_pos = separator_position;
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**
- * Set spinbox step
- * @param spinbox pointer to spinbox
- * @param step steps on increment/decrement
- */
-void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- if(ext == NULL) return;
-
- ext->step = step;
-}
-
-/**
- * Set spinbox value range
- * @param spinbox pointer to spinbox
- * @param range_min maximum value, inclusive
- * @param range_max minimum value, inclusive
- */
-void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_max)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- if(ext == NULL) return;
-
- ext->range_max = range_max;
- ext->range_min = range_min;
-
- if(ext->value > ext->range_max) {
- ext->value = ext->range_max;
- lv_obj_invalidate(spinbox);
- }
- if(ext->value < ext->range_min) {
- ext->value = ext->range_min;
- lv_obj_invalidate(spinbox);
- }
-}
-
-/**
- * Set spinbox left padding in digits count (added between sign and first digit)
- * @param spinbox pointer to spinbox
- * @param cb Callback function called on value change event
- */
-void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- ext->digit_padding_left = padding;
- lv_spinbox_updatevalue(spinbox);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the spinbox numeral value (user has to convert to float according to its digit format)
- * @param spinbox pointer to spinbox
- * @return value integer value of the spinbox
- */
-int32_t lv_spinbox_get_value(lv_obj_t * spinbox)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
- return ext->value;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Select next lower digit for edition
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_step_next(lv_obj_t * spinbox)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
- int32_t new_step = ext->step / 10;
- if((new_step) > 0)
- ext->step = new_step;
- else
- ext->step = 1;
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**
- * Select next higher digit for edition
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_step_prev(lv_obj_t * spinbox)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- int32_t step_limit;
- step_limit = LV_MATH_MAX(ext->range_max, (ext->range_min < 0 ? (-ext->range_min) : ext->range_min));
- int32_t new_step = ext->step * 10;
- if(new_step <= step_limit) ext->step = new_step;
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**
- * Increment spinbox value by one step
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_increment(lv_obj_t * spinbox)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
- if(ext->value + ext->step <= ext->range_max) {
- /*Special mode when zero crossing*/
- if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = -ext->value;
- ext->value += ext->step;
-
- } else {
- ext->value = ext->range_max;
- }
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**
- * Decrement spinbox value by one step
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_decrement(lv_obj_t * spinbox)
-{
- LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
- if(ext->value - ext->step >= ext->range_min) {
- /*Special mode when zero crossing*/
- if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = -ext->value;
- ext->value -= ext->step;
- } else {
- ext->value = ext->range_min;
- }
-
- lv_spinbox_updatevalue(spinbox);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the spinbox
- * @param spinbox pointer to a spinbox object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * param)
-{
-
- lv_res_t res = LV_RES_OK;
-
- /* Include the ancient signal function */
- if(sign != LV_SIGNAL_CONTROL) {
- res = ancestor_signal(spinbox, sign, param);
- if(res != LV_RES_OK) return res;
- }
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
-
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_spinbox";
- } else if(sign == LV_SIGNAL_RELEASED) {
- /*If released with an ENCODER then move to the next digit*/
-#if LV_USE_GROUP
- lv_indev_t * indev = lv_indev_get_act();
- if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
- if(lv_group_get_editing(lv_obj_get_group(spinbox))) {
- if(ext->step > 1) {
- lv_spinbox_step_next(spinbox);
- } else {
- /*Restart from the MSB*/
- ext->step = 1;
- uint32_t i;
- for(i = 0; i < ext->digit_count; i++) {
- int32_t new_step = ext->step * 10;
- if(new_step >= ext->range_max) break;
- ext->step = new_step;
- }
- lv_spinbox_step_prev(spinbox);
- }
- }
- }
-#endif
- } else if(sign == LV_SIGNAL_CONTROL) {
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
-
- uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
- if(c == LV_KEY_RIGHT) {
- if(indev_type == LV_INDEV_TYPE_ENCODER)
- lv_spinbox_increment(spinbox);
- else
- lv_spinbox_step_next(spinbox);
- } else if(c == LV_KEY_LEFT) {
- if(indev_type == LV_INDEV_TYPE_ENCODER)
- lv_spinbox_decrement(spinbox);
- else
- lv_spinbox_step_prev(spinbox);
- } else if(c == LV_KEY_UP) {
- lv_spinbox_increment(spinbox);
- } else if(c == LV_KEY_DOWN) {
- lv_spinbox_decrement(spinbox);
- } else {
- lv_ta_add_char(spinbox, c);
- }
- }
-
- return res;
-}
-
-static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
-{
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
- char buf[LV_SPINBOX_MAX_DIGIT_COUNT + 8];
- memset(buf, 0, sizeof(buf));
- char * buf_p = buf;
- uint8_t cur_shift_left = 0;
-
- if (ext->range_min < 0) { // hide sign if there are only positive values
- /*Add the sign*/
- (*buf_p) = ext->value >= 0 ? '+' : '-';
- buf_p++;
- } else {
- /*Cursor need shift to left*/
- cur_shift_left++;
- }
-
- int32_t i;
- /*padding left*/
- for(i = 0; i < ext->digit_padding_left; i++) {
- (*buf_p) = ' ';
- buf_p++;
- }
-
- char digits[64];
- /*Convert the numbers to string (the sign is already handled so always covert positive number)*/
- lv_utils_num_to_str(ext->value < 0 ? -ext->value : ext->value, digits);
-
- /*Add leading zeros*/
- int lz_cnt = ext->digit_count - (int)strlen(digits);
- if(lz_cnt > 0) {
- for(i = (uint16_t)strlen(digits); i >= 0; i--) {
- digits[i + lz_cnt] = digits[i];
- }
- for(i = 0; i < lz_cnt; i++) {
- digits[i] = '0';
- }
- }
-
- int32_t intDigits;
- intDigits = (ext->dec_point_pos == 0) ? ext->digit_count : ext->dec_point_pos;
-
- /*Add the decimal part*/
- for(i = 0; i < intDigits && digits[i] != '\0'; i++) {
- (*buf_p) = digits[i];
- buf_p++;
- }
-
- if(ext->dec_point_pos != 0) {
- /*Insert the decimal point*/
- (*buf_p) = '.';
- buf_p++;
-
- for(/*Leave i*/; i < ext->digit_count && digits[i] != '\0'; i++) {
- (*buf_p) = digits[i];
- buf_p++;
- }
- }
-
- /*Refresh the text*/
- lv_ta_set_text(spinbox, (char *)buf);
-
- /*Set the cursor position*/
- int32_t step = ext->step;
- uint8_t cur_pos = (uint8_t)ext->digit_count;
- while(step >= 10) {
- step /= 10;
- cur_pos--;
- }
-
- if(cur_pos > intDigits) cur_pos++; /*Skip teh decimal point*/
-
- cur_pos += (ext->digit_padding_left - cur_shift_left);
-
- lv_ta_set_cursor_pos(spinbox, cur_pos);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_spinbox.h b/src/libs/lvgl/src/lv_objx/lv_spinbox.h
deleted file mode 100644
index ea60169e..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_spinbox.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * @file lv_spinbox.h
- *
- */
-
-#ifndef LV_SPINBOX_H
-#define LV_SPINBOX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_SPINBOX != 0
-
-/*Testing of dependencies*/
-#if LV_USE_TA == 0
-#error "lv_spinbox: lv_ta is required. Enable it in lv_conf.h (LV_USE_TA 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_objx/lv_ta.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_SPINBOX_MAX_DIGIT_COUNT 16
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of spinbox*/
-typedef struct
-{
- lv_ta_ext_t ta; /*Ext. of ancestor*/
- /*New data for this type */
- int32_t value;
- int32_t range_max;
- int32_t range_min;
- int32_t step;
- uint16_t digit_count : 4;
- uint16_t dec_point_pos : 4; /*if 0, there is no separator and the number is an integer*/
- uint16_t digit_padding_left : 4;
-} lv_spinbox_ext_t;
-
-/*Styles*/
-enum {
- LV_SPINBOX_STYLE_BG,
- LV_SPINBOX_STYLE_SB,
- LV_SPINBOX_STYLE_CURSOR,
-};
-typedef uint8_t lv_spinbox_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a spinbox objects
- * @param par pointer to an object, it will be the parent of the new spinbox
- * @param copy pointer to a spinbox object, if not NULL then the new object will be copied from it
- * @return pointer to the created spinbox
- */
-lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a style of a spinbox.
- * @param templ pointer to template object
- * @param type which style should be set
- * @param style pointer to a style
- */
-static inline void lv_spinbox_set_style(lv_obj_t * spinbox, lv_spinbox_style_t type, lv_style_t * style)
-{
- lv_ta_set_style(spinbox, type, style);
-}
-
-/**
- * Set spinbox value
- * @param spinbox pointer to spinbox
- * @param i value to be set
- */
-void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i);
-
-/**
- * Set spinbox digit format (digit count and decimal format)
- * @param spinbox pointer to spinbox
- * @param digit_count number of digit excluding the decimal separator and the sign
- * @param separator_position number of digit before the decimal point. If 0, decimal point is not
- * shown
- */
-void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, uint8_t separator_position);
-
-/**
- * Set spinbox step
- * @param spinbox pointer to spinbox
- * @param step steps on increment/decrement
- */
-void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step);
-
-/**
- * Set spinbox value range
- * @param spinbox pointer to spinbox
- * @param range_min maximum value, inclusive
- * @param range_max minimum value, inclusive
- */
-void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_max);
-
-/**
- * Set spinbox left padding in digits count (added between sign and first digit)
- * @param spinbox pointer to spinbox
- * @param cb Callback function called on value change event
- */
-void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get style of a spinbox.
- * @param templ pointer to template object
- * @param type which style should be get
- * @return style pointer to the style
- */
-static inline const lv_style_t * lv_spinbox_get_style(lv_obj_t * spinbox, lv_spinbox_style_t type)
-{
- return lv_ta_get_style(spinbox, type);
-}
-
-/**
- * Get the spinbox numeral value (user has to convert to float according to its digit format)
- * @param spinbox pointer to spinbox
- * @return value integer value of the spinbox
- */
-int32_t lv_spinbox_get_value(lv_obj_t * spinbox);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Select next lower digit for edition by dividing the step by 10
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_step_next(lv_obj_t * spinbox);
-
-/**
- * Select next higher digit for edition by multiplying the step by 10
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_step_prev(lv_obj_t * spinbox);
-
-/**
- * Increment spinbox value by one step
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_increment(lv_obj_t * spinbox);
-
-/**
- * Decrement spinbox value by one step
- * @param spinbox pointer to spinbox
- */
-void lv_spinbox_decrement(lv_obj_t * spinbox);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_SPINBOX*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_SPINBOX_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_sw.c b/src/libs/lvgl/src/lv_objx/lv_sw.c
deleted file mode 100644
index 428a4af1..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_sw.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- * @file lv_sw.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_sw.h"
-
-#if LV_USE_SW != 0
-
-/*Testing of dependencies*/
-#if LV_USE_SLIDER == 0
-#error "lv_sw: lv_slider is required. Enable it in lv_conf.h (LV_USE_SLIDER 1) "
-#endif
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_core/lv_indev.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_sw"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a switch objects
- * @param par pointer to an object, it will be the parent of the new switch
- * @param copy pointer to a switch object, if not NULL then the new object will be copied from it
- * @return pointer to the created switch
- */
-lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("switch create started");
-
- /*Create the ancestor of switch*/
- lv_obj_t * new_sw = lv_slider_create(par, copy);
- LV_ASSERT_MEM(new_sw);
- if(new_sw == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_sw);
-
- /*Allocate the switch type specific extended data*/
- lv_sw_ext_t * ext = lv_obj_allocate_ext_attr(new_sw, sizeof(lv_sw_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->changed = 0;
-#if LV_USE_ANIMATION
- ext->anim_time = 0;
-#endif
- ext->style_knob_off = ext->slider.style_knob;
- ext->style_knob_on = ext->slider.style_knob;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_sw, lv_sw_signal);
-
- /*Init the new switch switch*/
- if(copy == NULL) {
- lv_obj_set_size(new_sw, 2 * LV_DPI / 3, LV_DPI / 3);
- lv_slider_set_knob_in(new_sw, true);
- lv_slider_set_range(new_sw, 0, LV_SW_MAX_VALUE);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_sw_set_style(new_sw, LV_SW_STYLE_BG, th->style.sw.bg);
- lv_sw_set_style(new_sw, LV_SW_STYLE_INDIC, th->style.sw.indic);
- lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_OFF, th->style.sw.knob_off);
- lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_ON, th->style.sw.knob_on);
- } else {
- /*Let the slider' style*/
- }
-
- }
- /*Copy an existing switch*/
- else {
- lv_sw_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->style_knob_off = copy_ext->style_knob_off;
- ext->style_knob_on = copy_ext->style_knob_on;
-#if LV_USE_ANIMATION
- ext->anim_time = copy_ext->anim_time;
-#endif
-
- if(lv_sw_get_state(new_sw))
- lv_slider_set_style(new_sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
- else
- lv_slider_set_style(new_sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_sw);
- }
-
- LV_LOG_INFO("switch created");
-
- return new_sw;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Turn ON the switch
- * @param sw pointer to a switch objec
- * @param anim LV_ANOM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, anim);
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
-}
-
-/**
- * Turn OFF the switch
- * @param sw pointer to a switch object
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- lv_slider_set_value(sw, 0, anim);
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
-}
-
-/**
- * Toggle the position of the switch
- * @param sw pointer to a switch object
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- * @return resulting state of the switch.
- */
-bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
-
- bool state = lv_sw_get_state(sw);
- if(state)
- lv_sw_off(sw, anim);
- else
- lv_sw_on(sw, anim);
-
- return !state;
-}
-
-/**
- * Set a style of a switch
- * @param sw pointer to a switch object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
-
- switch(type) {
- case LV_SLIDER_STYLE_BG: lv_slider_set_style(sw, LV_SLIDER_STYLE_BG, style); break;
- case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(sw, LV_SLIDER_STYLE_INDIC, style); break;
- case LV_SW_STYLE_KNOB_OFF:
- ext->style_knob_off = style;
- if(lv_sw_get_state(sw) == 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
- break;
- case LV_SW_STYLE_KNOB_ON:
- ext->style_knob_on = style;
- if(lv_sw_get_state(sw) != 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
- break;
- }
-}
-
-void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- ext->anim_time = anim_time;
-#else
- (void)sw;
- (void)anim_time;
-#endif
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get a style of a switch
- * @param sw pointer to a switch object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
-
- switch(type) {
- case LV_SW_STYLE_BG: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_BG); break;
- case LV_SW_STYLE_INDIC: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_INDIC); break;
- case LV_SW_STYLE_KNOB_OFF: style = ext->style_knob_off; break;
- case LV_SW_STYLE_KNOB_ON: style = ext->style_knob_on; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-uint16_t lv_sw_get_anim_time(const lv_obj_t * sw)
-{
- LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- return ext->anim_time;
-#else
- (void)sw; /*Unused*/
- return 0;
-#endif
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the switch
- * @param sw pointer to a switch object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
-{
- lv_res_t res;
- if(sign == LV_SIGNAL_GET_TYPE) {
- res = ancestor_signal(sw, sign, param);
- if(res != LV_RES_OK) return res;
- return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
- }
-
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
-
- /*Save the current (old) value before slider signal modifies it. It will be required in the
- * later calculations*/
- int16_t old_val;
- if(sign == LV_SIGNAL_PRESSING)
- old_val = ext->slider.drag_value;
- else
- old_val = lv_slider_get_value(sw);
-
- /*Don't let the slider to call the action. Switch handles it differently*/
- lv_event_cb_t event_cb = sw->event_cb;
- sw->event_cb = NULL;
-
- /* Include the ancient signal function */
- res = ancestor_signal(sw, sign, param);
- if(res != LV_RES_OK) return res;
-
- sw->event_cb = event_cb;
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_PRESSED) {
-
- /*Save the x coordinate of the pressed point to see if the switch was slid*/
- lv_indev_t * indev = lv_indev_get_act();
- if(indev) {
- lv_point_t p;
- lv_indev_get_point(indev, &p);
- ext->start_x = p.x;
- }
- ext->slided = 0;
- ext->changed = 0;
- } else if(sign == LV_SIGNAL_PRESSING) {
- /*See if the switch was slid (moved at least a little)*/
- lv_indev_t * indev = lv_indev_get_act();
- if(indev) {
- lv_point_t p = {0, 0};
- lv_indev_get_point(indev, &p);
- if(LV_MATH_ABS(p.x - ext->start_x) > LV_INDEV_DEF_DRAG_LIMIT) ext->slided = 1;
- }
-
- /*If didn't slide then revert the min/max value. So click without slide won't move the
- * switch as a slider*/
- if(ext->slided == 0) {
- if(lv_sw_get_state(sw))
- ext->slider.drag_value = LV_SW_MAX_VALUE;
- else
- ext->slider.drag_value = 0;
- }
-
- /*If explicitly changed (by slide) don't need to be toggled on release*/
- int16_t threshold = LV_SW_MAX_VALUE / 2;
- if((old_val < threshold && ext->slider.drag_value > threshold) ||
- (old_val > threshold && ext->slider.drag_value < threshold)) {
- ext->changed = 1;
- }
- } else if(sign == LV_SIGNAL_PRESS_LOST) {
- if(lv_sw_get_state(sw)) {
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, LV_ANIM_ON);
- if(res != LV_RES_OK) return res;
- } else {
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
- lv_slider_set_value(sw, 0, LV_ANIM_ON);
- if(res != LV_RES_OK) return res;
- }
- } else if(sign == LV_SIGNAL_RELEASED) {
- /*If not dragged then toggle the switch*/
- if(ext->changed == 0) {
- int32_t state;
- if(lv_sw_get_state(sw)) {
- lv_sw_off(sw, LV_ANIM_ON);
- state = 0;
- } else {
- lv_sw_on(sw, LV_ANIM_ON);
- state = 1;
- }
-
- res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- }
- /*If the switch was dragged then calculate the new state based on the current position*/
- else {
- int16_t v = lv_slider_get_value(sw);
- int32_t state;
- if(v > LV_SW_MAX_VALUE / 2) {
- lv_sw_on(sw, LV_ANIM_ON);
- state = 1;
- } else {
- lv_sw_off(sw, LV_ANIM_ON);
- state = 0;
- }
- res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- }
- } else if(sign == LV_SIGNAL_CONTROL) {
- char c = *((char *)param);
- uint32_t state;
- if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, true);
- state = 1;
- res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- lv_slider_set_value(sw, 0, true);
- state = 0;
- res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
- if(res != LV_RES_OK) return res;
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = false; /*The ancestor slider is editable the switch is not*/
- }
-
- return res;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_sw.h b/src/libs/lvgl/src/lv_objx/lv_sw.h
deleted file mode 100644
index f4b44aeb..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_sw.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * @file lv_sw.h
- *
- */
-
-#ifndef LV_SW_H
-#define LV_SW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_SW != 0
-
-/*Testing of dependencies*/
-#if LV_USE_SLIDER == 0
-#error "lv_sw: lv_slider is required. Enable it in lv_conf.h (LV_USE_SLIDER 1)"
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_slider.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_SW_MAX_VALUE 100
-
-/**********************
- * TYPEDEFS
- **********************/
-/*Data of switch*/
-typedef struct
-{
- lv_slider_ext_t slider; /*Ext. of ancestor*/
- /*New data for this type */
- const lv_style_t * style_knob_off; /**< Style of the knob when the switch is OFF*/
- const lv_style_t * style_knob_on; /**< Style of the knob when the switch is ON (NULL to use the same as OFF)*/
- lv_coord_t start_x;
- uint8_t changed : 1; /*Indicates the switch state explicitly changed by drag*/
- uint8_t slided : 1;
-#if LV_USE_ANIMATION
- uint16_t anim_time; /*switch animation time */
-#endif
-} lv_sw_ext_t;
-
-/**
- * Switch styles.
- */
-enum {
- LV_SW_STYLE_BG, /**< Switch background. */
- LV_SW_STYLE_INDIC, /**< Switch fill area. */
- LV_SW_STYLE_KNOB_OFF, /**< Switch knob (when off). */
- LV_SW_STYLE_KNOB_ON, /**< Switch knob (when on). */
-};
-typedef uint8_t lv_sw_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a switch objects
- * @param par pointer to an object, it will be the parent of the new switch
- * @param copy pointer to a switch object, if not NULL then the new object will be copied from it
- * @return pointer to the created switch
- */
-lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Turn ON the switch
- * @param sw pointer to a switch object
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim);
-
-/**
- * Turn OFF the switch
- * @param sw pointer to a switch object
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim);
-
-/**
- * Toggle the position of the switch
- * @param sw pointer to a switch object
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- * @return resulting state of the switch.
- */
-bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim);
-
-/**
- * Set a style of a switch
- * @param sw pointer to a switch object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style);
-
-/**
- * Set the animation time of the switch
- * @param sw pointer to a switch object
- * @param anim_time animation time
- * @return style pointer to a style
- */
-void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the state of a switch
- * @param sw pointer to a switch object
- * @return false: OFF; true: ON
- */
-static inline bool lv_sw_get_state(const lv_obj_t * sw)
-{
- return lv_bar_get_value(sw) < LV_SW_MAX_VALUE / 2 ? false : true;
-}
-
-/**
- * Get a style of a switch
- * @param sw pointer to a switch object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type);
-
-/**
- * Get the animation time of the switch
- * @param sw pointer to a switch object
- * @return style pointer to a style
- */
-uint16_t lv_sw_get_anim_time(const lv_obj_t * sw);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_SW*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_SW_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_ta.c b/src/libs/lvgl/src/lv_objx/lv_ta.c
deleted file mode 100644
index 387e99b2..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_ta.c
+++ /dev/null
@@ -1,1948 +0,0 @@
-/**
- * @file lv_ta.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_ta.h"
-#if LV_USE_TA != 0
-#include <string.h>
-#include "../lv_core/lv_debug.h"
-#include "../lv_core/lv_group.h"
-#include "../lv_core/lv_refr.h"
-#include "../lv_draw/lv_draw.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_misc/lv_txt.h"
-#include "../lv_misc/lv_math.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_ta"
-
-/*Test configuration*/
-#ifndef LV_TA_DEF_CURSOR_BLINK_TIME
-#define LV_TA_DEF_CURSOR_BLINK_TIME 400 /*ms*/
-#endif
-
-#ifndef LV_TA_DEF_PWD_SHOW_TIME
-#define LV_TA_DEF_PWD_SHOW_TIME 1500 /*ms*/
-#endif
-
-#define LV_TA_DEF_WIDTH (2 * LV_DPI)
-#define LV_TA_DEF_HEIGHT (1 * LV_DPI)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param);
-static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
-#if LV_USE_ANIMATION
-static void cursor_blink_anim(lv_obj_t * ta, lv_anim_value_t show);
-static void pwd_char_hider_anim(lv_obj_t * ta, lv_anim_value_t x);
-static void pwd_char_hider_anim_ready(lv_anim_t * a);
-#endif
-static void pwd_char_hider(lv_obj_t * ta);
-static bool char_is_accepted(lv_obj_t * ta, uint32_t c);
-static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res);
-static void refr_cursor_area(lv_obj_t * ta);
-static void placeholder_update(lv_obj_t * ta);
-static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, lv_indev_t * click_source);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_design_cb_t ancestor_design;
-static lv_design_cb_t scrl_design;
-static lv_signal_cb_t ancestor_signal;
-static lv_signal_cb_t scrl_signal;
-static const char * ta_insert_replace;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a text area objects
- * @param par pointer to an object, it will be the parent of the new text area
- * @param copy pointer to a text area object, if not NULL then the new object will be copied from it
- * @return pointer to the created text area
- */
-lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("text area create started");
-
- /*Create the ancestor object*/
- lv_obj_t * new_ta = lv_page_create(par, copy);
- LV_ASSERT_MEM(new_ta);
- if(new_ta == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_ta);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_ta);
- if(scrl_signal == NULL) scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_ta));
- if(scrl_design == NULL) scrl_design = lv_obj_get_design_cb(lv_page_get_scrl(new_ta));
-
- /*Allocate the object type specific extended data*/
- lv_ta_ext_t * ext = lv_obj_allocate_ext_attr(new_ta, sizeof(lv_ta_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->cursor.state = 1;
- ext->pwd_mode = 0;
- ext->pwd_tmp = NULL;
- ext->pwd_show_time = LV_TA_DEF_PWD_SHOW_TIME;
- ext->accapted_chars = NULL;
- ext->max_length = 0;
- ext->cursor.style = NULL;
- ext->cursor.blink_time = LV_TA_DEF_CURSOR_BLINK_TIME;
- ext->cursor.pos = 0;
- ext->cursor.click_pos = 1;
- ext->cursor.type = LV_CURSOR_LINE;
- ext->cursor.valid_x = 0;
- ext->one_line = 0;
-#if LV_LABEL_TEXT_SEL
- ext->text_sel_en = 0;
-#endif
- ext->label = NULL;
- ext->placeholder = NULL;
-
-#if LV_USE_ANIMATION == 0
- ext->pwd_show_time = 0;
- ext->cursor.blink_time = 0;
-#endif
-
- lv_obj_set_signal_cb(new_ta, lv_ta_signal);
- lv_obj_set_signal_cb(lv_page_get_scrl(new_ta), lv_ta_scrollable_signal);
- lv_obj_set_design_cb(new_ta, lv_ta_design);
-
- /*Init the new text area object*/
- if(copy == NULL) {
- lv_page_set_scrl_fit2(new_ta, LV_FIT_FLOOD, LV_FIT_TIGHT);
-
- ext->label = lv_label_create(new_ta, NULL);
-
- lv_obj_set_design_cb(ext->page.scrl, lv_ta_scrollable_design);
-
- lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
- lv_label_set_text(ext->label, "Text area");
- lv_obj_set_click(ext->label, false);
- lv_obj_set_size(new_ta, LV_TA_DEF_WIDTH, LV_TA_DEF_HEIGHT);
- lv_ta_set_sb_mode(new_ta, LV_SB_MODE_DRAG);
- lv_page_set_style(new_ta, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_ta_set_style(new_ta, LV_TA_STYLE_BG, th->style.ta.area);
- lv_ta_set_style(new_ta, LV_TA_STYLE_SB, th->style.ta.sb);
- } else {
- lv_ta_set_style(new_ta, LV_TA_STYLE_BG, &lv_style_pretty);
- }
- }
- /*Copy an existing object*/
- else {
- lv_obj_set_design_cb(ext->page.scrl, lv_ta_scrollable_design);
- lv_ta_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->label = lv_label_create(new_ta, copy_ext->label);
- ext->pwd_mode = copy_ext->pwd_mode;
- ext->accapted_chars = copy_ext->accapted_chars;
- ext->max_length = copy_ext->max_length;
- ext->cursor.style = copy_ext->cursor.style;
- ext->cursor.pos = copy_ext->cursor.pos;
- ext->cursor.valid_x = copy_ext->cursor.valid_x;
- ext->cursor.type = copy_ext->cursor.type;
-
- if(ext->pwd_mode != 0) pwd_char_hider( new_ta);
-
- if(copy_ext->placeholder != NULL)
- ext->placeholder = lv_label_create(new_ta, copy_ext->placeholder);
- else
- ext->placeholder = NULL;
-
- if(copy_ext->pwd_tmp) {
- uint16_t len = lv_mem_get_size(copy_ext->pwd_tmp);
- ext->pwd_tmp = lv_mem_alloc(len);
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return NULL;
-
- memcpy(ext->pwd_tmp, copy_ext->pwd_tmp, len);
- }
-
- if(copy_ext->one_line) lv_ta_set_one_line(new_ta, true);
-
- lv_ta_set_style(new_ta, LV_TA_STYLE_CURSOR, lv_ta_get_style(copy, LV_TA_STYLE_CURSOR));
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_ta);
- }
-
-#if LV_USE_ANIMATION
- if(ext->cursor.blink_time) {
- /*Create a cursor blinker animation*/
- lv_anim_t a;
- a.var = new_ta;
- a.exec_cb = (lv_anim_exec_xcb_t)cursor_blink_anim;
- a.time = ext->cursor.blink_time;
- a.act_time = 0;
- a.ready_cb = NULL;
- a.start = 1;
- a.end = 0;
- a.repeat = 1;
- a.repeat_pause = 0;
- a.playback = 1;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
- }
-#endif
-
- LV_LOG_INFO("text area created");
-
- return new_ta;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Insert a character to the current cursor position.
- * To add a wide char, e.g. 'Á' use `lv_txt_encoded_conv_wc('Á')`
- * @param ta pointer to a text area object
- * @param c a character (e.g. 'a')
- */
-void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- uint32_t letter_buf[2];
- letter_buf[0] = c;
- letter_buf[1] = '\0';
-
- ta_insert_replace = NULL;
- lv_event_send(ta, LV_EVENT_INSERT, letter_buf);
- if(ta_insert_replace) {
- if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
-
- /*Add the replaced text directly it's different from the original*/
- if(strcmp(ta_insert_replace, (char *)letter_buf)) {
- lv_ta_add_text(ta, ta_insert_replace);
- return;
- }
- }
-
- if(ext->one_line && (c == '\n' || c == '\r')) {
- LV_LOG_INFO("Text area: line break ignored in one-line mode");
- return;
- }
-
- uint32_t c_uni = lv_txt_encoded_next((const char *)&c, NULL);
-
- if(char_is_accepted(ta, c_uni) == false) {
- LV_LOG_INFO("Character is no accepted by the text area (too long text or not in the "
- "accepted list)");
- return;
- }
-
- /*If a new line was added it shouldn't show edge flash effect*/
- bool edge_flash_en = lv_ta_get_edge_flash(ta);
- lv_ta_set_edge_flash(ta, false);
-
- if(ext->pwd_mode != 0) pwd_char_hider(ta); /*Make sure all the current text contains only '*'*/
-
- lv_label_ins_text(ext->label, ext->cursor.pos, (const char *)letter_buf); /*Insert the character*/
- lv_ta_clear_selection(ta); /*Clear selection*/
-
- if(ext->pwd_mode != 0) {
-
- ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 2); /*+2: the new char + \0 */
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return;
-
- lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, (const char *)letter_buf);
-
-#if LV_USE_ANIMATION
- /*Auto hide characters*/
- lv_anim_t a;
- a.var = ta;
- a.exec_cb = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
- a.time = ext->pwd_show_time;
- a.act_time = 0;
- a.ready_cb = pwd_char_hider_anim_ready;
- a.start = 0;
- a.end = 1;
- a.repeat = 0;
- a.repeat_pause = 0;
- a.playback = 0;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
-
-#else
- pwd_char_hider(ta);
-#endif
- }
-
- /*Move the cursor after the new character*/
- lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + 1);
-
- /*Revert the original edge flash state*/
- lv_ta_set_edge_flash(ta, edge_flash_en);
-
- placeholder_update(ta);
-
- lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
-}
-
-/**
- * Insert a text to the current cursor position
- * @param ta pointer to a text area object
- * @param txt a '\0' terminated string to insert
- */
-void lv_ta_add_text(lv_obj_t * ta, const char * txt)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
- LV_ASSERT_NULL(txt);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- ta_insert_replace = NULL;
- lv_event_send(ta, LV_EVENT_INSERT, txt);
- if(ta_insert_replace) {
- if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
-
- /*Add the replaced text directly it's different from the original*/
- if(strcmp(ta_insert_replace, txt)) {
- lv_ta_add_text(ta, ta_insert_replace);
- return;
- }
- }
-
- if(ext->pwd_mode != 0) pwd_char_hider(ta); /*Make sure all the current text contains only '*'*/
-
- /*Add the character one-by-one if not all characters are accepted or there is character limit.*/
- if(lv_ta_get_accepted_chars(ta) || lv_ta_get_max_length(ta)) {
- uint32_t i = 0;
- while(txt[i] != '\0') {
- uint32_t c = lv_txt_encoded_next(txt, &i);
- lv_ta_add_char(ta, lv_txt_unicode_to_encoded(c));
- }
- return;
- }
-
- /*If a new line was added it shouldn't show edge flash effect*/
- bool edge_flash_en = lv_ta_get_edge_flash(ta);
- lv_ta_set_edge_flash(ta, false);
-
- /*Insert the text*/
- lv_label_ins_text(ext->label, ext->cursor.pos, txt);
- lv_ta_clear_selection(ta);
-
- if(ext->pwd_mode != 0) {
- ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + strlen(txt) + 1);
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return;
-
- lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, txt);
-
-#if LV_USE_ANIMATION
- /*Auto hide characters*/
- lv_anim_t a;
- a.var = ta;
- a.exec_cb = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
- a.time = ext->pwd_show_time;
- a.act_time = 0;
- a.ready_cb = pwd_char_hider_anim_ready;
- a.start = 0;
- a.end = 1;
- a.repeat = 0;
- a.repeat_pause = 0;
- a.playback = 0;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
-#else
- pwd_char_hider(ta);
-#endif
- }
-
- /*Move the cursor after the new text*/
- lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + lv_txt_get_encoded_length(txt));
-
- /*Revert the original edge flash state*/
- lv_ta_set_edge_flash(ta, edge_flash_en);
-
- placeholder_update(ta);
-
- lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
-}
-
-/**
- * Delete a the left character from the current cursor position
- * @param ta pointer to a text area object
- */
-void lv_ta_del_char(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- uint16_t cur_pos = ext->cursor.pos;
-
- if(cur_pos == 0) return;
-
- ta_insert_replace = NULL;
- char del_buf[2] = {LV_KEY_DEL, '\0'};
- lv_event_send(ta, LV_EVENT_INSERT, del_buf);
- if(ta_insert_replace) {
- if(ta_insert_replace[0] == '\0') return; /*Drop this text*/
-
- /*Add the replaced text directly it's different from the original*/
- if(strcmp(ta_insert_replace, del_buf)) {
- lv_ta_add_text(ta, ta_insert_replace);
- return;
- }
- }
-
- char * label_txt = lv_label_get_text(ext->label);
- /*Delete a character*/
- lv_txt_cut(label_txt, ext->cursor.pos - 1, 1);
- /*Refresh the label*/
- lv_label_set_text(ext->label, label_txt);
- lv_ta_clear_selection(ta);
-
- /*Don't let 'width == 0' because cursor will not be visible*/
- if(lv_obj_get_width(ext->label) == 0) {
- const lv_style_t * style = lv_obj_get_style(ext->label);
- lv_obj_set_width(ext->label, style->line.width);
- }
-
- if(ext->pwd_mode != 0) {
- uint32_t byte_pos = lv_txt_encoded_get_byte_id(ext->pwd_tmp, ext->cursor.pos - 1);
- lv_txt_cut(ext->pwd_tmp, ext->cursor.pos - 1, lv_txt_encoded_size(&label_txt[byte_pos]));
-
- ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 1);
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return;
- }
-
- /*Move the cursor to the place of the deleted character*/
- lv_ta_set_cursor_pos(ta, ext->cursor.pos - 1);
-
- placeholder_update(ta);
-
- lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
-}
-
-/**
- * Delete the right character from the current cursor position
- * @param ta pointer to a text area object
- */
-void lv_ta_del_char_forward(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- uint16_t cp = lv_ta_get_cursor_pos(ta);
- lv_ta_set_cursor_pos(ta, cp + 1);
- if(cp != lv_ta_get_cursor_pos(ta)) lv_ta_del_char(ta);
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of a text area
- * @param ta pointer to a text area
- * @param txt pointer to the text
- */
-void lv_ta_set_text(lv_obj_t * ta, const char * txt)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
- LV_ASSERT_NULL(txt);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- /*Clear the existing selection*/
- lv_ta_clear_selection(ta);
-
- /*Add the character one-by-one if not all characters are accepted or there is character limit.*/
- if(lv_ta_get_accepted_chars(ta) || lv_ta_get_max_length(ta)) {
- lv_label_set_text(ext->label, "");
- lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
- if(ext->pwd_mode != 0) {
- ext->pwd_tmp[0] = '\0'; /*Clear the password too*/
- }
- uint32_t i = 0;
- while(txt[i] != '\0') {
- uint32_t c = lv_txt_encoded_next(txt, &i);
- lv_ta_add_char(ta, lv_txt_unicode_to_encoded(c));
- }
- } else {
- lv_label_set_text(ext->label, txt);
- lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
- }
-
- /*Don't let 'width == 0' because the cursor will not be visible*/
- if(lv_obj_get_width(ext->label) == 0) {
- const lv_style_t * style = lv_obj_get_style(ext->label);
- lv_obj_set_width(ext->label, lv_font_get_glyph_width(style->text.font, ' ', '\0'));
- }
-
- if(ext->pwd_mode != 0) {
- ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(txt) + 1);
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return;
- strcpy(ext->pwd_tmp, txt);
-
-#if LV_USE_ANIMATION
- /*Auto hide characters*/
- lv_anim_t a;
- a.var = ta;
- a.exec_cb = (lv_anim_exec_xcb_t)pwd_char_hider_anim;
- a.time = ext->pwd_show_time;
- a.act_time = 0;
- a.ready_cb = pwd_char_hider_anim_ready;
- a.start = 0;
- a.end = 1;
- a.repeat = 0;
- a.repeat_pause = 0;
- a.playback = 0;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
-#else
- pwd_char_hider(ta);
-#endif
- }
-
- placeholder_update(ta);
-
- lv_event_send(ta, LV_EVENT_VALUE_CHANGED, NULL);
-}
-
-/**
- * Set the placeholder text of a text area
- * @param ta pointer to a text area
- * @param txt pointer to the text
- */
-void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
- LV_ASSERT_NULL(txt);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- /*Create the placeholder label only when it is needed*/
- if(ext->placeholder == NULL) {
- ext->placeholder = lv_label_create(ta, NULL);
-
- if(ext->one_line) {
- lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
- } else {
- lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
- }
- }
-
- lv_label_set_text(ext->placeholder, txt);
-
- /*Refresh the placeholder's align*/
- lv_ta_set_text_align(ta, lv_label_get_align(ext->label));
-
- placeholder_update(ta);
-}
-
-/**
- * Set the cursor position
- * @param obj pointer to a text area object
- * @param pos the new cursor position in character index
- * < 0 : index from the end of the text
- * LV_TA_CURSOR_LAST: go after the last character
- */
-void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->cursor.pos == pos) return;
-
- uint16_t len = lv_txt_get_encoded_length(lv_label_get_text(ext->label));
-
- if(pos < 0) pos = len + pos;
-
- if(pos > len || pos == LV_TA_CURSOR_LAST) pos = len;
-
- ext->cursor.pos = pos;
-
- /*Position the label to make the cursor visible*/
- lv_obj_t * label_par = lv_obj_get_parent(ext->label);
- lv_point_t cur_pos;
- const lv_style_t * style = lv_obj_get_style(ta);
- const lv_font_t * font_p = style->text.font;
- lv_area_t label_cords;
- lv_area_t ta_cords;
- lv_label_get_letter_pos(ext->label, pos, &cur_pos);
- lv_obj_get_coords(ta, &ta_cords);
- lv_obj_get_coords(ext->label, &label_cords);
-
- /*Check the top*/
- lv_coord_t font_h = lv_font_get_line_height(font_p);
- if(lv_obj_get_y(label_par) + cur_pos.y < 0) {
- lv_obj_set_y(label_par, -cur_pos.y + style->body.padding.top);
- }
-
- /*Check the bottom*/
- if(label_cords.y1 + cur_pos.y + font_h + style->body.padding.bottom > ta_cords.y2) {
- lv_obj_set_y(label_par, -(cur_pos.y - lv_obj_get_height(ta) + font_h + style->body.padding.top +
- style->body.padding.bottom));
- }
- /*Check the left (use the font_h as general unit)*/
- if(lv_obj_get_x(label_par) + cur_pos.x < font_h) {
- lv_obj_set_x(label_par, -cur_pos.x + font_h);
- }
-
- /*Check the right (use the font_h as general unit)*/
- if(label_cords.x1 + cur_pos.x + font_h + style->body.padding.right > ta_cords.x2) {
- lv_obj_set_x(label_par, -(cur_pos.x - lv_obj_get_width(ta) + font_h + style->body.padding.left +
- style->body.padding.right));
- }
-
- ext->cursor.valid_x = cur_pos.x;
-
-#if LV_USE_ANIMATION
- if(ext->cursor.blink_time) {
- /*Reset cursor blink animation*/
- lv_anim_t a;
- a.var = ta;
- a.exec_cb = (lv_anim_exec_xcb_t)cursor_blink_anim;
- a.time = ext->cursor.blink_time;
- a.act_time = 0;
- a.ready_cb = NULL;
- a.start = 1;
- a.end = 0;
- a.repeat = 1;
- a.repeat_pause = 0;
- a.playback = 1;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
- }
-#endif
-
- refr_cursor_area(ta);
-}
-
-/**
- * Set the cursor type.
- * @param ta pointer to a text area object
- * @param cur_type: element of 'lv_ta_cursor_type_t'
- */
-void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->cursor.type == cur_type) return;
-
- ext->cursor.type = cur_type;
-
- refr_cursor_area(ta);
-}
-
-/**
- * Enable/Disable the positioning of the the cursor by clicking the text on the text area.
- * @param ta pointer to a text area object
- * @param en true: enable click positions; false: disable
- */
-void lv_ta_set_cursor_click_pos(lv_obj_t * ta, bool en)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- ext->cursor.click_pos = en ? 1 : 0;
-}
-
-/**
- * Enable/Disable password mode
- * @param ta pointer to a text area object
- * @param en true: enable, false: disable
- */
-void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->pwd_mode == en) return;
-
- /*Pwd mode is now enabled*/
- if(ext->pwd_mode == 0 && en != false) {
- char * txt = lv_label_get_text(ext->label);
- size_t len = strlen(txt);
- ext->pwd_tmp = lv_mem_alloc(len + 1);
- LV_ASSERT_MEM(ext->pwd_tmp);
- if(ext->pwd_tmp == NULL) return;
-
- strcpy(ext->pwd_tmp, txt);
-
- uint16_t i;
- uint16_t encoded_len = lv_txt_get_encoded_length(txt);
- for(i = 0; i < encoded_len; i++) {
- txt[i] = '*'; /*All char to '*'*/
- }
- txt[i] = '\0';
-
- lv_ta_clear_selection(ta);
-
- lv_label_set_text(ext->label, NULL);
- }
- /*Pwd mode is now disabled*/
- else if(ext->pwd_mode == 1 && en == false) {
- lv_ta_clear_selection(ta);
- lv_label_set_text(ext->label, ext->pwd_tmp);
- lv_mem_free(ext->pwd_tmp);
- ext->pwd_tmp = NULL;
- }
-
- ext->pwd_mode = en == false ? 0 : 1;
-
- refr_cursor_area(ta);
-}
-
-/**
- * Configure the text area to one line or back to normal
- * @param ta pointer to a Text area object
- * @param en true: one line, false: normal
- */
-void lv_ta_set_one_line(lv_obj_t * ta, bool en)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->one_line == en) return;
- lv_label_align_t old_align = lv_label_get_align(ext->label);
-
- if(en) {
- const lv_style_t * style_ta = lv_obj_get_style(ta);
- const lv_style_t * style_scrl = lv_obj_get_style(lv_page_get_scrl(ta));
- const lv_style_t * style_label = lv_obj_get_style(ext->label);
- lv_coord_t font_h = lv_font_get_line_height(style_label->text.font);
-
- ext->one_line = 1;
- lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
- lv_obj_set_height(ta, font_h + style_ta->body.padding.top + style_ta->body.padding.bottom +
- style_scrl->body.padding.top + style_scrl->body.padding.bottom);
- lv_label_set_long_mode(ext->label, LV_LABEL_LONG_EXPAND);
- if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
- lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, style_ta->body.padding.top);
- } else {
- const lv_style_t * style_ta = lv_obj_get_style(ta);
-
- ext->one_line = 0;
- lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_TIGHT);
- lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
- if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
-
- lv_obj_set_height(ta, LV_TA_DEF_HEIGHT);
- lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, style_ta->body.padding.top);
- }
-
- placeholder_update(ta);
- /* `refr_cursor_area` is called at the end of lv_ta_set_text_align */
- lv_ta_set_text_align(ta, old_align);
-}
-
-/**
- * Set the alignment of the text area.
- * In one line mode the text can be scrolled only with `LV_LABEL_ALIGN_LEFT`.
- * This function should be called if the size of text area changes.
- * @param ta pointer to a text are object
- * @param align the desired alignment from `lv_label_align_t`. (LV_LABEL_ALIGN_LEFT/CENTER/RIGHT)
- */
-void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- lv_obj_t * label = lv_ta_get_label(ta);
- if(!ext->one_line) {
- lv_label_set_align(label, align);
- if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
- } else {
- /*Normal left align. Just let the text expand*/
- if(align == LV_LABEL_ALIGN_LEFT) {
- lv_label_set_long_mode(label, LV_LABEL_LONG_EXPAND);
- lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
- lv_label_set_align(label, align);
- if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
-
- }
- /*Else use fix label width equal to the Text area width*/
- else {
- lv_label_set_long_mode(label, LV_LABEL_LONG_CROP);
- lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_FLOOD);
- lv_label_set_align(label, align);
- if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
-
- lv_obj_set_width(label, lv_page_get_fit_width(ta));
- }
- }
-
- refr_cursor_area(ta);
-}
-
-/**
- * Set a list of characters. Only these characters will be accepted by the text area
- * @param ta pointer to Text Area
- * @param list list of characters. Only the pointer is saved. E.g. "+-.,0123456789"
- */
-void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- ext->accapted_chars = list;
-}
-
-/**
- * Set max length of a Text Area.
- * @param ta pointer to Text Area
- * @param num the maximal number of characters can be added (`lv_ta_set_text` ignores it)
- */
-void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- ext->max_length = num;
-}
-
-/**
- * In `LV_EVENT_INSERT` the text which planned to be inserted can be replaced by an other text.
- * It can be used to add automatic formatting to the text area.
- * @param ta pointer to a text area.
- * @param txt pointer to a new string to insert. If `""` no text will be added.
- * The variable must be live after the `event_cb` exists. (Should be `global` or
- * `static`)
- */
-void lv_ta_set_insert_replace(lv_obj_t * ta, const char * txt)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- (void)ta; /*Unused*/
- ta_insert_replace = txt;
-}
-
-/**
- * Set a style of a text area
- * @param ta pointer to a text area object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- switch(type) {
- case LV_TA_STYLE_BG: lv_page_set_style(ta, LV_PAGE_STYLE_BG, style); break;
- case LV_TA_STYLE_SB: lv_page_set_style(ta, LV_PAGE_STYLE_SB, style); break;
- case LV_TA_STYLE_EDGE_FLASH: lv_page_set_style(ta, LV_PAGE_STYLE_EDGE_FLASH, style); break;
- case LV_TA_STYLE_CURSOR:
- ext->cursor.style = style;
- lv_obj_refresh_ext_draw_pad(lv_page_get_scrl(ta)); /*Refresh ext. size because of cursor drawing*/
- refr_cursor_area(ta);
- break;
- case LV_TA_STYLE_PLACEHOLDER:
- if(ext->placeholder) lv_label_set_style(ext->placeholder, LV_LABEL_STYLE_MAIN, style);
- break;
- }
-}
-
-/**
- * Enable/disable selection mode.
- * @param ta pointer to a text area object
- * @param en true or false to enable/disable selection mode
- */
-void lv_ta_set_text_sel(lv_obj_t * ta, bool en)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- ext->text_sel_en = en;
-
- if(!en) lv_ta_clear_selection(ta);
-#else
- (void)ta; /*Unused*/
- (void)en; /*Unused*/
-#endif
-}
-
-/**
- * Set how long show the password before changing it to '*'
- * @param ta pointer to Text area
- * @param time show time in milliseconds. 0: hide immediately.
- */
-void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- time = 0;
-#endif
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- ext->pwd_show_time = time;
-}
-
-/**
- * Set cursor blink animation time
- * @param ta pointer to Text area
- * @param time blink period. 0: disable blinking
- */
-void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- time = 0;
-#endif
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- ext->cursor.blink_time = time;
-
-#if LV_USE_ANIMATION
- if(ext->cursor.blink_time) {
- /*Reset cursor blink animation*/
- lv_anim_t a;
- a.var = ta;
- a.exec_cb = (lv_anim_exec_xcb_t)cursor_blink_anim;
- a.time = ext->cursor.blink_time;
- a.act_time = 0;
- a.ready_cb = NULL;
- a.start = 1;
- a.end = 0;
- a.repeat = 1;
- a.repeat_pause = 0;
- a.playback = 1;
- a.playback_pause = 0;
- a.path_cb = lv_anim_path_step;
- lv_anim_create(&a);
- } else {
- lv_anim_del(ta, (lv_anim_exec_xcb_t)cursor_blink_anim);
- ext->cursor.state = 1;
- }
-#else
- ext->cursor.state = 1;
-#endif
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a text area. In password mode it gives the real text (not '*'s).
- * @param ta pointer to a text area object
- * @return pointer to the text
- */
-const char * lv_ta_get_text(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- const char * txt;
- if(ext->pwd_mode == 0) {
- txt = lv_label_get_text(ext->label);
- } else {
- txt = ext->pwd_tmp;
- }
-
- return txt;
-}
-
-/**
- * Get the placeholder text of a text area
- * @param ta pointer to a text area object
- * @return pointer to the text
- */
-const char * lv_ta_get_placeholder_text(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- const char * txt = NULL;
-
- if(ext->placeholder) txt = lv_label_get_text(ext->placeholder);
-
- return txt;
-}
-
-/**
- * Get the label of a text area
- * @param ta pointer to a text area object
- * @return pointer to the label object
- */
-lv_obj_t * lv_ta_get_label(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->label;
-}
-
-/**
- * Get the current cursor position in character index
- * @param ta pointer to a text area object
- * @return the cursor position
- */
-uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->cursor.pos;
-}
-
-/**
- * Get the current cursor type.
- * @param ta pointer to a text area object
- * @return element of 'lv_ta_cursor_type_t'
- */
-lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->cursor.type;
-}
-
-/**
- * Get whether the cursor click positioning is enabled or not.
- * @param ta pointer to a text area object
- * @return true: enable click positions; false: disable
- */
-bool lv_ta_get_cursor_click_pos(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->cursor.click_pos ? true : false;
-}
-
-/**
- * Get the password mode attribute
- * @param ta pointer to a text area object
- * @return true: password mode is enabled, false: disabled
- */
-bool lv_ta_get_pwd_mode(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->pwd_mode == 0 ? false : true;
-}
-
-/**
- * Get the one line configuration attribute
- * @param ta pointer to a text area object
- * @return true: one line configuration is enabled, false: disabled
- */
-bool lv_ta_get_one_line(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->one_line == 0 ? false : true;
-}
-
-/**
- * Get a list of accepted characters.
- * @param ta pointer to Text Area
- * @return list of accented characters.
- */
-const char * lv_ta_get_accepted_chars(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- return ext->accapted_chars;
-}
-
-/**
- * Set max length of a Text Area.
- * @param ta pointer to Text Area
- * @return the maximal number of characters to be add
- */
-uint16_t lv_ta_get_max_length(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->max_length;
-}
-
-/**
- * Get a style of a text area
- * @param ta pointer to a text area object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- switch(type) {
- case LV_TA_STYLE_BG: style = lv_page_get_style(ta, LV_PAGE_STYLE_BG); break;
- case LV_TA_STYLE_SB: style = lv_page_get_style(ta, LV_PAGE_STYLE_SB); break;
- case LV_TA_STYLE_EDGE_FLASH: style = lv_page_get_style(ta, LV_PAGE_STYLE_EDGE_FLASH); break;
- case LV_TA_STYLE_CURSOR: style = ext->cursor.style; break;
- case LV_TA_STYLE_PLACEHOLDER:
- if(ext->placeholder) style = lv_label_get_style(ext->placeholder, LV_LABEL_STYLE_MAIN);
- break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**
- * Find whether text is selected or not.
- * @param ta Text area object
- * @return whether text is selected or not
- */
-bool lv_ta_text_is_selected(const lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- if((lv_label_get_text_sel_start(ext->label) == LV_DRAW_LABEL_NO_TXT_SEL ||
- lv_label_get_text_sel_end(ext->label) == LV_DRAW_LABEL_NO_TXT_SEL)) {
- return true;
- } else {
- return false;
- }
-#else
- (void)ta; /*Unused*/
- return false;
-#endif
-}
-
-/**
- * Find whether selection mode is enabled.
- * @param ta pointer to a text area object
- * @return true: selection mode is enabled, false: disabled
- */
-bool lv_ta_get_text_sel_en(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->text_sel_en;
-#else
- (void)ta; /*Unused*/
- return false;
-#endif
-}
-
-/**
- * Set how long show the password before changing it to '*'
- * @param ta pointer to Text area
- * @return show time in milliseconds. 0: hide immediately.
- */
-uint16_t lv_ta_get_pwd_show_time(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- return ext->pwd_show_time;
-}
-
-/**
- * Set cursor blink animation time
- * @param ta pointer to Text area
- * @return time blink period. 0: disable blinking
- */
-uint16_t lv_ta_get_cursor_blink_time(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- return ext->cursor.blink_time;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Clear the selection on the text area.
- * @param ta Text area object
- */
-void lv_ta_clear_selection(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
-#if LV_LABEL_TEXT_SEL
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- if(lv_label_get_text_sel_start(ext->label) != LV_DRAW_LABEL_NO_TXT_SEL ||
- lv_label_get_text_sel_end(ext->label) != LV_DRAW_LABEL_NO_TXT_SEL) {
- lv_label_set_text_sel_start(ext->label, LV_DRAW_LABEL_NO_TXT_SEL);
- lv_label_set_text_sel_end(ext->label, LV_DRAW_LABEL_NO_TXT_SEL);
- }
-#else
- (void)ta; /*Unused*/
-#endif
-}
-
-/**
- * Move the cursor one character right
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_right(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- uint16_t cp = lv_ta_get_cursor_pos(ta);
- cp++;
- lv_ta_set_cursor_pos(ta, cp);
-}
-
-/**
- * Move the cursor one character left
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_left(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- uint16_t cp = lv_ta_get_cursor_pos(ta);
- if(cp > 0) {
- cp--;
- lv_ta_set_cursor_pos(ta, cp);
- }
-}
-
-/**
- * Move the cursor one line down
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_down(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- lv_point_t pos;
-
- /*Get the position of the current letter*/
- lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);
-
- /*Increment the y with one line and keep the valid x*/
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
- const lv_font_t * font_p = label_style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font_p);
- pos.y += font_h + label_style->text.line_space + 1;
- pos.x = ext->cursor.valid_x;
-
- /*Do not go below the last line*/
- if(pos.y < lv_obj_get_height(ext->label)) {
- /*Get the letter index on the new cursor position and set it*/
- uint16_t new_cur_pos = lv_label_get_letter_on(ext->label, &pos);
-
- lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position set overwrites the valid positon */
- lv_ta_set_cursor_pos(ta, new_cur_pos);
- ext->cursor.valid_x = cur_valid_x_tmp;
- }
-}
-
-/**
- * Move the cursor one line up
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_up(lv_obj_t * ta)
-{
- LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- lv_point_t pos;
-
- /*Get the position of the current letter*/
- lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);
-
- /*Decrement the y with one line and keep the valid x*/
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
- const lv_font_t * font = label_style->text.font;
- lv_coord_t font_h = lv_font_get_line_height(font);
- pos.y -= font_h + label_style->text.line_space - 1;
- pos.x = ext->cursor.valid_x;
-
- /*Get the letter index on the new cursor position and set it*/
- uint16_t new_cur_pos = lv_label_get_letter_on(ext->label, &pos);
- lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position set overwrites the valid positon */
- lv_ta_set_cursor_pos(ta, new_cur_pos);
- ext->cursor.valid_x = cur_valid_x_tmp;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the text areas
- * @param ta pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW_MAIN: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask_p area*/
- return ancestor_design(ta, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Draw the object*/
- ancestor_design(ta, mask, mode);
-
- } else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(ta, mask, mode);
- }
- return true;
-}
-
-/**
- * An extended scrollable design of the page. Calls the normal design function and draws a cursor.
- * @param scrl pointer to the scrollable part of the Text area
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW_MAIN: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @return return true/false, depends on 'mode'
- */
-static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
-{
- if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask_p area*/
- return scrl_design(scrl, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
- /*Draw the object*/
- scrl_design(scrl, mask, mode);
- } else if(mode == LV_DESIGN_DRAW_POST) {
- scrl_design(scrl, mask, mode);
-
- /*Draw the cursor*/
- lv_obj_t * ta = lv_obj_get_parent(scrl);
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- if(ext->cursor.type == LV_CURSOR_NONE || (ext->cursor.type & LV_CURSOR_HIDDEN) || ext->cursor.state == 0) {
- return true; /*The cursor is not visible now*/
- }
-
- lv_style_t cur_style;
- get_cursor_style(ta, &cur_style);
-
- const char * txt = lv_label_get_text(ext->label);
-
- /*Draw he cursor according to the type*/
- lv_area_t cur_area;
- lv_area_copy(&cur_area, &ext->cursor.area);
-
- cur_area.x1 += ext->label->coords.x1;
- cur_area.y1 += ext->label->coords.y1;
- cur_area.x2 += ext->label->coords.x1;
- cur_area.y2 += ext->label->coords.y1;
-
- lv_opa_t opa_scale = lv_obj_get_opa_scale(ta);
-
- if(ext->cursor.type == LV_CURSOR_LINE) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
- } else if(ext->cursor.type == LV_CURSOR_BLOCK) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
-
- char letter_buf[8] = {0};
- memcpy(letter_buf, &txt[ext->cursor.txt_byte_pos], lv_txt_encoded_size(&txt[ext->cursor.txt_byte_pos]));
-
- cur_area.x1 += cur_style.body.padding.left;
- cur_area.y1 += cur_style.body.padding.top;
- lv_draw_label(&cur_area, mask, &cur_style, opa_scale, letter_buf, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(ta));
-
- } else if(ext->cursor.type == LV_CURSOR_OUTLINE) {
- cur_style.body.opa = LV_OPA_TRANSP;
- if(cur_style.body.border.width == 0) cur_style.body.border.width = 1; /*Be sure the border will be drawn*/
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
- } else if(ext->cursor.type == LV_CURSOR_UNDERLINE) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
- }
- }
-
- return true;
-}
-
-/**
- * Signal function of the text area
- * @param ta pointer to a text area object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(ta, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(sign == LV_SIGNAL_CLEANUP) {
- if(ext->pwd_tmp != NULL) lv_mem_free(ext->pwd_tmp);
-
- /* (The created label will be deleted automatically) */
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- if(ext->label) {
- lv_obj_t * scrl = lv_page_get_scrl(ta);
- const lv_style_t * style_ta = lv_obj_get_style(ta);
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
- if(ext->one_line) {
- /*In one line mode refresh the Text Area height because 'vpad' can modify it*/
- const lv_style_t * style_label = lv_obj_get_style(ext->label);
- lv_coord_t font_h = lv_font_get_line_height(style_label->text.font);
- lv_obj_set_height(ext->label, font_h);
- lv_obj_set_height(ta, font_h + style_ta->body.padding.top + style_ta->body.padding.bottom +
- style_scrl->body.padding.top + style_scrl->body.padding.bottom);
- } else {
- /*In not one line mode refresh the Label width because 'hpad' can modify it*/
- lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
- lv_obj_set_pos(ext->label, style_scrl->body.padding.left,
- style_scrl->body.padding.right); /*Be sure the Label is in the correct position*/
-
- if(ext->placeholder) {
- lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
- lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.left,
- style_scrl->body.padding.top); /*Be sure the placeholder is in the correct position*/
- }
- }
- lv_label_set_text(ext->label, NULL);
- }
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /*Set the label width according to the text area width*/
- if(ext->label) {
- if(lv_obj_get_width(ta) != lv_area_get_width(param) || lv_obj_get_height(ta) != lv_area_get_height(param)) {
- lv_obj_t * scrl = lv_page_get_scrl(ta);
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
- lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
- lv_obj_set_pos(ext->label, style_scrl->body.padding.left, style_scrl->body.padding.top);
- lv_label_set_text(ext->label, NULL); /*Refresh the label*/
-
- refr_cursor_area(ta);
- }
- }
- /*Set the placeholder width according to the text area width*/
- if(ext->placeholder) {
- if(lv_obj_get_width(ta) != lv_area_get_width(param) || lv_obj_get_height(ta) != lv_area_get_height(param)) {
- lv_obj_t * scrl = lv_page_get_scrl(ta);
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
- lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
- lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.left, style_scrl->body.padding.top);
- lv_label_set_text(ext->placeholder, NULL); /*Refresh the label*/
-
- refr_cursor_area(ta);
- }
- }
- } else if(sign == LV_SIGNAL_CONTROL) {
- uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
- if(c == LV_KEY_RIGHT)
- lv_ta_cursor_right(ta);
- else if(c == LV_KEY_LEFT)
- lv_ta_cursor_left(ta);
- else if(c == LV_KEY_UP)
- lv_ta_cursor_up(ta);
- else if(c == LV_KEY_DOWN)
- lv_ta_cursor_down(ta);
- else if(c == LV_KEY_BACKSPACE)
- lv_ta_del_char(ta);
- else if(c == LV_KEY_DEL)
- lv_ta_del_char_forward(ta);
- else if(c == LV_KEY_HOME)
- lv_ta_set_cursor_pos(ta, 0);
- else if(c == LV_KEY_END)
- lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
- else {
- lv_ta_add_char(ta, c);
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- } else if(sign == LV_SIGNAL_DEFOCUS) {
- lv_cursor_type_t cur_type;
- cur_type = lv_ta_get_cursor_type(ta);
- lv_ta_set_cursor_type(ta, cur_type | LV_CURSOR_HIDDEN);
- } else if(sign == LV_SIGNAL_FOCUS) {
-#if LV_USE_GROUP
- lv_cursor_type_t cur_type;
- cur_type = lv_ta_get_cursor_type(ta);
- lv_group_t * g = lv_obj_get_group(ta);
- bool editing = lv_group_get_editing(g);
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
-
- /*Encoders need special handling*/
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
- if(editing)
- lv_ta_set_cursor_type(ta, cur_type & (~LV_CURSOR_HIDDEN));
- else
- lv_ta_set_cursor_type(ta, cur_type | LV_CURSOR_HIDDEN);
- } else {
- lv_ta_set_cursor_type(ta, cur_type & (~LV_CURSOR_HIDDEN));
- }
-#endif
- } else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESSING || sign == LV_SIGNAL_PRESS_LOST ||
- sign == LV_SIGNAL_RELEASED) {
- update_cursor_position_on_click(ta, sign, (lv_indev_t *)param);
- }
- return res;
-}
-
-/**
- * Signal function of the scrollable part of the text area
- * @param scrl pointer to scrollable part of a text area object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = scrl_signal(scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * ta = lv_obj_get_parent(scrl);
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- /*Set ext. size because the cursor might be out of this object*/
- const lv_style_t * style_label = lv_obj_get_style(ext->label);
- lv_coord_t font_h = lv_font_get_line_height(style_label->text.font);
- scrl->ext_draw_pad = LV_MATH_MAX(scrl->ext_draw_pad, style_label->text.line_space + font_h);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /*Set the label width according to the text area width*/
- if(ext->label) {
- if(lv_obj_get_width(scrl) != lv_area_get_width(param) ||
- lv_obj_get_height(scrl) != lv_area_get_height(param)) {
-
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
- lv_obj_set_width(ext->label, lv_page_get_fit_width(ta));
- lv_obj_set_pos(ext->label, style_scrl->body.padding.left, style_scrl->body.padding.top);
- lv_label_set_text(ext->label, NULL); /*Refresh the label*/
-
- refr_cursor_area(ta);
- }
- }
- } else if(sign == LV_SIGNAL_PRESSING || sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESS_LOST ||
- sign == LV_SIGNAL_RELEASED) {
- update_cursor_position_on_click(ta, sign, (lv_indev_t *)param);
- }
-
- return res;
-}
-
-#if LV_USE_ANIMATION
-
-/**
- * Called to blink the cursor
- * @param ta pointer to a text area
- * @param hide 1: hide the cursor, 0: show it
- */
-static void cursor_blink_anim(lv_obj_t * ta, lv_anim_value_t show)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(show != ext->cursor.state) {
- ext->cursor.state = show == 0 ? 0 : 1;
- if(ext->cursor.type != LV_CURSOR_NONE && (ext->cursor.type & LV_CURSOR_HIDDEN) == 0) {
- lv_area_t area_tmp;
- lv_area_copy(&area_tmp, &ext->cursor.area);
- area_tmp.x1 += ext->label->coords.x1;
- area_tmp.y1 += ext->label->coords.y1;
- area_tmp.x2 += ext->label->coords.x1;
- area_tmp.y2 += ext->label->coords.y1;
- lv_obj_invalidate_area(ta, &area_tmp);
- }
- }
-}
-
-/**
- * Dummy function to animate char hiding in pwd mode.
- * Does nothing, but a function is required in car hiding anim.
- * (pwd_char_hider callback do the real job)
- * @param ta unused
- * @param x unused
- */
-static void pwd_char_hider_anim(lv_obj_t * ta, lv_anim_value_t x)
-{
- (void)ta;
- (void)x;
-}
-
-/**
- * Call when an animation is ready to convert all characters to '*'
- * @param a pointer to the animation
- */
-static void pwd_char_hider_anim_ready(lv_anim_t * a)
-{
- lv_obj_t * ta = a->var;
- pwd_char_hider(ta);
-}
-#endif
-
-/**
- * Hide all characters (convert them to '*')
- * @param ta: pointer to text area object
- */
-static void pwd_char_hider(lv_obj_t * ta)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->pwd_mode != 0) {
- char * txt = lv_label_get_text(ext->label);
- int16_t len = lv_txt_get_encoded_length(txt);
- bool refr = false;
- uint16_t i;
- for(i = 0; i < len; i++) {
- txt[i] = '*';
- refr = true;
- }
-
- txt[i] = '\0';
-
- if(refr != false) lv_label_set_text(ext->label, txt);
- }
-}
-
-/**
- * Test an unicode character if it is accepted or not. Checks max length and accepted char list.
- * @param ta pointer to a test area object
- * @param c an unicode character
- * @return true: accapted; false: rejected
- */
-static bool char_is_accepted(lv_obj_t * ta, uint32_t c)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- /*If no restriction accept it*/
- if(ext->accapted_chars == NULL && ext->max_length == 0) return true;
-
- /*Too many characters?*/
- if(ext->max_length > 0 && lv_txt_get_encoded_length(lv_ta_get_text(ta)) >= ext->max_length) {
- return false;
- }
-
- /*Accepted character?*/
- if(ext->accapted_chars) {
- uint32_t i = 0;
- uint32_t a;
- while(ext->accapted_chars[i] != '\0') {
- a = lv_txt_encoded_next(ext->accapted_chars, &i);
- if(a == c) return true; /*Accepted*/
- }
-
- return false; /*The character wasn't in the list*/
- } else {
- return true; /*If the accepted char list in not specified the accept the character*/
- }
-}
-
-static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
-
- if(ext->cursor.style) {
- lv_style_copy(style_res, ext->cursor.style);
- } else {
- /*If cursor style is not specified then use the modified label style */
- lv_style_copy(style_res, label_style);
- lv_color_t clv_color_tmp = style_res->text.color; /*Make letter color to cursor color*/
- style_res->text.color =
- style_res->body.main_color; /*In block mode the letter color will be current background color*/
- style_res->body.main_color = clv_color_tmp;
- style_res->body.grad_color = clv_color_tmp;
- style_res->body.border.color = clv_color_tmp;
- style_res->body.border.opa = LV_OPA_COVER;
- style_res->body.border.width = 1;
- style_res->body.shadow.width = 0;
- style_res->body.radius = 0;
- style_res->body.opa = LV_OPA_COVER;
- style_res->body.padding.left = 0;
- style_res->body.padding.right = 0;
- style_res->body.padding.top = 0;
- style_res->body.padding.bottom = 0;
- style_res->line.width = 1;
- }
-}
-
-static void refr_cursor_area(lv_obj_t * ta)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
-
- const lv_style_t * label_style = lv_obj_get_style(ext->label);
-
- lv_style_t cur_style;
- get_cursor_style(ta, &cur_style);
-
- uint16_t cur_pos = lv_ta_get_cursor_pos(ta);
- const char * txt = lv_label_get_text(ext->label);
-
- uint32_t byte_pos;
- byte_pos = lv_txt_encoded_get_byte_id(txt, cur_pos);
-
- uint32_t letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
-
- lv_coord_t letter_h = lv_font_get_line_height(label_style->text.font);
-
- /*Set letter_w (set not 0 on non printable but valid chars)*/
- lv_coord_t letter_w;
- if(letter == '\0' || letter == '\n' || letter == '\r') {
- letter_w = lv_font_get_glyph_width(label_style->text.font, ' ', '\0');
- } else {
- /*`letter_next` parameter is '\0' to ignore kerning*/
- letter_w = lv_font_get_glyph_width(label_style->text.font, letter, '\0');
- }
-
- lv_point_t letter_pos;
- lv_label_get_letter_pos(ext->label, cur_pos, &letter_pos);
-
- /*If the cursor is out of the text (most right) draw it to the next line*/
- if(letter_pos.x + ext->label->coords.x1 + letter_w > ext->label->coords.x2 && ext->one_line == 0 &&
- lv_label_get_align(ext->label) != LV_LABEL_ALIGN_RIGHT) {
- letter_pos.x = 0;
- letter_pos.y += letter_h + label_style->text.line_space;
-
- if(letter != '\0') {
- byte_pos += lv_txt_encoded_size(&txt[byte_pos]);
- letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
- }
-
- if(letter == '\0' || letter == '\n' || letter == '\r') {
- letter_w = lv_font_get_glyph_width(label_style->text.font, ' ', '\0');
- } else {
- letter_w = lv_font_get_glyph_width(label_style->text.font, letter, '\0');
- }
- }
-
- /*Save the byte position. It is required to draw `LV_CURSOR_BLOCK`*/
- ext->cursor.txt_byte_pos = byte_pos;
-
- /*Draw he cursor according to the type*/
- lv_area_t cur_area;
-
- if(ext->cursor.type == LV_CURSOR_LINE) {
- cur_area.x1 =
- letter_pos.x + cur_style.body.padding.left - (cur_style.line.width >> 1) - (cur_style.line.width & 0x1);
- cur_area.y1 = letter_pos.y + cur_style.body.padding.top;
- cur_area.x2 = letter_pos.x + cur_style.body.padding.right + (cur_style.line.width >> 1);
- cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h;
- } else if(ext->cursor.type == LV_CURSOR_BLOCK) {
- cur_area.x1 = letter_pos.x - cur_style.body.padding.left;
- cur_area.y1 = letter_pos.y - cur_style.body.padding.top;
- cur_area.x2 = letter_pos.x + cur_style.body.padding.right + letter_w;
- cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h;
-
- } else if(ext->cursor.type == LV_CURSOR_OUTLINE) {
- cur_area.x1 = letter_pos.x - cur_style.body.padding.left;
- cur_area.y1 = letter_pos.y - cur_style.body.padding.top;
- cur_area.x2 = letter_pos.x + cur_style.body.padding.right + letter_w;
- cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h;
- } else if(ext->cursor.type == LV_CURSOR_UNDERLINE) {
- cur_area.x1 = letter_pos.x + cur_style.body.padding.left;
- cur_area.y1 = letter_pos.y + cur_style.body.padding.top + letter_h - (cur_style.line.width >> 1);
- cur_area.x2 = letter_pos.x + cur_style.body.padding.right + letter_w;
- cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h + (cur_style.line.width >> 1) +
- (cur_style.line.width & 0x1);
- }
-
- /*Save the new area*/
- lv_area_t area_tmp;
- lv_area_copy(&area_tmp, &ext->cursor.area);
- area_tmp.x1 += ext->label->coords.x1;
- area_tmp.y1 += ext->label->coords.y1;
- area_tmp.x2 += ext->label->coords.x1;
- area_tmp.y2 += ext->label->coords.y1;
- lv_obj_invalidate_area(ta, &area_tmp);
-
- lv_area_copy(&ext->cursor.area, &cur_area);
-
- lv_area_copy(&area_tmp, &ext->cursor.area);
- area_tmp.x1 += ext->label->coords.x1;
- area_tmp.y1 += ext->label->coords.y1;
- area_tmp.x2 += ext->label->coords.x1;
- area_tmp.y2 += ext->label->coords.y1;
- lv_obj_invalidate_area(ta, &area_tmp);
-}
-
-static void placeholder_update(lv_obj_t * ta)
-{
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- const char * ta_text;
-
- if(ext->placeholder == NULL) return;
-
- ta_text = lv_ta_get_text(ta);
-
- if(ta_text[0] == '\0') {
- /*Be sure the main label and the placeholder has the same coordinates*/
- lv_obj_t * scrl = lv_page_get_scrl(ta);
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
- lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.left, style_scrl->body.padding.top);
- lv_obj_set_pos(ext->label, style_scrl->body.padding.left, style_scrl->body.padding.top);
-
- lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
- lv_obj_set_hidden(ext->placeholder, false);
- } else {
- lv_obj_set_hidden(ext->placeholder, true);
- }
-}
-
-static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, lv_indev_t * click_source)
-{
-
- if(click_source == NULL) return;
-
- lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(ext->cursor.click_pos == 0) return;
- if(ext->cursor.type == LV_CURSOR_NONE) return;
-
- if(lv_indev_get_type(click_source) == LV_INDEV_TYPE_KEYPAD ||
- lv_indev_get_type(click_source) == LV_INDEV_TYPE_ENCODER) {
- return;
- }
-
- lv_area_t label_coords;
- lv_obj_get_coords(ext->label, &label_coords);
-
- lv_point_t point_act, vect_act;
- lv_indev_get_point(click_source, &point_act);
- lv_indev_get_vect(click_source, &vect_act);
-
- if(point_act.x < 0 || point_act.y < 0) return; /*Ignore event from keypad*/
- lv_point_t rel_pos;
- rel_pos.x = point_act.x - label_coords.x1;
- rel_pos.y = point_act.y - label_coords.y1;
-
- lv_coord_t label_width = lv_obj_get_width(ext->label);
-
- uint16_t char_id_at_click;
-
-#if LV_LABEL_TEXT_SEL
- lv_label_ext_t * ext_label = lv_obj_get_ext_attr(ext->label);
- bool click_outside_label;
- /*Check if the click happened on the left side of the area outside the label*/
- if(rel_pos.x < 0) {
- char_id_at_click = 0;
- click_outside_label = true;
- }
- /*Check if the click happened on the right side of the area outside the label*/
- else if(rel_pos.x >= label_width) {
- char_id_at_click = LV_TA_CURSOR_LAST;
- click_outside_label = true;
- } else {
- char_id_at_click = lv_label_get_letter_on(ext->label, &rel_pos);
- click_outside_label = !lv_label_is_char_under_pos(ext->label, &rel_pos);
- }
-
- if(ext->text_sel_en) {
- if(!ext->text_sel_in_prog && !click_outside_label && sign == LV_SIGNAL_PRESSED) {
- /*Input device just went down. Store the selection start position*/
- ext->sel.start = char_id_at_click;
- ext->sel.end = LV_LABEL_TEXT_SEL_OFF;
- ext->text_sel_in_prog = 1;
- lv_obj_set_drag(lv_page_get_scrl(ta), false);
- } else if(ext->text_sel_in_prog && sign == LV_SIGNAL_PRESSING) {
- /*Input device may be moving. Store the end position */
- ext->sel.end = char_id_at_click;
- } else if(ext->text_sel_in_prog && (sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_RELEASED)) {
- /*Input device is released. Check if anything was selected.*/
- lv_obj_set_drag(lv_page_get_scrl(ta), true);
- }
- }
-
- if(ext->text_sel_in_prog || sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, char_id_at_click);
-
- if(ext->text_sel_in_prog) {
- /*If the selected area has changed then update the real values and*/
-
- /*Invalidate the text area.*/
- if(ext->sel.start > ext->sel.end) {
- if(ext_label->txt_sel_start != ext->sel.end || ext_label->txt_sel_end != ext->sel.start) {
- ext_label->txt_sel_start = ext->sel.end;
- ext_label->txt_sel_end = ext->sel.start;
- lv_obj_invalidate(ta);
- }
- } else if(ext->sel.start < ext->sel.end) {
- if(ext_label->txt_sel_start != ext->sel.start || ext_label->txt_sel_end != ext->sel.end) {
- ext_label->txt_sel_start = ext->sel.start;
- ext_label->txt_sel_end = ext->sel.end;
- lv_obj_invalidate(ta);
- }
- } else {
- if(ext_label->txt_sel_start != LV_DRAW_LABEL_NO_TXT_SEL || ext_label->txt_sel_end != LV_DRAW_LABEL_NO_TXT_SEL) {
- ext_label->txt_sel_start = LV_DRAW_LABEL_NO_TXT_SEL;
- ext_label->txt_sel_end = LV_DRAW_LABEL_NO_TXT_SEL;
- lv_obj_invalidate(ta);
- }
- }
- /*Finish selection if necessary */
- if(sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_RELEASED) {
- ext->text_sel_in_prog = 0;
- }
- }
-#else
- /*Check if the click happened on the left side of the area outside the label*/
- if(rel_pos.x < 0) {
- char_id_at_click = 0;
- }
- /*Check if the click happened on the right side of the area outside the label*/
- else if(rel_pos.x >= label_width) {
- char_id_at_click = LV_TA_CURSOR_LAST;
- } else {
- char_id_at_click = lv_label_get_letter_on(ext->label, &rel_pos);
- }
-
- if(sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, char_id_at_click);
-#endif
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_ta.h b/src/libs/lvgl/src/lv_objx/lv_ta.h
deleted file mode 100644
index afbb94bc..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_ta.h
+++ /dev/null
@@ -1,478 +0,0 @@
-/**
- * @file lv_ta.h
- *
- */
-
-#ifndef LV_TA_H
-#define LV_TA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_TA != 0
-
-/*Testing of dependencies*/
-#if LV_USE_PAGE == 0
-#error "lv_ta: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_ta: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_page.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_TA_CURSOR_LAST (0x7FFF) /*Put the cursor after the last character*/
-
-LV_EXPORT_CONST_INT(LV_TA_CURSOR_LAST);
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Style of text area's cursor. */
-enum {
- LV_CURSOR_NONE, /**< No cursor */
- LV_CURSOR_LINE, /**< Vertical line */
- LV_CURSOR_BLOCK, /**< Rectangle */
- LV_CURSOR_OUTLINE, /**< Outline around character */
- LV_CURSOR_UNDERLINE, /**< Horizontal line under character */
- LV_CURSOR_HIDDEN = 0x08, /**< This flag can be ORed to any of the other values to temporarily hide the cursor */
-};
-typedef uint8_t lv_cursor_type_t;
-
-/*Data of text area*/
-typedef struct
-{
- lv_page_ext_t page; /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * label; /*Label of the text area*/
- lv_obj_t * placeholder; /*Place holder label. only visible if text is an empty string*/
- char * pwd_tmp; /*Used to store the original text in password mode*/
- const char * accapted_chars; /*Only these characters will be accepted. NULL: accept all*/
- uint16_t max_length; /*The max. number of characters. 0: no limit*/
- uint16_t pwd_show_time; /*Time to show characters in password mode before change them to '*' */
- struct
- {
- const lv_style_t * style; /* Style of the cursor (NULL to use label's style)*/
- lv_coord_t valid_x; /* Used when stepping up/down to a shorter line.
- * (Used by the library)*/
- uint16_t pos; /* The current cursor position
- * (0: before 1st letter; 1: before 2nd letter ...)*/
- uint16_t blink_time; /*Blink period*/
- lv_area_t area; /* Cursor area relative to the Text Area*/
- uint16_t txt_byte_pos; /* Byte index of the letter after (on) the cursor*/
- lv_cursor_type_t type : 4; /* Shape of the cursor*/
- uint8_t state : 1; /*Cursor is visible now or not (Handled by the library)*/
- uint8_t click_pos : 1; /*1: Enable positioning the cursor by clicking the text area*/
- } cursor;
-#if LV_LABEL_TEXT_SEL
- lv_draw_label_txt_sel_t sel; /*Temporary values for text selection*/
- uint8_t text_sel_in_prog : 1; /*User is in process of selecting */
- uint8_t text_sel_en : 1; /*Text can be selected on this text area*/
-#endif
- uint8_t pwd_mode : 1; /*Replace characters with '*' */
- uint8_t one_line : 1; /*One line mode (ignore line breaks)*/
-} lv_ta_ext_t;
-
-/** Possible text areas tyles. */
-enum {
- LV_TA_STYLE_BG, /**< Text area background style */
- LV_TA_STYLE_SB, /**< Scrollbar style */
- LV_TA_STYLE_CURSOR, /**< Cursor style */
- LV_TA_STYLE_EDGE_FLASH, /**< Edge flash style */
- LV_TA_STYLE_PLACEHOLDER, /**< Placeholder style */
-};
-typedef uint8_t lv_ta_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a text area objects
- * @param par pointer to an object, it will be the parent of the new text area
- * @param copy pointer to a text area object, if not NULL then the new object will be copied from it
- * @return pointer to the created text area
- */
-lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Insert a character to the current cursor position.
- * To add a wide char, e.g. 'Á' use `lv_txt_encoded_conv_wc('Á')`
- * @param ta pointer to a text area object
- * @param c a character (e.g. 'a')
- */
-void lv_ta_add_char(lv_obj_t * ta, uint32_t c);
-
-/**
- * Insert a text to the current cursor position
- * @param ta pointer to a text area object
- * @param txt a '\0' terminated string to insert
- */
-void lv_ta_add_text(lv_obj_t * ta, const char * txt);
-
-/**
- * Delete a the left character from the current cursor position
- * @param ta pointer to a text area object
- */
-void lv_ta_del_char(lv_obj_t * ta);
-
-/**
- * Delete the right character from the current cursor position
- * @param ta pointer to a text area object
- */
-void lv_ta_del_char_forward(lv_obj_t * ta);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the text of a text area
- * @param ta pointer to a text area
- * @param txt pointer to the text
- */
-void lv_ta_set_text(lv_obj_t * ta, const char * txt);
-
-/**
- * Set the placeholder text of a text area
- * @param ta pointer to a text area
- * @param txt pointer to the text
- */
-void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt);
-
-/**
- * Set the cursor position
- * @param obj pointer to a text area object
- * @param pos the new cursor position in character index
- * < 0 : index from the end of the text
- * LV_TA_CURSOR_LAST: go after the last character
- */
-void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos);
-
-/**
- * Set the cursor type.
- * @param ta pointer to a text area object
- * @param cur_type: element of 'lv_cursor_type_t'
- */
-void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type);
-
-/**
- * Enable/Disable the positioning of the the cursor by clicking the text on the text area.
- * @param ta pointer to a text area object
- * @param en true: enable click positions; false: disable
- */
-void lv_ta_set_cursor_click_pos(lv_obj_t * ta, bool en);
-
-/**
- * Enable/Disable password mode
- * @param ta pointer to a text area object
- * @param en true: enable, false: disable
- */
-void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en);
-
-/**
- * Configure the text area to one line or back to normal
- * @param ta pointer to a Text area object
- * @param en true: one line, false: normal
- */
-void lv_ta_set_one_line(lv_obj_t * ta, bool en);
-
-/**
- * Set the alignment of the text area.
- * In one line mode the text can be scrolled only with `LV_LABEL_ALIGN_LEFT`.
- * This function should be called if the size of text area changes.
- * @param ta pointer to a text are object
- * @param align the desired alignment from `lv_label_align_t`. (LV_LABEL_ALIGN_LEFT/CENTER/RIGHT)
- */
-void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align);
-
-/**
- * Set a list of characters. Only these characters will be accepted by the text area
- * @param ta pointer to Text Area
- * @param list list of characters. Only the pointer is saved. E.g. "+-.,0123456789"
- */
-void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list);
-
-/**
- * Set max length of a Text Area.
- * @param ta pointer to Text Area
- * @param num the maximal number of characters can be added (`lv_ta_set_text` ignores it)
- */
-void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num);
-
-/**
- * In `LV_EVENT_INSERT` the text which planned to be inserted can be replaced by an other text.
- * It can be used to add automatic formatting to the text area.
- * @param ta pointer to a text area.
- * @param txt pointer to a new string to insert. If `""` no text will be added.
- * The variable must be live after the `event_cb` exists. (Should be `global` or
- * `static`)
- */
-void lv_ta_set_insert_replace(lv_obj_t * ta, const char * txt);
-
-/**
- * Set the scroll bar mode of a text area
- * @param ta pointer to a text area object
- * @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
- */
-static inline void lv_ta_set_sb_mode(lv_obj_t * ta, lv_sb_mode_t mode)
-{
- lv_page_set_sb_mode(ta, mode);
-}
-
-/**
- * Enable the scroll propagation feature. If enabled then the Text area will move its parent if
- * there is no more space to scroll.
- * @param ta pointer to a Text area
- * @param en true or false to enable/disable scroll propagation
- */
-static inline void lv_ta_set_scroll_propagation(lv_obj_t * ta, bool en)
-{
- lv_page_set_scroll_propagation(ta, en);
-}
-
-/**
- * Enable the edge flash effect. (Show an arc when the an edge is reached)
- * @param page pointer to a Text Area
- * @param en true or false to enable/disable end flash
- */
-static inline void lv_ta_set_edge_flash(lv_obj_t * ta, bool en)
-{
- lv_page_set_edge_flash(ta, en);
-}
-
-/**
- * Set a style of a text area
- * @param ta pointer to a text area object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * style);
-
-/**
- * Enable/disable selection mode.
- * @param ta pointer to a text area object
- * @param en true or false to enable/disable selection mode
- */
-void lv_ta_set_text_sel(lv_obj_t * ta, bool en);
-
-/**
- * Set how long show the password before changing it to '*'
- * @param ta pointer to Text area
- * @param time show time in milliseconds. 0: hide immediately.
- */
-void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time);
-
-/**
- * Set cursor blink animation time
- * @param ta pointer to Text area
- * @param time blink period. 0: disable blinking
- */
-void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the text of a text area. In password mode it gives the real text (not '*'s).
- * @param ta pointer to a text area object
- * @return pointer to the text
- */
-const char * lv_ta_get_text(const lv_obj_t * ta);
-
-/**
- * Get the placeholder text of a text area
- * @param ta pointer to a text area object
- * @return pointer to the text
- */
-const char * lv_ta_get_placeholder_text(lv_obj_t * ta);
-
-/**
- * Get the label of a text area
- * @param ta pointer to a text area object
- * @return pointer to the label object
- */
-lv_obj_t * lv_ta_get_label(const lv_obj_t * ta);
-
-/**
- * Get the current cursor position in character index
- * @param ta pointer to a text area object
- * @return the cursor position
- */
-uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta);
-
-/**
- * Get the current cursor type.
- * @param ta pointer to a text area object
- * @return element of 'lv_cursor_type_t'
- */
-lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta);
-
-/**
- * Get whether the cursor click positioning is enabled or not.
- * @param ta pointer to a text area object
- * @return true: enable click positions; false: disable
- */
-bool lv_ta_get_cursor_click_pos(lv_obj_t * ta);
-
-/**
- * Get the password mode attribute
- * @param ta pointer to a text area object
- * @return true: password mode is enabled, false: disabled
- */
-bool lv_ta_get_pwd_mode(const lv_obj_t * ta);
-
-/**
- * Get the one line configuration attribute
- * @param ta pointer to a text area object
- * @return true: one line configuration is enabled, false: disabled
- */
-bool lv_ta_get_one_line(const lv_obj_t * ta);
-
-/**
- * Get a list of accepted characters.
- * @param ta pointer to Text Area
- * @return list of accented characters.
- */
-const char * lv_ta_get_accepted_chars(lv_obj_t * ta);
-
-/**
- * Set max length of a Text Area.
- * @param ta pointer to Text Area
- * @return the maximal number of characters to be add
- */
-uint16_t lv_ta_get_max_length(lv_obj_t * ta);
-
-/**
- * Get the scroll bar mode of a text area
- * @param ta pointer to a text area object
- * @return scrollbar mode from 'lv_page_sb_mode_t' enum
- */
-static inline lv_sb_mode_t lv_ta_get_sb_mode(const lv_obj_t * ta)
-{
- return lv_page_get_sb_mode(ta);
-}
-
-/**
- * Get the scroll propagation property
- * @param ta pointer to a Text area
- * @return true or false
- */
-static inline bool lv_ta_get_scroll_propagation(lv_obj_t * ta)
-{
- return lv_page_get_scroll_propagation(ta);
-}
-
-/**
- * Get the scroll propagation property
- * @param ta pointer to a Text area
- * @return true or false
- */
-static inline bool lv_ta_get_edge_flash(lv_obj_t * ta)
-{
- return lv_page_get_edge_flash(ta);
-}
-
-/**
- * Get a style of a text area
- * @param ta pointer to a text area object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type);
-
-/**
- * Find whether text is selected or not.
- * @param ta Text area object
- * @return whether text is selected or not
- */
-bool lv_ta_text_is_selected(const lv_obj_t * ta);
-
-/**
- * Find whether selection mode is enabled.
- * @param ta pointer to a text area object
- * @return true: selection mode is enabled, false: disabled
- */
-bool lv_ta_get_text_sel_en(lv_obj_t * ta);
-
-/**
- * Set how long show the password before changing it to '*'
- * @param ta pointer to Text area
- * @return show time in milliseconds. 0: hide immediately.
- */
-uint16_t lv_ta_get_pwd_show_time(lv_obj_t * ta);
-
-/**
- * Set cursor blink animation time
- * @param ta pointer to Text area
- * @return time blink period. 0: disable blinking
- */
-uint16_t lv_ta_get_cursor_blink_time(lv_obj_t * ta);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Clear the selection on the text area.
- * @param ta Text area object
- */
-void lv_ta_clear_selection(lv_obj_t * ta);
-
-/**
- * Move the cursor one character right
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_right(lv_obj_t * ta);
-
-/**
- * Move the cursor one character left
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_left(lv_obj_t * ta);
-
-/**
- * Move the cursor one line down
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_down(lv_obj_t * ta);
-
-/**
- * Move the cursor one line up
- * @param ta pointer to a text area object
- */
-void lv_ta_cursor_up(lv_obj_t * ta);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_TA_H*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TA_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_table.c b/src/libs/lvgl/src/lv_objx/lv_table.c
deleted file mode 100644
index 1410cc3a..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_table.c
+++ /dev/null
@@ -1,894 +0,0 @@
-/**
- * @file lv_table.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_table.h"
-#if LV_USE_TABLE != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_misc/lv_txt.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_draw/lv_draw_label.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_table"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_mode_t mode);
-static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param);
-static lv_coord_t get_row_height(lv_obj_t * table, uint16_t row_id);
-static void refr_size(lv_obj_t * table);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_design_cb_t ancestor_scrl_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a table object
- * @param par pointer to an object, it will be the parent of the new table
- * @param copy pointer to a table object, if not NULL then the new object will be copied from it
- * @return pointer to the created table
- */
-lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("table create started");
-
- /*Create the ancestor of table*/
- lv_obj_t * new_table = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_table);
- if(new_table == NULL) return NULL;
-
- /*Allocate the table type specific extended data*/
- lv_table_ext_t * ext = lv_obj_allocate_ext_attr(new_table, sizeof(lv_table_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_table);
- if(ancestor_scrl_design == NULL) ancestor_scrl_design = lv_obj_get_design_cb(new_table);
-
- /*Initialize the allocated 'ext' */
- ext->cell_data = NULL;
- ext->cell_style[0] = &lv_style_plain;
- ext->cell_style[1] = &lv_style_plain;
- ext->cell_style[2] = &lv_style_plain;
- ext->cell_style[3] = &lv_style_plain;
- ext->col_cnt = 0;
- ext->row_cnt = 0;
-
- uint16_t i;
- for(i = 0; i < LV_TABLE_COL_MAX; i++) {
- ext->col_w[i] = LV_DPI;
- }
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_table, lv_table_signal);
- lv_obj_set_design_cb(new_table, lv_table_design);
-
- /*Init the new table table*/
- if(copy == NULL) {
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_table_set_style(new_table, LV_TABLE_STYLE_BG, th->style.table.bg);
- lv_table_set_style(new_table, LV_TABLE_STYLE_CELL1, th->style.table.cell);
- lv_table_set_style(new_table, LV_TABLE_STYLE_CELL2, th->style.table.cell);
- lv_table_set_style(new_table, LV_TABLE_STYLE_CELL3, th->style.table.cell);
- lv_table_set_style(new_table, LV_TABLE_STYLE_CELL4, th->style.table.cell);
- } else {
- lv_table_set_style(new_table, LV_TABLE_STYLE_BG, &lv_style_plain_color);
- }
- lv_obj_set_click(new_table, false); /*Can be removed if click support is added*/
- }
- /*Copy an existing table*/
- else {
- lv_table_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->cell_style[0] = copy_ext->cell_style[0];
- ext->cell_style[1] = copy_ext->cell_style[1];
- ext->cell_style[2] = copy_ext->cell_style[2];
- ext->cell_style[3] = copy_ext->cell_style[3];
- lv_table_set_row_cnt(new_table, copy_ext->row_cnt);
- lv_table_set_col_cnt(new_table, copy_ext->col_cnt);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_table);
- }
-
- LV_LOG_INFO("table created");
-
- return new_table;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the value of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param txt text to display in the cell. It will be copied and saved so this variable is not
- * required after this function call.
- */
-void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const char * txt)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
- LV_ASSERT_NULL(txt);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
- return;
- }
- uint32_t cell = row * ext->col_cnt + col;
- lv_table_cell_format_t format;
-
- /*Save the format byte*/
- if(ext->cell_data[cell]) {
- format.format_byte = ext->cell_data[cell][0];
- }
- /*Initialize the format byte*/
- else {
-#if LV_USE_BIDI
- lv_bidi_dir_t base_dir = lv_obj_get_base_dir(table);
- if(base_dir == LV_BIDI_DIR_LTR) format.s.align = LV_LABEL_ALIGN_LEFT;
- else if(base_dir == LV_BIDI_DIR_RTL) format.s.align = LV_LABEL_ALIGN_RIGHT;
- else if(base_dir == LV_BIDI_DIR_AUTO) format.s.align = lv_bidi_detect_base_dir(txt);
-#else
- format.s.align = LV_LABEL_ALIGN_LEFT;
-#endif
-
- format.s.right_merge = 0;
- format.s.type = 0;
- format.s.crop = 0;
- }
-
- ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/
- strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/
-
- ext->cell_data[cell][0] = format.format_byte;
- refr_size(table);
-}
-
-/**
- * Set the number of rows
- * @param table table pointer to a Table object
- * @param row_cnt number of rows
- */
-void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- uint16_t old_row_cnt = ext->row_cnt;
- ext->row_cnt = row_cnt;
-
- if(ext->row_cnt > 0 && ext->col_cnt > 0) {
- ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * ext->col_cnt * sizeof(char *));
-
- /*Initilize the new fields*/
- if(old_row_cnt < row_cnt) {
- uint16_t old_cell_cnt = old_row_cnt * ext->col_cnt;
- uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
- memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - old_cell_cnt) * sizeof(ext->cell_data[0]));
- }
- } else {
- lv_mem_free(ext->cell_data);
- ext->cell_data = NULL;
- }
-
- refr_size(table);
-}
-
-/**
- * Set the number of columns
- * @param table table pointer to a Table object
- * @param col_cnt number of columns. Must be < LV_TABLE_COL_MAX
- */
-void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- if(col_cnt >= LV_TABLE_COL_MAX) {
- LV_LOG_WARN("lv_table_set_col_cnt: too many columns. Must be < LV_TABLE_COL_MAX.");
- return;
- }
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- uint16_t old_col_cnt = ext->col_cnt;
- ext->col_cnt = col_cnt;
-
- if(ext->row_cnt > 0 && ext->col_cnt > 0) {
- ext->cell_data = lv_mem_realloc(ext->cell_data, ext->row_cnt * ext->col_cnt * sizeof(char *));
- /*Initilize the new fields*/
- if(old_col_cnt < col_cnt) {
- uint16_t old_cell_cnt = old_col_cnt * ext->row_cnt;
- uint32_t new_cell_cnt = ext->col_cnt * ext->row_cnt;
- memset(&ext->cell_data[old_cell_cnt], 0, (new_cell_cnt - old_cell_cnt) * sizeof(ext->cell_data[0]));
- }
-
- } else {
- lv_mem_free(ext->cell_data);
- ext->cell_data = NULL;
- }
- refr_size(table);
-}
-
-/**
- * Set the width of a column
- * @param table table pointer to a Table object
- * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
- * @param w width of the column
- */
-void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- if(col_id >= LV_TABLE_COL_MAX) {
- LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
- return;
- }
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- ext->col_w[col_id] = w;
- refr_size(table);
-}
-
-/**
- * Set the text align in a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param align LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER or LV_LABEL_ALIGN_RIGHT
- */
-void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, lv_label_align_t align)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
- return;
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL) {
- ext->cell_data[cell] = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
- ext->cell_data[cell][0] = 0;
- ext->cell_data[cell][1] = '\0';
- }
-
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- format.s.align = align;
- ext->cell_data[cell][0] = format.format_byte;
-}
-
-/**
- * Set the type of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param type 1,2,3 or 4. The cell style will be chosen accordingly.
- */
-void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_t type)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_type: invalid row or column");
- return;
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL) {
- ext->cell_data[cell] = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
- ext->cell_data[cell][0] = 0;
- ext->cell_data[cell][1] = '\0';
- }
-
- if(type > 0) type--; /*User gives 1,2,3,4 but easier to handle 0, 1, 2, 3*/
- if(type >= LV_TABLE_CELL_STYLE_CNT) type = LV_TABLE_CELL_STYLE_CNT - 1;
-
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- format.s.type = type;
- ext->cell_data[cell][0] = format.format_byte;
-}
-
-/**
- * Set the cell crop. (Don't adjust the height of the cell according to its content)
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param crop true: crop the cell content; false: set the cell height to the content.
- */
-void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool crop)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_crop: invalid row or column");
- return;
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL) {
- ext->cell_data[cell] = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
- ext->cell_data[cell][0] = 0;
- ext->cell_data[cell][1] = '\0';
- }
-
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- format.s.crop = crop;
- ext->cell_data[cell][0] = format.format_byte;
-}
-
-/**
- * Merge a cell with the right neighbor. The value of the cell to the right won't be displayed.
- * @param table table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param en true: merge right; false: don't merge right
- */
-void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col, bool en)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_merge_right: invalid row or column");
- return;
- }
-
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL) {
- ext->cell_data[cell] = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
- ext->cell_data[cell][0] = 0;
- ext->cell_data[cell][1] = '\0';
- }
-
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- format.s.right_merge = en ? 1 : 0;
- ext->cell_data[cell][0] = format.format_byte;
- refr_size(table);
-}
-
-/**
- * Set a style of a table.
- * @param table pointer to table object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
-
- switch(type) {
- case LV_TABLE_STYLE_BG:
- lv_obj_set_style(table, style);
- refr_size(table);
- break;
- case LV_TABLE_STYLE_CELL1:
- ext->cell_style[0] = style;
- refr_size(table);
- break;
- case LV_TABLE_STYLE_CELL2:
- ext->cell_style[1] = style;
- refr_size(table);
- break;
- case LV_TABLE_STYLE_CELL3:
- ext->cell_style[2] = style;
- refr_size(table);
- break;
- case LV_TABLE_STYLE_CELL4:
- ext->cell_style[3] = style;
- refr_size(table);
- break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return text in the cell
- */
-const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t col)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
- return "";
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL) return "";
-
- return &ext->cell_data[cell][1]; /*Skip the format byte*/
-}
-
-/**
- * Get the number of rows.
- * @param table table pointer to a Table object
- * @return number of rows.
- */
-uint16_t lv_table_get_row_cnt(lv_obj_t * table)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- return ext->row_cnt;
-}
-
-/**
- * Get the number of columns.
- * @param table table pointer to a Table object
- * @return number of columns.
- */
-uint16_t lv_table_get_col_cnt(lv_obj_t * table)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- return ext->col_cnt;
-}
-
-/**
- * Get the width of a column
- * @param table table pointer to a Table object
- * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
- * @return width of the column
- */
-lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- if(col_id >= LV_TABLE_COL_MAX) {
- LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
- return 0;
- }
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- return ext->col_w[col_id];
-}
-
-/**
- * Get the text align of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return LV_LABEL_ALIGN_LEFT (default in case of error) or LV_LABEL_ALIGN_CENTER or
- * LV_LABEL_ALIGN_RIGHT
- */
-lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, uint16_t col)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
- return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL)
- return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
- else {
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- return format.s.align;
- }
-}
-
-/**
- * Get the type of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return 1,2,3 or 4
- */
-lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, uint16_t col)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_get_cell_type: invalid row or column");
- return 1; /*Just return with something*/
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL)
- return 1; /*Just return with something*/
- else {
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- return format.s.type + 1; /*0,1,2,3 is stored but user sees 1,2,3,4*/
- }
-}
-
-/**
- * Get the crop property of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return true: text crop enabled; false: disabled
- */
-lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_get_cell_crop: invalid row or column");
- return false; /*Just return with something*/
- }
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL)
- return false; /*Just return with something*/
- else {
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- return format.s.crop;
- }
-}
-
-/**
- * Get the cell merge attribute.
- * @param table table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return true: merge right; false: don't merge right
- */
-bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- if(row >= ext->row_cnt || col >= ext->col_cnt) {
- LV_LOG_WARN("lv_table_get_cell_merge_right: invalid row or column");
- return false;
- }
-
- uint32_t cell = row * ext->col_cnt + col;
-
- if(ext->cell_data[cell] == NULL)
- return false;
- else {
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- return format.s.right_merge ? true : false;
- }
-}
-
-/**
- * Get style of a table.
- * @param table pointer to table object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t type)
-{
- LV_ASSERT_OBJ(table, LV_OBJX_NAME);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- const lv_style_t * style = NULL;
-
- switch(type) {
- case LV_TABLE_STYLE_BG: style = lv_obj_get_style(table); break;
- case LV_TABLE_STYLE_CELL1: style = ext->cell_style[0]; break;
- case LV_TABLE_STYLE_CELL2: style = ext->cell_style[1]; break;
- case LV_TABLE_STYLE_CELL3: style = ext->cell_style[2]; break;
- case LV_TABLE_STYLE_CELL4: style = ext->cell_style[3]; break;
- default: return NULL;
- }
-
- return style;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Handle the drawing related tasks of the tables
- * @param table pointer to an object
- * @param mask the object will be drawn only in this area
- * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
- * (return 'true' if yes)
- * LV_DESIGN_DRAW: draw the object (always return 'true')
- * LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
- */
-static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_mode_t mode)
-{
- /*Return false if the object is not covers the mask_p area*/
- if(mode == LV_DESIGN_COVER_CHK) {
- return false;
- }
- /*Draw the object*/
- else if(mode == LV_DESIGN_DRAW_MAIN) {
- ancestor_scrl_design(table, mask, mode);
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- const lv_style_t * bg_style = lv_obj_get_style(table);
- lv_coord_t h_row;
- lv_point_t txt_size;
- lv_area_t cell_area;
- lv_area_t txt_area;
- lv_txt_flag_t txt_flags;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(table);
-
- uint16_t col;
- uint16_t row;
- uint16_t cell = 0;
-
- cell_area.y2 = table->coords.y1 + bg_style->body.padding.top;
- for(row = 0; row < ext->row_cnt; row++) {
- h_row = get_row_height(table, row);
-
- cell_area.y1 = cell_area.y2 + 1;
- cell_area.y2 = cell_area.y1 + h_row - 1;
-
- cell_area.x2 = table->coords.x1 + bg_style->body.padding.left;
-
- for(col = 0; col < ext->col_cnt; col++) {
-
- lv_table_cell_format_t format;
- if(ext->cell_data[cell]) {
- format.format_byte = ext->cell_data[cell][0];
- } else {
- format.s.right_merge = 0;
- format.s.align = LV_LABEL_ALIGN_LEFT;
- format.s.type = 0;
- format.s.crop = 1;
- }
-
-
- lv_style_t cell_style;
- lv_style_copy(&cell_style, ext->cell_style[format.s.type]);
- cell_area.x1 = cell_area.x2 + 1;
- cell_area.x2 = cell_area.x1 + ext->col_w[col] - 1;
-
- uint16_t col_merge = 0;
- for(col_merge = 0; col_merge + col < ext->col_cnt - 1; col_merge++) {
-
- if(ext->cell_data[cell + col_merge] != NULL) {
- format.format_byte = ext->cell_data[cell + col_merge][0];
- if(format.s.right_merge)
- cell_area.x2 += ext->col_w[col + col_merge + 1];
- else
- break;
- } else {
- break;
- }
- }
-
- lv_draw_rect(&cell_area, mask, &cell_style, opa_scale);
-
- if(ext->cell_data[cell]) {
-
- txt_area.x1 = cell_area.x1 + cell_style.body.padding.left;
- txt_area.x2 = cell_area.x2 - cell_style.body.padding.right;
- txt_area.y1 = cell_area.y1 + cell_style.body.padding.top;
- txt_area.y2 = cell_area.y2 - cell_style.body.padding.bottom;
- /*Align the content to the middle if not cropped*/
- if(format.s.crop == 0) {
- txt_flags = LV_TXT_FLAG_NONE;
- } else {
- txt_flags = LV_TXT_FLAG_EXPAND;
- }
-
- lv_txt_get_size(&txt_size, ext->cell_data[cell] + 1, cell_style.text.font,
- cell_style.text.letter_space, cell_style.text.line_space,
- lv_area_get_width(&txt_area), txt_flags);
-
- /*Align the content to the middle if not cropped*/
- if(format.s.crop == 0) {
- txt_area.y1 = cell_area.y1 + h_row / 2 - txt_size.y / 2;
- txt_area.y2 = cell_area.y1 + h_row / 2 + txt_size.y / 2;
- }
-
- switch(format.s.align) {
- default:
- case LV_LABEL_ALIGN_LEFT: txt_flags |= LV_TXT_FLAG_NONE; break;
- case LV_LABEL_ALIGN_RIGHT: txt_flags |= LV_TXT_FLAG_RIGHT; break;
- case LV_LABEL_ALIGN_CENTER: txt_flags |= LV_TXT_FLAG_CENTER; break;
- }
-
- lv_area_t label_mask;
- bool label_mask_ok;
- label_mask_ok = lv_area_intersect(&label_mask, mask, &cell_area);
- if(label_mask_ok) {
- lv_draw_label(&txt_area, &label_mask, &cell_style, opa_scale, ext->cell_data[cell] + 1,
- txt_flags, NULL, NULL, NULL, lv_obj_get_base_dir(table));
- }
- /*Draw lines after '\n's*/
- lv_point_t p1;
- lv_point_t p2;
- p1.x = cell_area.x1;
- p2.x = cell_area.x2;
- uint16_t i;
- for(i = 1; ext->cell_data[cell][i] != '\0'; i++) {
- if(ext->cell_data[cell][i] == '\n') {
- ext->cell_data[cell][i] = '\0';
- lv_txt_get_size(&txt_size, ext->cell_data[cell] + 1, cell_style.text.font,
- cell_style.text.letter_space, cell_style.text.line_space,
- lv_area_get_width(&txt_area), txt_flags);
-
- p1.y = txt_area.y1 + txt_size.y + cell_style.text.line_space / 2;
- p2.y = txt_area.y1 + txt_size.y + cell_style.text.line_space / 2;
- lv_draw_line(&p1, &p2, mask, &cell_style, opa_scale);
-
- ext->cell_data[cell][i] = '\n';
- }
- }
- }
-
- cell += col_merge + 1;
- col += col_merge;
- }
- }
- }
- /*Post draw when the children are drawn*/
- else if(mode == LV_DESIGN_DRAW_POST) {
- }
-
- return true;
-}
-
-/**
- * Signal function of the table
- * @param table pointer to a table object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(table, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Free the cell texts*/
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- uint16_t cell;
- for(cell = 0; cell < ext->col_cnt * ext->row_cnt; cell++) {
- if(ext->cell_data[cell]) {
- lv_mem_free(ext->cell_data[cell]);
- ext->cell_data[cell] = NULL;
- }
- }
- if(ext->cell_data != NULL)
- lv_mem_free(ext->cell_data);
- }
-
- return res;
-}
-
-static void refr_size(lv_obj_t * table)
-{
- lv_coord_t h = 0;
- lv_coord_t w = 0;
-
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
-
- uint16_t i;
- for(i = 0; i < ext->col_cnt; i++) {
- w += ext->col_w[i];
- }
- for(i = 0; i < ext->row_cnt; i++) {
- h += get_row_height(table, i);
- }
-
- const lv_style_t * bg_style = lv_obj_get_style(table);
-
- w += bg_style->body.padding.left + bg_style->body.padding.right;
- h += bg_style->body.padding.top + bg_style->body.padding.bottom;
-
- lv_obj_set_size(table, w + 1, h + 1);
- lv_obj_invalidate(table);
-}
-
-static lv_coord_t get_row_height(lv_obj_t * table, uint16_t row_id)
-{
- lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
- lv_point_t txt_size;
- lv_coord_t txt_w;
- const lv_style_t * cell_style;
-
- uint16_t row_start = row_id * ext->col_cnt;
- uint16_t cell;
- uint16_t col;
- lv_coord_t h_max = lv_font_get_line_height(ext->cell_style[0]->text.font) + ext->cell_style[0]->body.padding.top +
- ext->cell_style[0]->body.padding.bottom;
-
- for(cell = row_start, col = 0; cell < row_start + ext->col_cnt; cell++, col++) {
- if(ext->cell_data[cell] != NULL) {
-
- txt_w = ext->col_w[col];
- uint16_t col_merge = 0;
- for(col_merge = 0; col_merge + col < ext->col_cnt - 1; col_merge++) {
-
- if(ext->cell_data[cell + col_merge] != NULL) {
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell + col_merge][0];
- if(format.s.right_merge)
- txt_w += ext->col_w[col + col_merge + 1];
- else
- break;
- } else {
- break;
- }
- }
-
- lv_table_cell_format_t format;
- format.format_byte = ext->cell_data[cell][0];
- cell_style = ext->cell_style[format.s.type];
-
- /*With text crop assume 1 line*/
- if(format.s.crop) {
- h_max = LV_MATH_MAX(lv_font_get_line_height(cell_style->text.font) + cell_style->body.padding.top +
- cell_style->body.padding.bottom,
- h_max);
- }
- /*Without text crop calculate the height of the text in the cell*/
- else {
- txt_w -= cell_style->body.padding.left + cell_style->body.padding.right;
-
- lv_txt_get_size(&txt_size, ext->cell_data[cell] + 1, cell_style->text.font,
- cell_style->text.letter_space, cell_style->text.line_space, txt_w, LV_TXT_FLAG_NONE);
-
- h_max = LV_MATH_MAX(txt_size.y + cell_style->body.padding.top + cell_style->body.padding.bottom, h_max);
- cell += col_merge;
- col += col_merge;
- }
- }
- }
-
- return h_max;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_table.h b/src/libs/lvgl/src/lv_objx/lv_table.h
deleted file mode 100644
index d6a0be7d..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_table.h
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * @file lv_table.h
- *
- */
-
-#ifndef LV_TABLE_H
-#define LV_TABLE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_TABLE != 0
-
-/*Testing of dependencies*/
-#if LV_USE_LABEL == 0
-#error "lv_table: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_label.h"
-
-/*********************
- * DEFINES
- *********************/
-#ifndef LV_TABLE_COL_MAX
-#define LV_TABLE_COL_MAX 12
-#endif
-
-#define LV_TABLE_CELL_STYLE_CNT 4
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * Internal table cell format structure.
- *
- * Use the `lv_table` APIs instead.
- */
-typedef union
-{
- struct
- {
- uint8_t align : 2;
- uint8_t right_merge : 1;
- uint8_t type : 2;
- uint8_t crop : 1;
- } s;
- uint8_t format_byte;
-} lv_table_cell_format_t;
-
-/*Data of table*/
-typedef struct
-{
- /*New data for this type */
- uint16_t col_cnt;
- uint16_t row_cnt;
- char ** cell_data;
- const lv_style_t * cell_style[LV_TABLE_CELL_STYLE_CNT];
- lv_coord_t col_w[LV_TABLE_COL_MAX];
-} lv_table_ext_t;
-
-/*Styles*/
-enum {
- LV_TABLE_STYLE_BG,
- LV_TABLE_STYLE_CELL1,
- LV_TABLE_STYLE_CELL2,
- LV_TABLE_STYLE_CELL3,
- LV_TABLE_STYLE_CELL4,
-};
-typedef uint8_t lv_table_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a table object
- * @param par pointer to an object, it will be the parent of the new table
- * @param copy pointer to a table object, if not NULL then the new object will be copied from it
- * @return pointer to the created table
- */
-lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the value of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param txt text to display in the cell. It will be copied and saved so this variable is not
- * required after this function call.
- */
-void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const char * txt);
-
-/**
- * Set the number of rows
- * @param table table pointer to a Table object
- * @param row_cnt number of rows
- */
-void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt);
-
-/**
- * Set the number of columns
- * @param table table pointer to a Table object
- * @param col_cnt number of columns. Must be < LV_TABLE_COL_MAX
- */
-void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt);
-
-/**
- * Set the width of a column
- * @param table table pointer to a Table object
- * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
- * @param w width of the column
- */
-void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w);
-
-/**
- * Set the text align in a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param align LV_LABEL_ALIGN_LEFT or LV_LABEL_ALIGN_CENTER or LV_LABEL_ALIGN_RIGHT
- */
-void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, lv_label_align_t align);
-
-/**
- * Set the type of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param type 1,2,3 or 4. The cell style will be chosen accordingly.
- */
-void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_t type);
-
-/**
- * Set the cell crop. (Don't adjust the height of the cell according to its content)
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param crop true: crop the cell content; false: set the cell height to the content.
- */
-void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool crop);
-
-/**
- * Merge a cell with the right neighbor. The value of the cell to the right won't be displayed.
- * @param table table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @param en true: merge right; false: don't merge right
- */
-void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col, bool en);
-
-/**
- * Set a style of a table.
- * @param table pointer to table object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the value of a cell.
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return text in the cell
- */
-const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t col);
-
-/**
- * Get the number of rows.
- * @param table table pointer to a Table object
- * @return number of rows.
- */
-uint16_t lv_table_get_row_cnt(lv_obj_t * table);
-
-/**
- * Get the number of columns.
- * @param table table pointer to a Table object
- * @return number of columns.
- */
-uint16_t lv_table_get_col_cnt(lv_obj_t * table);
-
-/**
- * Get the width of a column
- * @param table table pointer to a Table object
- * @param col_id id of the column [0 .. LV_TABLE_COL_MAX -1]
- * @return width of the column
- */
-lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id);
-
-/**
- * Get the text align of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return LV_LABEL_ALIGN_LEFT (default in case of error) or LV_LABEL_ALIGN_CENTER or
- * LV_LABEL_ALIGN_RIGHT
- */
-lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, uint16_t col);
-
-/**
- * Get the type of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return 1,2,3 or 4
- */
-lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, uint16_t col);
-
-/**
- * Get the crop property of a cell
- * @param table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return true: text crop enabled; false: disabled
- */
-lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col);
-
-/**
- * Get the cell merge attribute.
- * @param table table pointer to a Table object
- * @param row id of the row [0 .. row_cnt -1]
- * @param col id of the column [0 .. col_cnt -1]
- * @return true: merge right; false: don't merge right
- */
-bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col);
-
-/**
- * Get style of a table.
- * @param table pointer to table object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_TABLE*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TABLE_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_tabview.c b/src/libs/lvgl/src/lv_objx/lv_tabview.c
deleted file mode 100644
index 809cf241..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_tabview.c
+++ /dev/null
@@ -1,1175 +0,0 @@
-/**
- * @file lv_tab.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_tabview.h"
-#if LV_USE_TABVIEW != 0
-
-#include "lv_btnm.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_misc/lv_anim.h"
-#include "../lv_core/lv_disp.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_tabview"
-
-#if LV_USE_ANIMATION
-#ifndef LV_TABVIEW_DEF_ANIM_TIME
-#define LV_TABVIEW_DEF_ANIM_TIME 300 /*Animation time of focusing to the a list element [ms] (0: no animation) */
-#endif
-#else
-#undef LV_TABVIEW_DEF_ANIM_TIME
-#define LV_TABVIEW_DEF_ANIM_TIME 0 /*No animations*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * param);
-static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, void * param);
-static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param);
-
-static void tabpage_pressed_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
-static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
-static void tabpage_press_lost_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
-static void tab_btnm_event_cb(lv_obj_t * tab_btnm, lv_event_t event);
-static void tabview_realign(lv_obj_t * tabview);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_signal_cb_t page_signal;
-static lv_signal_cb_t page_scrl_signal;
-static const char * tab_def[] = {""};
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a Tab view object
- * @param par pointer to an object, it will be the parent of the new tab
- * @param copy pointer to a tab object, if not NULL then the new object will be copied from it
- * @return pointer to the created tab
- */
-lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("tab view create started");
-
- /*Create the ancestor of tab*/
- lv_obj_t * new_tabview = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_tabview);
- if(new_tabview == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_tabview);
-
- /*Allocate the tab type specific extended data*/
- lv_tabview_ext_t * ext = lv_obj_allocate_ext_attr(new_tabview, sizeof(lv_tabview_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- /*Initialize the allocated 'ext' */
- ext->drag_hor = 0;
- ext->draging = 0;
- ext->scroll_ver = 0;
- ext->slide_enable = 1;
- ext->tab_cur = 0;
- ext->point_last.x = 0;
- ext->point_last.y = 0;
- ext->content = NULL;
- ext->indic = NULL;
- ext->btns = NULL;
- ext->btns_pos = LV_TABVIEW_BTNS_POS_TOP;
-#if LV_USE_ANIMATION
- ext->anim_time = LV_TABVIEW_DEF_ANIM_TIME;
-#endif
- ext->btns_hide = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_tabview, lv_tabview_signal);
-
- /*Init the new tab tab*/
- if(copy == NULL) {
- ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
- LV_ASSERT_MEM(ext->tab_name_ptr);
- if(ext->tab_name_ptr == NULL) return NULL;
- ext->tab_name_ptr[0] = "";
- ext->tab_cnt = 0;
-
- /* Set a size which fits into the parent.
- * Don't use `par` directly because if the tabview is created on a page it is moved to the
- * scrollable so the parent has changed */
- lv_coord_t w;
- lv_coord_t h;
- if(par) {
- w = lv_obj_get_width_fit(lv_obj_get_parent(new_tabview));
- h = lv_obj_get_height_fit(lv_obj_get_parent(new_tabview));
- } else {
- w = lv_disp_get_hor_res(NULL);
- h = lv_disp_get_ver_res(NULL);
- }
-
- lv_obj_set_size(new_tabview, w, h);
-
- ext->content = lv_cont_create(new_tabview, NULL);
- ext->btns = lv_btnm_create(new_tabview, NULL);
- ext->indic = lv_obj_create(ext->btns, NULL);
-
- lv_obj_set_height(ext->btns, 3 * LV_DPI / 4);
- lv_btnm_set_map(ext->btns, tab_def);
- lv_obj_set_event_cb(ext->btns, tab_btnm_event_cb);
-
- lv_obj_set_width(ext->indic, LV_DPI);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
- lv_obj_set_click(ext->indic, false);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_cont_set_style(ext->content, LV_CONT_STYLE_MAIN, &lv_style_transp_tight);
- lv_obj_set_height(ext->content, lv_obj_get_height(new_tabview) - lv_obj_get_height(ext->btns));
- lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, th->style.tabview.bg);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, th->style.tabview.indic);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, th->style.tabview.btn.bg);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_REL, th->style.tabview.btn.rel);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_PR, th->style.tabview.btn.pr);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_REL, th->style.tabview.btn.tgl_rel);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_PR, th->style.tabview.btn.tgl_pr);
- } else {
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, &lv_style_plain);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, &lv_style_pretty);//transp);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, &lv_style_plain_color);
- }
- }
- /*Copy an existing tab view*/
- else {
- lv_tabview_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->point_last.x = 0;
- ext->point_last.y = 0;
- ext->btns = lv_btnm_create(new_tabview, copy_ext->btns);
- ext->indic = lv_obj_create(ext->btns, copy_ext->indic);
- ext->content = lv_cont_create(new_tabview, copy_ext->content);
-#if LV_USE_ANIMATION
- ext->anim_time = copy_ext->anim_time;
-#endif
-
- ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
- LV_ASSERT_MEM(ext->tab_name_ptr);
- if(ext->tab_name_ptr == NULL) return NULL;
- ext->tab_name_ptr[0] = "";
- lv_btnm_set_map(ext->btns, ext->tab_name_ptr);
-
- uint16_t i;
- lv_obj_t * new_tab;
- lv_obj_t * copy_tab;
- for(i = 0; i < copy_ext->tab_cnt; i++) {
- new_tab = lv_tabview_add_tab(new_tabview, copy_ext->tab_name_ptr[i]);
- copy_tab = lv_tabview_get_tab(copy, i);
- lv_page_set_style(new_tab, LV_PAGE_STYLE_BG, lv_page_get_style(copy_tab, LV_PAGE_STYLE_BG));
- lv_page_set_style(new_tab, LV_PAGE_STYLE_SCRL, lv_page_get_style(copy_tab, LV_PAGE_STYLE_SCRL));
- lv_page_set_style(new_tab, LV_PAGE_STYLE_SB, lv_page_get_style(copy_tab, LV_PAGE_STYLE_SB));
- }
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_tabview);
- }
-
- LV_LOG_INFO("tab view created");
-
- return new_tabview;
-}
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param tabview pointer to an object
- */
-void lv_tabview_clean(lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_obj_t * scrl = lv_page_get_scrl(tabview);
- lv_obj_clean(scrl);
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add a new tab with the given name
- * @param tabview pointer to Tab view object where to ass the new tab
- * @param name the text on the tab button
- * @return pointer to the created page object (lv_page). You can create your content here
- */
-lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
- LV_ASSERT_STR(name);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- /*Create the container page*/
- lv_obj_t * h = lv_page_create(ext->content, NULL);
- lv_obj_set_size(h, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
- lv_page_set_sb_mode(h, LV_SB_MODE_AUTO);
- lv_page_set_style(h, LV_PAGE_STYLE_BG, &lv_style_transp_tight);
- lv_page_set_style(h, LV_PAGE_STYLE_SCRL, &lv_style_transp);//plain_color);
-
- if(page_signal == NULL) page_signal = lv_obj_get_signal_cb(h);
- if(page_scrl_signal == NULL) page_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(h));
- lv_obj_set_signal_cb(h, tabpage_signal);
- lv_obj_set_signal_cb(lv_page_get_scrl(h), tabpage_scrl_signal);
-
- /*Extend the button matrix map with the new name*/
- char * name_dm;
- name_dm = lv_mem_alloc(strlen(name) + 1); /*+1 for the the closing '\0' */
- LV_ASSERT_MEM(name_dm);
- if(name_dm == NULL) return NULL;
- strcpy(name_dm, name);
-
- ext->tab_cnt++;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- ext->tab_name_ptr = lv_mem_realloc((void*)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- ext->tab_name_ptr = lv_mem_realloc((void*)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
- break;
- }
-
- LV_ASSERT_MEM(ext->tab_name_ptr);
- if(ext->tab_name_ptr == NULL) return NULL;
-
- /* FIXME: It is not possible yet to switch tab button position from/to top/bottom from/to left/right at runtime.
- * Method: clean extra \n when switch from LV_TABVIEW_BTNS_POS_LEFT or LV_TABVIEW_BTNS_POS_RIGHT
- * to LV_TABVIEW_BTNS_POS_TOP or LV_TABVIEW_BTNS_POS_BOTTOM.
- */
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- ext->tab_name_ptr[ext->tab_cnt - 1] = name_dm;
- ext->tab_name_ptr[ext->tab_cnt] = "";
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- if(ext->tab_cnt == 1) {
- ext->tab_name_ptr[0] = name_dm;
- ext->tab_name_ptr[1] = "";
- } else {
- ext->tab_name_ptr[ext->tab_cnt * 2 - 3] = "\n";
- ext->tab_name_ptr[ext->tab_cnt * 2 - 2] = name_dm;
- ext->tab_name_ptr[ext->tab_cnt * 2 - 1] = "";
- }
- break;
- }
-
- /* The button matrix's map still points to the old `tab_name_ptr` which might be freed by
- * `lv_mem_realloc`. So make its current map invalid*/
- lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
- btnm_ext->map_p = NULL;
-
- lv_btnm_set_map(ext->btns, ext->tab_name_ptr);
- lv_btnm_set_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_NO_REPEAT);
-
- /*Modify the indicator size*/
- const lv_style_t * style_tabs = lv_obj_get_style(ext->btns);
- lv_coord_t indic_size;
- lv_coord_t max_h, btn_h, act_y;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = (lv_obj_get_width(tabview) - style_tabs->body.padding.inner * (ext->tab_cnt - 1) -
- style_tabs->body.padding.left - style_tabs->body.padding.right) /
- ext->tab_cnt;
- lv_obj_set_width(ext->indic, indic_size);
- lv_obj_set_x(ext->indic, indic_size * ext->tab_cur + style_tabs->body.padding.inner * ext->tab_cur +
- style_tabs->body.padding.left);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- max_h = lv_obj_get_height(ext->btns) - style_tabs->body.padding.top - style_tabs->body.padding.bottom;
- btn_h = max_h - ((ext->tab_cnt - 1) * style_tabs->body.padding.inner);
- btn_h = btn_h / ext->tab_cnt;
- btn_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
- act_y = style_tabs->body.padding.top + ext->tab_cur * (btn_h + style_tabs->body.padding.inner);
-
- lv_obj_set_height(ext->indic, btn_h);
- lv_obj_set_y(ext->indic, act_y);
- break;
- }
-
- /*Set the first btn as active*/
- if(ext->tab_cnt == 1) {
- ext->tab_cur = 0;
- }
-
- tabview_realign(tabview); /*Set the size of the pages, tab buttons and indicator*/
-
- lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
-
- return h;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new tab
- * @param tabview pointer to Tab view object
- * @param id index of a tab to load
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- const lv_style_t * style = lv_obj_get_style(ext->content);
-
- if(id >= ext->tab_cnt) id = ext->tab_cnt - 1;
-
- lv_btnm_clear_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_TGL_STATE);
-
- ext->tab_cur = id;
-
- if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) {
- id = (ext->tab_cnt - (id + 1));
- }
-
- lv_coord_t cont_x;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- cont_x = -(lv_obj_get_width(tabview) * id + style->body.padding.inner * id + style->body.padding.left);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + style->body.padding.inner * id +
- style->body.padding.left) +
- lv_obj_get_width(ext->btns);
- break;
- case LV_TABVIEW_BTNS_POS_RIGHT:
- cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + style->body.padding.inner * id +
- style->body.padding.left);
- break;
- }
-
- if(anim == LV_ANIM_OFF || lv_tabview_get_anim_time(tabview) == 0) {
- lv_obj_set_x(ext->content, cont_x);
- }
-#if LV_USE_ANIMATION
- else {
- lv_anim_t a;
- a.var = ext->content;
- a.start = lv_obj_get_x(ext->content);
- a.end = cont_x;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = ext->anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#endif
-
- /*Move the indicator*/
- const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
- lv_coord_t indic_size;
- lv_coord_t indic_pos;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = lv_obj_get_width(ext->indic);
- indic_pos = indic_size * id + tabs_style->body.padding.inner * id + tabs_style->body.padding.left;
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- indic_size = lv_obj_get_height(ext->indic);
- const lv_style_t * style_tabs = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
- lv_coord_t max_h = lv_obj_get_height(ext->btns) - style_tabs->body.padding.top - style_tabs->body.padding.bottom;
-
- if(ext->tab_cnt) indic_pos = (max_h * ext->tab_cur) / ext->tab_cnt;
- else indic_pos = 0;
- break;
- }
-
-#if LV_USE_ANIMATION
- if(anim == LV_ANIM_OFF || ext->anim_time == 0)
-#endif
- {
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_x(ext->indic, indic_pos); break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_y(ext->indic, indic_pos); break;
- }
- }
-#if LV_USE_ANIMATION
- else {
- lv_anim_t a;
- a.var = ext->indic;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- a.start = lv_obj_get_x(ext->indic);
- a.end = indic_pos;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- a.start = lv_obj_get_y(ext->indic);
- a.end = indic_pos;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- break;
- }
-
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = ext->anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
- }
-#endif
-
- lv_btnm_set_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_TGL_STATE);
-}
-
-/**
- * Enable horizontal sliding with touch pad
- * @param tabview pointer to Tab view object
- * @param en true: enable sliding; false: disable sliding
- */
-void lv_tabview_set_sliding(lv_obj_t * tabview, bool en)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- ext->slide_enable = en == false ? 0 : 1;
-}
-
-/**
- * Set the animation time of tab view when a new tab is loaded
- * @param tabview pointer to Tab view object
- * @param anim_time_ms time of animation in milliseconds
- */
-void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- ext->anim_time = anim_time;
-#else
- (void)tabview;
- (void)anim_time;
-#endif
-}
-
-/**
- * Set the style of a tab view
- * @param tabview pointer to a tan view object
- * @param type which style should be set
- * @param style pointer to the new style
- */
-void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- switch(type) {
- case LV_TABVIEW_STYLE_BG: lv_obj_set_style(tabview, style); break;
- case LV_TABVIEW_STYLE_BTN_BG:
- lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BG, style);
- tabview_realign(tabview);
- break;
- case LV_TABVIEW_STYLE_BTN_REL:
- lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_REL, style);
- tabview_realign(tabview);
- break;
- case LV_TABVIEW_STYLE_BTN_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_PR, style); break;
- case LV_TABVIEW_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
- case LV_TABVIEW_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
- case LV_TABVIEW_STYLE_INDIC:
- lv_obj_set_style(ext->indic, style);
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_height(ext->indic, style->body.padding.inner); break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_width(ext->indic, style->body.padding.inner); break;
- }
-
- tabview_realign(tabview);
- break;
- }
-}
-
-/**
- * Set the position of tab select buttons
- * @param tabview pointer to a tan view object
- * @param btns_pos which button position
- */
-void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- ext->btns_pos = btns_pos;
- tabview_realign(tabview);
-}
-
-/**
- * Set whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @param en whether tab buttons are hidden
- */
-void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- ext->btns_hide = en;
- tabview_realign(tabview);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the index of the currently active tab
- * @param tabview pointer to Tab view object
- * @return the active btn index
- */
-uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->tab_cur;
-}
-
-/**
- * Get the number of tabs
- * @param tabview pointer to Tab view object
- * @return btn count
- */
-uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->tab_cnt;
-}
-
-/**
- * Get the page (content area) of a tab
- * @param tabview pointer to Tab view object
- * @param id index of the btn (>= 0)
- * @return pointer to page (lv_page) object
- */
-lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- uint16_t i = 0;
- lv_obj_t * page = lv_obj_get_child_back(ext->content, NULL);
-
- while(page != NULL && i != id) {
- i++;
- page = lv_obj_get_child_back(ext->content, page);
- }
-
- if(i == id) return page;
-
- return NULL;
-}
-
-/**
- * Get horizontal sliding is enabled or not
- * @param tabview pointer to Tab view object
- * @return true: enable sliding; false: disable sliding
- */
-bool lv_tabview_get_sliding(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->slide_enable ? true : false;
-}
-
-/**
- * Get the animation time of tab view when a new tab is loaded
- * @param tabview pointer to Tab view object
- * @return time of animation in milliseconds
- */
-uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->anim_time;
-#else
- (void)tabview;
- return 0;
-#endif
-}
-
-/**
- * Get a style of a tab view
- * @param tabview pointer to a ab view object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_style_t type)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- switch(type) {
- case LV_TABVIEW_STYLE_BG: style = lv_obj_get_style(tabview); break;
- case LV_TABVIEW_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BG); break;
- case LV_TABVIEW_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_REL); break;
- case LV_TABVIEW_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_PR); break;
- case LV_TABVIEW_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL); break;
- case LV_TABVIEW_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR); break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/**
- * Get position of tab select buttons
- * @param tabview pointer to a ab view object
- */
-lv_tabview_btns_pos_t lv_tabview_get_btns_pos(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->btns_pos;
-}
-
-/**
- * Get whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @return whether tab buttons are hidden
- */
-bool lv_tabview_get_btns_hidden(const lv_obj_t * tabview)
-{
- LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- return ext->btns_hide;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the Tab view
- * @param tabview pointer to a Tab view object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(tabview, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- if(sign == LV_SIGNAL_CLEANUP) {
- uint8_t i;
- for(i = 0; ext->tab_name_ptr[i][0] != '\0'; i++) lv_mem_free(ext->tab_name_ptr[i]);
-
- lv_mem_free(ext->tab_name_ptr);
- ext->tab_name_ptr = NULL;
- ext->btns = NULL; /*These objects were children so they are already invalid*/
- ext->content = NULL;
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- if(ext->content != NULL && (lv_obj_get_width(tabview) != lv_area_get_width(param) ||
- lv_obj_get_height(tabview) != lv_area_get_height(param))) {
- tabview_realign(tabview);
- }
- } else if(sign == LV_SIGNAL_RELEASED) {
-#if LV_USE_GROUP
- /*If released by a KEYPAD or ENCODER then really the tab buttons should be released.
- * So simulate a CLICK on the tab buttons*/
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_type_t indev_type = lv_indev_get_type(indev);
- if(indev_type == LV_INDEV_TYPE_KEYPAD ||
- (indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(tabview)))) {
- lv_event_send(ext->btns, LV_EVENT_CLICKED, lv_event_get_data());
- }
-#endif
- } else if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_CONTROL) {
- /* The button matrix is not in a group (the tab view is in it) but it should handle the
- * group signals. So propagate the related signals to the button matrix manually*/
- if(ext->btns) {
- ext->btns->signal_cb(ext->btns, sign, param);
- }
-
- if(sign == LV_SIGNAL_FOCUS) {
- lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
- /*If not focused by an input device assume the last input device*/
- if(indev_type == LV_INDEV_TYPE_NONE) {
- indev_type = lv_indev_get_type(lv_indev_get_next(NULL));
- }
-
- /*With ENCODER select the first button only in edit mode*/
- if(indev_type == LV_INDEV_TYPE_ENCODER) {
-#if LV_USE_GROUP
- lv_group_t * g = lv_obj_get_group(tabview);
- if(lv_group_get_editing(g)) {
- lv_btnm_set_pressed(ext->btns, ext->tab_cur);
- }
-#endif
- } else {
- lv_btnm_set_pressed(ext->btns, ext->tab_cur);
- }
- }
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
- bool * editable = (bool *)param;
- *editable = true;
- }
-
- return res;
-}
-
-/**
- * Signal function of a tab's page
- * @param tab pointer to a tab page object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = page_signal(tab_page, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * cont = lv_obj_get_parent(tab_page);
- lv_obj_t * tabview = lv_obj_get_parent(cont);
-
- if(lv_tabview_get_sliding(tabview) == false) return res;
-
- if(sign == LV_SIGNAL_PRESSED) {
- tabpage_pressed_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_PRESSING) {
- tabpage_pressing_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- tabpage_press_lost_handler(tabview, tab_page);
- }
-
- return res;
-}
-/**
- * Signal function of the tab page's scrollable object
- * @param tab_scrl pointer to a tab page's scrollable object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = page_scrl_signal(tab_scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * tab_page = lv_obj_get_parent(tab_scrl);
- lv_obj_t * cont = lv_obj_get_parent(tab_page);
- lv_obj_t * tabview = lv_obj_get_parent(cont);
-
- if(lv_tabview_get_sliding(tabview) == false) return res;
-
- if(sign == LV_SIGNAL_PRESSED) {
- tabpage_pressed_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_PRESSING) {
- tabpage_pressing_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- tabpage_press_lost_handler(tabview, tab_page);
- }
-
- return res;
-}
-
-/**
- * Called when a tab's page or scrollable object is pressed
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_pressed_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- (void)tabpage;
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_get_point(indev, &ext->point_last);
-}
-
-/**
- * Called when a tab's page or scrollable object is being pressed
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t point_act;
- lv_indev_get_point(indev, &point_act);
- lv_coord_t x_diff = point_act.x - ext->point_last.x;
- lv_coord_t y_diff = point_act.y - ext->point_last.y;
-
- if(!ext->scroll_ver && (x_diff >= LV_INDEV_DEF_DRAG_LIMIT || x_diff <= -LV_INDEV_DEF_DRAG_LIMIT)) {
- ext->draging = 1;
- /*Check if the page is on the edge */
- if((lv_page_on_edge(tabpage, LV_PAGE_EDGE_LEFT) && x_diff > 0) ||
- (lv_page_on_edge(tabpage, LV_PAGE_EDGE_RIGHT) && x_diff < 0)) {
- if(ext->drag_hor == 0) {
- ext->point_last.x = point_act.x;
- ext->point_last.y = point_act.y;
- }
- ext->drag_hor = 1;
- lv_obj_set_drag(lv_page_get_scrl(tabpage), false);
-
- } else if(ext->drag_hor == 0) {
- ext->drag_hor = 0;
- }
- } else if(y_diff >= LV_INDEV_DEF_DRAG_LIMIT || y_diff <= -LV_INDEV_DEF_DRAG_LIMIT) {
- ext->drag_hor = 0;
- ext->draging = 1;
- ext->scroll_ver = 1;
- } else
- ext->draging = 0;
-
- if(ext->drag_hor) {
- lv_obj_set_x(ext->content, lv_obj_get_x(ext->content) + point_act.x - ext->point_last.x);
- ext->point_last.x = point_act.x;
- ext->point_last.y = point_act.y;
-
- /*Move the indicator*/
- const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
- lv_coord_t indic_size;
- lv_coord_t p;
- lv_coord_t indic_y;
- const lv_style_t * indic_style;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = lv_obj_get_width(ext->indic);
- indic_style = lv_obj_get_style(ext->indic);
- p = ((tabpage->coords.x1 - tabview->coords.x1) * (indic_size + tabs_style->body.padding.inner)) /
- lv_obj_get_width(tabview);
-
- {
- uint16_t id = ext->tab_cur;
- if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) {
- id = (ext->tab_cnt - (id + 1));
- }
- lv_obj_set_x(ext->indic, indic_size * id + tabs_style->body.padding.inner * id +
- indic_style->body.padding.left - p);
- }
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- indic_size = lv_obj_get_height(ext->indic);
- indic_y = tabs_style->body.padding.top + ext->tab_cur * (indic_size + tabs_style->body.padding.inner);
- lv_obj_set_y(ext->indic, indic_y);
- break;
- }
- }
-}
-
-/**
- * Called when a tab's page or scrollable object is released or the press is lost
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_press_lost_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- ext->drag_hor = 0;
- ext->draging = 0;
- ext->scroll_ver = 0;
-
- lv_obj_set_drag(lv_page_get_scrl(tabpage), true);
-
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t point_act;
- lv_indev_get_point(indev, &point_act);
- lv_point_t vect;
- lv_indev_get_vect(indev, &vect);
- lv_coord_t x_predict = 0;
-
- while(vect.x != 0) {
- x_predict += vect.x;
- vect.x = vect.x * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
- }
-
- lv_coord_t page_x1 = tabpage->coords.x1 - tabview->coords.x1 + x_predict;
- lv_coord_t page_x2 = page_x1 + lv_obj_get_width(tabpage);
- lv_coord_t treshold = lv_obj_get_width(tabview) / 2;
-
- int16_t tab_cur = ext->tab_cur;
- if(page_x1 > treshold) {
- if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) tab_cur++;
- else tab_cur--;
- } else if(page_x2 < treshold) {
- if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) tab_cur--;
- else tab_cur++;
- }
-
- if(tab_cur > ext->tab_cnt - 1) tab_cur = ext->tab_cnt - 1;
- else if(tab_cur < 0) tab_cur = 0;
-
- uint32_t id_prev = lv_tabview_get_tab_act(tabview);
- lv_tabview_set_tab_act(tabview, tab_cur, LV_ANIM_ON);
- uint32_t id_new = lv_tabview_get_tab_act(tabview);
-
- lv_res_t res = LV_RES_OK;
- if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);
-
- if(res != LV_RES_OK) return;
-}
-
-/**
- * Called when a tab button is clicked
- * @param tab_btnm pointer to the tab's button matrix object
- * @param event type of the event
- */
-static void tab_btnm_event_cb(lv_obj_t * tab_btnm, lv_event_t event)
-{
- if(event != LV_EVENT_CLICKED) return;
-
- uint16_t btn_id = lv_btnm_get_active_btn(tab_btnm);
- if(btn_id == LV_BTNM_BTN_NONE) return;
-
- lv_btnm_clear_btn_ctrl_all(tab_btnm, LV_BTNM_CTRL_TGL_STATE);
- lv_btnm_set_btn_ctrl(tab_btnm, btn_id, LV_BTNM_CTRL_TGL_STATE);
-
- lv_obj_t * tabview = lv_obj_get_parent(tab_btnm);
-
- uint32_t id_prev = lv_tabview_get_tab_act(tabview);
- lv_tabview_set_tab_act(tabview, btn_id, LV_ANIM_ON);
- uint32_t id_new = lv_tabview_get_tab_act(tabview);
-
- lv_res_t res = LV_RES_OK;
- if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);
-
- if(res != LV_RES_OK) return;
-}
-
-/**
- * Realign and resize the elements of Tab view
- * @param tabview pointer to a Tab view object
- */
-static void tabview_realign(lv_obj_t * tabview)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- lv_obj_set_width(ext->btns, lv_obj_get_width(tabview));
-
- if(ext->btns_hide) {
- lv_obj_set_hidden(ext->btns, true);
- lv_obj_set_hidden(ext->indic, true);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview));
- lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- } else if(ext->tab_cnt != 0) {
- lv_obj_set_hidden(ext->btns, false);
- lv_obj_set_hidden(ext->indic, false);
-
- const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
- const lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
-
- /*Set the indicator width/height*/
- lv_coord_t indic_size;
- lv_coord_t max_h;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = (lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
- style_btn_bg->body.padding.left - style_btn_bg->body.padding.right) /
- ext->tab_cnt;
- lv_obj_set_width(ext->indic, indic_size);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
-
- max_h =
- lv_obj_get_height(ext->btns) - style_btn_bg->body.padding.top - style_btn_bg->body.padding.bottom;
- indic_size = max_h - ((ext->tab_cnt - 1) * style_btn_bg->body.padding.inner);
- indic_size = indic_size / ext->tab_cnt;
- indic_size--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
- lv_obj_set_height(ext->indic, indic_size);
- break;
- }
-
- /*Set the tabs height/width*/
- lv_coord_t btns_size;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- btns_size = lv_font_get_line_height(style_btn_rel->text.font) + style_btn_rel->body.padding.top +
- style_btn_rel->body.padding.bottom + style_btn_bg->body.padding.top +
- style_btn_bg->body.padding.bottom;
- lv_obj_set_height(ext->btns, btns_size);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- btns_size = lv_font_get_glyph_width(style_btn_rel->text.font, 'A', '\0') +
- style_btn_rel->body.padding.left + style_btn_rel->body.padding.right +
- style_btn_bg->body.padding.left + style_btn_bg->body.padding.right;
- lv_obj_set_width(ext->btns, btns_size);
- break;
- }
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_height(ext->content, lv_obj_get_height(tabview)); break;
- }
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, lv_obj_get_width(ext->btns), 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_width(ext->content, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
-
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
- lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
- break;
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
- lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_width(ext->content, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
-
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
- lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
- break;
- }
- }
-
- lv_obj_t * pages = lv_obj_get_child(ext->content, NULL);
- while(pages != NULL) {
- if(lv_obj_get_signal_cb(pages) == tabpage_signal) { /*Be sure adjust only the pages (user can other things)*/
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_set_size(pages, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_set_size(pages, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns),
- lv_obj_get_height(ext->content));
- break;
- }
- }
- pages = lv_obj_get_child(ext->content, pages);
- }
-
- if(!ext->btns_hide) {
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_LEFT: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0); break;
- }
- }
-
- lv_tabview_set_tab_act(tabview, ext->tab_cur, LV_ANIM_OFF);
-}
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_tabview.h b/src/libs/lvgl/src/lv_objx/lv_tabview.h
deleted file mode 100644
index f7546d0c..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_tabview.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/**
- * @file lv_tabview.h
- *
- */
-
-#ifndef LV_TABVIEW_H
-#define LV_TABVIEW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_TABVIEW != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BTNM == 0
-#error "lv_tabview: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNM 1) "
-#endif
-
-#if LV_USE_PAGE == 0
-#error "lv_tabview: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "../lv_objx/lv_win.h"
-#include "../lv_objx/lv_page.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** Position of tabview buttons. */
-enum { LV_TABVIEW_BTNS_POS_TOP, LV_TABVIEW_BTNS_POS_BOTTOM, LV_TABVIEW_BTNS_POS_LEFT, LV_TABVIEW_BTNS_POS_RIGHT };
-typedef uint8_t lv_tabview_btns_pos_t;
-
-/*Data of tab*/
-typedef struct
-{
- /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * btns;
- lv_obj_t * indic;
- lv_obj_t * content; /*A rectangle to show the current tab*/
- const char ** tab_name_ptr;
- lv_point_t point_last;
- uint16_t tab_cur;
- uint16_t tab_cnt;
-#if LV_USE_ANIMATION
- uint16_t anim_time;
-#endif
- uint8_t slide_enable : 1; /*1: enable horizontal sliding by touch pad*/
- uint8_t draging : 1;
- uint8_t drag_hor : 1;
- uint8_t scroll_ver : 1;
- uint8_t btns_hide : 1;
- lv_tabview_btns_pos_t btns_pos : 2;
-} lv_tabview_ext_t;
-
-enum {
- LV_TABVIEW_STYLE_BG,
- LV_TABVIEW_STYLE_INDIC,
- LV_TABVIEW_STYLE_BTN_BG,
- LV_TABVIEW_STYLE_BTN_REL,
- LV_TABVIEW_STYLE_BTN_PR,
- LV_TABVIEW_STYLE_BTN_TGL_REL,
- LV_TABVIEW_STYLE_BTN_TGL_PR,
-};
-typedef uint8_t lv_tabview_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a Tab view object
- * @param par pointer to an object, it will be the parent of the new tab
- * @param copy pointer to a tab object, if not NULL then the new object will be copied from it
- * @return pointer to the created tab
- */
-lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param tabview pointer to an object
- */
-void lv_tabview_clean(lv_obj_t * tabview);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add a new tab with the given name
- * @param tabview pointer to Tab view object where to ass the new tab
- * @param name the text on the tab button
- * @return pointer to the created page object (lv_page). You can create your content here
- */
-lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set a new tab
- * @param tabview pointer to Tab view object
- * @param id index of a tab to load
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t anim);
-
-/**
- * Enable horizontal sliding with touch pad
- * @param tabview pointer to Tab view object
- * @param en true: enable sliding; false: disable sliding
- */
-void lv_tabview_set_sliding(lv_obj_t * tabview, bool en);
-
-/**
- * Set the animation time of tab view when a new tab is loaded
- * @param tabview pointer to Tab view object
- * @param anim_time time of animation in milliseconds
- */
-void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time);
-
-/**
- * Set the style of a tab view
- * @param tabview pointer to a tan view object
- * @param type which style should be set
- * @param style pointer to the new style
- */
-void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_style_t * style);
-
-/**
- * Set the position of tab select buttons
- * @param tabview pointer to a tab view object
- * @param btns_pos which button position
- */
-void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos);
-
-/**
- * Set whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @param en whether tab buttons are hidden
- */
-void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the index of the currently active tab
- * @param tabview pointer to Tab view object
- * @return the active tab index
- */
-uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview);
-
-/**
- * Get the number of tabs
- * @param tabview pointer to Tab view object
- * @return tab count
- */
-uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview);
-/**
- * Get the page (content area) of a tab
- * @param tabview pointer to Tab view object
- * @param id index of the tab (>= 0)
- * @return pointer to page (lv_page) object
- */
-lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id);
-
-/**
- * Get horizontal sliding is enabled or not
- * @param tabview pointer to Tab view object
- * @return true: enable sliding; false: disable sliding
- */
-bool lv_tabview_get_sliding(const lv_obj_t * tabview);
-
-/**
- * Get the animation time of tab view when a new tab is loaded
- * @param tabview pointer to Tab view object
- * @return time of animation in milliseconds
- */
-uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview);
-
-/**
- * Get a style of a tab view
- * @param tabview pointer to a ab view object
- * @param type which style should be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_style_t type);
-
-/**
- * Get position of tab select buttons
- * @param tabview pointer to a ab view object
- */
-lv_tabview_btns_pos_t lv_tabview_get_btns_pos(const lv_obj_t * tabview);
-
-/**
- * Get whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @return whether tab buttons are hidden
- */
-bool lv_tabview_get_btns_hidden(const lv_obj_t * tabview);
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_TABVIEW*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TABVIEW_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_tileview.c b/src/libs/lvgl/src/lv_objx/lv_tileview.c
deleted file mode 100644
index 3b2f8514..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_tileview.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/**
- * @file lv_tileview.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_tileview.h"
-#if LV_USE_TILEVIEW != 0
-
-#include <stdbool.h>
-#include "lv_cont.h"
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_tileview"
-
-#if LV_USE_ANIMATION
-#ifndef LV_TILEVIEW_DEF_ANIM_TIME
-#define LV_TILEVIEW_DEF_ANIM_TIME 300 /*Animation time loading a tile [ms] (0: no animation) */
-#endif
-#else
-#undef LV_TILEVIEW_DEF_ANIM_TIME
-#define LV_TILEVIEW_DEF_ANIM_TIME 0 /*No animations*/
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_tileview_signal(lv_obj_t * tileview, lv_signal_t sign, void * param);
-static lv_res_t lv_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
-static void tileview_scrl_event_cb(lv_obj_t * scrl, lv_event_t event);
-static void drag_end_handler(lv_obj_t * tileview);
-static bool set_valid_drag_dirs(lv_obj_t * tileview);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-static lv_signal_cb_t ancestor_scrl_signal;
-static lv_design_cb_t ancestor_design;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a tileview object
- * @param par pointer to an object, it will be the parent of the new tileview
- * @param copy pointer to a tileview object, if not NULL then the new object will be copied from it
- * @return pointer to the created tileview
- */
-lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("tileview create started");
-
- /*Create the ancestor of tileview*/
- lv_obj_t * new_tileview = lv_page_create(par, copy);
- LV_ASSERT_MEM(new_tileview);
- if(new_tileview == NULL) return NULL;
-
- /*Allocate the tileview type specific extended data*/
- lv_tileview_ext_t * ext = lv_obj_allocate_ext_attr(new_tileview, sizeof(lv_tileview_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_tileview);
- if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_tileview));
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_tileview);
-
- /*Initialize the allocated 'ext' */
-#if LV_USE_ANIMATION
- ext->anim_time = LV_TILEVIEW_DEF_ANIM_TIME;
-#endif
- ext->act_id.x = 0;
- ext->act_id.y = 0;
- ext->valid_pos = NULL;
- ext->valid_pos_cnt = 0;
-
- /*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_cb(new_tileview, lv_tileview_signal);
- lv_obj_set_signal_cb(lv_page_get_scrl(new_tileview), lv_tileview_scrl_signal);
-
- /*Init the new tileview*/
- if(copy == NULL) {
- /* Set a size which fits into the parent.
- * Don't use `par` directly because if the tileview is created on a page it is moved to the
- * scrollable so the parent has changed */
- lv_coord_t w;
- lv_coord_t h;
- if(par) {
- w = lv_obj_get_width_fit(lv_obj_get_parent(new_tileview));
- h = lv_obj_get_height_fit(lv_obj_get_parent(new_tileview));
- } else {
- w = lv_disp_get_hor_res(NULL);
- h = lv_disp_get_ver_res(NULL);
- }
-
- lv_obj_set_size(new_tileview, w, h);
-
- lv_obj_set_drag_throw(lv_page_get_scrl(new_tileview), false);
- lv_page_set_scrl_fit(new_tileview, LV_FIT_TIGHT);
- lv_obj_set_event_cb(ext->page.scrl, tileview_scrl_event_cb);
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, th->style.tileview.bg);
- lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, th->style.tileview.scrl);
- lv_page_set_style(new_tileview, LV_PAGE_STYLE_SB, th->style.tileview.sb);
- } else {
- lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, &lv_style_transp_tight);
- lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);
- }
- }
- /*Copy an existing tileview*/
- else {
- lv_tileview_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- ext->act_id.x = copy_ext->act_id.x;
- ext->act_id.y = copy_ext->act_id.y;
- ext->valid_pos = copy_ext->valid_pos;
- ext->valid_pos_cnt = copy_ext->valid_pos_cnt;
-#if LV_USE_ANIMATION
- ext->anim_time = copy_ext->anim_time;
-#endif
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_tileview);
- }
-
- LV_LOG_INFO("tileview created");
-
- return new_tileview;
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Register an object on the tileview. The register object will able to slide the tileview
- * @param tileview pointer to a Tileview object
- * @param element pointer to an object
- */
-void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element)
-{
- LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
- LV_ASSERT_NULL(tileview);
-
- /* Let the objects event to propagate to the scrollable part of the tileview.
- * It is required the handle dargging of the tileview with the element.*/
- element->parent_event = 1;
- lv_obj_set_drag_parent(element, true);
-
- /* When adding a new element the coordinates may shift.
- * For example y=1 can become y=1 if an element is added to the top.
- * So be sure the current tile is correctly shown*/
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- lv_tileview_set_tile_act(tileview, ext->act_id.x, ext->act_id.y, false);
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the valid position's indices. The scrolling will be possible only to these positions.
- * @param tileview pointer to a Tileview object
- * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`.
- * Only the pointer is saved so can't be a local variable.
- * @param valid_pos_cnt numner of elements in `valid_pos` array
- */
-void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t valid_pos[], uint16_t valid_pos_cnt)
-{
- LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
- LV_ASSERT_NULL(valid_pos);
-
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- ext->valid_pos = valid_pos;
- ext->valid_pos_cnt = valid_pos_cnt;
-
- /*If valid pos. is selected do nothing*/
- uint16_t i;
- for(i = 0; i < valid_pos_cnt; i++) {
- if(valid_pos[i].x == ext->act_id.x && valid_pos[i].y == ext->act_id.y) {
- return;
- }
- }
-
- /*Set a valid position if now an invalid is selected*/
- if(valid_pos_cnt > 0) {
- lv_tileview_set_tile_act(tileview, valid_pos[0].x, valid_pos[0].y, LV_ANIM_OFF);
- }
-}
-
-/**
- * Set the tile to be shown
- * @param tileview pointer to a tileview object
- * @param x column id (0, 1, 2...)
- * @param y line id (0, 1, 2...)
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, lv_anim_enable_t anim)
-{
- LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
-
-#if LV_USE_ANIMATION == 0
- anim = LV_ANIM_OFF;
-#endif
-
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
-
- uint32_t tile_id;
- bool valid = false;
- for(tile_id = 0; tile_id < ext->valid_pos_cnt; tile_id++) {
- if(ext->valid_pos[tile_id].x == x && ext->valid_pos[tile_id].y == y) {
- valid = true;
- break;
- }
- }
-
- if(valid == false) return; /*Don't load not valid tiles*/
-
- ext->act_id.x = x;
- ext->act_id.y = y;
-
- lv_coord_t x_coord = -x * lv_obj_get_width(tileview);
- lv_coord_t y_coord = -y * lv_obj_get_height(tileview);
- lv_obj_t * scrl = lv_page_get_scrl(tileview);
- if(anim) {
-#if LV_USE_ANIMATION
- lv_coord_t x_act = lv_obj_get_x(scrl);
- lv_coord_t y_act = lv_obj_get_y(scrl);
-
- lv_anim_t a;
- a.var = scrl;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = NULL;
- a.act_time = 0;
- a.time = ext->anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
-
- if(x_coord != x_act) {
- a.start = x_act;
- a.end = x_coord;
- lv_anim_create(&a);
- }
-
- if(y_coord != y_act) {
- a.start = y_act;
- a.end = y_coord;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- lv_anim_create(&a);
- }
-#endif
- } else {
- lv_obj_set_pos(scrl, x_coord, y_coord);
- }
-
- lv_res_t res = LV_RES_OK;
- res = lv_event_send(tileview, LV_EVENT_VALUE_CHANGED, &tile_id);
- if(res != LV_RES_OK) return; /*Prevent the tile loading*/
-}
-
-/**
- * Set a style of a tileview.
- * @param tileview pointer to tileview object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
-
- switch(type) {
- case LV_TILEVIEW_STYLE_MAIN: lv_obj_set_style(tileview, style); break;
- }
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/*
- * New object specific "get" functions come here
- */
-
-/**
- * Get style of a tileview.
- * @param tileview pointer to tileview object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, lv_tileview_style_t type)
-{
- LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- switch(type) {
- case LV_TILEVIEW_STYLE_MAIN: style = lv_obj_get_style(tileview); break;
- default: style = NULL;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/*
- * New object specific "other" functions come here
- */
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the tileview
- * @param tileview pointer to a tileview object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_tileview_signal(lv_obj_t * tileview, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(tileview, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- if(sign == LV_SIGNAL_CLEANUP) {
- /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- }
-
- return res;
-}
-
-/**
- * Signal function of the tileview scrollable
- * @param tileview pointer to the scrollable part of the tileview object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
-{
-
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_scrl_signal(scrl, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
-
- lv_obj_t * tileview = lv_obj_get_parent(scrl);
- const lv_style_t * style_bg = lv_tileview_get_style(tileview, LV_TILEVIEW_STYLE_MAIN);
-
- /*Apply constraint on moving of the tileview*/
- if(sign == LV_SIGNAL_CORD_CHG) {
- lv_indev_t * indev = lv_indev_get_act();
- if(indev) {
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
-
- /*Set horizontal drag constraint if no vertical constraint an dragged to valid x
- * direction */
- if(ext->drag_ver == 0 &&
- ((ext->drag_right_en && indev->proc.types.pointer.drag_sum.x <= -LV_INDEV_DEF_DRAG_LIMIT) ||
- (ext->drag_left_en && indev->proc.types.pointer.drag_sum.x >= LV_INDEV_DEF_DRAG_LIMIT))) {
- ext->drag_hor = 1;
- }
- /*Set vertical drag constraint if no horizontal constraint an dragged to valid y
- * direction */
- if(ext->drag_hor == 0 &&
- ((ext->drag_bottom_en && indev->proc.types.pointer.drag_sum.y <= -LV_INDEV_DEF_DRAG_LIMIT) ||
- (ext->drag_top_en && indev->proc.types.pointer.drag_sum.y >= LV_INDEV_DEF_DRAG_LIMIT))) {
- ext->drag_ver = 1;
- }
-
-#if LV_USE_ANIMATION
- if(ext->drag_hor) {
- ext->page.edge_flash.top_ip = 0;
- ext->page.edge_flash.bottom_ip = 0;
- }
-
- if(ext->drag_ver) {
- ext->page.edge_flash.right_ip = 0;
- ext->page.edge_flash.left_ip = 0;
- }
-#endif
-
- lv_coord_t x = lv_obj_get_x(scrl);
- lv_coord_t y = lv_obj_get_y(scrl);
- lv_coord_t h = lv_obj_get_height(tileview);
- lv_coord_t w = lv_obj_get_width(tileview);
- if(ext->drag_top_en == 0) {
- if(y > -(ext->act_id.y * h) && indev->proc.types.pointer.vect.y > 0 && ext->drag_hor == 0) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.top_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
-
- lv_obj_set_y(scrl, -ext->act_id.y * h + style_bg->body.padding.top);
- }
- }
- if(ext->drag_bottom_en == 0 && indev->proc.types.pointer.vect.y < 0 && ext->drag_hor == 0) {
- if(y < -(ext->act_id.y * h)) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.bottom_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
- }
-
- lv_obj_set_y(scrl, -ext->act_id.y * h + style_bg->body.padding.top);
- }
- if(ext->drag_left_en == 0) {
- if(x > -(ext->act_id.x * w) && indev->proc.types.pointer.vect.x > 0 && ext->drag_ver == 0) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.left_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
-
- lv_obj_set_x(scrl, -ext->act_id.x * w + style_bg->body.padding.left);
- }
- }
- if(ext->drag_right_en == 0 && indev->proc.types.pointer.vect.x < 0 && ext->drag_ver == 0) {
- if(x < -(ext->act_id.x * w)) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.right_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
- }
-
- lv_obj_set_x(scrl, -ext->act_id.x * w + style_bg->body.padding.top);
- }
-
- /*Apply the drag constraints*/
- if(ext->drag_ver == 0)
- lv_obj_set_y(scrl, -ext->act_id.y * lv_obj_get_height(tileview) + style_bg->body.padding.top);
- if(ext->drag_hor == 0)
- lv_obj_set_x(scrl, -ext->act_id.x * lv_obj_get_width(tileview) + style_bg->body.padding.left);
- }
- }
- return res;
-}
-
-static void tileview_scrl_event_cb(lv_obj_t * scrl, lv_event_t event)
-{
- lv_obj_t * tileview = lv_obj_get_parent(scrl);
-
- /*Initialize some variables on PRESS*/
- if(event == LV_EVENT_PRESSED) {
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- ext->drag_hor = 0;
- ext->drag_ver = 0;
- set_valid_drag_dirs(tileview);
- }
- /*Animate the tabview to the correct location on RELEASE*/
- else if(event == LV_EVENT_PRESS_LOST || event == LV_EVENT_RELEASED) {
- /* If the element was dragged and it moved the tileview finish the drag manually to
- * let the tileview to finish the move.*/
- lv_indev_t * indev = lv_indev_get_act();
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- if(lv_indev_is_dragging(indev) && (ext->drag_hor || ext->drag_ver)) {
- indev->proc.types.pointer.drag_in_prog = 0;
- drag_end_handler(tileview);
- }
-
- }
-}
-
-/**
- * Called when the user releases an element of the tileview after dragging it.
- * @param tileview pointer to a tileview object
- */
-static void drag_end_handler(lv_obj_t * tileview)
-{
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t point_act;
- lv_indev_get_point(indev, &point_act);
- lv_obj_t * scrl = lv_page_get_scrl(tileview);
- lv_point_t p;
-
- p.x = -(scrl->coords.x1 - lv_obj_get_width(tileview) / 2);
- p.y = -(scrl->coords.y1 - lv_obj_get_height(tileview) / 2);
-
- /*From the drag vector (drag throw) predict the end position*/
- if(ext->drag_hor) {
- lv_point_t vect;
- lv_indev_get_vect(indev, &vect);
- lv_coord_t predict = 0;
-
- while(vect.x != 0) {
- predict += vect.x;
- vect.x = vect.x * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
- }
-
- p.x -= predict;
- } else if(ext->drag_ver) {
- lv_point_t vect;
- lv_indev_get_vect(indev, &vect);
- lv_coord_t predict = 0;
-
- while(vect.y != 0) {
- predict += vect.y;
- vect.y = vect.y * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
- }
-
- p.y -= predict;
- }
-
- /*Get the index of the tile*/
- p.x = p.x / lv_obj_get_width(tileview);
- p.y = p.y / lv_obj_get_height(tileview);
-
- /*Max +- move*/
- lv_coord_t x_move = p.x - ext->act_id.x;
- lv_coord_t y_move = p.y - ext->act_id.y;
- if(x_move < -1) x_move = -1;
- if(x_move > 1) x_move = 1;
- if(y_move < -1) y_move = -1;
- if(y_move > 1) y_move = 1;
-
- /*Set the new tile*/
- lv_tileview_set_tile_act(tileview, ext->act_id.x + x_move, ext->act_id.y + y_move, true);
-}
-
-static bool set_valid_drag_dirs(lv_obj_t * tileview)
-{
-
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- if(ext->valid_pos == NULL) return false;
-
- ext->drag_bottom_en = 0;
- ext->drag_top_en = 0;
- ext->drag_left_en = 0;
- ext->drag_right_en = 0;
-
- uint16_t i;
- for(i = 0; i < ext->valid_pos_cnt; i++) {
- if(ext->valid_pos[i].x == ext->act_id.x && ext->valid_pos[i].y == ext->act_id.y - 1) ext->drag_top_en = 1;
- if(ext->valid_pos[i].x == ext->act_id.x && ext->valid_pos[i].y == ext->act_id.y + 1) ext->drag_bottom_en = 1;
- if(ext->valid_pos[i].x == ext->act_id.x - 1 && ext->valid_pos[i].y == ext->act_id.y) ext->drag_left_en = 1;
- if(ext->valid_pos[i].x == ext->act_id.x + 1 && ext->valid_pos[i].y == ext->act_id.y) ext->drag_right_en = 1;
- }
-
- return true;
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_tileview.h b/src/libs/lvgl/src/lv_objx/lv_tileview.h
deleted file mode 100644
index 60e4098b..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_tileview.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * @file lv_tileview.h
- *
- */
-
-#ifndef LV_TILEVIEW_H
-#define LV_TILEVIEW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_TILEVIEW != 0
-
-#include "../lv_objx/lv_page.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of tileview*/
-typedef struct
-{
- lv_page_ext_t page;
- /*New data for this type */
- const lv_point_t * valid_pos;
- uint16_t valid_pos_cnt;
-#if LV_USE_ANIMATION
- uint16_t anim_time;
-#endif
- lv_point_t act_id;
- uint8_t drag_top_en : 1;
- uint8_t drag_bottom_en : 1;
- uint8_t drag_left_en : 1;
- uint8_t drag_right_en : 1;
- uint8_t drag_hor : 1;
- uint8_t drag_ver : 1;
-} lv_tileview_ext_t;
-
-/*Styles*/
-enum {
- LV_TILEVIEW_STYLE_MAIN,
-};
-typedef uint8_t lv_tileview_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a tileview objects
- * @param par pointer to an object, it will be the parent of the new tileview
- * @param copy pointer to a tileview object, if not NULL then the new object will be copied from it
- * @return pointer to the created tileview
- */
-lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Register an object on the tileview. The register object will able to slide the tileview
- * @param tileview pointer to a Tileview object
- * @param element pointer to an object
- */
-void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Set the valid position's indices. The scrolling will be possible only to these positions.
- * @param tileview pointer to a Tileview object
- * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`.
- * Only the pointer is saved so can't be a local variable.
- * @param valid_pos_cnt numner of elements in `valid_pos` array
- */
-void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t valid_pos[], uint16_t valid_pos_cnt);
-
-/**
- * Set the tile to be shown
- * @param tileview pointer to a tileview object
- * @param x column id (0, 1, 2...)
- * @param y line id (0, 1, 2...)
- * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
- */
-void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, lv_anim_enable_t anim);
-
-/**
- * Enable the edge flash effect. (Show an arc when the an edge is reached)
- * @param tileview pointer to a Tileview
- * @param en true or false to enable/disable end flash
- */
-static inline void lv_tileview_set_edge_flash(lv_obj_t * tileview, bool en)
-{
- lv_page_set_edge_flash(tileview, en);
-}
-
-/**
- * Set the animation time for the Tile view
- * @param tileview pointer to a page object
- * @param anim_time animation time in milliseconds
- */
-static inline void lv_tileview_set_anim_time(lv_obj_t * tileview, uint16_t anim_time)
-{
- lv_page_set_anim_time(tileview, anim_time);
-}
-
-/**
- * Set a style of a tileview.
- * @param tileview pointer to tileview object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const lv_style_t * style);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the scroll propagation property
- * @param tileview pointer to a Tileview
- * @return true or false
- */
-static inline bool lv_tileview_get_edge_flash(lv_obj_t * tileview)
-{
- return lv_page_get_edge_flash(tileview);
-}
-
-/**
- * Get the animation time for the Tile view
- * @param tileview pointer to a page object
- * @return animation time in milliseconds
- */
-static inline uint16_t lv_tileview_get_anim_time(lv_obj_t * tileview)
-{
- return lv_page_get_anim_time(tileview);
-}
-
-/**
- * Get style of a tileview.
- * @param tileview pointer to tileview object
- * @param type which style should be get
- * @return style pointer to the style
- */
-const lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, lv_tileview_style_t type);
-
-/*=====================
- * Other functions
- *====================*/
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_TILEVIEW*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_TILEVIEW_H*/
diff --git a/src/libs/lvgl/src/lv_objx/lv_win.c b/src/libs/lvgl/src/lv_objx/lv_win.c
deleted file mode 100644
index 689dad37..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_win.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/**
- * @file lv_win.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_win.h"
-#if LV_USE_WIN != 0
-
-#include "../lv_core/lv_debug.h"
-#include "../lv_themes/lv_theme.h"
-#include "../lv_core/lv_disp.h"
-
-/*********************
- * DEFINES
- *********************/
-#define LV_OBJX_NAME "lv_win"
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * param);
-static void lv_win_realign(lv_obj_t * win);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_signal_cb_t ancestor_signal;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Create a window objects
- * @param par pointer to an object, it will be the parent of the new window
- * @param copy pointer to a window object, if not NULL then the new object will be copied from it
- * @return pointer to the created window
- */
-lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
-{
- LV_LOG_TRACE("window create started");
-
- /*Create the ancestor object*/
- lv_obj_t * new_win = lv_obj_create(par, copy);
- LV_ASSERT_MEM(new_win);
- if(new_win == NULL) return NULL;
-
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_win);
-
- /*Allocate the object type specific extended data*/
- lv_win_ext_t * ext = lv_obj_allocate_ext_attr(new_win, sizeof(lv_win_ext_t));
- LV_ASSERT_MEM(ext);
- if(ext == NULL) return NULL;
-
- ext->page = NULL;
- ext->header = NULL;
- ext->title = NULL;
- ext->style_btn_rel = &lv_style_btn_rel;
- ext->style_btn_pr = &lv_style_btn_pr;
- ext->btn_size = (LV_DPI) / 2;
-
- /*Init the new window object*/
- if(copy == NULL) {
- /* Set a size which fits into the parent.
- * Don't use `par` directly because if the window is created on a page it is moved to the
- * scrollable so the parent has changed */
- lv_coord_t w;
- lv_coord_t h;
- if(par) {
- w = lv_obj_get_width_fit(lv_obj_get_parent(new_win));
- h = lv_obj_get_height_fit(lv_obj_get_parent(new_win));
- } else {
- w = lv_disp_get_hor_res(NULL);
- h = lv_disp_get_ver_res(NULL);
- }
-
- lv_obj_set_size(new_win, w, h);
-
- lv_obj_set_style(new_win, &lv_style_pretty);
-
- ext->page = lv_page_create(new_win, NULL);
- lv_obj_set_protect(ext->page, LV_PROTECT_PARENT);
- lv_page_set_sb_mode(ext->page, LV_SB_MODE_AUTO);
- lv_page_set_style(ext->page, LV_PAGE_STYLE_BG, &lv_style_transp_fit);
-
- /*Create a holder for the header*/
- ext->header = lv_obj_create(new_win, NULL);
- /*Move back the header because it is automatically moved to the scrollable */
- lv_obj_set_protect(ext->header, LV_PROTECT_PARENT);
- lv_obj_set_parent(ext->header, new_win);
-
- /*Create a title on the header*/
- ext->title = lv_label_create(ext->header, NULL);
- lv_label_set_text(ext->title, "My title");
-
- lv_obj_set_signal_cb(new_win, lv_win_signal);
-
- /*Set the default styles*/
- lv_theme_t * th = lv_theme_get_current();
- if(th) {
- lv_win_set_style(new_win, LV_WIN_STYLE_BG, th->style.win.bg);
- lv_win_set_style(new_win, LV_WIN_STYLE_SB, th->style.win.sb);
- lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, th->style.win.header);
- lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT, th->style.win.content);
- lv_win_set_style(new_win, LV_WIN_STYLE_BTN_REL, th->style.win.btn.rel);
- lv_win_set_style(new_win, LV_WIN_STYLE_BTN_PR, th->style.win.btn.pr);
- } else {
- lv_win_set_style(new_win, LV_WIN_STYLE_BG, &lv_style_plain);
- lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT, &lv_style_transp);
- lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, &lv_style_plain_color);
- }
- }
- /*Copy an existing object*/
- else {
- lv_win_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- /*Create the objects*/
- ext->header = lv_obj_create(new_win, copy_ext->header);
- ext->title = lv_label_create(ext->header, copy_ext->title);
- ext->page = lv_page_create(new_win, copy_ext->page);
- ext->btn_size = copy_ext->btn_size;
-
- /*Copy the control buttons*/
- lv_obj_t * child;
- lv_obj_t * cbtn;
- child = lv_obj_get_child_back(copy_ext->header, NULL);
- child = lv_obj_get_child_back(copy_ext->header, child); /*Sip the title*/
- while(child != NULL) {
- cbtn = lv_btn_create(ext->header, child);
- lv_img_create(cbtn, lv_obj_get_child(child, NULL));
- child = lv_obj_get_child_back(copy_ext->header, child);
- }
-
- lv_obj_set_signal_cb(new_win, lv_win_signal);
- }
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_win);
-
- lv_win_realign(new_win);
-
- LV_LOG_INFO("window created");
-
- return new_win;
-}
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param win pointer to an object
- */
-void lv_win_clean(lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_obj_t * scrl = lv_page_get_scrl(win);
- lv_obj_clean(scrl);
-}
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add control button to the header of the window
- * @param win pointer to a window object
- * @param img_src an image source ('lv_img_t' variable, path to file or a symbol)
- * @return pointer to the created button object
- */
-lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
- LV_ASSERT_NULL(img_src);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
-
- lv_obj_t * btn = lv_btn_create(ext->header, NULL);
- lv_btn_set_style(btn, LV_BTN_STYLE_REL, ext->style_btn_rel);
- lv_btn_set_style(btn, LV_BTN_STYLE_PR, ext->style_btn_pr);
- lv_obj_set_size(btn, ext->btn_size, ext->btn_size);
-
- lv_obj_t * img = lv_img_create(btn, NULL);
- lv_obj_set_click(img, false);
- lv_img_set_src(img, img_src);
-
- lv_win_realign(win);
-
- return btn;
-}
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Can be assigned to a window control button to close the window
- * @param btn pointer to the control button on teh widows header
- * @param evet the event type
- */
-void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event)
-{
- LV_ASSERT_OBJ(btn, "lv_btn");
-
- if(event == LV_EVENT_RELEASED) {
- lv_obj_t * win = lv_win_get_from_btn(btn);
-
- lv_obj_del(win);
- }
-}
-
-/**
- * Set the title of a window
- * @param win pointer to a window object
- * @param title string of the new title
- */
-void lv_win_set_title(lv_obj_t * win, const char * title)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
- LV_ASSERT_STR(title);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
-
- lv_label_set_text(ext->title, title);
- lv_win_realign(win);
-}
-
-/**
- * Set the control button size of a window
- * @param win pointer to a window object
- * @param size control button size
- */
-void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- if(ext->btn_size == size) return;
-
- ext->btn_size = size;
-
- lv_win_realign(win);
-}
-
-/**
- * Set the size of the content area.
- * @param win pointer to a window object
- * @param w width
- * @param h height (the window will be higher with the height of the header)
- */
-void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- h += lv_obj_get_height(ext->header);
-
- lv_obj_set_size(win, w, h);
-}
-
-/**
- * Set the layout of the window
- * @param win pointer to a window object
- * @param layout the layout from 'lv_layout_t'
- */
-void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- lv_page_set_scrl_layout(ext->page, layout);
-}
-
-/**
- * Set the scroll bar mode of a window
- * @param win pointer to a window object
- * @param sb_mode the new scroll bar mode from 'lv_sb_mode_t'
- */
-void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- lv_page_set_sb_mode(ext->page, sb_mode);
-}
-/**
- * Set focus animation duration on `lv_win_focus()`
- * @param win pointer to a window object
- * @param anim_time duration of animation [ms]
- */
-void lv_win_set_anim_time(lv_obj_t * win, uint16_t anim_time)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_page_set_anim_time(lv_win_get_content(win), anim_time);
-}
-
-/**
- * Set a style of a window
- * @param win pointer to a window object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * style)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
-
- switch(type) {
- case LV_WIN_STYLE_BG:
- lv_obj_set_style(win, style);
- lv_win_realign(win);
- break;
- case LV_WIN_STYLE_CONTENT: lv_page_set_style(ext->page, LV_PAGE_STYLE_SCRL, style); break;
- case LV_WIN_STYLE_SB: lv_page_set_style(ext->page, LV_PAGE_STYLE_SB, style); break;
- case LV_WIN_STYLE_HEADER:
- lv_obj_set_style(ext->header, style);
- lv_win_realign(win);
- break;
- case LV_WIN_STYLE_BTN_REL: ext->style_btn_rel = style; break;
- case LV_WIN_STYLE_BTN_PR: ext->style_btn_pr = style; break;
- }
-
- /*Refresh the existing buttons*/
- if(type == LV_WIN_STYLE_BTN_REL || type == LV_WIN_STYLE_BTN_PR) {
- lv_obj_t * btn;
- btn = lv_obj_get_child_back(ext->header, NULL);
- btn = lv_obj_get_child_back(ext->header, btn); /*Skip the title*/
- while(btn != NULL) {
- if(type == LV_WIN_STYLE_BTN_REL)
- lv_btn_set_style(btn, LV_BTN_STYLE_REL, style);
- else
- lv_btn_set_style(btn, LV_BTN_STYLE_PR, style);
- btn = lv_obj_get_child_back(ext->header, btn);
- }
- }
-}
-
-/**
- * Set drag status of a window. If set to 'true' window can be dragged like on a PC.
- * @param win pointer to a window object
- * @param en whether dragging is enabled
- */
-void lv_win_set_drag(lv_obj_t * win, bool en)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- lv_obj_t * win_header = ext->header;
- lv_obj_set_drag_parent(win_header, en);
- lv_obj_set_drag(win, en);
-}
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the title of a window
- * @param win pointer to a window object
- * @return title string of the window
- */
-const char * lv_win_get_title(const lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- return lv_label_get_text(ext->title);
-}
-
-/**
- * Get the content holder object of window (`lv_page`) to allow additional customization
- * @param win pointer to a window object
- * @return the Page object where the window's content is
- */
-lv_obj_t * lv_win_get_content(const lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- return ext->page;
-}
-
-/**
- * Get the control button size of a window
- * @param win pointer to a window object
- * @return control button size
- */
-lv_coord_t lv_win_get_btn_size(const lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- return ext->btn_size;
-}
-
-/**
- * Get the pointer of a widow from one of its control button.
- * It is useful in the action of the control buttons where only button is known.
- * @param ctrl_btn pointer to a control button of a window
- * @return pointer to the window of 'ctrl_btn'
- */
-lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn)
-{
- LV_ASSERT_OBJ(ctrl_btn, "lv_btn");
-
- lv_obj_t * header = lv_obj_get_parent(ctrl_btn);
- lv_obj_t * win = lv_obj_get_parent(header);
-
- return win;
-}
-
-/**
- * Get the layout of a window
- * @param win pointer to a window object
- * @return the layout of the window (from 'lv_layout_t')
- */
-lv_layout_t lv_win_get_layout(lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- return lv_page_get_scrl_layout(ext->page);
-}
-
-/**
- * Get the scroll bar mode of a window
- * @param win pointer to a window object
- * @return the scroll bar mode of the window (from 'lv_sb_mode_t')
- */
-lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- return lv_page_get_sb_mode(ext->page);
-}
-
-/**
- * Get focus animation duration
- * @param win pointer to a window object
- * @return duration of animation [ms]
- */
-uint16_t lv_win_get_anim_time(const lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- return lv_page_get_anim_time(lv_win_get_content(win));
-}
-
-/**
- * Get width of the content area (page scrollable) of the window
- * @param win pointer to a window object
- * @return the width of the content_bg area
- */
-lv_coord_t lv_win_get_width(lv_obj_t * win)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- lv_obj_t * scrl = lv_page_get_scrl(ext->page);
- const lv_style_t * style_scrl = lv_obj_get_style(scrl);
-
- return lv_obj_get_width(scrl) - style_scrl->body.padding.left - style_scrl->body.padding.right;
-}
-
-/**
- * Get a style of a window
- * @param win pointer to a button object
- * @param type which style window be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
-
- const lv_style_t * style = NULL;
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
-
- switch(type) {
- case LV_WIN_STYLE_BG: style = lv_obj_get_style(win); break;
- case LV_WIN_STYLE_CONTENT: style = lv_page_get_style(ext->page, LV_PAGE_STYLE_SCRL); break;
- case LV_WIN_STYLE_SB: style = lv_page_get_style(ext->page, LV_PAGE_STYLE_SB); break;
- case LV_WIN_STYLE_HEADER: style = lv_obj_get_style(ext->header); break;
- case LV_WIN_STYLE_BTN_REL: style = ext->style_btn_rel; break;
- case LV_WIN_STYLE_BTN_PR: style = ext->style_btn_pr; break;
- default: style = NULL; break;
- }
-
- return style;
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Focus on an object. It ensures that the object will be visible in the window.
- * @param win pointer to a window object
- * @param obj pointer to an object to focus (must be in the window)
- * @param anim_en LV_ANIM_ON focus with an animation; LV_ANIM_OFF focus without animation
- */
-void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en)
-{
- LV_ASSERT_OBJ(win, LV_OBJX_NAME);
- LV_ASSERT_OBJ(obj, "");
-
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- lv_page_focus(ext->page, obj, anim_en);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Signal function of the window
- * @param win pointer to a window object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = ancestor_signal(win, sign, param);
- if(res != LV_RES_OK) return res;
- if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
-
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
- if(sign == LV_SIGNAL_CHILD_CHG) { /*Move children to the page*/
- lv_obj_t * page = ext->page;
- if(page != NULL) {
- lv_obj_t * child;
- child = lv_obj_get_child(win, NULL);
- while(child != NULL) {
- if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) {
- lv_obj_t * tmp = child;
- child = lv_obj_get_child(win, child); /*Get the next child before move this*/
- lv_obj_set_parent(tmp, page);
- } else {
- child = lv_obj_get_child(win, child);
- }
- }
- }
- } else if(sign == LV_SIGNAL_STYLE_CHG) {
- lv_win_realign(win);
- } else if(sign == LV_SIGNAL_CORD_CHG) {
- /*If the size is changed refresh the window*/
- if(lv_area_get_width(param) != lv_obj_get_width(win) || lv_area_get_height(param) != lv_obj_get_height(win)) {
- lv_win_realign(win);
- }
- } else if(sign == LV_SIGNAL_CLEANUP) {
- ext->header = NULL; /*These objects were children so they are already invalid*/
- ext->page = NULL;
- ext->title = NULL;
- } else if(sign == LV_SIGNAL_CONTROL) {
- /*Forward all the control signals to the page*/
- ext->page->signal_cb(ext->page, sign, param);
- }
-
- return res;
-}
-
-/**
- * Realign the building elements of a window
- * @param win pointer to window objectker
- */
-static void lv_win_realign(lv_obj_t * win)
-{
- lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
-
- if(ext->page == NULL || ext->header == NULL || ext->title == NULL) return;
-
- const lv_style_t * header_style = lv_win_get_style(win, LV_WIN_STYLE_HEADER);
- lv_obj_set_size(ext->header, lv_obj_get_width(win),
- ext->btn_size + header_style->body.padding.top + header_style->body.padding.bottom);
-
- bool first_btn = true;
- lv_obj_t * btn;
- lv_obj_t * btn_prev = NULL;
- /*Refresh the size of all control buttons*/
- btn = lv_obj_get_child_back(ext->header, NULL);
- btn = lv_obj_get_child_back(ext->header, btn); /*Skip the title*/
- while(btn != NULL) {
- lv_obj_set_size(btn, ext->btn_size, ext->btn_size);
- if(first_btn) {
- lv_obj_align(btn, ext->header, LV_ALIGN_IN_RIGHT_MID, -header_style->body.padding.right, 0);
- first_btn = false;
- } else {
- lv_obj_align(btn, btn_prev, LV_ALIGN_OUT_LEFT_MID, -header_style->body.padding.inner, 0);
- }
- btn_prev = btn;
- btn = lv_obj_get_child_back(ext->header, btn);
- }
-
- const lv_style_t * style_header = lv_win_get_style(win, LV_WIN_STYLE_HEADER);
- lv_obj_align(ext->title, NULL, LV_ALIGN_IN_LEFT_MID, style_header->body.padding.left, 0);
-
- lv_obj_set_pos(ext->header, 0, 0);
-
- lv_obj_set_size(ext->page, lv_obj_get_width(win), lv_obj_get_height(win) - lv_obj_get_height(ext->header));
- lv_obj_align(ext->page, ext->header, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
-}
-
-#endif
diff --git a/src/libs/lvgl/src/lv_objx/lv_win.h b/src/libs/lvgl/src/lv_objx/lv_win.h
deleted file mode 100644
index 28560cf6..00000000
--- a/src/libs/lvgl/src/lv_objx/lv_win.h
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * @file lv_win.h
- *
- */
-
-#ifndef LV_WIN_H
-#define LV_WIN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_WIN != 0
-
-/*Testing of dependencies*/
-#if LV_USE_BTN == 0
-#error "lv_win: lv_btn is required. Enable it in lv_conf.h (LV_USE_BTN 1) "
-#endif
-
-#if LV_USE_LABEL == 0
-#error "lv_win: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
-#endif
-
-#if LV_USE_IMG == 0
-#error "lv_win: lv_img is required. Enable it in lv_conf.h (LV_USE_IMG 1) "
-#endif
-
-#if LV_USE_PAGE == 0
-#error "lv_win: lv_page is required. Enable it in lv_conf.h (LV_USE_PAGE 1) "
-#endif
-
-#include "../lv_core/lv_obj.h"
-#include "lv_cont.h"
-#include "lv_btn.h"
-#include "lv_label.h"
-#include "lv_img.h"
-#include "lv_page.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/*Data of window*/
-typedef struct
-{
- /*Ext. of ancestor*/
- /*New data for this type */
- lv_obj_t * page; /*Pointer to a page which holds the content*/
- lv_obj_t * header; /*Pointer to the header container of the window*/
- lv_obj_t * title; /*Pointer to the title label of the window*/
- const lv_style_t * style_btn_rel; /*Control button releases style*/
- const lv_style_t * style_btn_pr; /*Control button pressed style*/
- lv_coord_t btn_size; /*Size of the control buttons (square)*/
-} lv_win_ext_t;
-
-/** Window styles. */
-enum {
- LV_WIN_STYLE_BG, /**< Window object background style. */
- LV_WIN_STYLE_CONTENT, /**< Window content style. */
- LV_WIN_STYLE_SB, /**< Window scrollbar style. */
- LV_WIN_STYLE_HEADER, /**< Window titlebar background style. */
- LV_WIN_STYLE_BTN_REL, /**< Same meaning as ordinary button styles. */
- LV_WIN_STYLE_BTN_PR,
-};
-typedef uint8_t lv_win_style_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Create a window objects
- * @param par pointer to an object, it will be the parent of the new window
- * @param copy pointer to a window object, if not NULL then the new object will be copied from it
- * @return pointer to the created window
- */
-lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy);
-
-/**
- * Delete all children of the scrl object, without deleting scrl child.
- * @param win pointer to an object
- */
-void lv_win_clean(lv_obj_t * win);
-
-/*======================
- * Add/remove functions
- *=====================*/
-
-/**
- * Add control button to the header of the window
- * @param win pointer to a window object
- * @param img_src an image source ('lv_img_t' variable, path to file or a symbol)
- * @return pointer to the created button object
- */
-lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src);
-
-/*=====================
- * Setter functions
- *====================*/
-
-/**
- * Can be assigned to a window control button to close the window
- * @param btn pointer to the control button on teh widows header
- * @param evet the event type
- */
-void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event);
-
-/**
- * Set the title of a window
- * @param win pointer to a window object
- * @param title string of the new title
- */
-void lv_win_set_title(lv_obj_t * win, const char * title);
-
-/**
- * Set the control button size of a window
- * @param win pointer to a window object
- * @return control button size
- */
-void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size);
-
-
-/**
- * Set the size of the content area.
- * @param win pointer to a window object
- * @param w width
- * @param h height (the window will be higher with the height of the header)
- */
-void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h);
-
-/**
- * Set the layout of the window
- * @param win pointer to a window object
- * @param layout the layout from 'lv_layout_t'
- */
-void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout);
-
-/**
- * Set the scroll bar mode of a window
- * @param win pointer to a window object
- * @param sb_mode the new scroll bar mode from 'lv_sb_mode_t'
- */
-void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode);
-
-/**
- * Set focus animation duration on `lv_win_focus()`
- * @param win pointer to a window object
- * @param anim_time duration of animation [ms]
- */
-void lv_win_set_anim_time(lv_obj_t * win, uint16_t anim_time);
-
-/**
- * Set a style of a window
- * @param win pointer to a window object
- * @param type which style should be set
- * @param style pointer to a style
- */
-void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * style);
-
-/**
- * Set drag status of a window. If set to 'true' window can be dragged like on a PC.
- * @param win pointer to a window object
- * @param en whether dragging is enabled
- */
-void lv_win_set_drag(lv_obj_t * win, bool en);
-
-/*=====================
- * Getter functions
- *====================*/
-
-/**
- * Get the title of a window
- * @param win pointer to a window object
- * @return title string of the window
- */
-const char * lv_win_get_title(const lv_obj_t * win);
-
-/**
- * Get the content holder object of window (`lv_page`) to allow additional customization
- * @param win pointer to a window object
- * @return the Page object where the window's content is
- */
-lv_obj_t * lv_win_get_content(const lv_obj_t * win);
-
-/**
- * Get the control button size of a window
- * @param win pointer to a window object
- * @return control button size
- */
-lv_coord_t lv_win_get_btn_size(const lv_obj_t * win);
-
-/**
- * Get the pointer of a widow from one of its control button.
- * It is useful in the action of the control buttons where only button is known.
- * @param ctrl_btn pointer to a control button of a window
- * @return pointer to the window of 'ctrl_btn'
- */
-lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn);
-
-/**
- * Get the layout of a window
- * @param win pointer to a window object
- * @return the layout of the window (from 'lv_layout_t')
- */
-lv_layout_t lv_win_get_layout(lv_obj_t * win);
-
-/**
- * Get the scroll bar mode of a window
- * @param win pointer to a window object
- * @return the scroll bar mode of the window (from 'lv_sb_mode_t')
- */
-lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win);
-
-/**
- * Get focus animation duration
- * @param win pointer to a window object
- * @return duration of animation [ms]
- */
-uint16_t lv_win_get_anim_time(const lv_obj_t * win);
-
-/**
- * Get width of the content area (page scrollable) of the window
- * @param win pointer to a window object
- * @return the width of the content area
- */
-lv_coord_t lv_win_get_width(lv_obj_t * win);
-
-/**
- * Get a style of a window
- * @param win pointer to a button object
- * @param type which style window be get
- * @return style pointer to a style
- */
-const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type);
-
-/**
- * Get drag status of a window. If set to 'true' window can be dragged like on a PC.
- * @param win pointer to a window object
- * @return whether window is draggable
- */
-static inline bool lv_win_get_drag(const lv_obj_t * win)
-{
- return lv_obj_get_drag(win);
-}
-
-/*=====================
- * Other functions
- *====================*/
-
-/**
- * Focus on an object. It ensures that the object will be visible in the window.
- * @param win pointer to a window object
- * @param obj pointer to an object to focus (must be in the window)
- * @param anim_en LV_ANIM_ON focus with an animation; LV_ANIM_OFF focus without animation
- */
-void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en);
-
-/**
- * Scroll the window horizontally
- * @param win pointer to a window object
- * @param dist the distance to scroll (< 0: scroll right; > 0 scroll left)
- */
-static inline void lv_win_scroll_hor(lv_obj_t * win, lv_coord_t dist)
-{
- lv_win_ext_t * ext = (lv_win_ext_t *)lv_obj_get_ext_attr(win);
- lv_page_scroll_hor(ext->page, dist);
-}
-/**
- * Scroll the window vertically
- * @param win pointer to a window object
- * @param dist the distance to scroll (< 0: scroll down; > 0 scroll up)
- */
-static inline void lv_win_scroll_ver(lv_obj_t * win, lv_coord_t dist)
-{
- lv_win_ext_t * ext = (lv_win_ext_t *)lv_obj_get_ext_attr(win);
- lv_page_scroll_ver(ext->page, dist);
-}
-
-/**********************
- * MACROS
- **********************/
-
-#endif /*LV_USE_WIN*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_WIN_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme.c b/src/libs/lvgl/src/lv_themes/lv_theme.c
deleted file mode 100644
index 21cc38c2..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * @file lv_theme.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-#include "../lv_core/lv_obj.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-#if LV_THEME_LIVE_UPDATE == 0
-static lv_theme_t * current_theme;
-#else
-/* If live update is used then a big `lv_style_t` array is used to store the real styles of the
- * theme not only pointers. On `lv_theme_set_current` the styles of the theme are copied to this
- * array. The pointers in `current_theme` are initialized to point to the styles in the array. This
- * way the theme styles will always point to the same memory address even after theme is change.
- * (The pointers in the theme points to the styles declared by the theme itself) */
-
-/* Store the styles in this array. */
-static lv_style_t th_styles[LV_THEME_STYLE_COUNT];
-static bool inited = false;
-static lv_theme_t current_theme;
-#endif
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Set a theme for the system.
- * From now, all the created objects will use styles from this theme by default
- * @param th pointer to theme (return value of: 'lv_theme_init_xxx()')
- */
-void lv_theme_set_current(lv_theme_t * th)
-{
-#if LV_THEME_LIVE_UPDATE == 0
- current_theme = th;
-
-#if LV_USE_GROUP
- /*Copy group style modification callback functions*/
- memcpy(&current_theme->group, &th->group, sizeof(th->group));
-#endif
-
- /*Let the object know their style might change*/
- lv_obj_report_style_mod(NULL);
-
-#else
- uint32_t style_num = sizeof(th->style) / sizeof(lv_style_t *); /*Number of styles in a theme*/
-
- if(!inited) {
- /*Initialize the style pointers `current_theme` to point to the `th_styles` style array */
- uint16_t i;
- lv_style_t ** cur_th_style_p = (lv_style_t **)&current_theme.style;
- for(i = 0; i < style_num; i++) {
- uintptr_t adr = (uintptr_t)&th_styles[i];
- memcpy(&cur_th_style_p[i], &adr, sizeof(lv_style_t *));
- }
- inited = true;
- }
-
- /*Copy the styles pointed by the new theme to the `th_styles` style array*/
- uint16_t i;
- lv_style_t ** th_style = (lv_style_t **)&th->style;
- for(i = 0; i < style_num; i++) {
- uintptr_t s = (uintptr_t)th_style[i];
- if(s) memcpy(&th_styles[i], (void *)s, sizeof(lv_style_t));
- }
-
-#if LV_USE_GROUP
- /*Copy group style modification callback functions*/
- memcpy(&current_theme.group, &th->group, sizeof(th->group));
-#endif
-
- /*Let the object know their style might change*/
- lv_obj_report_style_mod(NULL);
-
-#endif
-
-#if LV_USE_GROUP
- lv_group_report_style_mod(NULL);
-#endif
-}
-
-/**
- * Get the current system theme.
- * @return pointer to the current system theme. NULL if not set.
- */
-lv_theme_t * lv_theme_get_current(void)
-{
-#if LV_THEME_LIVE_UPDATE == 0
- return current_theme;
-#else
- if(!inited)
- return NULL;
- else
- return &current_theme;
-#endif
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme.h b/src/libs/lvgl/src/lv_themes/lv_theme.h
deleted file mode 100644
index 28b532c6..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme.h
+++ /dev/null
@@ -1,382 +0,0 @@
-/**
- *@file lv_themes.h
- *
- */
-
-#ifndef LV_THEMES_H
-#define LV_THEMES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "../lv_core/lv_style.h"
-#include "../lv_core/lv_group.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**
- * A theme in LittlevGL consists of many styles bound together.
- *
- * There is a style for each object type, as well as a generic style for
- * backgrounds and panels.
- */
-typedef struct
-{
- struct
- {
- lv_style_t * scr;
- lv_style_t * bg;
- lv_style_t * panel;
-
-#if LV_USE_CONT != 0
- lv_style_t * cont;
-#endif
-
-#if LV_USE_BTN != 0
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } btn;
-#endif
-
-#if LV_USE_IMGBTN != 0
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } imgbtn;
-#endif
-
-#if LV_USE_LABEL != 0
- struct
- {
- lv_style_t * prim;
- lv_style_t * sec;
- lv_style_t * hint;
- } label;
-#endif
-
-#if LV_USE_IMG != 0
- struct
- {
- lv_style_t * light;
- lv_style_t * dark;
- } img;
-#endif
-
-#if LV_USE_LINE != 0
- struct
- {
- lv_style_t * decor;
- } line;
-#endif
-
-#if LV_USE_LED != 0
- lv_style_t * led;
-#endif
-
-#if LV_USE_BAR != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * indic;
- } bar;
-#endif
-
-#if LV_USE_SLIDER != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * indic;
- lv_style_t * knob;
- } slider;
-#endif
-
-#if LV_USE_LMETER != 0
- lv_style_t * lmeter;
-#endif
-
-#if LV_USE_GAUGE != 0
- lv_style_t * gauge;
-#endif
-
-#if LV_USE_ARC != 0
- lv_style_t * arc;
-#endif
-
-#if LV_USE_PRELOAD != 0
- lv_style_t * preload;
-#endif
-
-#if LV_USE_SW != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * indic;
- lv_style_t * knob_off;
- lv_style_t * knob_on;
- } sw;
-#endif
-
-#if LV_USE_CHART != 0
- lv_style_t * chart;
-#endif
-
-#if LV_USE_CALENDAR != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * header;
- lv_style_t * header_pr;
- lv_style_t * day_names;
- lv_style_t * highlighted_days;
- lv_style_t * inactive_days;
- lv_style_t * week_box;
- lv_style_t * today_box;
- } calendar;
-#endif
-
-#if LV_USE_CB != 0
- struct
- {
- lv_style_t * bg;
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } box;
- } cb;
-#endif
-
-#if LV_USE_BTNM != 0
- struct
- {
- lv_style_t * bg;
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } btn;
- } btnm;
-#endif
-
-#if LV_USE_KB != 0
- struct
- {
- lv_style_t * bg;
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } btn;
- } kb;
-#endif
-
-#if LV_USE_MBOX != 0
- struct
- {
- lv_style_t * bg;
- struct
- {
- lv_style_t * bg;
- lv_style_t * rel;
- lv_style_t * pr;
- } btn;
- } mbox;
-#endif
-
-#if LV_USE_PAGE != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * scrl;
- lv_style_t * sb;
- } page;
-#endif
-
-#if LV_USE_TA != 0
- struct
- {
- lv_style_t * area;
- lv_style_t * oneline;
- lv_style_t * cursor;
- lv_style_t * sb;
- } ta;
-#endif
-
-#if LV_USE_SPINBOX != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * cursor;
- lv_style_t * sb;
- } spinbox;
-#endif
-
-#if LV_USE_LIST
- struct
- {
- lv_style_t * bg;
- lv_style_t * scrl;
- lv_style_t * sb;
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- lv_style_t * ina;
- } btn;
- } list;
-#endif
-
-#if LV_USE_DDLIST != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * sel;
- lv_style_t * sb;
- } ddlist;
-#endif
-
-#if LV_USE_ROLLER != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * sel;
- } roller;
-#endif
-
-#if LV_USE_TABVIEW != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * indic;
- struct
- {
- lv_style_t * bg;
- lv_style_t * rel;
- lv_style_t * pr;
- lv_style_t * tgl_rel;
- lv_style_t * tgl_pr;
- } btn;
- } tabview;
-#endif
-
-#if LV_USE_TILEVIEW != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * scrl;
- lv_style_t * sb;
- } tileview;
-#endif
-
-#if LV_USE_TABLE != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * cell;
- } table;
-#endif
-
-#if LV_USE_WIN != 0
- struct
- {
- lv_style_t * bg;
- lv_style_t * sb;
- lv_style_t * header;
- lv_style_t * content;
- struct
- {
- lv_style_t * rel;
- lv_style_t * pr;
- } btn;
- } win;
-#endif
- } style;
-
-#if LV_USE_GROUP
- struct
- {
- /* The `x` in the names inidicates that inconsistence becasue
- * the group related function are stored in the theme.*/
- lv_group_style_mod_cb_t style_mod_xcb;
- lv_group_style_mod_cb_t style_mod_edit_xcb;
- } group;
-#endif
-} lv_theme_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Set a theme for the system.
- * From now, all the created objects will use styles from this theme by default
- * @param th pointer to theme (return value of: 'lv_theme_init_xxx()')
- */
-void lv_theme_set_current(lv_theme_t * th);
-
-/**
- * Get the current system theme.
- * @return pointer to the current system theme. NULL if not set.
- */
-lv_theme_t * lv_theme_get_current(void);
-
-/**********************
- * MACROS
- **********************/
-
-/* Returns number of styles within the `lv_theme_t` structure. */
-#define LV_THEME_STYLE_COUNT (sizeof(((lv_theme_t *)0)->style) / sizeof(lv_style_t *))
-
-/**********************
- * POST INCLUDE
- *********************/
-#include "lv_theme_templ.h"
-#include "lv_theme_default.h"
-#include "lv_theme_alien.h"
-#include "lv_theme_night.h"
-#include "lv_theme_zen.h"
-#include "lv_theme_mono.h"
-#include "lv_theme_nemo.h"
-#include "lv_theme_material.h"
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEMES_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_alien.c b/src/libs/lvgl/src/lv_themes/lv_theme_alien.c
deleted file mode 100644
index 987a3631..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_alien.c
+++ /dev/null
@@ -1,958 +0,0 @@
-/**
- * @file lv_theme_alien.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_ALIEN
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-static uint16_t _hue;
-static lv_font_t * _font;
-
-static lv_theme_t theme;
-static lv_style_t def;
-static lv_style_t bg;
-static lv_style_t scr;
-static lv_style_t panel; /*General fancy background (e.g. to chart or ta)*/
-static lv_style_t sb;
-static lv_style_t btn_rel, btn_pr, btn_trel, btn_tpr, btn_ina;
-
-#if LV_USE_BAR
-static lv_style_t bar_bg, bar_indic;
-#endif
-
-#if LV_USE_SLIDER
-static lv_style_t slider_knob;
-#endif
-
-#if LV_USE_LMETER
-static lv_style_t lmeter_bg;
-#endif
-
-#if LV_USE_DDLIST
-static lv_style_t ddlist_bg, ddlist_sel;
-#endif
-
-#if LV_USE_BTNM
-static lv_style_t btnm_bg, btnm_rel, btnm_pr, btnm_trel, btnm_ina;
-#endif
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- /*Default*/
- lv_style_copy(&def, &lv_style_plain);
- def.body.opa = LV_OPA_COVER;
- def.glass = 0;
-
- def.body.main_color = lv_color_hex3(0x222);
- def.body.grad_color = lv_color_hex3(0x222);
- def.body.radius = 0;
- def.body.padding.left = LV_DPI / 8;
- def.body.padding.right = LV_DPI / 8;
- def.body.padding.top = LV_DPI / 8;
- def.body.padding.bottom = LV_DPI / 8;
- def.body.padding.inner = LV_DPI / 8;
- def.body.border.color = LV_COLOR_SILVER;
- def.body.border.width = 1;
- def.body.border.opa = LV_OPA_COVER;
- def.body.shadow.color = LV_COLOR_SILVER;
- def.body.shadow.width = 0;
- def.body.shadow.type = LV_SHADOW_FULL;
-
- def.text.color = lv_color_hex3(0xDDD);
- def.text.font = _font;
- def.text.letter_space = 1;
- def.text.line_space = 2;
-
- def.image.color = lv_color_hex3(0xDDD);
- def.image.intense = LV_OPA_TRANSP;
-
- def.line.color = lv_color_hex3(0xDDD);
- def.line.width = 1;
-
- /*Background*/
- lv_style_copy(&bg, &def);
- bg.body.main_color = lv_color_hex3(0x333);
- bg.body.grad_color = lv_color_hex3(0x333);
- bg.body.border.width = 2;
- bg.body.border.color = lv_color_hex3(0x666);
- bg.body.shadow.color = LV_COLOR_SILVER;
-
- lv_style_copy(&scr, &bg);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- /*Panel*/
- lv_style_copy(&panel, &def);
- panel.body.radius = LV_DPI / 10;
- panel.body.main_color = lv_color_hex3(0x666);
- panel.body.grad_color = lv_color_hex3(0x666);
- panel.body.border.color = lv_color_hex3(0xccc);
- panel.body.border.width = 2;
- panel.body.border.opa = LV_OPA_60;
- panel.text.color = lv_color_hsv_to_rgb(_hue, 8, 96);
- panel.image.color = lv_color_hsv_to_rgb(_hue, 8, 96);
- panel.line.color = lv_color_hsv_to_rgb(_hue, 20, 70);
-
- /*Scrollbar*/
- lv_style_copy(&sb, &def);
- sb.body.opa = LV_OPA_50;
- sb.body.radius = LV_RADIUS_CIRCLE;
- sb.body.border.color = LV_COLOR_SILVER;
- sb.body.border.opa = LV_OPA_40;
- sb.body.border.width = 1;
- sb.body.main_color = lv_color_hsv_to_rgb(_hue, 33, 92);
- sb.body.grad_color = lv_color_hsv_to_rgb(_hue, 33, 92);
- sb.body.padding.left = 1;
- sb.body.padding.right = 1;
- sb.body.padding.top = 1;
- sb.body.padding.bottom = 1;
- sb.body.padding.inner = LV_DPI / 15; /*Scrollbar width*/
-
- theme.style.bg = &bg;
- theme.style.scr = &scr;
- theme.style.panel = &panel;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
- theme.style.cont = &panel;
-#endif
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- lv_style_copy(&btn_rel, &def);
- btn_rel.glass = 0;
- btn_rel.body.opa = LV_OPA_TRANSP;
- btn_rel.body.radius = LV_RADIUS_CIRCLE;
- btn_rel.body.border.width = 2;
- btn_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
- btn_rel.body.border.opa = LV_OPA_80;
- btn_rel.body.padding.left = LV_DPI / 4;
- btn_rel.body.padding.right = LV_DPI / 4;
- btn_rel.body.padding.top = LV_DPI / 6;
- btn_rel.body.padding.bottom = LV_DPI / 6;
- btn_rel.body.padding.inner = LV_DPI / 10;
- btn_rel.text.color = lv_color_hsv_to_rgb(_hue, 8, 96);
- btn_rel.text.font = _font;
- btn_rel.image.color = lv_color_hsv_to_rgb(_hue, 8, 96);
-
- lv_style_copy(&btn_pr, &btn_rel);
- btn_pr.body.opa = LV_OPA_COVER;
- btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_pr.body.border.opa = LV_OPA_60;
- btn_pr.text.font = _font;
- btn_pr.text.color = lv_color_hsv_to_rgb(_hue, 10, 100);
- btn_pr.image.color = lv_color_hsv_to_rgb(_hue, 10, 100);
-
- lv_style_copy(&btn_trel, &btn_pr);
- btn_trel.body.opa = LV_OPA_COVER;
- btn_trel.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 60);
- btn_trel.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 60);
- btn_trel.body.border.opa = LV_OPA_60;
- btn_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 90);
- btn_trel.text.font = _font;
- btn_trel.text.color = lv_color_hsv_to_rgb(_hue, 0, 100);
- btn_trel.image.color = lv_color_hsv_to_rgb(_hue, 0, 100);
-
- lv_style_copy(&btn_tpr, &btn_trel);
- btn_tpr.body.opa = LV_OPA_COVER;
- btn_tpr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_tpr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_tpr.body.border.opa = LV_OPA_60;
- btn_tpr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
- btn_tpr.text.font = _font;
- btn_tpr.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
- btn_tpr.image.color = lv_color_hsv_to_rgb(_hue, 10, 90);
-
- lv_style_copy(&btn_ina, &btn_rel);
- btn_ina.body.border.opa = LV_OPA_60;
- btn_ina.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
- btn_ina.text.font = _font;
- btn_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
-
- theme.style.btn.rel = &btn_rel;
- theme.style.btn.pr = &btn_pr;
- theme.style.btn.tgl_rel = &btn_trel;
- theme.style.btn.tgl_pr = &btn_tpr;
- theme.style.btn.ina = &btn_ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
- static lv_style_t label_prim, label_sec, label_hint;
-
- lv_style_copy(&label_prim, &def);
- label_prim.text.font = _font;
- label_prim.text.color = lv_color_hsv_to_rgb(_hue, 80, 96);
-
- lv_style_copy(&label_sec, &label_prim);
- label_sec.text.color = lv_color_hsv_to_rgb(_hue, 40, 85);
-
- lv_style_copy(&label_hint, &label_prim);
- label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
-
- theme.style.label.prim = &label_prim;
- theme.style.label.sec = &label_sec;
- theme.style.label.hint = &label_hint;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- lv_style_copy(&bar_bg, &def);
- bar_bg.body.opa = LV_OPA_30;
- bar_bg.body.radius = LV_RADIUS_CIRCLE;
- bar_bg.body.main_color = LV_COLOR_WHITE;
- bar_bg.body.grad_color = LV_COLOR_SILVER;
- bar_bg.body.border.width = 2;
- bar_bg.body.border.color = LV_COLOR_SILVER;
- bar_bg.body.border.opa = LV_OPA_20;
- bar_bg.body.padding.left = 0;
- bar_bg.body.padding.right = 0;
- bar_bg.body.padding.top = LV_DPI / 10;
- bar_bg.body.padding.bottom = LV_DPI / 10;
- bar_bg.body.padding.inner = 0;
-
- lv_style_copy(&bar_indic, &def);
- bar_indic.body.radius = LV_RADIUS_CIRCLE;
- bar_indic.body.border.width = 2;
- bar_indic.body.border.color = LV_COLOR_SILVER;
- bar_indic.body.border.opa = LV_OPA_70;
- bar_indic.body.padding.left = 0;
- bar_indic.body.padding.right = 0;
- bar_indic.body.padding.top = 0;
- bar_indic.body.padding.bottom = 0;
- bar_indic.body.shadow.width = LV_DPI / 20;
- bar_indic.body.shadow.color = lv_color_hsv_to_rgb(_hue, 20, 90);
- bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
- bar_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
-
- theme.style.bar.bg = &bar_bg;
- theme.style.bar.indic = &bar_indic;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
- static lv_style_t img_light, img_dark;
- lv_style_copy(&img_light, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 15, 85);
- img_light.image.intense = LV_OPA_80;
-
- lv_style_copy(&img_dark, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 65);
- img_light.image.intense = LV_OPA_80;
-
- theme.style.img.light = &img_light;
- theme.style.img.dark = &img_dark;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
- static lv_style_t line_decor;
- lv_style_copy(&line_decor, &def);
- line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
- line_decor.line.width = 1;
-
- theme.style.line.decor = &line_decor;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
- lv_style_copy(&led, &lv_style_pretty_color);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.main_color = lv_color_hsv_to_rgb(_hue, 100, 100);
- led.body.grad_color = lv_color_hsv_to_rgb(_hue, 100, 40);
- led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
- led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
-
- theme.style.led = &led;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- lv_style_copy(&slider_knob, &def);
- slider_knob.body.opa = LV_OPA_60;
- slider_knob.body.radius = LV_RADIUS_CIRCLE;
- slider_knob.body.main_color = LV_COLOR_WHITE;
- slider_knob.body.grad_color = LV_COLOR_SILVER;
- slider_knob.body.border.width = 1;
- slider_knob.body.border.color = LV_COLOR_GRAY;
- slider_knob.body.border.opa = LV_OPA_50;
-
- theme.style.slider.bg = &bar_bg;
- theme.style.slider.indic = &bar_indic;
- theme.style.slider.knob = &slider_knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
- static lv_style_t sw_bg, sw_indic, sw_knob;
- lv_style_copy(&sw_bg, &bar_bg);
- sw_bg.body.opa = LV_OPA_COVER;
- sw_bg.body.padding.left = -2;
- sw_bg.body.padding.right = -2;
- sw_bg.body.padding.top = -2;
- sw_bg.body.padding.bottom = -2;
- sw_bg.body.main_color = lv_color_hex3(0x666);
- sw_bg.body.grad_color = lv_color_hex3(0x999);
- sw_bg.body.border.width = 2;
- sw_bg.body.border.opa = LV_OPA_50;
-
- lv_style_copy(&sw_indic, &bar_indic);
- sw_indic.body.shadow.width = LV_DPI / 20;
- sw_indic.body.padding.left = 0;
- sw_indic.body.padding.right = 0;
- sw_indic.body.padding.top = 0;
- sw_indic.body.padding.bottom = 0;
-
- lv_style_copy(&sw_knob, &slider_knob);
- sw_knob.body.opa = LV_OPA_80;
-
- theme.style.sw.bg = &sw_bg;
- theme.style.sw.indic = &sw_indic;
- theme.style.sw.knob_off = &sw_knob;
- theme.style.sw.knob_on = &sw_knob;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- lv_style_copy(&lmeter_bg, &def);
- lmeter_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
- lmeter_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 80);
- lmeter_bg.body.padding.left = LV_DPI / 8; /*Scale line length*/
- lmeter_bg.body.padding.right = LV_DPI / 8; /*Scale line length*/
- lmeter_bg.line.color = lv_color_hex3(0x222);
- lmeter_bg.line.width = 2;
-
- theme.style.lmeter = &lmeter_bg;
-
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge_bg;
- lv_style_copy(&gauge_bg, &def);
- gauge_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
- gauge_bg.body.grad_color = gauge_bg.body.main_color;
- gauge_bg.body.padding.left = LV_DPI / 16; /*Scale line length*/
- gauge_bg.body.padding.right = LV_DPI / 16; /*Scale line length*/
- gauge_bg.body.padding.top = LV_DPI / 10; /*Needle center size*/
- gauge_bg.body.padding.bottom = LV_DPI / 10; /*Needle center size*/
- gauge_bg.body.padding.inner = LV_DPI / 12; /*Label - scale distance*/
- gauge_bg.body.border.color = lv_color_hex3(0x777);
- gauge_bg.line.color = lv_color_hsv_to_rgb(_hue, 80, 75);
- gauge_bg.line.width = 2;
- gauge_bg.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
- gauge_bg.text.font = _font;
-
- theme.style.gauge = &gauge_bg;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- static lv_style_t arc;
- lv_style_copy(&arc, &def);
- arc.line.width = 8;
- arc.line.color = lv_color_hsv_to_rgb(_hue, 70, 90);
- arc.line.rounded = 1;
-
- /*For preloader*/
- arc.body.border.width = 2;
- arc.body.border.color = lv_color_hex3(0x555);
- arc.body.padding.left = 3;
- arc.body.padding.right = 3;
- arc.body.padding.top = 3;
- arc.body.padding.bottom = 3;
-
- theme.style.arc = &arc;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = theme.style.arc;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = &panel;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR
- static lv_style_t header;
- static lv_style_t color_text;
- static lv_style_t gray_text;
- static lv_style_t today_box;
-
- lv_style_copy(&header, &def);
- header.body.radius = 0;
- header.body.padding.left = LV_DPI / 12;
- header.body.padding.right = LV_DPI / 12;
- header.body.padding.top = LV_DPI / 14;
- header.body.padding.bottom = LV_DPI / 14;
- header.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 60);
- header.body.grad_color = header.body.main_color;
- header.body.border.opa = panel.body.border.opa;
- header.body.border.width = panel.body.border.width;
- header.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 80);
- header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
-
- lv_style_copy(&today_box, &header);
- today_box.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
- today_box.body.grad_color = today_box.body.main_color;
- today_box.body.opa = LV_OPA_TRANSP;
-
- lv_style_copy(&color_text, &def);
- color_text.text.color = lv_color_hsv_to_rgb(_hue, 30, 80);
-
- lv_style_copy(&gray_text, &def);
- gray_text.text.color = lv_color_hsv_to_rgb(_hue, 10, 65);
-
- theme.style.calendar.bg = &panel;
- theme.style.calendar.header = &header;
- theme.style.calendar.week_box = &header;
- theme.style.calendar.today_box = &today_box;
- theme.style.calendar.day_names = &color_text;
- theme.style.calendar.highlighted_days = &color_text;
- theme.style.calendar.inactive_days = &gray_text;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
- static lv_style_t cb_bg, cb_rel, cb_pr, cb_trel, cb_tpr, cb_ina;
- lv_style_copy(&cb_rel, &bg);
- cb_rel.body.radius = LV_DPI / 20;
- cb_rel.body.border.width = 1;
- cb_rel.body.border.color = LV_COLOR_GRAY;
- cb_rel.body.main_color = LV_COLOR_WHITE;
- cb_rel.body.grad_color = LV_COLOR_SILVER;
-
- lv_style_copy(&cb_bg, &bg);
- cb_bg.body.opa = LV_OPA_TRANSP;
- cb_bg.body.border.width = 0;
- cb_bg.body.padding.inner = LV_DPI / 8;
- cb_bg.body.padding.left = 0;
- cb_bg.body.padding.right = 0;
- cb_bg.body.padding.top = 0;
- cb_bg.body.padding.bottom = 0;
- cb_bg.text.font = _font;
-
- lv_style_copy(&cb_pr, &cb_rel);
- cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 90);
- cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 82);
-
- lv_style_copy(&cb_trel, &cb_rel);
- cb_trel.body.border.width = 4;
- cb_trel.body.border.color = LV_COLOR_WHITE;
- cb_trel.body.border.opa = LV_OPA_60;
- cb_trel.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 82);
- cb_trel.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 62);
-
- lv_style_copy(&cb_tpr, &cb_trel);
- cb_tpr.body.border.color = LV_COLOR_SILVER;
- cb_tpr.body.border.opa = LV_OPA_70;
- cb_tpr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 72);
- cb_tpr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 52);
-
- lv_style_copy(&cb_ina, &cb_trel);
- cb_ina.body.border.width = 1;
- cb_ina.body.border.color = LV_COLOR_GRAY;
- cb_ina.body.main_color = LV_COLOR_SILVER;
- cb_ina.body.grad_color = LV_COLOR_SILVER;
-
- theme.style.cb.bg = &cb_bg;
- theme.style.cb.box.rel = &cb_rel;
- theme.style.cb.box.pr = &cb_pr;
- theme.style.cb.box.tgl_rel = &cb_trel;
- theme.style.cb.box.tgl_pr = &cb_tpr;
- theme.style.cb.box.ina = &cb_ina;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
- lv_style_copy(&btnm_bg, &lv_style_transp_tight);
- btnm_bg.body.border.width = 1;
- btnm_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 80);
- btnm_bg.body.border.opa = LV_OPA_COVER;
- btnm_bg.body.radius = LV_DPI / 8;
-
- lv_style_copy(&btnm_rel, &lv_style_plain);
- btnm_rel.body.opa = LV_OPA_TRANSP;
- btnm_rel.body.radius = LV_DPI / 8;
- btnm_rel.text.color = lv_color_hsv_to_rgb(_hue, 60, 80);
- btnm_rel.text.font = _font;
-
- lv_style_copy(&btnm_pr, &lv_style_plain);
- btnm_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
- btnm_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 70);
- btnm_pr.body.radius = LV_DPI / 8;
- btnm_pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 40);
- btnm_pr.text.font = _font;
-
- lv_style_copy(&btnm_trel, &btnm_rel);
- btnm_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 80);
- btnm_trel.body.border.width = 3;
-
- lv_style_copy(&btnm_ina, &btnm_rel);
- btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
-
- theme.style.btnm.bg = &btnm_bg;
- theme.style.btnm.btn.rel = &btnm_rel;
- theme.style.btnm.btn.pr = &btnm_pr;
- theme.style.btnm.btn.tgl_rel = &btnm_trel;
- theme.style.btnm.btn.tgl_pr = &btnm_pr;
- theme.style.btnm.btn.ina = &btnm_ina;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
- theme.style.kb.bg = &btnm_bg;
- theme.style.kb.btn.rel = &btnm_rel;
- theme.style.kb.btn.pr = &btnm_pr;
- theme.style.kb.btn.tgl_rel = &btnm_trel;
- theme.style.kb.btn.tgl_pr = &btnm_pr;
- theme.style.kb.btn.ina = &btnm_ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
- static lv_style_t mbox_bg;
- lv_style_copy(&mbox_bg, &panel);
- mbox_bg.body.shadow.width = LV_DPI / 12;
-
- theme.style.mbox.bg = &mbox_bg;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = &btn_trel;
- theme.style.mbox.btn.pr = &btn_tpr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
- theme.style.page.bg = &panel;
- theme.style.page.scrl = &lv_style_transp_fit;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
- theme.style.ta.area = &panel;
- theme.style.ta.oneline = &panel;
- theme.style.ta.cursor = NULL;
- theme.style.ta.sb = &sb;
-#endif
-}
-
-static void spinbox_init(void)
-{
-#if LV_USE_SPINBOX
- theme.style.spinbox.bg = &panel;
- theme.style.spinbox.cursor = theme.style.ta.cursor;
- theme.style.spinbox.sb = theme.style.ta.sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
- static lv_style_t list_bg, list_rel, list_pr, list_trel, list_tpr, list_ina;
- lv_style_copy(&list_rel, &def);
- list_rel.body.opa = LV_OPA_TRANSP;
- list_rel.body.border.width = 1;
- list_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 50, 85);
- list_rel.body.border.opa = LV_OPA_COVER;
- list_rel.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- list_rel.text.font = _font;
- list_rel.image.color = lv_color_hsv_to_rgb(_hue, 10, 94);
-
- lv_style_copy(&list_pr, &list_rel);
- list_pr.body.opa = LV_OPA_COVER;
- list_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 34, 41);
- list_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 34, 41);
- list_pr.text.color = lv_color_hsv_to_rgb(_hue, 7, 96);
- list_pr.image.color = lv_color_hsv_to_rgb(_hue, 7, 96);
-
- lv_style_copy(&list_trel, &list_rel);
- lv_style_copy(&list_tpr, &list_pr);
- lv_style_copy(&list_ina, &def);
-
- lv_style_copy(&list_bg, &list_rel);
- list_bg.body.padding.left = 0;
- list_bg.body.padding.right = 0;
- list_bg.body.padding.top = 0;
- list_bg.body.padding.bottom = 0;
-
- theme.style.list.sb = &sb;
- theme.style.list.bg = &list_bg;
- theme.style.list.scrl = &lv_style_transp_tight;
- theme.style.list.btn.rel = &list_rel;
- theme.style.list.btn.pr = &list_pr;
- theme.style.list.btn.tgl_rel = &list_trel;
- theme.style.list.btn.tgl_pr = &list_tpr;
- theme.style.list.btn.ina = &list_ina;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- lv_style_copy(&ddlist_bg, &panel);
- ddlist_bg.text.line_space = LV_DPI / 8;
- ddlist_bg.body.padding.left = LV_DPI / 6;
- ddlist_bg.body.padding.right = LV_DPI / 6;
- ddlist_bg.body.padding.top = LV_DPI / 6;
- ddlist_bg.body.padding.bottom = LV_DPI / 6;
-
- lv_style_copy(&ddlist_sel, &panel);
- ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 45, 70);
- ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 45, 70);
- ddlist_sel.body.opa = LV_OPA_COVER;
- ddlist_sel.body.radius = 0;
-
- theme.style.ddlist.bg = &ddlist_bg;
- theme.style.ddlist.sel = &ddlist_sel;
- theme.style.ddlist.sb = &sb;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t roller_bg, roller_sel;
- lv_style_copy(&roller_bg, &ddlist_bg);
- roller_bg.text.line_space = LV_DPI / 6;
- roller_bg.body.radius = LV_DPI / 20;
- roller_bg.body.main_color = lv_color_hex3(0x222);
- roller_bg.body.grad_color = lv_color_hex3(0x666);
- roller_bg.body.border.opa = LV_OPA_30;
- roller_bg.text.opa = LV_OPA_70;
- roller_bg.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
- roller_bg.body.shadow.width = 0;
-
- lv_style_copy(&roller_sel, &panel);
- roller_sel.body.opa = LV_OPA_TRANSP;
- roller_sel.body.radius = 0;
- roller_sel.text.opa = LV_OPA_COVER;
- roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 70, 95);
-
- theme.style.roller.bg = &roller_bg;
- theme.style.roller.sel = &roller_sel;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
- static lv_style_t tab_rel, tab_pr, tab_trel, tab_tpr, tab_indic;
- lv_style_copy(&tab_rel, &def);
- tab_rel.body.main_color = lv_color_hex3(0x666);
- tab_rel.body.grad_color = lv_color_hex3(0x666);
- tab_rel.body.padding.left = 0;
- tab_rel.body.padding.right = 0;
- tab_rel.body.padding.top = LV_DPI / 6;
- tab_rel.body.padding.bottom = LV_DPI / 6;
- tab_rel.body.padding.inner = 0;
- tab_rel.body.border.width = 1;
- tab_rel.body.border.color = LV_COLOR_SILVER;
- tab_rel.body.border.opa = LV_OPA_40;
- tab_rel.text.color = lv_color_hex3(0xDDD);
- tab_rel.text.font = _font;
-
- lv_style_copy(&tab_pr, &tab_rel);
- tab_pr.body.main_color = lv_color_hex3(0x444);
- tab_pr.body.grad_color = lv_color_hex3(0x444);
-
- lv_style_copy(&tab_trel, &def);
- tab_trel.body.opa = LV_OPA_TRANSP;
- tab_trel.body.padding.left = 0;
- tab_trel.body.padding.right = 0;
- tab_trel.body.padding.top = LV_DPI / 6;
- tab_trel.body.padding.bottom = LV_DPI / 6;
- tab_trel.body.padding.inner = 0;
- tab_trel.body.border.width = 1;
- tab_trel.body.border.color = LV_COLOR_SILVER;
- tab_trel.body.border.opa = LV_OPA_40;
- tab_trel.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- tab_trel.text.font = _font;
-
- lv_style_copy(&tab_tpr, &def);
- tab_tpr.body.main_color = LV_COLOR_GRAY;
- tab_tpr.body.grad_color = LV_COLOR_GRAY;
- tab_tpr.body.padding.left = 0;
- tab_tpr.body.padding.right = 0;
- tab_tpr.body.padding.top = LV_DPI / 6;
- tab_tpr.body.padding.bottom = LV_DPI / 6;
- tab_tpr.body.padding.inner = 0;
- tab_tpr.body.border.width = 1;
- tab_tpr.body.border.color = LV_COLOR_SILVER;
- tab_tpr.body.border.opa = LV_OPA_40;
- tab_tpr.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- tab_tpr.text.font = _font;
-
- lv_style_copy(&tab_indic, &def);
- tab_indic.body.border.width = 0;
- tab_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 87);
- tab_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 87);
- tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
-
- theme.style.tabview.bg = &bg;
- theme.style.tabview.indic = &tab_indic;
- theme.style.tabview.btn.bg = &lv_style_transp_tight;
- theme.style.tabview.btn.rel = &tab_rel;
- theme.style.tabview.btn.pr = &tab_pr;
- theme.style.tabview.btn.tgl_rel = &tab_trel;
- theme.style.tabview.btn.tgl_pr = &tab_tpr;
-#endif
-}
-
-static void tileview_init(void)
-{
-#if LV_USE_TILEVIEW != 0
- theme.style.tileview.bg = &lv_style_transp_tight;
- theme.style.tileview.scrl = &lv_style_transp_tight;
- theme.style.tileview.sb = theme.style.page.sb;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- static lv_style_t cell;
- lv_style_copy(&cell, &panel);
- cell.body.radius = 0;
- cell.body.border.width = 1;
- cell.body.padding.left = LV_DPI / 12;
- cell.body.padding.right = LV_DPI / 12;
- cell.body.padding.top = LV_DPI / 12;
- cell.body.padding.bottom = LV_DPI / 12;
-
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &cell;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t header;
-
- lv_style_copy(&header, &def);
- header.body.radius = 0;
- header.body.padding.left = LV_DPI / 12;
- header.body.padding.right = LV_DPI / 12;
- header.body.padding.top = LV_DPI / 20;
- header.body.padding.bottom = LV_DPI / 20;
- header.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 60);
- header.body.grad_color = header.body.main_color;
- header.body.border.opa = panel.body.border.opa;
- header.body.border.width = panel.body.border.width;
- header.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 80);
- header.body.border.part = LV_BORDER_BOTTOM;
- header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
- header.image.color = lv_color_hsv_to_rgb(_hue, 5, 100);
-
- theme.style.win.bg = &bg;
- theme.style.win.sb = &sb;
- theme.style.win.header = &header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &btn_rel;
- theme.style.win.btn.pr = &btn_pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the alien theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- label_init();
- bar_init();
- img_init();
- line_init();
- led_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- arc_init();
- preload_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- spinbox_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- tileview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_alien(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_alien.h b/src/libs/lvgl/src/lv_themes/lv_theme_alien.h
deleted file mode 100644
index a3d5851f..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_alien.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * @file lv_theme_alien.h
- *
- */
-
-#ifndef LV_THEME_ALIEN_H
-#define LV_THEME_ALIEN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_ALIEN
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the alien theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font);
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_alien(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_ALIEN_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_default.c b/src/libs/lvgl/src/lv_themes/lv_theme_default.c
deleted file mode 100644
index 7a7c2311..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_default.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/**
- * @file lv_theme_default.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_DEFAULT
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-static lv_style_t def;
-static lv_style_t scr;
-
-/*Static style definitions*/
-static lv_style_t sb;
-static lv_style_t plain_bordered;
-static lv_style_t label_prim;
-static lv_style_t label_sec;
-static lv_style_t label_hint;
-
-/*Saved input parameters*/
-static uint16_t _hue;
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
-
- lv_style_copy(&scr, &def);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- lv_style_copy(&sb, &lv_style_pretty_color);
- sb.body.grad_color = sb.body.main_color;
- sb.body.padding.right = sb.body.padding.right / 2; /*Make closer to the edges*/
- sb.body.padding.bottom = sb.body.padding.bottom / 2;
-
- lv_style_copy(&plain_bordered, &lv_style_plain);
- plain_bordered.body.border.width = 2;
- plain_bordered.body.border.color = lv_color_hex3(0xbbb);
-
- theme.style.bg = &lv_style_plain;
- theme.style.scr = &scr;
- theme.style.panel = &lv_style_pretty;
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- theme.style.btn.rel = &lv_style_btn_rel;
- theme.style.btn.pr = &lv_style_btn_pr;
- theme.style.btn.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.btn.tgl_pr = &lv_style_btn_tgl_pr;
- theme.style.btn.ina = &lv_style_btn_ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
-
- lv_style_copy(&label_prim, &lv_style_plain);
- lv_style_copy(&label_sec, &lv_style_plain);
- lv_style_copy(&label_hint, &lv_style_plain);
-
- label_prim.text.color = lv_color_hex3(0x111);
- label_sec.text.color = lv_color_hex3(0x888);
- label_hint.text.color = lv_color_hex3(0xaaa);
-
- theme.style.label.prim = &label_prim;
- theme.style.label.sec = &label_sec;
- theme.style.label.hint = &label_hint;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
-
- theme.style.img.light = &def;
- theme.style.img.dark = &def;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
-
- theme.style.line.decor = &def;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
-
- lv_style_copy(&led, &lv_style_pretty_color);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.shadow.color = led.body.main_color;
-
- theme.style.led = &led;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
-
- theme.style.bar.bg = &lv_style_pretty;
- theme.style.bar.indic = &lv_style_pretty_color;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- static lv_style_t slider_bg;
- lv_style_copy(&slider_bg, &lv_style_pretty);
- slider_bg.body.padding.left = LV_DPI / 20;
- slider_bg.body.padding.right = LV_DPI / 20;
- slider_bg.body.padding.top = LV_DPI / 20;
- slider_bg.body.padding.bottom = LV_DPI / 20;
-
- theme.style.slider.bg = &slider_bg;
- theme.style.slider.indic = &lv_style_pretty_color;
- theme.style.slider.knob = &lv_style_pretty;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
- static lv_style_t sw_bg;
- lv_style_copy(&sw_bg, &lv_style_pretty);
- sw_bg.body.padding.left = 3;
- sw_bg.body.padding.right = 3;
- sw_bg.body.padding.top = 3;
- sw_bg.body.padding.bottom = 3;
-
- theme.style.sw.bg = &sw_bg;
- theme.style.sw.indic = &lv_style_pretty_color;
- theme.style.sw.knob_off = &lv_style_pretty;
- theme.style.sw.knob_on = &lv_style_pretty;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- static lv_style_t lmeter;
- lv_style_copy(&lmeter, &lv_style_pretty_color);
- lmeter.line.color = lv_color_hex3(0xddd);
- lmeter.line.width = 2;
- lmeter.body.main_color = lv_color_mix(lmeter.body.main_color, LV_COLOR_WHITE, LV_OPA_50);
- lmeter.body.grad_color = lv_color_mix(lmeter.body.grad_color, LV_COLOR_BLACK, LV_OPA_50);
-
- theme.style.lmeter = &lmeter;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge;
- lv_style_copy(&gauge, theme.style.lmeter);
- gauge.line.color = theme.style.lmeter->body.grad_color;
- gauge.line.width = 2;
- gauge.body.main_color = lv_color_hex3(0x888);
- gauge.body.grad_color = theme.style.lmeter->body.main_color;
- gauge.text.color = lv_color_hex3(0x888);
-
- theme.style.gauge = &gauge;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
-
- theme.style.chart = &lv_style_pretty;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
-
- theme.style.cb.bg = &lv_style_transp;
- theme.style.cb.box.rel = &lv_style_pretty;
- theme.style.cb.box.pr = &lv_style_btn_pr;
- theme.style.cb.box.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.cb.box.tgl_pr = &lv_style_btn_tgl_pr;
- theme.style.cb.box.ina = &lv_style_btn_ina;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
-
- theme.style.btnm.bg = &lv_style_pretty;
- theme.style.btnm.btn.rel = &lv_style_btn_rel;
- theme.style.btnm.btn.pr = &lv_style_btn_pr;
- theme.style.btnm.btn.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.btnm.btn.tgl_pr = &lv_style_btn_tgl_pr;
- theme.style.btnm.btn.ina = &lv_style_btn_ina;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
-
- theme.style.kb.bg = &lv_style_pretty;
- theme.style.kb.btn.rel = &lv_style_btn_rel;
- theme.style.kb.btn.pr = &lv_style_btn_pr;
- theme.style.kb.btn.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.kb.btn.tgl_pr = &lv_style_btn_tgl_pr;
- theme.style.kb.btn.ina = &lv_style_btn_ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
-
- theme.style.mbox.bg = &lv_style_pretty;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = &lv_style_btn_rel;
- theme.style.mbox.btn.pr = &lv_style_btn_tgl_pr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- theme.style.page.bg = &lv_style_pretty;
- theme.style.page.scrl = &lv_style_transp_tight;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
-
- theme.style.ta.area = &lv_style_pretty;
- theme.style.ta.oneline = &lv_style_pretty;
- theme.style.ta.cursor = NULL;
- theme.style.ta.sb = &sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
-
- theme.style.list.bg = &lv_style_pretty;
- theme.style.list.scrl = &lv_style_transp_fit;
- theme.style.list.sb = &sb;
- theme.style.list.btn.rel = &lv_style_btn_rel;
- theme.style.list.btn.pr = &lv_style_btn_pr;
- theme.style.list.btn.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.list.btn.tgl_pr = &lv_style_btn_tgl_pr;
- theme.style.list.btn.ina = &lv_style_btn_ina;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
-
- theme.style.ddlist.bg = &lv_style_pretty;
- theme.style.ddlist.sel = &lv_style_plain_color;
- theme.style.ddlist.sb = &sb;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
-
- theme.style.roller.bg = &lv_style_pretty;
- theme.style.roller.sel = &lv_style_plain_color;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
-
- theme.style.tabview.bg = &plain_bordered;
- theme.style.tabview.indic = &lv_style_plain_color;
- theme.style.tabview.btn.bg = &lv_style_transp;
- theme.style.tabview.btn.rel = &lv_style_btn_rel;
- theme.style.tabview.btn.pr = &lv_style_btn_pr;
- theme.style.tabview.btn.tgl_rel = &lv_style_btn_tgl_rel;
- theme.style.tabview.btn.tgl_pr = &lv_style_btn_tgl_pr;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &lv_style_plain;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
-
- theme.style.win.bg = &plain_bordered;
- theme.style.win.sb = &sb;
- theme.style.win.header = &lv_style_plain_color;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &lv_style_btn_rel;
- theme.style.win.btn.pr = &lv_style_btn_pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_ORANGE;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the default theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- btn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- chart_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_default(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_default.h b/src/libs/lvgl/src/lv_themes/lv_theme_default.h
deleted file mode 100644
index 4a2ecc08..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_default.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_default.h
- *
- */
-
-#ifndef LV_THEME_DEFAULT_H
-#define LV_THEME_DEFAULT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_DEFAULT
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the default theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_default(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_material.c b/src/libs/lvgl/src/lv_themes/lv_theme_material.c
deleted file mode 100644
index 6d162bf5..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_material.c
+++ /dev/null
@@ -1,936 +0,0 @@
-/**
- * @file lv_theme_material.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_MATERIAL
-
-/*********************
- * DEFINES
- *********************/
-#define DEF_RADIUS 4
-#define DEF_SHADOW_COLOR lv_color_hex3(0xaaa)
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-static lv_style_t def;
-
-/*Static style definitions*/
-static lv_style_t sb;
-
-/*Saved input parameters*/
-static uint16_t _hue;
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- static lv_style_t bg, panel, scr;
-
- lv_style_copy(&def, &lv_style_plain); /*Initialize the default style*/
- def.text.font = _font;
- def.body.radius = DEF_RADIUS;
-
- lv_style_copy(&bg, &def);
- bg.body.main_color = lv_color_hex(0xf0f0f0);
- bg.body.grad_color = bg.body.main_color;
- bg.body.radius = 0;
-
- lv_style_copy(&scr, &bg);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- lv_style_copy(&panel, &def);
- panel.body.radius = DEF_RADIUS;
- panel.body.main_color = LV_COLOR_WHITE;
- panel.body.grad_color = LV_COLOR_WHITE;
- panel.body.border.width = 1;
- panel.body.border.color = lv_color_hex3(0xbbb);
- panel.body.border.opa = LV_OPA_COVER;
- panel.body.shadow.color = DEF_SHADOW_COLOR;
- panel.body.shadow.type = LV_SHADOW_BOTTOM;
- panel.body.shadow.width = 4;
- panel.body.padding.left = LV_DPI / 8;
- panel.body.padding.right = LV_DPI / 8;
- panel.body.padding.top = LV_DPI / 8;
- panel.body.padding.bottom = LV_DPI / 8;
- panel.body.padding.inner = LV_DPI / 12;
- panel.text.color = lv_color_hex3(0x333);
- panel.image.color = lv_color_hex3(0x333);
-
- lv_style_copy(&sb, &def);
- sb.body.main_color = LV_COLOR_BLACK;
- sb.body.grad_color = LV_COLOR_BLACK;
- sb.body.opa = LV_OPA_40;
- sb.body.padding.right = LV_DPI / 25;
- sb.body.padding.bottom = LV_DPI / 25;
-
- theme.style.bg = &bg;
- theme.style.scr = &scr;
- theme.style.panel = &panel;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
-
- theme.style.cont = theme.style.panel;
-#endif
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&rel, &def);
- rel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
- rel.body.grad_color = rel.body.main_color;
- rel.body.radius = DEF_RADIUS;
- rel.body.padding.left = LV_DPI / 6;
- rel.body.padding.right = LV_DPI / 6;
- rel.body.padding.top = LV_DPI / 8;
- rel.body.padding.bottom = LV_DPI / 8;
- rel.body.padding.inner = LV_DPI / 10;
- rel.body.shadow.color = DEF_SHADOW_COLOR;
- rel.body.shadow.type = LV_SHADOW_BOTTOM;
- rel.body.shadow.width = 6;
- rel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
- rel.image.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- lv_style_copy(&pr, &rel);
- pr.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 60);
- pr.body.grad_color = pr.body.main_color;
- pr.body.shadow.width = 4;
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 95, 50);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.body.shadow.width = 4;
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 95, 40);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.body.shadow.width = 2;
-
- lv_style_copy(&ina, &rel);
- ina.body.main_color = lv_color_hex3(0xccc);
- ina.body.grad_color = ina.body.main_color;
- ina.body.shadow.width = 0;
- ina.text.color = lv_color_hsv_to_rgb(_hue, 95, 5);
- ina.image.color = lv_color_hsv_to_rgb(_hue, 95, 5);
-
- theme.style.btn.rel = &rel;
- theme.style.btn.pr = &pr;
- theme.style.btn.tgl_rel = &tgl_rel;
- theme.style.btn.tgl_pr = &tgl_pr;
- theme.style.btn.ina = &ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
- static lv_style_t prim, sec, hint;
-
- lv_style_copy(&prim, &def);
- prim.text.font = _font;
- prim.text.color = lv_color_hsv_to_rgb(_hue, 80, 10);
-
- lv_style_copy(&sec, &prim);
- sec.text.color = lv_color_hsv_to_rgb(_hue, 80, 75);
-
- lv_style_copy(&hint, &prim);
- hint.text.color = lv_color_hsv_to_rgb(_hue, 40, 90);
-
- theme.style.label.prim = &prim;
- theme.style.label.sec = &sec;
- theme.style.label.hint = &hint;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
- static lv_style_t img_light, img_dark;
- lv_style_copy(&img_light, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 15, 85);
- img_light.image.intense = LV_OPA_80;
-
- lv_style_copy(&img_dark, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 65);
- img_light.image.intense = LV_OPA_80;
-
- theme.style.img.light = &def;
- theme.style.img.dark = &def;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
-
- theme.style.line.decor = &def;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
- lv_style_copy(&led, &def);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.main_color = lv_color_hsv_to_rgb(_hue, 100, 100);
- led.body.grad_color = lv_color_hsv_to_rgb(_hue, 100, 100);
- led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
- led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
-
- theme.style.led = &led;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- static lv_style_t bar_bg, bar_indic;
-
- lv_style_copy(&bar_bg, &def);
- bar_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 15, 95);
- bar_bg.body.grad_color = bar_bg.body.main_color;
- bar_bg.body.radius = 3;
- bar_bg.body.border.width = 0;
- bar_bg.body.padding.left = LV_DPI / 16;
- bar_bg.body.padding.right = LV_DPI / 16;
- bar_bg.body.padding.top = LV_DPI / 16;
- bar_bg.body.padding.bottom = LV_DPI / 16;
-
- lv_style_copy(&bar_indic, &bar_bg);
- bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 85, 70);
- bar_indic.body.grad_color = bar_indic.body.main_color;
- bar_indic.body.padding.left = 0;
- bar_indic.body.padding.right = 0;
- bar_indic.body.padding.top = 0;
- bar_indic.body.padding.bottom = 0;
-
- theme.style.bar.bg = &bar_bg;
- theme.style.bar.indic = &bar_indic;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- static lv_style_t knob;
-
- lv_style_copy(&knob, &def);
- knob.body.radius = LV_RADIUS_CIRCLE;
- knob.body.border.width = 0;
- knob.body.main_color = theme.style.bar.indic->body.main_color;
- knob.body.grad_color = knob.body.main_color;
-
- theme.style.slider.bg = theme.style.bar.bg;
- theme.style.slider.indic = theme.style.bar.indic;
- theme.style.slider.knob = &knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
- static lv_style_t sw_bg, sw_indic, sw_knob_off, sw_knob_on;
- lv_style_copy(&sw_bg, theme.style.slider.bg);
- sw_bg.body.radius = LV_RADIUS_CIRCLE;
-
- lv_style_copy(&sw_indic, theme.style.slider.bg);
- sw_indic.body.radius = LV_RADIUS_CIRCLE;
-
- lv_style_copy(&sw_knob_on, theme.style.slider.knob);
- sw_knob_on.body.shadow.width = 3;
- sw_knob_on.body.shadow.type = LV_SHADOW_BOTTOM;
- sw_knob_on.body.shadow.color = DEF_SHADOW_COLOR;
-
- lv_style_copy(&sw_knob_off, &sw_knob_on);
- sw_knob_off.body.main_color = lv_color_hex(0xfafafa);
- sw_knob_off.body.grad_color = sw_knob_off.body.main_color;
- sw_knob_off.body.border.width = 1;
- sw_knob_off.body.border.color = lv_color_hex3(0x999);
- sw_knob_off.body.border.opa = LV_OPA_COVER;
-
- theme.style.sw.bg = &sw_bg;
- theme.style.sw.indic = &sw_indic;
- theme.style.sw.knob_off = &sw_knob_off;
- theme.style.sw.knob_on = &sw_knob_on;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- static lv_style_t lmeter;
- lv_style_copy(&lmeter, &def);
- lmeter.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 90);
- lmeter.body.grad_color = lmeter.body.main_color;
- lmeter.body.padding.left = LV_DPI / 10; /*Scale line length*/
- lmeter.line.color = lv_color_hex3(0x999);
- lmeter.line.width = 2;
-
- theme.style.lmeter = &lmeter;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
-
- static lv_style_t gauge;
- lv_style_copy(&gauge, &def);
- gauge.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 60);
- gauge.body.grad_color = gauge.body.main_color;
- gauge.body.padding.left = LV_DPI / 16; /*Scale line length*/
- gauge.body.padding.inner = LV_DPI / 8;
- gauge.body.border.color = lv_color_hex3(0x999);
- gauge.text.color = lv_color_hex3(0x333);
- gauge.line.width = 3;
- gauge.line.color = lv_color_hsv_to_rgb(_hue, 95, 70);
-
- theme.style.gauge = &gauge;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- static lv_style_t arc;
- lv_style_copy(&arc, &def);
- arc.line.width = 10;
- arc.line.color = lv_color_hsv_to_rgb(_hue, 90, 90);
-
- /*For prelaoder*/
- arc.body.border.width = 10;
- arc.body.border.color = lv_color_hsv_to_rgb(_hue, 30, 90);
- arc.body.padding.left = 0;
- arc.body.padding.right = 0;
- arc.body.padding.top = 0;
- arc.body.padding.bottom = 0;
-
- theme.style.arc = &arc;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = theme.style.arc;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = theme.style.panel;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR
- static lv_style_t ina_days;
- lv_style_copy(&ina_days, &def);
- ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 70);
-
- static lv_style_t high_days;
- lv_style_copy(&high_days, &def);
- high_days.text.color = lv_color_hsv_to_rgb(_hue, 80, 90);
-
- static lv_style_t week_box;
- lv_style_copy(&week_box, &def);
- week_box.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 100);
- week_box.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 100);
- week_box.body.padding.top = LV_DPI / 20;
- week_box.body.padding.bottom = LV_DPI / 20;
- week_box.body.padding.left = theme.style.panel->body.padding.left;
- week_box.body.padding.right = theme.style.panel->body.padding.right;
- week_box.body.border.color = theme.style.panel->body.border.color;
- week_box.body.border.width = theme.style.panel->body.border.width;
- week_box.body.border.part = LV_BORDER_LEFT | LV_BORDER_RIGHT;
- week_box.body.radius = 0;
-
- static lv_style_t today_box;
- lv_style_copy(&today_box, &def);
- today_box.body.main_color = LV_COLOR_WHITE;
- today_box.body.grad_color = LV_COLOR_WHITE;
- today_box.body.padding.top = LV_DPI / 20;
- today_box.body.padding.bottom = LV_DPI / 20;
- today_box.body.radius = 0;
-
- theme.style.calendar.bg = theme.style.panel;
- theme.style.calendar.header = &lv_style_transp;
- theme.style.calendar.inactive_days = &ina_days;
- theme.style.calendar.highlighted_days = &high_days;
- theme.style.calendar.week_box = &week_box;
- theme.style.calendar.today_box = &today_box;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
- static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
- lv_style_copy(&rel, theme.style.panel);
- rel.body.shadow.type = LV_SHADOW_BOTTOM;
- rel.body.shadow.width = 3;
-
- lv_style_copy(&pr, &rel);
- pr.body.main_color = lv_color_hex3(0xccc);
- pr.body.grad_color = pr.body.main_color;
- pr.body.shadow.width = 0;
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 85);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.body.shadow.type = LV_SHADOW_FULL;
- tgl_rel.body.shadow.width = 0;
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 65);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.body.shadow.width = 0;
-
- lv_style_copy(&ina, theme.style.btn.ina);
-
- theme.style.cb.bg = &lv_style_transp;
- theme.style.cb.box.rel = &rel;
- theme.style.cb.box.pr = &pr;
- theme.style.cb.box.tgl_rel = &tgl_rel;
- theme.style.cb.box.tgl_pr = &tgl_pr;
- theme.style.cb.box.ina = &ina;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
- static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&bg, theme.style.panel);
- bg.body.padding.left = 0;
- bg.body.padding.right = 0;
- bg.body.padding.top = 0;
- bg.body.padding.bottom = 0;
- bg.body.padding.inner = 0;
- bg.text.color = lv_color_hex3(0x555);
-
- lv_style_copy(&rel, theme.style.panel);
- rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
- rel.body.border.width = 1;
- rel.body.border.color = lv_color_hex3(0xbbb);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.shadow.width = 0;
-
- lv_style_copy(&pr, &rel);
- pr.glass = 0;
- pr.body.main_color = lv_color_hex3(0xddd);
- pr.body.grad_color = pr.body.main_color;
- pr.body.border.width = 0;
- pr.body.opa = LV_OPA_COVER;
-
- lv_style_copy(&tgl_rel, &pr);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 95, 65);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.body.border.width = 0;
-
- lv_style_copy(&ina, &pr);
- ina.body.main_color = lv_color_hex3(0xccc);
- ina.body.grad_color = ina.body.main_color;
-
- theme.style.btnm.bg = &bg;
- theme.style.btnm.btn.rel = &rel;
- theme.style.btnm.btn.pr = &pr;
- theme.style.btnm.btn.tgl_rel = &tgl_rel;
- theme.style.btnm.btn.tgl_pr = &tgl_pr;
- theme.style.btnm.btn.ina = &def;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
-
- static lv_style_t rel;
- lv_style_copy(&rel, &lv_style_transp);
- rel.text.font = _font;
-
- theme.style.kb.bg = theme.style.btnm.bg;
- theme.style.kb.btn.rel = &rel;
- theme.style.kb.btn.pr = theme.style.btnm.btn.pr;
- theme.style.kb.btn.tgl_rel = theme.style.btnm.btn.tgl_rel;
- theme.style.kb.btn.tgl_pr = theme.style.btnm.btn.tgl_pr;
- theme.style.kb.btn.ina = theme.style.btnm.btn.ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
- static lv_style_t pr, rel;
-
- lv_style_copy(&rel, &lv_style_transp);
- rel.glass = 0;
- rel.text.font = _font;
- rel.text.color = lv_color_hsv_to_rgb(_hue, 85, 75);
-
- lv_style_copy(&pr, theme.style.btnm.btn.pr);
- pr.text.color = lv_color_hsv_to_rgb(_hue, 85, 60);
-
- theme.style.mbox.bg = theme.style.panel;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = &rel;
- theme.style.mbox.btn.pr = &pr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- theme.style.page.bg = theme.style.panel;
- theme.style.page.scrl = &lv_style_transp;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
- static lv_style_t oneline;
-
- lv_style_copy(&oneline, &def);
- oneline.body.opa = LV_OPA_TRANSP;
- oneline.body.radius = 0;
- oneline.body.border.part = LV_BORDER_BOTTOM;
- oneline.body.border.width = 3;
- oneline.body.border.color = lv_color_hex3(0x333);
- oneline.body.border.opa = LV_OPA_COVER;
- oneline.text.color = lv_color_hex3(0x333);
-
- theme.style.ta.area = theme.style.panel;
- theme.style.ta.oneline = &oneline;
- theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
- theme.style.ta.sb = &sb;
-#endif
-}
-
-static void spinbox_init(void)
-{
-#if LV_USE_SPINBOX
- theme.style.spinbox.bg = theme.style.panel;
- theme.style.spinbox.cursor = theme.style.ta.cursor;
- theme.style.spinbox.sb = theme.style.ta.sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
-
- static lv_style_t list_bg, rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&list_bg, theme.style.panel);
- list_bg.body.padding.left = 0;
- list_bg.body.padding.right = 0;
- list_bg.body.padding.top = 0;
- list_bg.body.padding.bottom = 0;
- list_bg.body.padding.inner = 0;
-
- lv_style_copy(&rel, &lv_style_transp);
- rel.body.padding.left = LV_DPI / 8;
- rel.body.padding.right = LV_DPI / 8;
- rel.body.padding.top = LV_DPI / 6;
- rel.body.padding.bottom = LV_DPI / 6;
- rel.body.radius = 10;
- rel.body.border.color = lv_color_hex3(0xbbb);
- rel.body.border.width = 1;
- rel.body.border.part = LV_BORDER_BOTTOM;
-
- lv_style_copy(&pr, &rel);
- pr.glass = 0;
- pr.body.main_color = lv_color_hex3(0xddd);
- pr.body.grad_color = pr.body.main_color;
- pr.body.border.width = 0;
- pr.body.opa = LV_OPA_COVER;
- pr.body.radius = DEF_RADIUS;
- pr.text.font = _font;
-
- lv_style_copy(&tgl_rel, &pr);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 60);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.body.border.width = 0;
-
- lv_style_copy(&ina, &pr);
- ina.body.main_color = lv_color_hex3(0xccc);
- ina.body.grad_color = ina.body.main_color;
-
- theme.style.list.sb = &sb;
- theme.style.list.bg = &list_bg;
- theme.style.list.scrl = &lv_style_transp_tight;
- theme.style.list.btn.rel = &rel;
- theme.style.list.btn.pr = &pr;
- theme.style.list.btn.tgl_rel = &tgl_rel;
- theme.style.list.btn.tgl_pr = &tgl_pr;
- theme.style.list.btn.ina = &ina;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- static lv_style_t bg, sel;
- lv_style_copy(&bg, theme.style.panel);
- bg.body.padding.left = LV_DPI / 6;
- bg.body.padding.right = LV_DPI / 6;
- bg.body.padding.top = LV_DPI / 6;
- bg.body.padding.bottom = LV_DPI / 6;
- bg.text.line_space = LV_DPI / 8;
-
- lv_style_copy(&sel, &bg);
- sel.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
- sel.body.grad_color = sel.body.main_color;
- sel.body.border.width = 0;
- sel.body.shadow.width = 0;
- sel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- theme.style.ddlist.bg = &bg;
- theme.style.ddlist.sel = &sel;
- theme.style.ddlist.sb = &sb;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t roller_bg, roller_sel;
-
- lv_style_copy(&roller_bg, &lv_style_transp);
- roller_bg.body.padding.left = LV_DPI / 6;
- roller_bg.body.padding.right = LV_DPI / 6;
- roller_bg.body.padding.top = LV_DPI / 6;
- roller_bg.body.padding.bottom = LV_DPI / 6;
- roller_bg.text.line_space = LV_DPI / 8;
- roller_bg.text.font = _font;
- roller_bg.glass = 0;
-
- lv_style_copy(&roller_sel, &roller_bg);
- roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 90, 70);
-
- theme.style.roller.bg = &roller_bg;
- theme.style.roller.sel = &roller_sel;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
- static lv_style_t indic, btn_bg, rel, pr, tgl_rel, tgl_pr;
-
- lv_style_copy(&indic, &def);
- indic.body.main_color = lv_color_hsv_to_rgb(_hue, 90, 70);
- indic.body.grad_color = indic.body.main_color;
- indic.body.radius = 0;
- indic.body.border.width = 0;
- indic.body.padding.inner = LV_DPI / 20;
-
- lv_style_copy(&btn_bg, &def);
- btn_bg.body.main_color = lv_color_hex3(0xccc);
- btn_bg.body.grad_color = btn_bg.body.main_color;
- btn_bg.body.radius = 0;
- btn_bg.body.border.width = 1;
- btn_bg.body.border.color = lv_color_hex3(0x888);
- btn_bg.body.border.part = LV_BORDER_BOTTOM;
- btn_bg.body.border.opa = LV_OPA_COVER;
- btn_bg.body.shadow.width = 5;
- btn_bg.body.shadow.color = DEF_SHADOW_COLOR;
- btn_bg.body.shadow.type = LV_SHADOW_BOTTOM;
- btn_bg.body.padding.inner = 0;
- btn_bg.body.padding.left = 0;
- btn_bg.body.padding.right = 0;
- btn_bg.body.padding.top = 0;
- btn_bg.body.padding.bottom = 0;
- btn_bg.text.color = lv_color_hex3(0x333);
-
- lv_style_copy(&rel, &lv_style_transp);
- rel.body.padding.top = LV_DPI / 8;
- rel.body.padding.bottom = LV_DPI / 8;
- rel.text.font = _font;
-
- lv_style_copy(&pr, &def);
- pr.body.main_color = lv_color_hex3(0xbbb);
- pr.body.grad_color = pr.body.main_color;
- pr.body.border.width = 0;
- pr.body.opa = LV_OPA_COVER;
- pr.body.radius = 0;
- pr.body.border.width = 1;
- pr.body.border.color = lv_color_hex3(0x888);
- pr.body.border.part = LV_BORDER_BOTTOM;
- pr.body.border.opa = LV_OPA_COVER;
- pr.text.color = lv_color_hex3(0x111);
-
- lv_style_copy(&tgl_rel, &lv_style_transp);
- tgl_rel.glass = 0;
- tgl_rel.text.font = _font;
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 90, 70);
-
- lv_style_copy(&tgl_pr, &def);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 15, 85);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.body.border.width = 0;
- tgl_pr.body.opa = LV_OPA_COVER;
- tgl_pr.body.radius = 0;
- tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 90, 60);
-
- theme.style.tabview.bg = theme.style.bg;
- theme.style.tabview.indic = &indic;
- theme.style.tabview.btn.bg = &btn_bg;
- theme.style.tabview.btn.rel = &rel;
- theme.style.tabview.btn.pr = &pr;
- theme.style.tabview.btn.tgl_rel = &tgl_rel;
- theme.style.tabview.btn.tgl_pr = &tgl_pr;
-#endif
-}
-
-static void tileview_init(void)
-{
-#if LV_USE_TILEVIEW != 0
- theme.style.tileview.bg = &lv_style_transp_tight;
- theme.style.tileview.scrl = &lv_style_transp_tight;
- theme.style.tileview.sb = theme.style.page.sb;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- static lv_style_t cell;
- lv_style_copy(&cell, theme.style.panel);
- cell.body.radius = 0;
- cell.body.border.width = 1;
- cell.body.padding.left = LV_DPI / 12;
- cell.body.padding.right = LV_DPI / 12;
- cell.body.padding.top = LV_DPI / 12;
- cell.body.padding.bottom = LV_DPI / 12;
-
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &cell;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t header, pr;
-
- lv_style_copy(&header, &def);
- header.body.main_color = lv_color_hex3(0xccc);
- header.body.grad_color = header.body.main_color;
- header.body.radius = 0;
- header.body.border.width = 1;
- header.body.border.color = lv_color_hex3(0xbbb);
- header.body.border.part = LV_BORDER_BOTTOM;
- header.body.border.opa = LV_OPA_COVER;
- header.body.padding.inner = 0;
- header.body.padding.left = 0;
- header.body.padding.right = 0;
- header.body.padding.top = 0;
- header.body.padding.bottom = 0;
- header.text.color = lv_color_hex3(0x333);
- header.image.color = lv_color_hex3(0x333);
-
- lv_style_copy(&pr, &def);
- pr.body.main_color = lv_color_hex3(0xbbb);
- pr.body.grad_color = pr.body.main_color;
- pr.body.border.width = 0;
- pr.body.opa = LV_OPA_COVER;
- pr.body.radius = 0;
- pr.text.color = lv_color_hex3(0x111);
- pr.image.color = lv_color_hex3(0x111);
-
- theme.style.win.bg = theme.style.panel;
- theme.style.win.sb = &sb;
- theme.style.win.header = &header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &lv_style_transp;
- theme.style.win.btn.pr = &pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- uint16_t hue2 = (_hue + 60) % 360;
-
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = lv_color_hsv_to_rgb(hue2, 90, 70);
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 30;
-
- style->body.main_color = lv_color_mix(style->body.main_color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- uint16_t hue2 = (_hue + 300) % 360;
-
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 30;
-
-
- style->body.main_color = lv_color_mix(style->body.main_color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, lv_color_hsv_to_rgb(hue2, 90, 70), LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the material theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- chart_init();
- arc_init();
- preload_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- spinbox_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- tileview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_material(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_material.h b/src/libs/lvgl/src/lv_themes/lv_theme_material.h
deleted file mode 100644
index 1f2e1b7e..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_material.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_material.h
- *
- */
-
-#ifndef LV_THEME_MATERIAL_H
-#define LV_THEME_MATERIAL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_MATERIAL
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the material theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_material(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_MATERIAL_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_mono.c b/src/libs/lvgl/src/lv_themes/lv_theme_mono.c
deleted file mode 100644
index 9c2e7743..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_mono.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/**
- * @file lv_theme_templ.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_MONO
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-static lv_style_t def;
-static lv_style_t scr;
-
-/*Static style definitions*/
-static lv_style_t light_plain;
-static lv_style_t dark_plain;
-static lv_style_t light_frame;
-static lv_style_t dark_frame;
-
-/*Saved input parameters*/
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- lv_style_copy(&def, &lv_style_plain); /*Initialize the default style*/
- def.body.main_color = LV_COLOR_WHITE;
- def.body.grad_color = LV_COLOR_WHITE;
- def.body.radius = 0;
- def.body.opa = LV_OPA_COVER;
- def.body.padding.left = LV_DPI / 10;
- def.body.padding.right = LV_DPI / 10;
- def.body.padding.top = LV_DPI / 10;
- def.body.padding.bottom = LV_DPI / 10;
- def.body.padding.inner = LV_DPI / 10;
- def.body.border.color = LV_COLOR_BLACK;
- def.body.border.width = 1;
- def.body.border.opa = LV_OPA_COVER;
- def.body.border.part = LV_BORDER_FULL;
-
- def.text.font = _font;
- def.text.color = LV_COLOR_BLACK;
- def.text.letter_space = 1;
- def.text.line_space = 1;
-
- def.line.color = LV_COLOR_BLACK;
- def.line.opa = LV_OPA_COVER;
- def.line.width = 1;
-
- def.image.color = LV_COLOR_BLACK;
- def.image.intense = LV_OPA_TRANSP;
- def.image.opa = LV_OPA_COVER;
-
- lv_style_copy(&scr, &light_plain);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- lv_style_copy(&light_plain, &def);
-
- lv_style_copy(&light_frame, &light_plain);
- light_frame.body.radius = LV_DPI / 20;
-
- lv_style_copy(&dark_plain, &light_plain);
- dark_plain.body.main_color = LV_COLOR_BLACK;
- dark_plain.body.grad_color = LV_COLOR_BLACK;
- dark_plain.body.border.color = LV_COLOR_WHITE;
- dark_plain.text.color = LV_COLOR_WHITE;
- dark_plain.line.color = LV_COLOR_WHITE;
- dark_plain.image.color = LV_COLOR_WHITE;
-
- lv_style_copy(&dark_frame, &dark_plain);
- dark_frame.body.radius = LV_DPI / 20;
-
- theme.style.bg = &def;
- theme.style.scr = &scr;
- theme.style.panel = &light_frame;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
-
- theme.style.cont = &def;
-#endif
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
-
- theme.style.btn.rel = &light_frame;
- theme.style.btn.pr = &dark_frame;
- theme.style.btn.tgl_rel = &dark_frame;
- theme.style.btn.tgl_pr = &light_frame;
- theme.style.btn.ina = &light_frame;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
-
- theme.style.label.prim = NULL;
- theme.style.label.sec = NULL;
- theme.style.label.hint = NULL;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
-
- theme.style.img.light = &def;
- theme.style.img.dark = &def;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
- theme.style.line.decor = NULL;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
- lv_style_copy(&led, &light_frame);
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.shadow.width = LV_DPI / 8;
- led.body.shadow.color = LV_COLOR_BLACK;
- led.body.shadow.type = LV_SHADOW_FULL;
-
- theme.style.led = &led;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- static lv_style_t bar_bg;
- static lv_style_t bar_indic;
-
- lv_style_copy(&bar_bg, &light_frame);
- bar_bg.body.padding.left = LV_DPI / 15;
- bar_bg.body.padding.right = LV_DPI / 15;
- bar_bg.body.padding.top = LV_DPI / 15;
- bar_bg.body.padding.bottom = LV_DPI / 15;
- bar_bg.body.radius = LV_RADIUS_CIRCLE;
-
- lv_style_copy(&bar_indic, &dark_frame);
- bar_indic.body.padding.left = LV_DPI / 30;
- bar_indic.body.padding.right = LV_DPI / 30;
- bar_indic.body.padding.top = LV_DPI / 30;
- bar_indic.body.padding.bottom = LV_DPI / 30;
- bar_indic.body.radius = LV_RADIUS_CIRCLE;
-
- theme.style.bar.bg = &bar_bg;
- theme.style.bar.indic = &bar_indic;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- static lv_style_t slider_knob;
- lv_style_copy(&slider_knob, &light_frame);
- slider_knob.body.radius = LV_RADIUS_CIRCLE;
- slider_knob.body.padding.left = LV_DPI / 30;
- slider_knob.body.padding.right = LV_DPI / 30;
- slider_knob.body.padding.top = LV_DPI / 30;
- slider_knob.body.padding.bottom = LV_DPI / 30;
-
- theme.style.slider.bg = theme.style.bar.bg;
- theme.style.slider.indic = theme.style.bar.indic;
- theme.style.slider.knob = &slider_knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
-
- theme.style.sw.bg = theme.style.slider.bg;
- theme.style.sw.indic = theme.style.slider.indic;
- theme.style.sw.knob_off = theme.style.slider.knob;
- theme.style.sw.knob_on = theme.style.slider.knob;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- static lv_style_t lmeter_bg;
- lv_style_copy(&lmeter_bg, &light_frame);
- lmeter_bg.body.opa = LV_OPA_TRANSP;
- lmeter_bg.body.main_color = LV_COLOR_BLACK;
- lmeter_bg.body.grad_color = LV_COLOR_BLACK;
- lmeter_bg.body.padding.left = LV_DPI / 20;
- lmeter_bg.body.padding.inner = LV_DPI / 8;
- lmeter_bg.line.color = LV_COLOR_WHITE;
- lmeter_bg.line.width = 1;
-
- theme.style.lmeter = &lmeter_bg;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge_bg;
- lv_style_copy(&gauge_bg, theme.style.lmeter);
- gauge_bg.line.color = LV_COLOR_BLACK;
- gauge_bg.line.width = 1;
-
- theme.style.gauge = &gauge_bg;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = &light_frame;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR
- static lv_style_t box;
- lv_style_copy(&box, &light_plain);
- box.body.padding.top = LV_DPI / 20;
- box.body.padding.bottom = LV_DPI / 20;
-
- /*Can't handle highlighted dates in this theme*/
- theme.style.calendar.week_box = &box;
- theme.style.calendar.today_box = &box;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
-
- theme.style.cb.bg = &lv_style_transp;
- theme.style.cb.box.rel = &light_frame;
- theme.style.cb.box.pr = &dark_frame;
- theme.style.cb.box.tgl_rel = &dark_frame;
- theme.style.cb.box.tgl_pr = &light_frame;
- theme.style.cb.box.ina = &light_frame;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
-
- theme.style.btnm.bg = &light_frame;
- theme.style.btnm.btn.rel = &light_frame;
- theme.style.btnm.btn.pr = &dark_frame;
- theme.style.btnm.btn.tgl_rel = &dark_frame;
- theme.style.btnm.btn.tgl_pr = &light_frame;
- theme.style.btnm.btn.ina = &light_frame;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
- theme.style.kb.bg = &lv_style_transp_fit;
- theme.style.kb.btn.rel = &light_frame;
- theme.style.kb.btn.pr = &light_frame;
- theme.style.kb.btn.tgl_rel = &dark_frame;
- theme.style.kb.btn.tgl_pr = &dark_frame;
- theme.style.kb.btn.ina = &light_frame;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
-
- theme.style.mbox.bg = &dark_frame;
- theme.style.mbox.btn.bg = &lv_style_transp_fit;
- theme.style.mbox.btn.rel = &light_frame;
- theme.style.mbox.btn.pr = &dark_frame;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- theme.style.page.bg = &light_frame;
- theme.style.page.scrl = &light_frame;
- theme.style.page.sb = &dark_frame;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
-
- theme.style.ta.area = &light_frame;
- theme.style.ta.oneline = &light_frame;
- theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
- theme.style.ta.sb = &dark_frame;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
-
- theme.style.list.sb = &dark_frame;
- theme.style.list.bg = &light_frame;
- theme.style.list.scrl = &lv_style_transp_fit;
- theme.style.list.btn.rel = &light_plain;
- theme.style.list.btn.pr = &dark_plain;
- theme.style.list.btn.tgl_rel = &dark_plain;
- theme.style.list.btn.tgl_pr = &light_plain;
- theme.style.list.btn.ina = &light_plain;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- static lv_style_t bg;
- lv_style_copy(&bg, &light_frame);
- bg.text.line_space = LV_DPI / 12;
-
- theme.style.ddlist.bg = &bg;
- theme.style.ddlist.sel = &dark_plain;
- theme.style.ddlist.sb = &dark_frame;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t bg;
- lv_style_copy(&bg, &light_frame);
- bg.text.line_space = LV_DPI / 12;
-
- theme.style.roller.bg = &bg;
- theme.style.roller.sel = &dark_frame;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
-
- theme.style.tabview.bg = &light_frame;
- theme.style.tabview.indic = &light_plain;
- theme.style.tabview.btn.bg = &lv_style_transp_fit;
- theme.style.tabview.btn.rel = &light_frame;
- theme.style.tabview.btn.pr = &dark_frame;
- theme.style.tabview.btn.tgl_rel = &dark_frame;
- theme.style.tabview.btn.tgl_pr = &light_frame;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t win_header;
- lv_style_copy(&win_header, &dark_plain);
- win_header.body.padding.left = LV_DPI / 30;
- win_header.body.padding.right = LV_DPI / 30;
- win_header.body.padding.top = LV_DPI / 30;
- win_header.body.padding.bottom = LV_DPI / 30;
-
- theme.style.win.bg = &light_frame;
- theme.style.win.sb = &dark_frame;
- theme.style.win.header = &win_header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &light_frame;
- theme.style.win.btn.pr = &dark_frame;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the mono theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color; is not used
- * in lv_theme_mono
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font)
-{
-
- (void)hue; /*Unused*/
-
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_mono(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_mono.h b/src/libs/lvgl/src/lv_themes/lv_theme_mono.h
deleted file mode 100644
index 6730d1e9..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_mono.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_mono.h
- *
- */
-
-#ifndef LV_THEME_MONO_H
-#define LV_THEME_MONO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_MONO
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the mono theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_mono(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_MONO_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_nemo.c b/src/libs/lvgl/src/lv_themes/lv_theme_nemo.c
deleted file mode 100644
index 564c232b..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_nemo.c
+++ /dev/null
@@ -1,929 +0,0 @@
-/**
- * @file lv_theme_nemo.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_NEMO
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-static uint16_t _hue;
-static lv_font_t * _font;
-static lv_font_t * _font;
-static lv_font_t * _font;
-
-static lv_theme_t theme;
-static lv_style_t def;
-static lv_style_t bg;
-static lv_style_t scr;
-static lv_style_t panel; /*General fancy background (e.g. to chart or ta)*/
-static lv_style_t sb;
-static lv_style_t btn_rel, btn_pr, btn_trel, btn_tpr, btn_ina;
-
-#if LV_USE_BAR
-static lv_style_t bar_bg, bar_indic;
-#endif
-
-#if LV_USE_SLIDER
-static lv_style_t slider_knob;
-#endif
-
-#if LV_USE_LMETER
-static lv_style_t lmeter_bg;
-#endif
-
-#if LV_USE_DDLIST
-static lv_style_t ddlist_bg, ddlist_sel;
-#endif
-
-#if LV_USE_BTNM
-static lv_style_t btnm_bg, btnm_rel, btnm_pr, btnm_trel, btnm_ina;
-#endif
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- /*Default*/
- lv_style_copy(&def, &lv_style_plain);
- def.body.opa = LV_OPA_COVER;
- def.glass = 0;
-
- def.body.main_color = lv_color_hex3(0x222);
- def.body.grad_color = lv_color_hex3(0x222);
- def.body.radius = 0;
- def.body.padding.left = LV_DPI / 8;
- def.body.padding.right = LV_DPI / 8;
- def.body.padding.top = LV_DPI / 8;
- def.body.padding.bottom = LV_DPI / 8;
- def.body.padding.inner = LV_DPI / 8;
- def.body.border.color = LV_COLOR_SILVER;
- def.body.border.width = 1;
- def.body.border.opa = LV_OPA_COVER;
- def.body.shadow.color = LV_COLOR_SILVER;
- def.body.shadow.width = 0;
- def.body.shadow.type = LV_SHADOW_FULL;
-
- def.text.color = lv_color_hex3(0xDDD);
- def.text.font = _font;
- def.text.letter_space = 1;
- def.text.line_space = 2;
-
- def.image.color = lv_color_hex3(0xDDD);
- def.image.intense = LV_OPA_TRANSP;
-
- def.line.color = lv_color_hex3(0xDDD);
- def.line.width = 1;
-
- /*Background*/
- lv_style_copy(&bg, &def);
- bg.body.main_color = lv_color_hex3(0x005);
- bg.body.grad_color = lv_color_hex3(0x045);
- bg.body.border.width = 2;
- bg.body.border.color = lv_color_hex3(0x666);
- bg.body.shadow.color = LV_COLOR_SILVER;
-
- lv_style_copy(&scr, &bg);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- /*Panel*/
- lv_style_copy(&panel, &def);
- panel.body.radius = LV_DPI / 10;
- panel.body.main_color = lv_color_hex3(0x500);
- panel.body.grad_color = lv_color_hex3(0x505);
- panel.body.border.color = lv_color_hex3(0xccc);
- panel.body.border.width = 2;
- panel.body.border.opa = LV_OPA_60;
- panel.text.color = lv_color_hsv_to_rgb(_hue, 8, 96);
- panel.line.color = lv_color_hsv_to_rgb(_hue, 20, 70);
-
- /*Scrollbar*/
- lv_style_copy(&sb, &def);
- sb.body.opa = LV_OPA_50;
- sb.body.radius = LV_RADIUS_CIRCLE;
- sb.body.border.color = LV_COLOR_SILVER;
- sb.body.border.opa = LV_OPA_40;
- sb.body.border.width = 1;
- sb.body.main_color = lv_color_hsv_to_rgb(_hue, 33, 92);
- sb.body.grad_color = lv_color_hsv_to_rgb(_hue, 33, 92);
- sb.body.padding.left = 1;
- sb.body.padding.right = 1;
- sb.body.padding.top = 1;
- sb.body.padding.bottom = 1;
- sb.body.padding.inner = LV_DPI / 15; /*Scrollbar width*/
-
- theme.style.bg = &bg;
- theme.style.scr = &scr;
- theme.style.panel = &panel;
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- lv_style_copy(&btn_rel, &def);
- btn_rel.glass = 0;
- btn_rel.body.opa = LV_OPA_TRANSP;
- btn_rel.body.radius = LV_RADIUS_CIRCLE;
- btn_rel.body.border.width = 2;
- btn_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
- btn_rel.body.border.opa = LV_OPA_80;
- btn_rel.body.padding.left = LV_DPI / 4;
- btn_rel.body.padding.right = LV_DPI / 4;
- btn_rel.body.padding.top = LV_DPI / 6;
- btn_rel.body.padding.bottom = LV_DPI / 6;
- btn_rel.body.padding.inner = LV_DPI / 10;
- btn_rel.text.color = lv_color_hsv_to_rgb(_hue, 8, 96);
- btn_rel.text.font = _font;
-
- lv_style_copy(&btn_pr, &btn_rel);
- btn_pr.body.opa = LV_OPA_COVER;
- btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_pr.body.border.opa = LV_OPA_60;
- btn_pr.text.font = _font;
- btn_pr.text.color = lv_color_hsv_to_rgb(_hue, 10, 100);
-
- lv_style_copy(&btn_trel, &btn_pr);
- btn_trel.body.opa = LV_OPA_COVER;
- btn_trel.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 60);
- btn_trel.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 60);
- btn_trel.body.border.opa = LV_OPA_60;
- btn_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 90);
- btn_trel.text.font = _font;
- btn_trel.text.color = lv_color_hsv_to_rgb(_hue, 0, 100);
-
- lv_style_copy(&btn_tpr, &btn_trel);
- btn_tpr.body.opa = LV_OPA_COVER;
- btn_tpr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_tpr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 50);
- btn_tpr.body.border.opa = LV_OPA_60;
- btn_tpr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
- btn_tpr.text.font = _font;
- btn_tpr.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
-
- lv_style_copy(&btn_ina, &btn_rel);
- btn_ina.body.border.opa = LV_OPA_60;
- btn_ina.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
- btn_ina.text.font = _font;
- btn_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
-
- theme.style.btn.rel = &btn_rel;
- theme.style.btn.pr = &btn_pr;
- theme.style.btn.tgl_rel = &btn_trel;
- theme.style.btn.tgl_pr = &btn_tpr;
- theme.style.btn.ina = &btn_ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
- static lv_style_t label_prim, label_sec, label_hint;
-
- lv_style_copy(&label_prim, &def);
- label_prim.text.font = _font;
- label_prim.text.color = lv_color_hsv_to_rgb(_hue, 5, 96);
-
- lv_style_copy(&label_sec, &label_prim);
- label_sec.text.color = lv_color_hsv_to_rgb(_hue, 40, 85);
-
- lv_style_copy(&label_hint, &label_prim);
- label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
-
- theme.style.label.prim = &label_prim;
- theme.style.label.sec = &label_sec;
- theme.style.label.hint = &label_hint;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- lv_style_copy(&bar_bg, &def);
- bar_bg.body.opa = LV_OPA_30;
- bar_bg.body.radius = LV_RADIUS_CIRCLE;
- bar_bg.body.main_color = LV_COLOR_WHITE;
- bar_bg.body.grad_color = LV_COLOR_SILVER;
- bar_bg.body.border.width = 2;
- bar_bg.body.border.color = LV_COLOR_SILVER;
- bar_bg.body.border.opa = LV_OPA_20;
- bar_bg.body.padding.left = 0;
- bar_bg.body.padding.right = 0;
- bar_bg.body.padding.top = LV_DPI / 10;
- bar_bg.body.padding.bottom = LV_DPI / 10;
- bar_bg.body.padding.inner = 0;
-
- lv_style_copy(&bar_indic, &def);
- bar_indic.body.radius = LV_RADIUS_CIRCLE;
- bar_indic.body.border.width = 2;
- bar_indic.body.border.color = LV_COLOR_SILVER;
- bar_indic.body.border.opa = LV_OPA_70;
- bar_indic.body.padding.left = 0;
- bar_indic.body.padding.right = 0;
- bar_indic.body.padding.top = 0;
- bar_indic.body.padding.bottom = 0;
- bar_indic.body.shadow.width = LV_DPI / 20;
- bar_indic.body.shadow.color = lv_color_hsv_to_rgb(_hue, 20, 90);
- bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
- bar_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
-
- theme.style.bar.bg = &bar_bg;
- theme.style.bar.indic = &bar_indic;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
- static lv_style_t img_light, img_dark;
- lv_style_copy(&img_light, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 15, 85);
- img_light.image.intense = LV_OPA_80;
-
- lv_style_copy(&img_dark, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 65);
- img_light.image.intense = LV_OPA_80;
-
- theme.style.img.light = &img_light;
- theme.style.img.dark = &img_dark;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
- static lv_style_t line_decor;
- lv_style_copy(&line_decor, &def);
- line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
- line_decor.line.width = 1;
-
- theme.style.line.decor = &line_decor;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
- lv_style_copy(&led, &lv_style_pretty_color);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.main_color = lv_color_hsv_to_rgb(_hue, 100, 100);
- led.body.grad_color = lv_color_hsv_to_rgb(_hue, 100, 40);
- led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
- led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
-
- theme.style.led = &led;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- lv_style_copy(&slider_knob, &def);
- slider_knob.body.opa = LV_OPA_60;
- slider_knob.body.radius = LV_RADIUS_CIRCLE;
- slider_knob.body.main_color = LV_COLOR_PURPLE;
- slider_knob.body.grad_color = LV_COLOR_SILVER;
- slider_knob.body.border.width = 2;
- slider_knob.body.border.color = LV_COLOR_ORANGE;
- slider_knob.body.border.opa = LV_OPA_50;
-
- theme.style.slider.bg = &bar_bg;
- theme.style.slider.indic = &bar_indic;
- theme.style.slider.knob = &slider_knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
- static lv_style_t sw_bg, sw_indic, sw_knob;
- lv_style_copy(&sw_bg, &bar_bg);
- sw_bg.body.opa = LV_OPA_COVER;
- sw_bg.body.padding.left = -2;
- sw_bg.body.padding.right = -2;
- sw_bg.body.padding.top = -2;
- sw_bg.body.padding.bottom = -2;
- sw_bg.body.main_color = lv_color_hex3(0x666);
- sw_bg.body.grad_color = lv_color_hex3(0x999);
- sw_bg.body.border.width = 2;
- sw_bg.body.border.opa = LV_OPA_50;
-
- lv_style_copy(&sw_indic, &bar_indic);
- sw_indic.body.shadow.width = LV_DPI / 20;
- sw_indic.body.padding.left = 0;
- sw_indic.body.padding.right = 0;
- sw_indic.body.padding.top = 0;
- sw_indic.body.padding.bottom = 0;
-
- lv_style_copy(&sw_knob, &slider_knob);
- sw_knob.body.opa = LV_OPA_80;
-
- theme.style.sw.bg = &sw_bg;
- theme.style.sw.indic = &sw_indic;
- theme.style.sw.knob_off = &sw_knob;
- theme.style.sw.knob_on = &sw_knob;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- lv_style_copy(&lmeter_bg, &def);
- lmeter_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
- lmeter_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 80);
- lmeter_bg.body.padding.left = LV_DPI / 8; /*Scale line length*/
- lmeter_bg.line.color = lv_color_hex3(0x500);
- lmeter_bg.line.width = 2;
-
- theme.style.lmeter = &lmeter_bg;
-
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge_bg;
- lv_style_copy(&gauge_bg, &def);
- gauge_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 20, 100);
- gauge_bg.body.grad_color = gauge_bg.body.main_color;
- gauge_bg.body.padding.left = LV_DPI / 16; /*Scale line length*/
- gauge_bg.body.padding.right = LV_DPI / 16; /*Scale line length*/
- gauge_bg.body.padding.top = LV_DPI / 20; /*Needle center size*/
- gauge_bg.body.padding.bottom = LV_DPI / 20; /*Needle center size*/
- gauge_bg.body.padding.inner = LV_DPI / 12; /*Label - scale distance*/
- gauge_bg.body.border.color = lv_color_hex3(0x500);
- gauge_bg.line.color = lv_color_hsv_to_rgb(_hue, 80, 75);
- gauge_bg.line.width = 2;
- gauge_bg.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
- gauge_bg.text.font = _font;
-
- theme.style.gauge = &gauge_bg;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- static lv_style_t arc;
- lv_style_copy(&arc, &def);
- arc.line.width = 10;
- arc.line.color = lv_color_hsv_to_rgb(_hue, 70, 90);
- arc.line.rounded = 1;
-
- /*For preloader*/
- arc.body.border.width = 0;
-
- theme.style.arc = &arc;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = theme.style.arc;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = &panel;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR != 0
- static lv_style_t ina_days;
- lv_style_copy(&ina_days, &def);
- ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 50);
-
- static lv_style_t high_days;
- lv_style_copy(&high_days, &def);
- high_days.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
-
- static lv_style_t week_box;
- lv_style_copy(&week_box, &def);
- week_box.body.opa = LV_OPA_TRANSP;
- week_box.body.border.color = theme.style.panel->body.border.color;
- week_box.body.padding.top = LV_DPI / 20;
- week_box.body.padding.bottom = LV_DPI / 20;
-
- static lv_style_t today_box;
- lv_style_copy(&today_box, &def);
- today_box.body.main_color = LV_COLOR_WHITE;
- today_box.body.grad_color = LV_COLOR_WHITE;
- today_box.body.padding.top = LV_DPI / 20;
- today_box.body.padding.bottom = LV_DPI / 20;
- today_box.body.radius = 0;
-
- theme.style.calendar.bg = theme.style.panel;
- theme.style.calendar.header = theme.style.label.prim;
- theme.style.calendar.inactive_days = theme.style.label.hint;
- theme.style.calendar.highlighted_days = theme.style.label.sec;
- theme.style.calendar.week_box = &week_box;
- theme.style.calendar.today_box = &week_box;
- theme.style.calendar.header_pr = theme.style.label.prim;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
- static lv_style_t cb_bg, cb_rel, cb_pr, cb_trel, cb_tpr, cb_ina;
- lv_style_copy(&cb_rel, &bg);
- cb_rel.body.radius = LV_DPI / 20;
- cb_rel.body.border.width = 1;
- cb_rel.body.border.color = LV_COLOR_ORANGE;
- cb_rel.body.main_color = LV_COLOR_PURPLE;
- cb_rel.body.grad_color = LV_COLOR_SILVER;
-
- lv_style_copy(&cb_bg, &bg);
- cb_bg.body.opa = LV_OPA_TRANSP;
- cb_bg.body.border.width = 0;
- cb_bg.body.padding.inner = LV_DPI / 8;
- cb_bg.body.padding.left = 0;
- cb_bg.body.padding.right = 0;
- cb_bg.body.padding.top = 0;
- cb_bg.body.padding.bottom = 0;
- cb_bg.text.font = _font;
-
- lv_style_copy(&cb_pr, &cb_rel);
- cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 90);
- cb_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 82);
-
- lv_style_copy(&cb_trel, &cb_rel);
- cb_trel.body.border.width = 4;
- cb_trel.body.border.color = LV_COLOR_WHITE;
- cb_trel.body.border.opa = LV_OPA_60;
- cb_trel.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 82);
- cb_trel.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 62);
-
- lv_style_copy(&cb_tpr, &cb_trel);
- cb_tpr.body.border.color = LV_COLOR_SILVER;
- cb_tpr.body.border.opa = LV_OPA_70;
- cb_tpr.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 72);
- cb_tpr.body.grad_color = lv_color_hsv_to_rgb(_hue, 50, 52);
-
- lv_style_copy(&cb_ina, &cb_trel);
- cb_ina.body.border.width = 1;
- cb_ina.body.border.color = LV_COLOR_GRAY;
- cb_ina.body.main_color = LV_COLOR_PURPLE;
- cb_ina.body.grad_color = LV_COLOR_SILVER;
-
- theme.style.cb.bg = &cb_bg;
- theme.style.cb.box.rel = &cb_rel;
- theme.style.cb.box.pr = &cb_pr;
- theme.style.cb.box.tgl_rel = &cb_trel;
- theme.style.cb.box.tgl_pr = &cb_tpr;
- theme.style.cb.box.ina = &cb_ina;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
- lv_style_copy(&btnm_bg, &lv_style_transp_tight);
- btnm_bg.body.border.width = 1;
- btnm_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 80);
- btnm_bg.body.border.opa = LV_OPA_COVER;
- btnm_bg.body.radius = LV_DPI / 8;
-
- lv_style_copy(&btnm_rel, &lv_style_plain);
- btnm_rel.body.opa = LV_OPA_TRANSP;
- btnm_rel.body.radius = LV_DPI / 8;
- btnm_rel.text.color = lv_color_hsv_to_rgb(_hue, 60, 80);
- btnm_rel.text.font = _font;
-
- lv_style_copy(&btnm_pr, &lv_style_plain);
- btnm_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 70);
- btnm_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 70);
- btnm_pr.body.radius = LV_DPI / 8;
- btnm_pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 40);
- btnm_pr.text.font = _font;
-
- lv_style_copy(&btnm_trel, &btnm_rel);
- btnm_trel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 80);
- btnm_trel.body.border.width = 3;
-
- lv_style_copy(&btnm_ina, &btnm_rel);
- btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
-
- theme.style.btnm.bg = &btnm_bg;
- theme.style.btnm.btn.rel = &btnm_rel;
- theme.style.btnm.btn.pr = &btnm_pr;
- theme.style.btnm.btn.tgl_rel = &btnm_trel;
- theme.style.btnm.btn.tgl_pr = &btnm_pr;
- theme.style.btnm.btn.ina = &btnm_ina;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
- theme.style.kb.bg = &btnm_bg;
- theme.style.kb.btn.rel = &btnm_rel;
- theme.style.kb.btn.pr = &btnm_pr;
- theme.style.kb.btn.tgl_rel = &btnm_trel;
- theme.style.kb.btn.tgl_pr = &btnm_pr;
- theme.style.kb.btn.ina = &btnm_ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
- static lv_style_t mbox_bg;
- lv_style_copy(&mbox_bg, &panel);
- mbox_bg.body.shadow.width = LV_DPI / 12;
-
- theme.style.mbox.bg = &mbox_bg;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = &btn_trel;
- theme.style.mbox.btn.pr = &btn_tpr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
- theme.style.page.bg = &panel;
- theme.style.page.scrl = &lv_style_transp_fit;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
- theme.style.ta.area = &panel;
- theme.style.ta.oneline = &panel;
- theme.style.ta.cursor = NULL;
- theme.style.ta.sb = &sb;
-#endif
-}
-
-static void spinbox_init(void)
-{
-#if LV_USE_SPINBOX
- theme.style.spinbox.bg = &panel;
- theme.style.spinbox.cursor = theme.style.ta.cursor;
- theme.style.spinbox.sb = theme.style.ta.sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
- static lv_style_t list_bg, list_rel, list_pr, list_trel, list_tpr, list_ina;
- lv_style_copy(&list_rel, &def);
- list_rel.body.opa = LV_OPA_TRANSP;
- list_rel.body.border.width = 1;
- list_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 50, 85);
- list_rel.body.border.opa = LV_OPA_COVER;
- list_rel.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- list_rel.text.font = _font;
-
- lv_style_copy(&list_pr, &list_rel);
- list_pr.body.opa = LV_OPA_COVER;
- list_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 34, 41);
- list_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 34, 41);
- list_pr.text.color = lv_color_hsv_to_rgb(_hue, 7, 96);
-
- lv_style_copy(&list_trel, &list_rel);
- lv_style_copy(&list_tpr, &list_pr);
- lv_style_copy(&list_ina, &def);
-
- lv_style_copy(&list_bg, &list_rel);
- list_bg.body.padding.left = 0;
- list_bg.body.padding.right = 0;
- list_bg.body.padding.top = 0;
- list_bg.body.padding.bottom = 0;
-
- theme.style.list.sb = &sb;
- theme.style.list.bg = &list_bg;
- theme.style.list.scrl = &lv_style_transp_tight;
- theme.style.list.btn.rel = &list_rel;
- theme.style.list.btn.pr = &list_pr;
- theme.style.list.btn.tgl_rel = &list_trel;
- theme.style.list.btn.tgl_pr = &list_tpr;
- theme.style.list.btn.ina = &list_ina;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- lv_style_copy(&ddlist_bg, &panel);
- ddlist_bg.text.line_space = LV_DPI / 8;
- ddlist_bg.body.padding.left = LV_DPI / 6;
- ddlist_bg.body.padding.right = LV_DPI / 6;
- ddlist_bg.body.padding.top = LV_DPI / 6;
- ddlist_bg.body.padding.bottom = LV_DPI / 6;
-
- lv_style_copy(&ddlist_sel, &panel);
- ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 45, 70);
- ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 45, 70);
- ddlist_sel.body.opa = LV_OPA_COVER;
- ddlist_sel.body.radius = 0;
-
- theme.style.ddlist.bg = &ddlist_bg;
- theme.style.ddlist.sel = &ddlist_sel;
- theme.style.ddlist.sb = &sb;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t roller_bg, roller_sel;
- lv_style_copy(&roller_bg, &ddlist_bg);
- roller_bg.text.line_space = LV_DPI / 6;
- roller_bg.body.radius = LV_DPI / 20;
- roller_bg.body.main_color = lv_color_hex3(0x500);
- roller_bg.body.grad_color = lv_color_hex3(0x005);
- roller_bg.body.border.opa = LV_OPA_30;
- roller_bg.text.opa = LV_OPA_70;
- roller_bg.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
- roller_bg.body.shadow.width = 0;
-
- lv_style_copy(&roller_sel, &panel);
- roller_sel.body.opa = LV_OPA_TRANSP;
- roller_sel.body.radius = 0;
- roller_sel.text.opa = LV_OPA_COVER;
- roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 70, 95);
-
- theme.style.roller.bg = &roller_bg;
- theme.style.roller.sel = &roller_sel;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
- static lv_style_t tab_rel, tab_pr, tab_trel, tab_tpr, tab_indic;
- lv_style_copy(&tab_rel, &def);
- tab_rel.body.main_color = lv_color_hex3(0x500);
- tab_rel.body.grad_color = lv_color_hex3(0x005);
- tab_rel.body.padding.left = 0;
- tab_rel.body.padding.right = 0;
- tab_rel.body.padding.top = LV_DPI / 6;
- tab_rel.body.padding.bottom = LV_DPI / 6;
- tab_rel.body.padding.inner = 0;
- tab_rel.body.border.width = 1;
- tab_rel.body.border.color = LV_COLOR_SILVER;
- tab_rel.body.border.opa = LV_OPA_40;
- tab_rel.text.color = lv_color_hex3(0xDDD);
- tab_rel.text.font = _font;
-
- lv_style_copy(&tab_pr, &tab_rel);
- tab_pr.body.main_color = lv_color_hex3(0x005);
- tab_pr.body.grad_color = lv_color_hex3(0x500);
-
- lv_style_copy(&tab_trel, &def);
- tab_trel.body.opa = LV_OPA_TRANSP;
- tab_trel.body.padding.left = 0;
- tab_trel.body.padding.right = 0;
- tab_trel.body.padding.top = LV_DPI / 6;
- tab_trel.body.padding.bottom = LV_DPI / 6;
- tab_trel.body.padding.inner = 0;
- tab_trel.body.border.width = 1;
- tab_trel.body.border.color = LV_COLOR_SILVER;
- tab_trel.body.border.opa = LV_OPA_40;
- tab_trel.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- tab_trel.text.font = _font;
-
- lv_style_copy(&tab_tpr, &def);
- tab_tpr.body.main_color = LV_COLOR_GRAY;
- tab_tpr.body.grad_color = LV_COLOR_GRAY;
- tab_tpr.body.padding.left = 0;
- tab_tpr.body.padding.right = 0;
- tab_tpr.body.padding.top = LV_DPI / 6;
- tab_tpr.body.padding.bottom = LV_DPI / 6;
- tab_tpr.body.padding.inner = 0;
- tab_tpr.body.border.width = 1;
- tab_tpr.body.border.color = LV_COLOR_SILVER;
- tab_tpr.body.border.opa = LV_OPA_40;
- tab_tpr.text.color = lv_color_hsv_to_rgb(_hue, 10, 94);
- tab_tpr.text.font = _font;
-
- lv_style_copy(&tab_indic, &def);
- tab_indic.body.border.width = 0;
- tab_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 87);
- tab_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 87);
- tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
-
- theme.style.tabview.bg = &bg;
- theme.style.tabview.indic = &tab_indic;
- theme.style.tabview.btn.bg = &lv_style_transp_tight;
- theme.style.tabview.btn.rel = &tab_rel;
- theme.style.tabview.btn.pr = &tab_pr;
- theme.style.tabview.btn.tgl_rel = &tab_trel;
- theme.style.tabview.btn.tgl_pr = &tab_tpr;
-#endif
-}
-
-static void tileview_init(void)
-{
-#if LV_USE_TILEVIEW != 0
- theme.style.tileview.bg = &lv_style_transp_tight;
- theme.style.tileview.scrl = &lv_style_transp_tight;
- theme.style.tileview.sb = theme.style.page.sb;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- static lv_style_t cell;
- lv_style_copy(&cell, &panel);
- cell.body.radius = 0;
- cell.body.border.width = 1;
-
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &cell;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t win_header;
-
- lv_style_copy(&win_header, &panel);
- win_header.body.radius = 0;
- win_header.body.padding.left = LV_DPI / 12;
- win_header.body.padding.right = LV_DPI / 12;
- win_header.body.padding.top = LV_DPI / 20;
- win_header.body.padding.bottom = LV_DPI / 20;
- win_header.body.border.opa = panel.body.border.opa;
- win_header.body.border.width = panel.body.border.width;
- win_header.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 80);
- win_header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
-
- theme.style.win.bg = &bg;
- theme.style.win.sb = &sb;
- theme.style.win.header = &win_header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &btn_rel;
- theme.style.win.btn.pr = &btn_pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- style->body.border.width = 2;
- style->body.border.color = LV_COLOR_SILVER;
- style->body.border.opa = LV_OPA_70;
- style->body.shadow.width = LV_DPI / 20;
- style->body.shadow.color = lv_color_hsv_to_rgb(_hue, 20, 90);
- style->body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
- style->body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the nemo theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- btn_init();
- label_init();
- bar_init();
- img_init();
- line_init();
- led_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- arc_init();
- preload_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- spinbox_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- tileview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_nemo(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_nemo.h b/src/libs/lvgl/src/lv_themes/lv_theme_nemo.h
deleted file mode 100644
index 5464cbfd..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_nemo.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_nemo.h
- *
- */
-
-#ifndef LV_THEME_NEMO_H
-#define LV_THEME_NEMO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_NEMO
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the material theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_nemo(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_NEMO_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_night.c b/src/libs/lvgl/src/lv_themes/lv_theme_night.c
deleted file mode 100644
index c908939c..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_night.c
+++ /dev/null
@@ -1,847 +0,0 @@
-/**
- * @file lv_theme_night.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_NIGHT
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-static lv_style_t def;
-
-/*Static style definitions*/
-static lv_style_t scr, bg, sb, panel;
-static lv_style_t prim, sec, hint;
-
-/*Saved input parameters*/
-static uint16_t _hue;
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
- def.text.font = _font;
-
- lv_style_copy(&bg, &lv_style_plain);
- bg.body.main_color = lv_color_hsv_to_rgb(_hue, 11, 30);
- bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 11, 30);
- bg.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
- bg.text.font = _font;
- bg.image.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- lv_style_copy(&scr, &bg);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- lv_style_copy(&sb, &def);
- sb.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 60);
- sb.body.grad_color = lv_color_hsv_to_rgb(_hue, 30, 60);
- sb.body.border.width = 0;
- sb.body.padding.inner = LV_DPI / 20;
- sb.body.padding.left = 0;
- sb.body.padding.right = 0;
- sb.body.padding.top = 0;
- sb.body.padding.bottom = 0;
- sb.body.radius = LV_DPI / 30;
- sb.body.opa = LV_OPA_COVER;
-
- lv_style_copy(&panel, &bg);
- panel.body.main_color = lv_color_hsv_to_rgb(_hue, 11, 18);
- panel.body.grad_color = lv_color_hsv_to_rgb(_hue, 11, 18);
- panel.body.radius = LV_DPI / 20;
- panel.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 25);
- panel.body.border.width = 1;
- panel.body.border.opa = LV_OPA_COVER;
- panel.body.padding.left = LV_DPI / 10;
- panel.body.padding.right = LV_DPI / 10;
- panel.body.padding.top = LV_DPI / 10;
- panel.body.padding.bottom = LV_DPI / 10;
- panel.line.color = lv_color_hsv_to_rgb(_hue, 20, 40);
- panel.line.width = 1;
-
- theme.style.scr = &scr;
- theme.style.bg = &bg;
- theme.style.panel = &def;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
-
- theme.style.cont = &panel;
-#endif
-}
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- static lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
-
- lv_style_copy(&btn_rel, &def);
- btn_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- btn_rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- btn_rel.body.border.color = lv_color_hex3(0x111);
- btn_rel.body.border.width = 1;
- btn_rel.body.border.opa = LV_OPA_70;
- btn_rel.body.padding.left = LV_DPI / 4;
- btn_rel.body.padding.right = LV_DPI / 4;
- btn_rel.body.padding.top = LV_DPI / 8;
- btn_rel.body.padding.bottom = LV_DPI / 8;
- btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
- btn_rel.body.shadow.color = lv_color_hex3(0x111);
- btn_rel.body.shadow.width = LV_DPI / 30;
- btn_rel.text.color = lv_color_hex3(0xeee);
- btn_rel.image.color = lv_color_hex3(0xeee);
-
- lv_style_copy(&btn_pr, &btn_rel);
- btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 30);
- btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 10);
-
- lv_style_copy(&btn_tgl_rel, &btn_rel);
- btn_tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- btn_tgl_rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- btn_tgl_rel.body.shadow.width = LV_DPI / 40;
- btn_tgl_rel.text.color = lv_color_hex3(0xddd);
- btn_tgl_rel.image.color = lv_color_hex3(0xddd);
-
- lv_style_copy(&btn_tgl_pr, &btn_rel);
- btn_tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 10);
- btn_tgl_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 30);
- btn_tgl_pr.body.shadow.width = LV_DPI / 30;
- btn_tgl_pr.text.color = lv_color_hex3(0xddd);
- btn_tgl_pr.image.color = lv_color_hex3(0xddd);
-
- lv_style_copy(&btn_ina, &btn_rel);
- btn_ina.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- btn_ina.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- btn_ina.body.shadow.width = 0;
- btn_ina.text.color = lv_color_hex3(0xaaa);
- btn_ina.image.color = lv_color_hex3(0xaaa);
-
- theme.style.btn.rel = &btn_rel;
- theme.style.btn.pr = &btn_pr;
- theme.style.btn.tgl_rel = &btn_tgl_rel;
- theme.style.btn.tgl_pr = &btn_tgl_pr;
- theme.style.btn.ina = &btn_ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
-
- lv_style_copy(&prim, &bg);
- prim.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
-
- lv_style_copy(&sec, &bg);
- sec.text.color = lv_color_hsv_to_rgb(_hue, 15, 65);
-
- lv_style_copy(&hint, &bg);
- hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 55);
-
- theme.style.label.prim = &prim;
- theme.style.label.sec = &sec;
- theme.style.label.hint = &hint;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
-
- theme.style.line.decor = &def;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
- static lv_style_t led;
- lv_style_copy(&led, &def);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.main_color = lv_color_hsv_to_rgb(_hue, 100, 100);
- led.body.grad_color = lv_color_hsv_to_rgb(_hue, 100, 40);
- led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
- led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
-
- theme.style.led = &led;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
-
- theme.style.img.light = &def;
- theme.style.img.dark = &def;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- static lv_style_t bar_bg, bar_indic;
- lv_style_copy(&bar_bg, &panel);
- bar_bg.body.padding.left = LV_DPI / 16;
- bar_bg.body.padding.right = LV_DPI / 16;
- bar_bg.body.padding.top = LV_DPI / 16;
- bar_bg.body.padding.bottom = LV_DPI / 16;
- bar_bg.body.radius = LV_RADIUS_CIRCLE;
-
- lv_style_copy(&bar_indic, &def);
- bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- bar_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- bar_indic.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 15);
- bar_indic.body.border.width = 1;
- bar_indic.body.border.opa = LV_OPA_COVER;
- bar_indic.body.radius = LV_RADIUS_CIRCLE;
- bar_indic.body.padding.left = 0;
- bar_indic.body.padding.right = 0;
- bar_indic.body.padding.top = 0;
- bar_indic.body.padding.bottom = 0;
-
- theme.style.bar.bg = &bar_bg;
- theme.style.bar.indic = &bar_indic;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- static lv_style_t slider_knob;
- lv_style_copy(&slider_knob, theme.style.btn.rel);
- slider_knob.body.radius = LV_RADIUS_CIRCLE;
-
- theme.style.slider.bg = theme.style.bar.bg;
- theme.style.slider.indic = theme.style.bar.indic;
- theme.style.slider.knob = &slider_knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
-
- theme.style.sw.bg = theme.style.bar.bg;
- theme.style.sw.indic = theme.style.bar.indic;
- theme.style.sw.knob_off = theme.style.slider.knob;
- theme.style.sw.knob_on = theme.style.slider.knob;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- static lv_style_t lmeter_bg;
- lv_style_copy(&lmeter_bg, &def);
- lmeter_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
- lmeter_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 95, 90);
- lmeter_bg.body.padding.left = LV_DPI / 10; /*Scale line length*/
- lmeter_bg.body.padding.inner = LV_DPI / 10; /*Text padding*/
- lmeter_bg.body.border.color = lv_color_hex3(0x333);
- lmeter_bg.line.color = lv_color_hex3(0x555);
- lmeter_bg.line.width = 1;
- lmeter_bg.text.color = lv_color_hex3(0xddd);
-
- theme.style.lmeter = &lmeter_bg;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge_bg;
- lv_style_copy(&gauge_bg, &def);
- gauge_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 70);
- gauge_bg.body.grad_color = gauge_bg.body.main_color;
- gauge_bg.line.color = lv_color_hsv_to_rgb(_hue, 80, 75);
- gauge_bg.line.width = 1;
- gauge_bg.text.color = lv_color_hex3(0xddd);
-
- theme.style.gauge = &gauge_bg;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- static lv_style_t arc;
- lv_style_copy(&arc, &def);
- arc.line.width = 8;
- arc.line.color = lv_color_hsv_to_rgb(_hue, 80, 70);
- arc.line.rounded = 1;
-
- /*For preloader*/
- arc.body.border.width = 7;
- arc.body.border.color = lv_color_hsv_to_rgb(_hue, 11, 48);
- arc.body.padding.left = 1;
- arc.body.padding.right = 1;
- arc.body.padding.top = 1;
- arc.body.padding.bottom = 1;
-
- theme.style.arc = &arc;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = theme.style.arc;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = &panel;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR
- static lv_style_t cal_bg;
- lv_style_copy(&cal_bg, &bg);
- cal_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- cal_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- cal_bg.body.border.color = lv_color_hex3(0x333);
- cal_bg.body.border.width = 1;
- cal_bg.body.radius = LV_DPI / 20;
- cal_bg.body.padding.left = LV_DPI / 10;
- cal_bg.body.padding.right = LV_DPI / 10;
- cal_bg.body.padding.top = LV_DPI / 10;
- cal_bg.body.padding.bottom = LV_DPI / 10;
-
- static lv_style_t cal_header;
- lv_style_copy(&cal_header, &bg);
- cal_header.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- cal_header.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- cal_header.body.radius = 0;
- cal_header.body.border.width = 1;
- cal_header.body.border.color = lv_color_hex3(0x333);
- cal_header.body.padding.left = LV_DPI / 10;
- cal_header.body.padding.right = LV_DPI / 10;
- cal_header.body.padding.top = LV_DPI / 10;
- cal_header.body.padding.bottom = LV_DPI / 10;
-
- static lv_style_t week_box;
- lv_style_copy(&week_box, &panel);
- week_box.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 45);
- week_box.body.grad_color = lv_color_hsv_to_rgb(_hue, 30, 45);
- week_box.body.radius = LV_DPI / 20;
- week_box.body.border.width = 1;
- week_box.body.padding.left = LV_DPI / 20;
- week_box.body.padding.right = LV_DPI / 20;
- week_box.body.padding.top = LV_DPI / 25;
- week_box.body.padding.bottom = LV_DPI / 25;
-
- static lv_style_t today_box;
- lv_style_copy(&today_box, &week_box);
- today_box.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- today_box.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- today_box.body.radius = LV_DPI / 20;
- today_box.body.padding.left = LV_DPI / 14;
- today_box.body.padding.right = LV_DPI / 14;
- today_box.body.padding.top = LV_DPI / 14;
- today_box.body.padding.bottom = LV_DPI / 14;
-
- static lv_style_t highlighted_days;
- lv_style_copy(&highlighted_days, &bg);
- highlighted_days.text.color = lv_color_hsv_to_rgb(_hue, 40, 80);
-
- static lv_style_t ina_days;
- lv_style_copy(&ina_days, &bg);
- ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 60);
-
- theme.style.calendar.bg = &cal_bg;
- theme.style.calendar.header = &cal_header;
- theme.style.calendar.week_box = &week_box;
- theme.style.calendar.today_box = &today_box;
- theme.style.calendar.highlighted_days = &highlighted_days;
- theme.style.calendar.day_names = &cal_bg;
- theme.style.calendar.inactive_days = &ina_days;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
-
- static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&rel, &def);
- rel.body.radius = LV_DPI / 20;
- rel.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 95);
- rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 95);
- rel.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 50);
- rel.body.border.width = 2;
- ;
-
- lv_style_copy(&pr, &rel);
- pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 80);
- pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 80);
- pr.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 20);
- pr.body.border.width = 1;
- ;
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 90);
- tgl_rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 90);
- tgl_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 50);
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- tgl_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 80, 30);
- tgl_pr.body.border.width = 1;
- ;
-
- lv_style_copy(&ina, &rel);
- ina.body.main_color = lv_color_hex3(0x777);
- ina.body.grad_color = lv_color_hex3(0x777);
- ina.body.border.width = 0;
-
- theme.style.cb.bg = &lv_style_transp;
- theme.style.cb.box.rel = &rel;
- theme.style.cb.box.pr = &pr;
- theme.style.cb.box.tgl_rel = &tgl_rel;
- theme.style.cb.box.tgl_pr = &tgl_pr;
- theme.style.cb.box.ina = &def;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
- static lv_style_t btnm_bg, rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&btnm_bg, theme.style.btn.rel);
- btnm_bg.body.padding.left = 2;
- btnm_bg.body.padding.right = 2;
- btnm_bg.body.padding.top = 2;
- btnm_bg.body.padding.bottom = 2;
- btnm_bg.body.padding.inner = 0;
- btnm_bg.body.border.width = 1;
-
- lv_style_copy(&rel, theme.style.btn.rel);
- rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
- rel.body.border.width = 1;
- rel.body.radius = 2;
-
- lv_style_copy(&pr, theme.style.btn.pr);
- pr.body.border.part = rel.body.border.part;
- pr.body.border.width = rel.body.border.width;
- pr.body.radius = rel.body.radius;
-
- lv_style_copy(&tgl_rel, theme.style.btn.tgl_rel);
- tgl_rel.body.border.part = rel.body.border.part;
- tgl_rel.body.border.width = rel.body.border.width;
- tgl_rel.body.radius = rel.body.radius;
-
- lv_style_copy(&tgl_pr, theme.style.btn.pr);
- tgl_pr.body.border.part = rel.body.border.part;
- tgl_pr.body.border.width = rel.body.border.width;
- tgl_pr.body.radius = rel.body.radius;
-
- lv_style_copy(&ina, theme.style.btn.ina);
- ina.body.border.part = rel.body.border.part;
- ina.body.border.width = rel.body.border.width;
- ina.body.radius = rel.body.radius;
-
- theme.style.btnm.bg = &btnm_bg;
- theme.style.btnm.btn.rel = &rel;
- theme.style.btnm.btn.pr = &pr;
- theme.style.btnm.btn.tgl_rel = &tgl_rel;
- theme.style.btnm.btn.tgl_pr = &tgl_pr;
- theme.style.btnm.btn.ina = &ina;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
- theme.style.kb.bg = &bg;
- theme.style.kb.btn.rel = theme.style.btn.rel;
- theme.style.kb.btn.pr = theme.style.btn.pr;
- theme.style.kb.btn.tgl_rel = theme.style.btn.tgl_rel;
- theme.style.kb.btn.tgl_pr = theme.style.btn.tgl_pr;
- theme.style.kb.btn.ina = theme.style.btn.ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
- static lv_style_t mbox_bg;
- lv_style_copy(&mbox_bg, &bg);
- mbox_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 30);
- mbox_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 30, 30);
- mbox_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 11, 20);
- mbox_bg.body.border.width = 1;
- mbox_bg.body.shadow.width = LV_DPI / 10;
- mbox_bg.body.shadow.color = lv_color_hex3(0x222);
- mbox_bg.body.radius = LV_DPI / 20;
- theme.style.mbox.bg = &mbox_bg;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = theme.style.btn.rel;
- theme.style.mbox.btn.pr = theme.style.btn.pr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- static lv_style_t page_scrl;
- lv_style_copy(&page_scrl, &bg);
- page_scrl.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- page_scrl.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- page_scrl.body.border.color = lv_color_hex3(0x333);
- page_scrl.body.border.width = 1;
- page_scrl.body.radius = LV_DPI / 20;
-
- theme.style.page.bg = &panel;
- theme.style.page.scrl = &page_scrl;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
- theme.style.ta.area = &panel;
- theme.style.ta.oneline = &panel;
- theme.style.ta.cursor = NULL;
- theme.style.ta.sb = &def;
-#endif
-}
-
-static void spinbox_init(void)
-{
-#if LV_USE_SPINBOX
- theme.style.spinbox.bg = &panel;
- theme.style.spinbox.cursor = theme.style.ta.cursor;
- theme.style.spinbox.sb = theme.style.ta.sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
- static lv_style_t list_bg, list_btn_rel, list_btn_pr, list_btn_tgl_rel, list_btn_tgl_pr;
-
- lv_style_copy(&list_bg, &panel);
- list_bg.body.padding.top = 0;
- list_bg.body.padding.bottom = 0;
- list_bg.body.padding.left = 0;
- list_bg.body.padding.right = 0;
- list_bg.body.padding.inner = 0;
-
- lv_style_copy(&list_btn_rel, &bg);
- list_btn_rel.body.opa = LV_OPA_TRANSP;
- list_btn_rel.body.border.part = LV_BORDER_BOTTOM;
- list_btn_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 5);
- list_btn_rel.body.border.width = 1;
- list_btn_rel.body.radius = LV_DPI / 10;
- list_btn_rel.text.color = lv_color_hsv_to_rgb(_hue, 5, 80);
- list_btn_rel.image.color = lv_color_hsv_to_rgb(_hue, 5, 80);
- list_btn_rel.body.padding.top = LV_DPI / 6;
- list_btn_rel.body.padding.bottom = LV_DPI / 6;
- list_btn_rel.body.padding.left = LV_DPI / 8;
- list_btn_rel.body.padding.right = LV_DPI / 8;
-
- lv_style_copy(&list_btn_pr, theme.style.btn.pr);
- list_btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 5);
- list_btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 5);
- list_btn_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 5);
- list_btn_pr.body.border.width = 0;
- list_btn_pr.body.padding.top = LV_DPI / 6;
- list_btn_pr.body.padding.bottom = LV_DPI / 6;
- list_btn_pr.body.padding.left = LV_DPI / 8;
- list_btn_pr.body.padding.right = LV_DPI / 8;
- list_btn_pr.text.color = lv_color_hsv_to_rgb(_hue, 5, 80);
- list_btn_pr.image.color = lv_color_hsv_to_rgb(_hue, 5, 80);
-
- lv_style_copy(&list_btn_tgl_rel, &list_btn_rel);
- list_btn_tgl_rel.body.opa = LV_OPA_COVER;
- list_btn_tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- list_btn_tgl_rel.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- list_btn_tgl_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 40);
- list_btn_tgl_rel.body.radius = list_bg.body.radius;
-
- lv_style_copy(&list_btn_tgl_pr, &list_btn_tgl_rel);
- list_btn_tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 60);
- list_btn_tgl_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 60);
-
- theme.style.list.sb = &sb;
- theme.style.list.bg = &list_bg;
- theme.style.list.scrl = &lv_style_transp_tight;
- theme.style.list.btn.rel = &list_btn_rel;
- theme.style.list.btn.pr = &list_btn_pr;
- theme.style.list.btn.tgl_rel = &list_btn_tgl_rel;
- theme.style.list.btn.tgl_pr = &list_btn_tgl_pr;
- theme.style.list.btn.ina = &def;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- static lv_style_t ddlist_bg, ddlist_sel;
- lv_style_copy(&ddlist_bg, theme.style.btn.rel);
- ddlist_bg.text.line_space = LV_DPI / 8;
- ddlist_bg.body.padding.top = LV_DPI / 8;
- ddlist_bg.body.padding.bottom = LV_DPI / 8;
- ddlist_bg.body.padding.left = LV_DPI / 8;
- ddlist_bg.body.padding.right = LV_DPI / 8;
- ddlist_bg.body.radius = LV_DPI / 30;
-
- lv_style_copy(&ddlist_sel, theme.style.btn.rel);
- ddlist_sel.body.main_color = lv_color_hsv_to_rgb(_hue, 20, 50);
- ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 20, 50);
- ddlist_sel.body.radius = 0;
-
- theme.style.ddlist.bg = &ddlist_bg;
- theme.style.ddlist.sel = &ddlist_sel;
- theme.style.ddlist.sb = &def;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t roller_bg;
-
- lv_style_copy(&roller_bg, theme.style.ddlist.bg);
- roller_bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- roller_bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 40);
- roller_bg.text.color = lv_color_hsv_to_rgb(_hue, 5, 70);
- roller_bg.text.opa = LV_OPA_60;
-
- theme.style.roller.bg = &roller_bg;
- theme.style.roller.sel = theme.style.ddlist.sel;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
- theme.style.tabview.bg = &bg;
- theme.style.tabview.indic = &lv_style_transp;
- theme.style.tabview.btn.bg = &lv_style_transp;
- theme.style.tabview.btn.rel = theme.style.btn.rel;
- theme.style.tabview.btn.pr = theme.style.btn.pr;
- theme.style.tabview.btn.tgl_rel = theme.style.btn.tgl_rel;
- theme.style.tabview.btn.tgl_pr = theme.style.btn.tgl_pr;
-#endif
-}
-
-static void tileview_init(void)
-{
-#if LV_USE_TILEVIEW != 0
- theme.style.tileview.bg = &lv_style_transp_tight;
- theme.style.tileview.scrl = &lv_style_transp_tight;
- theme.style.tileview.sb = theme.style.page.sb;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- static lv_style_t cell;
- lv_style_copy(&cell, &panel);
- cell.body.radius = 0;
- cell.body.border.width = 1;
- cell.body.padding.left = LV_DPI / 12;
- cell.body.padding.right = LV_DPI / 12;
- cell.body.padding.top = LV_DPI / 12;
- cell.body.padding.bottom = LV_DPI / 12;
-
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &cell;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t win_bg;
- lv_style_copy(&win_bg, &bg);
- win_bg.body.border.color = lv_color_hex3(0x333);
- win_bg.body.border.width = 1;
-
- static lv_style_t win_header;
- lv_style_copy(&win_header, &win_bg);
- win_header.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- win_header.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 20);
- win_header.body.radius = 0;
- win_header.body.padding.left = 0;
- win_header.body.padding.right = 0;
- win_header.body.padding.top = 0;
- win_header.body.padding.bottom = 0;
-
- static lv_style_t win_btn_pr;
- lv_style_copy(&win_btn_pr, &def);
- win_btn_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 10);
- win_btn_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 10, 10);
- win_btn_pr.text.color = lv_color_hex3(0xaaa);
- win_btn_pr.image.color = lv_color_hex3(0xaaa);
-
- theme.style.win.bg = &win_bg;
- theme.style.win.sb = &sb;
- theme.style.win.header = &win_header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &lv_style_transp;
- theme.style.win.btn.pr = &win_btn_pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the night theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- arc_init();
- preload_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- spinbox_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- tileview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_night(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_night.h b/src/libs/lvgl/src/lv_themes/lv_theme_night.h
deleted file mode 100644
index a009bed0..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_night.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_night.h
- *
- */
-
-#ifndef LV_THEME_NIGHT_H
-#define LV_THEME_NIGHT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_NIGHT
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the night theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_night(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_NIGHT_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_templ.c b/src/libs/lvgl/src/lv_themes/lv_theme_templ.c
deleted file mode 100644
index fecbdb84..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_templ.c
+++ /dev/null
@@ -1,473 +0,0 @@
-/**
- * @file lv_theme_templ.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_TEMPL
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-static lv_style_t def;
-/*Static style definitions*/
-
-/*Saved input parameters*/
-static uint16_t _hue;
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
- def.text.font = _font;
-
- theme.style.scr = &def;
- theme.style.bg = &def;
- theme.style.panel = &def;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
-
- theme.style.cont = &def;
-#endif
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
-
- theme.style.btn.rel = &def;
- theme.style.btn.pr = &def;
- theme.style.btn.tgl_rel = &def;
- theme.style.btn.tgl_pr = &def;
- theme.style.btn.ina = &def;
-#endif
-}
-
-static void imgbtn_init(void)
-{
-#if LV_USE_IMGBTN != 0
- theme.style.imgbtn.rel = &def;
- theme.style.imgbtn.pr = &def;
- theme.style.imgbtn.tgl_rel = &def;
- theme.style.imgbtn.tgl_pr = &def;
- theme.style.imgbtn.ina = &def;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
-
- theme.style.label.prim = &def;
- theme.style.label.sec = &def;
- theme.style.label.hint = &def;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
-
- theme.style.img.light = &def;
- theme.style.img.dark = &def;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
-
- theme.style.line.decor = &def;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
-
- theme.style.led = &def;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
-
- theme.style.bar.bg = &def;
- theme.style.bar.indic = &def;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
-
- theme.style.slider.bg = &def;
- theme.style.slider.indic = &def;
- theme.style.slider.knob = &def;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
-
- theme.style.sw.bg = &def;
- theme.style.sw.indic = &def;
- theme.style.sw.knob_off = &def;
- theme.style.sw.knob_on = &def;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
-
- theme.style.lmeter = &def;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
-
- theme.style.gauge = &def;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- theme.style.arc = &def;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = &def;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
-
- theme.style.chart = &def;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR
-
- theme.style.calendar.bg = theme.style.panel;
- theme.style.calendar.header = &def;
- theme.style.calendar.inactive_days = &def;
- theme.style.calendar.highlighted_days = &def;
- theme.style.calendar.week_box = &def;
- theme.style.calendar.today_box = &def;
- theme.style.calendar.header_pr = &def;
- theme.style.calendar.day_names = &def;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
-
- theme.style.cb.bg = &def;
- theme.style.cb.box.rel = &def;
- theme.style.cb.box.pr = &def;
- theme.style.cb.box.tgl_rel = &def;
- theme.style.cb.box.tgl_pr = &def;
- theme.style.cb.box.ina = &def;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
-
- theme.style.btnm.bg = &def;
- theme.style.btnm.btn.rel = &def;
- theme.style.btnm.btn.pr = &def;
- theme.style.btnm.btn.tgl_rel = &def;
- theme.style.btnm.btn.tgl_pr = &def;
- theme.style.btnm.btn.ina = &def;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
-
- theme.style.kb.bg = &def;
- theme.style.kb.btn.rel = &def;
- theme.style.kb.btn.pr = &def;
- theme.style.kb.btn.tgl_rel = &def;
- theme.style.kb.btn.tgl_pr = &def;
- theme.style.kb.btn.ina = &def;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
-
- theme.style.mbox.bg = &def;
- theme.style.mbox.btn.bg = &def;
- theme.style.mbox.btn.rel = &def;
- theme.style.mbox.btn.pr = &def;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- theme.style.page.bg = &def;
- theme.style.page.scrl = &def;
- theme.style.page.sb = &def;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
-
- theme.style.ta.area = &def;
- theme.style.ta.oneline = &def;
- theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
- theme.style.ta.sb = &def;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
-
- theme.style.list.sb = &def;
- theme.style.list.bg = &def;
- theme.style.list.scrl = &def;
- theme.style.list.btn.rel = &def;
- theme.style.list.btn.pr = &def;
- theme.style.list.btn.tgl_rel = &def;
- theme.style.list.btn.tgl_pr = &def;
- theme.style.list.btn.ina = &def;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
-
- theme.style.ddlist.bg = &def;
- theme.style.ddlist.sel = &def;
- theme.style.ddlist.sb = &def;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
-
- theme.style.roller.bg = &def;
- theme.style.roller.sel = &def;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
-
- theme.style.tabview.bg = &def;
- theme.style.tabview.indic = &def;
- theme.style.tabview.btn.bg = &def;
- theme.style.tabview.btn.rel = &def;
- theme.style.tabview.btn.pr = &def;
- theme.style.tabview.btn.tgl_rel = &def;
- theme.style.tabview.btn.tgl_pr = &def;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- theme.style.table.bg = &def;
- theme.style.table.cell = &def;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
-
- theme.style.win.bg = &def;
- theme.style.win.sb = &def;
- theme.style.win.header = &def;
- theme.style.win.content = &def;
- theme.style.win.btn.rel = &def;
- theme.style.win.btn.pr = &def;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_ORANGE;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the templ theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- imgbtn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- arc_init();
- preload_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_templ(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_templ.h b/src/libs/lvgl/src/lv_themes/lv_theme_templ.h
deleted file mode 100644
index 7d1e3ec6..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_templ.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_templ.h
- *
- */
-
-#ifndef LV_THEME_TEMPL_H
-#define LV_THEME_TEMPL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_TEMPL
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the templ theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_templ(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_TEMPL_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_zen.c b/src/libs/lvgl/src/lv_themes/lv_theme_zen.c
deleted file mode 100644
index 55569993..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_zen.c
+++ /dev/null
@@ -1,902 +0,0 @@
-/**
- * @file lv_theme_zen.c
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-#include "lv_theme.h"
-
-#if LV_USE_THEME_ZEN
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static lv_theme_t theme;
-/*Static style definitions*/
-static lv_style_t def;
-static lv_style_t sb;
-
-/*Saved input parameters*/
-static uint16_t _hue;
-static lv_font_t * _font;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-static void basic_init(void)
-{
- static lv_style_t bg;
- static lv_style_t scr;
- static lv_style_t panel;
-
- lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
- def.body.border.opa = LV_OPA_COVER;
- def.text.font = _font;
- def.text.color = lv_color_hex3(0x444);
- def.image.color = lv_color_hex3(0x444);
-
- lv_style_copy(&bg, &def);
- bg.body.main_color = LV_COLOR_WHITE;
- bg.body.grad_color = LV_COLOR_WHITE;
- bg.body.radius = 0;
- bg.body.border.width = 0;
- bg.body.shadow.width = 0;
-
- lv_style_copy(&scr, &bg);
- scr.body.padding.bottom = 0;
- scr.body.padding.top = 0;
- scr.body.padding.left = 0;
- scr.body.padding.right = 0;
-
- lv_style_copy(&panel, &bg);
- panel.body.radius = LV_DPI / 10;
- panel.body.border.width = 2;
- panel.body.border.color = lv_color_hsv_to_rgb(_hue, 30, 90);
- panel.body.border.opa = LV_OPA_COVER;
- panel.body.shadow.width = 4;
- panel.body.shadow.color = lv_color_hex3(0xddd);
- panel.body.padding.left = LV_DPI / 6;
- panel.body.padding.right = LV_DPI / 6;
- panel.body.padding.top = LV_DPI / 8;
- panel.body.padding.bottom = LV_DPI / 8;
- panel.body.padding.inner = LV_DPI / 10;
-
- lv_style_copy(&sb, &def);
- sb.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 90);
- sb.body.grad_color = sb.body.main_color;
- sb.body.border.width = 0;
- sb.body.radius = LV_RADIUS_CIRCLE;
- sb.body.padding.inner = LV_DPI / 15;
-
- theme.style.scr = &scr;
- theme.style.bg = &bg;
- theme.style.panel = &panel;
-}
-
-static void cont_init(void)
-{
-#if LV_USE_CONT != 0
-
- theme.style.cont = theme.style.panel;
-#endif
-}
-
-static void btn_init(void)
-{
-#if LV_USE_BTN != 0
- static lv_style_t rel, pr, tgl_pr, ina;
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.radius = LV_RADIUS_CIRCLE;
- rel.body.border.width = 2;
- rel.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 90);
- rel.body.border.opa = LV_OPA_COVER;
- rel.body.shadow.width = 4;
- rel.body.shadow.color = lv_color_hex3(0xddd);
- rel.body.padding.left = LV_DPI / 4;
- rel.body.padding.right = LV_DPI / 4;
- rel.body.padding.top = LV_DPI / 8;
- rel.body.padding.bottom = LV_DPI / 8;
- rel.text.color = lv_color_hsv_to_rgb(_hue, 40, 90);
- rel.image.color = lv_color_hsv_to_rgb(_hue, 40, 90);
-
- lv_style_copy(&pr, &rel);
- pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 60);
- pr.body.shadow.width = 0;
- pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 60);
- pr.image.color = lv_color_hsv_to_rgb(_hue, 40, 60);
-
- lv_style_copy(&tgl_pr, &pr);
- tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 50);
- tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 50);
- tgl_pr.image.color = lv_color_hsv_to_rgb(_hue, 40, 50);
-
- lv_style_copy(&ina, &tgl_pr);
- ina.body.border.color = lv_color_hex3(0xbbb);
- ina.text.color = lv_color_hex3(0xbbb);
- ina.image.color = lv_color_hex3(0xbbb);
-
- theme.style.btn.rel = &rel;
- theme.style.btn.pr = &pr;
- theme.style.btn.tgl_rel = &pr;
- theme.style.btn.tgl_pr = &tgl_pr;
- theme.style.btn.ina = &ina;
-#endif
-}
-
-static void label_init(void)
-{
-#if LV_USE_LABEL != 0
- static lv_style_t prim, sec, hint;
- lv_style_copy(&prim, &def);
- lv_style_copy(&sec, &def);
- lv_style_copy(&hint, &def);
-
- prim.text.color = lv_color_hex3(0x555);
- sec.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
- hint.text.color = lv_color_hsv_to_rgb(_hue, 25, 85);
-
- theme.style.label.prim = &prim;
- theme.style.label.sec = &sec;
- theme.style.label.hint = &hint;
-#endif
-}
-
-static void img_init(void)
-{
-#if LV_USE_IMG != 0
- static lv_style_t img_light, img_dark;
- lv_style_copy(&img_light, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 15, 85);
- img_light.image.intense = LV_OPA_80;
-
- lv_style_copy(&img_dark, &def);
- img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 55);
- img_light.image.intense = LV_OPA_80;
-
- theme.style.img.light = &img_light;
- theme.style.img.dark = &img_dark;
-#endif
-}
-
-static void line_init(void)
-{
-#if LV_USE_LINE != 0
-
- theme.style.line.decor = &def;
-#endif
-}
-
-static void led_init(void)
-{
-#if LV_USE_LED != 0
-
- static lv_style_t led;
- lv_style_copy(&led, &lv_style_pretty_color);
- led.body.shadow.width = LV_DPI / 10;
- led.body.radius = LV_RADIUS_CIRCLE;
- led.body.border.width = LV_DPI / 30;
- led.body.border.opa = LV_OPA_30;
- led.body.main_color = lv_color_hsv_to_rgb(_hue, 60, 100);
- led.body.grad_color = lv_color_hsv_to_rgb(_hue, 60, 40);
- led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
- led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 80, 100);
-
- theme.style.led = &led;
-#endif
-}
-
-static void bar_init(void)
-{
-#if LV_USE_BAR
- static lv_style_t bg, indic;
-
- lv_style_copy(&bg, &def);
- bg.body.opa = LV_OPA_TRANSP;
- bg.body.radius = LV_RADIUS_CIRCLE;
- bg.body.border.width = 2;
- bg.body.border.opa = LV_OPA_COVER;
- bg.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 90);
-
- lv_style_copy(&indic, &def);
- indic.body.radius = LV_RADIUS_CIRCLE;
- indic.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 90);
- indic.body.grad_color = indic.body.main_color;
- indic.body.border.width = 0;
- indic.body.padding.left = LV_DPI / 20;
- indic.body.padding.right = LV_DPI / 20;
- indic.body.padding.top = LV_DPI / 20;
- indic.body.padding.bottom = LV_DPI / 20;
-
- theme.style.bar.bg = &bg;
- theme.style.bar.indic = &indic;
-#endif
-}
-
-static void slider_init(void)
-{
-#if LV_USE_SLIDER != 0
- static lv_style_t knob;
-
- lv_style_copy(&knob, &def);
- knob.body.main_color = theme.style.bar.indic->body.main_color;
- knob.body.grad_color = knob.body.main_color;
- knob.body.radius = LV_RADIUS_CIRCLE;
- knob.body.border.width = 0;
-
- theme.style.slider.bg = theme.style.bar.bg;
- theme.style.slider.indic = theme.style.bar.indic;
- theme.style.slider.knob = &knob;
-#endif
-}
-
-static void sw_init(void)
-{
-#if LV_USE_SW != 0
- static lv_style_t indic;
-
- lv_style_copy(&indic, theme.style.slider.indic);
- indic.body.radius = LV_RADIUS_CIRCLE;
- indic.body.main_color = lv_color_hsv_to_rgb(_hue, 15, 95);
- indic.body.grad_color = indic.body.main_color;
- indic.body.border.width = theme.style.slider.bg->body.border.width;
- indic.body.border.color = theme.style.slider.bg->body.border.color;
- indic.body.border.opa = theme.style.slider.bg->body.border.opa;
- indic.body.padding.left = 0;
- indic.body.padding.right = 0;
- indic.body.padding.top = 0;
- indic.body.padding.bottom = 0;
-
- theme.style.sw.bg = theme.style.slider.bg;
- theme.style.sw.indic = &indic;
- theme.style.sw.knob_off = theme.style.slider.knob;
- theme.style.sw.knob_on = theme.style.slider.knob;
-#endif
-}
-
-static void lmeter_init(void)
-{
-#if LV_USE_LMETER != 0
- static lv_style_t lmeter;
-
- lv_style_copy(&lmeter, &def);
- lmeter.line.color = lv_color_hex3(0xddd);
- lmeter.line.width = 2;
- lmeter.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
- lmeter.body.grad_color = lmeter.body.main_color;
- lmeter.body.padding.left = LV_DPI / 8;
- lmeter.body.padding.right = LV_DPI / 8;
-
- theme.style.lmeter = &lmeter;
-#endif
-}
-
-static void gauge_init(void)
-{
-#if LV_USE_GAUGE != 0
- static lv_style_t gauge;
-
- lv_style_copy(&gauge, &def);
- gauge.line.color = lv_color_hsv_to_rgb(_hue, 50, 70);
- gauge.line.width = 1;
- gauge.body.main_color = lv_color_hex3(0x999);
- gauge.body.grad_color = gauge.body.main_color;
- gauge.body.padding.left = LV_DPI / 16;
- gauge.body.padding.right = LV_DPI / 16;
- gauge.body.border.color = lv_color_hex3(0x666); /*Needle middle color*/
-
- theme.style.gauge = &gauge;
-#endif
-}
-
-static void arc_init(void)
-{
-#if LV_USE_ARC != 0
-
- static lv_style_t arc;
- lv_style_copy(&arc, &def);
- arc.line.width = 10;
- arc.line.color = lv_color_hsv_to_rgb(_hue, 40, 90);
- arc.line.rounded = 1;
-
- /*For preloader*/
- arc.body.border.width = 0;
-
- theme.style.arc = &arc;
-#endif
-}
-
-static void preload_init(void)
-{
-#if LV_USE_PRELOAD != 0
-
- theme.style.preload = theme.style.arc;
-#endif
-}
-
-static void chart_init(void)
-{
-#if LV_USE_CHART
- theme.style.chart = theme.style.panel;
-#endif
-}
-
-static void calendar_init(void)
-{
-#if LV_USE_CALENDAR != 0
- static lv_style_t ina_days;
- lv_style_copy(&ina_days, &def);
- ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 70);
-
- static lv_style_t high_days;
- lv_style_copy(&high_days, &def);
- high_days.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
-
- static lv_style_t today_box;
- lv_style_copy(&today_box, &def);
- today_box.body.opa = LV_OPA_TRANSP;
- today_box.body.border.color = theme.style.panel->body.border.color;
- today_box.body.padding.top = LV_DPI / 20;
- today_box.body.padding.bottom = LV_DPI / 20;
- today_box.body.radius = LV_RADIUS_CIRCLE;
-
- theme.style.calendar.bg = theme.style.panel;
- theme.style.calendar.header = &lv_style_transp;
- theme.style.calendar.inactive_days = &ina_days;
- theme.style.calendar.highlighted_days = &high_days;
- theme.style.calendar.week_box = &lv_style_transp_fit;
- theme.style.calendar.today_box = &today_box;
-#endif
-}
-
-static void cb_init(void)
-{
-#if LV_USE_CB != 0
- static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
- lv_style_copy(&rel, &def);
- rel.body.radius = LV_DPI / 20;
- rel.body.shadow.width = 0;
- rel.body.border.width = 3;
- rel.body.border.opa = LV_OPA_COVER;
- rel.body.border.color = lv_color_hsv_to_rgb(_hue, 35, 80);
- rel.body.main_color = lv_color_hex3(0xfff);
- rel.body.grad_color = rel.body.main_color;
-
- lv_style_copy(&pr, &rel);
- pr.body.border.color = lv_color_hsv_to_rgb(_hue, 35, 70);
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 45, 80);
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 90);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
-
- lv_style_copy(&tgl_pr, &rel);
- tgl_pr.body.border.color = lv_color_hsv_to_rgb(_hue, 45, 70);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
-
- lv_style_copy(&ina, &rel);
- ina.body.border.color = lv_color_hex3(0xaaa);
-
- theme.style.cb.bg = &lv_style_transp;
- theme.style.cb.box.rel = &rel;
- theme.style.cb.box.pr = &pr;
- theme.style.cb.box.tgl_rel = &tgl_rel;
- theme.style.cb.box.tgl_pr = &tgl_pr;
- theme.style.cb.box.ina = &ina;
-#endif
-}
-
-static void btnm_init(void)
-{
-#if LV_USE_BTNM
- static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&bg, &lv_style_transp);
- bg.glass = 0;
- bg.body.padding.left = 0;
- bg.body.padding.right = 0;
- bg.body.padding.top = 0;
- bg.body.padding.bottom = 0;
- bg.body.padding.inner = LV_DPI / 15;
- bg.text.font = _font;
-
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.border.width = 0;
-
- lv_style_copy(&pr, &def);
- pr.body.opa = LV_OPA_TRANSP;
- pr.body.radius = LV_DPI / 1;
- pr.body.border.width = 2;
- pr.body.border.color = lv_color_hsv_to_rgb(_hue, 40, 60);
- pr.body.border.opa = LV_OPA_COVER;
- pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 60);
-
- lv_style_copy(&tgl_rel, &pr);
- tgl_rel.body.opa = LV_OPA_COVER;
- tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 15, 95);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.body.border.width = 0;
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 60, 40);
-
- lv_style_copy(&tgl_pr, &tgl_rel);
- tgl_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 30, 70);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
-
- lv_style_copy(&ina, &pr);
- ina.body.main_color = lv_color_hex3(0x888);
- ina.body.grad_color = tgl_pr.body.main_color;
- ina.text.color = lv_color_hex3(0x888);
- ;
-
- theme.style.btnm.bg = &bg;
- theme.style.btnm.btn.rel = &rel;
- theme.style.btnm.btn.pr = &pr;
- theme.style.btnm.btn.tgl_rel = &tgl_rel;
- theme.style.btnm.btn.tgl_pr = &tgl_pr;
- theme.style.btnm.btn.ina = &ina;
-#endif
-}
-
-static void kb_init(void)
-{
-#if LV_USE_KB
- static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
- lv_style_copy(&bg, &def);
- bg.body.main_color = lv_color_hex3(0x666);
- bg.body.grad_color = bg.body.main_color;
- bg.body.padding.left = 0;
- bg.body.padding.right = 0;
- bg.body.padding.top = 0;
- bg.body.padding.bottom = 0;
- bg.body.padding.inner = 0;
- bg.body.radius = 0;
- bg.body.border.width = 0;
-
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_COVER;
- rel.body.radius = 0;
- rel.body.border.width = 1;
- rel.body.border.color = lv_color_hex3(0x888);
- rel.body.border.opa = LV_OPA_COVER;
- rel.text.color = LV_COLOR_WHITE;
-
- lv_style_copy(&pr, &def);
- pr.body.main_color = lv_color_hex3(0xeee);
- pr.body.grad_color = pr.body.main_color;
- pr.body.border.color = lv_color_hex3(0x888);
- pr.body.border.width = 1;
- pr.body.border.opa = LV_OPA_COVER;
- pr.body.radius = 0;
- pr.text.color = lv_color_hex3(0x666);
-
- lv_style_copy(&tgl_rel, &pr);
- tgl_rel.body.main_color = lv_color_hex3(0x999);
- tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.text.color = LV_COLOR_WHITE;
-
- lv_style_copy(&tgl_pr, &pr);
- tgl_pr.body.main_color = lv_color_hex3(0xbbb);
- tgl_pr.body.grad_color = tgl_pr.body.main_color;
- tgl_pr.text.color = lv_color_hex3(0xddd);
-
- lv_style_copy(&ina, &pr);
- ina.body.main_color = lv_color_hex3(0x777);
- ina.body.grad_color = ina.body.main_color;
- ina.text.color = lv_color_hex3(0xbbb);
-
- theme.style.kb.bg = &bg;
- theme.style.kb.btn.rel = &rel;
- theme.style.kb.btn.pr = &pr;
- theme.style.kb.btn.tgl_rel = &tgl_rel;
- theme.style.kb.btn.tgl_pr = &tgl_pr;
- theme.style.kb.btn.ina = &ina;
-#endif
-}
-
-static void mbox_init(void)
-{
-#if LV_USE_MBOX
- static lv_style_t bg, rel, pr;
- lv_style_copy(&bg, theme.style.panel);
- bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 95);
- bg.body.grad_color = bg.body.main_color;
- bg.text.color = lv_color_hsv_to_rgb(_hue, 40, 25);
-
- lv_style_copy(&rel, &def);
- rel.body.main_color = lv_color_hsv_to_rgb(_hue, 25, 85);
- rel.body.grad_color = rel.body.main_color;
- rel.body.radius = LV_RADIUS_CIRCLE;
- rel.body.border.width = 2;
- rel.body.border.color = lv_color_hsv_to_rgb(_hue, 30, 70);
- rel.body.padding.left = LV_DPI / 4;
- rel.body.padding.right = LV_DPI / 4;
- rel.body.padding.top = LV_DPI / 8;
- rel.body.padding.bottom = LV_DPI / 8;
- rel.text.color = bg.text.color;
-
- lv_style_copy(&pr, &rel);
- pr.body.border.color = lv_color_hsv_to_rgb(_hue, 30, 90);
- pr.text.color = lv_color_hsv_to_rgb(_hue, 40, 40);
- pr.body.main_color = lv_color_hsv_to_rgb(_hue, 20, 85);
- pr.body.grad_color = pr.body.main_color;
-
- theme.style.mbox.bg = &bg;
- theme.style.mbox.btn.bg = &lv_style_transp;
- theme.style.mbox.btn.rel = &rel;
- theme.style.mbox.btn.pr = &pr;
-#endif
-}
-
-static void page_init(void)
-{
-#if LV_USE_PAGE
-
- theme.style.page.bg = theme.style.panel;
- theme.style.page.scrl = &lv_style_transp;
- theme.style.page.sb = &sb;
-#endif
-}
-
-static void ta_init(void)
-{
-#if LV_USE_TA
- static lv_style_t oneline;
- lv_style_copy(&oneline, theme.style.panel);
- oneline.body.radius = LV_RADIUS_CIRCLE;
- oneline.body.padding.top = LV_DPI / 10;
- oneline.body.padding.bottom = LV_DPI / 10;
- oneline.body.shadow.width = 0;
-
- theme.style.ta.area = theme.style.panel;
- theme.style.ta.oneline = &oneline;
- theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
- theme.style.ta.sb = &def;
-#endif
-}
-
-static void spinbox_init(void)
-{
-#if LV_USE_SPINBOX
- theme.style.spinbox.bg = theme.style.panel;
- theme.style.spinbox.cursor = theme.style.ta.cursor;
- theme.style.spinbox.sb = theme.style.ta.sb;
-#endif
-}
-
-static void list_init(void)
-{
-#if LV_USE_LIST != 0
- static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
-
- lv_style_copy(&bg, theme.style.panel);
- bg.body.padding.left = 0;
- bg.body.padding.right = 0;
- bg.body.padding.top = 0;
- bg.body.padding.bottom = 0;
-
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.border.width = 0;
- rel.body.padding.left = LV_DPI / 8;
- rel.body.padding.right = LV_DPI / 8;
- rel.body.padding.top = LV_DPI / 8;
- rel.body.padding.bottom = LV_DPI / 8;
- rel.text.color = lv_color_hex3(0x666);
- rel.image.color = lv_color_hex3(0x666);
-
- lv_style_copy(&pr, &rel);
- pr.text.color = theme.style.btn.pr->text.color;
- pr.image.color = theme.style.btn.pr->image.color;
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
-
- lv_style_copy(&tgl_pr, &rel);
- tgl_pr.text.color = theme.style.btn.tgl_pr->text.color;
- tgl_pr.image.color = theme.style.btn.tgl_pr->image.color;
-
- lv_style_copy(&ina, &rel);
- ina.text.color = theme.style.btn.ina->text.color;
- ina.image.color = theme.style.btn.ina->image.color;
-
- theme.style.list.sb = &sb;
- theme.style.list.bg = &bg;
- theme.style.list.scrl = &lv_style_transp_tight;
- theme.style.list.btn.rel = &rel;
- theme.style.list.btn.pr = &pr;
- theme.style.list.btn.tgl_rel = &tgl_rel;
- theme.style.list.btn.tgl_pr = &tgl_pr;
- theme.style.list.btn.ina = &ina;
-#endif
-}
-
-static void ddlist_init(void)
-{
-#if LV_USE_DDLIST != 0
- static lv_style_t bg, sel;
- lv_style_copy(&bg, theme.style.panel);
- bg.text.line_space = LV_DPI / 8;
- bg.body.padding.left = LV_DPI / 6;
- bg.body.padding.right = LV_DPI / 6;
- bg.body.padding.top = LV_DPI / 8;
- bg.body.padding.bottom = LV_DPI / 8;
- bg.text.color = lv_color_hex3(0x666);
-
- lv_style_copy(&sel, &def);
- sel.body.opa = LV_OPA_TRANSP;
- sel.body.border.width = 0;
- sel.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
-
- theme.style.ddlist.bg = &bg;
- theme.style.ddlist.sel = &sel;
- theme.style.ddlist.sb = &def;
-#endif
-}
-
-static void roller_init(void)
-{
-#if LV_USE_ROLLER != 0
- static lv_style_t bg, sel;
- lv_style_copy(&bg, &def);
- bg.body.border.width = 0;
- bg.body.opa = LV_OPA_TRANSP;
- bg.text.line_space = LV_DPI / 6;
- bg.text.color = lv_color_hex3(0x999);
-
- lv_style_copy(&sel, theme.style.panel);
- sel.body.radius = LV_RADIUS_CIRCLE;
- sel.body.opa = LV_OPA_TRANSP;
-
- theme.style.roller.bg = &bg;
- theme.style.roller.sel = &sel;
-#endif
-}
-
-static void tabview_init(void)
-{
-#if LV_USE_TABVIEW != 0
- static lv_style_t btn_bg, indic, rel, pr, tgl_rel, tgl_pr;
-
- lv_style_copy(&btn_bg, &def);
- btn_bg.body.opa = LV_OPA_TRANSP;
- btn_bg.body.border.width = 2;
- btn_bg.body.border.part = LV_BORDER_BOTTOM;
- btn_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 90);
-
- lv_style_copy(&indic, &def);
- indic.body.padding.inner = LV_DPI / 16;
- indic.body.border.width = 0;
- indic.body.radius = LV_RADIUS_CIRCLE;
- indic.body.main_color = lv_color_hsv_to_rgb(_hue, 50, 80);
- indic.body.grad_color = indic.body.main_color;
-
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.border.width = 0;
- rel.text.color = lv_color_hex3(0x999);
-
- lv_style_copy(&pr, &rel);
- pr.text.color = lv_color_hex3(0x777);
-
- lv_style_copy(&tgl_rel, &rel);
- tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
-
- lv_style_copy(&tgl_pr, &rel);
- tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 50, 70);
-
- theme.style.tabview.bg = theme.style.bg;
- theme.style.tabview.indic = &indic;
- theme.style.tabview.btn.bg = &btn_bg;
- theme.style.tabview.btn.rel = &rel;
- theme.style.tabview.btn.pr = &pr;
- theme.style.tabview.btn.tgl_rel = &tgl_rel;
- theme.style.tabview.btn.tgl_pr = &tgl_pr;
-#endif
-}
-
-static void tileview_init(void)
-{
-#if LV_USE_TILEVIEW != 0
- theme.style.tileview.bg = &lv_style_transp_tight;
- theme.style.tileview.scrl = &lv_style_transp_tight;
- theme.style.tileview.sb = theme.style.page.sb;
-#endif
-}
-
-static void table_init(void)
-{
-#if LV_USE_TABLE != 0
- static lv_style_t cell;
- lv_style_copy(&cell, theme.style.panel);
- cell.body.radius = 0;
- cell.body.border.width = 1;
- cell.body.shadow.width = 0;
- cell.body.padding.left = LV_DPI / 12;
- cell.body.padding.right = LV_DPI / 12;
- cell.body.padding.top = LV_DPI / 12;
- cell.body.padding.bottom = LV_DPI / 12;
-
- theme.style.table.bg = &lv_style_transp_tight;
- theme.style.table.cell = &cell;
-#endif
-}
-
-static void win_init(void)
-{
-#if LV_USE_WIN != 0
- static lv_style_t header, rel, pr;
-
- lv_style_copy(&header, &def);
- header.body.opa = LV_OPA_TRANSP;
- header.body.border.width = 2;
- header.body.border.part = LV_BORDER_BOTTOM;
- header.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 90);
- header.text.color = lv_color_hex3(0x666);
- header.image.color = lv_color_hex3(0x666);
- header.body.padding.top = 0;
- header.body.padding.bottom = 0;
- header.body.padding.inner = 0;
-
- lv_style_copy(&rel, &def);
- rel.body.opa = LV_OPA_TRANSP;
- rel.body.border.width = 0;
- rel.text.color = lv_color_hex3(0x666);
- rel.image.color = lv_color_hex3(0x666);
-
- lv_style_copy(&pr, &rel);
- pr.text.color = lv_color_hex3(0x333);
- pr.image.color = lv_color_hex3(0x333);
-
- theme.style.win.bg = theme.style.panel;
- theme.style.win.sb = &sb;
- theme.style.win.header = &header;
- theme.style.win.content = &lv_style_transp;
- theme.style.win.btn.rel = &rel;
- theme.style.win.btn.pr = &pr;
-#endif
-}
-
-#if LV_USE_GROUP
-
-static void style_mod(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = lv_color_hsv_to_rgb(_hue, 40, 50);
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 2;
-#endif
-}
-
-static void style_mod_edit(lv_group_t * group, lv_style_t * style)
-{
- (void)group; /*Unused*/
-
-#if LV_COLOR_DEPTH != 1
- /*Make the style to be a little bit orange*/
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_GREEN;
-
- /*If not empty or has border then emphasis the border*/
- if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
-
- style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
- style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
-
- style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
-#else
- style->body.border.opa = LV_OPA_COVER;
- style->body.border.color = LV_COLOR_BLACK;
- style->body.border.width = 3;
-#endif
-}
-
-#endif /*LV_USE_GROUP*/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Initialize the zen theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font)
-{
- if(font == NULL) font = LV_FONT_DEFAULT;
-
- _hue = hue;
- _font = font;
-
- /*For backward compatibility initialize all theme elements with a default style */
- uint16_t i;
- lv_style_t ** style_p = (lv_style_t **)&theme.style;
- for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
- *style_p = &def;
- style_p++;
- }
-
- basic_init();
- cont_init();
- btn_init();
- label_init();
- img_init();
- line_init();
- led_init();
- bar_init();
- slider_init();
- sw_init();
- lmeter_init();
- gauge_init();
- arc_init();
- preload_init();
- chart_init();
- calendar_init();
- cb_init();
- btnm_init();
- kb_init();
- mbox_init();
- page_init();
- ta_init();
- spinbox_init();
- list_init();
- ddlist_init();
- roller_init();
- tabview_init();
- tileview_init();
- table_init();
- win_init();
-
-#if LV_USE_GROUP
- theme.group.style_mod_xcb = style_mod;
- theme.group.style_mod_edit_xcb = style_mod_edit;
-#endif
-
- return &theme;
-}
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_zen(void)
-{
- return &theme;
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif
diff --git a/src/libs/lvgl/src/lv_themes/lv_theme_zen.h b/src/libs/lvgl/src/lv_themes/lv_theme_zen.h
deleted file mode 100644
index 4a497fe3..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_theme_zen.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @file lv_theme_zen.h
- *
- */
-
-#ifndef LV_THEME_ZEN_H
-#define LV_THEME_ZEN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#if LV_USE_THEME_ZEN
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**
- * Initialize the zen theme
- * @param hue [0..360] hue value from HSV color space to define the theme's base color
- * @param font pointer to a font (NULL to use the default)
- * @return pointer to the initialized theme
- */
-lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font);
-
-/**
- * Get a pointer to the theme
- * @return pointer to the theme
- */
-lv_theme_t * lv_theme_get_zen(void);
-
-/**********************
- * MACROS
- **********************/
-
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_THEME_ZEN_H*/
diff --git a/src/libs/lvgl/src/lv_themes/lv_themes.mk b/src/libs/lvgl/src/lv_themes/lv_themes.mk
deleted file mode 100644
index fce41e4e..00000000
--- a/src/libs/lvgl/src/lv_themes/lv_themes.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-CSRCS += lv_theme_alien.c
-CSRCS += lv_theme.c
-CSRCS += lv_theme_default.c
-CSRCS += lv_theme_night.c
-CSRCS += lv_theme_templ.c
-CSRCS += lv_theme_zen.c
-CSRCS += lv_theme_material.c
-CSRCS += lv_theme_nemo.c
-CSRCS += lv_theme_mono.c
-
-DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_themes
-VPATH += :$(LVGL_DIR)/lvgl/src/lv_themes
-
-CFLAGS += "-I$(LVGL_DIR)/lvgl/src/lv_themes"
diff --git a/src/libs/lvgl/src/lv_version.h b/src/libs/lvgl/src/lv_version.h
deleted file mode 100644
index 886966f7..00000000
--- a/src/libs/lvgl/src/lv_version.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @file lv_version.h
- *
- */
-
-#ifndef LV_VERSION_H
-#define LV_VERSION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-/*Current version of LittlevGL*/
-#define LVGL_VERSION_MAJOR 6
-#define LVGL_VERSION_MINOR 1
-#define LVGL_VERSION_PATCH 1
-#define LVGL_VERSION_INFO ""
-
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-/** Gives 1 if the x.y.z version is supported in the current version
- * Usage:
- *
- * - Require v6
- * #if LV_VERSION_CHECK(6,0,0)
- * new_func_in_v6();
- * #endif
- *
- *
- * - Require at least v5.3
- * #if LV_VERSION_CHECK(5,3,0)
- * new_feature_from_v5_3();
- * #endif
- *
- *
- * - Require v5.3.2 bugfixes
- * #if LV_VERSION_CHECK(5,3,2)
- * bugfix_in_v5_3_2();
- * #endif
- *
- * */
-#define LV_VERSION_CHECK(x,y,z) (x == LVGL_VERSION_MAJOR && (y < LVGL_VERSION_MINOR || (y == LVGL_VERSION_MINOR && z <= LVGL_VERSION_PATCH)))
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_VERSION_H*/