From 073e9fdb0ee6dd770dc4c16685c123ca2c68147f Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 1 Nov 2022 21:04:44 -0700 Subject: [PATCH] fixed transition regression --- app/node/block/clip/clip.cpp | 16 ++++++++++++++-- app/node/block/transition/transition.cpp | 7 ++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/node/block/clip/clip.cpp b/app/node/block/clip/clip.cpp index 684d0112d..70e9a7304 100644 --- a/app/node/block/clip/clip.cpp +++ b/app/node/block/clip/clip.cpp @@ -21,6 +21,7 @@ #include "clip.h" #include "config/config.h" +#include "node/block/transition/transition.h" #include "node/output/track/track.h" #include "node/output/viewer/viewer.h" #include "widget/slider/floatslider.h" @@ -467,8 +468,19 @@ TimeRange ClipBlock::InputTimeAdjustment(const QString& input, int element, cons rational out = input_time.out(); if (clamp) { - in = std::max(in, rational(0)); - out = std::min(out, length()); + rational minimum = 0; + rational maximum = length(); + + if (in_transition_) { + minimum -= in_transition_->length(); + } + + if (out_transition_) { + maximum += out_transition_->length(); + } + + in = std::max(in, minimum); + out = std::min(out, maximum); } in = SequenceToMediaTime(in); diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index 3eda77d5f..c78796393 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -292,7 +292,12 @@ TimeRange TransitionBlock::InputTimeAdjustment(const QString &input, int element if (input == kInBlockInput || input == kOutBlockInput) { Block* block = dynamic_cast(GetConnectedOutput(input)); if (block) { - return input_time + in() - block->in(); + TimeRange range = input_time; + if (clamp) { + range.set_range(std::max(rational(0), range.in()), std::min(this->length(), range.out())); + } + range = range + in() - block->in(); + return range; } }