diff -r 87ff4c57955d -r 330fc71ad3c2 tools/atlas-editor.c --- 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 +#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();