summaryrefslogtreecommitdiff
path: root/src/displayapp/screens/FlashLight.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp/screens/FlashLight.cpp')
-rw-r--r--src/displayapp/screens/FlashLight.cpp99
1 files changed, 46 insertions, 53 deletions
diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp
index c4d0264..3493381 100644
--- a/src/displayapp/screens/FlashLight.cpp
+++ b/src/displayapp/screens/FlashLight.cpp
@@ -9,6 +9,10 @@ namespace {
auto* screen = static_cast<FlashLight*>(obj->user_data);
screen->OnClickEvent(obj, event);
}
+
+ typedef Pinetime::Controllers::BrightnessController::Levels Levels;
+
+ Levels brightnessLevel = Levels::High;
}
FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
@@ -19,12 +23,10 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
brightnessController {brightnessController}
{
- brightnessController.Backup();
-
- brightnessLevel = brightnessController.Level();
+ systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping);
flashLight = lv_label_create(lv_scr_act(), nullptr);
- lv_obj_set_style_local_text_font(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48);
+ lv_obj_set_style_local_text_font(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &neofont2);
lv_label_set_text_static(flashLight, Symbols::highlight);
lv_obj_align(flashLight, nullptr, LV_ALIGN_CENTER, 0, 0);
@@ -38,8 +40,7 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
lv_obj_align(indicators[0], indicators[1], LV_ALIGN_OUT_LEFT_MID, -8, 0);
lv_obj_align(indicators[2], indicators[1], LV_ALIGN_OUT_RIGHT_MID, 8, 0);
- SetIndicators();
- SetColors();
+ Update(true, brightnessLevel);
backgroundAction = lv_label_create(lv_scr_act(), nullptr);
lv_label_set_long_mode(backgroundAction, LV_LABEL_LONG_CROP);
@@ -49,56 +50,59 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app,
lv_obj_set_click(backgroundAction, true);
backgroundAction->user_data = this;
lv_obj_set_event_cb(backgroundAction, event_handler);
-
- systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping);
}
FlashLight::~FlashLight() {
+ Update(false, brightnessLevel);
lv_obj_clean(lv_scr_act());
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- brightnessController.Restore();
systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping);
}
-void FlashLight::SetColors() {
- if (isOn) {
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- for (auto & i : indicators) {
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE);
- lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
- }
- } else {
- lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- for (auto & i : indicators) {
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK);
- lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
- }
- }
-}
-
-void FlashLight::SetIndicators() {
- using namespace Pinetime::Controllers;
-
- if (brightnessLevel == BrightnessController::Levels::High) {
+void FlashLight::Update(bool on, Controllers::BrightnessController::Levels level) {
+ brightnessLevel = level;
+
+ if (brightnessLevel == Controllers::BrightnessController::Levels::High) {
lv_obj_set_state(indicators[1], LV_STATE_DEFAULT);
lv_obj_set_state(indicators[2], LV_STATE_DEFAULT);
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
+ } else if (brightnessLevel == Controllers::BrightnessController::Levels::Medium) {
lv_obj_set_state(indicators[1], LV_STATE_DEFAULT);
lv_obj_set_state(indicators[2], LV_STATE_DISABLED);
} else {
lv_obj_set_state(indicators[1], LV_STATE_DISABLED);
lv_obj_set_state(indicators[2], LV_STATE_DISABLED);
}
+
+ if (on != isOn) {
+ isOn = on;
+ if (isOn) {
+ brightnessController.Backup();
+ lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ for (auto & i : indicators) {
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE);
+ lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ }
+ } else {
+ brightnessController.Restore();
+ lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ for (auto & i : indicators) {
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK);
+ lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ }
+ }
+ }
+
+ if (isOn) {
+ brightnessController.Set(brightnessLevel);
+ }
}
void FlashLight::OnClickEvent(lv_obj_t* obj, lv_event_t event) {
if (obj == backgroundAction && event == LV_EVENT_CLICKED) {
- isOn = !isOn;
- SetColors();
+ Update(!isOn, brightnessLevel);
}
}
@@ -106,26 +110,15 @@ bool FlashLight::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
using namespace Pinetime::Controllers;
if (event == TouchEvents::SwipeLeft) {
- if (brightnessLevel == BrightnessController::Levels::High) {
- brightnessLevel = BrightnessController::Levels::Medium;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
- brightnessLevel = BrightnessController::Levels::Low;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
+ if (brightnessLevel >= Levels::Medium) {
+ Update(isOn, static_cast<Levels>( static_cast< std::underlying_type_t<Levels> >(brightnessLevel) - 1) );
}
return true;
}
+
if (event == TouchEvents::SwipeRight) {
- if (brightnessLevel == BrightnessController::Levels::Low) {
- brightnessLevel = BrightnessController::Levels::Medium;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
- } else if (brightnessLevel == BrightnessController::Levels::Medium) {
- brightnessLevel = BrightnessController::Levels::High;
- brightnessController.Set(brightnessLevel);
- SetIndicators();
+ if (brightnessLevel <= Levels::Medium) {
+ Update(isOn, static_cast<Levels>( static_cast< std::underlying_type_t<Levels> >(brightnessLevel) + 1) );
}
return true;
}