From 3d39d7bb337feea184c1b7e1f7ee91c8c5322754 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 23 Nov 2008 19:13:51 +0000 Subject: [PATCH] * Fix issue with fade out length: http://www.kdenlive.org:80/mantis/view.php?id=391 * Fix default direction of luma transition * Fix crash on transition deletion * Fix problem with transition resize svn path=/branches/KDE4/; revision=2721 --- src/abstractclipitem.cpp | 9 +++++---- src/clipitem.cpp | 6 +++--- src/customtrackview.cpp | 27 +++++++++++++++++---------- src/gentime.cpp | 2 +- src/transition.cpp | 6 +++--- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index a32ebd0e..47fda274 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -77,7 +77,9 @@ void AbstractClipItem::resizeStart(int posx, double speed) { 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; @@ -88,7 +90,6 @@ void AbstractClipItem::resizeStart(int posx, double speed) { 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 collisionList = collidingItems(Qt::IntersectsItemBoundingRect); @@ -98,7 +99,7 @@ void AbstractClipItem::resizeStart(int posx, double speed) { 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; @@ -132,7 +133,7 @@ void AbstractClipItem::resizeEnd(int posx, double speed, bool updateKeyFrames) { 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; } } diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 17e0c146..d1b277c1 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -42,8 +42,8 @@ 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(); @@ -152,7 +152,7 @@ void ClipItem::initEffect(QDomElement effect) { 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") { diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 388b6838..d6ce62af 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -132,12 +132,12 @@ void CustomTrackView::checkTrackHeight() { 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); } } @@ -670,8 +670,8 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) { 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; @@ -682,9 +682,11 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) { 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; @@ -1088,17 +1090,20 @@ void CustomTrackView::slotAddTransitionToSelectedClips(QDomElement transition) { 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); } @@ -1107,7 +1112,7 @@ void CustomTrackView::slotAddTransitionToSelectedClips(QDomElement 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); @@ -1137,6 +1142,7 @@ void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QD 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); @@ -1573,6 +1579,7 @@ void CustomTrackView::deleteClip(ItemInfo info) { } } 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(); diff --git a/src/gentime.cpp b/src/gentime.cpp index 5bb26664..435cd777 100644 --- a/src/gentime.cpp +++ b/src/gentime.cpp @@ -41,7 +41,7 @@ double GenTime::ms() const { /** Returns the time in frames, after being given the number of frames per second */ double GenTime::frames(double framesPerSecond) const { - return (int) floor(m_time * framesPerSecond + 0.5); + return floor(m_time * framesPerSecond + 0.5); } GenTime::~GenTime() { diff --git a/src/transition.cpp b/src/transition.cpp index e633817d..e5ecebfe 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -34,8 +34,8 @@ #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; @@ -48,7 +48,7 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo //m_referenceClip = clipa; if (params.isNull()) { - m_parameters = MainWindow::transitions.getEffectByName("Luma"); + m_parameters = MainWindow::transitions.getEffectByName("Luma").cloneNode().toElement(); } else { m_parameters = params; } -- 2.39.2