From 3eebe0244872818d7b96d4dae3e55e3548941bda Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 1 Aug 2022 20:57:27 +0300 Subject: Add support for months and variable digit count to Counter --- src/displayapp/widgets/Counter.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/displayapp/widgets/Counter.h') diff --git a/src/displayapp/widgets/Counter.h b/src/displayapp/widgets/Counter.h index 13b336ca..d38dd9d7 100644 --- a/src/displayapp/widgets/Counter.h +++ b/src/displayapp/widgets/Counter.h @@ -15,6 +15,8 @@ namespace Pinetime { void HideControls(); void ShowControls(); void EnableTwelveHourMode(); + void EnableMonthMode(); + void SetMax(int newMax); void SetValueChangedEventCallback(void* userData, void (*handler)(void* userData)); int GetValue() const { @@ -36,10 +38,11 @@ namespace Pinetime { lv_obj_t* upperLine; lv_obj_t* lowerLine; lv_point_t linePoints[2]; - int value = 0; int min; int max; + int value; bool twelveHourMode = false; + bool monthMode = false; lv_font_t& font; void* userData = nullptr; -- cgit v1.2.3-70-g09d2 From 62c4ff9c2d28227a4119a40a67997ad2d4aa7426 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 21 Aug 2022 14:52:14 +0300 Subject: Determine the number of digits from the max value. (#1271) --- src/displayapp/widgets/Counter.cpp | 18 ++++++++++++++---- src/displayapp/widgets/Counter.h | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src/displayapp/widgets/Counter.h') diff --git a/src/displayapp/widgets/Counter.cpp b/src/displayapp/widgets/Counter.cpp index 3c50a105..e95178ec 100644 --- a/src/displayapp/widgets/Counter.cpp +++ b/src/displayapp/widgets/Counter.cpp @@ -18,9 +18,17 @@ namespace { widget->DownBtnPressed(); } } + constexpr int digitCount(int number) { + int digitCount = 0; + while (number > 0) { + digitCount++; + number /= 10; + } + return digitCount; + } } -Counter::Counter(int min, int max, lv_font_t& font) : min {min}, max {max}, value {min}, font {font} { +Counter::Counter(int min, int max, lv_font_t& font) : min {min}, max {max}, value {min}, font {font}, leadingZeroCount {digitCount(max)} { } void Counter::UpBtnPressed() { @@ -72,14 +80,14 @@ void Counter::UpdateLabel() { if (value == 0) { lv_label_set_text_static(number, "12"); } else if (value <= 12) { - lv_label_set_text_fmt(number, "%.2i", value); + lv_label_set_text_fmt(number, "%.*i", leadingZeroCount, value); } else { - lv_label_set_text_fmt(number, "%.2i", value - 12); + lv_label_set_text_fmt(number, "%.*i", leadingZeroCount, value - 12); } } else if (monthMode) { lv_label_set_text(number, Controllers::DateTime::MonthShortToStringLow(static_cast(value))); } else { - lv_label_set_text_fmt(number, "%.2i", value); + lv_label_set_text_fmt(number, "%.*i", leadingZeroCount, value); } } @@ -95,6 +103,8 @@ void Counter::EnableMonthMode() { monthMode = true; } +// Counter cannot be resized after creation, +// so the newMax value must have the same number of digits as the old one void Counter::SetMax(int newMax) { max = newMax; if (value > max) { diff --git a/src/displayapp/widgets/Counter.h b/src/displayapp/widgets/Counter.h index d38dd9d7..825860b8 100644 --- a/src/displayapp/widgets/Counter.h +++ b/src/displayapp/widgets/Counter.h @@ -41,6 +41,7 @@ namespace Pinetime { int min; int max; int value; + const int leadingZeroCount; bool twelveHourMode = false; bool monthMode = false; lv_font_t& font; -- cgit v1.2.3-70-g09d2