From f6afc93100a3d635181e017cd9f49844580fd0e7 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 24 Apr 2010 22:13:06 +0000 Subject: [PATCH] Fix fades when copy/paste a clip svn path=/trunk/kdenlive/; revision=4401 --- src/clipitem.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++- src/clipitem.h | 1 + 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 61265675..0492669d 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -138,6 +138,7 @@ ClipItem *ClipItem::clone(ItemInfo info) const duplicate->setEffectList(m_effectList); duplicate->setVideoOnly(m_videoOnly); duplicate->setAudioOnly(m_audioOnly); + duplicate->setFades(fadeIn(), fadeOut()); //duplicate->setSpeed(m_speed); return duplicate; } @@ -146,7 +147,59 @@ void ClipItem::setEffectList(const EffectsList effectList) { m_effectList.clone(effectList); m_effectNames = m_effectList.effectNames().join(" / "); - if (!m_effectList.isEmpty()) setSelectedEffect(0); + if (!m_effectList.isEmpty()) { + for (int i = 0; i < m_effectList.count(); i++) { + QString effectId = m_effectList.item(i).attribute("id"); + // check if it is a fade effect + QDomNodeList params = m_effectList.item(i).elementsByTagName("parameter"); + int fade = 0; + for (int j = 0; j < params.count(); j++) { + QDomElement e = params.item(j).toElement(); + if (!e.isNull()) { + if (effectId == "fadein") { + if (m_effectList.hasEffect(QString(), "fade_from_black") == -1) { + if (e.attribute("name") == "out") fade += e.attribute("value").toInt(); + else if (e.attribute("name") == "in") fade -= e.attribute("value").toInt(); + } else { + QDomElement fadein = m_effectList.getEffectByTag(QString(), "fade_from_black"); + if (fadein.attribute("name") == "out") fade += fadein.attribute("value").toInt(); + else if (fadein.attribute("name") == "in") fade -= fadein.attribute("value").toInt(); + } + } else if (effectId == "fade_from_black") { + if (m_effectList.hasEffect(QString(), "fadein") == -1) { + if (e.attribute("name") == "out") fade += e.attribute("value").toInt(); + else if (e.attribute("name") == "in") fade -= e.attribute("value").toInt(); + } else { + QDomElement fadein = m_effectList.getEffectByTag(QString(), "fadein"); + if (fadein.attribute("name") == "out") fade += fadein.attribute("value").toInt(); + else if (fadein.attribute("name") == "in") fade -= fadein.attribute("value").toInt(); + } + } else if (effectId == "fadeout") { + if (m_effectList.hasEffect(QString(), "fade_to_black") == -1) { + if (e.attribute("name") == "out") fade -= e.attribute("value").toInt(); + else if (e.attribute("name") == "in") fade += e.attribute("value").toInt(); + } else { + QDomElement fadeout = m_effectList.getEffectByTag(QString(), "fade_to_black"); + if (fadeout.attribute("name") == "out") fade -= fadeout.attribute("value").toInt(); + else if (fadeout.attribute("name") == "in") fade += fadeout.attribute("value").toInt(); + } + } else if (effectId == "fade_to_black") { + if (m_effectList.hasEffect(QString(), "fadeout") == -1) { + if (e.attribute("name") == "out") fade -= e.attribute("value").toInt(); + else if (e.attribute("name") == "in") fade += e.attribute("value").toInt(); + } else { + QDomElement fadeout = m_effectList.getEffectByTag(QString(), "fadeout"); + if (fadeout.attribute("name") == "out") fade -= fadeout.attribute("value").toInt(); + else if (fadeout.attribute("name") == "in") fade += fadeout.attribute("value").toInt(); + } + } + } + } + if (fade > 0) m_startFade = fade; + else if (fade < 0) m_endFade = -fade; + } + setSelectedEffect(0); + } } const EffectsList ClipItem::effectList() const @@ -1051,6 +1104,12 @@ void ClipItem::setFadeOut(int pos) } +void ClipItem::setFades(int in, int out) +{ + m_startFade = in; + m_endFade = out; +} + /* //virtual void ClipItem::hoverEnterEvent(QGraphicsSceneHoverEvent *e) diff --git a/src/clipitem.h b/src/clipitem.h index e764dd64..8b1c3f06 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -60,6 +60,7 @@ public: const EffectsList effectList() const; void setFadeOut(int pos); void setFadeIn(int pos); + void setFades(int in, int out); /** Give a string list of the clip's effect names */ QStringList effectNames(); /** Add an effect to the clip and return the parameters that will be passed to Mlt */ -- 2.39.2