From 8a5c1a43e5ee06d0206b39f546f5bb431f634d0c Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 30 May 2009 00:20:34 +0000 Subject: [PATCH] Fix adjusting position with clip dialog (double click on clip) svn path=/trunk/kdenlive/; revision=3452 --- src/clipdurationdialog.cpp | 5 +++-- src/customtrackview.cpp | 12 ++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/clipdurationdialog.cpp b/src/clipdurationdialog.cpp index 5f144bdc..cfcef5e6 100644 --- a/src/clipdurationdialog.cpp +++ b/src/clipdurationdialog.cpp @@ -23,6 +23,7 @@ #include "kdenlivesettings.h" #include +#include #include @@ -80,9 +81,9 @@ void ClipDurationDialog::slotCheckStart() int dur = m_tc.getFrameCount(m_view.clip_duration->text(), m_fps); GenTime start(pos, m_fps); GenTime duration(dur, m_fps); - if (start < m_min) { + if (m_min != GenTime() && start < m_min) { m_view.clip_position->setText(m_tc.getTimecode(m_min, m_fps)); - } else if (start + duration > m_max) { + } else if (m_max != GenTime() && start + duration > m_max) { m_view.clip_position->setText(m_tc.getTimecode(m_max - duration, m_fps)); } } diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 9e6a543b..746740d8 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1016,7 +1016,7 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event) m_commandStack->push(command); updateEffect(m_document->tracksCount() - item->track(), item->startPos(), item->selectedEffect(), item->selectedEffectIndex()); } - } else if (m_dragItem) { + } else if (m_dragItem && !m_dragItem->isItemLocked()) { ClipDurationDialog d(m_dragItem, m_document->timecode(), this); GenTime minimum; GenTime maximum; @@ -1045,13 +1045,21 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event) QUndoCommand *moveCommand = new QUndoCommand(); moveCommand->setText(i18n("Edit clip")); ItemInfo clipInfo = m_dragItem->info(); + if (d.duration() < m_dragItem->duration() || d.cropStart() != clipInfo.cropStart) { + // duration was reduced, so process it first + ItemInfo startInfo = clipInfo; + clipInfo.endPos = clipInfo.startPos + d.duration(); + clipInfo.cropStart = d.cropStart(); + new ResizeClipCommand(this, startInfo, clipInfo, true, moveCommand); + } if (d.startPos() != clipInfo.startPos) { ItemInfo startInfo = clipInfo; clipInfo.startPos = d.startPos(); clipInfo.endPos = m_dragItem->endPos() + (clipInfo.startPos - startInfo.startPos); new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand); } - if (d.duration() != m_dragItem->duration() || d.cropStart() != clipInfo.cropStart) { + if (d.duration() > m_dragItem->duration()) { + // duration was increased, so process it after move ItemInfo startInfo = clipInfo; clipInfo.endPos = clipInfo.startPos + d.duration(); clipInfo.cropStart = d.cropStart(); -- 2.39.2