dashboard: use lvgl image icons for vehicle card

This commit is contained in:
2026-06-11 04:25:13 -06:00
parent 539cfab740
commit 5fad3b9027
4 changed files with 391 additions and 7 deletions
@@ -7,6 +7,8 @@
#include <lvgl.h>
#include "lvgl_v8_port.h"
#include "dashboard_config.h"
#include "thermometer-water.h"
#include "gas-station.h"
#include "dashboard_status_model.h"
using namespace esp_panel::drivers;
@@ -1248,8 +1250,12 @@ static void create_overland_overview_screen()
lv_obj_align(temp_tile_name_labels[i], LV_ALIGN_TOP_MID, 0, 86);
}
lv_obj_t *coolant_icon = create_coolant_icon(vehicle_card);
lv_obj_align(coolant_icon, LV_ALIGN_TOP_LEFT, 6, 6);
lv_obj_t *coolant_icon = lv_img_create(vehicle_card);
lv_img_set_src(coolant_icon, &thermometer_water);
lv_img_set_zoom(coolant_icon, 68); // 150px source -> ~40px display
lv_obj_set_style_img_recolor(coolant_icon, lv_color_hex(0x84CAFF), 0);
lv_obj_set_style_img_recolor_opa(coolant_icon, LV_OPA_COVER, 0);
lv_obj_align(coolant_icon, LV_ALIGN_TOP_LEFT, 8, 8);
#if LV_USE_METER
vehicle_coolant_meter = lv_meter_create(vehicle_card);
@@ -1284,13 +1290,17 @@ static void create_overland_overview_screen()
lv_obj_set_style_text_align(vehicle_coolant_value_label, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_align(vehicle_coolant_value_label, LV_ALIGN_TOP_MID, 0, 126);
lv_obj_t *fuel_icon = create_fuel_icon(vehicle_card);
lv_obj_align(fuel_icon, LV_ALIGN_BOTTOM_LEFT, 4, -8);
lv_obj_t *fuel_icon = lv_img_create(vehicle_card);
lv_img_set_src(fuel_icon, &gas_station);
lv_img_set_zoom(fuel_icon, 55); // 150px source -> ~32px display
lv_obj_set_style_img_recolor(fuel_icon, lv_color_hex(0xDDE3EA), 0);
lv_obj_set_style_img_recolor_opa(fuel_icon, LV_OPA_COVER, 0);
lv_obj_align(fuel_icon, LV_ALIGN_BOTTOM_LEFT, 8, -10);
vehicle_fuel_bar = lv_bar_create(vehicle_card);
lv_obj_add_event_cb(vehicle_fuel_bar, fuel_bar_draw_value_cb, LV_EVENT_DRAW_PART_END, NULL);
lv_obj_set_size(vehicle_fuel_bar, 206, 22);
lv_obj_align(vehicle_fuel_bar, LV_ALIGN_BOTTOM_LEFT, 62, -20);
lv_obj_align(vehicle_fuel_bar, LV_ALIGN_BOTTOM_LEFT, 64, -20);
lv_bar_set_range(vehicle_fuel_bar, 0, 100);
lv_bar_set_value(vehicle_fuel_bar, 72, LV_ANIM_OFF);
lv_obj_set_style_radius(vehicle_fuel_bar, 3, 0);
@@ -1308,7 +1318,7 @@ static void create_overland_overview_screen()
lv_obj_set_style_bg_color(tick, lv_color_hex(0x7D8996), 0);
lv_obj_set_style_border_width(tick, 0, 0);
lv_obj_set_style_radius(tick, 0, 0);
lv_obj_align(tick, LV_ALIGN_BOTTOM_LEFT, 62 + (i * 48), -17);
lv_obj_align(tick, LV_ALIGN_BOTTOM_LEFT, 64 + (i * 48), -17);
}
vehicle_fuel_value_label = lv_label_create(vehicle_card);