From: Jean-Baptiste Mardelle Date: Thu, 1 Oct 2009 21:50:19 +0000 (+0000) Subject: Fix freeze effect when resizing clip X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=33ba9755f2de1046516fcc40b1d6c4104461519e;p=kdenlive Fix freeze effect when resizing clip http://www.kdenlive.org:80/mantis/view.php?id=1175 svn path=/trunk/kdenlive/; revision=3976 --- diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 6a240391..034ec992 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2820,7 +2820,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) } ClipItem *clip = static_cast < ClipItem * >(m_dragItem); - updateClipFade(clip); + updatePositionEffects(clip, m_dragItemInfo); // check keyframes QDomDocument doc; @@ -2944,7 +2944,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) } else new ResizeClipCommand(this, m_dragItemInfo, info, false, false, resizeCommand); m_commandStack->push(resizeCommand); - updateClipFade(clip); + updatePositionEffects(clip, m_dragItemInfo); } else { m_dragItem->resizeEnd((int) m_dragItemInfo.endPos.frames(m_document->fps())); emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); @@ -3221,7 +3221,7 @@ void CustomTrackView::doChangeClipSpeed(ItemInfo info, const double speed, const item->updateRectGeometry(); if (item->cropDuration().frames(m_document->fps()) > endPos) item->AbstractClipItem::resizeEnd(info.startPos.frames(m_document->fps()) + endPos, speed); - updateClipFade(item); + updatePositionEffects(item, info); setDocumentModified(); } else emit displayMessage(i18n("Invalid clip"), ErrorMessage); } @@ -3701,7 +3701,7 @@ void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end, bool 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); + updatePositionEffects(item, clipinfo); } else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); } else { ItemInfo clipinfo = item->info(); @@ -3709,7 +3709,7 @@ void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end, bool bool success = m_document->renderer()->mltResizeClipEnd(clipinfo, end.endPos - clipinfo.startPos); if (success) { item->resizeEnd((int) end.endPos.frames(m_document->fps())); - updateClipFade(item); + updatePositionEffects(item, clipinfo); } else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage); } if (!resizeClipStart && end.cropStart != start.cropStart) { @@ -3726,7 +3726,7 @@ void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end, bool KdenliveSettings::setSnaptopoints(snap); } -void CustomTrackView::updateClipFade(ClipItem * item) +void CustomTrackView::updatePositionEffects(ClipItem * item, ItemInfo info) { int end = item->fadeIn(); if (end != 0) { @@ -3808,7 +3808,20 @@ void CustomTrackView::updateClipFade(ClipItem * item) if (item->isSelected() && effectPos == item->selectedEffectIndex()) emit clipItemSelected(item, effectPos); } } - if (item->isSelected() && item->selectedEffect().attribute("id") == "freeze") emit clipItemSelected(item, item->selectedEffectIndex()); + + int effectPos = item->hasEffect("freeze", "freeze"); + if (effectPos != -1) { + // Freeze effect needs to be adjusted with clip resize + int diff = (info.startPos - item->startPos()).frames(m_document->fps()); + QDomElement eff = item->getEffectAt(effectPos); + if (!eff.isNull()) { + int freeze_pos = EffectsList::parameter(eff, "frame").toInt() + diff; + EffectsList::setParameter(eff, "frame", QString::number(freeze_pos)); + if (item->isSelected() && item->selectedEffect().attribute("id") == "freeze") { + emit clipItemSelected(item, item->selectedEffectIndex()); + } + } + } } double CustomTrackView::getSnapPointForPos(double pos) diff --git a/src/customtrackview.h b/src/customtrackview.h index 2370fc7b..e62b15d7 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -235,7 +235,7 @@ private: /** Get the index of the video track that is just below current track */ int getPreviousVideoTrack(int track); - void updateClipFade(ClipItem * item); + void updatePositionEffects(ClipItem * item, ItemInfo info); bool insertDropClips(const QMimeData *data, const QPoint pos); bool canBePastedTo(ItemInfo info, int type) const; bool canBePastedTo(QList infoList, int type) const;