]> git.sesse.net Git - kdenlive/blobdiff - src/transition.cpp
Move undo commands to their own subdirectory
[kdenlive] / src / transition.cpp
index 811cc8ba1b8aed3062f81b17884dce93b04ba541..fe3aa518e7c265bbb993e780ea97f5adebadcdb6 100644 (file)
@@ -31,7 +31,7 @@
 #include <QStyleOptionGraphicsItem>
 
 
-Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDomElement params, bool automaticTransition) :
+Transition::Transition(const ItemInfo &info, int transitiontrack, double fps, QDomElement params, bool automaticTransition) :
         AbstractClipItem(info, QRectF(), fps),
         m_forceTransitionTrack(false),
         m_automaticTransition(automaticTransition),
@@ -40,26 +40,26 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo
 {
     setZValue(3);
     m_info.cropDuration = info.endPos - info.startPos;
-    setPos(info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
+    setPos(info.startPos.frames(fps), (int)(info.track * KdenliveSettings::trackheight() + itemOffset() + 1));
 
 #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));
+    QRectF r(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal) itemHeight() / 2);
+    QRectF r2(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal)itemHeight());
     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));
+    setRect(0, 0, m_info.cropDuration.frames(fps) - 0.02, (qreal) itemHeight());
 #endif
 
     m_info.cropStart = GenTime();
     m_maxDuration = GenTime(600);
 
-    if (m_automaticTransition) setBrush(QColor(200, 200, 50, 100));
-    else setBrush(QColor(200, 100, 50, 100));
+    if (m_automaticTransition) setBrush(QColor(200, 200, 50, 180));
+    else setBrush(QColor(200, 100, 50, 180));
 
     //m_referenceClip = clipa;
     if (params.isNull()) {
@@ -70,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 = i18n(m_parameters.elementsByTagName("name").item(0).toElement().text().toUtf8().data());
+    m_name = i18n(m_parameters.firstChildElement("name").text().toUtf8().data());
     m_secondClip = 0;
 
     //m_referenceClip->addTransition(this);
@@ -114,10 +114,10 @@ void Transition::setAutomatic(bool automatic)
     m_automaticTransition = automatic;
     if (automatic) {
         m_parameters.setAttribute("automatic", 1);
-        setBrush(QColor(200, 200, 50, 150));
+        setBrush(QColor(200, 200, 50, 180));
     } else {
         m_parameters.removeAttribute("automatic");
-        setBrush(QColor(200, 50, 50, 150));
+        setBrush(QColor(200, 100, 50, 180));
     }
     update();
 }
@@ -127,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 = i18n(m_parameters.elementsByTagName("name").item(0).toElement().text().toUtf8().data());
+    m_name = i18n(m_parameters.firstChildElement("name").text().toUtf8().data());
     update();
 }
 
@@ -170,26 +170,26 @@ void Transition::paint(QPainter *painter,
     const QRectF exposed = option->exposedRect;
     painter->setClipRect(exposed);
     const QRectF br = rect();
-    const QRectF mapped = painter->matrix().mapRect(br);
+    QPen framePen;
+    const QRectF mapped = painter->worldTransform().mapRect(br);
 
     painter->fillRect(exposed, brush());
 
-    //int top = (int)(br.y() + br.height() / 2 - 7);
     QPointF p1(br.x(), br.y() + br.height() / 2 - 7);
-    painter->setMatrixEnabled(false);
-    //painter->drawPixmap(painter->matrix().map(p1) + QPointF(5, 0), transitionPixmap());
+    painter->setWorldMatrixEnabled(false);
     const QString text = m_name + (m_forceTransitionTrack ? "|>" : QString());
 
     // Draw clip name
-    QColor frameColor(brush().color().darker());
     if (isSelected() || (parentItem() && parentItem()->isSelected())) {
-        frameColor = QColor(Qt::red);
+        framePen.setColor(Qt::red);
+        framePen.setWidthF(2.0);
+    }
+    else {
+        framePen.setColor(brush().color().darker());
     }
-    frameColor.setAlpha(160);
 
     const QRectF txtBounding = painter->boundingRect(mapped, Qt::AlignHCenter | Qt::AlignVCenter, ' ' + text + ' ');
-    //painter->fillRect(txtBounding2, frameColor);
-    painter->setBrush(frameColor);
+    painter->setBrush(framePen.color());
     painter->setPen(Qt::NoPen);
     painter->drawRoundedRect(txtBounding, 3, 3);
     painter->setBrush(QBrush(Qt::NoBrush));
@@ -198,11 +198,9 @@ void Transition::paint(QPainter *painter,
     painter->drawText(txtBounding, Qt::AlignCenter, text);
 
     // Draw frame
-    QPen pen = painter->pen();
-    pen.setColor(frameColor);
-    painter->setPen(pen);
+    painter->setPen(framePen);
     painter->setClipping(false);
-    painter->drawRect(painter->matrix().mapRect(rect()));
+    painter->drawRect(mapped.adjusted(0, 0, -0.5, -0.5));
 }
 
 int Transition::type() const
@@ -226,7 +224,7 @@ QVariant Transition::itemChange(GraphicsItemChange change, const QVariant &value
         int newTrack = newPos.y() / KdenliveSettings::trackheight();
         newTrack = qMin(newTrack, projectScene()->tracksCount() - 1);
         newTrack = qMax(newTrack, 0);
-        newPos.setY((int)(newTrack * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
+        newPos.setY((int)(newTrack * KdenliveSettings::trackheight() + itemOffset() + 1));
         // Only one clip is moving
         QRectF sceneShape = rect();
         sceneShape.translate(newPos);
@@ -303,6 +301,16 @@ OPERATIONTYPE Transition::operationMode(QPointF pos)
     return MOVE;
 }
 
+int Transition::itemHeight()
+{
+    return (int) (KdenliveSettings::trackheight() / 3 * 2 - 1);
+}
+
+int Transition::itemOffset()
+{
+    return (int) (KdenliveSettings::trackheight() / 3 * 2);
+}
+
 bool Transition::hasClip(const ClipItem * clip) const
 {
     if (clip == m_secondClip) return true;