WIP: Brush assets project #106303

Draft
Julian Eisel wants to merge 381 commits from brush-assets-project into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
1 changed files with 20 additions and 18 deletions
Showing only changes of commit 5fc94a3872 - Show all commits

View File

@ -673,48 +673,50 @@ void BKE_paint_brush_set(Paint *p, Brush *br)
} }
} }
static void paint_brush_asset_update(Paint *p, static void paint_brush_asset_update(Paint &paint,
Brush *br, Brush *brush,
AssetWeakReference *brush_asset_reference) AssetWeakReference *brush_asset_reference)
{ {
if (p->brush_asset_reference != nullptr) { if (paint.brush_asset_reference != nullptr) {
BKE_asset_weak_reference_free(&p->brush_asset_reference); BKE_asset_weak_reference_free(&paint.brush_asset_reference);
} }
if (br == nullptr || br != p->brush || !ID_IS_OVERRIDE_LIBRARY_REAL(p->brush) || if (brush == nullptr || brush != paint.brush || !ID_IS_OVERRIDE_LIBRARY_REAL(paint.brush) ||
!(ID_IS_ASSET(p->brush) || ID_IS_ASSET(p->brush->id.override_library->reference))) !(ID_IS_ASSET(paint.brush) || ID_IS_ASSET(paint.brush->id.override_library->reference)))
{ {
BKE_asset_weak_reference_free(&brush_asset_reference); BKE_asset_weak_reference_free(&brush_asset_reference);
return; return;
} }
p->brush_asset_reference = brush_asset_reference; paint.brush_asset_reference = brush_asset_reference;
} }
void BKE_paint_brush_asset_set(Paint *p, Brush *br, AssetWeakReference *weak_asset_reference) void BKE_paint_brush_asset_set(Paint *paint,
Brush *brush,
AssetWeakReference *weak_asset_reference)
{ {
BKE_paint_brush_set(p, br); BKE_paint_brush_set(paint, brush);
paint_brush_asset_update(p, br, weak_asset_reference); paint_brush_asset_update(*paint, brush, weak_asset_reference);
} }
void BKE_paint_brush_asset_restore(Main *bmain, Paint *p) void BKE_paint_brush_asset_restore(Main *bmain, Paint *paint)
{ {
if (p->brush != nullptr) { if (paint->brush != nullptr) {
return; return;
} }
if (p->brush_asset_reference == nullptr) { if (paint->brush_asset_reference == nullptr) {
return; return;
} }
AssetWeakReference *brush_asset_reference = p->brush_asset_reference; AssetWeakReference *brush_asset_reference = paint->brush_asset_reference;
p->brush_asset_reference = nullptr; paint->brush_asset_reference = nullptr;
Brush *brush_asset = BKE_brush_asset_runtime_ensure(bmain, brush_asset_reference); Brush *brush_asset = BKE_brush_asset_runtime_ensure(bmain, brush_asset_reference);
/* Will either re-assign the brush_asset_reference to `p`, or free it if loading a brush ID from /* Will either re-assign the brush_asset_reference to `paint`, or free it if loading a brush ID
* it failed. */ * from it failed. */
BKE_paint_brush_asset_set(p, brush_asset, brush_asset_reference); BKE_paint_brush_asset_set(paint, brush_asset, brush_asset_reference);
} }
void BKE_paint_runtime_init(const ToolSettings *ts, Paint *paint) void BKE_paint_runtime_init(const ToolSettings *ts, Paint *paint)