From 4732b64d8d1a47e654cb127696b7039ce10a0a65 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 19 Sep 2012 22:59:52 +0200 Subject: [PATCH] Disable effect when trying to pick a color from the monitor: http://kdenlive.org/mantis/view.php?id=2723 --- src/choosecolorwidget.cpp | 1 + src/choosecolorwidget.h | 2 ++ src/colorpickerwidget.cpp | 2 ++ src/colorpickerwidget.h | 2 ++ src/effectstack/collapsibleeffect.cpp | 16 ++++++++++++++-- src/effectstack/collapsibleeffect.h | 4 +++- src/effectstack/collapsiblegroup.cpp | 2 +- src/effectstack/effectstackview2.cpp | 2 +- src/effectstack/parametercontainer.cpp | 1 + src/effectstack/parametercontainer.h | 2 +- src/renderer.cpp | 2 ++ 11 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/choosecolorwidget.cpp b/src/choosecolorwidget.cpp index 8543d79e..d842a0a3 100644 --- a/src/choosecolorwidget.cpp +++ b/src/choosecolorwidget.cpp @@ -117,6 +117,7 @@ ChooseColorWidget::ChooseColorWidget(QString text, QString color, bool alphaEnab connect(picker, SIGNAL(colorPicked(QColor)), this, SLOT(setColor(QColor))); connect(picker, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int))); + connect(picker, SIGNAL(disableCurrentFilter(bool)), this, SIGNAL(disableCurrentFilter(bool))); connect(m_button, SIGNAL(changed(QColor)), this, SIGNAL(modified())); } diff --git a/src/choosecolorwidget.h b/src/choosecolorwidget.h index 24ab8cbc..303c4a4e 100644 --- a/src/choosecolorwidget.h +++ b/src/choosecolorwidget.h @@ -56,6 +56,8 @@ signals: /** @brief Emitted whenever a different color was choosen. */ void modified(); void displayMessage(const QString&, int); + /** @brief When user wants to pick a color, it's better to disable filter so we get proper color values. */ + void disableCurrentFilter(bool); }; #endif diff --git a/src/colorpickerwidget.cpp b/src/colorpickerwidget.cpp index 14daf208..18cc9685 100644 --- a/src/colorpickerwidget.cpp +++ b/src/colorpickerwidget.cpp @@ -188,6 +188,7 @@ void ColorPickerWidget::mouseMoveEvent(QMouseEvent* event) void ColorPickerWidget::slotSetupEventFilter() { + emit disableCurrentFilter(true); m_filterActive = true; setFocus(); installEventFilter(this); @@ -201,6 +202,7 @@ void ColorPickerWidget::closeEventFilter() releaseMouse(); releaseKeyboard(); removeEventFilter(this); + emit disableCurrentFilter(false); } bool ColorPickerWidget::eventFilter(QObject *object, QEvent *event) diff --git a/src/colorpickerwidget.h b/src/colorpickerwidget.h index 7838fcf4..3f6afe56 100644 --- a/src/colorpickerwidget.h +++ b/src/colorpickerwidget.h @@ -98,6 +98,8 @@ private slots: signals: void colorPicked(QColor); void displayMessage(const QString&, int); + /** @brief When user wants to pick a color, it's better to disable filter so we get proper color values. */ + void disableCurrentFilter(bool); }; #endif diff --git a/src/effectstack/collapsibleeffect.cpp b/src/effectstack/collapsibleeffect.cpp index 60e5d3d1..8b983c15 100644 --- a/src/effectstack/collapsibleeffect.cpp +++ b/src/effectstack/collapsibleeffect.cpp @@ -120,7 +120,7 @@ CollapsibleEffect::CollapsibleEffect(QDomElement effect, QDomElement original_ef } connect(collapseButton, SIGNAL(clicked()), this, SLOT(slotSwitch())); - connect(enabledButton, SIGNAL(toggled(bool)), this, SLOT(slotEnable(bool))); + connect(enabledButton, SIGNAL(toggled(bool)), this, SLOT(slotDisable(bool))); connect(buttonUp, SIGNAL(clicked()), this, SLOT(slotEffectUp())); connect(buttonDown, SIGNAL(clicked()), this, SLOT(slotEffectDown())); connect(buttonDel, SIGNAL(clicked()), this, SLOT(slotDeleteEffect())); @@ -253,7 +253,7 @@ void CollapsibleEffect::mouseReleaseEvent( QMouseEvent *event ) QWidget::mouseReleaseEvent(event); } -void CollapsibleEffect::slotEnable(bool disable, bool emitInfo) +void CollapsibleEffect::slotDisable(bool disable, bool emitInfo) { title->setEnabled(!disable); enabledButton->blockSignals(true); @@ -440,6 +440,7 @@ void CollapsibleEffect::setupWidget(ItemInfo info, EffectMetaInfo *metaInfo) } else { m_paramWidget = new ParameterContainer(m_effect, info, metaInfo, widgetFrame); + connect(m_paramWidget, SIGNAL(disableCurrentFilter(bool)), this, SLOT(slotDisableEffect(bool))); if (m_effect.firstChildElement("parameter").isNull()) { // Effect has no parameter, don't allow expand collapseButton->setEnabled(false); @@ -463,6 +464,17 @@ void CollapsibleEffect::setupWidget(ItemInfo info, EffectMetaInfo *metaInfo) } +void CollapsibleEffect::slotDisableEffect(bool disable) +{ + title->setEnabled(!disable); + enabledButton->blockSignals(true); + enabledButton->setChecked(disable); + enabledButton->blockSignals(false); + enabledButton->setIcon(disable ? KIcon("novisible") : KIcon("visible")); + m_effect.setAttribute("disable", disable ? 1 : 0); + emit effectStateChanged(disable, effectIndex(), isActive() && needsMonitorEffectScene()); +} + bool CollapsibleEffect::isGroup() const { return false; diff --git a/src/effectstack/collapsibleeffect.h b/src/effectstack/collapsibleeffect.h index 138e8c33..9a6f9d85 100644 --- a/src/effectstack/collapsibleeffect.h +++ b/src/effectstack/collapsibleeffect.h @@ -76,7 +76,7 @@ public: public slots: void slotSyncEffectsPos(int pos); - void slotEnable(bool enable, bool emitInfo = true); + void slotDisable(bool disable, bool emitInfo = true); void slotResetEffect(); private slots: @@ -91,6 +91,8 @@ private slots: void slotUnGroup(); /** @brief A sub effect parameter was changed */ void slotUpdateRegionEffectParams(const QDomElement /*old*/, const QDomElement /*e*/, int /*ix*/); + /** @brief Dis/enable effect before processing an operation (color picker) */ + void slotDisableEffect(bool disable); private: ParameterContainer *m_paramWidget; diff --git a/src/effectstack/collapsiblegroup.cpp b/src/effectstack/collapsiblegroup.cpp index bae783c5..8572b6ec 100644 --- a/src/effectstack/collapsiblegroup.cpp +++ b/src/effectstack/collapsiblegroup.cpp @@ -136,7 +136,7 @@ void CollapsibleGroup::slotEnable(bool disable, bool emitInfo) enabledButton->setIcon(disable ? KIcon("novisible") : KIcon("visible")); enabledButton->blockSignals(false); for (int i = 0; i < m_subWidgets.count(); i++) - m_subWidgets.at(i)->slotEnable(disable, emitInfo); + m_subWidgets.at(i)->slotDisable(disable, emitInfo); } void CollapsibleGroup::slotDeleteGroup() diff --git a/src/effectstack/effectstackview2.cpp b/src/effectstack/effectstackview2.cpp index 740518c1..fa541eee 100644 --- a/src/effectstack/effectstackview2.cpp +++ b/src/effectstack/effectstackview2.cpp @@ -501,7 +501,7 @@ void EffectStackView2::slotCheckAll(int state) // Disable all effects QList indexes; for (int i = 0; i < m_effects.count(); i++) { - m_effects.at(i)->slotEnable(disabled, false); + m_effects.at(i)->slotDisable(disabled, false); indexes << m_effects.at(i)->effectIndex(); } // Take care of groups diff --git a/src/effectstack/parametercontainer.cpp b/src/effectstack/parametercontainer.cpp index 82b228a4..89a62da0 100644 --- a/src/effectstack/parametercontainer.cpp +++ b/src/effectstack/parametercontainer.cpp @@ -274,6 +274,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect m_valueItems[paramName] = choosecolor; connect(choosecolor, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int))); connect(choosecolor, SIGNAL(modified()) , this, SLOT(slotCollectAllParameters())); + connect(choosecolor, SIGNAL(disableCurrentFilter(bool)) , this, SIGNAL(disableCurrentFilter(bool))); } else if (type == "position") { int pos = value.toInt(); if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") { diff --git a/src/effectstack/parametercontainer.h b/src/effectstack/parametercontainer.h index c41c9da8..5e98a3f2 100644 --- a/src/effectstack/parametercontainer.h +++ b/src/effectstack/parametercontainer.h @@ -97,7 +97,7 @@ private: signals: void parameterChanged(const QDomElement, const QDomElement, int); void syncEffectsPos(int); - void effectStateChanged(bool); + void disableCurrentFilter(bool); void checkMonitorPosition(int); void seekTimeline(int); void showComments(bool); diff --git a/src/renderer.cpp b/src/renderer.cpp index 9f0b2b19..e947bc79 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -4109,6 +4109,7 @@ const QList Render::producersList() Mlt::Producer trackProducer(tt); delete tt; Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); + if (!trackPlaylist.is_valid()) continue; int clipNb = trackPlaylist.count(); for (int i = 0; i < clipNb; i++) { Mlt::Producer *c = trackPlaylist.get_clip(i); @@ -4141,6 +4142,7 @@ void Render::fillSlowMotionProducers() Mlt::Producer trackProducer(tt); delete tt; Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); + if (!trackPlaylist.is_valid()) continue; int clipNb = trackPlaylist.count(); for (int i = 0; i < clipNb; i++) { Mlt::Producer *c = trackPlaylist.get_clip(i); -- 2.39.2