调整额度条为剩余百分比显示

This commit is contained in:
Codex 2026-06-24 09:47:01 +08:00
parent c0295302e4
commit 26365ec0e0

View File

@ -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);