From 3907c88f31297b386afa5148d7203ccdad85c7ea Mon Sep 17 00:00:00 2001 From: Annika Date: Tue, 7 Jul 2026 06:47:24 -0700 Subject: [PATCH] refeactoring more primatives into their own classes --- datatypes.cpp | 36 ++++---- draw | Bin 41184 -> 0 bytes draw.cpp | 237 ++++++++++++++------------------------------------ example | Bin 41192 -> 41144 bytes example.cpp | 29 +++--- line.cpp | 95 ++++++++++++++++++++ rectangle.cpp | 36 ++++++++ trapezoid.cpp | 59 +++++++++++++ 8 files changed, 289 insertions(+), 203 deletions(-) delete mode 100755 draw create mode 100644 line.cpp create mode 100644 rectangle.cpp create mode 100644 trapezoid.cpp diff --git a/datatypes.cpp b/datatypes.cpp index ac9dd32..7ff0edd 100644 --- a/datatypes.cpp +++ b/datatypes.cpp @@ -36,22 +36,22 @@ namespace UwU { uint16_t y; }; - // trapezoid datatype (horizontally constrained) - struct Trapezoid { - Trapezoid(uint16_t y0, uint16_t y1, uint16_t xl0, uint16_t xl1, uint16_t xr0, uint16_t xr1) { - this->y0 = y0; - this->y1 = y1; - this->xl0 = xl0; - this->xl1 = xl1; - this->xr0 = xr0; - this->xr1 = xr1; - } - Trapezoid() {} - uint16_t y0; - uint16_t y1; - uint16_t xl0; - uint16_t xl1; - uint16_t xr0; - uint16_t xr1; - }; + // // trapezoid datatype (horizontally constrained) + // struct Trapezoid { + // Trapezoid(uint16_t y0, uint16_t y1, uint16_t xl0, uint16_t xl1, uint16_t xr0, uint16_t xr1) { + // this->y0 = y0; + // this->y1 = y1; + // this->xl0 = xl0; + // this->xl1 = xl1; + // this->xr0 = xr0; + // this->xr1 = xr1; + // } + // Trapezoid() {} + // uint16_t y0; + // uint16_t y1; + // uint16_t xl0; + // uint16_t xl1; + // uint16_t xr0; + // uint16_t xr1; + // }; } \ No newline at end of file diff --git a/draw b/draw deleted file mode 100755 index 0e3e94560a370af090bf1c1cf9dd1a423ccf0203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41184 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 0) { - y += yi; - d += (2 * (dy - dx)); - } else { - d += (2 * dy); - } - } - return; - } - - // plot lines if m >1 - void lineHigh(int32_t x0, int32_t y0, int32_t x1, int32_t y1, Color color) { - int32_t dx = x1 - x0; - int32_t dy = y1 - y0; - int32_t xi = 1; - if (dx < 0) { - xi = -1; - dx = -dx; - } - int32_t d = (2 * dx) - dy; - int32_t x = x0; - for (int32_t y = y0; y < y1; y++) { - // putPixel(x, y, color.r, color.g, color.b, color.a); - surface.buffer.drawPixel(Coord2((uint16_t)x, (uint16_t)y), color); - if (d > 0) { - x += xi; - d += (2 * (dx - dy)); - } else { - d += (2 * dx); - } - } - return; - } - public: - Draw(uint16_t width, uint16_t height, waymini_key_cb onKey) : surface(width, height, onKey) {} + + class Surface surface; bool shouldClose() { return surface.shouldClose(); @@ -134,13 +59,8 @@ namespace UwU { // Draw a rectangle (duh) void rectangle(Coord2 point0, Coord2 point1, Color color) { - if (point0.x > getWidth() || point0.y > getHeight() || point1.x > getWidth() || point1.y > getHeight()) {return;}; - for (uint32_t y = point0.y; y < point1.y; y++) { - for (uint32_t x = point0.x; x < point1.x; x++) { - // putPixel(x, y, color.r, color.g, color.b, color.a); - surface.buffer.drawPixel(Coord2((uint16_t)x, (uint16_t)y), color); - } - } + Rectangle rectangle = Rectangle(point0.x, point0.y, point1.x, point1.y); + rectangle.draw(surface.buffer, color); return; } @@ -214,55 +134,65 @@ namespace UwU { surface.buffer.drawPixel(point, color); } - // Uses Bresenham's line algorithm to draw line of any slope - void line (Coord2 point0, Coord2 point1, Color color) { - if (point0.x > getWidth() || point0.y > getHeight() || point1.x > getWidth() || point1.y > getHeight()) {return;}; - int32_t x0 = (int32_t)point0.x; - int32_t y0 = (int32_t)point0.y; - int32_t x1 = (int32_t)point1.x; - int32_t y1 = (int32_t)point1.y; - if (abs(y1 - y0) < abs(x1 - x0)) { - if (x0 > x1) { - lineLow(x1, y1, x0, y0, color); - } else { - lineLow(x0, y0, x1, y1, color); - } - } else { - if (y0 > y1) { - lineHigh(x1, y1, x0, y0, color); - } else { - lineHigh(x0, y0, x1, y1, color); - } - } + // // Uses Bresenham's line algorithm to draw line of any slope + // void line (Coord2 point0, Coord2 point1, Color color) { + // if (point0.x > getWidth() || point0.y > getHeight() || point1.x > getWidth() || point1.y > getHeight()) {return;}; + // int32_t x0 = (int32_t)point0.x; + // int32_t y0 = (int32_t)point0.y; + // int32_t x1 = (int32_t)point1.x; + // int32_t y1 = (int32_t)point1.y; + // if (abs(y1 - y0) < abs(x1 - x0)) { + // if (x0 > x1) { + // lineLow(x1, y1, x0, y0, color); + // } else { + // lineLow(x0, y0, x1, y1, color); + // } + // } else { + // if (y0 > y1) { + // lineHigh(x1, y1, x0, y0, color); + // } else { + // lineHigh(x0, y0, x1, y1, color); + // } + // } + // } + + // // Draw a horizontally bounded trapezoid + // // coords.y1 >= coords.y0 + // // todo move to private and add public checks + // void trapezoid (Trapezoid coords, Color color) { + // printf("(%u, %u, %u, %u, %u, %u)", coords.y0, coords.y1, coords.xl0, coords.xl1, coords.xr0, coords.xr1); + // uint16_t height = 1 + coords.y1 - coords.y0; + // int16_t LeftBound[height]; + // int16_t RightBound[height]; + + // Helpers::bresenham(0, coords.xl0, coords.y1 - coords.y0, coords.xl1, LeftBound); + // Helpers::bresenham(0, coords.xr0, coords.y1 - coords.y0, coords.xr1, RightBound); + + // printf("leftbound\n"); + // for (uint16_t i = 0; i < height; i++) { + // printf("(%u, %u)\n", i, LeftBound[i]); + // } + // printf("rightbound\n"); + // for (uint16_t i = 0; i < height; i++) { + // printf("(%u, %u)\n", i, RightBound[i]); + // } + + // for (uint16_t i = 0; i < height; i++) { + // for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { + // // printf("(%u, %u)", x, i + coords.y0); + // surface.buffer.drawPixel(Coord2(x, i + coords.y0), color); + // } + // } + // return; + // } + + void line (Line line, Color color) { + line.draw(surface.buffer, color); + return; } - // Draw a horizontally bounded trapezoid - // coords.y1 >= coords.y0 - // todo move to private and add public checks void trapezoid (Trapezoid coords, Color color) { - printf("(%u, %u, %u, %u, %u, %u)", coords.y0, coords.y1, coords.xl0, coords.xl1, coords.xr0, coords.xr1); - uint16_t height = 1 + coords.y1 - coords.y0; - int16_t LeftBound[height]; - int16_t RightBound[height]; - - Helpers::bresenham(0, coords.xl0, coords.y1 - coords.y0, coords.xl1, LeftBound); - Helpers::bresenham(0, coords.xr0, coords.y1 - coords.y0, coords.xr1, RightBound); - - printf("leftbound\n"); - for (uint16_t i = 0; i < height; i++) { - printf("(%u, %u)\n", i, LeftBound[i]); - } - printf("rightbound\n"); - for (uint16_t i = 0; i < height; i++) { - printf("(%u, %u)\n", i, RightBound[i]); - } - - for (uint16_t i = 0; i < height; i++) { - for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { - // printf("(%u, %u)", x, i + coords.y0); - surface.buffer.drawPixel(Coord2(x, i + coords.y0), color); - } - } + coords.draw(surface.buffer, color); return; } @@ -273,43 +203,4 @@ namespace UwU { return; } }; - } - -// int main(void) { -// uint32_t w = 800, h = 480; -// UwU::Color fuchsia = UwU::Color(0xb00b6940); -// UwU::Color red = UwU::Color(0xff0000ff); -// UwU::Color green = UwU::Color(0x00ff00ff); -// UwU::Color blue = UwU::Color(0x0000ffff); -// UwU::Color alpha = UwU::Color(0x00000000); -// printf("r: %u, g:%u, b:%u, a:%u\n", fuchsia.r, fuchsia.g, fuchsia.b, fuchsia.a); - -// // struct waymini *wm = waymini_create(w, h, on_key, NULL); -// UwU::Draw draw = UwU::Draw(w, h, onKey); - -// draw.rainbow(); - - -// draw.rectangle(UwU::Coord2(69, 69), UwU::Coord2(420, 420), fuchsia); -// draw.rectangleGradient(UwU::Coord2(200, 200), UwU::Coord2(600, 400), red, blue, alpha, red); - -// draw.trapezoid(UwU::Trapezoid(300, 400, 360, 380, 600, 480), green); -// draw.triangle(280, 100, 240, 290, 320, 300, green); - - -// draw.point(UwU::Coord2(387, 43), green); -// draw.line(UwU::Coord2(300, 100), UwU::Coord2(250, 469), green); -// draw.line(UwU::Coord2(250, 100), UwU::Coord2(300, 469), green); -// draw.line(UwU::Coord2(300, 100), UwU::Coord2(469, 250), green); -// draw.line(UwU::Coord2(469, 100), UwU::Coord2(300, 250), green); -// draw.line(UwU::Coord2(100, 300), UwU::Coord2(250, 469), green); -// draw.line(UwU::Coord2(250, 300), UwU::Coord2(100, 469), green); -// draw.line(UwU::Coord2(100, 300), UwU::Coord2(469, 250), green); -// draw.line(UwU::Coord2(469, 300), UwU::Coord2(100, 250), green); -// draw.present(); - -// while (!draw.shouldClose()) {} - -// draw.destroy(); -// return 0; -// } + } \ No newline at end of file diff --git a/example b/example index 69e09e8d2b47952a9fc1fac2230f46a8d593e450..c4f91fa2961e4e1ef6f36b40d725ed1fc4b5f062 100755 GIT binary patch delta 11522 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 SQftdRA~($BpCG=5$^Q%bR$l%9 delta 11850 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 A0RR91 diff --git a/example.cpp b/example.cpp index 806a9fc..b97fdc0 100644 --- a/example.cpp +++ b/example.cpp @@ -1,6 +1,6 @@ // #pragma once -// #include "waymini.h" +#include "waymini.h" #include #include @@ -9,9 +9,11 @@ #include "datatypes.cpp" #include "draw.cpp" -// #include "triangle.cpp" -// #include "buffer.cpp" -// #include "surface.cpp" +#include "trapezoid.cpp" +#include "triangle.cpp" +#include "buffer.cpp" +#include "surface.cpp" +#include "line.cpp" static void onKey(void *user, uint32_t keycode, uint32_t state) { if (keycode == 1) { @@ -44,16 +46,19 @@ int main(void) { draw.trapezoid(UwU::Trapezoid(300, 400, 360, 380, 600, 480), green); draw.triangle(280, 100, 240, 290, 320, 300, green); + // myTrap = UwU:Trapezoid(300, 400, 360, 380, 600, 480); + // myTrap.draw() + draw.point(UwU::Coord2(387, 43), green); - draw.line(UwU::Coord2(300, 100), UwU::Coord2(250, 469), green); - draw.line(UwU::Coord2(250, 100), UwU::Coord2(300, 469), green); - draw.line(UwU::Coord2(300, 100), UwU::Coord2(469, 250), green); - draw.line(UwU::Coord2(469, 100), UwU::Coord2(300, 250), green); - draw.line(UwU::Coord2(100, 300), UwU::Coord2(250, 469), green); - draw.line(UwU::Coord2(250, 300), UwU::Coord2(100, 469), green); - draw.line(UwU::Coord2(100, 300), UwU::Coord2(469, 250), green); - draw.line(UwU::Coord2(469, 300), UwU::Coord2(100, 250), green); + draw.line(UwU::Line(300, 100, 250, 469), green); + draw.line(UwU::Line(250, 100, 300, 469), green); + draw.line(UwU::Line(300, 100, 469, 250), green); + draw.line(UwU::Line(469, 100, 300, 250), green); + draw.line(UwU::Line(100, 300, 250, 469), green); + draw.line(UwU::Line(250, 300, 100, 469), green); + draw.line(UwU::Line(100, 300, 469, 250), green); + draw.line(UwU::Line(469, 300, 100, 250), green); draw.present(); while (!draw.shouldClose()) {} diff --git a/line.cpp b/line.cpp new file mode 100644 index 0000000..5c889cf --- /dev/null +++ b/line.cpp @@ -0,0 +1,95 @@ +#pragma once + +#include + +#include "datatypes.cpp" +#include "helpers.cpp" +#include "buffer.cpp" + +namespace UwU { + // line + class Line { + private: + // plot lines if m <= 1 + void lineLow(int16_t ix0, int16_t iy0, int16_t ix1, int16_t iy1, Buffer buffer, Color color) { + int16_t dx = ix1 - ix0; + int16_t dy = iy1 - iy0; + int16_t yi = 1; + if (dy < 0) { + yi = -1; + dy = -dy; + } + int16_t d = (2 * dy) - dx; + int16_t y = iy0; + for (int16_t x = ix0; x < ix1; x++) { + buffer.drawPixel(Coord2((uint16_t)x, (uint16_t)y), color); + if (d > 0) { + y += yi; + d += (2 * (dy - dx)); + } else { + d += (2 * dy); + } + } + return; + } + + // plot lines if m >1 + void lineHigh(int16_t ix0, int16_t iy0, int16_t ix1, int16_t iy1, Buffer buffer, Color color) { + int16_t dx = ix1 - ix0; + int16_t dy = iy1 - iy0; + int16_t xi = 1; + if (dx < 0) { + xi = -1; + dx = -dx; + } + int16_t d = (2 * dx) - dy; + int16_t x = ix0; + for (int16_t y = iy0; y < iy1; y++) { + buffer.drawPixel(Coord2((uint16_t)x, (uint16_t)y), color); + if (d > 0) { + x += xi; + d += (2 * (dx - dy)); + } else { + d += (2 * dx); + } + } + return; + } + + public: + Line(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { + this->x0 = x0; + this->y0 = y0; + this->x1 = x1; + this->y1 = y1; + } + Line() {} + uint16_t x0; + uint16_t y0; + uint16_t x1; + uint16_t y1; + + // Uses Bresenham's line algorithm to draw line of any slope + void draw (Buffer buffer, Color color) { + if (x0 > buffer.width || y0 > buffer.height || x1 > buffer.width || y1 > buffer.height) {return;}; + int16_t ix0 = x0; + int16_t iy0 = y0; + int16_t ix1 = x1; + int16_t iy1 = y1; + if (abs(iy1 - iy0) < abs(ix1 - ix0)) { + if (ix0 > ix1) { + lineLow(ix1, iy1, ix0, iy0, buffer, color); + } else { + lineLow(ix0, iy0, ix1, iy1, buffer, color); + } + } else { + if (iy0 > iy1) { + lineHigh(ix1, iy1, ix0, iy0, buffer, color); + } else { + lineHigh(ix0, iy0, ix1, iy1, buffer, color); + } + } + return; + } + }; +} \ No newline at end of file diff --git a/rectangle.cpp b/rectangle.cpp new file mode 100644 index 0000000..39ed8f4 --- /dev/null +++ b/rectangle.cpp @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include "datatypes.cpp" +#include "helpers.cpp" +#include "buffer.cpp" + +namespace UwU { + // rectangle + class Rectangle { + public: + Rectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { + this->x0 = x0; + this->y0 = y0; + this->x1 = x1; + this->y1 = y1; + } + Rectangle() {} + uint16_t x0; + uint16_t y0; + uint16_t x1; + uint16_t y1; + + // Draw a rectangle + void draw (Buffer buffer, Color color) { + if (x0 > buffer.width || y0 > buffer.height || x1 > buffer.width || y1 > buffer.height) {return;}; + for (uint16_t y = y0; y < y1; y++) { + for (uint16_t x = x0; x < x1; x++) { + buffer.drawPixel(Coord2(x, y), color); + } + } + return; + } + }; +} \ No newline at end of file diff --git a/trapezoid.cpp b/trapezoid.cpp new file mode 100644 index 0000000..60d5972 --- /dev/null +++ b/trapezoid.cpp @@ -0,0 +1,59 @@ +#pragma once + +#include + +#include "datatypes.cpp" +#include "helpers.cpp" +#include "buffer.cpp" + +namespace UwU { + // trapezoid (horizontally constrained) + class Trapezoid { + public: + Trapezoid(uint16_t y0, uint16_t y1, uint16_t xl0, uint16_t xl1, uint16_t xr0, uint16_t xr1) { + this->y0 = y0; + this->y1 = y1; + this->xl0 = xl0; + this->xl1 = xl1; + this->xr0 = xr0; + this->xr1 = xr1; + } + Trapezoid() {} + uint16_t y0; + uint16_t y1; + uint16_t xl0; + uint16_t xl1; + uint16_t xr0; + uint16_t xr1; + + // Draw a horizontally bounded trapezoid + // y1 >= y0 + // todo move to private and add public checks + void draw (Buffer buffer, Color color) { + // printf("(%u, %u, %u, %u, %u, %u)", coords.y0, coords.y1, coords.xl0, coords.xl1, coords.xr0, coords.xr1); + uint16_t height = 1 + y1 - y0; + int16_t LeftBound[height]; + int16_t RightBound[height]; + + Helpers::bresenham(0, xl0, y1 - y0, xl1, LeftBound); + Helpers::bresenham(0, xr0, y1 - y0, xr1, RightBound); + + // printf("leftbound\n"); + for (uint16_t i = 0; i < height; i++) { + // printf("(%u, %u)\n", i, LeftBound[i]); + } + // printf("rightbound\n"); + for (uint16_t i = 0; i < height; i++) { + // printf("(%u, %u)\n", i, RightBound[i]); + } + + for (uint16_t i = 0; i < height; i++) { + for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { + // printf("(%u, %u)", x, i + coords.y0); + buffer.drawPixel(Coord2(x, i + y0), color); + } + } + return; + } + }; +} \ No newline at end of file