]> git.sesse.net Git - kdenlive/blobdiff - src/rotoscoping/rotowidget.cpp
Moving widget files into widgets folder.
[kdenlive] / src / rotoscoping / rotowidget.cpp
index 415b5e82f7043374febcfa5a9e57836cad38db34..d5832f6a26b302570f1845f27f555cb5f47b6c7b 100644 (file)
@@ -20,7 +20,7 @@
 #include "monitor.h"
 #include "renderer.h"
 #include "monitorscene.h"
-#include "monitoreditwidget.h"
+#include "widgets/monitoreditwidget.h"
 #include "onmonitoritems/rotoscoping/bpointitem.h"
 #include "onmonitoritems/rotoscoping/splineitem.h"
 #include "simplekeyframes/simplekeyframewidget.h"
@@ -44,7 +44,7 @@ void tracking_finished(mlt_service *owner, RotoWidget *self, char *data)
         self->setSpline(QString(data));
 }
 
-RotoWidget::RotoWidget(QString data, Monitor *monitor, ItemInfo info, Timecode t, QWidget* parent) :
+RotoWidget::RotoWidget(const QString &data, Monitor *monitor, const ItemInfo &info, const Timecode &t, QWidget* parent) :
         QWidget(parent),
         m_monitor(monitor),
         m_showScene(true),
@@ -57,14 +57,12 @@ RotoWidget::RotoWidget(QString data, Monitor *monitor, ItemInfo info, Timecode t
     l->addWidget(m_keyframeWidget);
 
     MonitorEditWidget *edit = monitor->getEffectEdit();
-    edit->showVisibilityButton(true);
     m_scene = edit->getScene();
+    m_scene->cleanup();
 
     m_item = new SplineItem(QList <BPoint>(), NULL, m_scene);
 
     connect(m_item, SIGNAL(changed(bool)), this, SLOT(slotUpdateData(bool)));
-    connect(edit, SIGNAL(showEdit(bool)), this, SLOT(slotShowScene(bool)));
-    connect(m_monitor, SIGNAL(renderPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(m_keyframeWidget, SIGNAL(positionChanged(int)), this, SLOT(slotPositionChanged(int)));
     connect(m_keyframeWidget, SIGNAL(keyframeAdded(int)), this, SLOT(slotAddKeyframe(int)));
     connect(m_keyframeWidget, SIGNAL(keyframeRemoved(int)), this, SLOT(slotRemoveKeyframe(int)));
@@ -73,6 +71,7 @@ RotoWidget::RotoWidget(QString data, Monitor *monitor, ItemInfo info, Timecode t
 
     setSpline(data, false);
     setupTrackingListen(info);
+    m_scene->centerView();
 }
 
 RotoWidget::~RotoWidget()
@@ -87,18 +86,11 @@ RotoWidget::~RotoWidget()
 
     if (m_monitor) {
         MonitorEditWidget *edit = m_monitor->getEffectEdit();
-        edit->showVisibilityButton(false);
         edit->removeCustomControls();
-        m_monitor->slotEffectScene(false);
+        m_monitor->slotShowEffectScene(false);
     }
 }
 
-void RotoWidget::slotCheckMonitorPosition(int renderPos)
-{
-    if (m_showScene)
-        emit checkMonitorPosition(renderPos);
-}
-
 void RotoWidget::slotSyncPosition(int relTimelinePos)
 {
     relTimelinePos = qBound(0, relTimelinePos, m_out);
@@ -106,15 +98,6 @@ void RotoWidget::slotSyncPosition(int relTimelinePos)
     slotPositionChanged(relTimelinePos, false);
 }
 
-void RotoWidget::slotShowScene(bool show)
-{
-    m_showScene = show;
-    if (!m_showScene)
-        m_monitor->slotEffectScene(false);
-    else
-        slotCheckMonitorPosition(m_monitor->render->seekFramePosition());
-}
-
 void RotoWidget::slotUpdateData(int pos, bool editing)
 {
     Q_UNUSED(editing)
@@ -141,7 +124,12 @@ void RotoWidget::slotUpdateData(int pos, bool editing)
         map[QString::number((pos < 0 ? m_keyframeWidget->getPosition() : pos) + m_in).rightJustified(log10((double)m_out) + 1, '0')] = QVariant(vlist);
         m_data = QVariant(map);
     } else {
+        // timeline update is only required if the first keyframe did not exist yet
+        bool update = m_data.isNull();
         m_data = QVariant(vlist);
+        if (update) {
+            keyframeTimelineFullUpdate();
+        }
     }
 
     emit valueChanged();
@@ -329,11 +317,14 @@ void RotoWidget::keyframeTimelineFullUpdate()
         m_data = QVariant(map);*/
     } else {
         // static (only one keyframe)
-        m_keyframeWidget->setKeyframes(QList <int>() << 0);
+        // make sure the first keyframe was already created
+        if (m_data.isValid()) {
+            m_keyframeWidget->setKeyframes(QList <int>() << 0);
+        }
     }
 }
 
-void RotoWidget::setupTrackingListen(ItemInfo info)
+void RotoWidget::setupTrackingListen(const ItemInfo &info)
 {
     if (info.startPos < GenTime()) {
         // TODO: track effects
@@ -364,7 +355,7 @@ void RotoWidget::setupTrackingListen(ItemInfo info)
     delete clip;
 }
 
-void RotoWidget::setSpline(QString spline, bool notify)
+void RotoWidget::setSpline(const QString &spline, bool notify)
 {
     QJson::Parser parser;
     bool ok;