[Bf-blender-cvs] [2aa87cdf679] greasepencil-object: Make BKE_gpencil_data_addnew() accept Main as an argument instead of using G.main

Joshua Leung noreply at git.blender.org
Sat Nov 4 05:47:43 CET 2017


Commit: 2aa87cdf679a4c8ac8c573789c1829442257820c
Author: Joshua Leung
Date:   Sun Oct 29 23:52:00 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB2aa87cdf679a4c8ac8c573789c1829442257820c

Make BKE_gpencil_data_addnew() accept Main as an argument instead of using G.main

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/space_view3d/view3d_ruler.c
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 77cbecb12eb..ec95e20bb9f 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -81,7 +81,7 @@ void BKE_gpencil_stroke_sync_selection(struct bGPDstroke *gps);
 struct bGPDframe *BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
 struct bGPDframe *BKE_gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe);
 struct bGPDlayer *BKE_gpencil_layer_addnew(struct bGPdata *gpd, const char *name, bool setactive);
-struct bGPdata   *BKE_gpencil_data_addnew(const char name[]);
+struct bGPdata   *BKE_gpencil_data_addnew(struct Main *bmain, const char name[]);
 
 struct bGPDframe *BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src);
 struct bGPDframe *BKE_gpencil_frame_color_duplicate(const struct bContext *C, const struct bGPDframe *gpf_src);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 5eb806baf4d..9d2a21a29b4 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -728,12 +728,12 @@ bGPDbrush *BKE_gpencil_brush_addnew(ToolSettings *ts, const char *name, bool set
 }
 
 /* add a new gp-datablock */
-bGPdata *BKE_gpencil_data_addnew(const char name[])
+bGPdata *BKE_gpencil_data_addnew(Main *bmain, const char name[])
 {
 	bGPdata *gpd;
 	
 	/* allocate memory for a new block */
-	gpd = BKE_libblock_alloc(G.main, ID_GD, name, 0);
+	gpd = BKE_libblock_alloc(bmain, ID_GD, name, 0);
 	
 	/* initial settings */
 	gpd->flag = (GP_DATA_DISPINFO | GP_DATA_EXPAND);
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index bf7c4c7febf..c1619ae22a7 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -96,10 +96,12 @@ static int gp_data_add_exec(bContext *C, wmOperator *op)
 	}
 	else {
 		/* decrement user count and add new datablock */
+		/* TODO: if a datablock exists, we should make a copy of it instead of starting fresh (as in other areas) */
+		Main *bmain = CTX_data_main(C);
 		bGPdata *gpd = (*gpd_ptr);
 		
-		id_us_min(&gpd->id);
-		*gpd_ptr = BKE_gpencil_data_addnew(DATA_("GPencil"));
+		id_us_min((ID *)gpd);
+		*gpd_ptr = BKE_gpencil_data_addnew(bmain, DATA_("GPencil"));
 
 		/* add default sets of colors and brushes */
 		ED_gpencil_add_defaults(C);
@@ -188,8 +190,9 @@ static int gp_layer_add_exec(bContext *C, wmOperator *op)
 		BKE_report(op->reports, RPT_ERROR, "Nowhere for grease pencil data to go");
 		return OPERATOR_CANCELLED;
 	}
-	if (*gpd_ptr == NULL)
-		*gpd_ptr = BKE_gpencil_data_addnew(DATA_("GPencil"));
+	if (*gpd_ptr == NULL) {
+		*gpd_ptr = BKE_gpencil_data_addnew(CTX_data_main(C), DATA_("GPencil"));
+	}
 	
 	/* add default sets of colors and brushes */
 	ED_gpencil_add_defaults(C);
@@ -1591,14 +1594,9 @@ void GPENCIL_OT_sculpt_select(wmOperatorType *ot)
 
 static int gp_convert_old_palettes_poll(bContext *C)
 {
-	/* TODO: need better poll*/
+	/* TODO: need better poll */
 	Main *bmain = CTX_data_main(C);
-	if (bmain->gpencil.first) {
-		return true;
-	}
-	else { 
-		return false; 
-	}
+	return bmain->gpencil.first != NULL;
 }
 
 /* convert old animation data to new format */
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 1562f2e0855..67da2408991 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1555,7 +1555,7 @@ static bool gp_session_initdata(bContext *C, tGPsdata *p)
 	else {
 		/* if no existing GPencil block exists, add one */
 		if (*gpd_ptr == NULL)
-			*gpd_ptr = BKE_gpencil_data_addnew("GPencil");
+			*gpd_ptr = BKE_gpencil_data_addnew(CTX_data_main(C), "GPencil");
 		p->gpd = *gpd_ptr;
 	}
 	
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index b0736104635..cd0dc51838b 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1015,7 +1015,8 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
 	ToolSettings *ts = CTX_data_tool_settings(C);
 	ts->gpencil_src = GP_TOOL_SOURCE_OBJECT;
 	/* add a grease pencil datablock */	
-	ob->data = BKE_gpencil_data_addnew("GPencil");
+	// XXX: This initialisation should be handled when initialising the object...
+	ob->data = BKE_gpencil_data_addnew(CTX_data_main(C), DATA_("GPencil"));
 	
 	/* if type is monkey, create a 2D Suzanne */
 	// TODO: create with offset to cursor?
diff --git a/source/blender/editors/space_view3d/view3d_ruler.c b/source/blender/editors/space_view3d/view3d_ruler.c
index 7150765f187..5163297a936 100644
--- a/source/blender/editors/space_view3d/view3d_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_ruler.c
@@ -39,6 +39,7 @@
 #include "BLT_translation.h"
 
 #include "BKE_context.h"
+#include "BKE_main.h"
 #include "BKE_unit.h"
 #include "BKE_gpencil.h"
 #include "BKE_paint.h"
@@ -298,6 +299,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
 static bool view3d_ruler_to_gpencil(bContext *C, RulerInfo *ruler_info)
 {
 	Scene *scene = CTX_data_scene(C);
+	Main *bmain = CTX_data_main(C);
 	bGPDlayer *gpl;
 	bGPDframe *gpf;
 	bGPDstroke *gps;
@@ -308,8 +310,9 @@ static bool view3d_ruler_to_gpencil(bContext *C, RulerInfo *ruler_info)
 	const char *ruler_name = RULER_ID;
 	bool changed = false;
 
+	/* FIXME: This needs to be reviewed. Should it keep being done like this? */
 	if (scene->gpd == NULL) {
-		scene->gpd = BKE_gpencil_data_addnew("GPencil");
+		scene->gpd = BKE_gpencil_data_addnew(bmain, "Ruler GPencil");
 	}
 
 	gpl = BLI_findstring(&scene->gpd->layers, ruler_name, offsetof(bGPDlayer, info));
@@ -320,7 +323,7 @@ static bool view3d_ruler_to_gpencil(bContext *C, RulerInfo *ruler_info)
 	}
 
 	/* try to get active palette or create a new one */
-	palslot  = BKE_gpencil_paletteslot_validate(CTX_data_main(C), scene->gpd);
+	palslot  = BKE_gpencil_paletteslot_validate(bmain, scene->gpd);
 	palette  = palslot->palette;
 	
 	/* try to get color with the ruler name or create a new one */
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 52b953549ba..f27b1b84555 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -1802,7 +1802,6 @@ void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop)
 	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
 
 	func = RNA_def_function(srna, "new", "BKE_gpencil_data_addnew");
-	RNA_def_function_flag(func, FUNC_NO_SELF);
 	parm = RNA_def_string(func, "name", "GreasePencil", 0, "", "New name for the data-block");
 	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
 	/* return type */



More information about the Bf-blender-cvs mailing list