]> git.sesse.net Git - kdenlive/commitdiff
* Fix issue with fade out length:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 23 Nov 2008 19:13:51 +0000 (19:13 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 23 Nov 2008 19:13:51 +0000 (19:13 +0000)
http://www.kdenlive.org:80/mantis/view.php?id=391
* Fix default direction of luma transition
* Fix crash on transition deletion
* Fix problem with transition resize

svn path=/branches/KDE4/; revision=2721

src/abstractclipitem.cpp
src/clipitem.cpp
src/customtrackview.cpp
src/gentime.cpp
src/transition.cpp

index a32ebd0ece64b57099fbadf29ab00d279b28fc99..47fda274b91629f7885e87231c077006dcf86e30 100644 (file)
@@ -77,7 +77,9 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
     if (type() == AVWIDGET && cropStart() + durationDiff < GenTime()) {
         durationDiff = GenTime() - cropStart();
     } else if (durationDiff >= m_cropDuration) {
-        durationDiff = m_cropDuration - GenTime(3, m_fps);
+        return;
+        if (m_cropDuration > GenTime(3, m_fps)) durationDiff = GenTime(3, m_fps);
+        else return;
     }
 
     m_startPos += durationDiff;
@@ -88,7 +90,6 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
     setPos((qreal) m_startPos.frames(m_fps), pos().y());
 
     //kDebug() << "-- NEW CLIP=" << startPos().frames(25) << "-" << endPos().frames(25);
-
     //setRect((double) m_startPos.frames(m_fps) * scale, rect().y(), (double) m_cropDuration.frames(m_fps) * scale, rect().height());
     if (durationDiff < GenTime()) {
         QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
@@ -98,7 +99,7 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
                 kDebug() << "/////////  COLLISION DETECTED!!!!!!!!!";
                 GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
                 setRect(0, 0, (m_cropDuration - diff).frames(m_fps) - 0.02, rect().height());
-                setPos((qreal)(m_startPos + diff).frames(m_fps), pos().y());
+                setPos((m_startPos + diff).frames(m_fps), pos().y());
                 m_startPos += diff;
                 if (type() == AVWIDGET) m_cropStart += diff;
                 m_cropDuration = m_cropDuration - diff;
@@ -132,7 +133,7 @@ void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
                 kDebug() << "/////////  COLLISION: " << ((AbstractClipItem *)item)->startPos().frames(25) << "x" << ((AbstractClipItem *)item)->endPos().frames(25) << ", RECT: " << ((AbstractClipItem *)item)->rect() << "-" << item->pos();
                 GenTime diff = ((AbstractClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos();
                 m_cropDuration = diff;
-                setRect(0, 0, (m_cropDuration.frames(m_fps)) - 0.02, rect().height());
+                setRect(0, 0, m_cropDuration.frames(m_fps) - 0.02, rect().height());
                 break;
             }
         }
index 17e0c146c749d9f05d5ca5b29db4f474d90ab74f..d1b277c16430f657d8a0ad461e2c6d1402ce746b 100644 (file)
@@ -42,8 +42,8 @@
 
 ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, bool generateThumbs)
         : AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) {
-    setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2));
-    setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1);
+    setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2));
+    setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1);
 
     m_clipName = clip->name();
     m_producer = clip->getId();
@@ -152,7 +152,7 @@ void ClipItem::initEffect(QDomElement effect) {
     if (effect.attribute("tag") == "volume") {
         if (effect.attribute("id") == "fadeout") {
             int end = (duration() + cropStart()).frames(m_fps);
-            int start = end - EffectsList::parameter(effect, "out").toInt();
+            int start = end - EffectsList::parameter(effect, "in").toInt();
             EffectsList::setParameter(effect, "in", QString::number(start));
             EffectsList::setParameter(effect, "out", QString::number(end));
         } else if (effect.attribute("id") == "fadein") {
index 388b6838562e10be996d1d073a1c380a9088549f..d6ce62af14a3a952074f0070c3b1957b1a8545b8 100644 (file)
@@ -132,12 +132,12 @@ void CustomTrackView::checkTrackHeight() {
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
             item = (ClipItem*) itemList.at(i);
-            item->setRect(0, 0, item->rect().width() - 0.02, m_tracksHeight - 1);
+            item->setRect(0, 0, item->rect().width(), m_tracksHeight - 1);
             item->setPos((qreal) item->startPos().frames(m_document->fps()), (qreal) item->track() * m_tracksHeight + 1);
             item->resetThumbs();
         } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
             transitionitem = (Transition*) itemList.at(i);
-            transitionitem->setRect(0, 0, transitionitem->rect().width() - 0.02, m_tracksHeight / 3 * 2 - 1);
+            transitionitem->setRect(0, 0, transitionitem->rect().width(), m_tracksHeight / 3 * 2 - 1);
             transitionitem->setPos((qreal) transitionitem->startPos().frames(m_document->fps()), (qreal) transitionitem->track() * m_tracksHeight + m_tracksHeight / 3 * 2);
         }
     }
@@ -670,8 +670,8 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
         if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
         if (transitionClip && transitionClip->endPos() < m_dragItem->endPos()) {
             info.endPos = transitionClip->endPos();
-        } else info.endPos = info.startPos + GenTime(2.5);
-        if (info.endPos == info.startPos) info.endPos = info.startPos + GenTime(2.5);
+        } else info.endPos = info.startPos + GenTime(65, m_document->fps());
+        if (info.endPos == info.startPos) info.endPos = info.startPos + GenTime(65, m_document->fps());
         slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack);
     } else if (m_operationMode == TRANSITIONEND) {
         ItemInfo info;
@@ -682,9 +682,11 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
         if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.endPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
         if (transitionClip && transitionClip->startPos() > m_dragItem->startPos()) {
             info.startPos = transitionClip->startPos();
-        } else info.startPos = info.endPos - GenTime(2.5);
-        if (info.endPos == info.startPos) info.startPos = info.endPos - GenTime(2.5);
-        slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack);
+        } else info.startPos = info.endPos - GenTime(65, m_document->fps());
+        if (info.endPos == info.startPos) info.startPos = info.endPos - GenTime(65, m_document->fps());
+        QDomElement transition = MainWindow::transitions.getEffectByName("Luma").cloneNode().toElement();
+        EffectsList::setParameter(transition, "reverse", "1");
+        slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, transition);
     }
 
     m_blockRefresh = false;
@@ -1088,17 +1090,20 @@ void CustomTrackView::slotAddTransitionToSelectedClips(QDomElement transition) {
             const int transitiontrack = getPreviousVideoTrack(info.track);
             GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
             if (pos < item->startPos() + item->duration() / 2) {
+               // add transition to clip start
                 info.startPos = item->startPos();
                 if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
                 if (transitionClip && transitionClip->endPos() < item->endPos()) {
                     info.endPos = transitionClip->endPos();
-                } else info.endPos = info.startPos + GenTime(2.5);
+                } else info.endPos = info.startPos + GenTime(65, m_document->fps());
             } else {
+               // add transition to clip  end
                 info.endPos = item->endPos();
                 if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.endPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
                 if (transitionClip && transitionClip->startPos() > item->startPos()) {
                     info.startPos = transitionClip->startPos();
-                } else info.startPos = info.endPos - GenTime(2.5);
+                } else info.startPos = info.endPos - GenTime(65, m_document->fps());
+               if (transition.attribute("tag") == "luma") EffectsList::setParameter(transition, "reverse", "1");
             }
             slotAddTransition(item, info, transitiontrack, transition);
         }
@@ -1107,7 +1112,7 @@ void CustomTrackView::slotAddTransitionToSelectedClips(QDomElement transition) {
                 ClipItem *item = (ClipItem *) itemList.at(i);
                 ItemInfo info;
                 info.startPos = item->startPos();
-                info.endPos = info.startPos + GenTime(2.5);
+                info.endPos = info.startPos + GenTime(65, m_document->fps());
                 info.track = item->track();
                 int transitiontrack = getPreviousVideoTrack(info.track);
                 slotAddTransition(item, info, transitiontrack, transition);
@@ -1137,6 +1142,7 @@ void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QD
         return;
     }
     m_document->renderer()->mltDeleteTransition(item->transitionTag(), endTrack, m_scene->m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, item->toXML());
+    if (m_dragItem == item) m_dragItem = NULL;
     delete item;
     emit transitionItemSelected(NULL);
     m_document->setModified(true);
@@ -1573,6 +1579,7 @@ void CustomTrackView::deleteClip(ItemInfo info) {
         }
     }
     scene()->removeItem(item);
+    if (m_dragItem == item) m_dragItem = NULL;
     delete item;
     m_document->renderer()->mltRemoveClip(m_scene->m_tracksList.count() - info.track, info.startPos);
     m_document->renderer()->doRefresh();
index 5bb266648fce7d28bb1f8e1bd936d7dff073a711..435cd7779f0c2107ddb5d62b2a607d79c38262f6 100644 (file)
@@ -41,7 +41,7 @@ double GenTime::ms() const {
 
 /** Returns the time in frames, after being given the number of frames per second */
 double GenTime::frames(double framesPerSecond) const {
-    return (int) floor(m_time * framesPerSecond + 0.5);
+    return floor(m_time * framesPerSecond + 0.5);
 }
 
 GenTime::~GenTime() {
index e633817d581f6b798be04b4f6dcf9b7899223fa7..e5ecebfe62cdec063671a382c8597e386cfeb676 100644 (file)
@@ -34,8 +34,8 @@
 #include "mainwindow.h"
 
 Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDomElement params, bool automaticTransition) : AbstractClipItem(info, QRectF(), fps), m_gradient(QLinearGradient(0, 0, 0, 0)), m_automaticTransition(automaticTransition), m_forceTransitionTrack(false) {
-    setRect(0, 0, (qreal)(info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1));
-    setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
+    setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1));
+    setPos(info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
 
     m_singleClip = true;
     m_transitionTrack = transitiontrack;
@@ -48,7 +48,7 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo
 
     //m_referenceClip = clipa;
     if (params.isNull()) {
-        m_parameters = MainWindow::transitions.getEffectByName("Luma");
+        m_parameters = MainWindow::transitions.getEffectByName("Luma").cloneNode().toElement();
     } else {
         m_parameters = params;
     }