From 784d8ee37a52f3ef689aa6d02e75e50566efe93f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 26 Jan 2009 04:13:38 +0000 Subject: 2.5 DopeSheet/Action Editor * Made the various datatypes in the DopeSheet get shown again (NOTE: some of the types that don't get conversions to Animato yet may need some further checking). * Did some code cleanup to allow F-Curve channels to always show RNA-based names correctly --- source/blender/blenkernel/intern/ipo.c | 2 + source/blender/editors/animation/anim_channels.c | 8 +- source/blender/editors/animation/anim_filter.c | 182 ++++++++------------- source/blender/editors/animation/keyframes_edit.c | 2 +- source/blender/editors/include/ED_anim_api.h | 2 +- source/blender/editors/space_action/action_draw.c | 21 ++- source/blender/editors/space_action/action_edit.c | 26 +-- .../blender/editors/space_action/action_header.c | 2 +- .../blender/editors/space_action/action_select.c | 18 +- .../editors/transform/transform_conversions.c | 6 +- 10 files changed, 119 insertions(+), 150 deletions(-) diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 9fef1c657ca..e6ee3a14681 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1065,6 +1065,8 @@ void do_versions_ipos_to_animato(Main *main) * are likely to be drivers, but it's hard to trace that from here, so move this to Ob loop? */ if (key->ipo) { + printf("\t\tconverting key->ipo %s -> %s \n", id->name+2, key->ipo->id.name+2); + /* Add AnimData block */ adt= BKE_id_add_animdata(id); diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c index 44d85f2f153..3ebb6bb5a11 100644 --- a/source/blender/editors/animation/anim_channels.c +++ b/source/blender/editors/animation/anim_channels.c @@ -155,7 +155,7 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short /* filter data */ filter= ANIMFILTER_VISIBLE; - ANIM_animdata_filter(&anim_data, filter, data, datatype); + ANIM_animdata_filter(NULL, &anim_data, filter, data, datatype); /* See if we should be selecting or deselecting */ if (test) { @@ -646,7 +646,7 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS | ANIMFILTER_SEL); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* affect selected channels */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -840,7 +840,7 @@ static void borderselect_anim_channels (bAnimContext *ac, rcti *rect, short sele /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop over data, doing border select */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -963,7 +963,7 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s /* get the channel that was clicked on */ /* filter channels */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); - filter= ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + filter= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* get channel from index */ ale= BLI_findlink(&anim_data, channel_index); diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 272e0c64a89..fc1a225eb77 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -278,7 +278,7 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) /* this function allocates memory for a new bAnimListElem struct for the * provided animation channel-data. */ -bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, short ownertype) +bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, short ownertype, ID *owner_id) { bAnimListElem *ale= NULL; @@ -293,6 +293,8 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->owner= owner; ale->ownertype= ownertype; + ale->id= owner_id; + /* do specifics */ switch (datatype) { case ANIMTYPE_OBJECT: @@ -334,7 +336,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_MAT_OBJD(ma); - ale->key_data= adt->action; + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } break; @@ -345,7 +347,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_LAM_OBJD(la); - ale->key_data= adt->action; + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } break; @@ -356,7 +358,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_CAM_OBJD(ca); - ale->key_data= adt->action; + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } break; @@ -367,7 +369,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_CUR_OBJD(cu); - ale->key_data= adt->action; + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } break; @@ -378,7 +380,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s ale->flag= FILTER_SKE_OBJD(key); - ale->key_data= adt->action; + ale->key_data= (adt) ? adt->action : NULL; ale->datatype= ALE_ACT; } break; @@ -424,7 +426,7 @@ bAnimListElem *make_new_animlistelem (void *data, short datatype, void *owner, s /* ----------------------------------------- */ -static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionGroup *grp, int filter_mode, ID *owner_id) +static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionGroup *grp, void *owner, short ownertype, int filter_mode, ID *owner_id) { bAnimListElem *ale = NULL; FCurve *fcu; @@ -439,11 +441,9 @@ static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionG /* only include this curve if selected */ if (!(filter_mode & ANIMFILTER_SEL) || (SEL_FCU(fcu))) { /* owner/ownertype will be either object or action-channel, depending if it was dopesheet or part of an action */ - ale= make_new_animlistelem(fcu, ANIMTYPE_FCURVE, fcu, ANIMTYPE_FCURVE); + ale= make_new_animlistelem(fcu, ANIMTYPE_FCURVE, owner, ownertype, owner_id); if (ale) { - /* ID will only be Object if data to write to directly belongs there, otherwise, another pointer will be used */ - ale->id= owner_id; BLI_addtail(anim_data, ale); items++; } @@ -455,12 +455,11 @@ static int animdata_filter_fcurves (ListBase *anim_data, FCurve *first, bActionG return items; } -static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter_mode, void *owner, short ownertype) +static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter_mode, void *owner, short ownertype, ID *owner_id) { bAnimListElem *ale=NULL; bActionGroup *agrp; FCurve *lastchan=NULL; - short owned= (owner && ownertype) ? 1 : 0; int items = 0; /* loop over groups */ @@ -470,9 +469,8 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter if ((filter_mode & ANIMFILTER_CHANNELS) || !(filter_mode & ANIMFILTER_CURVESONLY)) { /* check if filtering by selection */ if ( !(filter_mode & ANIMFILTER_SEL) || SEL_AGRP(agrp) ) { - ale= make_new_animlistelem(agrp, ANIMTYPE_GROUP, NULL, ANIMTYPE_NONE); + ale= make_new_animlistelem(agrp, ANIMTYPE_GROUP, NULL, ANIMTYPE_NONE, owner_id); if (ale) { - if (owned) ale->id= owner; BLI_addtail(anim_data, ale); items++; } @@ -501,7 +499,7 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter { if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) { // XXX the 'owner' info here needs review... - items += animdata_filter_fcurves(anim_data, agrp->channels.first, agrp, filter_mode, ((owned)?owner:NULL)); + items += animdata_filter_fcurves(anim_data, agrp->channels.first, agrp, owner, ownertype, filter_mode, owner_id); /* remove group from filtered list if last element is group * (i.e. only if group had channels, which were all hidden) @@ -521,19 +519,18 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter /* loop over un-grouped F-Curves (only if we're not only considering those channels in the animive group) */ if (!(filter_mode & ANIMFILTER_ACTGROUPED)) { // XXX the 'owner' info here needs review... - items += animdata_filter_fcurves(anim_data, (lastchan)?(lastchan->next):(act->curves.first), NULL, filter_mode, ((owned)?owner:NULL)); + items += animdata_filter_fcurves(anim_data, (lastchan)?(lastchan->next):(act->curves.first), NULL, owner, ownertype, filter_mode, owner_id); } /* return the number of items added to the list */ return items; } -static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_mode, void *owner, short ownertype) +static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_mode, void *owner, short ownertype, ID *owner_id) { bAnimListElem *ale; KeyBlock *kb; //FCurve *fcu; - short owned= (owner && ownertype)? 1 : 0; int i, items=0; /* are we filtering for display or editing */ @@ -565,7 +562,7 @@ static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_m } #endif // XXX fixme... old system - if (owned) ale->id= owner; + ale->id= owner_id; BLI_addtail(anim_data, ale); items++; @@ -667,7 +664,7 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* include materials-expand widget? */ if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(ob, ANIMTYPE_FILLMATD, base, ANIMTYPE_OBJECT); + ale= make_new_animlistelem(ob, ANIMTYPE_FILLMATD, base, ANIMTYPE_OBJECT, (ID *)ob); if (ale) { BLI_addtail(anim_data, ale); items++; @@ -688,7 +685,7 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* include material-expand widget? */ // hmm... do we need to store the index of this material in the array anywhere? if (filter_mode & ANIMFILTER_CHANNELS) { - ale= make_new_animlistelem(ma, ANIMTYPE_DSMAT, base, ANIMTYPE_OBJECT); + ale= make_new_animlistelem(ma, ANIMTYPE_DSMAT, base, ANIMTYPE_OBJECT, (ID *)ma); if (ale) { BLI_addtail(anim_data, ale); items++; @@ -698,112 +695,81 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads, /* add material's ipo-curve channels? */ if (FILTER_MAT_OBJD(ma) || (filter_mode & ANIMFILTER_CURVESONLY)) { //items += animdata_filter_ipocurves(anim_data, ma->ipo, filter_mode, base, ANIMTYPE_OBJECT, (ID *)ma); + // XXX the 'owner' info here is still subject to improvement + items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma); } } - } /* return the number of items added to the list */ return items; } -#if 0 // XXX old anim sys - -static int animdata_filter_dopesheet_cam (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) +static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) { bAnimListElem *ale=NULL; Object *ob= base->object; - Camera *ca= (Camera *)ob->data; - int items = 0; + IdAdtTemplate *iat= ob->data; + short type=0, expanded=0; + int items= 0; - /* include camera-expand widget? */ - if (filter_mode & (ANIMFILTER_CHANNELS|ANIMFILTER_IPOKEYS)) { - ale= make_new_animlistelem(ca, ANIMTYPE_DSCAM, base, ANIMTYPE_OBJECT); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + /* get settings based on data type */ + switch (ob->type) { + case OB_CAMERA: /* ------- Camera ------------ */ + { + Camera *ca= (Camera *)ob->data; + + type= ANIMTYPE_DSCAM; + expanded= FILTER_CAM_OBJD(ca); } - } - - /* add camera ipo-curve channels? */ - if ( (FILTER_CAM_OBJD(ca) || (filter_mode & ANIMFILTER_ONLYFCU)) && - !(filter_mode & ANIMFILTER_IPOKEYS) ) - { - items += animdata_filter_ipocurves(anim_data, ca->ipo, filter_mode, base, ANIMTYPE_OBJECT, (ID *)ca); - } - - /* return the number of items added to the list */ - return items; -} - -static int animdata_filter_dopesheet_lamp (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) -{ - bAnimListElem *ale=NULL; - Object *ob= base->object; - Lamp *la= (Lamp *)ob->data; - int items = 0; - - /* include lamp-expand widget? */ - if (filter_mode & (ANIMFILTER_CHANNELS|ANIMFILTER_IPOKEYS)) { - ale= make_new_animlistelem(la, ANIMTYPE_DSLAM, base, ANIMTYPE_OBJECT); - if (ale) { - BLI_addtail(anim_data, ale); - items++; + break; + case OB_LAMP: /* ---------- Lamp ----------- */ + { + Lamp *la= (Lamp *)ob->data; + + type= ANIMTYPE_DSLAM; + expanded= FILTER_LAM_OBJD(la); + } + break; + case OB_CURVE: /* ------- Curve ---------- */ + { + Curve *cu= (Curve *)ob->data; + + type= ANIMTYPE_DSCUR; + expanded= FILTER_CUR_OBJD(cu); } + break; } - /* add lamp ipo-curve channels? */ - if ( (FILTER_LAM_OBJD(la) || (filter_mode & ANIMFILTER_ONLYFCU)) && - !(filter_mode & ANIMFILTER_IPOKEYS) ) - { - items += animdata_filter_ipocurves(anim_data, la->ipo, filter_mode, base, ANIMTYPE_OBJECT, (ID *)la); + /* include data-expand widget? */ + if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) { + ale= make_new_animlistelem(iat, type, base, ANIMTYPE_OBJECT, (ID *)iat); + if (ale) BLI_addtail(anim_data, ale); } - /* return the number of items added to the list */ - return items; -} - -static int animdata_filter_dopesheet_curve (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) -{ - bAnimListElem *ale=NULL; - Object *ob= base->object; - Curve *cu= (Curve *)ob->data; - int items = 0; - - /* include curve-expand widget? */ - if (filter_mode & (ANIMFILTER_CHANNELS|ANIMFILTER_IPOKEYS)) { - ale= make_new_animlistelem(cu, ANIMTYPE_DSCUR, base, ANIMTYPE_OBJECT); - if (ale) { - BLI_addtail(anim_data, ale); - items++; - } - } - - /* add curve ipo-curve channels? */ - if ( (FILTER_CUR_OBJD(cu) || (filter_mode & ANIMFILTER_ONLYFCU)) && - !(filter_mode & ANIMFILTER_IPOKEYS) ) - { - items += animdata_filter_ipocurves(anim_data, cu->ipo, filter_mode, base, ANIMTYPE_OBJECT, (ID *)cu); + /* add object-data animation channels? */ + if ((expanded) || (filter_mode & ANIMFILTER_CURVESONLY)) { + // XXX the 'owner' info here is still subject to improvement + items += animdata_filter_action(anim_data, iat->adt->action, filter_mode, iat, type, (ID *)iat); } /* return the number of items added to the list */ return items; } -#endif // XXX old anim sys static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode) { bAnimListElem *ale=NULL; Scene *sce= (Scene *)ads->source; Object *ob= base->object; -// Key *key= ob_get_key(ob); + Key *key= ob_get_key(ob); int items = 0; /* add this object as a channel first */ if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) { /* check if filtering by selection */ if ( !(filter_mode & ANIMFILTER_SEL) || ((base->flag & SELECT) || (base == sce->basact)) ) { - ale= make_new_animlistelem(base, ANIMTYPE_OBJECT, NULL, ANIMTYPE_NONE); + ale= make_new_animlistelem(base, ANIMTYPE_OBJECT, NULL, ANIMTYPE_NONE, NULL); if (ale) { BLI_addtail(anim_data, ale); items++; @@ -821,9 +787,8 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B /* include action-expand widget? */ if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, base, ANIMTYPE_OBJECT); + ale= make_new_animlistelem(adt->action, ANIMTYPE_FILLACTD, base, ANIMTYPE_OBJECT, (ID *)ob); if (ale) { - ale->id= (ID *)ob; // err.... is this a good idea? BLI_addtail(anim_data, ale); items++; } @@ -832,16 +797,15 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B /* add F-Curve channels? */ if (EXPANDED_ACTC(adt->action) || !(filter_mode & ANIMFILTER_CHANNELS)) { // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?) - items += animdata_filter_action(anim_data, adt->action, filter_mode, ob, ANIMTYPE_OBJECT); + items += animdata_filter_action(anim_data, adt->action, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } -#if 0 // XXX fixme... /* ShapeKeys? */ if ((key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)) { /* include shapekey-expand widget? */ if ((filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) { - ale= make_new_animlistelem(key, ANIMTYPE_DSSKEY, base, ANIMTYPE_OBJECT); + ale= make_new_animlistelem(key, ANIMTYPE_DSSKEY, base, ANIMTYPE_OBJECT, (ID *)ob); if (ale) { BLI_addtail(anim_data, ale); items++; @@ -850,42 +814,39 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B /* add channels */ if (FILTER_SKE_OBJD(key) || (filter_mode & ANIMFILTER_CURVESONLY)) { - items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT); + items += animdata_filter_shapekey(anim_data, key, filter_mode, ob, ANIMTYPE_OBJECT, (ID *)ob); } } -#endif /* Materials? */ if ((ob->totcol) && !(ads->filterflag & ADS_FILTER_NOMAT)) items += animdata_filter_dopesheet_mats(anim_data, ads, base, filter_mode); -#if 0 /* Object Data */ switch (ob->type) { case OB_CAMERA: /* ------- Camera ------------ */ { Camera *ca= (Camera *)ob->data; - if ((ca->ipo) && !(ads->filterflag & ADS_FILTER_NOCAM)) - items += animdata_filter_dopesheet_cam(anim_data, ads, base, filter_mode); + if (ANIMDATA_HAS_KEYS(ca) && !(ads->filterflag & ADS_FILTER_NOCAM)) + items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); } break; case OB_LAMP: /* ---------- Lamp ----------- */ { Lamp *la= (Lamp *)ob->data; - if ((la->ipo) && !(ads->filterflag & ADS_FILTER_NOLAM)) - items += animdata_filter_dopesheet_lamp(anim_data, ads, base, filter_mode); + if (ANIMDATA_HAS_KEYS(la) && !(ads->filterflag & ADS_FILTER_NOLAM)) + items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); } break; case OB_CURVE: /* ------- Curve ---------- */ { Curve *cu= (Curve *)ob->data; - if ((cu->ipo) && !(ads->filterflag & ADS_FILTER_NOCUR)) - items += animdata_filter_dopesheet_curve(anim_data, ads, base, filter_mode); + if (ANIMDATA_HAS_KEYS(cu) && !(ads->filterflag & ADS_FILTER_NOCUR)) + items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode); } break; } -#endif /* return the number of items added to the list */ return items; @@ -1028,21 +989,22 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int * will be placed for use. * filter_mode: how should the data be filtered - bitmapping accessed flags */ -int ANIM_animdata_filter (ListBase *anim_data, int filter_mode, void *data, short datatype) +int ANIM_animdata_filter (bAnimContext *ac, ListBase *anim_data, int filter_mode, void *data, short datatype) { int items = 0; /* only filter data if there's somewhere to put it */ if (data && anim_data) { bAnimListElem *ale, *next; + Object *obact= (ac) ? ac->obact : NULL; /* firstly filter the data */ switch (datatype) { case ANIMCONT_ACTION: - items= animdata_filter_action(anim_data, data, filter_mode, NULL, ANIMTYPE_NONE); + items= animdata_filter_action(anim_data, data, filter_mode, NULL, ANIMTYPE_NONE, (ID *)obact); break; case ANIMCONT_SHAPEKEY: - items= animdata_filter_shapekey(anim_data, data, filter_mode, NULL, ANIMTYPE_NONE); + items= animdata_filter_shapekey(anim_data, data, filter_mode, NULL, ANIMTYPE_NONE, (ID *)obact); break; case ANIMCONT_GPENCIL: //items= animdata_filter_gpencil(anim_data, data, filter_mode); diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index 5596e244aee..66049d5e5f7 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -188,7 +188,7 @@ void ANIM_editkeyframes_refresh(bAnimContext *ac) /* filter animation data */ filter= ANIMFILTER_CURVESONLY; - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop over ipo-curves that are likely to have been edited, and check them */ for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index bd6fe4f0fc8..11ffa435149 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -206,7 +206,7 @@ typedef enum eAnimFilter_Flags { /* Obtain list of filtered Animation channels to operate on. * Returns the number of channels in the list */ -int ANIM_animdata_filter(ListBase *anim_data, int filter_mode, void *data, short datatype); +int ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mode, void *data, short datatype); /* Obtain current anim-data context from Blender Context info. * Returns whether the operation was successful. diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index de7453654ff..227881408a0 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -409,7 +409,7 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* build list of channels to draw */ filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); - items= ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + items= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* Update max-extent of channels here (taking into account scrollers): * - this is done to allow the channel list to be scrollable, but must be done here @@ -622,15 +622,20 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar) //group= (ale->grp) ? 1 : 0; //grp= ale->grp; - // XXX this needs to be more detailed... - if (ale->id) { - if (GS(ale->id->name) == ID_MA) + switch (ale->ownertype) { + case ANIMTYPE_NONE: /* no owner */ + case ANIMTYPE_FCURVE: + offset= 0; + break; + + case ANIMTYPE_DSMAT: /* for now, this is special case for materials */ offset= 21; - else + break; + + default: offset= 14; + break; } - else - offset= 0; if (fcu->flag & FCURVE_MUTED) mute = ICON_MUTE_IPO_ON; @@ -988,7 +993,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* build list of channels to draw */ filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS); - items= ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + items= ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* Update max-extent of channels here (taking into account scrollers): * - this is done to allow the channel list to be scrollable, but must be done here diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 8b89c41775c..d618d2869c8 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -98,7 +98,7 @@ static void get_keyframe_extents (bAnimContext *ac, float *min, float *max) /* get data to filter, from Action or Dopesheet */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* set large values to try to override */ *min= 999999999.0f; @@ -211,7 +211,7 @@ static int actkeys_viewall_exec(bContext *C, wmOperator *op) /* do View2D syncing */ UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY); - /* set notifier tha things have changed */ + /* set notifier that things have changed */ ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -286,7 +286,7 @@ static short copy_action_keys (bAnimContext *ac) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_IPOKEYS); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* assume that each of these is an ipo-block */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -385,7 +385,7 @@ static short paste_action_keys (bAnimContext *ac) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_IPOKEYS); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* from selected channels */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -584,7 +584,7 @@ static void delete_action_keys (bAnimContext *ac) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through filtered data and delete selected keys */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -644,7 +644,7 @@ static void clean_action_keys (bAnimContext *ac, float thresh) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through filtered data and clean curves */ for (ale= anim_data.first; ale; ale= ale->next) @@ -716,7 +716,7 @@ static void sample_action_keys (bAnimContext *ac) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through filtered data and add keys between selected keyframes on every frame */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -843,7 +843,7 @@ static void setexpo_action_keys(bAnimContext *ac, short mode) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through setting mode per F-Curve */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -921,7 +921,7 @@ static void setipo_action_keys(bAnimContext *ac, short mode) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through setting BezTriple interpolation * Note: we do not supply BeztEditData to the looper yet. Currently that's not necessary here... @@ -1001,7 +1001,7 @@ static void sethandles_action_keys(bAnimContext *ac, short mode) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* loop through setting flags for handles * Note: we do not supply BeztEditData to the looper yet. Currently that's not necessary here... @@ -1116,7 +1116,7 @@ static int actkeys_cfrasnap_exec(bContext *C, wmOperator *op) /* loop over action data, averaging values */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac.data, ac.datatype); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); for (ale= anim_data.first; ale; ale= ale->next) ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_calc_average, NULL); @@ -1175,7 +1175,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* get beztriple editing callbacks */ edit_cb= ANIM_editkeyframes_snap(mode); @@ -1296,7 +1296,7 @@ static void mirror_action_keys(bAnimContext *ac, short mode) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* mirror keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 30449ed0c30..2e8b34742b0 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -1539,7 +1539,7 @@ static void do_action_buttons(bContext *C, void *arg, int event) { switch(event) { case B_REDR: - ED_region_tag_redraw(CTX_wm_region(C)); + ED_area_tag_redraw(CTX_wm_area(C)); break; case B_ACTCOPYKEYS: diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 9b121bfb270..2e07b2db417 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -117,7 +117,7 @@ static void *get_nearest_action_key (bAnimContext *ac, int mval[2], float *selx, /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* get channel */ ale= BLI_findlink(&anim_data, channel_index); @@ -266,7 +266,7 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); /* filter data */ - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init BezTriple looping data */ memset(&bed, 0, sizeof(BeztEditData)); @@ -378,7 +378,7 @@ static void borderselect_action (bAnimContext *ac, rcti rect, short mode, short /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* get beztriple editing/validation funcs */ select_cb= ANIM_editkeyframes_select(selectmode); @@ -559,7 +559,7 @@ static void markers_selectkeys_between (bAnimContext *ac) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* select keys in-between */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -615,14 +615,14 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) case ACTKEYS_COLUMNSEL_KEYS: /* list of selected keys */ if (ac->datatype == ANIMCONT_GPENCIL) { filter= (ANIMFILTER_VISIBLE); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); //for (ale= anim_data.first; ale; ale= ale->next) // gplayer_make_cfra_list(ale->data, &elems, 1); } else { filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, bezt_to_cfraelem, NULL); @@ -659,7 +659,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) filter= (ANIMFILTER_VISIBLE); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { Object *nob= ANIM_nla_mapping_get(ac, ale); @@ -927,7 +927,7 @@ static void selectkeys_leftright (bAnimContext *ac, short leftright, short selec filter= (ANIMFILTER_VISIBLE); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* select keys on the side where most data occurs */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -972,7 +972,7 @@ static void mouse_columnselect_action_keys (bAnimContext *ac, float selx) filter= (ANIMFILTER_VISIBLE); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac->data, ac->datatype); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { Object *nob= ANIM_nla_mapping_get(ac, ale); diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 351a129fc74..728e44b53ef 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2841,7 +2841,7 @@ static void posttrans_action_clean (bAnimContext *ac, bAction *act) /* filter data */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, act, ANIMCONT_ACTION); + ANIM_animdata_filter(ac, &anim_data, filter, act, ANIMCONT_ACTION); /* loop through relevant data, removing keyframes from the ipo-blocks that were attached * - all keyframes are converted in/out of global time @@ -3054,7 +3054,7 @@ static void createTransActionData(bContext *C, TransInfo *t) filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT); else filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); - ANIM_animdata_filter(&anim_data, filter, ac.data, ac.datatype); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* which side of the current frame should be allowed */ if (t->mode == TFM_TIME_EXTEND) { @@ -4130,7 +4130,7 @@ void special_aftertrans_update(TransInfo *t) short filter= (ANIMFILTER_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); /* get channels to work on */ - ANIM_animdata_filter(&anim_data, filter, ac.data, ac.datatype); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* these should all be ipo-blocks */ for (ale= anim_data.first; ale; ale= ale->next) { -- cgit v1.2.3