[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