X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftransition.cpp;h=10b03740654832b42f6e922008552fe18fc08410;hb=0e851440b83d43c047f11e3a740d08cd58d75bbc;hp=47cdf7376f1cf8fbea33f4fa635a80ff3b30ba6b;hpb=80ffbcaa1c48929abe0cb439eaea4deb0ecce534;p=kdenlive diff --git a/src/transition.cpp b/src/transition.cpp index 47cdf737..10b03740 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -39,10 +39,23 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo m_transitionTrack(transitiontrack) { setZValue(3); - setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1)); + m_info.cropDuration = info.endPos - info.startPos; setPos(info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2)); - m_cropStart = GenTime(); +#if QT_VERSION >= 0x040600 + m_startAnimation = new QPropertyAnimation(this, "rect"); + m_startAnimation->setDuration(200); + QRectF r(0, 0, m_info.cropDuration.frames(fps) - 0.02, 1); + QRectF r2(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1)); + m_startAnimation->setStartValue(r); + m_startAnimation->setEndValue(r2); + m_startAnimation->setEasingCurve(QEasingCurve::OutQuad); + m_startAnimation->start(); +#else + setRect(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1)); +#endif + + m_info.cropStart = GenTime(); m_maxDuration = GenTime(600); if (m_automaticTransition) setBrush(QColor(200, 200, 50, 100)); @@ -65,6 +78,11 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo Transition::~Transition() { + blockSignals(true); +#if QT_VERSION >= 0x040600 + delete m_startAnimation; +#endif + if (scene()) scene()->removeItem(this); } Transition *Transition::clone() @@ -147,7 +165,6 @@ void Transition::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*widget*/) { - const double scale = option->matrix.m11(); const QRectF exposed = option->exposedRect; painter->setClipRect(exposed); const QRectF br = rect(); @@ -194,6 +211,10 @@ int Transition::type() const //virtual QVariant Transition::itemChange(GraphicsItemChange change, const QVariant &value) { + if (change == QGraphicsItem::ItemSelectedChange) { + if (value.toBool()) setZValue(10); + else setZValue(3); + } if (change == ItemPositionChange && scene()) { // calculate new position. QPointF newPos = value.toPointF(); @@ -207,11 +228,14 @@ QVariant Transition::itemChange(GraphicsItemChange change, const QVariant &value // Only one clip is moving QRectF sceneShape = rect(); sceneShape.translate(newPos); - QList items = scene()->items(sceneShape, Qt::IntersectsItemShape); + QList items; + if (projectScene()->editMode() == NORMALEDIT) + items = scene()->items(sceneShape, Qt::IntersectsItemShape); items.removeAll(this); if (!items.isEmpty()) { for (int i = 0; i < items.count(); i++) { + if (!items.at(i)->isEnabled()) continue; if (items.at(i)->type() == type()) { // Collision! Don't move. //kDebug()<<"/// COLLISION WITH ITEM: "<boundingRect()<<", POS: "<pos()<<", ME: "<(items.at(i))->startPos() - m_cropDuration).frames(m_fps); + int npos = (static_cast < AbstractClipItem* >(items.at(i))->startPos() - m_info.cropDuration).frames(m_fps); newPos.setX(npos); } else { // get pos just after colliding clip int npos = static_cast < AbstractClipItem* >(items.at(i))->endPos().frames(m_fps); newPos.setX(npos); } - m_track = newTrack; + m_info.track = newTrack; //kDebug()<<"// ITEM NEW POS: "<