From 78139c5936845fbbaf189958ab5eb512d550d161 Mon Sep 17 00:00:00 2001 From: Fasjeit <15075638+Fasjeit@users.noreply.github.com> Date: Thu, 12 Jan 2023 11:35:42 +0300 Subject: [PATCH] drawing own battery (Bar %) charging display --- .../services/power/power_service/power.c | 67 +++++++++++++++++-- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/applications/services/power/power_service/power.c b/applications/services/power/power_service/power.c index 251bae35d..824e6d4d4 100644 --- a/applications/services/power/power_service/power.c +++ b/applications/services/power/power_service/power.c @@ -74,10 +74,10 @@ void power_draw_battery_callback(Canvas* canvas, void* context) { } else if(bar_charge >= 62 && bar_charge < 74) { bar_charge = 74; } - canvas_set_color(canvas, ColorBlack); - canvas_draw_box(canvas, 1, 1, (bar_charge * 22) / 100, 6); // drawing digits + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 1, 1, (bar_charge * 22) / 100, 6); if(bar_charge < 38) { // both digits are black canvas_set_color(canvas, ColorBlack); canvas_draw_str_aligned( @@ -105,7 +105,7 @@ void power_draw_battery_callback(Canvas* canvas, void* context) { canvas_set_color(canvas, ColorBlack); canvas_draw_str_aligned( canvas, 15, 4, AlignCenter, AlignCenter, batteryPercentileSecondDigit); - } else { // charge >= 62, both digits are white + } else { // charge >= 74, both digits are white canvas_set_color(canvas, ColorWhite); canvas_draw_str_aligned( canvas, 11, 4, AlignCenter, AlignCenter, batteryPercentile); @@ -134,8 +134,7 @@ void power_draw_battery_callback(Canvas* canvas, void* context) { if(power->state == PowerStateCharging) { canvas_set_bitmap_mode(canvas, 1); // TODO: replace -1 magic for uint8_t with re-framing - if(power->displayBatteryPercentage == DISPLAY_BATTERY_PERCENT || - power->displayBatteryPercentage == DISPLAY_BATTERY_BAR_PERCENT) { + if(power->displayBatteryPercentage == DISPLAY_BATTERY_PERCENT) { canvas_set_color(canvas, ColorBlack); canvas_draw_box(canvas, 1, 1, 22, 6); canvas_draw_icon(canvas, 2, -1, &I_Charging_lightning_9x10); @@ -153,6 +152,64 @@ void power_draw_battery_callback(Canvas* canvas, void* context) { canvas_set_font(canvas, FontBatteryPercent); canvas_draw_str_aligned( canvas, 16, 4, AlignCenter, AlignCenter, batteryPercentile); + } else if(power->displayBatteryPercentage == DISPLAY_BATTERY_BAR_PERCENT) { + + // clean-up default charging bar display + canvas_set_color(canvas, ColorWhite); + canvas_draw_box(canvas, 1, 1, 22, 6); + + // align charge dispaly value with digits to draw + uint8_t bar_charge = power->info.charge; + + if(bar_charge > 48 && bar_charge < 63) { + bar_charge = 48; + } else if(bar_charge >= 63 && bar_charge < 84) { + bar_charge = 75; + } else if(bar_charge >= 84 && bar_charge < 96) { + bar_charge = 96; + } + canvas_set_color(canvas, ColorBlack); + canvas_draw_box(canvas, 1, 1, (bar_charge * 22) / 100, 6); + + // drawing charge icon + canvas_draw_icon(canvas, 2, -1, &I_Charging_lightning_9x10); + canvas_set_color(canvas, ColorWhite); + canvas_draw_icon(canvas, 2, -1, &I_Charging_lightning_mask_9x10); + + // drawing digits + canvas_set_font(canvas, FontBatteryPercent); + if(bar_charge < 64) { // both digits are black + canvas_set_color(canvas, ColorBlack); + canvas_draw_str_aligned( + canvas, 16, 4, AlignCenter, AlignCenter, batteryPercentile); + } else if(bar_charge >= 64 && bar_charge < 84) { // first digit is white + canvas_set_color(canvas, ColorWhite); + + // first + char batteryPercentileFirstDigit[2]; + snprintf( + batteryPercentileFirstDigit, + sizeof(batteryPercentileFirstDigit), + "%c", + batteryPercentile[0]); + canvas_draw_str_aligned( + canvas, 14, 4, AlignCenter, AlignCenter, batteryPercentileFirstDigit); + + // second + char batteryPercentileSecondDigit[2]; + snprintf( + batteryPercentileSecondDigit, + sizeof(batteryPercentileSecondDigit), + "%c", + batteryPercentile[1]); + canvas_set_color(canvas, ColorBlack); + canvas_draw_str_aligned( + canvas, 20, 4, AlignCenter, AlignCenter, batteryPercentileSecondDigit); + } else { // charge >= 84, both digits are white + canvas_set_color(canvas, ColorWhite); + canvas_draw_str_aligned( + canvas, 16, 4, AlignCenter, AlignCenter, batteryPercentile); + } } else { canvas_set_color(canvas, ColorWhite); canvas_draw_icon(canvas, 8, -1, &I_Charging_lightning_mask_9x10);