diff --git a/main/ui_screen.c b/main/ui_screen.c index 96dec80..7d68dfc 100644 --- a/main/ui_screen.c +++ b/main/ui_screen.c @@ -9,7 +9,7 @@ #define CPU_HISTORY_POINTS 64 #define CPU_CHART_W 184 -#define CPU_CHART_H 58 +#define CPU_CHART_H 78 #define HALO_LABEL_COUNT 8 #define DISK_ROW_COUNT 4 #define CODEX_DAILY_BAR_W 8 @@ -41,21 +41,18 @@ static lv_obj_t *s_memory_bar; static lv_obj_t *s_disk_name_labels[DISK_ROW_COUNT]; static lv_obj_t *s_disk_rate_labels[DISK_ROW_COUNT]; static lv_obj_t *s_disk_bars[DISK_ROW_COUNT]; -static lv_obj_t *s_net_line_label; +static lv_obj_t *s_net_rx_label; +static lv_obj_t *s_net_tx_label; static lv_obj_t *s_codex_5h_label; static lv_obj_t *s_codex_week_label; static lv_obj_t *s_codex_5h_value_label; static lv_obj_t *s_codex_week_value_label; static lv_obj_t *s_codex_5h_reset_label; static lv_obj_t *s_codex_week_reset_label; -static lv_obj_t *s_codex_token_label; -static lv_obj_t *s_codex_token_bar; static lv_obj_t *s_codex_5h_bar; static lv_obj_t *s_codex_week_bar; static lv_obj_t *s_codex_daily_bars[UI_CODEX_DAILY_BAR_COUNT]; static lv_obj_t *s_zhipu_status_label; -static lv_obj_t *s_zhipu_token_label; -static lv_obj_t *s_zhipu_token_bar; static lv_obj_t *s_zhipu_5h_label; static lv_obj_t *s_zhipu_week_label; static lv_obj_t *s_zhipu_5h_value_label; @@ -83,6 +80,22 @@ static const halo_offset_t s_halo_offsets[HALO_LABEL_COUNT] = { { 1, 1 }, }; +static const lv_point_precise_t s_net_down_icon_points[] = { + { 6, 0 }, + { 6, 12 }, + { 2, 8 }, + { 6, 12 }, + { 10, 8 }, +}; + +static const lv_point_precise_t s_net_up_icon_points[] = { + { 6, 12 }, + { 6, 0 }, + { 2, 4 }, + { 6, 0 }, + { 10, 4 }, +}; + static lv_color_t ink(void) { return lv_color_black(); @@ -186,6 +199,18 @@ static lv_obj_t *make_bar(lv_obj_t *parent, int w, int h) return bar; } +static lv_obj_t *make_net_arrow(lv_obj_t *parent, const lv_point_precise_t *points, uint32_t count) +{ + lv_obj_t *line = lv_line_create(parent); + lv_obj_set_size(line, 12, 14); + lv_line_set_points(line, points, count); + lv_obj_set_style_line_color(line, ink(), 0); + lv_obj_set_style_line_width(line, 2, 0); + lv_obj_set_style_pad_all(line, 0, 0); + lv_obj_clear_flag(line, LV_OBJ_FLAG_SCROLLABLE); + return line; +} + static void format_capacity(int mb, char *out, size_t out_size) { if (mb <= 0) { @@ -251,19 +276,6 @@ static void format_percent_compact(int percent, char *out, size_t out_size) } } -static void format_tokens_m10(int tokens_m10, char *out, size_t out_size) -{ - if (tokens_m10 < 0) { - snprintf(out, out_size, "--"); - } else if (tokens_m10 >= 10000) { - snprintf(out, out_size, "%d.%dB", tokens_m10 / 10000, (tokens_m10 % 10000) / 1000); - } else if (tokens_m10 >= 1000) { - snprintf(out, out_size, "%dM", (tokens_m10 + 5) / 10); - } else { - snprintf(out, out_size, "%d.%dM", tokens_m10 / 10, tokens_m10 % 10); - } -} - static const char *zhipu_status_text(int status) { switch (status) { @@ -419,7 +431,6 @@ static void update_disk_rows(const char *disk_text) static void update_codex_panel(const ui_metrics_t *metrics) { - char text[40]; char value[12]; char reset_5h[12]; char reset_week[12]; @@ -437,15 +448,6 @@ static void update_codex_panel(const ui_metrics_t *metrics) lv_label_set_text(s_codex_5h_reset_label, reset_5h); lv_label_set_text(s_codex_week_reset_label, reset_week); - format_tokens_m10(metrics->codex_today_tokens_m10, value, sizeof(value)); - snprintf(text, sizeof(text), "%s", value); - lv_label_set_text(s_codex_token_label, text); - int today_percent = 0; - if (metrics->codex_daily_count > 0) { - today_percent = metrics->codex_daily_percent[metrics->codex_daily_count - 1]; - } - set_bar_percent(s_codex_token_bar, today_percent); - for (int i = 0; i < UI_CODEX_DAILY_BAR_COUNT; i++) { lv_obj_t *bar = s_codex_daily_bars[i]; if (bar == NULL) { @@ -476,10 +478,6 @@ static void update_zhipu_panel(const ui_metrics_t *metrics) snprintf(text, sizeof(text), "STAT %s", zhipu_status_text(metrics->zhipu_status)); lv_label_set_text(s_zhipu_status_label, text); - format_percent_compact(metrics->zhipu_5h_percent, value, sizeof(value)); - lv_label_set_text(s_zhipu_token_label, value); - set_bar_percent(s_zhipu_token_bar, metrics->zhipu_5h_percent); - format_percent_compact(metrics->zhipu_5h_percent, value, sizeof(value)); lv_label_set_text(s_zhipu_5h_value_label, value); set_bar_percent(s_zhipu_5h_bar, metrics->zhipu_5h_percent); @@ -497,21 +495,17 @@ static void update_net_line(const ui_metrics_t *metrics) { char rx[12]; char tx[12]; - char text[44]; format_rate_short(metrics->rx_kbps, rx, sizeof(rx)); format_rate_short(metrics->tx_kbps, tx, sizeof(tx)); - snprintf(text, sizeof(text), "D %s U %s", rx, tx); - size_t text_len = strlen(text); - const lv_font_t *font = &lv_font_montserrat_20; - if (text_len >= 18) { - font = &lv_font_montserrat_14; - } + const lv_font_t *rx_font = strlen(rx) >= 5 ? &lv_font_montserrat_14 : &lv_font_montserrat_20; + const lv_font_t *tx_font = strlen(tx) >= 5 ? &lv_font_montserrat_14 : &lv_font_montserrat_20; - lv_obj_set_style_text_font(s_net_line_label, font, 0); - lv_label_set_long_mode(s_net_line_label, LV_LABEL_LONG_CLIP); - lv_label_set_text(s_net_line_label, text); + lv_obj_set_style_text_font(s_net_rx_label, rx_font, 0); + lv_obj_set_style_text_font(s_net_tx_label, tx_font, 0); + lv_label_set_text(s_net_rx_label, rx); + lv_label_set_text(s_net_tx_label, tx); } void ui_screen_create(void) @@ -530,7 +524,7 @@ void ui_screen_create(void) s_cpu_line = lv_line_create(screen); lv_obj_set_size(s_cpu_line, CPU_CHART_W + 2, CPU_CHART_H + 2); - lv_obj_align(s_cpu_line, LV_ALIGN_TOP_LEFT, 8, 112); + lv_obj_align(s_cpu_line, LV_ALIGN_TOP_LEFT, 8, 88); lv_obj_set_style_line_color(s_cpu_line, ink(), 0); lv_obj_set_style_line_width(s_cpu_line, 3, 0); for (int i = 0; i < CPU_HISTORY_POINTS; i++) { @@ -550,21 +544,18 @@ void ui_screen_create(void) lv_obj_set_width(s_env_label, 110); lv_obj_align(s_env_label, LV_ALIGN_TOP_LEFT, 82, 8); - lv_obj_t *cpu_title = make_label(screen, "CPU", &lv_font_montserrat_14); - lv_obj_align(cpu_title, LV_ALIGN_TOP_LEFT, 8, 36); - make_label_halo(screen, s_cpu_value_halo, "--%", &lv_font_montserrat_48, 126, - LV_ALIGN_TOP_LEFT, 8, 52, 3, LV_TEXT_ALIGN_LEFT); + LV_ALIGN_TOP_LEFT, 8, 30, 3, LV_TEXT_ALIGN_LEFT); s_cpu_value_label = make_label(screen, "--%", &lv_font_montserrat_48); lv_obj_set_width(s_cpu_value_label, 126); lv_obj_set_style_text_align(s_cpu_value_label, LV_TEXT_ALIGN_LEFT, 0); - lv_obj_align(s_cpu_value_label, LV_ALIGN_TOP_LEFT, 8, 52); + lv_obj_align(s_cpu_value_label, LV_ALIGN_TOP_LEFT, 8, 30); make_label_halo(screen, s_cpu_freq_halo, "--GHz", &lv_font_montserrat_28, 128, - LV_ALIGN_TOP_LEFT, 8, 96, 2, LV_TEXT_ALIGN_LEFT); + LV_ALIGN_TOP_LEFT, 8, 72, 2, LV_TEXT_ALIGN_LEFT); s_cpu_freq_label = make_label(screen, "--GHz", &lv_font_montserrat_28); lv_obj_set_width(s_cpu_freq_label, 128); - lv_obj_align(s_cpu_freq_label, LV_ALIGN_TOP_LEFT, 8, 96); + lv_obj_align(s_cpu_freq_label, LV_ALIGN_TOP_LEFT, 8, 72); lv_obj_t *memory_title = make_label(screen, "MEM", &lv_font_montserrat_14); lv_obj_align(memory_title, LV_ALIGN_TOP_LEFT, 208, 8); @@ -577,8 +568,8 @@ void ui_screen_create(void) s_memory_detail_label = make_label(screen, "--/--", &lv_font_montserrat_14); lv_obj_set_width(s_memory_detail_label, 178); lv_obj_align(s_memory_detail_label, LV_ALIGN_TOP_LEFT, 208, 24); - s_memory_bar = make_bar(screen, 126, 10); - lv_obj_align(s_memory_bar, LV_ALIGN_TOP_LEFT, 262, 46); + s_memory_bar = make_bar(screen, 180, 10); + lv_obj_align(s_memory_bar, LV_ALIGN_TOP_LEFT, 208, 46); lv_obj_t *disk_title = make_label(screen, "DSK", &lv_font_montserrat_14); lv_obj_align(disk_title, LV_ALIGN_TOP_LEFT, 208, 64); @@ -586,61 +577,62 @@ void ui_screen_create(void) for (int i = 0; i < DISK_ROW_COUNT; i++) { int y = 80 + i * 16; s_disk_name_labels[i] = make_label(screen, "--", &lv_font_montserrat_14); - lv_obj_set_width(s_disk_name_labels[i], 16); + lv_obj_set_width(s_disk_name_labels[i], 14); lv_obj_align(s_disk_name_labels[i], LV_ALIGN_TOP_LEFT, 208, y); - s_disk_bars[i] = make_bar(screen, 56, 8); - lv_obj_align(s_disk_bars[i], LV_ALIGN_TOP_LEFT, 226, y + 4); + s_disk_bars[i] = make_bar(screen, 84, 8); + lv_obj_align(s_disk_bars[i], LV_ALIGN_TOP_LEFT, 224, y + 4); s_disk_rate_labels[i] = make_label(screen, "--/--", &lv_font_montserrat_14); lv_label_set_long_mode(s_disk_rate_labels[i], LV_LABEL_LONG_CLIP); - lv_obj_set_width(s_disk_rate_labels[i], 104); - lv_obj_align(s_disk_rate_labels[i], LV_ALIGN_TOP_LEFT, 288, y); + lv_obj_set_width(s_disk_rate_labels[i], 80); + lv_obj_align(s_disk_rate_labels[i], LV_ALIGN_TOP_LEFT, 312, y); } - s_net_line_label = make_label(screen, "D -- U --", &lv_font_montserrat_20); - lv_label_set_long_mode(s_net_line_label, LV_LABEL_LONG_CLIP); - lv_obj_set_width(s_net_line_label, 184); - lv_obj_set_height(s_net_line_label, 24); - lv_obj_align(s_net_line_label, LV_ALIGN_TOP_LEFT, 208, 150); + lv_obj_t *net_down_icon = make_net_arrow(screen, s_net_down_icon_points, + sizeof(s_net_down_icon_points) / sizeof(s_net_down_icon_points[0])); + lv_obj_align(net_down_icon, LV_ALIGN_TOP_LEFT, 208, 152); + s_net_rx_label = make_label(screen, "--", &lv_font_montserrat_20); + lv_label_set_long_mode(s_net_rx_label, LV_LABEL_LONG_CLIP); + lv_obj_set_width(s_net_rx_label, 62); + lv_obj_set_height(s_net_rx_label, 24); + lv_obj_align(s_net_rx_label, LV_ALIGN_TOP_LEFT, 224, 146); + + lv_obj_t *net_up_icon = make_net_arrow(screen, s_net_up_icon_points, + sizeof(s_net_up_icon_points) / sizeof(s_net_up_icon_points[0])); + lv_obj_align(net_up_icon, LV_ALIGN_TOP_LEFT, 300, 152); + s_net_tx_label = make_label(screen, "--", &lv_font_montserrat_20); + lv_label_set_long_mode(s_net_tx_label, LV_LABEL_LONG_CLIP); + lv_obj_set_width(s_net_tx_label, 76); + lv_obj_set_height(s_net_tx_label, 24); + lv_obj_align(s_net_tx_label, LV_ALIGN_TOP_LEFT, 316, 146); lv_obj_t *codex_title = make_label(screen, "CODEX", &lv_font_montserrat_14); lv_obj_align(codex_title, LV_ALIGN_TOP_LEFT, 8, 184); s_codex_5h_label = make_label(screen, "5H", &lv_font_montserrat_14); lv_obj_set_width(s_codex_5h_label, 28); - lv_obj_align(s_codex_5h_label, LV_ALIGN_TOP_LEFT, 8, 216); + lv_obj_align(s_codex_5h_label, LV_ALIGN_TOP_LEFT, 8, 198); s_codex_5h_bar = make_bar(screen, 78, 8); - lv_obj_align(s_codex_5h_bar, LV_ALIGN_TOP_LEFT, 36, 220); + lv_obj_align(s_codex_5h_bar, LV_ALIGN_TOP_LEFT, 36, 202); s_codex_5h_value_label = make_label(screen, "--", &lv_font_montserrat_14); lv_obj_set_width(s_codex_5h_value_label, 38); - lv_obj_align(s_codex_5h_value_label, LV_ALIGN_TOP_LEFT, 118, 216); + lv_obj_align(s_codex_5h_value_label, LV_ALIGN_TOP_LEFT, 118, 198); s_codex_5h_reset_label = make_label(screen, "--", &lv_font_montserrat_14); lv_label_set_long_mode(s_codex_5h_reset_label, LV_LABEL_LONG_CLIP); lv_obj_set_width(s_codex_5h_reset_label, 38); - lv_obj_align(s_codex_5h_reset_label, LV_ALIGN_TOP_LEFT, 158, 216); + lv_obj_align(s_codex_5h_reset_label, LV_ALIGN_TOP_LEFT, 158, 198); s_codex_week_label = make_label(screen, "WK", &lv_font_montserrat_14); lv_obj_set_width(s_codex_week_label, 28); - lv_obj_align(s_codex_week_label, LV_ALIGN_TOP_LEFT, 8, 234); + lv_obj_align(s_codex_week_label, LV_ALIGN_TOP_LEFT, 8, 216); s_codex_week_bar = make_bar(screen, 78, 8); - lv_obj_align(s_codex_week_bar, LV_ALIGN_TOP_LEFT, 36, 238); + lv_obj_align(s_codex_week_bar, LV_ALIGN_TOP_LEFT, 36, 220); s_codex_week_value_label = make_label(screen, "--", &lv_font_montserrat_14); lv_obj_set_width(s_codex_week_value_label, 38); - lv_obj_align(s_codex_week_value_label, LV_ALIGN_TOP_LEFT, 118, 234); + lv_obj_align(s_codex_week_value_label, LV_ALIGN_TOP_LEFT, 118, 216); s_codex_week_reset_label = make_label(screen, "--", &lv_font_montserrat_14); lv_label_set_long_mode(s_codex_week_reset_label, LV_LABEL_LONG_CLIP); lv_obj_set_width(s_codex_week_reset_label, 38); - lv_obj_align(s_codex_week_reset_label, LV_ALIGN_TOP_LEFT, 158, 234); - - lv_obj_t *codex_token_title = make_label(screen, "TOK", &lv_font_montserrat_14); - lv_obj_set_width(codex_token_title, 28); - lv_obj_align(codex_token_title, LV_ALIGN_TOP_LEFT, 8, 198); - s_codex_token_bar = make_bar(screen, 90, 8); - lv_obj_align(s_codex_token_bar, LV_ALIGN_TOP_LEFT, 36, 202); - s_codex_token_label = make_label(screen, "--", &lv_font_montserrat_14); - lv_obj_set_width(s_codex_token_label, 64); - lv_label_set_long_mode(s_codex_token_label, LV_LABEL_LONG_CLIP); - lv_obj_set_style_text_align(s_codex_token_label, LV_TEXT_ALIGN_RIGHT, 0); - lv_obj_align(s_codex_token_label, LV_ALIGN_TOP_LEFT, 132, 198); + lv_obj_align(s_codex_week_reset_label, LV_ALIGN_TOP_LEFT, 158, 216); make_rule(screen, 8, CODEX_DAILY_BAR_BASE_Y, 188, 1); for (int i = 0; i < UI_CODEX_DAILY_BAR_COUNT; i++) { @@ -665,42 +657,31 @@ void ui_screen_create(void) lv_obj_set_style_text_align(s_zhipu_status_label, LV_TEXT_ALIGN_RIGHT, 0); lv_obj_align(s_zhipu_status_label, LV_ALIGN_TOP_RIGHT, -8, 184); - lv_obj_t *zhipu_token_title = make_label(screen, "TOK", &lv_font_montserrat_14); - lv_obj_set_width(zhipu_token_title, 28); - lv_obj_align(zhipu_token_title, LV_ALIGN_TOP_LEFT, 208, 198); - s_zhipu_token_bar = make_bar(screen, 90, 8); - lv_obj_align(s_zhipu_token_bar, LV_ALIGN_TOP_LEFT, 236, 202); - s_zhipu_token_label = make_label(screen, "--", &lv_font_montserrat_14); - lv_obj_set_width(s_zhipu_token_label, 64); - lv_label_set_long_mode(s_zhipu_token_label, LV_LABEL_LONG_CLIP); - lv_obj_set_style_text_align(s_zhipu_token_label, LV_TEXT_ALIGN_RIGHT, 0); - lv_obj_align(s_zhipu_token_label, LV_ALIGN_TOP_LEFT, 332, 198); - s_zhipu_5h_label = make_label(screen, "5H", &lv_font_montserrat_14); lv_obj_set_width(s_zhipu_5h_label, 28); - lv_obj_align(s_zhipu_5h_label, LV_ALIGN_TOP_LEFT, 208, 216); + lv_obj_align(s_zhipu_5h_label, LV_ALIGN_TOP_LEFT, 208, 198); s_zhipu_5h_bar = make_bar(screen, 78, 8); - lv_obj_align(s_zhipu_5h_bar, LV_ALIGN_TOP_LEFT, 236, 220); + lv_obj_align(s_zhipu_5h_bar, LV_ALIGN_TOP_LEFT, 236, 202); s_zhipu_5h_value_label = make_label(screen, "--", &lv_font_montserrat_14); lv_obj_set_width(s_zhipu_5h_value_label, 38); - lv_obj_align(s_zhipu_5h_value_label, LV_ALIGN_TOP_LEFT, 318, 216); + lv_obj_align(s_zhipu_5h_value_label, LV_ALIGN_TOP_LEFT, 318, 198); s_zhipu_5h_reset_label = make_label(screen, "--", &lv_font_montserrat_14); lv_label_set_long_mode(s_zhipu_5h_reset_label, LV_LABEL_LONG_CLIP); lv_obj_set_width(s_zhipu_5h_reset_label, 38); - lv_obj_align(s_zhipu_5h_reset_label, LV_ALIGN_TOP_LEFT, 358, 216); + lv_obj_align(s_zhipu_5h_reset_label, LV_ALIGN_TOP_LEFT, 358, 198); s_zhipu_week_label = make_label(screen, "WK", &lv_font_montserrat_14); lv_obj_set_width(s_zhipu_week_label, 28); - lv_obj_align(s_zhipu_week_label, LV_ALIGN_TOP_LEFT, 208, 234); + lv_obj_align(s_zhipu_week_label, LV_ALIGN_TOP_LEFT, 208, 216); s_zhipu_week_bar = make_bar(screen, 78, 8); - lv_obj_align(s_zhipu_week_bar, LV_ALIGN_TOP_LEFT, 236, 238); + lv_obj_align(s_zhipu_week_bar, LV_ALIGN_TOP_LEFT, 236, 220); s_zhipu_week_value_label = make_label(screen, "--", &lv_font_montserrat_14); lv_obj_set_width(s_zhipu_week_value_label, 38); - lv_obj_align(s_zhipu_week_value_label, LV_ALIGN_TOP_LEFT, 318, 234); + lv_obj_align(s_zhipu_week_value_label, LV_ALIGN_TOP_LEFT, 318, 216); s_zhipu_week_reset_label = make_label(screen, "--", &lv_font_montserrat_14); lv_label_set_long_mode(s_zhipu_week_reset_label, LV_LABEL_LONG_CLIP); lv_obj_set_width(s_zhipu_week_reset_label, 38); - lv_obj_align(s_zhipu_week_reset_label, LV_ALIGN_TOP_LEFT, 358, 234); + lv_obj_align(s_zhipu_week_reset_label, LV_ALIGN_TOP_LEFT, 358, 216); } void ui_screen_tick(void)