-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)),
connect(m_timeline, SIGNAL(keyframeMoved(int)), this, SLOT(slotKeyframeMoved(int)));
connect(m_timeline, SIGNAL(addKeyframe(int)), this, SLOT(slotAddKeyframe(int)));
connect(m_timeline, SIGNAL(removeKeyframe(int)), this, SLOT(slotDeleteKeyframe(int)));
- connect(m_timePos, SIGNAL(editingFinished()), this, SLOT(slotPositionChanged()));
+ connect(m_timePos, SIGNAL(timeCodeEditingFinished()), this, SLOT(slotPositionChanged()));
connect(m_ui.buttonPrevious, SIGNAL(clicked()), this, SLOT(slotPreviousKeyframe()));
connect(m_ui.buttonNext, SIGNAL(clicked()), this, SLOT(slotNextKeyframe()));
connect(m_ui.buttonAddDelete, SIGNAL(clicked()), this, SLOT(slotAddDeleteKeyframe()));
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();
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;
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: "<<elem.attribute("value");
}
void GeometryWidget::slotSyncPosition(int relTimelinePos)
m_opacity->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)) {
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<DragValue *>(name);
}
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);
}
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;
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);
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);
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);