diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-06-03 10:23:25 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-06-04 17:55:05 (GMT) |
| commit | 84f0c705e8cf4cd0823bbd86a31b43fc3a061e6d (patch) | |
| tree | 429d315b9ffeee417a1390fa0fb35d1153bab5c4 | |
| parent | 3d3a0a1c4ba134d6ece47e24492685bb7d64465b (diff) | |
Use C++17 and preallocate blocks for tiled multi-screen menus
| -rw-r--r-- | src/displayapp/screens/ApplicationList.cpp | 8 | ||||
| -rw-r--r-- | src/displayapp/screens/ApplicationList.h | 45 | ||||
| -rw-r--r-- | src/displayapp/screens/List.cpp | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/List.h | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/Tile.cpp | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/Tile.h | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/settings/Settings.cpp | 9 | ||||
| -rw-r--r-- | src/displayapp/screens/settings/Settings.h | 58 |
8 files changed, 72 insertions, 56 deletions
diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 5284433..0de5b54 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -6,7 +6,6 @@ using namespace Pinetime::Applications::Screens; -constexpr std::array<Tile::Applications, ApplicationList::applications.size()> ApplicationList::applications; auto ApplicationList::CreateScreenList() const { std::array<std::function<std::unique_ptr<Screen>()>, nScreens> screens; @@ -38,11 +37,6 @@ bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) { } std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) const { - std::array<Tile::Applications, appsPerScreen> apps; - for (int i = 0; i < appsPerScreen; i++) { - apps[i] = applications[screenNum * appsPerScreen + i]; - } - - return std::make_unique<Screens::Tile>(screenNum, nScreens, app, settingsController, batteryController, dateTimeController, apps); + return std::make_unique<Screens::Tile>(screenNum, nScreens, app, settingsController, batteryController, dateTimeController, applications[screenNum]); } diff --git a/src/displayapp/screens/ApplicationList.h b/src/displayapp/screens/ApplicationList.h index 3ff71b8..5517ed5 100644 --- a/src/displayapp/screens/ApplicationList.h +++ b/src/displayapp/screens/ApplicationList.h @@ -31,22 +31,37 @@ namespace Pinetime { Controllers::DateTime& dateTimeController; static constexpr int appsPerScreen = 6; - static constexpr std::array<Tile::Applications, appsPerScreen * 2> applications {{ - {Symbols::stopWatch, Apps::StopWatch}, - {Symbols::music, Apps::Music}, - {Symbols::shoe, Apps::Steps}, - {Symbols::heartBeat, Apps::HeartRate}, - {Symbols::hourGlass, Apps::Timer}, - {Symbols::clock, Apps::Alarm}, + static constexpr auto applications{[]() constexpr{ + constexpr Tile::Applications list[] = { + {Symbols::stopWatch, Apps::StopWatch}, + {Symbols::music, Apps::Music}, + {Symbols::shoe, Apps::Steps}, + {Symbols::heartBeat, Apps::HeartRate}, + {Symbols::hourGlass, Apps::Timer}, + {Symbols::clock, Apps::Alarm}, - {Symbols::chartLine, Apps::Jumpscore}, - {Symbols::map, Apps::Navigation}, - {Symbols::drum, Apps::Metronome}, - {Symbols::paintbrush, Apps::Paint}, - {Symbols::paddle, Apps::Paddle}, - {"2", Apps::Twos}, - }}; - static constexpr int nScreens = (applications.size() + appsPerScreen - 1) / appsPerScreen; + {Symbols::chartLine, Apps::Jumpscore}, + {Symbols::map, Apps::Navigation}, + {Symbols::drum, Apps::Metronome}, + {Symbols::paintbrush, Apps::Paint}, + {Symbols::paddle, Apps::Paddle}, + {"2", Apps::Twos} + }; + std::array<std::array<Tile::Applications, appsPerScreen>, ((std::size(list) + appsPerScreen - 1) / appsPerScreen)> r{};; + int idx = 0; + for (auto& f : r) { + for (auto& e : f) { + if (idx < std::size(list)) { + e = list[idx]; + } else { + e = { Symbols::none, Apps::None }; + } + idx++; + } + } + return r; + }()}; + static constexpr auto nScreens = std::size(applications); ScreenList<nScreens> screens; }; } diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index af3f30f..62c36dc 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -16,7 +16,7 @@ List::List(uint8_t screenID, uint8_t numScreens, DisplayApp* app, Controllers::Settings& settingsController, - std::array<Applications, MAXLISTITEMS>& applications) + const std::array<Applications, MAXLISTITEMS>& applications) : Screen(app), settingsController {settingsController} { // Set the background to Black diff --git a/src/displayapp/screens/List.h b/src/displayapp/screens/List.h index 023de3a..bed5601 100644 --- a/src/displayapp/screens/List.h +++ b/src/displayapp/screens/List.h @@ -24,7 +24,7 @@ namespace Pinetime { uint8_t numScreens, DisplayApp* app, Controllers::Settings& settingsController, - std::array<Applications, MAXLISTITEMS>& applications); + const std::array<Applications, MAXLISTITEMS>& applications); ~List() override; void OnButtonEvent(lv_obj_t* object, lv_event_t event); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 4df69fe..c63b5ac 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -26,7 +26,7 @@ Tile::Tile(uint8_t screenID, Controllers::Settings& settingsController, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, - std::array<Applications, 6>& applications) + const std::array<Applications, 6>& applications) : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController} { settingsController.SetAppMenu(screenID); diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4869fef..1d4b7b6 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -26,7 +26,7 @@ namespace Pinetime { Controllers::Settings& settingsController, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, - std::array<Applications, 6>& applications); + const std::array<Applications, 6>& applications); ~Tile() override; diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 1c964c4..c3fbb4f 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -6,8 +6,6 @@ using namespace Pinetime::Applications::Screens; -constexpr std::array<List::Applications, Settings::entries.size()> Settings::entries; - auto Settings::CreateScreenList() const { std::array<std::function<std::unique_ptr<Screen>()>, nScreens> screens; for (size_t i = 0; i < screens.size(); i++) { @@ -33,10 +31,5 @@ bool Settings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { } std::unique_ptr<Screen> Settings::CreateScreen(unsigned int screenNum) const { - std::array<List::Applications, entriesPerScreen> screens; - for (int i = 0; i < entriesPerScreen; i++) { - screens[i] = entries[screenNum * entriesPerScreen + i]; - } - - return std::make_unique<Screens::List>(screenNum, nScreens, app, settingsController, screens); + return std::make_unique<Screens::List>(screenNum, nScreens, app, settingsController, entries[screenNum]); } diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index ad4bf08..96c9e4e 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -25,28 +25,42 @@ namespace Pinetime { Controllers::Settings& settingsController; static constexpr int entriesPerScreen = 4; - static constexpr std::array<List::Applications, entriesPerScreen * 4> entries {{ - {Symbols::sun, "Display", Apps::SettingDisplay}, - {Symbols::eye, "Wake Up", Apps::SettingWakeUp}, - {Symbols::clock, "Time format", Apps::SettingTimeFormat}, - {Symbols::home, "Watch face", Apps::SettingWatchFace}, - - {Symbols::shoe, "Steps", Apps::SettingSteps}, - {Symbols::clock, "Set date", Apps::SettingSetDate}, - {Symbols::clock, "Set time", Apps::SettingSetTime}, - {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, - - {Symbols::clock, "Chimes", Apps::SettingChimes}, - {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, - {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, - - {Symbols::list, "About", Apps::SysInfo}, - {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None}, - }}; - static constexpr int nScreens = (entries.size() + entriesPerScreen - 1) / entriesPerScreen; + static constexpr auto entries{[]() constexpr{ + using namespace Pinetime::Applications::Screens; + using namespace Pinetime::Applications; + constexpr List::Applications list[] = { + {Symbols::sun, "Display", Apps::SettingDisplay}, + {Symbols::eye, "Wake Up", Apps::SettingWakeUp}, + {Symbols::clock, "Time format", Apps::SettingTimeFormat}, + {Symbols::home, "Watch face", Apps::SettingWatchFace}, + + {Symbols::shoe, "Steps", Apps::SettingSteps}, + {Symbols::clock, "Set date", Apps::SettingSetDate}, + {Symbols::clock, "Set time", Apps::SettingSetTime}, + {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + + {Symbols::clock, "Chimes", Apps::SettingChimes}, + {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, + {Symbols::check, "Firmware", Apps::FirmwareValidation}, + {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, + + {Symbols::list, "About", Apps::SysInfo}, + }; + std::array<std::array<List::Applications, entriesPerScreen>, ((std::size(list) + entriesPerScreen - 1) / entriesPerScreen)> r{};; + int idx = 0; + for (auto& f : r) { + for (auto& e : f) { + if (idx < std::size(list)) { + e = list[idx]; + } else { + e = { Symbols::none, "", Apps::None }; + } + idx++; + } + } + return r; + }()}; + static constexpr auto nScreens = std::size(entries); ScreenList<nScreens> screens; }; } |
