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();
} 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);
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);
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;
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);
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));