[Bf-blender-cvs] [d88288b] GPencil_EditStrokes: GPencil Context Utility API's now work

Joshua Leung noreply at git.blender.org
Sat Oct 11 14:39:23 CEST 2014


Commit: d88288b2090bd4b3368044f89e87bf8b637d409b
Author: Joshua Leung
Date:   Sun Oct 12 01:16:42 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rBd88288b2090bd4b3368044f89e87bf8b637d409b

GPencil Context Utility API's now work

To work around the bizarre "active object == NULL" issues when doing context
lookups, we now use the "context-free" direct-access API method for getting
the active Grease Pencil data.

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

M	release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M	source/blender/editors/screen/screen_context.c

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

diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 57be8a6..5bda423 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -44,7 +44,7 @@ class GreasePencilPanel():
         row.prop(context.tool_settings, "use_grease_pencil_sessions", text="Continuous Drawing")
 
         col.separator()
-		
+
         col.label(text="Select Strokes:")
         subcol = col.column(align=True)
         subcol.active = bool(context.editable_gpencil_strokes)
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 3e7cf1c..a52a37b 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -77,6 +77,7 @@ const char *screen_context_dir[] = {
 int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result)
 {
 	bScreen *sc = CTX_wm_screen(C);
+	ScrArea *sa = CTX_wm_area(C);
 	Scene *scene = sc->scene;
 	Base *base;
 	unsigned int lay = scene->lay;
@@ -402,7 +403,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		 * (as outlined above - see Campbell's #ifdefs). That causes the get active function to fail when 
 		 * called from context. For that reason, we end up using an alternative where we pass everything in!
 		 */
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
 		
 		if (gpd) {
 			CTX_data_id_pointer_set(result, &gpd->id);
@@ -410,10 +411,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		}
 	}
 	else if (CTX_data_equals(member, "active_gpencil_layer")) {
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		/* XXX: see comment for gpencil_data case... */
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
 		
 		if (gpd) {
 			bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+			
 			if (gpl) {
 				CTX_data_pointer_set(result, &gpd->id, &RNA_GPencilLayer, gpl);
 				return 1;
@@ -421,10 +424,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		}
 	}
 	else if (CTX_data_equals(member, "active_gpencil_frame")) {
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		/* XXX: see comment for gpencil_data case... */
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
 		
 		if (gpd) {
 			bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+			
 			if (gpl) {
 				CTX_data_pointer_set(result, &gpd->id, &RNA_GPencilLayer, gpl->actframe);
 				return 1;
@@ -432,9 +437,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		}
 	}
 	else if (CTX_data_equals(member, "visible_gpencil_layers")) {
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		/* XXX: see comment for gpencil_data case... */
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
+		
 		if (gpd) {
 			bGPDlayer *gpl;
+			
 			for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 				if ((gpl->flag & GP_LAYER_HIDE) == 0) {
 					CTX_data_list_add(result, &gpd->id, &RNA_GPencilLayer, gpl);
@@ -445,9 +453,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		}
 	}
 	else if (CTX_data_equals(member, "editable_gpencil_layers")) {
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		/* XXX: see comment for gpencil_data case... */
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
+		
 		if (gpd) {
 			bGPDlayer *gpl;
+			
 			for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 				if ((gpl->flag & (GP_LAYER_HIDE | GP_LAYER_LOCKED)) == 0) {
 					CTX_data_list_add(result, &gpd->id, &RNA_GPencilLayer, gpl);
@@ -458,9 +469,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		}
 	}
 	else if (CTX_data_equals(member, "editable_gpencil_strokes")) {
-		bGPdata *gpd = ED_gpencil_data_get_active(C);
+		/* XXX: see comment for gpencil_data case... */
+		bGPdata *gpd = ED_gpencil_data_get_active_direct((ID *)sc, scene, sa, obact);
+		
 		if (gpd) {
 			bGPDlayer *gpl;
+			
 			for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 				if ((gpl->flag & (GP_LAYER_HIDE | GP_LAYER_LOCKED)) == 0 && (gpl->actframe)) {
 					bGPDframe *gpf = gpl->actframe;




More information about the Bf-blender-cvs mailing list