From 24cae3d54495ebbad9d6daaa1527805a26ad2bf0 Mon Sep 17 00:00:00 2001 From: Annika Date: Sat, 4 Jul 2026 00:26:59 -0700 Subject: [PATCH] put everything in a class --- Makefile | 8 +++--- test | Bin 0 -> 36928 bytes test.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) create mode 100755 test create mode 100644 test.cpp diff --git a/Makefile b/Makefile index b7fd218..459ef17 100644 --- a/Makefile +++ b/Makefile @@ -12,13 +12,13 @@ LIB_OBJ := $(LIB_SRC:.c=.o) .PHONY: all clean -all: libwaymini.a example waymini +all: libwaymini.a test waymini libwaymini.a: $(LIB_OBJ) ar rcs $@ $^ -example: example.c libwaymini.a - $(CC) $(CFLAGS) -o $@ example.c -L. -lwaymini $(LDFLAGS) +test: test.cpp libwaymini.a + g++ $(CFLAGS) -o $@ test.cpp -L. -lwaymini $(LDFLAGS) waymini: waymini_standalone.c waymini.c xdg-shell-client-protocol.c $(CC) $(CFLAGS) -o $@ waymini_standalone.c waymini.c xdg-shell-client-protocol.c $(LDFLAGS) @@ -27,7 +27,7 @@ waymini: waymini_standalone.c waymini.c xdg-shell-client-protocol.c $(CC) $(CFLAGS) -c -o $@ $< clean: - rm -f $(LIB_OBJ) libwaymini.a example waymini + rm -f $(LIB_OBJ) libwaymini.a test waymini xdg-shell-client-protocol.c xdg-shell-client-protocol.h: gen-protocols.sh bash gen-protocols.sh diff --git a/test b/test new file mode 100755 index 0000000000000000000000000000000000000000..20acaccbcb33e961af5822f4ee0e147c7687aec5 GIT binary patch literal 36928 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 Cn8v99 literal 0 HcmV?d00001 diff --git a/test.cpp b/test.cpp new file mode 100644 index 0000000..8ab795d --- /dev/null +++ b/test.cpp @@ -0,0 +1,82 @@ +/* Example program that links against the waymini library. + * No external dependencies beyond waymini itself and the C standard library. + */ + +#include "waymini.h" + +#include +#include +#include +#include + + +static void on_key(void *user, uint32_t keycode, uint32_t state) { + (void)user; + const char *label = state ? "down" : "up "; + printf("key %s: %u\n", label, keycode); + fflush(stdout); +} + +namespace UwU { + class Draw { + public: + struct waymini* wm; + uint32_t width; + uint32_t height; + uint32_t stride; + uint8_t *pixels; + + Draw(uint32_t width, uint32_t height, waymini_key_cb on_key) { + this->wm = waymini_create(width, height, on_key, NULL); + if (!this->wm) exit(1); + + this->width = waymini_get_width(this->wm); + this->height = waymini_get_height(this->wm); + this->stride = waymini_get_stride(this->wm); + printf("surface: %ux%u stride=%u\n", this->width, this->height, this->stride); + + this->pixels = (uint8_t *)waymini_get_pixels(this->wm); + if (!this->pixels) { + waymini_destroy(this->wm); + exit(1); + } + } + + // Draw a rectangle (duh) + void rectangle(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint8_t r, uint8_t g, uint8_t b) { + return; + } + + // Fill a simple gradient. Each row is stride bytes. + void rainbow() { + for (uint32_t y = 0; y < this->height; y++) { + for (uint32_t x = 0; x < this->width; x++) { + size_t i = (size_t)y * waymini_get_stride(this->wm) + (size_t)x * 4; + this->pixels[i + 0] = (uint8_t)(y * 255 / this->height); /* B */ + this->pixels[i + 1] = 0x00; /* G */ + this->pixels[i + 2] = (uint8_t)(x * 255 / this->width); /* R */ + this->pixels[i + 3] = 0xFF; /* A (ignored for XRGB) */ + } + } + } + }; + } + +int main(void) { + uint32_t w = 800, h = 480; + + // struct waymini *wm = waymini_create(w, h, on_key, NULL); + UwU::Draw draw = UwU::Draw(w, h, on_key); + + draw.rainbow(); + + waymini_present(draw.wm); + draw.pixels[200001] = 255; + + while (!waymini_should_close(draw.wm)) { + if (waymini_dispatch(draw.wm) < 0) break; + } + + waymini_destroy(draw.wm); + return 0; +}