]> git.sesse.net Git - kdenlive/blobdiff - src/customtrackview.cpp
* New configuration page to set SDL audio/video driver and audio device
[kdenlive] / src / customtrackview.cpp
index 1fe7b94429f786f45de84bf0da5924083d03222b..aa087fad9f6d9de220de7dbe41b4ae282b5cb487 100644 (file)
@@ -817,8 +817,7 @@ void CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut) {
         newPos.cropStart = item->cropStart() + (cutTime - info.startPos);
         newPos.track = info.track;
         item->resizeEnd(cutPos, m_scale);
-        ClipItem *dup = new ClipItem(item->baseClip(), newPos, m_scale, m_document->fps());
-        dup->setEffectList(item->effectList());
+        ClipItem *dup = item->clone(m_scale, newPos);
         scene()->addItem(dup);
         m_document->renderer()->mltCutClip(m_tracksList.count() - info.track, cutTime);
         item->baseClip()->addReference();
@@ -1149,10 +1148,16 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
     } else if (m_operationMode == RESIZESTART && m_dragItem->startPos() != m_dragItemInfo.startPos) {
         // resize start
         if (m_dragItem->type() == AVWIDGET) {
-            m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
-            updateClipFade((ClipItem *) m_dragItem);
-            ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
-            m_commandStack->push(command);
+            bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
+           if (success) {
+               updateClipFade((ClipItem *) m_dragItem);
+               ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
+               m_commandStack->push(command);
+           }
+           else {
+               m_dragItem->resizeStart((int) m_dragItemInfo.startPos.frames(m_document->fps()), m_scale);
+               emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
+           }
         } else if (m_dragItem->type() == TRANSITIONWIDGET) {
             MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
@@ -1294,7 +1299,8 @@ void CustomTrackView::changeClipSpeed() {
             ItemInfo info = item->info();
             int percent = QInputDialog::getInteger(this, i18n("Edit Clip Speed"), i18n("New speed (percents)"), 100, 1, 300);
             double speed = (double) percent / 100.0;
-            new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected);
+           if (item->speed() != speed)
+               new ChangeSpeedCommand(this, info, item->speed(), speed, item->clipProducer(), true, changeSelected);
         }
     }
     m_commandStack->push(changeSelected);
@@ -1304,10 +1310,9 @@ void CustomTrackView::doChangeClipSpeed(ItemInfo info, double speed, int id) {
     DocClipBase *baseclip = m_document->clipManager()->getClipById(id);
     ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track);
     info.track = m_tracksList.count() - item->track();
-    int newLength = m_document->renderer()->mltChangeClipSpeed(info, speed, baseclip->producer());
-    GenTime maxDuration(newLength, m_document->fps());
-    item->setMaxDuration(maxDuration);
+    m_document->renderer()->mltChangeClipSpeed(info, speed, baseclip->producer());
     item->setSpeed(speed);
+    GenTime maxDuration = item->maxDuration();
     if (maxDuration < item->duration()) {
         info = item->info();
         ItemInfo endInfo = info;
@@ -1456,9 +1461,12 @@ void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end) {
         return;
     }
     if (resizeClipStart) {
-        m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos);
-        item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
-        updateClipFade(item);
+        bool success = m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos);
+        if (success) {
+           item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
+           updateClipFade(item);
+       }
+       else emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
     } else {
         m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + end.endPos - item->startPos());
         item->resizeEnd((int) end.endPos.frames(m_document->fps()), m_scale);
@@ -1988,7 +1996,7 @@ void CustomTrackView::copyClip() {
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
             ClipItem *dup = static_cast <ClipItem *>(itemList.at(i));
-            m_copiedItems.append(dup->clone(m_scale));
+            m_copiedItems.append(dup->clone(m_scale, dup->info()));
         } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
             Transition *dup = static_cast <Transition *>(itemList.at(i));
             m_copiedItems.append(dup->clone(m_scale));