]> git.sesse.net Git - kdenlive/commitdiff
Use time position instead of frames for clip properties
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 7 Mar 2008 22:21:27 +0000 (22:21 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 7 Mar 2008 22:21:27 +0000 (22:21 +0000)
svn path=/branches/KDE4/; revision=2009

src/addtimelineclipcommand.cpp
src/addtimelineclipcommand.h
src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/customtrackview.h
src/trackview.cpp

index 2401fdf3c78ac692b70f04b8d1fa168bc25bf99a..fdb32bfff2e77faa6fa9a78df87c489784db46ca 100644 (file)
@@ -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"));
index 89ff4340ffa46f0ce2c9e38b1367edce6c277bcb..4e030285bb4875f25f0d1982eb12b05a25e7d7ca 100644 (file)
 
 #include <KDebug>
 
+#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;
index 8f9c346495993ea86c6f67a92f6010eafdc6875f..54f9c9b1a7b9246df9827f885bc58a42f449693b 100644 (file)
 #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 <QGraphicsItem *> 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 <QGraphicsItem *> 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 <QGraphicsItem *> 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
index 2091de5c30b6a3166f07f0355972016d2681cccd..fa49718fa5db15301c115cc695d984be84af1fd5 100644 (file)
@@ -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<int, QPixmap> audioThumbCachePic;
index 069fb7401701f85918c18b406b583c0f4a3a7013..60b642763f41b194f1e1c2b1a53b62e21e64ce76 100644 (file)
@@ -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 = "<<out<<", URL: "<<clip->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: "<<m_tracksCount<<", DROP: "<<m_dropItem->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: "<<m_startPos<<", END: "<<QPoint(m_dragItem->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<QGraphicsItem *> 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);
index e7a703ca2f53a380cacd3e3054ffc9e2efb5ed11..d3f8b618acfcce3e5d89d5f3f83ef6ce37f0376f 100644 (file)
@@ -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;
index 2d5ade5b3e3d83040d374bb45465667d0d4614ee..bbf2c464052a28ad07fd3df16eee1903a1f76ed2 100644 (file)
@@ -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: "<<clip.cropTime<<", out: "<<clip.duration<<", Producer: "<<clip.producer<<"\n\n++++++++++++++++++++";
-            ClipItem *item = new ClipItem(clip, ix, position, QRectF(position * m_scale, trackTop + 1, out * m_scale, 49), out);
+            ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->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;