Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/animation/keyframing.c')
-rw-r--r--source/blender/editors/animation/keyframing.c533
1 files changed, 414 insertions, 119 deletions
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index a86cf3719d3..ac41a63760d 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -55,9 +55,12 @@
#include "DNA_key_types.h"
#include "DNA_lamp_types.h"
#include "DNA_object_types.h"
+#include "DNA_object_fluidsim.h"
+#include "DNA_particle_types.h"
#include "DNA_material_types.h"
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
+#include "DNA_sequence_types.h"
#include "DNA_space_types.h"
#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
@@ -65,10 +68,9 @@
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "BKE_blender.h"
-#include "BKE_main.h" // XXX not needed old cruft?
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_constraint.h"
@@ -77,31 +79,35 @@
#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_object.h"
+#include "BKE_particle.h"
#include "BKE_material.h"
+#include "BKE_modifier.h"
+#include "ED_anim_api.h"
#include "ED_keyframing.h"
+#include "ED_keyframes_edit.h"
#if 0 // XXX resolve these old dependencies!
-#include "BIF_butspace.h"
-#include "BIF_editaction.h"
-#include "BIF_editkey.h"
-#include "BIF_interface.h"
-#include "BIF_mywindow.h"
-#include "BIF_poseobject.h"
-#include "BIF_screen.h"
-#include "BIF_space.h"
-#include "BIF_toolbox.h"
-#include "BIF_toets.h"
-
-#include "BSE_editipo.h"
-#include "BSE_node.h"
-#include "BSE_time.h"
-#include "BSE_view.h"
-
-#include "blendef.h"
-
-#include "PIL_time.h" /* sleep */
-#include "mydevice.h"
+ #include "BIF_butspace.h"
+ #include "BIF_editaction.h"
+ #include "BIF_editkey.h"
+ #include "BIF_interface.h"
+ #include "BIF_mywindow.h"
+ #include "BIF_poseobject.h"
+ #include "BIF_screen.h"
+ #include "BIF_space.h"
+ #include "BIF_toolbox.h"
+ #include "BIF_toets.h"
+
+ #include "BSE_editipo.h"
+ #include "BSE_node.h"
+ #include "BSE_time.h"
+ #include "BSE_view.h"
+
+ #include "blendef.h"
+
+ #include "PIL_time.h" /* sleep */
+ #include "mydevice.h"
#endif // XXX resolve these old dependencies!
@@ -169,6 +175,284 @@ typedef struct bKeyingContext {
int tot; /* number of keyingsets in */
} bKeyingContext;
+
+/* ************************************************** */
+/* IPO DATA VERIFICATION */
+// XXX these will need to be modified for use with RNA-IPO...
+
+/* depending type, it returns ipo, if needed it creates one */
+/* returns either action ipo or "real" ipo */
+/* arguments define full context;
+ - *from has to be set always, to Object in case of Actions
+ - blocktype defines available channels of Ipo struct (blocktype ID_OB can be in action too)
+ - if actname, use this to locate actionchannel, and optional constname
+ - if bonename, the constname is the ipo to the constraint
+*/
+
+/* note: check header_ipo.c, spaceipo_assign_ipo() too */
+Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], char bonename[], short add)
+{
+ /* lib-linked data is not appropriate here */
+ if ((from==NULL) || (from->lib))
+ return NULL;
+
+ /* first check action ipos */
+ if (actname && actname[0]) {
+ Object *ob= (Object *)from;
+ bActionChannel *achan;
+
+ if (GS(from->name)!=ID_OB) {
+ printf("called ipo system for action with wrong base pointer\n");
+ return NULL;
+ }
+
+ if ((ob->action==NULL) && (add))
+ ob->action= add_empty_action("Action");
+
+ if (add)
+ achan= verify_action_channel(ob->action, actname);
+ else
+ achan= get_action_channel(ob->action, actname);
+
+ if (achan) {
+ /* automatically assign achan to act-group based on pchan's grouping */
+ //if ((blocktype == ID_PO) && (add))
+ // verify_pchan2achan_grouping(ob->action, ob->pose, actname);
+
+ /* constraint exception */
+ if (blocktype==ID_CO) {
+ bConstraintChannel *conchan;
+
+ if (add)
+ conchan= verify_constraint_channel(&achan->constraintChannels, constname);
+ else
+ conchan= get_constraint_channel(&achan->constraintChannels, constname);
+
+ if (conchan) {
+ if ((conchan->ipo==NULL) && (add))
+ conchan->ipo= add_ipo("CoIpo", ID_CO);
+ return conchan->ipo;
+ }
+ }
+ else {
+ if ((achan->ipo==NULL) && (add))
+ achan->ipo= add_ipo("ActIpo", blocktype);
+ return achan->ipo;
+ }
+ }
+ }
+ else {
+ switch (GS(from->name)) {
+ case ID_OB:
+ {
+ Object *ob= (Object *)from;
+
+ /* constraint exception */
+ if (blocktype==ID_CO) {
+ /* check the local constraint ipo */
+ if (bonename && bonename[0] && ob->pose) {
+ bPoseChannel *pchan= get_pose_channel(ob->pose, bonename);
+ bConstraint *con;
+
+ for (con= pchan->constraints.first; con; con= con->next) {
+ if (strcmp(con->name, constname)==0)
+ break;
+ }
+
+ if (con) {
+ if ((con->ipo==NULL) && (add))
+ con->ipo= add_ipo("CoIpo", ID_CO);
+ return con->ipo;
+ }
+ }
+ else { /* the actionchannel */
+ bConstraintChannel *conchan;
+
+ if (add)
+ conchan= verify_constraint_channel(&ob->constraintChannels, constname);
+ else
+ conchan= get_constraint_channel(&ob->constraintChannels, constname);
+
+ if (conchan) {
+ if ((conchan->ipo==NULL) && (add))
+ conchan->ipo= add_ipo("CoIpo", ID_CO);
+ return conchan->ipo;
+ }
+ }
+ }
+ else if (blocktype==ID_OB) {
+ if ((ob->ipo==NULL) && (add))
+ ob->ipo= add_ipo("ObIpo", ID_OB);
+ return ob->ipo;
+ }
+ else if (blocktype==ID_KE) {
+ Key *key= ob_get_key((Object *)from);
+
+ if (key) {
+ if ((key->ipo==NULL) && (add))
+ key->ipo= add_ipo("KeyIpo", ID_KE);
+ return key->ipo;
+ }
+ return NULL;
+ }
+ else if (blocktype== ID_FLUIDSIM) {
+ Object *ob= (Object *)from;
+
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if(fluidmd) {
+ FluidsimSettings *fss= fluidmd->fss;
+
+ if ((fss->ipo==NULL) && (add))
+ fss->ipo= add_ipo("FluidsimIpo", ID_FLUIDSIM);
+ return fss->ipo;
+ }
+ }
+ else if(blocktype== ID_PA) {
+ Object *ob= (Object *)from;
+ ParticleSystem *psys= psys_get_current(ob);
+
+ if (psys) {
+ if ((psys->part->ipo==NULL) && (add))
+ psys->part->ipo= add_ipo("ParticleIpo", ID_PA);
+ return psys->part->ipo;
+ }
+ return NULL;
+ }
+ }
+ break;
+ case ID_MA:
+ {
+ Material *ma= (Material *)from;
+
+ if ((ma->ipo==NULL) && (add))
+ ma->ipo= add_ipo("MatIpo", ID_MA);
+ return ma->ipo;
+ }
+ break;
+ case ID_TE:
+ {
+ Tex *tex= (Tex *)from;
+
+ if ((tex->ipo==NULL) && (add))
+ tex->ipo= add_ipo("TexIpo", ID_TE);
+ return tex->ipo;
+ }
+ break;
+ case ID_SEQ:
+ {
+ Sequence *seq= (Sequence *)from; /* note, sequence is mimicing Id */
+
+ if ((seq->ipo==NULL) && (add))
+ seq->ipo= add_ipo("SeqIpo", ID_SEQ);
+ //update_seq_ipo_rect(seq); // XXX
+ return seq->ipo;
+ }
+ break;
+ case ID_CU:
+ {
+ Curve *cu= (Curve *)from;
+
+ if ((cu->ipo==NULL) && (add))
+ cu->ipo= add_ipo("CuIpo", ID_CU);
+ return cu->ipo;
+ }
+ break;
+ case ID_WO:
+ {
+ World *wo= (World *)from;
+
+ if ((wo->ipo==NULL) && (add))
+ wo->ipo= add_ipo("WoIpo", ID_WO);
+ return wo->ipo;
+ }
+ break;
+ case ID_LA:
+ {
+ Lamp *la= (Lamp *)from;
+
+ if ((la->ipo==NULL) && (add))
+ la->ipo= add_ipo("LaIpo", ID_LA);
+ return la->ipo;
+ }
+ break;
+ case ID_CA:
+ {
+ Camera *ca= (Camera *)from;
+
+ if ((ca->ipo==NULL) && (add))
+ ca->ipo= add_ipo("CaIpo", ID_CA);
+ return ca->ipo;
+ }
+ break;
+ case ID_SO:
+ {
+#if 0 // depreceated
+ bSound *snd= (bSound *)from;
+
+ if ((snd->ipo==NULL) && (add))
+ snd->ipo= add_ipo("SndIpo", ID_SO);
+ return snd->ipo;
+#endif // depreceated
+ }
+ break;
+ }
+ }
+
+ return NULL;
+}
+
+/* Returns and creates
+ * Make sure functions check for NULL or they will crash!
+ */
+IpoCurve *verify_ipocurve(ID *from, short blocktype, char actname[], char constname[], char bonename[], int adrcode, short add)
+{
+ Ipo *ipo;
+ IpoCurve *icu= NULL;
+
+ /* return 0 if lib */
+ /* creates ipo too (if add) */
+ ipo= verify_ipo(from, blocktype, actname, constname, bonename, add);
+
+ if ((ipo) && (ipo->id.lib==NULL) && (from->lib==NULL)) {
+ /* try to find matching curve */
+ icu= find_ipocurve(ipo, adrcode);
+
+ /* make a new one if none found (and can add) */
+ if ((icu==NULL) && (add)) {
+ icu= MEM_callocN(sizeof(IpoCurve), "ipocurve");
+
+ /* set default settings */
+ icu->flag |= (IPO_VISIBLE|IPO_AUTO_HORIZ);
+ if (ipo->curve.first==NULL)
+ icu->flag |= IPO_ACTIVE; /* first one added active */
+
+ icu->blocktype= blocktype;
+ icu->adrcode= adrcode;
+
+ set_icu_vars(icu);
+
+ /* default curve interpolation - from userpref */
+ icu->ipo= U.ipo_new;
+
+ /* add curve to IPO-block */
+ BLI_addtail(&ipo->curve, icu);
+
+ /* special type-dependent stuff */
+ switch (GS(from->name)) {
+ case ID_SEQ: {
+ //Sequence *seq= (Sequence *)from;
+
+ //update_seq_icu_rects(seq); // XXX
+ break;
+ }
+ }
+ }
+ }
+
+ /* return ipo-curve */
+ return icu;
+}
+
/* ************************************************** */
/* KEYFRAME INSERTION */
@@ -382,7 +666,6 @@ void insert_vert_icu (IpoCurve *icu, float x, float y, short fast)
}
}
-#if 0 // XXX code to clean up
/* ------------------- Get Data ------------------------ */
@@ -787,11 +1070,11 @@ short insertkey (ID *id, int blocktype, char *actname, char *constname, int adrc
IpoCurve *icu;
/* get ipo-curve */
- //icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 1); // XXX this call needs to be in blenkernel
+ icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 1);
/* only continue if we have an ipo-curve to add keyframe to */
if (icu) {
- float cfra = frame_to_float(CFRA);
+ float cfra =1.0f;//= frame_to_float(CFRA);
float curval= 0.0f;
/* apply special time tweaking */
@@ -803,10 +1086,10 @@ short insertkey (ID *id, int blocktype, char *actname, char *constname, int adrc
cfra= get_action_frame(ob, cfra);
/* ancient time-offset cruft */
- if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
+ //if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
+ // /* actually frametofloat calc again! */
+ // cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ //}
}
/* obtain value to give keyframe */
@@ -894,13 +1177,12 @@ short deletekey (ID *id, int blocktype, char *actname, char *constname, int adrc
* Note: here is one of the places where we don't want new ipo + ipo-curve added!
* so 'add' var must be 0
*/
- // XXX funcs here need to be recoded in blenkernel...
- //ipo= verify_ipo(id, blocktype, actname, constname, NULL, 0);
- //icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 0);
+ ipo= verify_ipo(id, blocktype, actname, constname, NULL, 0);
+ icu= verify_ipocurve(id, blocktype, actname, constname, NULL, adrcode, 0);
/* only continue if we have an ipo-curve to remove keyframes from */
if (icu) {
- float cfra = frame_to_float(CFRA);
+ float cfra = 1.0f;//frame_to_float(CFRA);
short found = -1;
int i;
@@ -913,10 +1195,10 @@ short deletekey (ID *id, int blocktype, char *actname, char *constname, int adrc
cfra= get_action_frame(ob, cfra);
/* ancient time-offset cruft */
- if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
- /* actually frametofloat calc again! */
- cfra-= give_timeoffset(ob)*G.scene->r.framelen;
- }
+ //if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
+ // /* actually frametofloat calc again! */
+ // cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ //}
}
/* try to find index of beztriple to get rid of */
@@ -1101,7 +1383,8 @@ static short incl_non_del_keys (bKeyingSet *ks, const char mode[])
/* check if include shapekey entry */
static short incl_v3d_ob_shapekey (bKeyingSet *ks, const char mode[])
{
- Object *ob= (G.obedit)? (G.obedit) : (OBACT);
+ //Object *ob= (G.obedit)? (G.obedit) : (OBACT); // XXX
+ Object *ob= NULL;
char *newname= NULL;
if(ob==NULL)
@@ -1366,7 +1649,8 @@ bKeyingSet defks_buts_shading_tex[] =
/* check if include particles entry */
static short incl_buts_ob (bKeyingSet *ks, const char mode[])
{
- Object *ob= OBACT;
+ //Object *ob= OBACT; // xxx
+ Object *ob= NULL;
/* only if object is mesh type */
if(ob==NULL) return 0;
@@ -1396,15 +1680,17 @@ bKeyingSet defks_buts_object[] =
/* check if include internal-renderer entry */
static short incl_buts_cam1 (bKeyingSet *ks, const char mode[])
{
+ Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
/* only if renderer is internal renderer */
- return (G.scene->r.renderer==R_INTERN);
+ return (scene->r.renderer==R_INTERN);
}
/* check if include external-renderer entry */
static short incl_buts_cam2 (bKeyingSet *ks, const char mode[])
{
+ Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
/* only if renderer is internal renderer */
- return (G.scene->r.renderer!=R_INTERN);
+ return (scene->r.renderer!=R_INTERN);
}
/* array for camera keyingset defines */
@@ -1464,8 +1750,9 @@ typedef enum eKS_Contexts {
/* ---------------- KeyingSet Tools ------------------- */
/* helper for commonkey_context_get() - get keyingsets for 3d-view */
-static void commonkey_context_getv3d (ListBase *sources, bKeyingContext **ksc)
+static void commonkey_context_getv3d (const bContext *C, ListBase *sources, bKeyingContext **ksc)
{
+ Scene *scene= CTX_data_scene(C);
Object *ob;
IpoCurve *icu;
@@ -1475,7 +1762,8 @@ static void commonkey_context_getv3d (ListBase *sources, bKeyingContext **ksc)
/* pose-level */
ob= OBACT;
*ksc= &ks_contexts[KSC_V3D_PCHAN];
- set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
+ // XXX
+ //set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
/* loop through posechannels */
for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
@@ -1497,62 +1785,60 @@ static void commonkey_context_getv3d (ListBase *sources, bKeyingContext **ksc)
}
}
else {
- Base *base;
-
/* object-level */
*ksc= &ks_contexts[KSC_V3D_OBJECT];
/* loop through bases */
- for (base= FIRSTBASE; base; base= base->next) {
- if (TESTBASELIB(base)) {
- bCommonKeySrc *cks;
-
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set id-block to key to */
- ob= base->object;
- cks->id= (ID *)ob;
-
- /* when ob's keyframes are in an action, default to using 'Object' as achan name */
- if (ob->ipoflag & OB_ACTION_OB)
- cks->actname= "Object";
-
- /* set ipo-flags */
- // TODO: add checks for lib-linked data
- if ((ob->ipo) || (ob->action)) {
- if (ob->ipo) {
- cks->ipo= ob->ipo;
- }
- else {
- bActionChannel *achan;
-
- cks->act= ob->action;
- achan= get_action_channel(ob->action, cks->actname);
-
- if (achan && achan->ipo)
- cks->ipo= achan->ipo;
- }
- /* cks->ipo can be NULL while editing */
- if(cks->ipo) {
- /* deselect all ipo-curves */
- for (icu= cks->ipo->curve.first; icu; icu= icu->next) {
- icu->flag &= ~IPO_SELECT;
- }
+ // XXX but we're only supposed to do this on editable ones!
+ CTX_DATA_BEGIN(C, Base*, base, selected_bases) {
+ bCommonKeySrc *cks;
+
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set id-block to key to */
+ ob= base->object;
+ cks->id= (ID *)ob;
+
+ /* when ob's keyframes are in an action, default to using 'Object' as achan name */
+ if (ob->ipoflag & OB_ACTION_OB)
+ cks->actname= "Object";
+
+ /* set ipo-flags */
+ // TODO: add checks for lib-linked data
+ if ((ob->ipo) || (ob->action)) {
+ if (ob->ipo) {
+ cks->ipo= ob->ipo;
+ }
+ else {
+ bActionChannel *achan;
+
+ cks->act= ob->action;
+ achan= get_action_channel(ob->action, cks->actname);
+
+ if (achan && achan->ipo)
+ cks->ipo= achan->ipo;
+ }
+ /* cks->ipo can be NULL while editing */
+ if(cks->ipo) {
+ /* deselect all ipo-curves */
+ for (icu= cks->ipo->curve.first; icu; icu= icu->next) {
+ icu->flag &= ~IPO_SELECT;
}
}
}
}
+ CTX_DATA_END;
}
}
/* helper for commonkey_context_get() - get keyingsets for buttons window */
-static void commonkey_context_getsbuts (ListBase *sources, bKeyingContext **ksc)
+static void commonkey_context_getsbuts (const bContext *C, ListBase *sources, bKeyingContext **ksc)
{
- bCommonKeySrc *cks;
-
#if 0 // XXX dunno what's the future of this stuff...
+ bCommonKeySrc *cks;
+
/* check on tab-type */
switch (G.buts->mainb) {
case CONTEXT_SHADING: /* ------------- Shading buttons ---------------- */
@@ -1690,21 +1976,25 @@ static void commonkey_context_getsbuts (ListBase *sources, bKeyingContext **ksc)
/* get keyingsets for appropriate context */
-static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, bKeyingContext **ksc)
+static void commonkey_context_get (const bContext *C, ScrArea *sa, short mode, ListBase *sources, bKeyingContext **ksc)
{
+ /* get current view if no view is defined */
+ if (sa == NULL)
+ sa= CTX_wm_area(C);
+
/* check view type */
switch (sa->spacetype) {
/* 3d view - first one tested as most often used */
case SPACE_VIEW3D:
{
- commonkey_context_getv3d(sources, ksc);
+ commonkey_context_getv3d(C, sources, ksc);
}
break;
/* buttons view */
case SPACE_BUTS:
{
- commonkey_context_getsbuts(sources, ksc);
+ commonkey_context_getsbuts(C, sources, ksc);
}
break;
@@ -1721,6 +2011,7 @@ static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, b
/* timeline view - keyframe buttons */
case SPACE_TIME:
{
+ bScreen *sc= CTX_wm_screen(C);
ScrArea *sab;
int bigarea= 0;
@@ -1731,12 +2022,12 @@ static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, b
//sab= find_biggest_area_of_type(SPACE_VIEW3D);
sab= NULL; // XXX for now...
if (sab) {
- commonkey_context_getv3d(sources, ksc);
+ commonkey_context_getv3d(C, sources, ksc);
return;
}
/* if not found, sab is now NULL, so perform own biggest area test */
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) { // XXX this has changed!
+ for (sa= sc->areabase.first; sa; sa= sa->next) { // XXX this has changed!
int area= sa->winx * sa->winy;
if (sa->spacetype != SPACE_TIME) {
@@ -1749,15 +2040,18 @@ static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, b
/* use whichever largest area was found (it shouldn't be a time window) */
if (sab)
- commonkey_context_get(sab, mode, sources, ksc);
+ commonkey_context_get(C, sab, mode, sources, ksc);
}
break;
}
}
/* flush updates after all operations */
-static void commonkey_context_finish (ListBase *sources)
+static void commonkey_context_finish (const bContext *C, ListBase *sources)
{
+ ScrArea *curarea= CTX_wm_area(C);
+ Scene *scene= CTX_data_scene(C);
+
/* check view type */
switch (curarea->spacetype) {
/* 3d view - first one tested as most often used */
@@ -1765,16 +2059,18 @@ static void commonkey_context_finish (ListBase *sources)
{
/* either pose or object level */
if (OBACT && (OBACT->pose)) {
- Object *ob= OBACT;
+ //Object *ob= OBACT;
/* recalculate ipo handles, etc. */
- if (ob->action)
- remake_action_ipos(ob->action);
+ // XXX this method has been removed!
+ //if (ob->action)
+ // remake_action_ipos(ob->action);
/* recalculate bone-paths on adding new keyframe? */
+ // XXX missing function
// TODO: currently, there is no setting to turn this on/off globally
- if (ob->pose->flag & POSE_RECALCPATHS)
- pose_recalculate_paths(ob);
+ //if (ob->pose->flag & POSE_RECALCPATHS)
+ // pose_recalculate_paths(ob);
}
else {
bCommonKeySrc *cks;
@@ -1793,19 +2089,17 @@ static void commonkey_context_finish (ListBase *sources)
}
/* flush refreshes after undo */
-static void commonkey_context_refresh (void)
+static void commonkey_context_refresh (const bContext *C)
{
+ ScrArea *curarea= CTX_wm_area(C);
+
/* check view type */
switch (curarea->spacetype) {
/* 3d view - first one tested as most often used */
case SPACE_VIEW3D:
{
/* do refreshes */
- DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0);
-
- //allspace(REMAKEIPO, 0);
- //allqueue(REDRAWVIEW3D, 0);
- //allqueue(REDRAWMARKER, 0);
+ ED_anim_dag_flush_update(C);
}
break;
@@ -1889,8 +2183,7 @@ static bKeyingSet *get_keyingset_fromcontext (bKeyingContext *ksc, short index)
/* ---------------- Keyframe Management API -------------------- */
/* Display a menu for handling the insertion of keyframes based on the active view */
-// TODO: add back an option for repeating last keytype
-void common_modifykey (short mode)
+void common_modifykey (const bContext *C, short mode)
{
ListBase dsources = {NULL, NULL};
bKeyingContext *ksc= NULL;
@@ -1906,7 +2199,7 @@ void common_modifykey (short mode)
/* delegate to other functions or get keyingsets to use
* - if the current area doesn't have its own handling, there will be data returned...
*/
- commonkey_context_get(curarea, mode, &dsources, &ksc);
+ commonkey_context_get(C, NULL, mode, &dsources, &ksc);
/* check that there is data to operate on */
if (ELEM(NULL, dsources.first, ksc)) {
@@ -1919,8 +2212,10 @@ void common_modifykey (short mode)
menustr= build_keyingsets_menu(ksc, "Delete");
else
menustr= build_keyingsets_menu(ksc, "Insert");
- menu_nr= pupmenu(menustr);
- if (menustr) MEM_freeN(menustr);
+ // XXX: this goes to the invoke!
+ //menu_nr= pupmenu(menustr);
+ //if (menustr) MEM_freeN(menustr);
+ menu_nr = -1; // XXX for now
/* no item selected or shapekey entry? */
if (menu_nr < 1) {
@@ -1928,9 +2223,10 @@ void common_modifykey (short mode)
BLI_freelistN(&dsources);
/* check if insert new shapekey */
- if ((menu_nr == 0) && (mode == COMMONKEY_MODE_INSERT))
- insert_shapekey(OBACT);
- else
+ // XXX missing function!
+ //if ((menu_nr == 0) && (mode == COMMONKEY_MODE_INSERT))
+ // insert_shapekey(OBACT);
+ //else
ksc->lastused= NULL;
return;
@@ -2053,7 +2349,7 @@ void common_modifykey (short mode)
}
/* apply post-keying flushes for this data sources */
- commonkey_context_finish(&dsources);
+ commonkey_context_finish(C, &dsources);
ksc->lastused= ks;
/* free temp data */
@@ -2064,27 +2360,26 @@ void common_modifykey (short mode)
BLI_snprintf(buf, 64, "Delete %s Key", ks->name);
else
BLI_snprintf(buf, 64, "Insert %s Key", ks->name);
- BIF_undo_push(buf);
+ //BIF_undo_push(buf);
/* queue updates for contexts */
- commonkey_context_refresh();
+ commonkey_context_refresh(C);
}
/* ---- */
/* used to insert keyframes from any view */
-void common_insertkey (void)
+void common_insertkey (const bContext *C)
{
- common_modifykey(COMMONKEY_MODE_INSERT);
+ common_modifykey(C, COMMONKEY_MODE_INSERT);
}
/* used to insert keyframes from any view */
-void common_deletekey (void)
+void common_deletekey (const bContext *C)
{
- common_modifykey(COMMONKEY_MODE_DELETE);
+ common_modifykey(C, COMMONKEY_MODE_DELETE);
}
-#endif // XXX reenable this file again later...
/* ************************************************** */
/* KEYFRAME DETECTION */