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 "settings.h"
#include <pebble.h> #include <pebble.h>
// TODO fix fg and mg color not applying to mini variants; implement configurable color for fill bars
// window statics // window statics
static Window *s_main_window; static Window *s_main_window;
static Layer *s_window_layer; static Layer *s_window_layer;
@@ -26,10 +24,12 @@ static const uint16_t s_fuel_guage_x_pos = PBL_DISPLAY_WIDTH - 23;
// settings statics // settings statics
static ClaySettings settings; static ClaySettings settings;
static GColor s_applied_digits_mg = GColorDarkGray; 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_e_f = GColorWhite;
static GColor s_applied_c_h = GColorWhite; static GColor s_applied_c_h = GColorWhite;
static GColor s_applied_hour = GColorWhite; static GColor s_applied_hour = GColorWhite;
static GColor s_applied_minute = GColorWhite; static GColor s_applied_minute = GColorWhite;
static GColor s_applied_minute_mini = GColorWhite;
// bitmap statics // bitmap statics
static GBitmap *s_hour_bitmaps[10]; static GBitmap *s_hour_bitmaps[10];
@@ -305,6 +305,8 @@ static void peek_did_change(void *context) {
} }
static void apply_settings() { static void apply_settings() {
bool force_update_minutes = false;
// LED&BG // LED&BG
if (settings.UseCustomLED) { if (settings.UseCustomLED) {
light_set_color(settings.ColorLED); // no-op on unsupported platforms 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 //// set bitmap color and mark layers dirty
if (s_digit_mg_super8 && settings.ColorMGTime.argb != s_applied_digits_mg.argb) { if (s_digit_mg_super8 && settings.ColorMGDigits.argb != s_applied_digits_mg.argb) {
replace_gbitmap_color(s_applied_digits_mg, settings.ColorMGTime, s_digit_mg_super8, NULL); replace_gbitmap_color(s_applied_digits_mg, settings.ColorMGDigits, s_digit_mg_super8, NULL);
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
if (s_digit_mg_layers[i]) { if (s_digit_mg_layers[i]) {
layer_mark_dirty(bitmap_layer_get_layer(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 { } else {
if (s_digit_mg_super8) { if (s_digit_mg_super8) {
@@ -396,7 +398,7 @@ static void apply_settings() {
} }
s_applied_minute = settings.ColorMinutes; 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 { } else {
// if hours and minutes must be the same color... // 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[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[8] = gbitmap_create_with_resource(RESOURCE_ID_8_M);
s_minute_bitmaps_mini[9] = gbitmap_create_with_resource(RESOURCE_ID_9_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 (settings.ShowTimeMG) {
if (!s_digit_mg_super8_mini) {
s_digit_mg_super8_mini = gbitmap_create_with_resource(RESOURCE_ID_SUPER8_M); s_digit_mg_super8_mini = gbitmap_create_with_resource(RESOURCE_ID_SUPER8_M);
s_applied_digits_mg_mini = GColorDarkGray;
} }
} else { if (settings.ColorMGDigits.argb != s_applied_digits_mg_mini.argb) {
if (!settings.ShowTimeMG) { 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); gbitmap_destroy(s_digit_mg_super8_mini);
s_digit_mg_super8_mini = NULL; s_digit_mg_super8_mini = NULL;
} }
}
peek_will_change(layer_get_unobstructed_bounds(s_window_layer), NULL); peek_will_change(layer_get_unobstructed_bounds(s_window_layer), NULL);
peek_change(0, NULL); peek_change(0, NULL);
peek_did_change(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) { if (s_first_settings_application) {
s_first_settings_application = false; 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); settings.ColorBarsHot = GColorFromHEX(color_bar_hot_tuple->value->int32);
} }
if (color_time_mg_tuple) { 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) { if (color_letters_tuple) {
settings.ColorLetters = GColorFromHEX(color_letters_tuple->value->int32); settings.ColorLetters = GColorFromHEX(color_letters_tuple->value->int32);
@@ -678,7 +704,7 @@ static void init() {
settings.ColorBarsFill = GColorWhite; settings.ColorBarsFill = GColorWhite;
settings.ColorBarsCool = GColorDukeBlue; settings.ColorBarsCool = GColorDukeBlue;
settings.ColorBarsHot = GColorRed; settings.ColorBarsHot = GColorRed;
settings.ColorMGTime = GColorDarkGray; settings.ColorMGDigits = GColorDarkGray;
settings.ColorLetters = GColorWhite; settings.ColorLetters = GColorWhite;
settings.ColorHours = GColorWhite; settings.ColorHours = GColorWhite;
settings.ColorMinutes = GColorWhite; settings.ColorMinutes = GColorWhite;
+1 -1
View File
@@ -16,7 +16,7 @@ typedef struct ClaySettings {
GColor ColorBarsFill; GColor ColorBarsFill;
GColor ColorBarsCool; GColor ColorBarsCool;
GColor ColorBarsHot; GColor ColorBarsHot;
GColor ColorMGTime; GColor ColorMGDigits;
GColor ColorLetters; GColor ColorLetters;
GColor ColorHours; GColor ColorHours;
GColor ColorMinutes; GColor ColorMinutes;