From: Marco Gittler Date: Mon, 10 Mar 2008 20:06:50 +0000 (+0000) Subject: use clipitem resize also for transition resize X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=5ed52e8237200fa4c189d7ece3acff774ed8f070;p=kdenlive use clipitem resize also for transition resize svn path=/branches/KDE4/; revision=2042 --- diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index f8920aec..9c87d3a6 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -57,11 +57,53 @@ GenTime AbstractClipItem::cropStart() const { } void AbstractClipItem::resizeStart(int posx, double scale) { - + GenTime durationDiff = GenTime(posx, m_fps) - m_startPos; + if (durationDiff == GenTime()) return; + //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; + if (m_cropStart + durationDiff < GenTime()) { + durationDiff = GenTime() - m_cropStart; + } else if (durationDiff >= m_cropDuration) { + durationDiff = m_cropDuration - GenTime(3, m_fps); + } + m_startPos += durationDiff; + m_cropStart += durationDiff; + m_cropDuration = m_cropDuration - durationDiff; + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); + QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); + for (int i = 0; i < collisionList.size(); ++i) { + QGraphicsItem *item = collisionList.at(i); + if (item->type() == type()) { + GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos; + setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height()); + m_startPos += diff; + m_cropStart += diff; + m_cropDuration = m_cropDuration - diff; + break; + } + } } void AbstractClipItem::resizeEnd(int posx, double scale) { - + GenTime durationDiff = GenTime(posx, m_fps) - endPos(); + if (durationDiff == GenTime()) return; + //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; + if (m_cropDuration + durationDiff <= GenTime()) { + durationDiff = GenTime() - (m_cropDuration - GenTime(3, m_fps)); + } else if (m_cropStart + m_cropDuration + durationDiff >= m_maxDuration) { + durationDiff = m_maxDuration - m_cropDuration - m_cropStart; + } + m_cropDuration += durationDiff; + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); + QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); + for (int i = 0; i < collisionList.size(); ++i) { + QGraphicsItem *item = collisionList.at(i); + if (item->type() == type()) { + GenTime diff = ((AbstractClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos(); + m_cropDuration = diff; + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); + break; + } + } } void AbstractClipItem::setFadeOut(int pos, double scale) { @@ -95,3 +137,7 @@ int AbstractClipItem::fadeIn() const { int AbstractClipItem::fadeOut() const { return m_endFade; } + +GenTime AbstractClipItem::maxDuration() const { + return m_maxDuration; +} diff --git a/src/abstractclipitem.h b/src/abstractclipitem.h index c727ca2a..6620745b 100644 --- a/src/abstractclipitem.h +++ b/src/abstractclipitem.h @@ -24,11 +24,13 @@ public: virtual double fps() const; virtual int fadeIn() const; virtual int fadeOut() const; + virtual GenTime maxDuration() const; protected: int m_track; GenTime m_cropStart; GenTime m_cropDuration; GenTime m_startPos; + GenTime m_maxDuration; double m_fps; uint m_startFade; uint m_endFade; diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 19413d30..655dda70 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -154,10 +154,6 @@ int ClipItem::clipProducer() { return m_producer; } -GenTime ClipItem::maxDuration() const { - return m_maxDuration; -} - GenTime ClipItem::cropStart() const { return m_cropStart; } @@ -536,54 +532,12 @@ void ClipItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *) { } void ClipItem::resizeStart(int posx, double scale) { - GenTime durationDiff = GenTime(posx, m_fps) - m_startPos; - if (durationDiff == GenTime()) return; - //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; - if (m_cropStart + durationDiff < GenTime()) { - durationDiff = GenTime() - m_cropStart; - } else if (durationDiff >= m_cropDuration) { - durationDiff = m_cropDuration - GenTime(3, m_fps); - } - m_startPos += durationDiff; - m_cropStart += durationDiff; - m_cropDuration = m_cropDuration - durationDiff; - setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); - QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); - for (int i = 0; i < collisionList.size(); ++i) { - QGraphicsItem *item = collisionList.at(i); - if (item->type() == 70000) { - GenTime diff = ((ClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos; - setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height()); - m_startPos += diff; - m_cropStart += diff; - m_cropDuration = m_cropDuration - diff; - break; - } - } + AbstractClipItem::resizeStart(posx, scale); if (m_hasThumbs) startThumbTimer->start(100); } void ClipItem::resizeEnd(int posx, double scale) { - GenTime durationDiff = GenTime(posx, m_fps) - endPos(); - if (durationDiff == GenTime()) return; - //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; - if (m_cropDuration + durationDiff <= GenTime()) { - durationDiff = GenTime() - (m_cropDuration - GenTime(3, m_fps)); - } else if (m_cropStart + m_cropDuration + durationDiff >= m_maxDuration) { - durationDiff = m_maxDuration - m_cropDuration - m_cropStart; - } - m_cropDuration += durationDiff; - setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); - QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); - for (int i = 0; i < collisionList.size(); ++i) { - QGraphicsItem *item = collisionList.at(i); - if (item->type() == 70000) { - GenTime diff = ((ClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos(); - m_cropDuration = diff; - setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); - break; - } - } + AbstractClipItem::resizeEnd(posx, scale); if (m_hasThumbs) endThumbTimer->start(100); } diff --git a/src/clipitem.h b/src/clipitem.h index ce6b50c3..bba588b7 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -51,7 +51,7 @@ public: int clipType(); DocClipBase *baseClip(); QString clipName(); - GenTime maxDuration() const; + GenTime cropStart() const; QDomElement xml() const; @@ -93,7 +93,7 @@ private: int m_producer; CLIPTYPE m_clipType; QString m_clipName; - GenTime m_maxDuration; + int m_maxTrack; diff --git a/src/transition.cpp b/src/transition.cpp index a925fb79..4e0ecc0f 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -275,6 +275,8 @@ int Transition::type() const { return 70001; } OPERATIONTYPE Transition::operationMode(QPointF pos, double scale) { + if (abs((int)(pos.x() - rect().x())) < 6) return RESIZESTART; + else if (abs((int)(pos.x() - (rect().x() + rect().width()))) < 6) return RESIZEEND; return MOVE; } void Transition::resizeTransitionStart(GenTime time) {