if (type() == AVWIDGET && cropStart() + durationDiff < GenTime()) {
durationDiff = GenTime() - cropStart();
} else if (durationDiff >= m_cropDuration) {
- durationDiff = m_cropDuration - GenTime(3, m_fps);
+ return;
+ if (m_cropDuration > GenTime(3, m_fps)) durationDiff = GenTime(3, m_fps);
+ else return;
}
m_startPos += durationDiff;
setPos((qreal) m_startPos.frames(m_fps), pos().y());
//kDebug() << "-- NEW CLIP=" << startPos().frames(25) << "-" << endPos().frames(25);
-
//setRect((double) m_startPos.frames(m_fps) * scale, rect().y(), (double) m_cropDuration.frames(m_fps) * scale, rect().height());
if (durationDiff < GenTime()) {
QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
kDebug() << "///////// COLLISION DETECTED!!!!!!!!!";
GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
setRect(0, 0, (m_cropDuration - diff).frames(m_fps) - 0.02, rect().height());
- setPos((qreal)(m_startPos + diff).frames(m_fps), pos().y());
+ setPos((m_startPos + diff).frames(m_fps), pos().y());
m_startPos += diff;
if (type() == AVWIDGET) m_cropStart += diff;
m_cropDuration = m_cropDuration - diff;
kDebug() << "///////// COLLISION: " << ((AbstractClipItem *)item)->startPos().frames(25) << "x" << ((AbstractClipItem *)item)->endPos().frames(25) << ", RECT: " << ((AbstractClipItem *)item)->rect() << "-" << item->pos();
GenTime diff = ((AbstractClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos();
m_cropDuration = diff;
- setRect(0, 0, (m_cropDuration.frames(m_fps)) - 0.02, rect().height());
+ setRect(0, 0, m_cropDuration.frames(m_fps) - 0.02, rect().height());
break;
}
}
ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, bool generateThumbs)
: AbstractClipItem(info, QRectF(), fps), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_startThumbRequested(false), m_endThumbRequested(false), m_startFade(0), m_endFade(0), m_hover(false), m_selectedEffect(-1), m_speed(1.0), framePixelWidth(0), m_startPix(QPixmap()), m_endPix(QPixmap()) {
- setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() - 2));
- setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight()) + 1);
+ setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2));
+ setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1);
m_clipName = clip->name();
m_producer = clip->getId();
if (effect.attribute("tag") == "volume") {
if (effect.attribute("id") == "fadeout") {
int end = (duration() + cropStart()).frames(m_fps);
- int start = end - EffectsList::parameter(effect, "out").toInt();
+ int start = end - EffectsList::parameter(effect, "in").toInt();
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
} else if (effect.attribute("id") == "fadein") {
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET) {
item = (ClipItem*) itemList.at(i);
- item->setRect(0, 0, item->rect().width() - 0.02, m_tracksHeight - 1);
+ item->setRect(0, 0, item->rect().width(), m_tracksHeight - 1);
item->setPos((qreal) item->startPos().frames(m_document->fps()), (qreal) item->track() * m_tracksHeight + 1);
item->resetThumbs();
} else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
transitionitem = (Transition*) itemList.at(i);
- transitionitem->setRect(0, 0, transitionitem->rect().width() - 0.02, m_tracksHeight / 3 * 2 - 1);
+ transitionitem->setRect(0, 0, transitionitem->rect().width(), m_tracksHeight / 3 * 2 - 1);
transitionitem->setPos((qreal) transitionitem->startPos().frames(m_document->fps()), (qreal) transitionitem->track() * m_tracksHeight + m_tracksHeight / 3 * 2);
}
}
if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
if (transitionClip && transitionClip->endPos() < m_dragItem->endPos()) {
info.endPos = transitionClip->endPos();
- } else info.endPos = info.startPos + GenTime(2.5);
- if (info.endPos == info.startPos) info.endPos = info.startPos + GenTime(2.5);
+ } else info.endPos = info.startPos + GenTime(65, m_document->fps());
+ if (info.endPos == info.startPos) info.endPos = info.startPos + GenTime(65, m_document->fps());
slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack);
} else if (m_operationMode == TRANSITIONEND) {
ItemInfo info;
if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.endPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
if (transitionClip && transitionClip->startPos() > m_dragItem->startPos()) {
info.startPos = transitionClip->startPos();
- } else info.startPos = info.endPos - GenTime(2.5);
- if (info.endPos == info.startPos) info.startPos = info.endPos - GenTime(2.5);
- slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack);
+ } else info.startPos = info.endPos - GenTime(65, m_document->fps());
+ if (info.endPos == info.startPos) info.startPos = info.endPos - GenTime(65, m_document->fps());
+ QDomElement transition = MainWindow::transitions.getEffectByName("Luma").cloneNode().toElement();
+ EffectsList::setParameter(transition, "reverse", "1");
+ slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, transition);
}
m_blockRefresh = false;
const int transitiontrack = getPreviousVideoTrack(info.track);
GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
if (pos < item->startPos() + item->duration() / 2) {
+ // add transition to clip start
info.startPos = item->startPos();
if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
if (transitionClip && transitionClip->endPos() < item->endPos()) {
info.endPos = transitionClip->endPos();
- } else info.endPos = info.startPos + GenTime(2.5);
+ } else info.endPos = info.startPos + GenTime(65, m_document->fps());
} else {
+ // add transition to clip end
info.endPos = item->endPos();
if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.endPos.frames(m_document->fps()), m_scene->m_tracksList.count() - transitiontrack);
if (transitionClip && transitionClip->startPos() > item->startPos()) {
info.startPos = transitionClip->startPos();
- } else info.startPos = info.endPos - GenTime(2.5);
+ } else info.startPos = info.endPos - GenTime(65, m_document->fps());
+ if (transition.attribute("tag") == "luma") EffectsList::setParameter(transition, "reverse", "1");
}
slotAddTransition(item, info, transitiontrack, transition);
}
ClipItem *item = (ClipItem *) itemList.at(i);
ItemInfo info;
info.startPos = item->startPos();
- info.endPos = info.startPos + GenTime(2.5);
+ info.endPos = info.startPos + GenTime(65, m_document->fps());
info.track = item->track();
int transitiontrack = getPreviousVideoTrack(info.track);
slotAddTransition(item, info, transitiontrack, transition);
return;
}
m_document->renderer()->mltDeleteTransition(item->transitionTag(), endTrack, m_scene->m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, item->toXML());
+ if (m_dragItem == item) m_dragItem = NULL;
delete item;
emit transitionItemSelected(NULL);
m_document->setModified(true);
}
}
scene()->removeItem(item);
+ if (m_dragItem == item) m_dragItem = NULL;
delete item;
m_document->renderer()->mltRemoveClip(m_scene->m_tracksList.count() - info.track, info.startPos);
m_document->renderer()->doRefresh();
#include "mainwindow.h"
Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDomElement params, bool automaticTransition) : AbstractClipItem(info, QRectF(), fps), m_gradient(QLinearGradient(0, 0, 0, 0)), m_automaticTransition(automaticTransition), m_forceTransitionTrack(false) {
- setRect(0, 0, (qreal)(info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1));
- setPos((qreal) info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
+ setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (qreal)(KdenliveSettings::trackheight() / 3 * 2 - 1));
+ setPos(info.startPos.frames(fps), (qreal)(info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 3 * 2));
m_singleClip = true;
m_transitionTrack = transitiontrack;
//m_referenceClip = clipa;
if (params.isNull()) {
- m_parameters = MainWindow::transitions.getEffectByName("Luma");
+ m_parameters = MainWindow::transitions.getEffectByName("Luma").cloneNode().toElement();
} else {
m_parameters = params;
}