X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftransition.cpp;h=f713709477461d796d6edb66b07290e2147865e9;hb=3577376c5e5b6cc533af0edc9d4f03d0b3770f9e;hp=2c37ffcd13b9cf5c10b4081a7c4c4150b4f551ed;hpb=01f2d299aecca363ad84fb3ebd2b80af931d5e80;p=kdenlive diff --git a/src/transition.cpp b/src/transition.cpp index 2c37ffcd..f7137094 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -40,9 +40,21 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo { setZValue(3); m_info.cropDuration = info.endPos - info.startPos; - setRect(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1)); setPos(info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2)); +#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, (qreal)(KdenliveSettings::trackheight() / 3 + 5)); + 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); @@ -58,7 +70,7 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo if (m_automaticTransition) m_parameters.setAttribute("automatic", 1); else if (m_parameters.attribute("automatic") == "1") m_automaticTransition = true; if (m_parameters.attribute("force_track") == "1") m_forceTransitionTrack = true; - m_name = m_parameters.elementsByTagName("name").item(0).toElement().text(); + m_name = i18n(m_parameters.elementsByTagName("name").item(0).toElement().text().toUtf8().data()); m_secondClip = 0; //m_referenceClip->addTransition(this); @@ -66,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() @@ -75,14 +92,16 @@ Transition *Transition::clone() return tr; } -QString Transition::transitionName() const +QString Transition::transitionTag() const { - return m_name; + return m_parameters.attribute("tag"); } -QString Transition::transitionTag() const +QStringList Transition::transitionInfo() const { - return m_parameters.attribute("tag"); + QStringList info; + info << m_name << m_parameters.attribute("tag") << m_parameters.attribute("id"); + return info; } bool Transition::isAutomatic() const @@ -108,7 +127,7 @@ void Transition::setTransitionParameters(const QDomElement params) m_parameters = params; if (m_parameters.attribute("force_track") == "1") setForcedTrack(true, m_parameters.attribute("transition_btrack").toInt()); else if (m_parameters.attribute("force_track") == "0") setForcedTrack(false, m_parameters.attribute("transition_btrack").toInt()); - m_name = m_parameters.elementsByTagName("name").item(0).toElement().text(); + m_name = i18n(m_parameters.elementsByTagName("name").item(0).toElement().text().toUtf8().data()); update(); } @@ -194,6 +213,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 +230,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: "<startPos().frames(m_referenceClip->fps())); @@ -314,3 +341,8 @@ bool Transition::hasGeometry() return false; } +int Transition::defaultZValue() const +{ + return 3; +} +