diff options
author | JF <jf@codingfield.com> | 2020-03-15 18:03:11 +0100 |
---|---|---|
committer | JF <jf@codingfield.com> | 2020-03-15 18:03:11 +0100 |
commit | 2ed76ac55615a720dbcbf2ac828ad3060a252273 (patch) | |
tree | d51123b57241556303891ef4cb5b81c47c348a51 /src/DisplayApp/Screens | |
parent | eabb54f15df7df69951ce8f49a62d3bd702dd686 (diff) |
Encapsulate brightness controll into the class BrightnessController.
Add a new app to configure the brightness.
Diffstat (limited to 'src/DisplayApp/Screens')
-rw-r--r-- | src/DisplayApp/Screens/Brightness.cpp | 72 | ||||
-rw-r--r-- | src/DisplayApp/Screens/Brightness.h | 31 | ||||
-rw-r--r-- | src/DisplayApp/Screens/Tile.cpp | 11 | ||||
-rw-r--r-- | src/DisplayApp/Screens/Tile.h | 1 |
4 files changed, 113 insertions, 2 deletions
diff --git a/src/DisplayApp/Screens/Brightness.cpp b/src/DisplayApp/Screens/Brightness.cpp new file mode 100644 index 00000000..a87a62a8 --- /dev/null +++ b/src/DisplayApp/Screens/Brightness.cpp @@ -0,0 +1,72 @@ +#include <libs/lvgl/lvgl.h> +#include "Brightness.h" + +using namespace Pinetime::Applications::Screens; + +void slider_event_cb(lv_obj_t * slider, lv_event_t event) { + if(event == LV_EVENT_VALUE_CHANGED) { + auto* brightnessSlider = static_cast<Brightness*>(slider->user_data); + brightnessSlider->OnValueChanged(); + } +} + +Brightness::Brightness(Pinetime::Applications::DisplayApp *app, Controllers::BrightnessController& brightness) : Screen(app), brightness{brightness} { + slider = lv_slider_create(lv_scr_act(), NULL); + lv_obj_set_user_data(slider, this); + lv_obj_set_width(slider, LV_DPI * 2); + lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0); + lv_obj_set_event_cb(slider, slider_event_cb); + lv_slider_set_range(slider, 0, 2); + lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); + + slider_label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(slider_label, LevelToString(brightness.Level())); + lv_obj_set_auto_realign(slider_label, true); + lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); +} + +Brightness::~Brightness() { + lv_obj_clean(lv_scr_act()); +} + +bool Brightness::Refresh() { + return running; +} + +bool Brightness::OnButtonPushed() { + running = false; + return true; +} + +const char *Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) { + switch(level) { + case Pinetime::Controllers::BrightnessController::Levels::Off: return "Off"; + case Pinetime::Controllers::BrightnessController::Levels::Low: return "Low"; + case Pinetime::Controllers::BrightnessController::Levels::Medium: return "Medium"; + case Pinetime::Controllers::BrightnessController::Levels::High: return "High"; + default : return "???"; + } +} + +void Brightness::OnValueChanged() { + SetValue(lv_slider_get_value(slider)); +} + +void Brightness::SetValue(uint8_t value) { + switch(value) { + case 0: brightness.Set(Controllers::BrightnessController::Levels::Low); break; + case 1: brightness.Set(Controllers::BrightnessController::Levels::Medium); break; + case 2: brightness.Set(Controllers::BrightnessController::Levels::High); break; + } + lv_label_set_text(slider_label, LevelToString(brightness.Level())); +} + +uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Levels level) { + switch(level) { + case Pinetime::Controllers::BrightnessController::Levels::Off: return 0; + case Pinetime::Controllers::BrightnessController::Levels::Low: return 0; + case Pinetime::Controllers::BrightnessController::Levels::Medium: return 1; + case Pinetime::Controllers::BrightnessController::Levels::High: return 2; + default : return 0; + } +} diff --git a/src/DisplayApp/Screens/Brightness.h b/src/DisplayApp/Screens/Brightness.h new file mode 100644 index 00000000..31861f8a --- /dev/null +++ b/src/DisplayApp/Screens/Brightness.h @@ -0,0 +1,31 @@ +#pragma once + +#include <libs/lvgl/src/lv_core/lv_obj.h> +#include <Components/Brightness/BrightnessController.h> +#include "Screen.h" + +namespace Pinetime { + namespace Applications { + namespace Screens { + class Brightness : public Screen { + public: + Brightness(DisplayApp* app, Controllers::BrightnessController& brightness); + ~Brightness() override; + bool Refresh() override; + bool OnButtonPushed() override; + + void OnValueChanged(); + private: + bool running = true; + Controllers::BrightnessController& brightness; + + lv_obj_t * slider_label; + lv_obj_t * slider; + + const char* LevelToString(Controllers::BrightnessController::Levels level); + uint8_t LevelToInt(Controllers::BrightnessController::Levels level); + void SetValue(uint8_t value); + }; + } + } +}
\ No newline at end of file diff --git a/src/DisplayApp/Screens/Tile.cpp b/src/DisplayApp/Screens/Tile.cpp index 004c8d31..5dc1fce4 100644 --- a/src/DisplayApp/Screens/Tile.cpp +++ b/src/DisplayApp/Screens/Tile.cpp @@ -16,7 +16,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { screen->OnObjectEvent(obj, event, eventData); } -static const char * btnm_map1[] = {"Meter", "Gauge", "Clock", "\n", "Soft\nversion", "App2", "App3", ""}; +static const char * btnm_map1[] = {"Meter", "Gauge", "Clock", "\n", "Soft\nversion", "App2", "Brightness", ""}; Tile::Tile(DisplayApp* app) : Screen(app) { modal.reset(new Modal(app)); @@ -126,8 +126,10 @@ void Tile::OnObjectEvent(lv_obj_t *obj, lv_event_t event, uint32_t buttonId) { modal->Show(); break; case 4: - case 5: tile->StartTestApp(); + break; + case 5: + tile->StartBrightnessApp(); break; } @@ -151,6 +153,11 @@ void Tile::StartTestApp() { running = false; } +void Tile::StartBrightnessApp() { + app->StartApp(DisplayApp::Apps::Brightness); + running = false; +} + void Tile::StartMeterApp() { app->StartApp(DisplayApp::Apps::Meter); running = false; diff --git a/src/DisplayApp/Screens/Tile.h b/src/DisplayApp/Screens/Tile.h index eb253435..cfd9b01f 100644 --- a/src/DisplayApp/Screens/Tile.h +++ b/src/DisplayApp/Screens/Tile.h @@ -58,6 +58,7 @@ namespace Pinetime { bool running = true; std::unique_ptr<Modal> modal; + void StartBrightnessApp(); }; } } |