]> git.sesse.net Git - kdenlive/commitdiff
Fix monitor scene shown at inappropriate times when used in a effect (instead of...
authorTill Theato <root@ttill.de>
Tue, 10 Aug 2010 15:14:38 +0000 (15:14 +0000)
committerTill Theato <root@ttill.de>
Tue, 10 Aug 2010 15:14:38 +0000 (15:14 +0000)
svn path=/trunk/kdenlive/; revision=4702

src/effectstackedit.cpp
src/effectstackedit.h
src/effectstackview.cpp
src/effectstackview.h
src/geometrywidget.cpp
src/geometrywidget.h
src/transitionsettings.cpp

index de1aaa6f8c0c6266827d1e1903e5cfff20b913d7..8781876511f90c1601804b57b92c88f6dd6d10ec 100644 (file)
@@ -105,7 +105,7 @@ void EffectStackEdit::setFrameSize(QPoint p)
         QString type = pa.attributes().namedItem("type").nodeValue();
         QString paramName = i18n(na.toElement().text().toUtf8().data());
 
-        if (type == "geometry") {
+        if (type == "geometry" && !KdenliveSettings::on_monitor_effects()) {
             Geometryval *geom = ((Geometryval*)m_valueItems[paramName+"geometry"]);
             geom->setFrameSize(m_frameSize);
             break;
@@ -148,7 +148,7 @@ void EffectStackEdit::updateParameter(const QString &name, const QString &value)
     m_params.setAttribute(name, value);
 }
 
-void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, int out)
+void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, int out, bool isEffect)
 {
     clearAllItems();
     if (m_keyframeEditor) delete m_keyframeEditor;
@@ -260,7 +260,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
             connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
         } else if (type == "geometry") {
             if (KdenliveSettings::on_monitor_effects()) {
-                GeometryWidget *geometry = new GeometryWidget(m_monitor, pos, this);
+                GeometryWidget *geometry = new GeometryWidget(m_monitor, pos, isEffect, this);
                 if (minFrame == maxFrame)
                     geometry->setupParam(pa, m_in, m_out);
                 else
@@ -268,6 +268,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
                 m_vbox->addWidget(geometry);
                 m_valueItems[paramName+"geometry"] = geometry;
                 connect(geometry, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+                connect(geometry, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
             } else {
                 Geometryval *geo = new Geometryval(m_profile, m_timecode, m_frameSize, pos);
                 if (minFrame == maxFrame)
index 1ecf626339b4e3fbb3444cc490a8e08758f7e157..78e7b52a43e6acffc5e36c919b1fb0bac17e44f2 100644 (file)
@@ -73,7 +73,7 @@ private:
 
 public slots:
     /** \brief Called when an effect is selected, builds the UIĀ for this effect */
-    void transferParamDesc(const QDomElement, int, int , int);
+    void transferParamDesc(const QDomElement d, int pos, int in, int out, bool isEffect = true);
     void slotSliderMoved(int);
     /** \brief Called whenever(?) some parameter is changed in the gui.
      *
@@ -84,6 +84,7 @@ signals:
     void parameterChanged(const QDomElement, const QDomElement);
     void seekTimeline(int);
     void displayMessage(const QString&, int);
+    void checkMonitorPosition(int);
 };
 
 #endif
index b5d80d0e004ae3b51e0f9bbdba3a182d722aba4a..9509421f7e365f15bf195354de36ffa9358ad091 100644 (file)
@@ -23,6 +23,7 @@
 #include "docclipbase.h"
 #include "projectlist.h"
 #include "kthumb.h"
+#include "monitorscene.h"
 #include "kdenlivesettings.h"
 
 #include <KDebug>
@@ -38,7 +39,8 @@
 
 
 EffectStackView::EffectStackView(Monitor *monitor, QWidget *parent) :
-        QWidget(parent)
+        QWidget(parent),
+        m_monitor(monitor)
 {
     m_ui.setupUi(this);
     QVBoxLayout *vbox1 = new QVBoxLayout(m_ui.frame);
@@ -82,6 +84,7 @@ EffectStackView::EffectStackView(Monitor *monitor, QWidget *parent) :
     connect(m_effectedit, SIGNAL(parameterChanged(const QDomElement, const QDomElement)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement)));
     connect(m_effectedit, SIGNAL(seekTimeline(int)), this , SLOT(slotSeekTimeline(int)));
     connect(m_effectedit, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int)));
+    connect(m_effectedit, SIGNAL(checkMonitorPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     m_effectLists["audio"] = &MainWindow::audioEffects;
     m_effectLists["video"] = &MainWindow::videoEffects;
     m_effectLists["custom"] = &MainWindow::customEffects;
@@ -394,4 +397,14 @@ void EffectStackView::slotRegionChanged()
     emit updateClipRegion(m_clipref, m_ui.effectlist->currentRow(), m_ui.region_url->text());
 }
 
+void EffectStackView::slotCheckMonitorPosition(int renderPos)
+{
+    if (renderPos >= m_clipref->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_clipref->endPos().frames(KdenliveSettings::project_fps())) {
+        if (!m_monitor->getEffectScene()->views().at(0)->isVisible())
+            m_monitor->slotEffectScene(true);
+    } else {
+        m_monitor->slotEffectScene(false);
+    }
+}
+
 #include "effectstackview.moc"
index fffed50f7ef3da94b4da773f6f1f46ee31ee05e3..4744fbff14b7d67b67265439e3e05e797bac7980 100644 (file)
@@ -60,6 +60,7 @@ private:
     ClipItem* m_clipref;
     QMap<QString, EffectsList*> m_effectLists;
     EffectStackEdit* m_effectedit;
+    Monitor *m_monitor;
 
     /** @brief Sets the list of effects according to the clip's effect list.
     * @param ix Number of the effect to preselect */
@@ -115,6 +116,8 @@ private slots:
     /** @brief Define the region filter for current effect. */
     void slotRegionChanged();
 
+    void slotCheckMonitorPosition(int renderPos);
+
 signals:
     void removeEffect(ClipItem*, QDomElement);
     /**  Parameters for an effect changed, update the filter in playlist */
index ae87807ff0bee561596ad2ea1f50a56e5146f9cd..5199586c407e13ad1db5eb58bf755980f1c6a921 100644 (file)
 #include <QGraphicsView>
 #include <QGraphicsRectItem>
 
-GeometryWidget::GeometryWidget(Monitor* monitor, int clipPos, QWidget* parent ):
+GeometryWidget::GeometryWidget(Monitor* monitor, int clipPos, bool isEffect, QWidget* parent ):
         QWidget(parent),
         m_monitor(monitor),
         m_clipPos(clipPos),
         m_inPoint(0),
         m_outPoint(1),
+        m_isEffect(isEffect),
         m_rect(NULL),
         m_geometry(NULL)
 {
@@ -118,12 +119,19 @@ void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxfra
 
 void GeometryWidget::slotCheckPosition(int renderPos)
 {
-    qDebug() << m_clipPos << m_inPoint << m_outPoint;
-    if (renderPos >= m_clipPos && renderPos <= m_clipPos + m_outPoint - m_inPoint) {
-        if (!m_scene->views().at(0)->isVisible())
-            m_monitor->slotEffectScene(true);
+    /*
+        We do only get the position in timeline if this geometry belongs to a transition,
+        therefore we need to ways here.
+    */
+    if (m_isEffect) {
+        emit checkMonitorPosition(renderPos);
     } else {
-        m_monitor->slotEffectScene(false);
+        if (renderPos >= m_clipPos && renderPos <= m_clipPos + m_outPoint - m_inPoint) {
+            if (!m_scene->views().at(0)->isVisible())
+                m_monitor->slotEffectScene(true);
+        } else {
+            m_monitor->slotEffectScene(false);
+        }
     }
 }
 
index c4290ff1c521327db212bd7d1d9de93234706102..79e5baf7a688b6627a478bca796a29837454e8f6 100644 (file)
@@ -39,7 +39,7 @@ public:
     * @param monitor Project monitor
     * @param clipPos Position of the clip in timeline
     * @param parent (optional) Parent widget */
-    GeometryWidget(Monitor *monitor, int clipPos, QWidget* parent = 0);
+    GeometryWidget(Monitor *monitor, int clipPos, bool isEffect, QWidget* parent = 0);
     virtual ~GeometryWidget();
     /** @brief Gets the geometry as a serialized string. */
     QString getValue() const;
@@ -60,6 +60,7 @@ private:
     int m_inPoint;
     /** Out point of the clip (crop from end). */
     int m_outPoint;
+    bool m_isEffect;
     MonitorScene *m_scene;
     QGraphicsRectItem *m_rect;
     Mlt::Geometry *m_geometry;
@@ -100,6 +101,7 @@ private slots:
 
 signals:
     void parameterChanged();
+    void checkMonitorPosition(int);
 };
 
 #endif
index 9f9437b42dded33b529fcc58b621804c95d4e582..68f6651f5684d5b2c0cae5d14bd3bebb7ff14765 100644 (file)
@@ -110,15 +110,15 @@ void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent)
         // Reset the transition parameters to the default one
         QDomElement newTransition = MainWindow::transitions.getEffectByName(transitionList->currentText()).cloneNode().toElement();
         slotUpdateEffectParams(e, newTransition);
-        m_effectEdit->transferParamDesc(newTransition, start, start, end);
+        m_effectEdit->transferParamDesc(newTransition, start, start, end, false);
     } else if (!updateCurrent) {
         // Transition changed, update parameters dialog
         //slotUpdateEffectParams(e, e);
-        m_effectEdit->transferParamDesc(e, start, start, end);
+        m_effectEdit->transferParamDesc(e, start, start, end, false);
     } else {
         // Same transition, we just want to update the parameters value
         slotUpdateEffectParams(e, e);
-        if (m_usedTransition->hasGeometry()) m_effectEdit->transferParamDesc(m_usedTransition->toXML(), start, start, end);
+        if (m_usedTransition->hasGeometry()) m_effectEdit->transferParamDesc(m_usedTransition->toXML(), start, start, end, false);
     }
 }
 
@@ -182,7 +182,7 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
     } else {
         // null transition selected
         m_usedTransition = NULL;
-        m_effectEdit->transferParamDesc(QDomElement(), 0, 0, 0);
+        m_effectEdit->transferParamDesc(QDomElement(), 0, 0, 0, false);
     }
 
 }