fix(color): Scale SF backlight value to user selected min/max backlight values (#4060)

This commit is contained in:
philmoz
2023-10-16 18:54:12 +10:00
committed by GitHub
parent a49c170193
commit c4a2c46d92
5 changed files with 29 additions and 18 deletions
+2 -6
View File
@@ -394,12 +394,8 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
getvalue_t raw = getValue(CFN_PARAM(cfn));
#if defined(COLORLCD)
if (raw == -1024)
requiredBacklightBright = 100;
else
requiredBacklightBright =
(1024 - raw) * (BACKLIGHT_LEVEL_MAX - BACKLIGHT_LEVEL_MIN) /
2048;
requiredBacklightBright = BACKLIGHT_LEVEL_MAX - (g_eeGeneral.blOffBright +
((1024 + raw) * ((BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright) - g_eeGeneral.blOffBright) / 2048));
#elif defined(OLED_SCREEN)
requiredBacklightBright = (raw + 1024) * 254 / 2048;
#else
+12 -6
View File
@@ -475,15 +475,17 @@ class BacklightPage : public SubPage {
// Backlight ON bright
new StaticText(backlightOnBright, rect_t{}, STR_BLONBRIGHTNESS, 0, COLOR_THEME_PRIMARY1);
new Slider(backlightOnBright, lv_pct(50), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX,
backlightOnSlider = new Slider(backlightOnBright, lv_pct(50), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX,
[=]() -> int32_t {
return BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright;
},
[=](int32_t newValue) {
if(newValue >= g_eeGeneral.blOffBright || g_eeGeneral.backlightMode == e_backlight_mode_on)
if(newValue >= g_eeGeneral.blOffBright || g_eeGeneral.backlightMode == e_backlight_mode_on) {
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - newValue;
else
} else {
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.blOffBright;
backlightOnSlider->update();
}
SET_DIRTY();
});
@@ -491,13 +493,15 @@ class BacklightPage : public SubPage {
// Backlight OFF bright
new StaticText(backlightOffBright, rect_t{}, STR_BLOFFBRIGHTNESS, 0, COLOR_THEME_PRIMARY1);
new Slider(backlightOffBright, lv_pct(50), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_DEFAULT(g_eeGeneral.blOffBright),
backlightOffSlider = new Slider(backlightOffBright, lv_pct(50), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_DEFAULT(g_eeGeneral.blOffBright),
[=](int32_t newValue) {
int32_t onBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright;
if(newValue <= onBright || g_eeGeneral.backlightMode == e_backlight_mode_off)
if(newValue <= onBright || g_eeGeneral.backlightMode == e_backlight_mode_off) {
g_eeGeneral.blOffBright = newValue;
else
} else {
g_eeGeneral.blOffBright = onBright;
backlightOffSlider->update();
}
SET_DIRTY();
});
@@ -522,6 +526,8 @@ class BacklightPage : public SubPage {
Window* backlightTimeout = nullptr;
Window* backlightOnBright = nullptr;
Window* backlightOffBright = nullptr;
Slider* backlightOffSlider = nullptr;
Slider* backlightOnSlider = nullptr;
void updateBacklightControls()
{
-5
View File
@@ -538,11 +538,6 @@ void checkBacklight()
}
if (backlightOn) {
currentBacklightBright = requiredBacklightBright;
#if defined(COLORLCD)
// force backlight on for color lcd radios
if (currentBacklightBright > BACKLIGHT_LEVEL_MAX - BACKLIGHT_LEVEL_MIN)
currentBacklightBright = BACKLIGHT_LEVEL_MAX - BACKLIGHT_LEVEL_MIN;
#endif
BACKLIGHT_ENABLE();
} else {
BACKLIGHT_DISABLE();
+13 -1
View File
@@ -51,8 +51,20 @@ Slider::Slider(Window* parent, coord_t width, int32_t vmin, int32_t vmax,
lv_obj_add_event_cb(slider, slider_changed_cb, LV_EVENT_VALUE_CHANGED, this);
lv_slider_set_range(slider, vmin, vmax);
if (_getValue != nullptr)
update();
}
void Slider::update()
{
if (_getValue != nullptr) {
// Fix for lv_slider_set_value not working when using the rotary encoder to
// update value
auto bar = (lv_bar_t*)slider;
bar->cur_value_anim.anim_state = -1;
bar->cur_value_anim.anim_end = _getValue();
lv_slider_set_value(slider, _getValue(), LV_ANIM_OFF);
}
}
void Slider::paint(BitmapBuffer* dc)
+2
View File
@@ -37,6 +37,8 @@ class Slider : public Window
void paint(BitmapBuffer *) override;
void update();
protected:
int vmin;
int vmax;