X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fgeometrywidget.cpp;h=661b388d972e3b9d52336153ddd45ba6d0d93a66;hb=3cec1c93808c28644c97907a5698568df0971b3d;hp=d51c38cae84ba959d12f6504abbd96bf7842a07b;hpb=3c98191107f87acbb743c4d17d4db51836ff3317;p=kdenlive diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index d51c38ca..661b388d 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -38,7 +38,7 @@ -GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos, bool isEffect, bool showRotation, QWidget* parent): +GeometryWidget::GeometryWidget(Monitor* monitor, const Timecode &timecode, int clipPos, bool isEffect, bool showRotation, QWidget* parent): QWidget(parent), m_monitor(monitor), m_timePos(new TimecodeDisplay(timecode)), @@ -276,7 +276,7 @@ GeometryWidget::~GeometryWidget() m_scene->removeItem(m_geomPath); delete m_geomPath; } - if (m_previous) delete m_previous; + delete m_previous; delete m_geometry; m_extraGeometryNames.clear(); m_extraFactors.clear(); @@ -328,7 +328,7 @@ QString GeometryWidget::getExtraValue(const QString &name) const return val; } -void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxframe) +void GeometryWidget::setupParam(const QDomElement &elem, int minframe, int maxframe) { m_inPoint = minframe; m_outPoint = maxframe; @@ -378,14 +378,13 @@ void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxfra slotPositionChanged(0, false); } -void GeometryWidget::addParameter(const QDomElement elem) +void GeometryWidget::addParameter(const QDomElement &elem) { Mlt::Geometry *geometry = new Mlt::Geometry(elem.attribute("value").toUtf8().data(), m_outPoint - m_inPoint, m_monitor->render->frameRenderWidth(), m_monitor->render->renderHeight()); m_extraGeometries.append(geometry); m_timeline->addGeometry(geometry); m_extraFactors.append(elem.attribute("factor", "1")); m_extraGeometryNames.append(elem.attribute("name")); - //kDebug()<<"ADDED PARAM: "<setValue(item.mix()); m_opacity->blockSignals(false); - for (int i = 0; i < m_extraGeometries.count(); i++) { + for (int i = 0; i < m_extraGeometries.count(); ++i) { Mlt::Geometry *geom = m_extraGeometries.at(i); QString name = m_extraGeometryNames.at(i); if (!geom->fetch(&item, pos)) { @@ -512,7 +511,7 @@ void GeometryWidget::slotAddKeyframe(int pos) item.mix(m_opacity->value()); m_geometry->insert(item); - for (int i = 0; i < m_extraGeometries.count(); i++) { + for (int i = 0; i < m_extraGeometries.count(); ++i) { Mlt::Geometry *geom = m_extraGeometries.at(i); QString name = m_extraGeometryNames.at(i); DragValue *widget = findChild(name); @@ -541,7 +540,7 @@ void GeometryWidget::slotDeleteKeyframe(int pos) } m_geometry->remove(pos); - for (int i = 0; i < m_extraGeometries.count(); i++) { + for (int i = 0; i < m_extraGeometries.count(); ++i) { Mlt::Geometry *geom = m_extraGeometries.at(i); geom->remove(pos); } @@ -626,7 +625,7 @@ void GeometryWidget::slotUpdateGeometry() item.h(rectSize.height()); m_geometry->insert(item); - for (int i = 0; i < m_extraGeometries.count(); i++) { + for (int i = 0; i < m_extraGeometries.count(); ++i) { Mlt::Geometry *geom = m_extraGeometries.at(i); QString name = m_extraGeometryNames.at(i); Mlt::GeometryItem item2; @@ -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);