From d067194cb5d6348b964197824db919228498da95 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sat, 13 Jun 2026 15:16:39 -0400 Subject: [PATCH] Allow using system backlight color --- .gitignore | 1 + package.json | 1 + src/c/main.c | 11 ++++++++++- src/c/settings.h | 1 + src/pkjs/config.js | 10 +++++++++- src/pkjs/customClay.js | 19 ++++++++++++++++++- 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index ec2184a..eaf2f4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /.clangd /.lock-waf* /package-lock.json +/node_modules diff --git a/package.json b/package.json index d97ad44..7c29a38 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "PKJS_TEMP_BAR_COUNT", "CLAY_BT_INDICATOR", "CLAY_SHOW_TIME_MG", + "CLAY_USE_CUSTOM_LED", "CLAY_DATE_TIMEOUT", "CLAY_LOW_FUEL_PERCENT", "CLAY_LED_COLOR", diff --git a/src/c/main.c b/src/c/main.c index 17abb77..86a45fa 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -218,7 +218,11 @@ static void accel_tap_handler(AccelAxisType axis, int32_t direction) { static void apply_settings(bool first_run) { // LED&BG - light_set_color(settings.ColorLED); // no-op on unsupported platforms + if (settings.UseCustomLED) { + light_set_color(settings.ColorLED); // no-op on unsupported platforms + } else { + light_set_system_color(); + } window_set_background_color(s_main_window, settings.ColorBG); // TIME MG @@ -381,6 +385,7 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) { // CLAY SETTINGS Tuple *track_bt_tuple = dict_find(iter, MESSAGE_KEY_CLAY_BT_INDICATOR); Tuple *show_time_mg_tuple = dict_find(iter, MESSAGE_KEY_CLAY_SHOW_TIME_MG); + Tuple *use_custom_led_tuple = dict_find(iter, MESSAGE_KEY_CLAY_USE_CUSTOM_LED); Tuple *date_timeout_tuple = dict_find(iter, MESSAGE_KEY_CLAY_DATE_TIMEOUT); Tuple *low_fuel_percent_tuple = dict_find(iter, MESSAGE_KEY_CLAY_LOW_FUEL_PERCENT); Tuple *color_led_tuple = dict_find(iter, MESSAGE_KEY_CLAY_LED_COLOR); @@ -397,6 +402,9 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) { if (show_time_mg_tuple) { settings.ShowTimeMG = show_time_mg_tuple->value->uint8; } + if (use_custom_led_tuple) { + settings.UseCustomLED = use_custom_led_tuple->value->uint8; + } if (date_timeout_tuple) { settings.DateTimeoutSecs = date_timeout_tuple->value->uint8; } @@ -438,6 +446,7 @@ static void init() { } else { settings.TrackBTStatus = false; settings.ShowTimeMG = false; + settings.UseCustomLED = false; settings.DateTimeoutSecs = 3; settings.LowFuelPercent = 20; settings.ColorLED = GColorWhite; diff --git a/src/c/settings.h b/src/c/settings.h index 5b900d0..40caa2d 100644 --- a/src/c/settings.h +++ b/src/c/settings.h @@ -6,6 +6,7 @@ typedef struct ClaySettings { bool TrackBTStatus; bool ShowTimeMG; + bool UseCustomLED; uint8_t DateTimeoutSecs; uint8_t LowFuelPercent; GColor ColorLED; diff --git a/src/pkjs/config.js b/src/pkjs/config.js index 9706042..f3a301e 100644 --- a/src/pkjs/config.js +++ b/src/pkjs/config.js @@ -89,12 +89,20 @@ module.exports = [ } ] }, + { + "id": "custom_led_toggle", + "type": "toggle", + "messageKey": "CLAY_USE_CUSTOM_LED", + "defaultValue": false, + "label": "Use custom backlight color", + "description": "Enable to override your system-wide setting.", + }, { "id": "custom_color_led", "type": "color", "messageKey": "CLAY_LED_COLOR", "defaultValue": "ffffff", - "label": "Backlight color (Time 2)", + "label": "Backlight color", "sunlight": false, }, { diff --git a/src/pkjs/customClay.js b/src/pkjs/customClay.js index 8f3eb59..039c745 100644 --- a/src/pkjs/customClay.js +++ b/src/pkjs/customClay.js @@ -4,11 +4,21 @@ module.exports = function (minified) { var $ = minified.$; var HTML = minified.HTML; + function toggleCustomBacklight() { + if (this.get()) { + clayConfig.getItemById('custom_color_led').enable(); + } else { + clayConfig.getItemById('custom_color_led').disable(); + } + } + function setColorsToPreset() { var selectedPreset = clayConfig.getItemById('color_preset_selector').get(); switch (selectedPreset) { case 'civic_si': + clayConfig.getItemById('custom_led_toggle').set(true); // override system with red backlight clayConfig.getItemById('custom_color_led').set('ff0000'); + clayConfig.getItemById('custom_color_bg').set('000000'); clayConfig.getItemById('custom_color_mg_bars').set('555555'); clayConfig.getItemById('custom_color_cool_bars').set('0000aa'); @@ -18,7 +28,8 @@ module.exports = function (minified) { clayConfig.getItemById('custom_color_warning').set('ffaa00'); break default: - clayConfig.getItemById('custom_color_led').set('ffffff'); + clayConfig.getItemById('custom_led_toggle').set(false); // use system LED color + clayConfig.getItemById('custom_color_bg').set('0000ff'); clayConfig.getItemById('custom_color_mg_bars').set('555555'); clayConfig.getItemById('custom_color_cool_bars').set('0000aa'); @@ -32,6 +43,7 @@ module.exports = function (minified) { function toggleCustomColors() { if (this.get()) { clayConfig.getItemById('color_preset_selector').hide(); + clayConfig.getItemById('custom_led_toggle').show(); clayConfig.getItemById('custom_color_led').show(); clayConfig.getItemById('custom_color_bg').show(); clayConfig.getItemById('custom_color_mg_bars').show(); @@ -43,6 +55,7 @@ module.exports = function (minified) { } else { setColorsToPreset(); clayConfig.getItemById('color_preset_selector').show(); + clayConfig.getItemById('custom_led_toggle').hide(); clayConfig.getItemById('custom_color_led').hide(); clayConfig.getItemById('custom_color_bg').hide(); clayConfig.getItemById('custom_color_mg_bars').hide(); @@ -59,6 +72,10 @@ module.exports = function (minified) { toggleCustomColors.call(customColorsToggle); customColorsToggle.on('change', toggleCustomColors); + var customBacklightToggle = clayConfig.getItemById('custom_led_toggle'); + toggleCustomBacklight.call(customBacklightToggle); + customBacklightToggle.on('change', toggleCustomBacklight); + clayConfig.getItemById('color_preset_selector').on('change', setColorsToPreset); }); };