diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-09-02 18:48:05 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-09-02 18:50:55 +0300 |
commit | c8cc664ce3588aedcfe6933e82130c6d0c8a0e14 (patch) | |
tree | b5253030ab2df5532501372962e92cd711c43ebb /source/blender/editors/space_action/action_edit.c | |
parent | 5671611c40180be1774aa360993d1f05238257c0 (diff) |
Fix T45995: Auto-set preview range sets superfluous end key.
get_keyframe_extents() would add an extra frame in case of mono-key fcurves in selected set...
Now do the 'not same start/end frames' check later, and also use floor/ceil instead of round
(we want to start at frame 3 if first key is at frame 3.8, reversed-same goes for end frame).
Diffstat (limited to 'source/blender/editors/space_action/action_edit.c')
-rw-r--r-- | source/blender/editors/space_action/action_edit.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index b2e046ee24b..e351fb57d9a 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -223,7 +223,7 @@ static bool get_keyframe_extents(bAnimContext *ac, float *min, float *max, const float tmin, tmax; /* get range and apply necessary scaling before processing */ - if (calc_fcurve_range(fcu, &tmin, &tmax, onlySel, true)) { + if (calc_fcurve_range(fcu, &tmin, &tmax, onlySel, false)) { if (adt) { tmin = BKE_nla_tweakedit_remap(adt, tmin, NLATIME_CONVERT_MAP); @@ -237,7 +237,7 @@ static bool get_keyframe_extents(bAnimContext *ac, float *min, float *max, const } } } - + /* free memory */ ANIM_animdata_freelist(&anim_data); } @@ -275,8 +275,12 @@ static int actkeys_previewrange_exec(bContext *C, wmOperator *UNUSED(op)) /* set the range directly */ get_keyframe_extents(&ac, &min, &max, false); scene->r.flag |= SCER_PRV_RANGE; - scene->r.psfra = iroundf(min); - scene->r.pefra = iroundf(max); + scene->r.psfra = floorf(min); + scene->r.pefra = ceilf(max); + + if (scene->r.psfra == scene->r.pefra) { + scene->r.pefra = scene->r.psfra + 1; + } /* set notifier that things have changed */ // XXX err... there's nothing for frame ranges yet, but this should do fine too |