Untitled
unknown
plain_text
2 years ago
2.9 kB
3
Indexable
void transitionRangeForUnifying(MTime & leftSegmentStart, MTime & leftSegmentEnd, MTime & rightSegmentStart, MTime & rightSegmentEnd, Timeline::ClipTiming const & leftClipTiming, Timeline::ClipTiming const & rightClipTiming) { auto const minDuration = Timeline::MIN_CLIP_DURATION; auto const maxDuration = std::min(leftClipTiming.duration() - leftClipTiming.transitionIn(), rightClipTiming.duration() - rightClipTiming.transitionOut()); leftSegmentStart = rightClipTiming.timestamp() - maxDuration; leftSegmentEnd = rightClipTiming.timestamp() - minDuration; rightSegmentStart = rightClipTiming.timestamp() + minDuration; rightSegmentEnd = rightClipTiming.timestamp() + maxDuration; } void transitionRangeForRight(MTime & leftSegmentStart, MTime & leftSegmentEnd, MTime const & rightSegmentStart, Timeline::ClipTiming const & leftClipTiming) { auto const minDuration = Timeline::MIN_CLIP_DURATION; leftSegmentStart = leftClipTiming.timestamp() + leftClipTiming.transitionIn(); leftSegmentEnd = rightSegmentStart - minDuration; } void transitionRangeForLeft(MTime & rightSegmentStart, MTime & rightSegmentEnd, Timeline::ClipTiming const & rightClipTiming) { auto const minDuration = Timeline::MIN_CLIP_DURATION; rightSegmentStart = rightClipTiming.timestamp() + minDuration; rightSegmentEnd = rightClipTiming.end() - rightClipTiming.transitionOut(); } auto isInRange = [](MTime left, MTime right, MTime resizeTimeStamp) { return (resizeTimeStamp > left && resizeTimeStamp < right); }; bool TimelineScene::TransitionItem::isResizePossible(ResizeContext const & from, MTime ts) { auto const [leftClip, rightClip] = clipPair(); //дефолтные значения для рассчетов auto minLeft = from.timing.timestamp(); auto maxLeft = from.timing.timestamp(); auto minRight = from.timing.end(); auto maxRight = from.timing.end(); if (transitionType() == TransitionType::Unifying) { auto leftTiming = timeline()->clipTiming(leftClip); auto rightTiming = timeline()->clipTiming(rightClip); //считаем допустимые отрезки для ресайза transitionRangeForUnifying(minLeft, maxLeft, minRight, maxRight, leftTiming, rightTiming); return (isInRange(minLeft, maxLeft, ts) || isInRange(minRight, maxRight, ts)); } else if (transitionType() == TransitionType::Right) { auto const & leftTiming = timeline()->clipTiming(leftClip); //считаем допустимые отрезки для ресайза transitionRangeForRight(minLeft, maxLeft, minRight, leftTiming); return isInRange(minLeft, maxLeft, ts); } else if (transitionType() == TransitionType::Left) { auto const & rightTiming = timeline()->clipTiming(rightClip); //считаем допустимые отрезки для ресайза transitionRangeForLeft(minRight, maxRight, rightTiming); return isInRange(minRight, maxRight, ts); } return false; }
Editor is loading...