diff options
-rw-r--r-- | source/blender/editors/transform/transform.c | 110 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 11 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_action_types.h | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 9 |
4 files changed, 50 insertions, 86 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 55af5677a17..e0abe2606e7 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -7201,55 +7201,15 @@ static short getAnimEdit_SnapMode(TransInfo *t) return autosnap; } -/* This function is used for testing if an Animation Editor is displaying - * its data in frames or seconds (and the data needing to be edited as such). - * Returns 1 if in seconds, 0 if in frames - */ -static bool getAnimEdit_DrawTime(TransInfo *t) -{ - bool drawtime; - - if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; - - drawtime = (saction->flag & SACTION_DRAWTIME) != 0; - } - else if (t->spacetype == SPACE_NLA) { - SpaceNla *snla = (SpaceNla *)t->sa->spacedata.first; - - drawtime = (snla->flag & SNLA_DRAWTIME) != 0; - } - else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; - - drawtime = (sipo->flag & SIPO_DRAWTIME) != 0; - } - else { - drawtime = false; - } - - return drawtime; -} - - /* This function is used by Animation Editor specific transform functions to do * the Snap Keyframe to Nearest Frame/Marker */ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, AnimData *adt, short autosnap) { - /* snap key to nearest frame? */ - if (autosnap == SACTSNAP_FRAME) { - -#if 0 /* 'do_time' disabled for now */ - + /* snap key to nearest frame or second? */ + if (ELEM(autosnap, SACTSNAP_FRAME, SACTSNAP_SECOND)) { const Scene *scene = t->scene; -#if 0 /* NOTE: this works, but may be confusing behavior given the option's label, hence disabled */ - const bool do_time = getAnimEdit_DrawTime(t); -#else - const bool do_time = false; -#endif const double secf = FPS; -#endif double val; /* convert frame to nla-action time (if needed) */ @@ -7258,16 +7218,12 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, else val = *(td->val); -#if 0 /* 'do_time' disabled for now */ - /* do the snapping to nearest frame/second */ - if (do_time) { - val = (float)(floor((val / secf) + 0.5f) * secf); + if (autosnap == SACTSNAP_FRAME) { + val = floorf(val + 0.5); } - else -#endif - { - val = floor(val + 0.5); + else if (autosnap == SACTSNAP_SECOND) { + val = (float)(floor((val / secf) + 0.5f) * secf); } /* convert frame out of nla-action time */ @@ -7355,20 +7311,21 @@ static void headerTimeTranslate(TransInfo *t, char str[MAX_INFO_LEN]) else { const Scene *scene = t->scene; const short autosnap = getAnimEdit_SnapMode(t); - const bool do_time = getAnimEdit_DrawTime(t); const double secf = FPS; float val = t->values[0]; /* apply snapping + frame->seconds conversions */ if (autosnap == SACTSNAP_STEP) { - if (do_time) - val = floorf((double)val / secf + 0.5); - else - val = floorf(val + 0.5f); + /* frame step */ + val = floorf(val + 0.5f); + } + else if (autosnap == SACTSNAP_TSTEP) { + /* second step */ + val = floorf((double)val / secf + 0.5); } else { - if (do_time) - val = (float)((double)val / secf); + /* nearest frame/second/marker */ + val = (float)((double)val / secf); } if (autosnap == SACTSNAP_FRAME) @@ -7386,11 +7343,9 @@ static void applyTimeTranslateValue(TransInfo *t, float UNUSED(sval)) TransData2D *td2d = t->data2d; Scene *scene = t->scene; int i; - - const bool do_time = getAnimEdit_DrawTime(t); - const double secf = FPS; - + const short autosnap = getAnimEdit_SnapMode(t); + const double secf = FPS; float deltax, val /* , valprev */; @@ -7405,14 +7360,14 @@ static void applyTimeTranslateValue(TransInfo *t, float UNUSED(sval)) /* valprev = *td->val; */ /* UNUSED */ /* check if any need to apply nla-mapping */ - if (adt && t->spacetype != SPACE_SEQ) { + if (adt && (t->spacetype != SPACE_SEQ)) { deltax = t->values[0]; - if (autosnap == SACTSNAP_STEP) { - if (do_time) - deltax = (float)(floor(((double)deltax / secf) + 0.5) * secf); - else - deltax = (float)(floor(deltax + 0.5f)); + if (autosnap == SACTSNAP_TSTEP) { + deltax = (float)(floor(((double)deltax / secf) + 0.5) * secf); + } + else if (autosnap == SACTSNAP_STEP) { + deltax = (float)(floor(deltax + 0.5f)); } val = BKE_nla_tweakedit_remap(adt, td->ival, NLATIME_CONVERT_MAP); @@ -7422,11 +7377,11 @@ static void applyTimeTranslateValue(TransInfo *t, float UNUSED(sval)) else { deltax = val = t->values[0]; - if (autosnap == SACTSNAP_STEP) { - if (do_time) - val = (float)(floor(((double)deltax / secf) + 0.5) * secf); - else - val = (float)(floor(val + 0.5f)); + if (autosnap == SACTSNAP_TSTEP) { + val = (float)(floor(((double)deltax / secf) + 0.5) * secf); + } + else if (autosnap == SACTSNAP_STEP) { + val = (float)(floor(val + 0.5f)); } *(td->val) = td->ival + val; @@ -7674,7 +7629,6 @@ static void applyTimeScaleValue(TransInfo *t) int i; const short autosnap = getAnimEdit_SnapMode(t); - const bool do_time = getAnimEdit_DrawTime(t); const double secf = FPS; @@ -7687,11 +7641,11 @@ static void applyTimeScaleValue(TransInfo *t) float startx = CFRA; float fac = t->values[0]; - if (autosnap == SACTSNAP_STEP) { - if (do_time) - fac = (float)(floor((double)fac / secf + 0.5) * secf); - else - fac = (float)(floor(fac + 0.5f)); + if (autosnap == SACTSNAP_TSTEP) { + fac = (float)(floor((double)fac / secf + 0.5) * secf); + } + else if (autosnap == SACTSNAP_STEP) { + fac = (float)(floor(fac + 0.5f)); } /* check if any need to apply nla-mapping */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 8428bfea0c7..5e5dd00476b 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4110,11 +4110,12 @@ void flushTransGraphData(TransInfo *t) */ if ((td->flag & TD_NOTIMESNAP) == 0) { switch (sipo->autosnap) { - case SACTSNAP_FRAME: /* snap to nearest frame (or second if drawing seconds) */ - if (sipo->flag & SIPO_DRAWTIME) - td2d->loc[0] = floor(((double)td2d->loc[0] / secf) + 0.5) * secf; - else - td2d->loc[0] = floor((double)td2d->loc[0] + 0.5); + case SACTSNAP_FRAME: /* snap to nearest frame */ + td2d->loc[0] = floor((double)td2d->loc[0] + 0.5); + break; + + case SACTSNAP_SECOND: /* snap to nearest second */ + td2d->loc[0] = floor(((double)td2d->loc[0] / secf) + 0.5) * secf; break; case SACTSNAP_MARKER: /* snap to nearest marker */ diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 76aacb5bebc..dab825c856e 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -655,7 +655,11 @@ typedef enum eAnimEdit_AutoSnap { /* snap to actual frames/seconds (nla-action time) */ SACTSNAP_FRAME = 2, /* snap to nearest marker */ - SACTSNAP_MARKER = 3 + SACTSNAP_MARKER = 3, + /* snap to actual seconds (nla-action time) */ + SACTSNAP_SECOND = 4, + /* snap to 1.0 second increments */ + SACTSNAP_TSTEP = 5 } eAnimEdit_AutoSnap; diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8fe5376322e..fb457182852 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -112,8 +112,13 @@ static EnumPropertyItem transform_orientation_items[] = { #ifndef RNA_RUNTIME static EnumPropertyItem autosnap_items[] = { {SACTSNAP_OFF, "NONE", 0, "No Auto-Snap", ""}, - {SACTSNAP_STEP, "STEP", 0, "Time Step", "Snap to 1.0 frame/second intervals"}, - {SACTSNAP_FRAME, "FRAME", 0, "Nearest Frame", "Snap to actual frames/seconds (nla-action time)"}, + /* {-1, "", 0, "", ""}, */ + {SACTSNAP_STEP, "STEP", 0, "Frame Step", "Snap to 1.0 frame intervals"}, + {SACTSNAP_TSTEP, "TIME_STEP", 0, "Second Step", "Snap to 1.0 second intervals"}, + /* {-1, "", 0, "", ""}, */ + {SACTSNAP_FRAME, "FRAME", 0, "Nearest Frame", "Snap to actual frames (nla-action time)"}, + {SACTSNAP_SECOND, "SECOND", 0, "Nearest Second", "Snap to actual seconds (nla-action time)"}, + /* {-1, "", 0, "", ""}, */ {SACTSNAP_MARKER, "MARKER", 0, "Nearest Marker", "Snap to nearest marker"}, {0, NULL, 0, NULL, NULL} }; |