summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiku Isokoski <riksu9000@gmail.com>2022-08-21 14:52:14 +0300
committerGitHub <noreply@github.com>2022-08-21 14:52:14 +0300
commit62c4ff9c2d28227a4119a40a67997ad2d4aa7426 (patch)
tree0ee06108b1a8c0adf7b7b8b9db03142ceb4485b2
parentc2b6a8de3e15fa66d48a373b3504fcebf12d905b (diff)
Determine the number of digits from the max value. (#1271)
-rw-r--r--src/displayapp/widgets/Counter.cpp18
-rw-r--r--src/displayapp/widgets/Counter.h1
2 files changed, 15 insertions, 4 deletions
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<Controllers::DateTime::Months>(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;