[Bf-blender-cvs] [bc02c5de497] master: Alternate fix for brush user count

Campbell Barton noreply at git.blender.org
Wed Jan 10 09:29:25 CET 2018


Commit: bc02c5de497c360449e4de68b3c1432f9bd204de
Author: Campbell Barton
Date:   Wed Jan 10 19:34:34 2018 +1100
Branches: master
https://developer.blender.org/rBbc02c5de497c360449e4de68b3c1432f9bd204de

Alternate fix for brush user count

This reverts change to BKE_brush_add,
callers now remove the extra user.

Note this isn't very convenient for callers but
is consistent with other ID types.

In the future we will probably remove this and have new
ID's created with zero users.

===================================================================

M	source/blender/blenkernel/intern/brush.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenloader/intern/versioning_defaults.c
M	source/blender/editors/sculpt_paint/paint_ops.c
M	source/blender/makesrna/intern/rna_main_api.c

===================================================================

diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 8ad9cbb2625..0f09b741330 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -148,12 +148,14 @@ void BKE_brush_init(Brush *brush)
 	BKE_brush_curve_preset(brush, CURVE_PRESET_SMOOTH);
 }
 
+/**
+ * \note Resulting brush will have two users: one as a fake user, another is assumed to be used by the caller.
+ .*/
 Brush *BKE_brush_add(Main *bmain, const char *name, short ob_mode)
 {
 	Brush *brush;
 
-	/* Use no refcount, fakeuser is added in 'BKE_brush_init' */
-	brush = BKE_libblock_alloc(bmain, ID_BR, name, LIB_ID_CREATE_NO_USER_REFCOUNT);
+	brush = BKE_libblock_alloc(bmain, ID_BR, name, 0);
 
 	BKE_brush_init(brush);
 
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 32813ffce25..d1e9516f6d2 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -529,8 +529,10 @@ void BKE_paint_init(Scene *sce, ePaintMode mode, const char col[3])
 		short ob_mode = BKE_paint_object_mode_from_paint_mode(mode);
 		brush = BKE_brush_first_search(G.main, ob_mode);
 
-		if (!brush)
+		if (!brush) {
 			brush = BKE_brush_add(G.main, "Brush", ob_mode);
+			id_us_min(&brush->id);  /* fake user only */
+		}
 		BKE_paint_brush_set(paint, brush);
 	}
 
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 3d3e73eb470..23ec1cd3231 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -242,6 +242,7 @@ void BLO_update_defaults_startup_blend(Main *bmain)
 		br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Fill");
 		if (!br) {
 			br = BKE_brush_add(bmain, "Fill", OB_MODE_TEXTURE_PAINT);
+			id_us_min(&br->id);  /* fake user only */
 			br->imagepaint_tool = PAINT_TOOL_FILL;
 			br->ob_mode = OB_MODE_TEXTURE_PAINT;
 		}
@@ -250,12 +251,14 @@ void BLO_update_defaults_startup_blend(Main *bmain)
 		br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Average");
 		if (!br) {
 			br = BKE_brush_add(bmain, "Average", OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT);
+			id_us_min(&br->id);  /* fake user only */
 			br->vertexpaint_tool = PAINT_BLEND_AVERAGE;
 			br->ob_mode = OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT;
 		}
 		br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Smear");
 		if (!br) {
 			br = BKE_brush_add(bmain, "Smear", OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT);
+			id_us_min(&br->id);  /* fake user only */
 			br->vertexpaint_tool = PAINT_BLEND_SMEAR;
 			br->ob_mode = OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT;
 		}
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 40210d63566..73cb31bb1bd 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -68,10 +68,13 @@ static int brush_add_exec(bContext *C, wmOperator *UNUSED(op))
 	Main *bmain = CTX_data_main(C);
 	ePaintMode mode = BKE_paintmode_get_active_from_context(C);
 
-	if (br)
+	if (br) {
 		br = BKE_brush_copy(bmain, br);
-	else
+	}
+	else {
 		br = BKE_brush_add(bmain, "Brush", BKE_paint_object_mode_from_paint_mode(mode));
+		id_us_min(&br->id);  /* fake user only */
+	}
 
 	BKE_paint_brush_set(paint, br);
 
@@ -376,6 +379,7 @@ static int brush_generic_tool_set(Main *bmain, Paint *paint, const int tool,
 
 	if (!brush && brush_tool(brush_orig, tool_offset) != tool && create_missing) {
 		brush = BKE_brush_add(bmain, tool_name, ob_mode);
+		id_us_min(&brush->id);  /* fake user only */
 		brush_tool_set(brush, tool_offset, tool);
 		brush->toggle_brush = brush_orig;
 	}
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 992e4f034ec..7e2ced81a6d 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -421,8 +421,7 @@ static Brush *rna_Main_brushes_new(Main *bmain, const char *name, int mode)
 	rna_idname_validate(name, safe_name);
 
 	Brush *brush = BKE_brush_add(bmain, safe_name, mode);
-	/* Brushes have a single fake user, leave this as is. */
-	// id_us_min(&brush->id);
+	id_us_min(&brush->id);
 	return brush;
 }



More information about the Bf-blender-cvs mailing list