]> git.sesse.net Git - kdenlive/blobdiff - src/colorscopes/abstractgfxscopewidget.cpp
Reorganize and cleanup build structure
[kdenlive] / src / colorscopes / abstractgfxscopewidget.cpp
index 275be135610540a8132f086e442a0bdcf17be4d9..94f90400a6bba3052219f05412a2269388d35a42 100644 (file)
@@ -8,12 +8,11 @@
  *   (at your option) any later version.                                   *
  ***************************************************************************/
 
-#include "qtconcurrentrun.h"
-
 #include "abstractgfxscopewidget.h"
 #include "renderer.h"
-#include "monitor.h"
+#include "monitormanager.h"
 
+#include <QtConcurrentRun>
 #include <QFuture>
 #include <QColor>
 #include <QMenu>
 
 const int REALTIME_FPS = 30;
 
-AbstractGfxScopeWidget::AbstractGfxScopeWidget(Monitor *projMonitor, Monitor *clipMonitor, bool trackMouse, QWidget *parent) :
+AbstractGfxScopeWidget::AbstractGfxScopeWidget(MonitorManager *manager, bool trackMouse, QWidget *parent) :
         AbstractScopeWidget(trackMouse, parent),
-        m_projMonitor(projMonitor),
-        m_clipMonitor(clipMonitor)
-
+        m_manager(manager)
 {
-    m_activeRender = (m_clipMonitor->isActive()) ? m_clipMonitor->render : m_projMonitor->render;
+    m_activeRender = m_manager->activeRenderer();
 
     bool b = true;
-    b &= connect(m_activeRender, SIGNAL(frameUpdated(QImage)), this, SLOT(slotRenderZoneUpdated(QImage)));
+    if (m_activeRender != NULL)
+        b &= connect(m_activeRender, SIGNAL(frameUpdated(QImage)), this, SLOT(slotRenderZoneUpdated(QImage)));
     Q_ASSERT(b);
 }
+
 AbstractGfxScopeWidget::~AbstractGfxScopeWidget() { }
 
 QImage AbstractGfxScopeWidget::renderScope(uint accelerationFactor)
@@ -50,7 +49,7 @@ QImage AbstractGfxScopeWidget::renderScope(uint accelerationFactor)
 
 void AbstractGfxScopeWidget::mouseReleaseEvent(QMouseEvent *event)
 {
-    if (!m_aAutoRefresh->isChecked()) {
+    if (!m_aAutoRefresh->isChecked() && m_activeRender) {
         m_activeRender->sendFrameUpdate();
     }
     AbstractScopeWidget::mouseReleaseEvent(event);
@@ -59,25 +58,32 @@ void AbstractGfxScopeWidget::mouseReleaseEvent(QMouseEvent *event)
 
 ///// Slots /////
 
-void AbstractGfxScopeWidget::slotActiveMonitorChanged(bool isClipMonitor)
+void AbstractGfxScopeWidget::slotActiveMonitorChanged()
 {
+    if (m_activeRender) {
+        if (m_activeRender == m_manager->activeRenderer()) return;
+        bool b = m_activeRender->disconnect(this);
+        Q_ASSERT(b);
+    }
+    m_activeRender = m_manager->activeRenderer();
+
+    if (m_activeRender) {
 #ifdef DEBUG_AGSW
-    qDebug() << "Active monitor has changed in " << widgetName() << ". Is the clip monitor active now? " << isClipMonitor;
+    qDebug() << "Active monitor has changed in " << widgetName() << ". Is the clip monitor active now? " << m_activeRender->name();
 #endif
-
-    bool b = m_activeRender->disconnect(this);
-    Q_ASSERT(b);
-
-    m_activeRender = (isClipMonitor) ? m_clipMonitor->render : m_projMonitor->render;
-
-    //b &= connect(m_activeRender, SIGNAL(rendererPosition(int)), this, SLOT(slotRenderZoneUpdated()));
-    b &= connect(m_activeRender, SIGNAL(frameUpdated(QImage)), this, SLOT(slotRenderZoneUpdated(QImage)));
-    Q_ASSERT(b);
+        bool b = connect(m_activeRender, SIGNAL(frameUpdated(QImage)), this, SLOT(slotRenderZoneUpdated(QImage)));
+        Q_ASSERT(b);
+    }
 
     // Update the scope for the new monitor.
     forceUpdate(true);
 }
 
+void AbstractGfxScopeWidget::slotClearMonitor()
+{
+    m_activeRender = NULL;
+}
+
 void AbstractGfxScopeWidget::slotRenderZoneUpdated(QImage frame)
 {
     m_scopeImage = frame;
@@ -86,7 +92,7 @@ void AbstractGfxScopeWidget::slotRenderZoneUpdated(QImage frame)
 
 void AbstractGfxScopeWidget::slotAutoRefreshToggled(bool autoRefresh)
 {
-    if (autoRefresh) {
+    if (autoRefresh && m_activeRender) {
         m_activeRender->sendFrameUpdate();
     }
 }