Reintroduce LVGL-related changes (#65)

This commit is contained in:
Ken Van Hoeylandt 2024-10-28 23:23:13 +01:00 committed by GitHub
parent 62d30e8b7b
commit 5412f929c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 34 additions and 36 deletions

View File

@ -46,11 +46,7 @@ bool tt_sdcard_mount(const SdCard* sdcard) {
.sdcard = sdcard
};
sdcard_unlock();
if (data.context != NULL) {
return true;
} else {
return false;
}
return (data.context != NULL);
} else {
TT_LOG_E(TAG, "Failed to lock");
return false;

View File

@ -39,9 +39,10 @@ static void update_pin_widgets(Gpio* gpio) {
for (int j = 0; j < GPIO_NUM_MAX; ++j) {
int level = gpio->pin_states[j];
lv_obj_t* label = gpio->lv_pins[j];
// user_data stores the state, so we can avoid unnecessary updates
if ((void*)level != label->user_data) {
label->user_data = (void*)level;
void* label_user_data = lv_obj_get_user_data(label);
// The user data stores the state, so we can avoid unnecessary updates
if ((void*)level != label_user_data) {
lv_obj_set_user_data(label, (void*)level);
if (level == 0) {
lv_obj_set_style_text_color(label, lv_color_black(), 0);
} else {

View File

@ -25,12 +25,12 @@ static void update_mode(ScreenshotUi* ui) {
}
static void on_mode_set(lv_event_t* event) {
ScreenshotUi* ui = (ScreenshotUi*)event->user_data;
ScreenshotUi* ui = (ScreenshotUi*)lv_event_get_user_data(event);
update_mode(ui);
}
static void on_start_pressed(lv_event_t* event) {
ScreenshotUi* ui = event->user_data;
ScreenshotUi* ui = lv_event_get_user_data(event);
if (tt_screenshot_is_started()) {
TT_LOG_I(TAG, "Stop screenshot");

View File

@ -47,7 +47,7 @@ static bool is_image_file(const char* filename) {
static void update_views(FilesData* data);
static void on_navigate_up_pressed(lv_event_t* event) {
FilesData* files_data = (FilesData*)event->user_data;
FilesData* files_data = (FilesData*)lv_event_get_user_data(event);
if (strcmp(files_data->current_path, "/") != 0) {
TT_LOG_I(TAG, "Navigating upwards");
char new_absolute_path[MAX_PATH_LENGTH];
@ -62,13 +62,13 @@ static void on_exit_app_pressed(TT_UNUSED lv_event_t* event) {
loader_stop_app();
}
static void on_file_pressed(lv_event_t* e) {
lv_event_code_t code = lv_event_get_code(e);
static void on_file_pressed(lv_event_t* event) {
lv_event_code_t code = lv_event_get_code(event);
if (code == LV_EVENT_CLICKED) {
lv_obj_t* button = e->current_target;
lv_obj_t* button = lv_event_get_current_target_obj(event);
FilesData* files_data = lv_obj_get_user_data(button);
struct dirent* dir_entry = e->user_data;
struct dirent* dir_entry = lv_event_get_user_data(event);
TT_LOG_I(TAG, "Pressed %s %d", dir_entry->d_name, dir_entry->d_type);
switch (dir_entry->d_type) {

View File

@ -14,7 +14,7 @@
#define TAG "wifi_connect"
static void on_connect(lv_event_t* event) {
WifiConnect* wifi = (WifiConnect*)event->user_data;
WifiConnect* wifi = (WifiConnect*)lv_event_get_user_data(event);
WifiConnectView* view = &wifi->view;
const char* ssid = lv_textarea_get_text(view->ssid_textarea);
const char* password = lv_textarea_get_text(view->password_textarea);

View File

@ -15,27 +15,27 @@ static void on_enable_switch_changed(lv_event_t* event) {
lv_obj_t* enable_switch = lv_event_get_target(event);
if (code == LV_EVENT_VALUE_CHANGED) {
bool is_on = lv_obj_has_state(enable_switch, LV_STATE_CHECKED);
WifiManageBindings* bindings = (WifiManageBindings*)event->user_data;
WifiManageBindings* bindings = (WifiManageBindings*)lv_event_get_user_data(event);
bindings->on_wifi_toggled(is_on);
}
}
static void on_disconnect_pressed(lv_event_t* event) {
WifiManageBindings* bindings = (WifiManageBindings*)event->user_data;
WifiManageBindings* bindings = (WifiManageBindings*)lv_event_get_user_data(event);
bindings->on_disconnect();
}
// region Secondary updates
static void connect(lv_event_t* event) {
lv_obj_t* button = event->current_target;
lv_obj_t* button = lv_event_get_current_target_obj(event);
// Assumes that the second child of the button is a label ... risky
lv_obj_t* label = lv_obj_get_child(button, 1);
// We get the SSID from the button label because it's safer than alloc'ing
// our own and passing it as the event data
const char* ssid = lv_label_get_text(label);
TT_LOG_I(TAG, "Clicked AP: %s", ssid);
WifiManageBindings* bindings = (WifiManageBindings*)event->user_data;
WifiManageBindings* bindings = (WifiManageBindings*)lv_event_get_user_data(event);
bindings->on_connect_ssid(ssid);
}

View File

@ -25,7 +25,7 @@ void gui_loader_callback(const void* message, void* context) {
LoaderEvent* event = (LoaderEvent*)message;
if (event->type == LoaderEventTypeApplicationShowing) {
App* app = event->app_showing.app;
AppManifest* app_manifest = tt_app_get_manifest(app);
const AppManifest* app_manifest = tt_app_get_manifest(app);
gui_show_app(app, app_manifest->on_show, app_manifest->on_hide);
} else if (event->type == LoaderEventTypeApplicationHiding) {
gui_hide_app();

View File

@ -7,8 +7,9 @@
extern Gui* gui;
static void show_keyboard(lv_event_t* event) {
gui_keyboard_show(event->current_target);
lv_obj_scroll_to_view(event->current_target, LV_ANIM_ON);
lv_obj_t* target = lv_event_get_current_target_obj(event);
gui_keyboard_show(target);
lv_obj_scroll_to_view(target, LV_ANIM_ON);
}
static void hide_keyboard(TT_UNUSED lv_event_t* event) {

View File

@ -262,7 +262,7 @@ static void loader_do_stop_app() {
// Stop current app
App app_to_stop = loader_singleton->app_stack[current_app_index];
AppManifest* manifest = tt_app_get_manifest(app_to_stop);
const AppManifest* manifest = tt_app_get_manifest(app_to_stop);
app_transition_to_state(app_to_stop, AppStateHiding);
app_transition_to_state(app_to_stop, AppStateStopped);

View File

@ -39,7 +39,7 @@ typedef struct {
} LoaderEventAppHiding;
typedef struct {
AppManifest* manifest;
const AppManifest* manifest;
} LoaderEventAppStopped;
typedef struct {

View File

@ -1,3 +1,4 @@
#define LV_USE_PRIVATE_API 1 // For actual lv_obj_t declaration
#include "statusbar.h"
#include "mutex.h"

View File

@ -1,10 +1,19 @@
#define LV_USE_PRIVATE_API 1 // For actual lv_obj_t declaration
#include "toolbar.h"
#include "services/loader/loader.h"
#include "ui/spacer.h"
#include "ui/style.h"
#include "lvgl.h"
typedef struct {
lv_obj_t obj;
lv_obj_t* title_label;
lv_obj_t* close_button;
lv_obj_t* close_button_image;
lv_obj_t* action_container;
ToolbarAction* action_array[TOOLBAR_ACTION_LIMIT];
uint8_t action_count;
} Toolbar;
static void toolbar_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj);

View File

@ -20,16 +20,6 @@ typedef struct {
void* _Nullable callback_context;
} ToolbarAction;
typedef struct {
lv_obj_t obj;
lv_obj_t* title_label;
lv_obj_t* close_button;
lv_obj_t* close_button_image;
lv_obj_t* action_container;
ToolbarAction* action_array[TOOLBAR_ACTION_LIMIT];
uint8_t action_count;
} Toolbar;
lv_obj_t* tt_toolbar_create(lv_obj_t* parent, const char* title);
lv_obj_t* tt_toolbar_create_for_app(lv_obj_t* parent, App app);
void tt_toolbar_set_title(lv_obj_t* obj, const char* title);