From ad53da946e4e655f6616d6fe3db5bc6fd4953f2f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 7 Mar 2008 22:21:27 +0000 Subject: [PATCH] Use time position instead of frames for clip properties svn path=/branches/KDE4/; revision=2009 --- src/addtimelineclipcommand.cpp | 2 +- src/addtimelineclipcommand.h | 7 ++- src/clipitem.cpp | 109 +++++++++++++++++++-------------- src/clipitem.h | 25 ++++---- src/customtrackview.cpp | 70 +++++++++++---------- src/customtrackview.h | 5 +- src/trackview.cpp | 2 +- 7 files changed, 122 insertions(+), 98 deletions(-) diff --git a/src/addtimelineclipcommand.cpp b/src/addtimelineclipcommand.cpp index 2401fdf3..fdb32bff 100644 --- a/src/addtimelineclipcommand.cpp +++ b/src/addtimelineclipcommand.cpp @@ -21,7 +21,7 @@ #include "addtimelineclipcommand.h" -AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove) +AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove) : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt), m_remove(doRemove) { if (!m_remove) setText(i18n("Add timeline clip")); else setText(i18n("Delete timeline clip")); diff --git a/src/addtimelineclipcommand.h b/src/addtimelineclipcommand.h index 89ff4340..4e030285 100644 --- a/src/addtimelineclipcommand.h +++ b/src/addtimelineclipcommand.h @@ -27,22 +27,23 @@ #include +#include "gentime.h" #include "projectlist.h" #include "customtrackview.h" class AddTimelineClipCommand : public QUndoCommand { public: - AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove); + AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove); virtual void undo(); virtual void redo(); private: CustomTrackView *m_view; - int m_clipDuration; + GenTime m_clipDuration; int m_clipId; QDomElement m_xml; int m_clipTrack; - int m_clipPos; + GenTime m_clipPos; QRectF m_clipRect; bool m_doIt; bool m_remove; diff --git a/src/clipitem.cpp b/src/clipitem.cpp index 8f9c3464..54f9c9b1 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -38,17 +38,17 @@ #include "events.h" #include "kdenlivesettings.h" -ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration) - : QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0) { +ClipItem::ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps) + : QGraphicsRectItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_startFade(0), m_endFade(0), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_fps(fps), m_hover(false) { //setToolTip(name); - kDebug() << "******* CREATING NEW TML CLIP, DUR: " << duration; + // kDebug() << "******* CREATING NEW TML CLIP, DUR: " << duration; m_xml = clip->toXML(); m_clipName = clip->name(); m_producer = clip->getId(); m_clipType = clip->clipType(); - m_cropStart = 0; + m_cropStart = GenTime(); m_maxDuration = duration; - if (duration != -1) m_cropDuration = duration; + if (duration != GenTime()) m_cropDuration = duration; else m_cropDuration = m_maxDuration; setAcceptDrops(true); audioThumbReady = clip->audioThumbCreated(); @@ -62,6 +62,7 @@ ClipItem::ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & re setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemClipsChildrenToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + setAcceptsHoverEvents(true); connect(this , SIGNAL(prepareAudioThumb(double, QPainterPath, int, int)) , this, SLOT(slotPrepareAudioThumb(double, QPainterPath, int, int))); setBrush(QColor(100, 100, 150)); @@ -98,22 +99,22 @@ ClipItem::~ClipItem() { void ClipItem::slotFetchThumbs() { m_thumbsRequested += 2; - emit getThumb(m_cropStart, m_cropStart + m_cropDuration); + emit getThumb(m_cropStart.frames(m_fps), (m_cropStart + m_cropDuration).frames(m_fps)); } void ClipItem::slotGetStartThumb() { m_thumbsRequested++; - emit getThumb(m_cropStart, -1); + emit getThumb(m_cropStart.frames(m_fps), -1); } void ClipItem::slotGetEndThumb() { m_thumbsRequested++; - emit getThumb(-1, m_cropStart + m_cropDuration); + emit getThumb(-1, (m_cropStart + m_cropDuration).frames(m_fps)); } void ClipItem::slotThumbReady(int frame, QPixmap pix) { if (m_thumbsRequested == 0) return; - if (frame == m_cropStart) m_startPix = pix; + if (frame == m_cropStart.frames(m_fps)) m_startPix = pix; else m_endPix = pix; update(); m_thumbsRequested--; @@ -148,23 +149,23 @@ int ClipItem::clipProducer() { return m_producer; } -int ClipItem::maxDuration() { +GenTime ClipItem::maxDuration() { return m_maxDuration; } -int ClipItem::duration() { +GenTime ClipItem::duration() { return m_cropDuration; } -int ClipItem::startPos() { +GenTime ClipItem::startPos() { return m_startPos; } -int ClipItem::cropStart() { +GenTime ClipItem::cropStart() { return m_cropStart; } -int ClipItem::endPos() { +GenTime ClipItem::endPos() { return m_startPos + m_cropDuration; } @@ -256,7 +257,7 @@ void ClipItem::paint(QPainter *painter, painter->fillPath(path, QBrush(QColor(200, 200, 200, 127))); int channels = 2; - double pixelForOneFrame = (double)br.width() / duration(); + double pixelForOneFrame = (double)br.width() / duration().frames(m_fps); if (pixelForOneFrame != framePixelWidth) audioThumbCachePic.clear(); emit prepareAudioThumb(pixelForOneFrame, path, startpixel, endpixel + 200);//200 more for less missing parts before repaint after scrolling @@ -269,7 +270,7 @@ void ClipItem::paint(QPainter *painter, } // draw start / end fades - double scale = br.width() / m_cropDuration; + double scale = br.width() / m_cropDuration.frames(m_fps); QBrush fades; if (isSelected()) { fades = QBrush(QColor(200, 50, 50, 150)); @@ -349,10 +350,12 @@ void ClipItem::paint(QPainter *painter, //painter->drawText(rect(), Qt::AlignCenter, m_name); // painter->drawRect(boundingRect()); //painter->drawRoundRect(-10, -10, 20, 20); - painter->setPen(QPen(Qt::black)); - painter->setBrush(QBrush(Qt::yellow)); - painter->drawEllipse(br.x() + 10, br.y() + br.height() / 2 - 5 , 10, 10); - painter->drawEllipse(br.x() + br.width() - 20, br.y() + br.height() / 2 - 5, 10, 10); + if (m_hover) { + painter->setPen(QPen(Qt::black)); + painter->setBrush(QBrush(Qt::yellow)); + painter->drawEllipse(br.x() + 10, br.y() + br.height() / 2 - 5 , 10, 10); + painter->drawEllipse(br.x() + br.width() - 20, br.y() + br.height() / 2 - 5, 10, 10); + } } @@ -453,7 +456,7 @@ int ClipItem::fadeOut() const { void ClipItem::setFadeIn(int pos, double scale) { int oldIn = m_startFade; if (pos < 0) pos = 0; - if (pos > m_cropDuration) pos = m_cropDuration / 2; + if (pos > m_cropDuration.frames(m_fps)) pos = m_cropDuration.frames(m_fps) / 2; m_startFade = pos; if (oldIn > pos) update(rect().x(), rect().y(), oldIn * scale, rect().height()); else update(rect().x(), rect().y(), pos * scale, rect().height()); @@ -462,7 +465,7 @@ void ClipItem::setFadeIn(int pos, double scale) { void ClipItem::setFadeOut(int pos, double scale) { int oldOut = m_endFade; if (pos < 0) pos = 0; - if (pos > m_cropDuration) pos = m_cropDuration / 2; + if (pos > m_cropDuration.frames(m_fps)) pos = m_cropDuration.frames(m_fps) / 2; m_endFade = pos; if (oldOut > pos) update(rect().x() + rect().width() - pos * scale, rect().y(), pos * scale, rect().height()); else update(rect().x() + rect().width() - oldOut * scale, rect().y(), oldOut * scale, rect().height()); @@ -486,6 +489,18 @@ void ClipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) { QGraphicsRectItem::mouseReleaseEvent(event); } +//virtual +void ClipItem::hoverEnterEvent(QGraphicsSceneHoverEvent *) { + m_hover = true; + update(); +} + +//virtual +void ClipItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *) { + m_hover = false; + update(); +} + void ClipItem::moveTo(int x, double scale, double offset, int newTrack) { double origX = rect().x(); double origY = rect().y(); @@ -499,14 +514,14 @@ void ClipItem::moveTo(int x, double scale, double offset, int newTrack) { if (item->type() == 70000) { if (offset == 0) { QRectF other = ((QGraphicsRectItem *)item)->rect(); - if (x < m_startPos) { + if (x < m_startPos.frames(m_fps)) { kDebug() << "COLLISION, MOVING TO------"; - m_startPos = ((ClipItem *)item)->endPos() + 1; - origX = m_startPos * scale; + m_startPos = ((ClipItem *)item)->endPos() + GenTime(1, m_fps); + origX = m_startPos.frames(m_fps) * scale; } else { kDebug() << "COLLISION, MOVING TO+++"; m_startPos = ((ClipItem *)item)->startPos() - m_cropDuration; - origX = m_startPos * scale; + origX = m_startPos.frames(m_fps) * scale; } } setRect(origX, origY, rect().width(), rect().height()); @@ -518,7 +533,7 @@ void ClipItem::moveTo(int x, double scale, double offset, int newTrack) { } if (success) { m_track = newTrack; - m_startPos = x; + m_startPos = GenTime(x, m_fps); } /* QList childrenList = QGraphicsItem::children(); for (int i = 0; i < childrenList.size(); ++i) { @@ -527,27 +542,27 @@ void ClipItem::moveTo(int x, double scale, double offset, int newTrack) { } void ClipItem::resizeStart(int posx, double scale) { - int durationDiff = posx - m_startPos; - if (durationDiff == 0) return; - kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; - if (m_cropStart + durationDiff < 0) { - durationDiff = -m_cropStart; + GenTime durationDiff = GenTime(posx, m_fps) - m_startPos; + if (durationDiff == GenTime()) return; + //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; + if (m_cropStart + durationDiff < GenTime()) { + durationDiff = GenTime() - m_cropStart; } else if (durationDiff >= m_cropDuration) { - durationDiff = m_cropDuration - 3; + durationDiff = m_cropDuration - GenTime(3, m_fps); } m_startPos += durationDiff; m_cropStart += durationDiff; - m_cropDuration -= durationDiff; - setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height()); + m_cropDuration = m_cropDuration - durationDiff; + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); for (int i = 0; i < collisionList.size(); ++i) { QGraphicsItem *item = collisionList.at(i); if (item->type() == 70000) { - int diff = ((ClipItem *)item)->endPos() + 1 - m_startPos; - setRect((m_startPos + diff) * scale, rect().y(), (m_cropDuration - diff) * scale, rect().height()); + GenTime diff = ((ClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos; + setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height()); m_startPos += diff; m_cropStart += diff; - m_cropDuration -= diff; + m_cropDuration = m_cropDuration - diff; break; } } @@ -555,23 +570,23 @@ void ClipItem::resizeStart(int posx, double scale) { } void ClipItem::resizeEnd(int posx, double scale) { - int durationDiff = posx - endPos(); - if (durationDiff == 0) return; - kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; - if (m_cropDuration + durationDiff <= 0) { - durationDiff = - (m_cropDuration - 3); + GenTime durationDiff = GenTime(posx, m_fps) - endPos(); + if (durationDiff == GenTime()) return; + //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff; + if (m_cropDuration + durationDiff <= GenTime()) { + durationDiff = GenTime() - (m_cropDuration - GenTime(3, m_fps)); } else if (m_cropDuration + durationDiff >= m_maxDuration) { durationDiff = m_maxDuration - m_cropDuration; } m_cropDuration += durationDiff; - setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height()); + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); QList collisionList = collidingItems(Qt::IntersectsItemBoundingRect); for (int i = 0; i < collisionList.size(); ++i) { QGraphicsItem *item = collisionList.at(i); if (item->type() == 70000) { - int diff = ((ClipItem *)item)->startPos() - 1 - startPos(); + GenTime diff = ((ClipItem *)item)->startPos() - GenTime(1, m_fps) - startPos(); m_cropDuration = diff; - setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height()); + setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height()); break; } } @@ -686,7 +701,7 @@ void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) { doc.setContent(effects, true); QDomElement e = doc.documentElement(); CustomTrackView *view = (CustomTrackView *) scene()->views()[0]; - if (view) view->slotAddEffect(e, GenTime(m_startPos, 25), m_track); + if (view) view->slotAddEffect(e, m_startPos, m_track); } //virtual diff --git a/src/clipitem.h b/src/clipitem.h index 2091de5c..fa49718f 100644 --- a/src/clipitem.h +++ b/src/clipitem.h @@ -37,7 +37,7 @@ class ClipItem : public QObject, public QGraphicsRectItem { Q_OBJECT public: - ClipItem(DocClipBase *clip, int track, int startpos, const QRectF & rect, int duration); + ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps); virtual ~ ClipItem(); virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, @@ -51,13 +51,13 @@ public: int clipType(); DocClipBase *baseClip(); QString clipName(); - int maxDuration(); + GenTime maxDuration(); int track(); void setTrack(int track); - int startPos(); - int cropStart(); - int endPos(); - int duration(); + GenTime startPos(); + GenTime cropStart(); + GenTime endPos(); + GenTime duration(); QDomElement xml() const; int fadeIn() const; int fadeOut() const; @@ -88,22 +88,23 @@ protected: virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *); private: QDomElement m_xml; DocClipBase *m_clip; - int m_textWidth; OPERATIONTYPE m_resizeMode; int m_grabPoint; int m_producer; CLIPTYPE m_clipType; QString m_clipName; - int m_maxDuration; - int m_cropStart; - int m_cropDuration; + GenTime m_maxDuration; + GenTime m_cropStart; + GenTime m_cropDuration; int m_maxTrack; int m_track; - int m_startPos; + GenTime m_startPos; QPixmap m_startPix; QPixmap m_endPix; bool m_hasThumbs; @@ -116,6 +117,8 @@ private: double m_opacity; QTimeLine *m_timeLine; uint m_thumbsRequested; + double m_fps; + bool m_hover; EffectsList m_effectList; QMap audioThumbCachePic; diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 069fb740..60b64276 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -115,10 +115,10 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event) { m_dragItem->resizeEnd(pos / m_scale, m_scale); } else if (m_operationMode == FADEIN) { int pos = mapToScene(event->pos()).x() / m_scale; - m_dragItem->setFadeIn(pos - m_dragItem->startPos(), m_scale); + m_dragItem->setFadeIn(pos - m_dragItem->startPos().frames(m_document->fps()), m_scale); } else if (m_operationMode == FADEOUT) { int pos = mapToScene(event->pos()).x() / m_scale; - m_dragItem->setFadeOut(m_dragItem->endPos() - pos, m_scale); + m_dragItem->setFadeOut(m_dragItem->endPos().frames(m_document->fps()) - pos, m_scale); } if (m_animation) delete m_animation; @@ -334,12 +334,12 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) { } m_dragItem = (ClipItem *) item; emit clipItemSelected(m_dragItem); - m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale; + m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps()) * m_scale; m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale); if (m_operationMode == MOVE || m_operationMode == RESIZESTART) - m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track()); + m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()); else if (m_operationMode == RESIZEEND) - m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track()); + m_startPos = QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()); kDebug() << "//////// ITEM CLICKED: " << m_startPos; collision = true; break; @@ -377,7 +377,7 @@ void CustomTrackView::dragEnterEvent(QDragEnterEvent * event) { void CustomTrackView::slotRefreshEffects(ClipItem *clip) { int track = m_tracksCount - clip->track(); - GenTime pos = GenTime(clip->startPos(), m_document->fps()); + GenTime pos = clip->startPos(); m_document->renderer()->mltRemoveEffect(track, pos, "-1", false); for (int i = 0; i < clip->effectsCount(); i++) { m_document->renderer()->mltAddEffect(track, pos, clip->getEffectArgs(clip->effectAt(i)), false); @@ -421,14 +421,14 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track) // not be changed if (effect.attribute("kdenlive_ix").toInt() == 0) effect.setAttribute("kdenlive_ix", QString::number(item->effectsCounter())); - AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(), GenTime(item->startPos(), m_document->fps()), effect, true); + AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(), item->startPos(), effect, true); m_commandStack->push(command); } } } void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect) { - AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effect, false); + AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), effect, false); m_commandStack->push(command); } @@ -439,29 +439,29 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement effect) { if (effectParams["disabled"] == "1") { QString index = effectParams["kdenlive_ix"]; m_document->renderer()->mltRemoveEffect(track, pos, index); - } else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effectParams); + } else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), clip->startPos(), effectParams); } } void CustomTrackView::slotChangeEffectState(ClipItem *clip, QDomElement effect, bool disable) { QDomElement oldEffect = effect.cloneNode().toElement(); effect.setAttribute("disabled", disable); - EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), oldEffect, effect, true); + EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldEffect, effect, true); m_commandStack->push(command); } void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect) { - EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), oldeffect, effect, true); + EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldeffect, effect, true); m_commandStack->push(command); } void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) { int in = 0; - int out = clip->duration().frames(m_document->fps()); + GenTime out = clip->duration(); //kdDebug()<<"- - - -CREATING CLIP, duration = "<fileURL(); int trackTop = ((int) mapToScene(pos).y() / 50) * 50 + 1; - m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / 50), in, QRectF(mapToScene(pos).x() * m_scale, trackTop, out * m_scale, 49), out); + m_dropItem = new ClipItem(clip, ((int) mapToScene(pos).y() / 50), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, 49), out, m_document->fps()); scene()->addItem(m_dropItem); } @@ -495,7 +495,7 @@ void CustomTrackView::dropEvent(QDropEvent * event) { m_dropItem->baseClip()->addReference(); m_document->updateClip(m_dropItem->baseClip()->getId()); // kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<track(); - m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), GenTime(m_dropItem->startPos(), m_document->fps()), m_dropItem->xml()); + m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), m_dropItem->startPos(), m_dropItem->xml()); } else QGraphicsView::dropEvent(event); m_dropItem = NULL; } @@ -574,23 +574,23 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) { setDragMode(QGraphicsView::NoDrag); if (m_dragItem == NULL) return; //kDebug()<<"/// MOVING CLIP: "<rect().x(),m_dragItem->rect().y()); - if (m_operationMode == MOVE && m_startPos.x() != m_dragItem->startPos()) { + if (m_operationMode == MOVE && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) { // move clip - MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), false); + MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false); m_commandStack->push(command); - m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos()); + m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos().frames(m_document->fps())); } else if (m_operationMode == RESIZESTART) { // resize start - ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), true, false); + ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false); - m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->endPos(), m_document->fps()), GenTime(m_dragItem->startPos(), m_document->fps()), GenTime(m_startPos.x(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()) + GenTime(m_dragItem->endPos(), m_document->fps()) - GenTime(m_dragItem->startPos(), m_document->fps())); + m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime(m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos()); m_commandStack->push(command); m_document->renderer()->doRefresh(); } else if (m_operationMode == RESIZEEND) { // resize end - ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos(), m_dragItem->track()), false, false); + ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()), false, false); - m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->startPos(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()), GenTime(m_dragItem->cropStart(), m_document->fps()) + GenTime(m_dragItem->endPos(), m_document->fps()) - GenTime(m_dragItem->startPos(), m_document->fps())); + m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos()); m_commandStack->push(command); m_document->renderer()->doRefresh(); } @@ -598,7 +598,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) { m_dragItem = NULL; } -void CustomTrackView::deleteClip(int track, int startpos, const QRectF &rect) { +void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect) { ClipItem *item = getClipItemAt(startpos, track); if (!item) { kDebug() << "----------------  ERROR, CANNOT find clip to move at: " << rect.x(); @@ -607,18 +607,18 @@ void CustomTrackView::deleteClip(int track, int startpos, const QRectF &rect) { item->baseClip()->removeReference(); m_document->updateClip(item->baseClip()->getId()); delete item; - m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, m_document->fps())); + m_document->renderer()->mltRemoveClip(m_tracksCount - track, startpos); m_document->renderer()->doRefresh(); } -void CustomTrackView::addClip(QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration) { - QRect r(startpos * m_scale, 50 * track, duration * m_scale, 49); +void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) { + QRect r(startpos.frames(m_document->fps()) * m_scale, 50 * track, duration.frames(m_document->fps()) * m_scale, 49); DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId); - ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration); + ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration, m_document->fps()); scene()->addItem(item); baseclip->addReference(); m_document->updateClip(baseclip->getId()); - m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, m_document->fps()), xml); + m_document->renderer()->mltInsertClip(m_tracksCount - track, startpos, xml); m_document->renderer()->doRefresh(); } @@ -626,6 +626,10 @@ ClipItem *CustomTrackView::getClipItemAt(int pos, int track) { return (ClipItem *) scene()->itemAt(pos * m_scale, track * 50 + 25); } +ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) { + return (ClipItem *) scene()->itemAt(pos.frames(m_document->fps()) * m_scale, track * 50 + 25); +} + void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) { ClipItem *item = getClipItemAt(startPos.x() + 1, startPos.y()); if (!item) { @@ -648,10 +652,10 @@ void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos, } qreal diff = endPos.x() - startPos.x(); if (resizeClipStart) { - m_document->renderer()->mltResizeClipStart(m_tracksCount - item->track(), GenTime(item->endPos(), m_document->fps()), GenTime(endPos.x(), m_document->fps()), GenTime(item->startPos(), m_document->fps()), GenTime(item->cropStart() + diff, m_document->fps()), GenTime(item->cropStart() + diff, m_document->fps()) + GenTime(item->endPos(), m_document->fps()) - GenTime(endPos.x(), m_document->fps())); + m_document->renderer()->mltResizeClipStart(m_tracksCount - item->track(), item->endPos(), GenTime(endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime(diff, m_document->fps()), item->cropStart() + GenTime(diff, m_document->fps()) + item->endPos() - GenTime(endPos.x(), m_document->fps())); item->resizeStart(endPos.x(), m_scale); } else { - m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), GenTime(item->startPos(), m_document->fps()), GenTime(item->cropStart(), m_document->fps()), GenTime(item->cropStart(), m_document->fps()) + GenTime(endPos.x(), m_document->fps()) - GenTime(item->startPos(), m_document->fps())); + m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime(endPos.x(), m_document->fps()) - item->startPos()); item->resizeEnd(endPos.x(), m_scale); } m_document->renderer()->doRefresh(); @@ -672,14 +676,14 @@ double CustomTrackView::getSnapPointForPos(double pos) { void CustomTrackView::updateSnapPoints(ClipItem *selected) { m_snapPoints.clear(); int offset = 0; - if (selected) offset = selected->duration(); + if (selected) offset = selected->duration().frames(m_document->fps()); QList itemList = items(); for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == 70000 && itemList.at(i) != selected) { ClipItem *item = (ClipItem *)itemList.at(i); - int start = item->startPos(); + int start = item->startPos().frames(m_document->fps()); int fadein = item->fadeIn() + start; - int end = item->endPos(); + int end = item->endPos().frames(m_document->fps()); int fadeout = end - item->fadeOut(); m_snapPoints.append(start); if (fadein != start) m_snapPoints.append(fadein); @@ -710,7 +714,7 @@ void CustomTrackView::setScale(double scaleFactor) { for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == 70000) { ClipItem *clip = (ClipItem *)itemList.at(i); - clip->setRect(clip->startPos() * m_scale, clip->rect().y(), clip->duration() * m_scale, clip->rect().height()); + clip->setRect(clip->startPos().frames(m_document->fps()) * m_scale, clip->rect().y(), clip->duration().frames(m_document->fps()) * m_scale, clip->rect().height()); } /*else if (itemList.at(i)->type() == 70001) { LabelItem *label = (LabelItem *)itemList.at(i); diff --git a/src/customtrackview.h b/src/customtrackview.h index e7a703ca..d3f8b618 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -44,8 +44,8 @@ public: void checkAutoScroll(); void moveClip(const QPointF &startPos, const QPointF &endPos); void resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart); - void addClip(QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration); - void deleteClip(int track, int startpos, const QRectF &rect); + void addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration); + void deleteClip(int track, GenTime startpos, const QRectF &rect); void setScale(double scaleFactor); void deleteClip(int clipId); void slotAddEffect(QDomElement effect, GenTime pos, int track); @@ -97,6 +97,7 @@ private: void updateSnapPoints(ClipItem *selected); double getSnapPointForPos(double pos); ClipItem *getClipItemAt(int pos, int track); + ClipItem *getClipItemAt(GenTime pos, int track); void checkScrolling(); /** Should we auto scroll while playing (keep in sync with KdenliveSettings::autoscroll() */ bool m_autoScroll; diff --git a/src/trackview.cpp b/src/trackview.cpp index 2d5ade5b..bbf2c464 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -185,7 +185,7 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) { DocClipBase *clip = m_doc->clipManager()->getClipById(id); int out = elem.attribute("out", 0).toInt() - in; //kDebug()<<"++++++++++++++\n\n / / /ADDING CLIP: "<fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), GenTime(out, m_doc->fps()), m_doc->fps()); m_scene->addItem(item); position += out; -- 2.39.2