Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-11-05 08:18:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-11-05 08:18:43 +0300
commit1b928c2d9a4b4b4a57046176912e0ae6d77f9a1d (patch)
treec19777cbf0b7108f7440a62eea228355488d29b9 /source/blender/blenkernel/intern/paint_toolslots.c
parent56917bcf731c6d3568d920a6ccbec524c25aaea1 (diff)
Paint: add tool offset & mode to runtime data
It was getting too impractical to call BKE_paint_brush_tool_info which needed to lookup the scene pointers. Now each store tool offset and brush mode in 'Paint.runtime'
Diffstat (limited to 'source/blender/blenkernel/intern/paint_toolslots.c')
-rw-r--r--source/blender/blenkernel/intern/paint_toolslots.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/source/blender/blenkernel/intern/paint_toolslots.c b/source/blender/blenkernel/intern/paint_toolslots.c
index 4f728778b29..61e0f03ce9e 100644
--- a/source/blender/blenkernel/intern/paint_toolslots.c
+++ b/source/blender/blenkernel/intern/paint_toolslots.c
@@ -42,15 +42,14 @@ void BKE_paint_toolslots_len_ensure(Paint *paint, int len)
}
}
-static void paint_toolslots_init(Main *bmain, Scene *scene, Paint *paint)
+static void paint_toolslots_init(Main *bmain, Paint *paint)
{
if (paint == NULL) {
return;
}
- uint tool_offset = 0;
- eObjectMode ob_mode = 0;
- bool ok = BKE_paint_brush_tool_info(scene, paint, &tool_offset, &ob_mode);
- BLI_assert(ok);
+ const uint tool_offset = paint->runtime.tool_offset;
+ const eObjectMode ob_mode = paint->runtime.ob_mode;
+ BLI_assert(tool_offset && ob_mode);
for (Brush *brush = bmain->brush.first; brush; brush = brush->id.next) {
if (brush->ob_mode & ob_mode) {
const int slot_index = *(char *)POINTER_OFFSET(brush, tool_offset);
@@ -67,20 +66,19 @@ void BKE_paint_toolslots_init_from_main(struct Main *bmain)
{
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
ToolSettings *ts = scene->toolsettings;
- paint_toolslots_init(bmain, scene, &ts->imapaint.paint);
- paint_toolslots_init(bmain, scene, &ts->sculpt->paint);
- paint_toolslots_init(bmain, scene, &ts->vpaint->paint);
- paint_toolslots_init(bmain, scene, &ts->wpaint->paint);
- paint_toolslots_init(bmain, scene, &ts->gp_paint->paint);
+ 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(Scene *scene, Paint *paint, Brush *brush)
+void BKE_paint_toolslots_brush_update_ex(Paint *paint, Brush *brush)
{
- uint tool_offset = 0;
- bool ok = BKE_paint_brush_tool_info(scene, paint, &tool_offset, NULL);
- BLI_assert(ok);
+ const uint tool_offset = paint->runtime.tool_offset;
+ BLI_assert(tool_offset != 0);
int slot_index = *(char *)POINTER_OFFSET(brush, tool_offset);
BKE_paint_toolslots_len_ensure(paint, slot_index + 1);
PaintToolSlot *tslot = &paint->tool_slots[slot_index];
@@ -89,25 +87,24 @@ void BKE_paint_toolslots_brush_update_ex(Scene *scene, Paint *paint, Brush *brus
tslot->brush = brush;
}
-void BKE_paint_toolslots_brush_update(Scene *scene, Paint *paint)
+void BKE_paint_toolslots_brush_update(Paint *paint)
{
if (paint->brush == NULL) {
return;
}
- BKE_paint_toolslots_brush_update_ex(scene, paint, paint->brush);
+ BKE_paint_toolslots_brush_update_ex(paint, paint->brush);
}
/**
* Run this to ensure brush types are set for each slot on entering modes
* (for new scenes for example).
*/
-void BKE_paint_toolslots_brush_validate(Main *bmain, Scene *scene, Paint *paint)
+void BKE_paint_toolslots_brush_validate(Main *bmain, Paint *paint)
{
/* Clear slots with invalid slots or mode (unlikely but possible). */
- uint tool_offset = 0;
- eObjectMode ob_mode = 0;
- bool ok = BKE_paint_brush_tool_info(scene, paint, &tool_offset, &ob_mode);
- BLI_assert(ok);
+ const uint tool_offset = paint->runtime.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) {
@@ -120,8 +117,8 @@ void BKE_paint_toolslots_brush_validate(Main *bmain, Scene *scene, Paint *paint)
}
/* Unlikely but possible the active brush is not currently using a slot. */
- BKE_paint_toolslots_brush_update(scene, paint);
+ BKE_paint_toolslots_brush_update(paint);
/* Fill slots from brushes. */
- paint_toolslots_init(bmain, scene, paint);
+ paint_toolslots_init(bmain, paint);
}