tools/atlas-editor.c

changeset 312
330fc71ad3c2
parent 309
8124d12deb04
child 313
e8119155c099
--- a/tools/atlas-editor.c	Sun May 24 17:26:24 2026 +0200
+++ b/tools/atlas-editor.c	Sun May 24 18:27:13 2026 +0200
@@ -27,12 +27,36 @@
 
 #include <ui/ui.h>
 
+#define VAR_TILE_WIDTH "tile_width"
+#define VAR_TILE_HEIGHT "tile_height"
+#define VAR_SPACING "spacing"
+
+static void *create_document(void) {
+    void *doc = ui_document_new(1); // TODO: actually we have zero additional data, but that probably does not work
+    UiContext *ctx = ui_document_context(doc);
+    ui_set(ui_int_new(ctx, VAR_TILE_WIDTH), 32);
+    ui_set(ui_int_new(ctx, VAR_TILE_HEIGHT), 32);
+    ui_set(ui_int_new(ctx, VAR_SPACING), 0);
+    return doc;
+}
+
 static void draw_atlas(UiEvent* evt, UiGraphics* g, void* data) {
+    UiContext *doc_ctx = ui_document_context(evt->document);
+    int spacing = (int) ui_var_get_int(doc_ctx, VAR_SPACING);
+    int tile_width = (int) ui_var_get_int(doc_ctx, VAR_TILE_WIDTH);
+    int tile_height = (int) ui_var_get_int(doc_ctx, VAR_TILE_HEIGHT);
+
     ui_graphics_color(g, 255, 128, 0);
     ui_draw_rect(g, 0, 0, g->width, g->height, true);
+    ui_graphics_color(g, 128, 128, 128);
+    for (int x = spacing ; x < g->width ; x += tile_width + spacing) {
+        for (int y = spacing ; y < g->height ; y += tile_height + spacing) {
+            ui_draw_rect(g, x, y, tile_width, tile_height, false);
+        }
+    }
 }
 
-static void application_startup([[maybe_unused]] UiEvent *event, [[maybe_unused]] void *data) {
+static void application_startup([[maybe_unused]] UiEvent *event, void *data) {
     UiObject *window = ui_window("Ascension - Texture Atlas Editor");
 
     ui_grid(window, .columnspacing = 10, .margin = 10, .fill = true) {
@@ -49,17 +73,22 @@
             ui_separator(window);
             ui_grid(window, .columnspacing = 10, .rowspacing = 2, .def_vfill = true) {
                 ui_label(window, .label = "Tile Width:");
-                ui_textfield(window, .width = 20); // TODO: in current toolkit version, width is not accepted
+                ui_spinbox(window, .varname = VAR_TILE_WIDTH, .min = 8, .step = 8);
                 ui_label(window, .label = "Tile Height:");
-                ui_textfield(window, .width = 20);
+                ui_spinbox(window, .varname = VAR_TILE_HEIGHT, .min = 8, .step = 8);
+                ui_newline(window);
+                ui_label(window, .varname = VAR_SPACING, .label = "Spacing:");
+                ui_spinbox(window);
             }
         }
     }
 
+    ui_attach_document(window->ctx, create_document());
+
     ui_show(window);
 }
 
-int main(int argc, char** argv) { 
+int main(int argc, char** argv) {
     ui_init("asc_atlas_editor", argc, argv);
     ui_onstartup(application_startup, NULL);
     ui_main();

mercurial