]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Several small adjustments for monitor switching
[kdenlive] / src / monitor.cpp
index efc1d036ada17f7037f73a1a89c3e67cb9187fc2..c1c755ca72f1b416e97105db8ecd6749439fa511 100644 (file)
@@ -59,7 +59,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     m_selectedClip(NULL),
     m_loopClipTransition(true),
     m_editMarker(NULL)
-
 {
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
@@ -588,9 +587,9 @@ bool Monitor::isActive() const
     return m_monitorManager->isActive(m_name);
 }
 
-void Monitor::activateMonitor()
+bool Monitor::activateMonitor()
 {
-    m_monitorManager->activateMonitor(m_name);
+    return m_monitorManager->activateMonitor(m_name);
 }
 
 void Monitor::setTimePos(const QString &pos)
@@ -712,9 +711,6 @@ void Monitor::rendererStopped(int pos)
         checkOverlay();
         m_timePos->setValue(pos);
     }
-    disconnect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
-    //m_playAction->setChecked(false);
-    connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
     m_playAction->setIcon(m_playIcon);
 }
 
@@ -743,8 +739,10 @@ void Monitor::start()
 void Monitor::refreshMonitor(bool visible)
 {
     if (visible && render) {
-        activateMonitor();
-        render->doRefresh(); //askForRefresh();
+        if (!activateMonitor()) {
+            // the monitor was already active, simply refreshClipThumbnail
+            render->doRefresh();
+        }
     }
 }
 
@@ -768,14 +766,13 @@ void Monitor::slotPlay()
 {
     if (render == NULL) return;
     activateMonitor();
-    if (render->playSpeed() == 0) {
-        //m_playAction->setChecked(true);
+    if (render->playSpeed() == 0.0) {
         m_playAction->setIcon(m_pauseIcon);
+        render->switchPlay(true);
     } else {
-        //m_playAction->setChecked(false);
         m_playAction->setIcon(m_playIcon);
+        render->switchPlay(false);
     }
-    render->switchPlay();
 }
 
 void Monitor::slotPlayZone()
@@ -808,24 +805,40 @@ void Monitor::slotLoopClip()
     m_playAction->setIcon(m_pauseIcon);
 }
 
-void Monitor::slotSetXml(DocClipBase *clip, QPoint zone, const int position)
+void Monitor::updateClipProducer(Mlt::Producer *prod)
+{
+    if (render == NULL) return;
+   render->setProducer(prod, render->seekFramePosition());
+}
+
+void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position)
 {
     if (render == NULL) return;
     if (clip == NULL && m_currentClip != NULL) {
+        kDebug()<<"// SETTING NULL CLIP MONITOR";
         m_currentClip = NULL;
         m_length = -1;
         render->setProducer(NULL, -1);
         return;
     }
-    if (m_currentClip != NULL || clip != NULL) activateMonitor();
+    
     if (clip != m_currentClip) {
         m_currentClip = clip;
+        if (m_currentClip) activateMonitor();
         updateMarkers(clip);
-        if (render->setProducer(clip->producer(), position) == -1) {
+        Mlt::Producer *prod = NULL;
+        if (clip) prod = clip->getCloneProducer();
+        if (render->setProducer(prod, position) == -1) {
             // MLT CONSUMER is broken
             kDebug(QtWarningMsg) << "ERROR, Cannot start monitor";
         }
-    } else if (position != -1) render->seek(position);
+    } else {
+        if (m_currentClip) {
+            activateMonitor();
+            if (position == -1) position = render->seekFramePosition();
+            render->seek(position);
+        }
+    }
     if (!zone.isNull()) {
         m_ruler->setZone(zone.x(), zone.y());
         render->seek(zone.x());
@@ -849,12 +862,12 @@ void Monitor::slotOpenFile(const QString &file)
 void Monitor::slotSaveZone()
 {
     if (render == NULL) return;
-    emit saveZone(render, m_ruler->zone());
+    emit saveZone(render, m_ruler->zone(), m_currentClip);
 
     //render->setSceneList(doc, 0);
 }
 
-void Monitor::resetProfile(const QString profile)
+void Monitor::resetProfile(const QString &profile)
 {
     m_timePos->updateTimeCode(m_monitorManager->timecode());
     if (render == NULL) return;
@@ -1040,10 +1053,11 @@ void MonitorRefresh::setRenderer(Render* render)
     m_renderer = render;
 }
 
-void MonitorRefresh::paintEvent(QPaintEvent *event)
+
+void MonitorRefresh::resizeEvent(QResizeEvent *event)
 {
-    Q_UNUSED(event)
-    if (m_renderer) m_renderer->doRefresh();
+    Q_UNUSED(event);
+    if (m_renderer && isVisible()) m_renderer->doRefresh();
 }
 
 Overlay::Overlay(QWidget* parent) :