dashboard: add screen-level battery nav hitboxes
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
static const char *DASHBOARD_VERSION = "0.1.85-battery-nav-overlay";
|
static const char *DASHBOARD_VERSION = "0.1.86-battery-nav-screen-hitbox";
|
||||||
|
|
||||||
// Update these if your Cargo ESP AP credentials are different.
|
// Update these if your Cargo ESP AP credentials are different.
|
||||||
static const char *CARGO_WIFI_SSID = "OverlandController";
|
static const char *CARGO_WIFI_SSID = "OverlandController";
|
||||||
|
|||||||
@@ -557,19 +557,22 @@ static String signed_float_text(float value, int decimals, const char *suffix)
|
|||||||
|
|
||||||
static void battery_nav_doubletap_cb(lv_event_t *event)
|
static void battery_nav_doubletap_cb(lv_event_t *event)
|
||||||
{
|
{
|
||||||
if (lv_event_get_code(event) != LV_EVENT_CLICKED) return;
|
if (lv_event_get_code(event) != LV_EVENT_PRESSED) return;
|
||||||
|
|
||||||
static uint32_t last_click_ms = 0;
|
static uint32_t last_press_ms = 0;
|
||||||
|
static DashboardScreen last_target = SCREEN_OVERVIEW;
|
||||||
|
|
||||||
|
DashboardScreen target = (DashboardScreen)(intptr_t)lv_event_get_user_data(event);
|
||||||
uint32_t now_ms = millis();
|
uint32_t now_ms = millis();
|
||||||
|
|
||||||
if (now_ms - last_click_ms <= 450) {
|
if (target == last_target && now_ms - last_press_ms <= 700) {
|
||||||
last_click_ms = 0;
|
last_press_ms = 0;
|
||||||
DashboardScreen target = (DashboardScreen)(intptr_t)lv_event_get_user_data(event);
|
|
||||||
show_dashboard_screen(target);
|
show_dashboard_screen(target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
last_click_ms = now_ms;
|
last_target = target;
|
||||||
|
last_press_ms = now_ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_doubletap_nav_target(lv_obj_t *obj, DashboardScreen target)
|
static void add_doubletap_nav_target(lv_obj_t *obj, DashboardScreen target)
|
||||||
@@ -675,6 +678,21 @@ static lv_obj_t *create_battery_metric_tile(lv_obj_t *parent, const char *title,
|
|||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void add_screen_doubletap_hitbox(lv_obj_t *screen, int x, int y, int width, int height, DashboardScreen target)
|
||||||
|
{
|
||||||
|
lv_obj_t *hitbox = lv_obj_create(screen);
|
||||||
|
lv_obj_set_size(hitbox, width, height);
|
||||||
|
lv_obj_align(hitbox, LV_ALIGN_TOP_LEFT, x, y);
|
||||||
|
lv_obj_set_style_bg_opa(hitbox, LV_OPA_TRANSP, 0);
|
||||||
|
lv_obj_set_style_border_opa(hitbox, LV_OPA_TRANSP, 0);
|
||||||
|
lv_obj_set_style_pad_all(hitbox, 0, 0);
|
||||||
|
lv_obj_clear_flag(hitbox, LV_OBJ_FLAG_SCROLLABLE);
|
||||||
|
lv_obj_add_flag(hitbox, LV_OBJ_FLAG_CLICKABLE);
|
||||||
|
lv_obj_add_event_cb(hitbox, battery_nav_doubletap_cb, LV_EVENT_PRESSED, (void *)target);
|
||||||
|
lv_obj_move_foreground(hitbox);
|
||||||
|
}
|
||||||
|
|
||||||
static void create_battery_detail_screen()
|
static void create_battery_detail_screen()
|
||||||
{
|
{
|
||||||
lv_obj_t *screen = lv_scr_act();
|
lv_obj_t *screen = lv_scr_act();
|
||||||
@@ -725,6 +743,8 @@ static void create_battery_detail_screen()
|
|||||||
make_detail_label(delta_card, &battery_detail_delta_label, "-- mV", &lv_font_montserrat_30, lv_color_hex(0xFFFFFF), 220, LV_ALIGN_RIGHT_MID, -20, 0, LV_TEXT_ALIGN_RIGHT);
|
make_detail_label(delta_card, &battery_detail_delta_label, "-- mV", &lv_font_montserrat_30, lv_color_hex(0xFFFFFF), 220, LV_ALIGN_RIGHT_MID, -20, 0, LV_TEXT_ALIGN_RIGHT);
|
||||||
|
|
||||||
update_battery_detail_widgets();
|
update_battery_detail_widgets();
|
||||||
|
|
||||||
|
add_screen_doubletap_hitbox(screen, 32, 78, 300, 500, SCREEN_OVERVIEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_dashboard_screen(DashboardScreen screen)
|
static void show_dashboard_screen(DashboardScreen screen)
|
||||||
|
|||||||
Reference in New Issue
Block a user