Files
armorpaint/paint/sources/slot_brush.c
T
2026-03-07 21:12:59 +01:00

33 lines
947 B
C

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;
for (i32 i = 0; i < project_brushes->length; ++i) {
slot_brush_t *brush = project_brushes->buffer[i];
if (brush->id >= raw->id) {
raw->id = brush->id + 1;
}
}
if (c == NULL) {
if (slot_brush_default_canvas == NULL) { // Synchronous
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);
}
raw->canvas = armpack_decode(slot_brush_default_canvas);
raw->canvas = util_clone_canvas(raw->canvas); // Clone to create GC references
i32 id = (raw->id + 1);
raw->canvas->name = string_join("Brush ", i32_to_string(id));
}
else {
raw->canvas = util_clone_canvas(c);
}
return raw;
}