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')
-rw-r--r--source/blender/blenkernel/intern/nla.c18
-rw-r--r--source/blender/editors/animation/anim_filter.c11
-rw-r--r--source/blender/editors/space_nla/nla_draw.c20
3 files changed, 25 insertions, 24 deletions
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index b7d6c7a5a28..828a6c99838 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -2077,10 +2077,10 @@ 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
+ /* Go over all the tracks, tagging each strip that uses the same
+ * action as the active strip, but leaving everything else alone.
*/
- for (nlt = activeTrack->prev; nlt; nlt = nlt->prev) {
+ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
for (strip = nlt->strips.first; strip; strip = strip->next) {
if (strip->act == activeStrip->act) {
strip->flag |= NLASTRIP_FLAG_TWEAKUSER;
@@ -2091,15 +2091,9 @@ bool BKE_nla_tweakmode_enter(AnimData *adt)
}
}
- /* tag all other strips in active track that uses the same action as the active strip */
- for (strip = activeTrack->strips.first; strip; strip = strip->next) {
- if ((strip->act == activeStrip->act) && (strip != activeStrip)) {
- strip->flag |= NLASTRIP_FLAG_TWEAKUSER;
- }
- else {
- strip->flag &= ~NLASTRIP_FLAG_TWEAKUSER;
- }
- }
+ /* Untag tweaked track. This leads to non tweaked actions being drawn differently than the
+ * tweaked action. */
+ activeStrip->flag &= ~NLASTRIP_FLAG_TWEAKUSER;
/* go over all the tracks after AND INCLUDING the active one, tagging them as being disabled
* - the active track needs to also be tagged, otherwise, it'll overlap with the tweaks going on
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 3416d72c021..a17f1950be0 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -1555,17 +1555,6 @@ static size_t animfilter_nla(bAnimContext *UNUSED(ac),
next = nlt->next;
}
- /* If we're in NLA-tweak-mode, don't show this track if it was disabled
- * (due to tweaking) for now:
- * - active track should still get shown though (even though it has disabled flag set)
- */
- // FIXME: the channels after should still get drawn, just 'differently',
- // and after an active-action channel.
- if ((adt->flag & ADT_NLA_EDIT_ON) && (nlt->flag & NLATRACK_DISABLED) &&
- (adt->act_track != nlt)) {
- continue;
- }
-
/* only work with this channel and its subchannels if it is editable */
if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_NLT(nlt)) {
/* only include this track if selected in a way consistent with the filtering requirements */
diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c
index b0d5360e29b..9e43a8ce109 100644
--- a/source/blender/editors/space_nla/nla_draw.c
+++ b/source/blender/editors/space_nla/nla_draw.c
@@ -408,6 +408,24 @@ static uint nla_draw_use_dashed_outlines(const float color[4], bool muted)
return shdr_pos;
}
+/** This check only accounts for the track's disabled flag and whether the strip is being tweaked.
+ * It does not account for muting or soloing. */
+static bool is_nlastrip_enabled(AnimData *adt, NlaTrack *nlt, NlaStrip *strip)
+{
+ /** This shouldn't happen. If passed NULL, then just treat strip as enabled. */
+ BLI_assert(adt);
+ if (!adt) {
+ return true;
+ }
+
+ if ((nlt->flag & NLATRACK_DISABLED) == 0) {
+ return true;
+ }
+
+ /** For disabled tracks, only the tweaked strip is enabled. */
+ return adt->actstrip == strip;
+}
+
/* main call for drawing a single NLA-strip */
static void nla_draw_strip(SpaceNla *snla,
AnimData *adt,
@@ -470,7 +488,7 @@ static void nla_draw_strip(SpaceNla *snla,
}
/* draw 'inside' of strip itself */
- if (non_solo == 0) {
+ if (non_solo == 0 && is_nlastrip_enabled(adt, nlt, strip)) {
immUnbindProgram();
/* strip is in normal track */