Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 48 additions & 54 deletions firmware/common/ui_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -564,16 +564,14 @@ void LiveDateTime::set_seconds_enabled(bool new_value) {

/* BigFrequency **********************************************************/

BigFrequency::BigFrequency(
Rect parent_rect,
rf::Frequency frequency)
: Widget{parent_rect},
_frequency{frequency} {
}
BigFrequency::BigFrequency(Rect parent_rect, rf::Frequency frequency)
: Widget{parent_rect}, _frequency{frequency} {}

void BigFrequency::set(const rf::Frequency frequency) {
_frequency = frequency;
set_dirty();
if (_frequency != frequency) {
_frequency = frequency;
set_dirty();
}
}

void BigFrequency::paint(Painter& painter) {
Expand All @@ -583,64 +581,60 @@ void BigFrequency::paint(Painter& painter) {
Point digit_pos;
ui::Color segment_color;

if (_frequency != _previous_frequency) {
_previous_frequency = _frequency;

rf::Frequency frequency{_frequency};
const auto rect = screen_rect(); // why not use screen_rect() directly for width, ...? it may be too small, but ...
rf::Frequency frequency{_frequency};
const auto rect = screen_rect(); // why not use screen_rect() directly for width, ...? it may be too small, but ...

// Erase
painter.fill_rectangle(
Comment thread
gullradriel marked this conversation as resolved.
{{0, rect.location().y()}, {screen_width, 52}},
Theme::getInstance()->bg_darkest->background);

// Prepare digits
Comment thread
gullradriel marked this conversation as resolved.
if (!frequency) {
digits.fill(10); // ----.---
digit_pos = {(screen_width - ((7 * digit_width) + 8)) / 2, rect.location().y()};
} else {
frequency /= 1000; // GMMM.KKK(uuu)
// Erase
painter.fill_rectangle(
{{0, rect.location().y()}, {screen_width, 52}},
Theme::getInstance()->bg_darkest->background);

for (i = 0; i < 7; i++) {
digits[6 - i] = frequency % 10;
frequency /= 10;
}
// Prepare digits
if (!frequency) {
digits.fill(10); // ----.---
digit_pos = {(screen_width - ((7 * digit_width) + 8)) / 2, rect.location().y()};
} else {
frequency /= 1000; // GMMM.KKK(uuu)

// Remove leading zeros
for (i = 0; i < 3; i++) {
if (!digits[i])
digits[i] = 16; // "Don't draw" code
else
break;
}
for (i = 0; i < 7; i++) {
digits[6 - i] = frequency % 10;
frequency /= 10;
}

digit_pos = {(Coord)(screen_width - ((7 * digit_width) + 8) - (i * digit_width)) / 2, rect.location().y()};
// Remove leading zeros
for (i = 0; i < 3; i++) {
if (!digits[i])
digits[i] = 16; // "Don't draw" code
else
break;
}

segment_color = style().foreground;
digit_pos = {(Coord)(screen_width - ((7 * digit_width) + 8) - (i * digit_width)) / 2, rect.location().y()};
}

// Draw
for (i = 0; i < 7; i++) {
digit = digits[i];
segment_color = style().foreground;

if (digit < 16) {
digit_def = segment_font[(uint8_t)digit];
// Draw
for (i = 0; i < 7; i++) {
digit = digits[i];

for (size_t s = 0; s < 7; s++) {
if (digit_def & 1)
painter.fill_rectangle({digit_pos + segments[s].location(), segments[s].size()}, segment_color);
digit_def >>= 1;
}
}
if (digit < 16) {
digit_def = segment_font[(uint8_t)digit];

if (i == 3) {
// Dot
painter.fill_rectangle({digit_pos + Point(34, 48), {4, 4}}, segment_color);
digit_pos += {(digit_width + 8), 0};
} else {
digit_pos += {digit_width, 0};
for (size_t s = 0; s < 7; s++) {
if (digit_def & 1)
painter.fill_rectangle({digit_pos + segments[s].location(), segments[s].size()}, segment_color);
digit_def >>= 1;
}
}

if (i == 3) {
// Dot
painter.fill_rectangle({digit_pos + Point(34, 48), {4, 4}}, segment_color);
digit_pos += {(digit_width + 8), 0};
} else {
digit_pos += {digit_width, 0};
}
}
}

Expand Down
1 change: 0 additions & 1 deletion firmware/common/ui_widget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,6 @@ class BigFrequency : public Widget {

private:
rf::Frequency _frequency;
rf::Frequency _previous_frequency{~0LL};

static constexpr Dim digit_width = 32;

Expand Down
Loading