[Bf-blender-cvs] [4f6c99a] GPencil_EditStrokes: GPencil API - API for getting active GP data without context

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


Commit: 4f6c99a53ce392b3d0c5ba4b214843df7618d4be
Author: Joshua Leung
Date:   Mon Sep 29 00:12:32 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB4f6c99a53ce392b3d0c5ba4b214843df7618d4be

GPencil API - API for getting active GP data without context

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

M	source/blender/editors/gpencil/gpencil_edit.c
M	source/blender/editors/include/ED_gpencil.h

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

diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 666fe35..365d61a 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -86,35 +86,33 @@
 /* ************************************************ */
 /* Context Wrangling... */
 
-/* Get pointer to active Grease Pencil datablock, and an RNA-pointer to trace back to whatever owns it */
-bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
+/* Get pointer to active Grease Pencil datablock, and an RNA-pointer to trace back to whatever owns it,
+ * when context info is not available.
+ */
+bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrArea *sa, Object *ob, PointerRNA *ptr)
 {
-	ID *screen_id = (ID *)CTX_wm_screen(C);
-	Scene *scene = CTX_data_scene(C);
-	ScrArea *sa = CTX_wm_area(C);
-
 	/* if there's an active area, check if the particular editor may
 	 * have defined any special Grease Pencil context for editing...
 	 */
 	if (sa) {
+		SpaceLink *sl = sa->spacedata.first;
+		
 		switch (sa->spacetype) {
 			case SPACE_VIEW3D: /* 3D-View */
 			{
-				Object *ob = CTX_data_active_object(C);
-
 				/* TODO: we can include other data-types such as bones later if need be... */
 
 				/* just in case no active/selected object */
 				if (ob && (ob->flag & SELECT)) {
 					/* for now, as long as there's an object, default to using that in 3D-View */
-					if (ptr) RNA_id_pointer_create(&ob->id, ptr);
+					if (ptr) RNA_id_pointer_create((ID *)ob, ptr);
 					return &ob->gpd;
 				}
 				break;
 			}
 			case SPACE_NODE: /* Nodes Editor */
 			{
-				SpaceNode *snode = (SpaceNode *)CTX_wm_space_data(C);
+				SpaceNode *snode = (SpaceNode *)sl;
 
 				/* return the GP data for the active node block/node */
 				if (snode && snode->nodetree) {
@@ -128,7 +126,7 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
 			}
 			case SPACE_SEQ: /* Sequencer */
 			{
-				SpaceSeq *sseq = (SpaceSeq *)CTX_wm_space_data(C);
+				SpaceSeq *sseq = (SpaceSeq *)sl;
 
 				/* for now, Grease Pencil data is associated with the space (actually preview region only) */
 				/* XXX our convention for everything else is to link to data though... */
@@ -137,7 +135,7 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
 			}
 			case SPACE_IMAGE: /* Image/UV Editor */
 			{
-				SpaceImage *sima = (SpaceImage *)CTX_wm_space_data(C);
+				SpaceImage *sima = (SpaceImage *)sl;
 
 				/* for now, Grease Pencil data is associated with the space... */
 				/* XXX our convention for everything else is to link to data though... */
@@ -146,7 +144,7 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
 			}
 			case SPACE_CLIP: /* Nodes Editor */
 			{
-				SpaceClip *sc = (SpaceClip *)CTX_wm_space_data(C);
+				SpaceClip *sc = (SpaceClip *)sl;
 				MovieClip *clip = ED_space_clip_get_clip(sc);
 
 				if (clip) {
@@ -180,6 +178,26 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
 	return (scene) ? &scene->gpd : NULL;
 }
 
+/* Get pointer to active Grease Pencil datablock, and an RNA-pointer to trace back to whatever owns it */
+bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
+{
+	ID *screen_id = (ID *)CTX_wm_screen(C);
+	Scene *scene = CTX_data_scene(C);
+	ScrArea *sa = CTX_wm_area(C);
+	Object *ob = CTX_data_active_object(C);
+	
+	return ED_gpencil_data_get_pointers_direct(screen_id, scene, sa, ob, ptr);
+}
+
+/* -------------------------------------------------------- */
+
+/* Get the active Grease Pencil datablock, when context is not available */
+bGPdata *ED_gpencil_data_get_active_direct(ID *screen_id, Scene *scene, ScrArea *sa, Object *ob)
+{
+	bGPdata **gpd_ptr = ED_gpencil_data_get_pointers_direct(screen_id, scene, sa, ob, NULL);
+	return (gpd_ptr) ? *(gpd_ptr) : NULL;
+}
+
 /* Get the active Grease Pencil datablock */
 bGPdata *ED_gpencil_data_get_active(const bContext *C)
 {
@@ -187,6 +205,8 @@ bGPdata *ED_gpencil_data_get_active(const bContext *C)
 	return (gpd_ptr) ? *(gpd_ptr) : NULL;
 }
 
+/* -------------------------------------------------------- */
+
 bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, View3D *v3d)
 {
 	Base *base = scene->basact;
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index f538a89..332c7be 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -30,6 +30,7 @@
 #ifndef __ED_GPENCIL_H__
 #define __ED_GPENCIL_H__
 
+struct ID;
 struct ListBase;
 struct bContext;
 struct bScreen;
@@ -38,6 +39,7 @@ struct ARegion;
 struct View3D;
 struct SpaceNode;
 struct SpaceSeq;
+struct Object;
 struct bGPdata;
 struct bGPDlayer;
 struct bGPDframe;
@@ -65,8 +67,18 @@ typedef struct tGPspoint {
 
 /* ----------- Grease Pencil Tools/Context ------------- */
 
+/* Context-dependent */
 struct bGPdata **ED_gpencil_data_get_pointers(const struct bContext *C, struct PointerRNA *ptr);
 struct bGPdata  *ED_gpencil_data_get_active(const struct bContext *C);
+
+/* Context independent (i.e. each required part is passed in instead) */
+struct bGPdata **ED_gpencil_data_get_pointers_direct(struct ID *screen_id, struct Scene *scene,
+                                                     struct ScrArea *sa, struct Object *ob,
+                                                     struct PointerRNA *ptr);
+struct bGPdata *ED_gpencil_data_get_active_direct(struct ID *screen_id, struct Scene *scene,
+                                                  struct ScrArea *sa, struct Object *ob);
+
+/* 3D View */
 struct bGPdata  *ED_gpencil_data_get_active_v3d(struct Scene *scene, struct View3D *v3d);
 
 /* ----------- Grease Pencil Operators ----------------- */




More information about the Bf-blender-cvs mailing list