Files
eink-dairy/pico-ssd1306/shapeRenderer/ShapeRenderer.cpp
T
Adolfo Reyna bc8ae91eba single repo
2026-01-01 13:33:51 -05:00

81 lines
2.4 KiB
C++

#include "ShapeRenderer.h"
void pico_ssd1306::drawLine(pico_ssd1306::SSD1306 *ssd1306, uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
pico_ssd1306::WriteMode mode) {
int x, y, dx, dy, dx0, dy0, px, py, xe, ye, i;
dx = x1 - x0;
dy = y1 - y0;
dx0 = fabs(dx);
dy0 = fabs(dy);
px = 2 * dy0 - dx0;
py = 2 * dx0 - dy0;
if (dy0 <= dx0) {
if (dx >= 0) {
x = x0;
y = y0;
xe = x1;
} else {
x = x1;
y = y1;
xe = x0;
}
ssd1306->setPixel(x, y, mode);
for (i = 0; x < xe; i++) {
x = x + 1;
if (px < 0) {
px = px + 2 * dy0;
} else {
if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) {
y = y + 1;
} else {
y = y - 1;
}
px = px + 2 * (dy0 - dx0);
}
ssd1306->setPixel(x, y, mode);
}
} else {
if (dy >= 0) {
x = x0;
y = y0;
ye = y1;
} else {
x = x1;
y = y1;
ye = y0;
}
ssd1306->setPixel(x, y, mode);
for (i = 0; y < ye; i++) {
y = y + 1;
if (py <= 0) {
py = py + 2 * dx0;
} else {
if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) {
x = x + 1;
} else {
x = x - 1;
}
py = py + 2 * (dx0 - dy0);
}
ssd1306->setPixel(x, y, mode);
}
}
}
void pico_ssd1306::drawRect(pico_ssd1306::SSD1306 *ssd1306, uint8_t x_start, uint8_t y_start, uint8_t x_end, uint8_t y_end,
pico_ssd1306::WriteMode mode) {
drawLine(ssd1306, x_start, y_start, x_end, y_start, mode);
drawLine(ssd1306, x_start, y_end, x_end, y_end, mode);
drawLine(ssd1306, x_start, y_start, x_start, y_end, mode);
drawLine(ssd1306, x_end, y_start, x_end, y_end, mode);
}
void pico_ssd1306::fillRect(pico_ssd1306::SSD1306 *ssd1306, uint8_t x_start, uint8_t y_start, uint8_t x_end, uint8_t y_end,
pico_ssd1306::WriteMode mode) {
for (uint8_t x = x_start; x <= x_end; x++) {
for (uint8_t y = y_start; y <= y_end; y++) {
ssd1306->setPixel(x, y, mode);
}
}
}