ClipItem *ClipItem::clone(ItemInfo info) const {
ClipItem *duplicate = new ClipItem(m_clip, info, m_fps, m_speed);
- if (info.cropStart == cropStart()) duplicate->slotSetStartThumb(m_startPix);
+ if (info.cropStart == m_cropStart) duplicate->slotSetStartThumb(m_startPix);
if (info.cropStart + (info.endPos - info.startPos) == m_cropStart + m_cropDuration) duplicate->slotSetEndThumb(m_endPix);
kDebug() << "// CLoning clip: " << (info.cropStart + (info.endPos - info.startPos)).frames(m_fps) << ", CURRENT end: " << (cropStart() + duration()).frames(m_fps);
duplicate->setEffectList(m_effectList.clone());
if (effect.attribute("id") == "fadeout" || effect.attribute("id") == "fade_to_black") {
int end = (duration() + cropStart()).frames(m_fps);
int start = end;
- if (effect.attribute("id") == "fadeout" ) {
+ 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" ) {
+ } else if (effect.attribute("id") == "fade_to_black") {
if (m_effectList.hasEffect("", "fadeout") == -1) {
start -= EffectsList::parameter(effect, "in").toInt();
} else {
} else if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") {
int start = cropStart().frames(m_fps);
int end = start;
- if (effect.attribute("id") == "fadein" ) {
+ 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" ) {
+ } else if (effect.attribute("id") == "fade_from_black") {
if (m_effectList.hasEffect("", "fadein") == -1)
end += EffectsList::parameter(effect, "out").toInt();
else
m_effectList.insert(ix, effect);
m_effectList.removeAt(ix + 1);
m_effectNames = m_effectList.effectNames().join(" / ");
- QString id = effect.attribute("id");
+ QString id = effect.attribute("id");
if (id == "fadein" || id == "fadeout" || id == "fade_from_black" || id == "fade_to_black")
update(boundingRect());
else {
if (ix == index) {
QString effectId = m_effectList.at(i).attribute("id");
if ((effectId == "fadein" && hasEffect("", "fade_from_black") == -1) ||
- (effectId == "fade_from_black" && hasEffect("", "fadein") == -1)) {
+ (effectId == "fade_from_black" && hasEffect("", "fadein") == -1)) {
m_startFade = 0;
needRepaint = true;
} else if ((effectId == "fadeout" && hasEffect("", "fade_to_black") == -1) ||
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET) {
ClipItem *item = (ClipItem *)itemList.at(i);
- if (item->hasEffect(effect.attribute("tag"), effect.attribute("id")) != -1 && effect.attribute("unique", "0") != "0") {
- emit displayMessage(i18n("Effect already present in clip"), ErrorMessage);
- continue;
- }
+ if (item->hasEffect(effect.attribute("tag"), effect.attribute("id")) != -1 && effect.attribute("unique", "0") != "0") {
+ emit displayMessage(i18n("Effect already present in clip"), ErrorMessage);
+ continue;
+ }
item->initEffect(effect);
if (effect.attribute("tag") == "ladspa") {
QString ladpsaFile = m_document->getLadspaFile();
m_blockRefresh = false;
return;
}
+ if (item->parentItem()) {
+ // Item is part of a group, reset group
+ resetSelectionGroup();
+ }
kDebug() << "///////// CUTTING CLIP : (" << item->startPos().frames(25) << "-" << item->endPos().frames(25) << "), INFO: (" << info.startPos.frames(25) << "-" << info.endPos.frames(25) << ")" << ", CUT: " << cutTime.frames(25);
m_document->renderer()->mltCutClip(m_document->tracksCount() - info.track, cutTime);
int cutPos = (int) cutTime.frames(m_document->fps());
ItemInfo newPos;
+ double speed = item->speed();
newPos.startPos = cutTime;
newPos.endPos = info.endPos;
- newPos.cropStart = item->cropStart() + (cutTime - info.startPos);
+ if (speed == 1) newPos.cropStart = item->info().cropStart + (cutTime - info.startPos);
+ else newPos.cropStart = item->info().cropStart + (cutTime - info.startPos) * speed;
newPos.track = info.track;
ClipItem *dup = item->clone(newPos);
- kDebug() << "// REsizing item to: " << cutPos;
item->resizeEnd(cutPos, false);
scene()->addItem(dup);
if (item->checkKeyFrames()) slotRefreshEffects(item);
void CustomTrackView::doChangeClipSpeed(ItemInfo info, const double speed, const double oldspeed, const QString &id) {
DocClipBase *baseclip = m_document->clipManager()->getClipById(id);
ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track);
+ if (!item) {
+ kDebug() << "ERROR: Cannot find clip for speed change";
+ emit displayMessage(i18n("Cannot find clip for speed change"), ErrorMessage);
+ return;
+ }
info.track = m_document->tracksCount() - item->track();
int endPos = m_document->renderer()->mltChangeClipSpeed(info, speed, oldspeed, baseclip->producer());
- //kDebug() << "//CH CLIP SPEED: " << speed << "x" << oldspeed << ", END POS: " << endPos;
+ kDebug() << "//CH CLIP SPEED: " << speed << "x" << oldspeed << ", END POS: " << endPos;
item->setSpeed(speed);
item->updateRectGeometry();
if (item->cropDuration().frames(m_document->fps()) > endPos)
kDebug() << "---------------- ERROR, CANNOT find clip to resize at... "; // << startPos;
return;
}
+ if (item->parentItem()) {
+ // Item is part of a group, reset group
+ resetSelectionGroup();
+ }
bool snap = KdenliveSettings::snaptopoints();
KdenliveSettings::setSnaptopoints(false);
if (resizeClipStart && start.startPos != end.startPos) {
clipinfo.track = m_document->tracksCount() - clipinfo.track;
bool success = m_document->renderer()->mltResizeClipStart(clipinfo, end.startPos - item->startPos());
if (success) {
+ kDebug() << "RESIZE CLP STRAT TO:" << end.startPos.frames(m_document->fps()) << ", OLD ST: " << start.startPos.frames(25);
item->resizeStart((int) end.startPos.frames(m_document->fps()));
updateClipFade(item);
} else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
return;
}
ItemInfo startInfo = clip->info();
- ItemInfo endInfo = clip->info();
+ ItemInfo endInfo = startInfo;
endInfo.startPos = GenTime(m_cursorPos, m_document->fps());
if (endInfo.startPos >= startInfo.endPos) {
// Check for invalid resize