WatchyWatchFace/src/SevenSegment.cpp

82 lines
3.6 KiB
C++
Raw Normal View History

2023-05-29 13:03:05 +03:00
#include "SevenSegment.h"
SevenSegment::SevenSegment(uint16_t digitWidth, uint16_t digitHeight, uint16_t digitGap, uint16_t segmentThickness, uint16_t segmentGap)
: m_digitWidth(digitWidth), m_digitHeight(digitHeight), m_digitGap(digitGap), m_segmentThickness(segmentThickness), m_segmentGap(segmentGap)
{
}
void SevenSegment::DrawDigit(GxEPD2_BW<WatchyDisplayBase, WatchyDisplayBase::HEIGHT> & display, uint8_t digit, uint16_t x, uint16_t y, uint8_t color)
{
2023-05-29 14:09:08 +03:00
if (digit > 9) {
return;
}
2023-05-29 13:03:05 +03:00
uint16_t digitX = x;
uint16_t digitY = y;
// top top-right bottom-right bottom bottom-left top-left middle
2023-05-29 14:09:08 +03:00
const bool drawSegments[10][7] = {
{ true, true, true, true, true, true, false },
{ false, true, true, false, false, false, false },
{ true, true, false, true, true, false, true },
{ true, true, true, true, false, false, true },
{ false, true, true, false, false, true, true },
{ true, false, true, true, false, true, true },
{ false, false, true, true, true, true, true },
{ true, true, true, false, false, false, false },
{ true, true, true, true, true, true, true },
{ true, true, true, true, false, true, true }
};
const bool * segments = drawSegments[digit];
2023-05-29 13:03:05 +03:00
2023-05-29 14:09:08 +03:00
// Top
2023-05-29 13:03:05 +03:00
if (segments[0]) {
display.fillRect(digitX + m_segmentThickness, digitY, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color);
} else {
display.fillRect(digitX + m_segmentThickness, digitY, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Top-right
2023-05-29 13:03:05 +03:00
if (segments[1]) {
display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color);
} else {
display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Bottom-right
2023-05-29 13:03:05 +03:00
if (segments[2]) {
display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color);
} else {
display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Bottom
2023-05-29 13:03:05 +03:00
if (segments[3]) {
display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight - m_segmentThickness * 2, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color);
} else {
display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight - m_segmentThickness * 2, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Bottom-left
2023-05-29 13:03:05 +03:00
if (segments[4]) {
display.fillRect(digitX, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color);
} else {
display.fillRect(digitX, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Top-left
2023-05-29 13:03:05 +03:00
if (segments[5]) {
display.fillRect(digitX, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color);
} else {
display.fillRect(digitX, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, color ^ 0xFF);
}
2023-05-29 14:09:08 +03:00
// Middle
2023-05-29 13:03:05 +03:00
if (segments[6]) {
display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight / 2 - m_segmentThickness, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color);
} else {
display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight / 2 - m_segmentThickness, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, color ^ 0xFF);
}
}