Implement UI scaling and more (#501)
**New Features** * Runtime font accessors and new symbol fonts for text, launcher, statusbar, and shared icons. * Added font height base setting to device.properties * Text fonts now have 3 sizes: small, default, large **Improvements** * Renamed `UiScale` to `UiDensity` * Statusbar, toolbar and many UI components now compute heights and spacing from fonts/density. * SSD1306 initialization sequence refined for more stable startup. * Multiple image assets replaced by symbol-font rendering. * Many layout improvements related to density, font scaling and icon scaling * Updated folder name capitalization for newer style
This commit is contained in:
committed by
GitHub
parent
72c9b2b113
commit
9a11e6f47b
@@ -0,0 +1,66 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
#ifdef ESP_PLATFORM
|
||||
|
||||
#include <esp_lvgl_port.h>
|
||||
|
||||
#include <tactility/time.h>
|
||||
#include <tactility/error.h>
|
||||
#include <tactility/lvgl_module.h>
|
||||
|
||||
extern struct LvglModuleConfig lvgl_module_config;
|
||||
|
||||
static bool initialized = false;
|
||||
|
||||
bool lvgl_lock(void) {
|
||||
if (!initialized) return true; // We allow (fake) locking because it's safe to do so as LVGL is not running yet
|
||||
return lvgl_port_lock(portMAX_DELAY);
|
||||
}
|
||||
|
||||
bool lvgl_try_lock_timed(uint32_t timeout) {
|
||||
if (!initialized) return true; // We allow (fake) locking because it's safe to do so as LVGL is not running yet
|
||||
return lvgl_port_lock(millis_to_ticks(timeout));
|
||||
}
|
||||
|
||||
void lvgl_unlock(void) {
|
||||
if (!initialized) return;
|
||||
lvgl_port_unlock();
|
||||
}
|
||||
|
||||
error_t lvgl_arch_start() {
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = lvgl_module_config.task_priority,
|
||||
.task_stack = lvgl_module_config.task_stack_size,
|
||||
.task_affinity = lvgl_module_config.task_affinity,
|
||||
.task_max_sleep_ms = 500,
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
return ERROR_RESOURCE;
|
||||
}
|
||||
|
||||
// We must have the state set to "initialized" so that the lvgl lock works
|
||||
// when we call listener functions. These functions could create new
|
||||
// devices and services. The latter might start adding widgets immediately.
|
||||
initialized = true;
|
||||
|
||||
if (lvgl_module_config.on_start) lvgl_module_config.on_start();
|
||||
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
error_t lvgl_arch_stop() {
|
||||
if (lvgl_module_config.on_stop) lvgl_module_config.on_stop();
|
||||
|
||||
if (lvgl_port_deinit() != ESP_OK) {
|
||||
// Call on_start again to recover
|
||||
if (lvgl_module_config.on_start) lvgl_module_config.on_start();
|
||||
return ERROR_RESOURCE;
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,148 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
#ifndef ESP_PLATFORM
|
||||
|
||||
#include <tactility/check.h>
|
||||
#include <tactility/delay.h>
|
||||
#include <tactility/concurrent/recursive_mutex.h>
|
||||
#include <tactility/concurrent/thread.h>
|
||||
#include <tactility/freertos/task.h>
|
||||
#include <tactility/time.h>
|
||||
|
||||
#include <lvgl.h>
|
||||
|
||||
#include "tactility/lvgl_module.h"
|
||||
|
||||
extern struct LvglModuleConfig lvgl_module_config;
|
||||
|
||||
// Mutex for LVGL drawing
|
||||
static struct RecursiveMutex lvgl_mutex;
|
||||
static bool lvgl_mutex_initialised = false;
|
||||
static struct RecursiveMutex task_mutex;
|
||||
static bool task_mutex_initialised = false;
|
||||
|
||||
static uint32_t task_max_sleep_ms = 10;
|
||||
static TaskHandle_t lvgl_task_handle = NULL;
|
||||
static bool lvgl_task_interrupt_requested = false;
|
||||
|
||||
#define LVGL_STOP_POLL_INTERVAL 10
|
||||
#define LVGL_STOP_TIMEOUT 5000
|
||||
|
||||
static void task_lock(void) {
|
||||
if (!task_mutex_initialised) return;
|
||||
recursive_mutex_lock(&task_mutex);
|
||||
}
|
||||
|
||||
static void task_unlock(void) {
|
||||
if (!task_mutex_initialised) return;
|
||||
recursive_mutex_unlock(&task_mutex);
|
||||
}
|
||||
|
||||
bool lvgl_lock(void) {
|
||||
if (!lvgl_mutex_initialised) return false;
|
||||
recursive_mutex_lock(&lvgl_mutex);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool lvgl_try_lock_timed(uint32_t timeout) {
|
||||
if (!lvgl_mutex_initialised) return false;
|
||||
return recursive_mutex_try_lock(&lvgl_mutex, millis_to_ticks(timeout));
|
||||
}
|
||||
|
||||
void lvgl_unlock(void) {
|
||||
if (!lvgl_mutex_initialised) return;
|
||||
recursive_mutex_unlock(&lvgl_mutex);
|
||||
}
|
||||
|
||||
static void lvgl_task_set_interrupted(bool interrupted) {
|
||||
task_lock();
|
||||
lvgl_task_interrupt_requested = interrupted;
|
||||
task_unlock();
|
||||
}
|
||||
|
||||
static bool lvgl_task_is_interrupt_requested() {
|
||||
task_lock();
|
||||
bool result = lvgl_task_interrupt_requested;
|
||||
task_unlock();
|
||||
return result;
|
||||
}
|
||||
|
||||
static void lvgl_task(void* arg) {
|
||||
uint32_t task_delay_ms = task_max_sleep_ms;
|
||||
|
||||
check(!lvgl_task_is_interrupt_requested());
|
||||
|
||||
// on_start must be called from the task, otherwise the display doesn't work
|
||||
if (lvgl_module_config.on_start) lvgl_module_config.on_start();
|
||||
|
||||
while (!lvgl_task_is_interrupt_requested()) {
|
||||
if (lvgl_try_lock_timed(10)) {
|
||||
task_delay_ms = lv_timer_handler();
|
||||
lvgl_unlock();
|
||||
}
|
||||
if ((task_delay_ms > task_max_sleep_ms) || (1 == task_delay_ms)) {
|
||||
task_delay_ms = task_max_sleep_ms;
|
||||
} else if (task_delay_ms < 1) {
|
||||
task_delay_ms = 1;
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(task_delay_ms));
|
||||
}
|
||||
|
||||
if (lvgl_module_config.on_stop) lvgl_module_config.on_stop();
|
||||
|
||||
task_lock();
|
||||
lvgl_task_handle = NULL;
|
||||
task_unlock();
|
||||
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
error_t lvgl_arch_start() {
|
||||
if (!lvgl_mutex_initialised) {
|
||||
recursive_mutex_construct(&lvgl_mutex);
|
||||
lvgl_mutex_initialised = true;
|
||||
}
|
||||
|
||||
if (!task_mutex_initialised) {
|
||||
recursive_mutex_construct(&task_mutex);
|
||||
task_mutex_initialised = true;
|
||||
}
|
||||
|
||||
lvgl_task_set_interrupted(false);
|
||||
|
||||
lv_init();
|
||||
|
||||
// Create the main app loop, like ESP-IDF
|
||||
BaseType_t task_result = xTaskCreate(
|
||||
lvgl_task,
|
||||
"lvgl",
|
||||
lvgl_module_config.task_stack_size,
|
||||
NULL,
|
||||
lvgl_module_config.task_priority,
|
||||
&lvgl_task_handle
|
||||
);
|
||||
|
||||
return (task_result == pdTRUE) ? ERROR_NONE : ERROR_RESOURCE;
|
||||
}
|
||||
|
||||
error_t lvgl_arch_stop() {
|
||||
TickType_t start_ticks = get_ticks();
|
||||
lvgl_task_set_interrupted(true);
|
||||
while (true) {
|
||||
task_lock();
|
||||
bool done = (lvgl_task_handle == NULL);
|
||||
task_unlock();
|
||||
if (done) break;
|
||||
|
||||
delay_ticks(LVGL_STOP_POLL_INTERVAL);
|
||||
|
||||
if (get_ticks() - start_ticks > LVGL_STOP_TIMEOUT) {
|
||||
return ERROR_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
lv_deinit();
|
||||
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,42 @@
|
||||
#include <lvgl.h>
|
||||
#include <tactility/lvgl_fonts.h>
|
||||
#include <tactility/check.h>
|
||||
|
||||
// The preprocessor definitions that are used below are defined in the CMakeLists.txt from this module.
|
||||
|
||||
extern const lv_font_t TT_LVGL_TEXT_FONT_SMALL_SYMBOL;
|
||||
extern const lv_font_t TT_LVGL_TEXT_FONT_DEFAULT_SYMBOL;
|
||||
extern const lv_font_t TT_LVGL_TEXT_FONT_LARGE_SYMBOL;
|
||||
|
||||
extern const lv_font_t TT_LVGL_LAUNCHER_FONT_ICON_SYMBOL;
|
||||
extern const lv_font_t TT_LVGL_STATUSBAR_FONT_ICON_SYMBOL;
|
||||
extern const lv_font_t TT_LVGL_SHARED_FONT_ICON_SYMBOL;
|
||||
|
||||
uint32_t lvgl_get_text_font_height(enum LvglFontSize font_size) {
|
||||
switch (font_size) {
|
||||
case FONT_SIZE_SMALL: return TT_LVGL_TEXT_FONT_SMALL_SIZE;
|
||||
case FONT_SIZE_DEFAULT: return TT_LVGL_TEXT_FONT_DEFAULT_SIZE;
|
||||
case FONT_SIZE_LARGE: return TT_LVGL_TEXT_FONT_LARGE_SIZE;
|
||||
default: check(false);
|
||||
}
|
||||
}
|
||||
const lv_font_t* lvgl_get_text_font(enum LvglFontSize font_size) {
|
||||
switch (font_size) {
|
||||
case FONT_SIZE_SMALL: return &TT_LVGL_TEXT_FONT_SMALL_SYMBOL;
|
||||
case FONT_SIZE_DEFAULT: return &TT_LVGL_TEXT_FONT_DEFAULT_SYMBOL;
|
||||
case FONT_SIZE_LARGE: return &TT_LVGL_TEXT_FONT_LARGE_SYMBOL;
|
||||
default: check(false);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t lvgl_get_shared_icon_font_height() { return TT_LVGL_SHARED_FONT_ICON_SIZE; }
|
||||
|
||||
const lv_font_t* lvgl_get_shared_icon_font() { return &TT_LVGL_SHARED_FONT_ICON_SYMBOL; }
|
||||
|
||||
uint32_t lvgl_get_launcher_icon_font_height() { return TT_LVGL_LAUNCHER_FONT_ICON_SIZE; }
|
||||
|
||||
const lv_font_t* lvgl_get_launcher_icon_font() { return &TT_LVGL_LAUNCHER_FONT_ICON_SYMBOL; }
|
||||
|
||||
uint32_t lvgl_get_statusbar_icon_font_height() { return TT_LVGL_STATUSBAR_FONT_ICON_SIZE; }
|
||||
|
||||
const lv_font_t* lvgl_get_statusbar_icon_font() { return &TT_LVGL_STATUSBAR_FONT_ICON_SYMBOL; }
|
||||
@@ -0,0 +1,69 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
#include <lvgl.h>
|
||||
#include <string.h>
|
||||
#include <tactility/module.h>
|
||||
#include <tactility/lvgl_module.h>
|
||||
|
||||
extern const struct ModuleSymbol lvgl_module_symbols[];
|
||||
error_t lvgl_arch_start();
|
||||
error_t lvgl_arch_stop();
|
||||
|
||||
static bool is_running = false;
|
||||
static bool is_configured = false;
|
||||
|
||||
struct LvglModuleConfig lvgl_module_config = {
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
#ifdef ESP_PLATFORM
|
||||
0,
|
||||
#endif
|
||||
};
|
||||
|
||||
void lvgl_module_configure(const struct LvglModuleConfig config) {
|
||||
is_configured = true;
|
||||
memcpy(&lvgl_module_config, &config, sizeof(struct LvglModuleConfig));
|
||||
}
|
||||
|
||||
static error_t start() {
|
||||
if (!is_configured) {
|
||||
return ERROR_INVALID_STATE;
|
||||
}
|
||||
|
||||
if (is_running) {
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
error_t result = lvgl_arch_start();
|
||||
if (result == ERROR_NONE) {
|
||||
is_running = true;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static error_t stop() {
|
||||
if (!is_running) {
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
error_t error = lvgl_arch_stop();
|
||||
if (error == ERROR_NONE) {
|
||||
is_running = false;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
bool lvgl_is_running() {
|
||||
return is_running;
|
||||
}
|
||||
|
||||
struct Module lvgl_module = {
|
||||
.name = "lvgl",
|
||||
.start = start,
|
||||
.stop = stop,
|
||||
.symbols = (const struct ModuleSymbol*)lvgl_module_symbols,
|
||||
.internal = NULL
|
||||
};
|
||||
@@ -0,0 +1,392 @@
|
||||
#include <tactility/module.h>
|
||||
#include <lvgl.h>
|
||||
|
||||
const struct ModuleSymbol lvgl_module_symbols[] = {
|
||||
// lv_event
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_code),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_indev),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_key),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_param),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_scroll_anim),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_user_data),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_target_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_target),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_current_target_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_get_draw_task),
|
||||
DEFINE_MODULE_SYMBOL(lv_event_stop_bubbling),
|
||||
// lv_obj
|
||||
DEFINE_MODULE_SYMBOL(lv_color_hex),
|
||||
DEFINE_MODULE_SYMBOL(lv_color_make),
|
||||
DEFINE_MODULE_SYMBOL(lv_color_black),
|
||||
DEFINE_MODULE_SYMBOL(lv_color_white),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_center),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_clean),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_delete),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_add_event_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_add_flag),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_add_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_align),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_align_to),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_parent),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_height),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_coords),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_x),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_display),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_y),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_content_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_content_height),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_group),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_user_data),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_has_flag),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_has_flag_any),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_has_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_invalidate),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_is_valid),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_remove_event_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_remove_flag),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_remove_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_pos),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_flex_align),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_flex_flow),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_flex_grow),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_layout),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_is_layout_positioned),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_mark_layout_as_dirty),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_style_layout),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_update_layout),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_scroll_dir),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_scroll_to_view),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_radius),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_line_rounded),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_src),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_recolor),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_bg_image_recolor_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_hor),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_ver),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_top),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_bottom),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_left),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_right),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_margin_all),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_all),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_hor),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_ver),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_top),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_bottom),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_left),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_right),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_column),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_row),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_post),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_border_side),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_align),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_font),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_decor),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_letter_space),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_line_space),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_text_outline_stroke_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_user_data),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_align),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_x),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_y),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_size),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_height),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_send_event),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_color),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_pad),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_outline_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_flex_cross_place),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_image_recolor_opa),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_pad_gap),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_shadow_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_size),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_x),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_pivot_y),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_style_transform_rotation),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_scroll_to_y),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_scrollbar_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_child_count),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_child),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_get_index),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_remove_style_all),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_content_height),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_set_content_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_event_base),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_class_create_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_class_init_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_move_foreground),
|
||||
DEFINE_MODULE_SYMBOL(lv_obj_move_to_index),
|
||||
// lv_font
|
||||
DEFINE_MODULE_SYMBOL(lv_font_get_default),
|
||||
// lv_theme
|
||||
DEFINE_MODULE_SYMBOL(lv_theme_get_color_primary),
|
||||
DEFINE_MODULE_SYMBOL(lv_theme_get_color_secondary),
|
||||
DEFINE_MODULE_SYMBOL(lv_theme_get_font_small),
|
||||
DEFINE_MODULE_SYMBOL(lv_theme_get_font_normal),
|
||||
DEFINE_MODULE_SYMBOL(lv_theme_get_font_large),
|
||||
// lv_button
|
||||
DEFINE_MODULE_SYMBOL(lv_button_create),
|
||||
// lv_buttonmatrix
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_button_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_map),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_one_checked),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_get_selected_button),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_ctrl),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_ctrl_all),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_ctrl_map),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_map),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_one_checked),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_button_width),
|
||||
DEFINE_MODULE_SYMBOL(lv_buttonmatrix_set_selected_button),
|
||||
// lv_canvas
|
||||
DEFINE_MODULE_SYMBOL(lv_canvas_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_canvas_fill_bg),
|
||||
DEFINE_MODULE_SYMBOL(lv_canvas_set_draw_buf),
|
||||
DEFINE_MODULE_SYMBOL(lv_canvas_set_buffer),
|
||||
DEFINE_MODULE_SYMBOL(lv_canvas_set_px),
|
||||
// lv_label
|
||||
DEFINE_MODULE_SYMBOL(lv_label_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_cut_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_get_long_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_set_long_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_get_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_set_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_label_set_text_fmt),
|
||||
// lv_switch
|
||||
DEFINE_MODULE_SYMBOL(lv_switch_create),
|
||||
// lv_checkbox
|
||||
DEFINE_MODULE_SYMBOL(lv_checkbox_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_checkbox_set_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_checkbox_get_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_checkbox_set_text_static),
|
||||
// lv_bar
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_get_max_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_get_min_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_get_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_get_start_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_get_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_set_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_set_range),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_set_start_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_set_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_bar_is_symmetrical),
|
||||
// lv_arc
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_start_angle),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_end_angle),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_angles),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_bg_start_angle),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_bg_end_angle),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_bg_angles),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_rotation),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_range),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_change_rate),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_set_knob_offset),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_angle_start),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_angle_end),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_bg_angle_start),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_bg_angle_end),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_min_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_max_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_rotation),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_get_knob_offset),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_align_obj_to_angle),
|
||||
DEFINE_MODULE_SYMBOL(lv_arc_rotate_obj_to_angle),
|
||||
// lv_dropdown
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_add_option),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_clear_options),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_close),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_dir),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_list),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_option_count),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_option_index),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_options),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected_str),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_get_selected_highlight),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_dir),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_options),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_options_static),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_selected),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_selected_highlight),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_symbol),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_set_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_dropdown_open),
|
||||
// lv_list
|
||||
DEFINE_MODULE_SYMBOL(lv_list_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_list_add_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_list_add_button),
|
||||
DEFINE_MODULE_SYMBOL(lv_list_get_button_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_list_set_button_text),
|
||||
// lv_keyboard
|
||||
DEFINE_MODULE_SYMBOL(lv_keyboard_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_keyboard_set_textarea),
|
||||
// lv_textarea
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_accepted_chars),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_label),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_max_length),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_one_line),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_get_text_selection),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_one_line),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_accepted_chars),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_align),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_password_bullet),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_password_mode),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_password_show_time),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_placeholder_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_text),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_text_selection),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_max_length),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_set_cursor_click_pos),
|
||||
DEFINE_MODULE_SYMBOL(lv_textarea_add_text),
|
||||
// lv_palette
|
||||
DEFINE_MODULE_SYMBOL(lv_palette_main),
|
||||
DEFINE_MODULE_SYMBOL(lv_palette_darken),
|
||||
DEFINE_MODULE_SYMBOL(lv_palette_lighten),
|
||||
// lv_display
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_default),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_horizontal_resolution),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_vertical_resolution),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_physical_horizontal_resolution),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_physical_vertical_resolution),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_dpx),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_inactive_time),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_get_rotation),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_set_rotation),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_set_offset),
|
||||
DEFINE_MODULE_SYMBOL(lv_display_trigger_activity),
|
||||
// lv_pct
|
||||
DEFINE_MODULE_SYMBOL(lv_pct),
|
||||
DEFINE_MODULE_SYMBOL(lv_pct_to_px),
|
||||
// lv_spinbox
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_decrement),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_get_rollover),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_get_step),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_get_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_increment),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_rollover),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_step),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_range),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_digit_format),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_digit_step_direction),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_set_cursor_pos),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_step_next),
|
||||
DEFINE_MODULE_SYMBOL(lv_spinbox_step_prev),
|
||||
// lv_indev
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_type),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_point),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_display),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_key),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_gesture_dir),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_state),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_active),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_get_next),
|
||||
DEFINE_MODULE_SYMBOL(lv_indev_set_group),
|
||||
// lv_timer
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_handler),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_handler_run_in_period),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_periodic_handler),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_handler_set_resume_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_create_basic),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_delete),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_pause),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_resume),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_set_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_set_period),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_ready),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_set_repeat_count),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_set_auto_delete),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_set_user_data),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_reset),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_enable),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_get_idle),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_get_time_until_next),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_get_next),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_get_user_data),
|
||||
DEFINE_MODULE_SYMBOL(lv_timer_get_paused),
|
||||
// lvgl other
|
||||
DEFINE_MODULE_SYMBOL(lv_refr_now),
|
||||
DEFINE_MODULE_SYMBOL(lv_line_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_line_set_points),
|
||||
DEFINE_MODULE_SYMBOL(lv_line_set_points_mutable),
|
||||
DEFINE_MODULE_SYMBOL(lv_tick_get),
|
||||
DEFINE_MODULE_SYMBOL(lv_tick_elaps),
|
||||
// lv_slider
|
||||
DEFINE_MODULE_SYMBOL(lv_slider_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_slider_get_value),
|
||||
DEFINE_MODULE_SYMBOL(lv_slider_set_range),
|
||||
DEFINE_MODULE_SYMBOL(lv_slider_set_value),
|
||||
// lv_tabview
|
||||
DEFINE_MODULE_SYMBOL(lv_tabview_add_tab),
|
||||
DEFINE_MODULE_SYMBOL(lv_tabview_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_tabview_set_tab_bar_position),
|
||||
DEFINE_MODULE_SYMBOL(lv_tabview_set_tab_bar_size),
|
||||
// lv_screen
|
||||
DEFINE_MODULE_SYMBOL(lv_scr_act),
|
||||
DEFINE_MODULE_SYMBOL(lv_screen_active),
|
||||
DEFINE_MODULE_SYMBOL(lv_layer_top),
|
||||
// lv_group
|
||||
DEFINE_MODULE_SYMBOL(lv_group_remove_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_focus_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_get_default),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_add_obj),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_set_default),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_set_editing),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_group_delete),
|
||||
// lv_mem
|
||||
DEFINE_MODULE_SYMBOL(lv_free),
|
||||
DEFINE_MODULE_SYMBOL(lv_malloc),
|
||||
// lv_draw
|
||||
DEFINE_MODULE_SYMBOL(lv_draw_task_get_draw_dsc),
|
||||
DEFINE_MODULE_SYMBOL(lv_draw_task_get_label_dsc),
|
||||
DEFINE_MODULE_SYMBOL(lv_draw_task_get_fill_dsc),
|
||||
DEFINE_MODULE_SYMBOL(lv_draw_buf_create),
|
||||
// lv_image
|
||||
DEFINE_MODULE_SYMBOL(lv_image_create),
|
||||
DEFINE_MODULE_SYMBOL(lv_image_set_src),
|
||||
// lv_anim
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_init),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_duration),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_exec_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_repeat_count),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_values),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_var),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_set_path_cb),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_start),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_path_ease_in_out),
|
||||
DEFINE_MODULE_SYMBOL(lv_anim_path_linear),
|
||||
MODULE_SYMBOL_TERMINATOR
|
||||
};
|
||||
Reference in New Issue
Block a user