fix(color): Scale SF backlight value to user selected min/max backlight values (#4060)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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
@@ -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
@@ -37,6 +37,8 @@ class Slider : public Window
|
||||
|
||||
void paint(BitmapBuffer *) override;
|
||||
|
||||
void update();
|
||||
|
||||
protected:
|
||||
int vmin;
|
||||
int vmax;
|
||||
|
||||
Reference in New Issue
Block a user