single repo
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
#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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user