newPos.track = info.track;
ClipItem *dup = item->clone(newPos);
kDebug() << "// REsizing item to: " << cutPos;
- item->resizeEnd(cutPos);
+ item->resizeEnd(cutPos, false);
scene()->addItem(dup);
+ if (item->checkKeyFrames()) slotRefreshEffects(item);
+ if (dup->checkKeyFrames()) slotRefreshEffects(dup);
item->baseClip()->addReference();
m_document->updateClip(item->baseClip()->getId());
kDebug() << "///////// CUTTING CLIP RESULT: (" << item->startPos().frames(25) << "-" << item->endPos().frames(25) << "), DUP: (" << dup->startPos().frames(25) << "-" << dup->endPos().frames(25) << ")" << ", CUT: " << cutTime.frames(25);
Transition *tr = new Transition(transitionInfo, endTrack, m_document->fps(), params);
scene()->addItem(tr);
- //kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_scene->m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
+ //kDebug() << "---- ADDING transition " << params.attribute("value");
m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_scene->m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, tr->toXML());
m_document->setModified(true);
}
m_document->updateClip(item->baseClip()->getId());
ItemInfo info;
info = item->info();
+ if (item->baseClip()->isTransparent()) {
+ // add transparency transition
+ int endTrack = getPreviousVideoTrack(info.track);
+ Transition *tr = new Transition(info, endTrack, m_document->fps(), MainWindow::transitions.getEffectByTag("composite", "alphatransparency"), true);
+ scene()->addItem(tr);
+ m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_scene->m_tracksList.count() - info.track, info.startPos, info.endPos, tr->toXML());
+ }
info.track = m_scene->m_tracksList.count() - item->track();
- m_document->renderer()->mltInsertClip(info, item->xml(), item->baseClip()->producer());
+ m_document->renderer()->mltInsertClip(info, item->xml(), item->baseClip()->producer(item->track()));
item->setSelected(true);
}
m_document->setModified(true);
if (m_selectionGroup == NULL) {
// we are moving one clip, easy
if (m_dragItem->type() == AVWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) {
- bool success = m_document->renderer()->mltMoveClip((int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), (int)(m_scene->m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())));
+ ClipItem *item = static_cast <ClipItem *>(m_dragItem);
+ bool success = m_document->renderer()->mltMoveClip((int)(m_scene->m_tracksList.count() - m_dragItemInfo.track), (int)(m_scene->m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (int)(m_dragItem->startPos().frames(m_document->fps())), item->baseClip()->producer(info.track));
if (success) {
MoveClipCommand *command = new MoveClipCommand(this, m_dragItemInfo, info, false);
m_commandStack->push(command);
+ if (item->baseClip()->isTransparent()) {
+ // Also move automatic transition
+ Transition *tr = getTransitionItemAt((int) m_dragItemInfo.startPos.frames(m_document->fps()) + 1, m_dragItemInfo.track);
+ if (tr && tr->isAutomatic()) {
+ tr->updateTransitionEndTrack(getPreviousVideoTrack(info.track));
+ m_document->renderer()->mltMoveTransition(tr->transitionTag(), m_scene->m_tracksList.count() - m_dragItemInfo.track, m_scene->m_tracksList.count() - info.track, tr->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
+ tr->setPos((int) info.startPos.frames(m_document->fps()), (int)(info.track * m_tracksHeight + 1));
+ }
+ }
} else {
// undo last move and emit error message
MoveClipCommand *command = new MoveClipCommand(this, info, m_dragItemInfo, true);
ClipItem *clip = static_cast <ClipItem*>(item);
new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), info, clip->effectList(), false, false, moveClips);
info.track = m_scene->m_tracksList.count() - info.track;
- m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer());
+ m_document->renderer()->mltInsertClip(info, clip->xml(), clip->baseClip()->producer(info.track));
} else {
Transition *tr = static_cast <Transition*>(item);
ItemInfo transitionInfo = tr->info();
if (item->isSelected()) emit clipItemSelected(NULL);
item->baseClip()->removeReference();
m_document->updateClip(item->baseClip()->getId());
+
+ if (item->baseClip()->isTransparent()) {
+ // also remove automatic transition
+ Transition *tr = getTransitionItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track);
+ if (tr && tr->isAutomatic()) {
+ m_document->renderer()->mltDeleteTransition(tr->transitionTag(), tr->transitionEndTrack(), m_scene->m_tracksList.count() - info.track, info.startPos, info.endPos, tr->toXML());
+ scene()->removeItem(tr);
+ delete tr;
+ }
+ }
scene()->removeItem(item);
delete item;
m_document->renderer()->mltRemoveClip(m_scene->m_tracksList.count() - info.track, info.startPos);
ClipItem *item = new ClipItem(baseclip, info, m_document->fps());
item->setEffectList(effects);
scene()->addItem(item);
+ if (item->baseClip()->isTransparent()) {
+ // add transparency transition
+ int endTrack = getPreviousVideoTrack(info.track);
+ Transition *tr = new Transition(info, endTrack, m_document->fps(), MainWindow::transitions.getEffectByTag("composite", "alphatransparency"), true);
+ scene()->addItem(tr);
+ m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_scene->m_tracksList.count() - info.track, info.startPos, info.endPos, tr->toXML());
+ }
+
baseclip->addReference();
m_document->updateClip(baseclip->getId());
info.track = m_scene->m_tracksList.count() - info.track;
- m_document->renderer()->mltInsertClip(info, xml, baseclip->producer());
+ m_document->renderer()->mltInsertClip(info, xml, baseclip->producer(info.track));
for (int i = 0; i < item->effectsCount(); i++) {
m_document->renderer()->mltAddEffect(info.track, info.startPos, item->getEffectArgs(item->effectAt(i)), false);
}
}
//kDebug() << "---------------- Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y();
- bool success = m_document->renderer()->mltMoveClip((int)(m_scene->m_tracksList.count() - start.track), (int)(m_scene->m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()));
+ bool success = m_document->renderer()->mltMoveClip((int)(m_scene->m_tracksList.count() - start.track), (int)(m_scene->m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()), item->baseClip()->producer(end.track));
if (success) {
item->setPos((int) end.startPos.frames(m_document->fps()), (int)(end.track * m_tracksHeight + 1));
+ if (item->baseClip()->isTransparent()) {
+ // Also move automatic transition
+ Transition *tr = getTransitionItemAt((int) start.startPos.frames(m_document->fps()) + 1, start.track);
+ if (tr && tr->isAutomatic()) {
+ tr->updateTransitionEndTrack(getPreviousVideoTrack(end.track));
+ m_document->renderer()->mltMoveTransition(tr->transitionTag(), m_scene->m_tracksList.count() - start.track, m_scene->m_tracksList.count() - end.track, tr->transitionEndTrack(), start.startPos, start.endPos, end.startPos, end.endPos);
+ tr->setPos((int) end.startPos.frames(m_document->fps()), (int)(end.track * m_tracksHeight + 1));
+ }
+ }
} else {
// undo last move and emit error message
emit displayMessage(i18n("Cannot move clip to position %1seconds", QString::number(end.startPos.seconds(), 'g', 2)), ErrorMessage);