]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Merge branch 'buildsystem' into next
[kdenlive] / src / monitor.cpp
index 19819ca5ef921227d57a39831f72caf0d16c8333..db3989406dee5d12be592f60ce96b2c36fd14ce3 100644 (file)
@@ -155,7 +155,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
     createOpenGlWidget(m_videoBox, profile);
     monitorCreated = true;
     //m_glWidget->setFixedSize(width, height);
-#elif defined (USE_OPEN_GL)
+#elif defined(USE_OPENGL)
     if (KdenliveSettings::openglmonitors()) {
         monitorCreated = createOpenGlWidget(m_videoBox, profile);
     }
@@ -169,7 +169,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget
         render = new Render(m_name, (int) m_monitorRefresh->winId(), profile, this);
         m_monitorRefresh->setRenderer(render);
     }
-#if defined (USE_OPEN_GL)
+#ifdef USE_OPENGL
     else if (m_glWidget) {
         lay->addWidget(m_glWidget);
         m_videoBox->setLayout(lay);
@@ -229,7 +229,7 @@ const QString Monitor::name() const
     return m_name;
 }
 
-#if defined(Q_WS_MAC) || defined(USE_OPEN_GL)
+#ifdef USE_OPENGL
 bool Monitor::createOpenGlWidget(QWidget *parent, const QString profile)
 {
     render = new Render(m_name, 0, profile, this);
@@ -428,7 +428,7 @@ void Monitor::slotZoneMoved(int start, int end)
 
 void Monitor::slotSetZoneStart()
 {
-    m_ruler->setZone(render->seekFramePosition(), -1);
+    m_ruler->setZone(m_ruler->position(), -1);
     emit zoneUpdated(m_ruler->zone());
     checkOverlay();
     setClipZone(m_ruler->zone());
@@ -436,7 +436,7 @@ void Monitor::slotSetZoneStart()
 
 void Monitor::slotSetZoneEnd()
 {
-    m_ruler->setZone(-1, render->seekFramePosition());
+    m_ruler->setZone(-1, m_ruler->position());
     emit zoneUpdated(m_ruler->zone());
     checkOverlay();
     setClipZone(m_ruler->zone());
@@ -455,6 +455,13 @@ void Monitor::mousePressEvent(QMouseEvent * event)
     }
 }
 
+void Monitor::resizeEvent(QResizeEvent *event)
+{
+    Q_UNUSED(event);
+    if (render && isVisible() && isActive()) render->doRefresh();
+}
+
+
 void Monitor::slotSwitchFullScreen()
 {
     m_videoBox->switchFullScreen();
@@ -542,7 +549,7 @@ void Monitor::slotMouseSeek(int eventDelta, bool fast)
     if (fast) {
         int delta = m_monitorManager->timecode().fps();
         if (eventDelta > 0) delta = 0 - delta;
-        slotSeek(render->seekFramePosition() - delta);
+        slotSeek(m_ruler->position() - delta);
     } else {
         if (eventDelta >= 0) slotForwardOneFrame();
         else slotRewindOneFrame();
@@ -570,9 +577,7 @@ void Monitor::slotExtractCurrentFrame()
     KFileDialog *fs = new KFileDialog(KUrl(), "image/png", this);
     fs->setOperationMode(KFileDialog::Saving);
     fs->setMode(KFile::File);
-#if KDE_IS_VERSION(4,2,0)
     fs->setConfirmOverwrite(true);
-#endif
     fs->setKeepLocation(true);
     fs->exec();
     QString path = fs->selectedFile();
@@ -587,9 +592,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)
@@ -605,15 +610,15 @@ void Monitor::slotSeek()
 
 void Monitor::slotSeek(int pos)
 {
-    //activateMonitor();
     if (render == NULL) return;
+    activateMonitor();
     render->seekToFrame(pos);
 }
 
 void Monitor::checkOverlay()
 {
     if (m_overlay == NULL) return;
-    int pos = render->seekFramePosition();
+    int pos = m_ruler->position();
     QPoint zone = m_ruler->zone();
     if (pos == zone.x())
         m_overlay->setOverlayText(i18n("In Point"));
@@ -732,6 +737,7 @@ void Monitor::stop()
 
 void Monitor::start()
 {
+    if (!isVisible()) return;
     if (render) render->start();
     connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
 }
@@ -739,8 +745,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();
+        }
     }
 }
 
@@ -764,7 +772,7 @@ void Monitor::slotPlay()
 {
     if (render == NULL) return;
     activateMonitor();
-    if (render->playSpeed() == 0) {
+    if (render->playSpeed() == 0.0) {
         m_playAction->setIcon(m_pauseIcon);
         render->switchPlay(true);
     } else {
@@ -869,7 +877,10 @@ void Monitor::resetProfile(const QString &profile)
 {
     m_timePos->updateTimeCode(m_monitorManager->timecode());
     if (render == NULL) return;
-    render->resetProfile(profile);
+    if (!render->hasProfile(profile)) {
+        activateMonitor();
+        render->resetProfile(profile);
+    }
     if (m_effectWidget)
         m_effectWidget->resetProfile(render);
 }
@@ -904,7 +915,7 @@ void Monitor::slotSwitchMonitorInfo(bool show)
         if (m_overlay) return;
         if (m_monitorRefresh == NULL) {
             // Using OpenGL display
-#if defined(Q_WS_MAC) || defined(USE_OPEN_GL)
+#ifdef USE_OPENGL
             if (m_glWidget->layout()) delete m_glWidget->layout();
             m_overlay = new Overlay();
             connect(m_overlay, SIGNAL(editMarker()), this, SLOT(slotEditMarker()));
@@ -984,7 +995,7 @@ void Monitor::slotEffectScene(bool show)
         if (m_monitorRefresh) {
             m_monitorRefresh->setVisible(!show);
         } else {
-#if defined(Q_WS_MAC) || defined(USE_OPEN_GL)
+#ifdef USE_OPENGL
             m_glWidget->setVisible(!show);
 #endif
         }
@@ -993,8 +1004,8 @@ void Monitor::slotEffectScene(bool show)
         emit requestFrameForAnalysis(show);
         if (show) {
             m_effectWidget->getScene()->slotZoomFit();
-            render->doRefresh();
         }
+        render->doRefresh();
     }
 }
 
@@ -1052,12 +1063,6 @@ void MonitorRefresh::setRenderer(Render* render)
 }
 
 
-void MonitorRefresh::resizeEvent(QResizeEvent *event)
-{
-    Q_UNUSED(event);
-    if (m_renderer && isVisible()) m_renderer->doRefresh();
-}
-
 Overlay::Overlay(QWidget* parent) :
     QLabel(parent)
 {