diff options
Diffstat (limited to 'source/blender/editors/transform/transform_convert_nla.c')
-rw-r--r-- | source/blender/editors/transform/transform_convert_nla.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/source/blender/editors/transform/transform_convert_nla.c b/source/blender/editors/transform/transform_convert_nla.c index cfa933d1600..830094ebe83 100644 --- a/source/blender/editors/transform/transform_convert_nla.c +++ b/source/blender/editors/transform/transform_convert_nla.c @@ -56,6 +56,29 @@ typedef struct TransDataNla { } TransDataNla; /* -------------------------------------------------------------------- */ +/** \name Transform application to NLA strips + * \{ */ + +/** + * \brief Applies a translation to the given #NlaStrip. + * \param strip_rna_ptr: The RNA pointer of the NLA strip to modify. + * \param transdata: The transformation info structure. + */ +static void applyTransformNLA_translation(PointerRNA *strip_rna_ptr, const TransDataNla *transdata) +{ + /* NOTE: we write these twice to avoid truncation errors which can arise when + * moving the strips a large distance using numeric input T33852. + */ + RNA_float_set(strip_rna_ptr, "frame_start", transdata->h1[0]); + RNA_float_set(strip_rna_ptr, "frame_end", transdata->h2[0]); + + RNA_float_set(strip_rna_ptr, "frame_start", transdata->h1[0]); + RNA_float_set(strip_rna_ptr, "frame_end", transdata->h2[0]); +} + +/** \} */ + +/* -------------------------------------------------------------------- */ /** \name NLA Transform Creation * \{ */ @@ -329,15 +352,8 @@ static void recalcData_nla(TransInfo *t) * * this is done as a iterative procedure (done 5 times max for now) */ - NlaStrip *prev = strip->prev; - while (prev != NULL && (prev->type & NLASTRIP_TYPE_TRANSITION)) { - prev = prev->prev; - } - - NlaStrip *next = strip->next; - while (next != NULL && (next->type & NLASTRIP_TYPE_TRANSITION)) { - next = next->next; - } + NlaStrip *prev = BKE_nlastrip_prev_in_track(strip, true); + NlaStrip *next = BKE_nlastrip_next_in_track(strip, true); for (short iter = 0; iter < 5; iter++) { const bool pExceeded = (prev != NULL) && (tdn->h1[0] < prev->end); @@ -380,17 +396,10 @@ static void recalcData_nla(TransInfo *t) /* Use RNA to write the values to ensure that constraints on these are obeyed * (e.g. for transition strips, the values are taken from the neighbors) - * - * NOTE: we write these twice to avoid truncation errors which can arise when - * moving the strips a large distance using numeric input T33852. */ RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr); - RNA_float_set(&strip_ptr, "frame_start", tdn->h1[0]); - RNA_float_set(&strip_ptr, "frame_end", tdn->h2[0]); - - RNA_float_set(&strip_ptr, "frame_start", tdn->h1[0]); - RNA_float_set(&strip_ptr, "frame_end", tdn->h2[0]); + applyTransformNLA_translation(&strip_ptr, tdn); /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); |