diff --git a/src/c/main.c b/src/c/main.c index f204f04..5238dc0 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -2,8 +2,6 @@ #include "settings.h" #include -// 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) { - if (settings.ShowTimeMG) { + //// 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) { - gbitmap_destroy(s_digit_mg_super8_mini); - s_digit_mg_super8_mini = NULL; + 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; diff --git a/src/c/settings.h b/src/c/settings.h index 00ee6f2..3b43dfb 100644 --- a/src/c/settings.h +++ b/src/c/settings.h @@ -16,7 +16,7 @@ typedef struct ClaySettings { GColor ColorBarsFill; GColor ColorBarsCool; GColor ColorBarsHot; - GColor ColorMGTime; + GColor ColorMGDigits; GColor ColorLetters; GColor ColorHours; GColor ColorMinutes;