diff options
Diffstat (limited to 'source/blender/blenkernel/intern/paint_toolslots.c')
-rw-r--r-- | source/blender/blenkernel/intern/paint_toolslots.c | 138 |
1 files changed, 68 insertions, 70 deletions
diff --git a/source/blender/blenkernel/intern/paint_toolslots.c b/source/blender/blenkernel/intern/paint_toolslots.c index 24b801ce67f..942d5e758f3 100644 --- a/source/blender/blenkernel/intern/paint_toolslots.c +++ b/source/blender/blenkernel/intern/paint_toolslots.c @@ -35,65 +35,64 @@ void BKE_paint_toolslots_len_ensure(Paint *paint, int len) { - /* Tool slots are 'uchar'. */ - BLI_assert(len <= UCHAR_MAX); - if (paint->tool_slots_len < len) { - paint->tool_slots = MEM_recallocN(paint->tool_slots, sizeof(*paint->tool_slots) * len); - paint->tool_slots_len = len; - } + /* Tool slots are 'uchar'. */ + BLI_assert(len <= UCHAR_MAX); + if (paint->tool_slots_len < len) { + paint->tool_slots = MEM_recallocN(paint->tool_slots, sizeof(*paint->tool_slots) * len); + paint->tool_slots_len = len; + } } static void paint_toolslots_init(Main *bmain, Paint *paint) { - if (paint == NULL) { - return; - } - const eObjectMode ob_mode = paint->runtime.ob_mode; - BLI_assert(paint->runtime.tool_offset && ob_mode); - for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) { - if (brush->ob_mode & ob_mode) { - const int slot_index = BKE_brush_tool_get(brush, paint); - BKE_paint_toolslots_len_ensure(paint, slot_index + 1); - if (paint->tool_slots[slot_index].brush == NULL) { - paint->tool_slots[slot_index].brush = brush; - id_us_plus(&brush->id); - } - } - } + if (paint == NULL) { + return; + } + const eObjectMode ob_mode = paint->runtime.ob_mode; + BLI_assert(paint->runtime.tool_offset && ob_mode); + for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) { + if (brush->ob_mode & ob_mode) { + const int slot_index = BKE_brush_tool_get(brush, paint); + BKE_paint_toolslots_len_ensure(paint, slot_index + 1); + if (paint->tool_slots[slot_index].brush == NULL) { + paint->tool_slots[slot_index].brush = brush; + id_us_plus(&brush->id); + } + } + } } void BKE_paint_toolslots_init_from_main(struct Main *bmain) { - for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { - ToolSettings *ts = scene->toolsettings; - paint_toolslots_init(bmain, &ts->imapaint.paint); - paint_toolslots_init(bmain, &ts->sculpt->paint); - paint_toolslots_init(bmain, &ts->vpaint->paint); - paint_toolslots_init(bmain, &ts->wpaint->paint); - paint_toolslots_init(bmain, &ts->gp_paint->paint); - } + for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { + ToolSettings *ts = scene->toolsettings; + paint_toolslots_init(bmain, &ts->imapaint.paint); + paint_toolslots_init(bmain, &ts->sculpt->paint); + paint_toolslots_init(bmain, &ts->vpaint->paint); + paint_toolslots_init(bmain, &ts->wpaint->paint); + paint_toolslots_init(bmain, &ts->gp_paint->paint); + } } - void BKE_paint_toolslots_brush_update_ex(Paint *paint, Brush *brush) { - const uint tool_offset = paint->runtime.tool_offset; - UNUSED_VARS_NDEBUG(tool_offset); - BLI_assert(tool_offset != 0); - const int slot_index = BKE_brush_tool_get(brush, paint); - BKE_paint_toolslots_len_ensure(paint, slot_index + 1); - PaintToolSlot *tslot = &paint->tool_slots[slot_index]; - id_us_plus(&brush->id); - id_us_min(&tslot->brush->id); - tslot->brush = brush; + const uint tool_offset = paint->runtime.tool_offset; + UNUSED_VARS_NDEBUG(tool_offset); + BLI_assert(tool_offset != 0); + const int slot_index = BKE_brush_tool_get(brush, paint); + BKE_paint_toolslots_len_ensure(paint, slot_index + 1); + PaintToolSlot *tslot = &paint->tool_slots[slot_index]; + id_us_plus(&brush->id); + id_us_min(&tslot->brush->id); + tslot->brush = brush; } void BKE_paint_toolslots_brush_update(Paint *paint) { - if (paint->brush == NULL) { - return; - } - BKE_paint_toolslots_brush_update_ex(paint, paint->brush); + if (paint->brush == NULL) { + return; + } + BKE_paint_toolslots_brush_update_ex(paint, paint->brush); } /** @@ -102,35 +101,34 @@ void BKE_paint_toolslots_brush_update(Paint *paint) */ void BKE_paint_toolslots_brush_validate(Main *bmain, Paint *paint) { - /* Clear slots with invalid slots or mode (unlikely but possible). */ - const uint tool_offset = paint->runtime.tool_offset; - UNUSED_VARS_NDEBUG(tool_offset); - const eObjectMode ob_mode = paint->runtime.ob_mode; - BLI_assert(tool_offset && ob_mode); - for (int i = 0; i < paint->tool_slots_len; i++) { - PaintToolSlot *tslot = &paint->tool_slots[i]; - if (tslot->brush) { - if ((i != BKE_brush_tool_get(tslot->brush, paint)) || - (tslot->brush->ob_mode & ob_mode) == 0) - { - id_us_min(&tslot->brush->id); - tslot->brush = NULL; - } - } - } - - /* Unlikely but possible the active brush is not currently using a slot. */ - BKE_paint_toolslots_brush_update(paint); - - /* Fill slots from brushes. */ - paint_toolslots_init(bmain, paint); + /* Clear slots with invalid slots or mode (unlikely but possible). */ + const uint tool_offset = paint->runtime.tool_offset; + UNUSED_VARS_NDEBUG(tool_offset); + const eObjectMode ob_mode = paint->runtime.ob_mode; + BLI_assert(tool_offset && ob_mode); + for (int i = 0; i < paint->tool_slots_len; i++) { + PaintToolSlot *tslot = &paint->tool_slots[i]; + if (tslot->brush) { + if ((i != BKE_brush_tool_get(tslot->brush, paint)) || + (tslot->brush->ob_mode & ob_mode) == 0) { + id_us_min(&tslot->brush->id); + tslot->brush = NULL; + } + } + } + + /* Unlikely but possible the active brush is not currently using a slot. */ + BKE_paint_toolslots_brush_update(paint); + + /* Fill slots from brushes. */ + paint_toolslots_init(bmain, paint); } Brush *BKE_paint_toolslots_brush_get(Paint *paint, int slot_index) { - if (slot_index < paint->tool_slots_len) { - PaintToolSlot *tslot = &paint->tool_slots[slot_index]; - return tslot->brush; - } - return NULL; + if (slot_index < paint->tool_slots_len) { + PaintToolSlot *tslot = &paint->tool_slots[slot_index]; + return tslot->brush; + } + return NULL; } |