[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