2026-03-09 13:17:15 +01:00
|
|
|
|
|
|
|
|
#include "global.h"
|
|
|
|
|
|
2026-04-21 10:52:27 +02:00
|
|
|
buffer_t *slot_brush_default_canvas = NULL;
|
2026-04-05 16:09:00 +02:00
|
|
|
|
2026-03-06 12:56:38 +01:00
|
|
|
slot_brush_t *slot_brush_create(ui_node_canvas_t *c) {
|
|
|
|
|
slot_brush_t *raw = GC_ALLOC_INIT(slot_brush_t, {0});
|
|
|
|
|
raw->nodes = ui_nodes_create();
|
|
|
|
|
raw->preview_ready = false;
|
|
|
|
|
raw->id = 0;
|
|
|
|
|
|
2026-06-05 20:34:10 +02:00
|
|
|
for (i32 i = 0; i < g_project->_->brushes->length; ++i) {
|
|
|
|
|
slot_brush_t *brush = g_project->_->brushes->buffer[i];
|
2026-03-06 12:56:38 +01:00
|
|
|
if (brush->id >= raw->id) {
|
|
|
|
|
raw->id = brush->id + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-07 21:12:59 +01:00
|
|
|
if (c == NULL) {
|
|
|
|
|
if (slot_brush_default_canvas == NULL) { // Synchronous
|
2026-03-06 12:56:38 +01:00
|
|
|
buffer_t *b = data_get_blob("default_brush.arm");
|
|
|
|
|
gc_unroot(slot_brush_default_canvas);
|
|
|
|
|
slot_brush_default_canvas = b;
|
|
|
|
|
gc_root(slot_brush_default_canvas);
|
|
|
|
|
}
|
2026-03-10 21:00:00 +01:00
|
|
|
raw->canvas = armpack_decode(slot_brush_default_canvas);
|
|
|
|
|
raw->canvas = util_clone_canvas(raw->canvas); // Clone to create GC references
|
2026-03-06 12:56:38 +01:00
|
|
|
|
|
|
|
|
i32 id = (raw->id + 1);
|
2026-03-10 21:00:00 +01:00
|
|
|
raw->canvas->name = string("Brush %d", id);
|
2026-03-06 12:56:38 +01:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
raw->canvas = util_clone_canvas(c);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return raw;
|
|
|
|
|
}
|