<parameter type="fixed" name="in" max="0" min="0" default="0">
<name></name>
</parameter>
- <parameter type="position" name="out" max="15000" min="0" default="75">
+ <parameter type="position" name="out" max="90000" min="0" default="75">
<name>Duration</name>
</parameter>
<parameter type="fixed" name="gain" max="0" min="0" default="0">
<name>Fade out</name>
<description>Fade in audio track</description>
<author></author>
- <parameter type="fixed" name="in" max="0" min="0" default="0">
- <name></name>
- </parameter>
- <parameter type="position" name="out" max="15000" min="0" default="75">
+ <parameter type="position" name="in" max="0" min="0" default="75">
<name>Duration</name>
</parameter>
+ <parameter type="fixed" name="out" max="90000" min="0" default="0">
+ <name></name>
+ </parameter>
<parameter type="fixed" name="gain" max="1" min="1" default="1">
<name>Start Gain</name>
</parameter>
resizeinfo.track = m_scene->m_tracksList.count() - resizeinfo.track;
bool success = m_document->renderer()->mltResizeClipStart(resizeinfo, m_dragItem->startPos() - m_dragItemInfo.startPos);
if (success) {
- updateClipFade((ClipItem *) m_dragItem);
+ updateClipFade(static_cast <ClipItem *>(m_dragItem));
ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
} else {
if (success) {
ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
+ updateClipFade(static_cast <ClipItem *>(m_dragItem), true);
} else {
m_dragItem->resizeEnd((int) m_dragItemInfo.endPos.frames(m_document->fps()));
emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
int end = item->fadeIn();
if (end != 0) {
// there is a fade in effect
- QStringList clipeffects = item->effectNames();
int effectPos = item->hasEffect("volume", "fadein");
+ if (effectPos == -1) return;
QDomElement oldeffect = item->effectAt(effectPos);
int start = item->cropStart().frames(m_document->fps());
end += start;
QHash <QString, QString> effectParams = item->getEffectArgs(oldeffect);
if (!m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
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
- QStringList clipeffects = item->effectNames();
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());
start = end - start;
EffectsList::setParameter(oldeffect, "in", QString::number(start));
EffectsList::setParameter(oldeffect, "out", QString::number(end));
QHash <QString, QString> effectParams = item->getEffectArgs(oldeffect);
- if (m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
+ if (!m_document->renderer()->mltEditEffect(m_scene->m_tracksList.count() - item->track(), item->startPos(), effectParams))
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 if (type == "position") {
Ui::Positionval_UI *pval = new Ui::Positionval_UI;
pval->setupUi(toFillin);
- pval->krestrictedline->setText(m_timecode.getTimecodeFromFrames(value.toInt()));
+ int pos = value.toInt();
+ if (d.attribute("id") == "fadein") {
+ pos = pos - m_in;
+ } else if (d.attribute("id") == "fadeout") {
+ // fadeout position starts from clip end
+ pos = m_out - (pos - m_in);
+ }
+ pval->krestrictedline->setText(m_timecode.getTimecodeFromFrames(pos));
connect(pval->krestrictedline, SIGNAL(editingFinished()), this, SLOT(collectAllParameters()));
pval->label->setText(paramName);
valueItems[paramName + "position"] = pval;
namenode.item(i) = geom->getParamDesc();
} else if (type == "position") {
KRestrictedLine *line = ((Ui::Positionval_UI*)valueItems[paramName+"position"])->krestrictedline;
- setValue = QString::number(m_timecode.getFrameCount(line->text(), KdenliveSettings::project_fps()));
- kDebug() << "// NEW POSITION: " << setValue << "(" << line->text() << " PARAM: " << paramName + "position";
+ int pos = m_timecode.getFrameCount(line->text(), KdenliveSettings::project_fps());
+ if (params.attribute("id") == "fadein") {
+ pos += m_in;
+ } else if (params.attribute("id") == "fadeout") {
+ pos = m_out - (pos - m_in);
+ }
+ setValue = QString::number(pos);
} else if (type == "wipe") {
Ui::Wipeval_UI *wp = (Ui::Wipeval_UI*)valueItems[paramName];
wipeInfo info;
#include "effectslist.h"
#include "clipitem.h"
#include "mainwindow.h"
-
+#include "kdenlivesettings.h"
EffectStackView::EffectStackView(QWidget *parent)
: QWidget(parent) {
}
}
if (clipref->effectsCount() == 0) {
- emit transferParamDesc(QDomElement(), 0, 100);
+ emit transferParamDesc(QDomElement(), 0, 0);
ui.buttonDel->setEnabled(false);
ui.buttonSave->setEnabled(false);
ui.buttonReset->setEnabled(false);
bool isChecked = false;
if (hasItem && ui.effectlist->currentItem()->checkState() == Qt::Checked) isChecked = true;
if (hasItem && ui.effectlist->currentItem()->isSelected()) {
- emit transferParamDesc(clipref->effectAt(activeRow), 0, 100);//minx max frame
+ emit transferParamDesc(clipref->effectAt(activeRow), clipref->cropStart().frames(KdenliveSettings::project_fps()), clipref->cropDuration().frames(KdenliveSettings::project_fps()));//minx max frame
}
if (clipref) clipref->setSelectedEffect(activeRow);
ui.buttonDel->setEnabled(hasItem);
}
if (!dom.isNull()) {
dom.setAttribute("kdenlive_ix", old.attribute("kdenlive_ix"));
- emit transferParamDesc(dom, 0, 100);//minx max frame
+ emit transferParamDesc(dom, clipref->cropStart().frames(KdenliveSettings::project_fps()), clipref->cropDuration().frames(KdenliveSettings::project_fps()));//minx max frame
emit updateClipEffect(clipref, old, dom, activeRow);
}
}