[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18157] branches/blender2.5/blender/source /blender/editors: 2.5 - Transform Code for Animation Editors (Part 1)

Joshua Leung aligorith at gmail.com
Tue Dec 30 01:28:12 CET 2008


Revision: 18157
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18157
Author:   aligorith
Date:     2008-12-30 01:28:11 +0100 (Tue, 30 Dec 2008)

Log Message:
-----------
2.5 - Transform Code for Animation Editors (Part 1)

Remove context pointer from transform code. Solved the need for this by modifying the code that needed it.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/transform/transform.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.h
    branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2008-12-30 00:28:11 UTC (rev 18157)
@@ -99,13 +99,13 @@
 
 /* Get shapekey data being edited (for Action Editor -> ShapeKey mode) */
 /* Note: there's a similar function in key.c (ob_get_key) */
-Key *actedit_get_shapekeys (const bContext *C, SpaceAction *saction) 
+Key *actedit_get_shapekeys (bAnimContext *ac, SpaceAction *saction) 
 {
-    Scene *scene= CTX_data_scene(C);
+    Scene *scene= ac->scene;
     Object *ob;
     Key *key;
 	
-    ob = OBACT;  // XXX er...
+    ob = OBACT;
     if (ob == NULL) 
 		return NULL;
 	
@@ -140,7 +140,7 @@
 }
 
 /* Get data being edited in Action Editor (depending on current 'mode') */
-static short actedit_get_context (const bContext *C, bAnimContext *ac, SpaceAction *saction)
+static short actedit_get_context (bAnimContext *ac, SpaceAction *saction)
 {
 	/* sync settings with current view status, then return appropriate data */
 	switch (saction->mode) {
@@ -161,14 +161,15 @@
 			
 		case SACTCONT_SHAPEKEY: /* 'ShapeKey Editor' */
 			ac->datatype= ANIMCONT_SHAPEKEY;
-			ac->data= actedit_get_shapekeys(C, saction);
+			ac->data= actedit_get_shapekeys(ac, saction);
 			
 			ac->mode= saction->mode;
 			return 1;
 			
 		case SACTCONT_GPENCIL: /* Grease Pencil */ // XXX review how this mode is handled...
 			ac->datatype=ANIMCONT_GPENCIL;
-			ac->data= CTX_wm_screen(C); // FIXME: add that dopesheet type thing here!
+			//ac->data= CTX_wm_screen(C); // FIXME: add that dopesheet type thing here!
+			ac->data= NULL; // !!!
 			
 			ac->mode= saction->mode;
 			return 1;
@@ -195,7 +196,7 @@
 /* ----------- Private Stuff - IPO Editor ------------- */
 
 /* Get data being edited in IPO Editor (depending on current 'mode') */
-static short ipoedit_get_context (const bContext *C, bAnimContext *ac, SpaceIpo *sipo)
+static short ipoedit_get_context (bAnimContext *ac, SpaceIpo *sipo)
 {
 	// XXX FIXME...
 	return 0;
@@ -203,44 +204,29 @@
 
 /* ----------- Public API --------------- */
 
-/* Obtain current anim-data context from Blender Context info 
+/* Obtain current anim-data context, given that context info from Blender context has already been set 
  *	- AnimContext to write to is provided as pointer to var on stack so that we don't have
  *	  allocation/freeing costs (which are not that avoidable with channels).
- *	- 
  */
-short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
+short ANIM_animdata_context_getdata (bAnimContext *ac)
 {
-	ScrArea *sa= CTX_wm_area(C);
-	ARegion *ar= CTX_wm_region(C);
-	Scene *scene= CTX_data_scene(C);
+	ScrArea *sa= ac->sa;
 	short ok= 0;
 	
-	/* clear old context info */
-	if (ac == NULL) return 0;
-	memset(ac, 0, sizeof(bAnimContext));
-	
-	/* set default context settings */
-	ac->scene= scene;
-	ac->obact= (scene && scene->basact)?  scene->basact->object : NULL;
-	ac->sa= sa;
-	ac->ar= ar;
-	ac->spacetype= (sa) ? sa->spacetype : 0;
-	ac->regiontype= (ar) ? ar->regiontype : 0;
-	
 	/* context depends on editor we are currently in */
 	if (sa) {
 		switch (sa->spacetype) {
 			case SPACE_ACTION:
 			{
-				SpaceAction *saction= (SpaceAction *)CTX_wm_space_data(C);
-				ok= actedit_get_context(C, ac, saction);
+				SpaceAction *saction= (SpaceAction *)sa->spacedata.first;
+				ok= actedit_get_context(ac, saction);
 			}
 				break;
 				
 			case SPACE_IPO:
 			{
-				SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
-				ok= ipoedit_get_context(C, ac, sipo);
+				SpaceIpo *sipo= (SpaceIpo *)sa->spacedata.first;
+				ok= ipoedit_get_context(ac, sipo);
 			}
 				break;
 		}
@@ -253,6 +239,33 @@
 		return 0;
 }
 
+/* Obtain current anim-data context from Blender Context info 
+ *	- AnimContext to write to is provided as pointer to var on stack so that we don't have
+ *	  allocation/freeing costs (which are not that avoidable with channels).
+ *	- Clears data and sets the information from Blender Context which is useful
+ */
+short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
+{
+	ScrArea *sa= CTX_wm_area(C);
+	ARegion *ar= CTX_wm_region(C);
+	Scene *scene= CTX_data_scene(C);
+	
+	/* clear old context info */
+	if (ac == NULL) return 0;
+	memset(ac, 0, sizeof(bAnimContext));
+	
+	/* get useful default context settings from context */
+	ac->scene= scene;
+	ac->obact= (scene && scene->basact)?  scene->basact->object : NULL;
+	ac->sa= sa;
+	ac->ar= ar;
+	ac->spacetype= (sa) ? sa->spacetype : 0;
+	ac->regiontype= (ar) ? ar->regiontype : 0;
+	
+	/* get data context info */
+	return ANIM_animdata_context_getdata(ac);
+}
+
 /* ************************************************************ */
 /* Blender Data <-- Filter --> Channels to be operated on */
 

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2008-12-30 00:28:11 UTC (rev 18157)
@@ -229,6 +229,12 @@
  */
 short ANIM_animdata_get_context(const struct bContext *C, bAnimContext *ac);
 
+/* Obtain current anim-data context (from Animation Editor) given 
+ * that Blender Context info has already been set. 
+ * Returns whether the operation was successful.
+ */
+short ANIM_animdata_context_getdata(bAnimContext *ac);
+
 /* ************************************************ */
 /* DRAWING API */
 // XXX should this get its own header file?

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c	2008-12-30 00:28:11 UTC (rev 18157)
@@ -1107,8 +1107,6 @@
 #endif
 		return 1;
 	}
-	
-	t->context= NULL;
 	t->event = NULL;
 	
 	return 0;

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h	2008-12-30 00:28:11 UTC (rev 18157)
@@ -234,7 +234,6 @@
 	/*************** NEW STUFF *********************/
 
 	float		values[4];
-	struct bContext *context;
 	void		*view;
 	struct ScrArea	*sa;
 	struct ARegion	*ar;

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c	2008-12-30 00:28:11 UTC (rev 18157)
@@ -2575,6 +2575,8 @@
 	
 	/* flush to 2d vector from internally used 3d vector */
 	for (a=0, td= t->data2d; a<t->total; a++, td++) {
+		// FIXME: autosnap needs to be here...
+		
 		/* we need to unapply the nla-scaling from the time in some situations */
 		if (NLA_IPO_SCALED)
 			td->loc2d[0]= get_action_frame(OBACT, td->loc[0]);
@@ -3974,19 +3976,23 @@
 	
 	if (t->spacetype == SPACE_ACTION) {
 		SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first;
-		Scene *scene= NULL;
+		Scene *scene;
 		bAnimContext ac;
 		
-		/* determine what type of data we are operating on */
-		if (ANIM_animdata_get_context(t->context, &ac) == 0) {
-			printf("space action transform -> special aftertrans exit. no context \n"); // XXX
+		/* initialise relevant anim-context 'context' data from TransInfo data */
+			/* NOTE: sync this with the code in ANIM_animdata_get_context() */
+		memset(&ac, 0, sizeof(bAnimContext));
+		
+		scene= ac.scene= t->scene;
+		ob= ac.obact= OBACT;
+		ac.sa= t->sa;
+		ac.ar= t->ar;
+		ac.spacetype= (t->sa)? t->sa->spacetype : 0;
+		ac.regiontype= (t->ar)? t->ar->regiontype : 0;
+		
+		if (ANIM_animdata_context_getdata(&ac) == 0)
 			return;
-		}
 		
-		/* get pointers to useful data */
-		scene= ac.scene;
-		ob = OBACT;
-		
 		if (ac.datatype == ANIMCONT_DOPESHEET) {
 			ListBase anim_data = {NULL, NULL};
 			bAnimListElem *ale;

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c	2008-12-30 00:28:11 UTC (rev 18157)
@@ -674,7 +674,6 @@
 //	else if(G.f & G_PARTICLEEDIT) G.moving= G_TRANSFORM_PARTICLE;
 //	else G.moving= G_TRANSFORM_OBJ;
 	
-	t->context= C;
 	t->scene = sce;
 	t->sa = sa;
 	t->ar = ar;

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2008-12-29 23:42:39 UTC (rev 18156)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2008-12-30 00:28:11 UTC (rev 18157)
@@ -63,10 +63,6 @@
 {
 	TransInfo *t = op->customdata;
 	
-	/* need to set context here, otherwise we get crashes with things that use context */
-	// XXX this seems quite hackish - Aligorith
-	t->context= C;
-	
 	transformEvent(t, event);
 	
 	transformApply(t);





More information about the Bf-blender-cvs mailing list