diff --git a/UI/UI_global.c b/UI/UI_global.c index 62dbb52..7515840 100644 --- a/UI/UI_global.c +++ b/UI/UI_global.c @@ -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); 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, gImage_UI0902_BatteryCharging_40x13, BLACK); } else { diff --git a/UI/UI_global.h b/UI/UI_global.h index 0e07352..c356e14 100644 --- a/UI/UI_global.h +++ b/UI/UI_global.h @@ -148,9 +148,14 @@ void CallUI_UsbConfirm(void); #define UI0902_BT_HIT_Y1 (uint16_t)(UI_STATUS_BAR_H + 2) #define UI0902_BATTERY_W 29 #define UI0902_BATTERY_H 12 -/* 0924 充电态:闪电电池图 40x13 */ +/* 0924 充电态:闪电电池图 40x13。外壳左壁在图内 x=11,内腔 x=14 起、宽 21 */ #define UI0902_BATTERY_CHG_W 40 #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 */ #define UI0902_BATTERY_Y 9 #define UI0902_BATTERY_RIGHT_MARGIN 6 diff --git a/device/LCD_ILI9341/Drv_ILI9341_Lcd_Image_UI0902.c b/device/LCD_ILI9341/Drv_ILI9341_Lcd_Image_UI0902.c index 92b72f5..2d6a524 100644 --- a/device/LCD_ILI9341/Drv_ILI9341_Lcd_Image_UI0902.c +++ b/device/LCD_ILI9341/Drv_ILI9341_Lcd_Image_UI0902.c @@ -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,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,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x42,0x21,0xDF,0x04, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,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, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,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, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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, 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, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,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, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,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, -0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xDF,0x04,0xA5,0x43,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,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, -0x31,0xC1,0x31,0xC1,0x31,0xC1,0x31,0xC1,0x31,0xC1,0x29,0x40,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 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,0xB5,0xA3,0xB5,0xA3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, diff --git a/tools/gen_ui0902_assets.py b/tools/gen_ui0902_assets.py index aac1cc6..0b7eec6 100644 --- a/tools/gen_ui0902_assets.py +++ b/tools/gen_ui0902_assets.py @@ -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(): """Solid white 22x9 level strip (do NOT use 电池电量 mockup — it embeds \"80%\" text).""" return Image.new("RGBA", (22, 9), (255, 255, 255, 255)) @@ -295,7 +306,11 @@ def main(): total_int += len(data) 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) h_lines.append(f"extern const unsigned char {name}[{len(data)}];") total_int += len(data)