From 90601f675a31ab64901c736737eb08226fa31f94 Mon Sep 17 00:00:00 2001 From: Steve Amor Date: Sun, 1 Dec 2024 20:17:02 +0000 Subject: [PATCH 1/4] Adds page indicator to music app --- src/displayapp/screens/Music.cpp | 14 ++++++++++---- src/displayapp/screens/Music.h | 4 ++++ src/displayapp/widgets/PageIndicator.cpp | 5 +++++ src/displayapp/widgets/PageIndicator.h | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 0bd0965ff9..ab9ac58e15 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -59,7 +59,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { btnVolDown->user_data = this; lv_obj_set_event_cb(btnVolDown, event_handler); lv_obj_set_size(btnVolDown, 76, 76); - lv_obj_align(btnVolDown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_align(btnVolDown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 3, 0); lv_obj_add_style(btnVolDown, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolDown, nullptr); lv_label_set_text_static(label, Symbols::volumDown); @@ -69,7 +69,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { btnVolUp->user_data = this; lv_obj_set_event_cb(btnVolUp, event_handler); lv_obj_set_size(btnVolUp, 76, 76); - lv_obj_align(btnVolUp, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_align(btnVolUp, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0); lv_obj_add_style(btnVolUp, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolUp, nullptr); lv_label_set_text_static(label, Symbols::volumUp); @@ -79,7 +79,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { btnPrev->user_data = this; lv_obj_set_event_cb(btnPrev, event_handler); lv_obj_set_size(btnPrev, 76, 76); - lv_obj_align(btnPrev, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_align(btnPrev, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 3, 0); lv_obj_add_style(btnPrev, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnPrev, nullptr); lv_label_set_text_static(label, Symbols::stepBackward); @@ -88,7 +88,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { btnNext->user_data = this; lv_obj_set_event_cb(btnNext, event_handler); lv_obj_set_size(btnNext, 76, 76); - lv_obj_align(btnNext, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_align(btnNext, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0); lv_obj_add_style(btnNext, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnNext, nullptr); lv_label_set_text_static(label, Symbols::stepForward); @@ -127,6 +127,8 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { lv_obj_set_width(txtTrack, LV_HOR_RES - 12); lv_label_set_text_static(txtTrack, ""); + page1Indicator.Create(); + /** Init animation */ imgDisc = lv_img_create(lv_scr_act(), nullptr); lv_img_set_src_arr(imgDisc, &disc); @@ -256,6 +258,8 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { lv_obj_set_hidden(btnNext, true); lv_obj_set_hidden(btnPrev, true); + page1Indicator.Delete(); + page2Indicator.Create(); return true; } case TouchEvents::SwipeDown: { @@ -264,6 +268,8 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { lv_obj_set_hidden(btnPrev, false); lv_obj_set_hidden(btnVolDown, true); lv_obj_set_hidden(btnVolUp, true); + page2Indicator.Delete(); + page1Indicator.Create(); return true; } return false; diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index acf69c4114..c51c803967 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -21,6 +21,7 @@ #include #include #include "displayapp/screens/Screen.h" +#include "displayapp/widgets/PageIndicator.h" #include "displayapp/apps/Apps.h" #include "displayapp/Controllers.h" #include "Symbols.h" @@ -82,6 +83,9 @@ namespace Pinetime { lv_task_t* taskRefresh; + Widgets::PageIndicator page1Indicator = Widgets::PageIndicator(0, 2); + Widgets::PageIndicator page2Indicator = Widgets::PageIndicator(1, 2); + /** Watchapp */ }; } diff --git a/src/displayapp/widgets/PageIndicator.cpp b/src/displayapp/widgets/PageIndicator.cpp index 84d03e7ed0..a7bcc53fd3 100644 --- a/src/displayapp/widgets/PageIndicator.cpp +++ b/src/displayapp/widgets/PageIndicator.cpp @@ -30,3 +30,8 @@ void PageIndicator::Create() { lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, Colors::lightGray); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } + +void PageIndicator::Delete() { + lv_obj_del(pageIndicatorBase); + lv_obj_del(pageIndicator); +} diff --git a/src/displayapp/widgets/PageIndicator.h b/src/displayapp/widgets/PageIndicator.h index 8484735e58..cc9d2088ba 100644 --- a/src/displayapp/widgets/PageIndicator.h +++ b/src/displayapp/widgets/PageIndicator.h @@ -8,6 +8,7 @@ namespace Pinetime { public: PageIndicator(uint8_t nCurrentScreen, uint8_t nScreens); void Create(); + void Delete(); private: uint8_t nCurrentScreen; From f3b19421dafc73d0f64ec47a60453f9d33a68a76 Mon Sep 17 00:00:00 2001 From: Steve Amor Date: Sun, 13 Jul 2025 07:20:40 +0100 Subject: [PATCH 2/4] Adds SetCurrentScreen method to page indicator --- src/displayapp/screens/Music.cpp | 9 +++------ src/displayapp/screens/Music.h | 3 +-- src/displayapp/widgets/PageIndicator.cpp | 6 ++++++ src/displayapp/widgets/PageIndicator.h | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index ab9ac58e15..89de86a762 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -127,7 +127,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { lv_obj_set_width(txtTrack, LV_HOR_RES - 12); lv_label_set_text_static(txtTrack, ""); - page1Indicator.Create(); + pageIndicator.Create(); /** Init animation */ imgDisc = lv_img_create(lv_scr_act(), nullptr); @@ -255,11 +255,9 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { case TouchEvents::SwipeUp: { lv_obj_set_hidden(btnVolDown, false); lv_obj_set_hidden(btnVolUp, false); - lv_obj_set_hidden(btnNext, true); lv_obj_set_hidden(btnPrev, true); - page1Indicator.Delete(); - page2Indicator.Create(); + pageIndicator.SetCurrentScreen(1); return true; } case TouchEvents::SwipeDown: { @@ -268,8 +266,7 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { lv_obj_set_hidden(btnPrev, false); lv_obj_set_hidden(btnVolDown, true); lv_obj_set_hidden(btnVolUp, true); - page2Indicator.Delete(); - page1Indicator.Create(); + pageIndicator.SetCurrentScreen(0); return true; } return false; diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index c51c803967..3c371b85eb 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -83,8 +83,7 @@ namespace Pinetime { lv_task_t* taskRefresh; - Widgets::PageIndicator page1Indicator = Widgets::PageIndicator(0, 2); - Widgets::PageIndicator page2Indicator = Widgets::PageIndicator(1, 2); + Widgets::PageIndicator pageIndicator = Widgets::PageIndicator(0, 2); /** Watchapp */ }; diff --git a/src/displayapp/widgets/PageIndicator.cpp b/src/displayapp/widgets/PageIndicator.cpp index a7bcc53fd3..d8558678fb 100644 --- a/src/displayapp/widgets/PageIndicator.cpp +++ b/src/displayapp/widgets/PageIndicator.cpp @@ -35,3 +35,9 @@ void PageIndicator::Delete() { lv_obj_del(pageIndicatorBase); lv_obj_del(pageIndicator); } + +void PageIndicator::SetCurrentScreen(uint8_t nScreen) { + Delete(); + nCurrentScreen = nScreen; + Create(); +} diff --git a/src/displayapp/widgets/PageIndicator.h b/src/displayapp/widgets/PageIndicator.h index cc9d2088ba..1829bb37f2 100644 --- a/src/displayapp/widgets/PageIndicator.h +++ b/src/displayapp/widgets/PageIndicator.h @@ -9,6 +9,7 @@ namespace Pinetime { PageIndicator(uint8_t nCurrentScreen, uint8_t nScreens); void Create(); void Delete(); + void SetCurrentScreen(uint8_t nScreen); private: uint8_t nCurrentScreen; From d7370abc7e1763756cd5d065f6a99cfcf88a967e Mon Sep 17 00:00:00 2001 From: Steve Amor Date: Fri, 18 Jul 2025 18:45:56 +0100 Subject: [PATCH 3/4] Refactor pageindicator --- src/displayapp/widgets/PageIndicator.cpp | 15 ++++++--------- src/displayapp/widgets/PageIndicator.h | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/displayapp/widgets/PageIndicator.cpp b/src/displayapp/widgets/PageIndicator.cpp index d8558678fb..5d9815dade 100644 --- a/src/displayapp/widgets/PageIndicator.cpp +++ b/src/displayapp/widgets/PageIndicator.cpp @@ -16,9 +16,12 @@ void PageIndicator::Create() { lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, Colors::bgDark); lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); + SetPageIndicatorPosition(nCurrentScreen); +} +void PageIndicator::SetPageIndicatorPosition(uint8_t position) { const int16_t indicatorSize = LV_VER_RES / nScreens; - const int16_t indicatorPos = indicatorSize * nCurrentScreen; + const int16_t indicatorPos = indicatorSize * position; pageIndicatorPoints[0].x = LV_HOR_RES - 1; pageIndicatorPoints[0].y = indicatorPos; @@ -31,13 +34,7 @@ void PageIndicator::Create() { lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } -void PageIndicator::Delete() { - lv_obj_del(pageIndicatorBase); - lv_obj_del(pageIndicator); -} - void PageIndicator::SetCurrentScreen(uint8_t nScreen) { - Delete(); - nCurrentScreen = nScreen; - Create(); + lv_obj_del(pageIndicator); + SetPageIndicatorPosition(nScreen); } diff --git a/src/displayapp/widgets/PageIndicator.h b/src/displayapp/widgets/PageIndicator.h index 1829bb37f2..b9d3117b06 100644 --- a/src/displayapp/widgets/PageIndicator.h +++ b/src/displayapp/widgets/PageIndicator.h @@ -8,10 +8,10 @@ namespace Pinetime { public: PageIndicator(uint8_t nCurrentScreen, uint8_t nScreens); void Create(); - void Delete(); void SetCurrentScreen(uint8_t nScreen); private: + void SetPageIndicatorPosition(uint8_t position); uint8_t nCurrentScreen; uint8_t nScreens; From 66268687f0d38d88e5104227a8e17a39f557635a Mon Sep 17 00:00:00 2001 From: Steve Amor Date: Sat, 19 Jul 2025 07:20:07 +0100 Subject: [PATCH 4/4] Refactor pageindicator --- src/displayapp/screens/Music.cpp | 4 ++-- src/displayapp/widgets/PageIndicator.cpp | 12 ++++-------- src/displayapp/widgets/PageIndicator.h | 3 +-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 89de86a762..e1441460f7 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -257,7 +257,7 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { lv_obj_set_hidden(btnVolUp, false); lv_obj_set_hidden(btnNext, true); lv_obj_set_hidden(btnPrev, true); - pageIndicator.SetCurrentScreen(1); + pageIndicator.SetPageIndicatorPosition(1); return true; } case TouchEvents::SwipeDown: { @@ -266,7 +266,7 @@ bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { lv_obj_set_hidden(btnPrev, false); lv_obj_set_hidden(btnVolDown, true); lv_obj_set_hidden(btnVolUp, true); - pageIndicator.SetCurrentScreen(0); + pageIndicator.SetPageIndicatorPosition(0); return true; } return false; diff --git a/src/displayapp/widgets/PageIndicator.cpp b/src/displayapp/widgets/PageIndicator.cpp index 5d9815dade..cee979f22c 100644 --- a/src/displayapp/widgets/PageIndicator.cpp +++ b/src/displayapp/widgets/PageIndicator.cpp @@ -16,6 +16,10 @@ void PageIndicator::Create() { lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, Colors::bgDark); lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); + + pageIndicator = lv_line_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, Colors::lightGray); SetPageIndicatorPosition(nCurrentScreen); } @@ -28,13 +32,5 @@ void PageIndicator::SetPageIndicatorPosition(uint8_t position) { pageIndicatorPoints[1].x = LV_HOR_RES - 1; pageIndicatorPoints[1].y = indicatorPos + indicatorSize; - pageIndicator = lv_line_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, Colors::lightGray); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } - -void PageIndicator::SetCurrentScreen(uint8_t nScreen) { - lv_obj_del(pageIndicator); - SetPageIndicatorPosition(nScreen); -} diff --git a/src/displayapp/widgets/PageIndicator.h b/src/displayapp/widgets/PageIndicator.h index b9d3117b06..b9aaffe408 100644 --- a/src/displayapp/widgets/PageIndicator.h +++ b/src/displayapp/widgets/PageIndicator.h @@ -8,10 +8,9 @@ namespace Pinetime { public: PageIndicator(uint8_t nCurrentScreen, uint8_t nScreens); void Create(); - void SetCurrentScreen(uint8_t nScreen); + void SetPageIndicatorPosition(uint8_t position); private: - void SetPageIndicatorPosition(uint8_t position); uint8_t nCurrentScreen; uint8_t nScreens;