Fix T46391: Sync Length in NLA is not working on all instances of clip
authorJoshua Leung <aligorith@gmail.com>
Thu, 8 Oct 2015 11:02:58 +0000 (00:02 +1300)
committerJoshua Leung <aligorith@gmail.com>
Thu, 8 Oct 2015 11:08:07 +0000 (00:08 +1300)
source/blender/blenkernel/intern/nla.c

index 378bb82be17284ef395b2fa4e77d5ca1c38bfec7..20697659e63115cdeb108ed1d022b5a272486c0b 100644 (file)
@@ -1778,7 +1778,7 @@ bool BKE_nla_tweakmode_enter(AnimData *adt)
                }
                return false;
        }
-               
+       
        /* go over all the tracks up to the active one, tagging each strip that uses the same 
         * action as the active strip, but leaving everything else alone
         */
@@ -1859,8 +1859,19 @@ void BKE_nla_tweakmode_exit(AnimData *adt)
        for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
                nlt->flag &= ~NLATRACK_DISABLED;
                
-               for (strip = nlt->strips.first; strip; strip = strip->next)
+               for (strip = nlt->strips.first; strip; strip = strip->next) {
+                       /* sync strip extents if this strip uses the same action */
+                       if ((adt->actstrip) && (adt->actstrip->act == strip->act) && (strip->flag & NLASTRIP_FLAG_SYNC_LENGTH)) {
+                               /* recalculate the length of the action */
+                               calc_action_range(strip->act, &strip->actstart, &strip->actend, 0);
+                               
+                               /* adjust the strip extents in response to this */
+                               BKE_nlastrip_recalculate_bounds(strip);
+                       }
+                       
+                       /* clear tweakuser flag */
                        strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER;
+               }
        }
        
        /* handle AnimData level changes: