]> git.sesse.net Git - kdenlive/commitdiff
Fix problem with clip resize, should solve:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 29 Dec 2008 01:55:00 +0000 (01:55 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 29 Dec 2008 01:55:00 +0000 (01:55 +0000)
http://www.kdenlive.org:80/mantis/view.php?id=362

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

src/abstractclipitem.cpp
src/clipitem.cpp

index 427aa0d8bde5cdf330567f28fc228f4ec81e0848..9a7ed808d053614109f6bcc051222fbec2387585 100644 (file)
@@ -94,12 +94,13 @@ void AbstractClipItem::resizeStart(int posx, double speed) {
 
     setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
     setPos(m_startPos.frames(m_fps), pos().y());
-    if (pos().x() != m_startPos.frames(m_fps)) {
-        GenTime diff = GenTime(pos().x(), m_fps) - m_startPos;
-        m_startPos += diff;
-        m_cropDuration = m_cropDuration - diff;
+    if ((int) pos().x() != posx) {
+        //kDebug()<<"//////  WARNING, DIFF IN XPOS: "<<pos().x()<<" == "<<m_startPos.frames(m_fps);
+        GenTime diff = GenTime((int) pos().x() - posx, m_fps);
         if (type() == AVWIDGET) m_cropStart = m_cropStart + diff;
+        m_cropDuration = m_cropDuration - diff;
         setRect(0, 0, cropDuration().frames(m_fps) - 0.02, rect().height());
+        //kDebug()<<"// NEW START: "<<m_startPos.frames(25)<<", NW DUR: "<<m_cropDuration.frames(25);
     }
 
 
@@ -131,7 +132,7 @@ void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
     if (cropDuration() + durationDiff <= GenTime()) {
         durationDiff = GenTime() - (cropDuration() - GenTime(3, m_fps));
     } else if (cropStart() + cropDuration() + durationDiff >= maxDuration()) {
-        kDebug() << "// MAX OVERLOAD:" << cropDuration().frames(25) << " + " << durationDiff.frames(25) << ", MAX:" << maxDuration().frames(25);
+        //kDebug() << "// MAX OVERLOAD:" << cropDuration().frames(25) << " + " << durationDiff.frames(25) << ", MAX:" << maxDuration().frames(25);
         durationDiff = maxDuration() - cropDuration() - cropStart();
     }
     //kDebug() << "// DUR DIFF2:" << durationDiff.frames(25) << ", ADJUSTED: " << durationDiff.frames(25) * speed << ", SPED:" << speed;
@@ -142,9 +143,9 @@ void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
         for (int i = 0; i < collisionList.size(); ++i) {
             QGraphicsItem *item = collisionList.at(i);
             if (item->type() == type() && item->pos().x() > pos().x()) {
-                kDebug() << "/////////  COLLISION DETECTED!!!!!!!!!";
+                /*kDebug() << "/////////  COLLISION DETECTED!!!!!!!!!";
                 kDebug() << "/////////  CURRENT: " << startPos().frames(25) << "x" << endPos().frames(25) << ", RECT: " << rect() << "-" << pos();
-                kDebug() << "/////////  COLLISION: " << ((AbstractClipItem *)item)->startPos().frames(25) << "x" << ((AbstractClipItem *)item)->endPos().frames(25) << ", RECT: " << ((AbstractClipItem *)item)->rect() << "-" << item->pos();
+                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());
index 1b493385ae4661d36d449d56581480c230129950..060327feef2ff04dfdffa570b1f1b9d1703c8c2d 100644 (file)
@@ -955,10 +955,12 @@ void ClipItem::resizeStart(int posx, double speed) {
     if (posx == startPos().frames(m_fps)) return;
     const int previous = cropStart().frames(m_fps);
     AbstractClipItem::resizeStart(posx, m_speed);
-    checkEffectsKeyframesPos(previous, cropStart().frames(m_fps), true);
-    if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
-        /*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
-        startThumbTimer->start(100);
+    if ((int) cropStart().frames(m_fps) != previous) {
+        checkEffectsKeyframesPos(previous, cropStart().frames(m_fps), true);
+        if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
+            /*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
+            startThumbTimer->start(150);
+        }
     }
 }
 
@@ -969,10 +971,12 @@ void ClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) {
     //kDebug() << "// NEW POS: " << posx << ", OLD END: " << endPos().frames(m_fps);
     const int previous = (cropStart() + duration()).frames(m_fps);
     AbstractClipItem::resizeEnd(posx, m_speed);
-    if (updateKeyFrames) checkEffectsKeyframesPos(previous, (cropStart() + duration()).frames(m_fps), false);
-    if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
-        /*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
-        endThumbTimer->start(100);
+    if ((int)(cropStart() + duration()).frames(m_fps) != previous) {
+        if (updateKeyFrames) checkEffectsKeyframesPos(previous, (cropStart() + duration()).frames(m_fps), false);
+        if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
+            /*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
+            endThumbTimer->start(150);
+        }
     }
 }
 
@@ -1058,7 +1062,10 @@ QVariant ClipItem::itemChange(GraphicsItemChange change, const QVariant &value)
                         QList<QGraphicsItem*> subitems = scene()->items(sceneShape, Qt::IntersectsItemShape);
                         subitems.removeAll(this);
                         for (int j = 0; j < subitems.count(); j++) {
-                            if (subitems.at(j)->type() == type()) return pos();
+                            if (subitems.at(j)->type() == type()) {
+                                m_startPos = GenTime((int) pos().x(), m_fps);
+                                return pos();
+                            }
                         }
                     }