fix(ui): fill the charging battery to the live percentage

The charging glyph kept a fixed yellow bar. Clear that bar from the icon and paint the cavity from the current percent, in the same yellow as the bolt.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-26 14:19:36 +08:00
parent 6f19486b16
commit 03062543e4
4 changed files with 47 additions and 17 deletions

View File

@ -481,7 +481,17 @@ void Draw_Status_Battery_Icon(uint8_t battery_percent)
LCD_FillByColor(clear_x, 0, 240, UI0902_STATUS_SEP_Y, UI0902_BG_COLOR); LCD_FillByColor(clear_x, 0, 240, UI0902_STATUS_SEP_Y, UI0902_BG_COLOR);
if (charging) { if (charging) {
/* Type-C 插入:0918 闪电电池图,无电量填充,右侧仍显示百分比 */ /* 内腔按实际电量填黄,再盖外壳和闪电(图标里不再烘焙固定黄条) */
fill_w = (uint16_t)(((uint32_t)UI0902_BATTERY_CHG_FILL_MAX * battery_percent) / 100u);
if (fill_w > UI0902_BATTERY_CHG_FILL_MAX)
fill_w = UI0902_BATTERY_CHG_FILL_MAX;
if (fill_w > 0) {
fill_x1 = (uint16_t)(bat_x + UI0902_BATTERY_CHG_FILL_DX);
fill_y1 = (uint16_t)(icon_y + UI0902_BATTERY_CHG_FILL_DY);
fill_x2 = (uint16_t)(fill_x1 + fill_w);
fill_y2 = (uint16_t)(fill_y1 + UI0902_BATTERY_CHG_FILL_H);
LCD_FillByColor(fill_x1, fill_y1, fill_x2, fill_y2, UI0902_BATTERY_CHG_FILL);
}
LCD_WR_PIC_Trans(bat_x, icon_y, UI0902_BATTERY_CHG_W, UI0902_BATTERY_CHG_H, LCD_WR_PIC_Trans(bat_x, icon_y, UI0902_BATTERY_CHG_W, UI0902_BATTERY_CHG_H,
gImage_UI0902_BatteryCharging_40x13, BLACK); gImage_UI0902_BatteryCharging_40x13, BLACK);
} else { } else {

View File

@ -148,9 +148,14 @@ void CallUI_UsbConfirm(void);
#define UI0902_BT_HIT_Y1 (uint16_t)(UI_STATUS_BAR_H + 2) #define UI0902_BT_HIT_Y1 (uint16_t)(UI_STATUS_BAR_H + 2)
#define UI0902_BATTERY_W 29 #define UI0902_BATTERY_W 29
#define UI0902_BATTERY_H 12 #define UI0902_BATTERY_H 12
/* 0924 充电态:闪电电池图 40x13 */ /* 0924 充电态:闪电电池图 40x13。外壳左壁在图内 x=11,内腔 x=14 起、宽 21 */
#define UI0902_BATTERY_CHG_W 40 #define UI0902_BATTERY_CHG_W 40
#define UI0902_BATTERY_CHG_H 13 #define UI0902_BATTERY_CHG_H 13
#define UI0902_BATTERY_CHG_FILL_DX 14
#define UI0902_BATTERY_CHG_FILL_DY 3
#define UI0902_BATTERY_CHG_FILL_MAX 21
#define UI0902_BATTERY_CHG_FILL_H 6
#define UI0902_BATTERY_CHG_FILL 0xDF04 /* 与闪电同色 RGB(217,224,33) */
/* 与音量/蓝牙大致居中后再下移 2px:12px 高 → 顶 y9 */ /* 与音量/蓝牙大致居中后再下移 2px:12px 高 → 顶 y9 */
#define UI0902_BATTERY_Y 9 #define UI0902_BATTERY_Y 9
#define UI0902_BATTERY_RIGHT_MARGIN 6 #define UI0902_BATTERY_RIGHT_MARGIN 6

View File

@ -244,38 +244,38 @@ const unsigned char gImage_UI0902_BatteryCharging_40x13[1040] = { /* 40x13 RGB56
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x92,0xC6,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x92,0xC6,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x29,0x40,0xCE,0x83,0xDF,0x04,0x7B,0xE2,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x29,0x40,0xCE,0x83,0xDF,0x04,0x7B,0xE2,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x42,0x21,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xC6,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xC6,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xCE,0x83,0xDF,0x04,0xDF,0x04,0x52,0xA1,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCE,0x83,0xDF,0x04,0xDF,0x04,0x52,0xA1,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x6B,0x82,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xD6,0x9A,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xD6,0x9A,0x00,0x00,
0x00,0x00,0xB5,0xA3,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xCE,0x83,0xA5,0x43,0x52,0xA1, 0x00,0x00,0xB5,0xA3,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xCE,0x83,0xA5,0x43,0x52,0xA1,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x6B,0x82,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xFF,0xFF,0x42,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xFF,0xFF,0x42,0x08,
0x31,0xC1,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0x31,0xC1, 0x31,0xC1,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0x31,0xC1,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x6B,0x82,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xFF,0xFF,0x42,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xFF,0xFF,0x42,0x08,
0x00,0x00,0x00,0x00,0x29,0x40,0xDF,0x04,0xDF,0x04,0xDF,0x04,0x52,0xA1,0x00,0x00, 0x00,0x00,0x00,0x00,0x29,0x40,0xDF,0x04,0xDF,0x04,0xDF,0x04,0x52,0xA1,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x6B,0x82,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xD6,0x9A,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xFF,0xFF,0xD6,0x9A,0x00,0x00,
0x00,0x00,0x00,0x00,0x31,0xC1,0xDF,0x04,0xDF,0x04,0x8C,0x62,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x31,0xC1,0xDF,0x04,0xDF,0x04,0x8C,0x62,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x5B,0x01,0xDF,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xD6,0x9A,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xD6,0x9A,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x6B,0x82,0xDF,0x04,0x94,0xC2,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x6B,0x82,0xDF,0x04,0x94,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x31,0xC1, 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x31,0xC1,0x31,0xC1,0x31,0xC1,0x31,0xC1,0x31,0xC1,0x29,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xC6,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0xC6,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xB5,0xA3,0xB5,0xA3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xB5,0xA3,0xB5,0xA3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

View File

@ -144,6 +144,17 @@ def make_battery_outline():
def make_battery_charging():
"""充电图只保留外壳和闪电。内腔黄条由界面按电量现画,不烘焙进图标。"""
im = Image.open(SRC / "02_顶部图标" / "电池图标-充电状态-0924.png").convert("RGBA")
px = im.load()
# 外壳左壁 x=11/12,右壁 x=36/37;内腔黄条在 x=14 起。闪电在 x<=7。
for y in range(2, 10):
for x in range(13, 36):
px[x, y] = (0, 0, 0, 0)
return im
def make_battery_fill(): def make_battery_fill():
"""Solid white 22x9 level strip (do NOT use 电池电量 mockup — it embeds \"80%\" text).""" """Solid white 22x9 level strip (do NOT use 电池电量 mockup — it embeds \"80%\" text)."""
return Image.new("RGBA", (22, 9), (255, 255, 255, 255)) return Image.new("RGBA", (22, 9), (255, 255, 255, 255))
@ -295,7 +306,11 @@ def main():
total_int += len(data) total_int += len(data)
for name, rel in INTERNAL: for name, rel in INTERNAL:
data, w, h = rgba_to_rgb565(Image.open(SRC / rel)) if name == "gImage_UI0902_BatteryCharging_40x13":
im = make_battery_charging()
else:
im = Image.open(SRC / rel)
data, w, h = rgba_to_rgb565(im)
emit_c_array(c_lines, name, data, w, h) emit_c_array(c_lines, name, data, w, h)
h_lines.append(f"extern const unsigned char {name}[{len(data)}];") h_lines.append(f"extern const unsigned char {name}[{len(data)}];")
total_int += len(data) total_int += len(data)