From 26365ec0e02145878cb4e19ae9a52a68218ba9d9 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 24 Jun 2026 09:47:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A2=9D=E5=BA=A6=E6=9D=A1?= =?UTF-8?q?=E4=B8=BA=E5=89=A9=E4=BD=99=E7=99=BE=E5=88=86=E6=AF=94=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/ui_screen.c | 98 +++++++++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/main/ui_screen.c b/main/ui_screen.c index 0e2f704..fbeed69 100644 --- a/main/ui_screen.c +++ b/main/ui_screen.c @@ -112,6 +112,11 @@ static lv_color_t paper(void) return lv_color_white(); } +static lv_color_t soft_fill(void) +{ + return lv_color_hex(0xe6e6e6); +} + static int clamp_percent(int value) { if (value < 0) { @@ -123,6 +128,8 @@ static int clamp_percent(int value) return value; } +static void format_percent_compact(int percent, char *out, size_t out_size); + static lv_obj_t *make_colored_label(lv_obj_t *parent, const char *text, const lv_font_t *font, lv_color_t color) { lv_obj_t *label = lv_label_create(parent); @@ -176,6 +183,24 @@ static void set_bar_percent(lv_obj_t *bar, int percent) lv_bar_set_value(bar, percent >= 0 ? clamp_percent(percent) : 0, LV_ANIM_OFF); } +static int remaining_percent_from_used(int used_percent) +{ + if (used_percent < 0) { + return -1; + } + return 100 - clamp_percent(used_percent); +} + +static void set_remaining_bar(lv_obj_t *bar, lv_obj_t *label, int used_percent) +{ + int remaining = remaining_percent_from_used(used_percent); + char value[12]; + + format_percent_compact(remaining, value, sizeof(value)); + lv_label_set_text(label, value); + set_bar_percent(bar, remaining); +} + static lv_obj_t *make_rule(lv_obj_t *parent, int x, int y, int w, int h) { lv_obj_t *rule = lv_obj_create(parent); @@ -205,6 +230,17 @@ static lv_obj_t *make_bar(lv_obj_t *parent, int w, int h) return bar; } +static lv_obj_t *make_quota_bar(lv_obj_t *parent, int w, int h) +{ + lv_obj_t *bar = make_bar(parent, w, h); + lv_obj_set_style_bg_color(bar, soft_fill(), 0); + lv_obj_set_style_border_width(bar, 0, 0); + lv_obj_set_style_radius(bar, 1, 0); + lv_obj_set_style_pad_all(bar, 0, 0); + lv_obj_set_style_radius(bar, 1, LV_PART_INDICATOR); + 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); @@ -454,13 +490,8 @@ static void update_codex_panel(const ui_metrics_t *metrics) char reset_5h[12]; char reset_week[12]; - format_percent_compact(metrics->codex_5h_percent, value, sizeof(value)); - lv_label_set_text(s_codex_5h_value_label, value); - set_bar_percent(s_codex_5h_bar, metrics->codex_5h_percent); - - format_percent_compact(metrics->codex_week_percent, value, sizeof(value)); - lv_label_set_text(s_codex_week_value_label, value); - set_bar_percent(s_codex_week_bar, metrics->codex_week_percent); + set_remaining_bar(s_codex_5h_bar, s_codex_5h_value_label, metrics->codex_5h_percent); + set_remaining_bar(s_codex_week_bar, s_codex_week_value_label, metrics->codex_week_percent); format_reset_mins(metrics->codex_5h_reset_mins, reset_5h, sizeof(reset_5h)); format_reset_mins(metrics->codex_week_reset_mins, reset_week, sizeof(reset_week)); @@ -493,7 +524,6 @@ static void update_codex_panel(const ui_metrics_t *metrics) static void update_zhipu_panel(const ui_metrics_t *metrics) { - char value[12]; char reset[12]; char text[24]; @@ -504,15 +534,11 @@ static void update_zhipu_panel(const ui_metrics_t *metrics) } lv_label_set_text(s_zhipu_today_label, text); - 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); + set_remaining_bar(s_zhipu_5h_bar, s_zhipu_5h_value_label, metrics->zhipu_5h_percent); format_reset_mins(metrics->zhipu_5h_reset_mins, reset, sizeof(reset)); lv_label_set_text(s_zhipu_5h_reset_label, reset); - format_percent_compact(metrics->zhipu_week_percent, value, sizeof(value)); - lv_label_set_text(s_zhipu_week_value_label, value); - set_bar_percent(s_zhipu_week_bar, metrics->zhipu_week_percent); + set_remaining_bar(s_zhipu_week_bar, s_zhipu_week_value_label, metrics->zhipu_week_percent); format_reset_mins(metrics->zhipu_week_reset_mins, reset, sizeof(reset)); lv_label_set_text(s_zhipu_week_reset_label, reset); @@ -706,26 +732,28 @@ void ui_screen_create(void) lv_obj_align(s_codex_today_label, LV_ALIGN_TOP_LEFT, 126, 184); s_codex_5h_label = make_label(screen, "5H", &lv_font_montserrat_14); - lv_obj_set_width(s_codex_5h_label, 28); + lv_obj_set_width(s_codex_5h_label, 24); lv_obj_align(s_codex_5h_label, LV_ALIGN_TOP_LEFT, 8, 204); - s_codex_5h_bar = make_bar(screen, 78, 8); - lv_obj_align(s_codex_5h_bar, LV_ALIGN_TOP_LEFT, 36, 208); + s_codex_5h_bar = make_quota_bar(screen, 84, 7); + lv_obj_align(s_codex_5h_bar, LV_ALIGN_TOP_LEFT, 34, 209); 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, 204); + lv_obj_set_width(s_codex_5h_value_label, 34); + lv_obj_set_style_text_align(s_codex_5h_value_label, LV_TEXT_ALIGN_RIGHT, 0); + lv_obj_align(s_codex_5h_value_label, LV_ALIGN_TOP_LEFT, 122, 204); 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, 204); s_codex_week_label = make_label(screen, "WK", &lv_font_montserrat_14); - lv_obj_set_width(s_codex_week_label, 28); + lv_obj_set_width(s_codex_week_label, 24); lv_obj_align(s_codex_week_label, LV_ALIGN_TOP_LEFT, 8, 224); - s_codex_week_bar = make_bar(screen, 78, 8); - lv_obj_align(s_codex_week_bar, LV_ALIGN_TOP_LEFT, 36, 228); + s_codex_week_bar = make_quota_bar(screen, 84, 7); + lv_obj_align(s_codex_week_bar, LV_ALIGN_TOP_LEFT, 34, 229); 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, 224); + lv_obj_set_width(s_codex_week_value_label, 34); + lv_obj_set_style_text_align(s_codex_week_value_label, LV_TEXT_ALIGN_RIGHT, 0); + lv_obj_align(s_codex_week_value_label, LV_ALIGN_TOP_LEFT, 122, 224); 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); @@ -756,26 +784,28 @@ void ui_screen_create(void) lv_obj_align(s_zhipu_today_label, LV_ALIGN_TOP_LEFT, 326, 184); s_zhipu_5h_label = make_label(screen, "5H", &lv_font_montserrat_14); - lv_obj_set_width(s_zhipu_5h_label, 28); + lv_obj_set_width(s_zhipu_5h_label, 24); lv_obj_align(s_zhipu_5h_label, LV_ALIGN_TOP_LEFT, 208, 204); - s_zhipu_5h_bar = make_bar(screen, 78, 8); - lv_obj_align(s_zhipu_5h_bar, LV_ALIGN_TOP_LEFT, 236, 208); + s_zhipu_5h_bar = make_quota_bar(screen, 84, 7); + lv_obj_align(s_zhipu_5h_bar, LV_ALIGN_TOP_LEFT, 234, 209); 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, 204); + lv_obj_set_width(s_zhipu_5h_value_label, 34); + lv_obj_set_style_text_align(s_zhipu_5h_value_label, LV_TEXT_ALIGN_RIGHT, 0); + lv_obj_align(s_zhipu_5h_value_label, LV_ALIGN_TOP_LEFT, 322, 204); 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, 204); s_zhipu_week_label = make_label(screen, "WK", &lv_font_montserrat_14); - lv_obj_set_width(s_zhipu_week_label, 28); + lv_obj_set_width(s_zhipu_week_label, 24); lv_obj_align(s_zhipu_week_label, LV_ALIGN_TOP_LEFT, 208, 224); - s_zhipu_week_bar = make_bar(screen, 78, 8); - lv_obj_align(s_zhipu_week_bar, LV_ALIGN_TOP_LEFT, 236, 228); + s_zhipu_week_bar = make_quota_bar(screen, 84, 7); + lv_obj_align(s_zhipu_week_bar, LV_ALIGN_TOP_LEFT, 234, 229); 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, 224); + lv_obj_set_width(s_zhipu_week_value_label, 34); + lv_obj_set_style_text_align(s_zhipu_week_value_label, LV_TEXT_ALIGN_RIGHT, 0); + lv_obj_align(s_zhipu_week_value_label, LV_ALIGN_TOP_LEFT, 322, 224); 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);