Fix color cfg bugs with mini digits (timeline peek)

This commit is contained in:
2026-06-28 17:16:01 -04:00
parent 0358f174ca
commit 2ee145cd95
2 changed files with 41 additions and 15 deletions
+38 -12
View File
@@ -2,8 +2,6 @@
#include "settings.h"
#include <pebble.h>
// TODO fix fg and mg color not applying to mini variants; implement configurable color for fill bars
// window statics
static Window *s_main_window;
static Layer *s_window_layer;
@@ -26,10 +24,12 @@ static const uint16_t s_fuel_guage_x_pos = PBL_DISPLAY_WIDTH - 23;
// settings statics
static ClaySettings settings;
static GColor s_applied_digits_mg = GColorDarkGray;
static GColor s_applied_digits_mg_mini = GColorDarkGray;
static GColor s_applied_e_f = GColorWhite;
static GColor s_applied_c_h = GColorWhite;
static GColor s_applied_hour = GColorWhite;
static GColor s_applied_minute = GColorWhite;
static GColor s_applied_minute_mini = GColorWhite;
// bitmap statics
static GBitmap *s_hour_bitmaps[10];
@@ -305,6 +305,8 @@ static void peek_did_change(void *context) {
}
static void apply_settings() {
bool force_update_minutes = false;
// LED&BG
if (settings.UseCustomLED) {
light_set_color(settings.ColorLED); // no-op on unsupported platforms
@@ -340,14 +342,14 @@ static void apply_settings() {
}
}
//// set bitmap color and mark layers dirty
if (s_digit_mg_super8 && settings.ColorMGTime.argb != s_applied_digits_mg.argb) {
replace_gbitmap_color(s_applied_digits_mg, settings.ColorMGTime, s_digit_mg_super8, NULL);
if (s_digit_mg_super8 && settings.ColorMGDigits.argb != s_applied_digits_mg.argb) {
replace_gbitmap_color(s_applied_digits_mg, settings.ColorMGDigits, s_digit_mg_super8, NULL);
for (int i = 0; i < 4; ++i) {
if (s_digit_mg_layers[i]) {
layer_mark_dirty(bitmap_layer_get_layer(s_digit_mg_layers[i]));
}
}
s_applied_digits_mg = settings.ColorMGTime;
s_applied_digits_mg = settings.ColorMGDigits;
}
} else {
if (s_digit_mg_super8) {
@@ -396,7 +398,7 @@ static void apply_settings() {
}
s_applied_minute = settings.ColorMinutes;
}
update_minute_1(); // immediately reference the new minute digits, as we would otherwise be using the stale pointers to the hours digits
force_update_minutes = true;
}
} else {
// if hours and minutes must be the same color...
@@ -458,17 +460,37 @@ static void apply_settings() {
s_minute_bitmaps_mini[7] = gbitmap_create_with_resource(RESOURCE_ID_7_M);
s_minute_bitmaps_mini[8] = gbitmap_create_with_resource(RESOURCE_ID_8_M);
s_minute_bitmaps_mini[9] = gbitmap_create_with_resource(RESOURCE_ID_9_M);
s_applied_minute_mini = GColorWhite;
}
if (!s_digit_mg_super8_mini) {
//// set bitmap color
if (s_applied_minute_mini.argb != settings.ColorMinutes.argb) {
for (int i = 0; i < 10; ++i) {
replace_gbitmap_color(s_applied_minute_mini, settings.ColorMinutes, s_minute_bitmaps_mini[i], NULL);
}
s_applied_minute_mini = settings.ColorMinutes;
}
force_update_minutes = true;
// mg handling
if (settings.ShowTimeMG) {
if (!s_digit_mg_super8_mini) {
s_digit_mg_super8_mini = gbitmap_create_with_resource(RESOURCE_ID_SUPER8_M);
s_applied_digits_mg_mini = GColorDarkGray;
}
} else {
if (!settings.ShowTimeMG) {
if (settings.ColorMGDigits.argb != s_applied_digits_mg_mini.argb) {
replace_gbitmap_color(s_applied_digits_mg_mini, settings.ColorMGDigits, s_digit_mg_super8_mini, NULL);
for (int i = 0; i < 4; ++i) {
if (s_digit_mg_layers[i]) {
layer_mark_dirty(bitmap_layer_get_layer(s_digit_mg_layers[i]));
}
}
s_applied_digits_mg_mini = settings.ColorMGDigits;
}
} else if (s_digit_mg_super8_mini) {
gbitmap_destroy(s_digit_mg_super8_mini);
s_digit_mg_super8_mini = NULL;
}
}
peek_will_change(layer_get_unobstructed_bounds(s_window_layer), NULL);
peek_change(0, NULL);
peek_did_change(NULL);
@@ -494,6 +516,10 @@ static void apply_settings() {
}
}
if (force_update_minutes) {
update_minute_1();
}
if (s_first_settings_application) {
s_first_settings_application = false;
}
@@ -643,7 +669,7 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
settings.ColorBarsHot = GColorFromHEX(color_bar_hot_tuple->value->int32);
}
if (color_time_mg_tuple) {
settings.ColorMGTime = GColorFromHEX(color_time_mg_tuple->value->int32);
settings.ColorMGDigits = GColorFromHEX(color_time_mg_tuple->value->int32);
}
if (color_letters_tuple) {
settings.ColorLetters = GColorFromHEX(color_letters_tuple->value->int32);
@@ -678,7 +704,7 @@ static void init() {
settings.ColorBarsFill = GColorWhite;
settings.ColorBarsCool = GColorDukeBlue;
settings.ColorBarsHot = GColorRed;
settings.ColorMGTime = GColorDarkGray;
settings.ColorMGDigits = GColorDarkGray;
settings.ColorLetters = GColorWhite;
settings.ColorHours = GColorWhite;
settings.ColorMinutes = GColorWhite;
+1 -1
View File
@@ -16,7 +16,7 @@ typedef struct ClaySettings {
GColor ColorBarsFill;
GColor ColorBarsCool;
GColor ColorBarsHot;
GColor ColorMGTime;
GColor ColorMGDigits;
GColor ColorLetters;
GColor ColorHours;
GColor ColorMinutes;