}
}
- if (effect.attribute("tag") == "volume") {
- if (effect.attribute("id") == "fadeout") {
+ if (effect.attribute("tag") == "volume" || effect.attribute("tag") == "brightness") {
+ if (effect.attribute("id") == "fadeout" || effect.attribute("id") == "fade_to_black") {
int end = (duration() + cropStart()).frames(m_fps);
- int start = end - EffectsList::parameter(effect, "in").toInt();
+ int start = end;
+ if (effect.attribute("id") == "fadeout" ) {
+ if (m_effectList.hasEffect("", "fade_to_black") == -1) {
+ start -= EffectsList::parameter(effect, "in").toInt();
+ } else {
+ QDomElement fadeout = m_effectList.getEffectByTag("", "fade_to_black");
+ start -= EffectsList::parameter(fadeout, "out").toInt() - EffectsList::parameter(fadeout, "in").toInt();
+ }
+ } else if (effect.attribute("id") == "fade_to_black" ) {
+ if (m_effectList.hasEffect("", "fadeout") == -1) {
+ start -= EffectsList::parameter(effect, "in").toInt();
+ } else {
+ QDomElement fadeout = m_effectList.getEffectByTag("", "fadeout");
+ start -= EffectsList::parameter(fadeout, "out").toInt() - EffectsList::parameter(fadeout, "in").toInt();
+ }
+ }
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
- } else if (effect.attribute("id") == "fadein") {
+ } else if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") {
int start = cropStart().frames(m_fps);
- int end = start + EffectsList::parameter(effect, "out").toInt();
+ int end = start;
+ if (effect.attribute("id") == "fadein" ) {
+ if (m_effectList.hasEffect("", "fade_from_black") == -1)
+ end += EffectsList::parameter(effect, "out").toInt();
+ else
+ end += EffectsList::parameter(m_effectList.getEffectByTag("", "fade_from_black"), "out").toInt();
+ } else if (effect.attribute("id") == "fade_from_black" ) {
+ if (m_effectList.hasEffect("", "fadein") == -1)
+ end += EffectsList::parameter(effect, "out").toInt();
+ else
+ end += EffectsList::parameter(m_effectList.getEffectByTag("", "fadein"), "out").toInt();
+ }
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
}
m_effectList.insert(ix, effect);
m_effectList.removeAt(ix + 1);
m_effectNames = m_effectList.effectNames().join(" / ");
- if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fadeout") update(boundingRect());
+ QString id = effect.attribute("id");
+ if (id == "fadein" || id == "fadeout" || id == "fade_from_black" || id == "fade_to_black")
+ update(boundingRect());
else {
QRectF r = boundingRect();
r.setHeight(20);
// check if it is a fade effect
if (effectId == "fadein") {
needRepaint = true;
- if (e.attribute("name") == "out") fade += e.attribute("value").toInt();
- else if (e.attribute("name") == "in") fade -= e.attribute("value").toInt();
+ if (m_effectList.hasEffect("", "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("", "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") {
+ needRepaint = true;
+ if (m_effectList.hasEffect("", "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("", "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") {
needRepaint = true;
- if (e.attribute("name") == "out") fade -= e.attribute("value").toInt();
- else if (e.attribute("name") == "in") fade += e.attribute("value").toInt();
+ if (m_effectList.hasEffect("", "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("", "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") {
+ needRepaint = true;
+ if (m_effectList.hasEffect("", "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("", "fadeout");
+ if (fadeout.attribute("name") == "out") fade -= fadeout.attribute("value").toInt();
+ else if (fadeout.attribute("name") == "in") fade += fadeout.attribute("value").toInt();
+ }
}
} else {
parameters.addParam(e.attribute("name"), QString::number(e.attribute("value").toDouble() / f));
void ClipItem::deleteEffect(QString index) {
bool needRepaint = false;
QString ix;
+
for (int i = 0; i < m_effectList.size(); ++i) {
ix = m_effectList.at(i).attribute("kdenlive_ix");
if (ix == index) {
- if (m_effectList.at(i).attribute("id") == "fadein") {
+ QString effectId = m_effectList.at(i).attribute("id");
+ if ((effectId == "fadein" && hasEffect("", "fade_from_black") == -1) ||
+ (effectId == "fade_from_black" && hasEffect("", "fadein") == -1)) {
m_startFade = 0;
needRepaint = true;
- } else if (m_effectList.at(i).attribute("id") == "fadeout") {
+ } else if ((effectId == "fadeout" && hasEffect("", "fade_to_black") == -1) ||
+ (effectId == "fade_to_black" && hasEffect("", "fadeout") == -1)) {
m_endFade = 0;
needRepaint = true;
}
clip->setSelectedEffect(ix);
if (!triggeredByUser) emit clipItemSelected(clip, ix);
}
- if (effect.attribute("tag") == "volume") {
+ if (effect.attribute("tag") == "volume" || effect.attribute("tag") == "brightness") {
// A fade effect was modified, update the clip
- if (effect.attribute("id") == "fadein") {
+ if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") {
int pos = effectParams.paramValue("out").toInt() - effectParams.paramValue("in").toInt();
clip->setFadeIn(pos);
}
- if (effect.attribute("id") == "fadeout") {
+ if (effect.attribute("id") == "fadeout" || effect.attribute("id") == "fade_to_black") {
int pos = effectParams.paramValue("out").toInt() - effectParams.paramValue("in").toInt();
clip->setFadeOut(pos);
}
slotUpdateClipEffect(item, effect, oldeffect, ix);
emit clipItemSelected(item, ix);
}
- } else if (item->fadeIn() != 0) {
+ } else if (item->fadeIn() != 0 && item->hasEffect("", "fade_from_black") == -1) {
QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadein").cloneNode().toElement();
EffectsList::setParameter(effect, "out", QString::number(item->fadeIn()));
slotAddEffect(effect, m_dragItem->startPos(), m_dragItem->track());
}
+ ix = item->hasEffect("volume", "fade_from_black");
+ if (ix != -1) {
+ QDomElement oldeffect = item->effectAt(ix);
+ int start = item->cropStart().frames(m_document->fps());
+ int end = item->fadeIn();
+ if (end == 0) {
+ slotDeleteEffect(item, oldeffect);
+ } else {
+ end += start;
+ QDomElement effect = oldeffect.cloneNode().toElement();
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ slotUpdateClipEffect(item, effect, oldeffect, ix);
+ emit clipItemSelected(item, ix);
+ }
+ }
} else if (m_operationMode == FADEOUT) {
// resize fade in effect
ClipItem * item = (ClipItem *) m_dragItem;
slotUpdateClipEffect(item, effect, oldeffect, ix);
emit clipItemSelected(item, ix);
}
- } else if (item->fadeOut() != 0) {
+ } else if (item->fadeOut() != 0 && item->hasEffect("", "fade_to_black") == -1) {
QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadeout").cloneNode().toElement();
EffectsList::setParameter(effect, "in", QString::number(item->fadeOut()));
EffectsList::setParameter(effect, "out", QString::number(0));
slotAddEffect(effect, m_dragItem->startPos(), m_dragItem->track());
}
+ ix = item->hasEffect("brightness", "fade_to_black");
+ if (ix != -1) {
+ QDomElement oldeffect = item->effectAt(ix);
+ int end = (item->duration() + item->cropStart()).frames(m_document->fps());
+ int start = item->fadeOut();
+ if (start == 0) {
+ slotDeleteEffect(item, oldeffect);
+ } else {
+ start = end - start;
+ QDomElement effect = oldeffect.cloneNode().toElement();
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ // kDebug()<<"EDIT FADE OUT : "<<start<<"x"<<end;
+ slotUpdateClipEffect(item, effect, oldeffect, ix);
+ emit clipItemSelected(item, ix);
+ }
+ }
} else if (m_operationMode == KEYFRAME) {
// update the MLT effect
ClipItem * item = (ClipItem *) m_dragItem;
if (end != 0) {
// there is a fade in effect
int effectPos = item->hasEffect("volume", "fadein");
- if (effectPos == -1) return;
- QDomElement oldeffect = item->effectAt(effectPos);
- int start = item->cropStart().frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeIn(max);
- end = item->fadeIn();
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int start = item->cropStart().frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ item->setFadeIn(max);
+ end = item->fadeIn();
+ }
+ end += start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ }
+ effectPos = item->hasEffect("brightness", "fade_from_black");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int start = item->cropStart().frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ item->setFadeIn(max);
+ end = item->fadeIn();
+ }
+ end += start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
}
- end += start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
}
} else {
int start = item->fadeOut();
if (start != 0) {
// there is a fade in effect
int effectPos = item->hasEffect("volume", "fadeout");
- if (effectPos == -1) return;
- QDomElement oldeffect = item->effectAt(effectPos);
- int end = (item->duration() - item->cropStart()).frames(m_document->fps());
- int max = item->cropDuration().frames(m_document->fps());
- if (end > max) {
- item->setFadeOut(max);
- start = item->fadeOut();
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int end = (item->duration() - item->cropStart()).frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ item->setFadeOut(max);
+ start = item->fadeOut();
+ }
+ start = end - start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
+ }
+ effectPos = item->hasEffect("brightness", "fade_to_black");
+ if (effectPos != -1) {
+ QDomElement oldeffect = item->effectAt(effectPos);
+ int end = (item->duration() - item->cropStart()).frames(m_document->fps());
+ int max = item->cropDuration().frames(m_document->fps());
+ if (end > max) {
+ item->setFadeOut(max);
+ start = item->fadeOut();
+ }
+ start = end - start;
+ EffectsList::setParameter(oldeffect, "in", QString::number(start));
+ EffectsList::setParameter(oldeffect, "out", QString::number(end));
+ if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
+ emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
+ // if fade effect is displayed, update the effect edit widget with new clip duration
+ if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
}
- start = end - start;
- EffectsList::setParameter(oldeffect, "in", QString::number(start));
- EffectsList::setParameter(oldeffect, "out", QString::number(end));
- if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - item->track(), item->startPos(), item->getEffectArgs(oldeffect)))
- emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
- // if fade effect is displayed, update the effect edit widget with new clip duration
- if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos);
}
}
}