]> git.sesse.net Git - kdenlive/commitdiff
Fix crash on resetting keyframes with affine transition
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 11 Dec 2012 10:01:08 +0000 (11:01 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 11 Dec 2012 10:01:08 +0000 (11:01 +0100)
src/geometrywidget.cpp
src/keyframehelper.cpp

index d51c38cae84ba959d12f6504abbd96bf7842a07b..c5e50ce2d20387afd2d259def078cc18459f1c62 100644 (file)
@@ -385,7 +385,6 @@ void GeometryWidget::addParameter(const QDomElement elem)
     m_timeline->addGeometry(geometry);
     m_extraFactors.append(elem.attribute("factor", "1"));
     m_extraGeometryNames.append(elem.attribute("name"));
-    //kDebug()<<"ADDED PARAM: "<<elem.attribute("value");
 }
 
 void GeometryWidget::slotSyncPosition(int relTimelinePos)
@@ -827,6 +826,14 @@ void GeometryWidget::slotResetKeyframes()
        m_geometry->remove(item.frame());
     }
 
+    // Delete extra geometry keyframes too
+    for (int i = 0; i < m_extraGeometries.count(); i++) {
+        Mlt::Geometry *geom = m_extraGeometries.at(i);
+       while (!geom->next_key(&item, 1)) {
+           geom->remove(item.frame());
+       }
+    }
+
     // Create neutral first keyframe
     item.frame(0);
     item.x(0);
@@ -854,6 +861,14 @@ void GeometryWidget::slotResetNextKeyframes()
        m_geometry->remove(item.frame());
     }
 
+    // Delete extra geometry keyframes too
+    for (int i = 0; i < m_extraGeometries.count(); i++) {
+        Mlt::Geometry *geom = m_extraGeometries.at(i);
+       while (!geom->next_key(&item, pos)) {
+           geom->remove(item.frame());
+       }
+    }
+
     // Make sure we have at least one keyframe
     if (m_geometry->next_key(&item, 0)) {
        item.frame(0);
@@ -884,6 +899,16 @@ void GeometryWidget::slotResetPreviousKeyframes()
        m_geometry->remove(item.frame());
     }
 
+    // Delete extra geometry keyframes too
+    for (int i = 0; i < m_extraGeometries.count(); i++) {
+        Mlt::Geometry *geom = m_extraGeometries.at(i);
+       pos = 0;
+       while (!geom->next_key(&item, pos) && pos < m_timePos->getValue()) {
+           pos = item.frame() + 1;
+           geom->remove(item.frame());
+       }
+    }
+
     // Make sure we have at least one keyframe
     if (!m_geometry->next_key(&item, 0)) {
        item.frame(0);
index 91d926ba77b2c3b1c76bc68de91f92569d57be37..52241f6458bf21fb9dd868eb48c8424cc407069a 100644 (file)
@@ -324,10 +324,6 @@ void KeyframeHelper::setKeyGeometry(Mlt::Geometry *geom, const int length)
 {
     m_geom = geom;
     frameLength = length;
-    while (!m_extraGeometries.isEmpty()) {
-        Mlt::Geometry *geom = m_extraGeometries.takeFirst();
-        delete geom;
-    }
     update();
 }