]> git.sesse.net Git - kdenlive/commitdiff
rewrote move and resize clip, video thumbs now update correctly
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 26 Jan 2008 09:45:02 +0000 (09:45 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 26 Jan 2008 09:45:02 +0000 (09:45 +0000)
svn path=/branches/KDE4/; revision=1821

src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/kthumb.cpp

index a3764ee60d57e198f83f4ca2c4a50a2f6b4a8ab5..e901c8f225a066efc6b2f966cf73292d6d637944 100644 (file)
@@ -34,7 +34,7 @@
 #include "kdenlivesettings.h"
 
 ClipItem::ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect, int duration)
-    : QGraphicsRectItem(rect), m_xml(xml), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_thumbProd(NULL)
+    : QGraphicsRectItem(rect), m_xml(xml), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_track(track), m_startPos(startpos), m_thumbProd(NULL), startThumbTimer(NULL), endThumbTimer(NULL)
 {
   //setToolTip(name);
 
@@ -52,18 +52,22 @@ ClipItem::ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect
   if (duration != -1) m_cropDuration = duration;
   else m_cropDuration = m_maxDuration;
 
-  //setCursor(Qt::SizeHorCursor);
   setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemClipsChildrenToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
-  m_label = new LabelItem( m_clipName, this);
-  QRectF textRect = m_label->boundingRect();
-  m_textWidth = textRect.width();
-  m_label->setPos(rect.x() + rect.width()/2 - m_textWidth/2, rect.y() + rect.height() / 2 - textRect.height()/2);
+
   setBrush(QColor(100, 100, 150));
   if (m_clipType == VIDEO || m_clipType == AV) {
     m_thumbProd = new KThumb(KUrl(xml.attribute("resource")));
     connect(this, SIGNAL(getThumb(int, int, int, int)), m_thumbProd, SLOT(extractImage(int, int, int, int)));
     connect(m_thumbProd, SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));
-    QTimer::singleShot(300, this, SLOT(slotFetchThumbs())); 
+    QTimer::singleShot(300, this, SLOT(slotFetchThumbs()));
+
+    startThumbTimer = new QTimer(this);
+    startThumbTimer->setSingleShot(true);
+    connect(startThumbTimer, SIGNAL(timeout()), this, SLOT(slotGetStartThumb()));
+    endThumbTimer = new QTimer(this);
+    endThumbTimer->setSingleShot(true);
+    connect(endThumbTimer, SIGNAL(timeout()), this, SLOT(slotGetEndThumb()));
+
   }
   else if (m_clipType == COLOR) {
     QString colour = xml.attribute("colour");
@@ -73,11 +77,28 @@ ClipItem::ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect
   //m_startPix.load("/home/one/Desktop/thumb.jpg");
 }
 
+ClipItem::~ClipItem()
+{
+  if (startThumbTimer) delete startThumbTimer;
+  if (endThumbTimer) delete endThumbTimer;
+  if (m_thumbProd) delete m_thumbProd;
+}
+
 void ClipItem::slotFetchThumbs()
 {
   emit getThumb(m_cropStart, m_cropStart + m_cropDuration, 50 * KdenliveSettings::project_display_ratio(), 50);
 }
 
+void ClipItem::slotGetStartThumb()
+{
+  emit getThumb(m_cropStart, -1, 50 * KdenliveSettings::project_display_ratio(), 50);
+}
+
+void ClipItem::slotGetEndThumb()
+{
+  emit getThumb(-1, m_cropStart + m_cropDuration, 50 * KdenliveSettings::project_display_ratio(), 50);
+}
+
 void ClipItem::slotThumbReady(int frame, QPixmap pix)
 {
   if (frame == m_cropStart) m_startPix = pix;
@@ -125,6 +146,11 @@ int ClipItem::startPos()
   return m_startPos;
 }
 
+int ClipItem::endPos()
+{
+  return m_startPos + m_cropDuration;
+}
+
 // virtual 
  void ClipItem::paint(QPainter *painter,
                            const QStyleOptionGraphicsItem *option,
@@ -165,6 +191,11 @@ int ClipItem::startPos()
     QPen pen = painter->pen();
     pen.setColor(Qt::red);
     pen.setStyle(Qt::DashDotDotLine); //Qt::DotLine);
+    
+    QRectF txtBounding = painter->boundingRect(br, Qt::AlignCenter, " " + m_clipName + " ");
+    painter->fillRect(txtBounding, QBrush(QColor(255,255,255,150)));
+    painter->drawText(txtBounding, Qt::AlignCenter, m_clipName);
+
     if (isSelected()) painter->setPen(pen);
     painter->drawPath(roundRectPath);
     //painter->fillRect(QRect(br.x(), br.y(), roundingX, roundingY), QBrush(QColor(Qt::green)));
@@ -220,12 +251,12 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos)
     QGraphicsRectItem::mouseReleaseEvent(event);
  }
 
- void ClipItem::moveTo(double x, double scale, double offset, int newTrack)
+ void ClipItem::moveTo(int x, double scale, double offset, int newTrack)
  {
   double origX = rect().x();
   double origY = rect().y();
   bool success = true;
-  setRect(x, origY + offset, rect().width(), rect().height());
+  setRect(x * scale, origY + offset, rect().width(), rect().height());
   QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
   if (collisionList.size() == 0) m_track = newTrack;
   for (int i = 0; i < collisionList.size(); ++i) {
@@ -235,13 +266,15 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos)
        if (offset == 0)
        {
          QRectF other = ((QGraphicsRectItem *)item)->rect();
-         if (x < origX) {
+         if (x < m_startPos) {
            kDebug()<<"COLLISION, MOVING TO------";
-           origX = other.x() + other.width(); 
+           m_startPos = ((ClipItem *)item)->endPos() + 1;
+           origX = m_startPos * scale; 
          }
-         else if (x > origX) {
+         else {
            kDebug()<<"COLLISION, MOVING TO+++";
-           origX = other.x() - rect().width(); 
+           m_startPos = ((ClipItem *)item)->startPos() - m_cropDuration;
+           origX = m_startPos * scale; 
          }
        }
        setRect(origX, origY, rect().width(), rect().height());
@@ -253,81 +286,75 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos)
     }
     if (success) {
        m_track = newTrack;
-       m_startPos = x / scale;
+       m_startPos = x;
     }
-    QList <QGraphicsItem *> childrenList = QGraphicsItem::children();
+/*    QList <QGraphicsItem *> childrenList = QGraphicsItem::children();
     for (int i = 0; i < childrenList.size(); ++i) {
       childrenList.at(i)->moveBy(rect().x() - origX , offset);
-    }
+    }*/
  }
 
-// virtual
- void ClipItem::mouseMoveEvent ( QGraphicsSceneMouseEvent * event ) 
- {
-    double moveX = (int) event->scenePos().x();
-    double originalX = rect().x();
-    double originalWidth = rect().width();
-    if (m_resizeMode == RESIZESTART) {
-      if (m_cropStart - (originalX - moveX) < 0) moveX = originalX - m_cropStart;
-      if (originalX + rect().width() - moveX < 1) moveX = originalX + rect().width() + 2;
-      m_cropStart -= originalX - moveX;
-      kDebug()<<"MOVE CLIP START TO: "<<event->scenePos()<<", CROP: "<<m_cropStart;
-      setRect(moveX, rect().y(), originalX + rect().width() - moveX, 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)
-         {
-           QRectF other = ((QGraphicsRectItem *)item)->rect();
-           int newStart = other.x() + other.width();
-           setRect(newStart, rect().y(), rect().x() + rect().width() - newStart, rect().height());
-           moveX = newStart;
-           break;
-         }
-      }
-      QList <QGraphicsItem *> childrenList = QGraphicsItem::children();
-      for (int i = 0; i < childrenList.size(); ++i) {
-       childrenList.at(i)->moveBy((moveX - originalX) / 2 , 0);
-      }
-      return;
+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;
     }
-    if (m_resizeMode == RESIZEEND) {
-      int newWidth = moveX - originalX;
-      if (newWidth < 1) newWidth = 2;
-      if (newWidth > m_maxDuration) newWidth = m_maxDuration;
-      setRect(originalX, rect().y(), newWidth, 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)
-         {
-           QRectF other = ((QGraphicsRectItem *)item)->rect();
-           newWidth = other.x() - rect().x();
-           setRect(rect().x(), rect().y(), newWidth, rect().height());
-           break;
-         }
+    else if (durationDiff >= m_cropDuration) {
+      durationDiff = m_cropDuration - 3;
+    }
+    m_startPos += durationDiff;
+    m_cropStart += durationDiff;
+    m_cropDuration -= durationDiff;
+    setRect(m_startPos * scale, rect().y(), m_cropDuration * 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());
+       m_startPos += diff;
+       m_cropStart += diff;
+       m_cropDuration -= diff;
+       break;
       }
+    }
+    if (m_thumbProd) startThumbTimer->start(100);
+}
 
-      QList <QGraphicsItem *> childrenList = QGraphicsItem::children();
-      for (int i = 0; i < childrenList.size(); ++i) {
-       childrenList.at(i)->moveBy((newWidth - originalWidth) / 2 , 0);
-      }
-      return;
+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);
     }
-    /*if (m_resizeMode == MOVE) {
-      kDebug()<<"///////  MOVE CLIP, EVENT Y: "<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
-      int moveTrack = (int) event->scenePos().y() / 50;
-      int currentTrack = (int) rect().y() / 50;
-      int offset = moveTrack - currentTrack;
-      if (event->scenePos().y() >= m_maxTrack || event->scenePos().y() < 0) {
-       offset = 0;
-       kDebug()<<"%%%%%%%%%%%%%%%%%%%%%%%   MAX HEIGHT OVERLOOK";
+    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());
+    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();
+       m_cropDuration = diff;
+       setRect(m_startPos * scale, rect().y(), m_cropDuration * scale, rect().height());
+       break;
       }
-      if (offset != 0) offset = 50 * offset;
-      moveTo(moveX - m_grabPoint, offset);
-    }*/
+    }
+    if (m_thumbProd) endThumbTimer->start(100);
+}
+
+// virtual
+ void ClipItem::mouseMoveEvent ( QGraphicsSceneMouseEvent * event ) 
+ {
  }
 
 int ClipItem::track()
index f8c4740f8fb0a884cbe048d5c331debe55df2b28..ce44a7eec275b606c65061a5988d72b830824fce 100644 (file)
@@ -25,7 +25,6 @@
 #include <QDomElement>
 #include <QGraphicsSceneMouseEvent>
 
-#include "labelitem.h"
 #include "definitions.h"
 #include "kthumb.h"
 
@@ -36,11 +35,14 @@ class ClipItem : public QObject, public QGraphicsRectItem
 
   public:
     ClipItem(QDomElement xml, int track, int startpos, const QRectF & rect, int duration = -1);
+    virtual ~ ClipItem();
     virtual void paint(QPainter *painter,
                            const QStyleOptionGraphicsItem *option,
                            QWidget *widget);
     virtual int type () const;
-    void moveTo(double x, double scale, double offset, int newTrack);
+    void moveTo(int x, double scale, double offset, int newTrack);
+    void resizeStart(int posx, double scale);
+    void resizeEnd(int posx, double scale);
     OPERATIONTYPE operationMode(QPointF pos);
     int clipProducer();
     int clipType();
@@ -49,6 +51,7 @@ class ClipItem : public QObject, public QGraphicsRectItem
     int track();
     void setTrack(int track);
     int startPos();
+    int endPos();
     int duration();
     QDomElement xml() const;
 
@@ -59,7 +62,6 @@ class ClipItem : public QObject, public QGraphicsRectItem
 
   private:
     QDomElement m_xml;
-    LabelItem *m_label;
     int m_textWidth;
     OPERATIONTYPE m_resizeMode;
     int m_grabPoint;
@@ -75,10 +77,14 @@ class ClipItem : public QObject, public QGraphicsRectItem
     QPixmap m_startPix;
     QPixmap m_endPix;
     KThumb *m_thumbProd;
+    QTimer *startThumbTimer;
+    QTimer *endThumbTimer;
 
   private slots:
     void slotThumbReady(int frame, QPixmap pix);
     void slotFetchThumbs();
+    void slotGetStartThumb();
+    void slotGetEndThumb();
 
   signals:
     void getThumb(int, int, int, int);
index b386c73a78a25a469407db5781a6f2b97d94fbd9..94ae3628851d01754a51489e6e65356e547118c1 100644 (file)
@@ -90,20 +90,27 @@ void CustomTrackView::mouseMoveEvent ( QMouseEvent * event )
       if (m_dragItem) { //event->button() == Qt::LeftButton) {
        // a button was pressed, delete visual tips
 
-if (m_operationMode == MOVE) {
-      int moveX = mapToScene(event->pos()).x();
-      //kDebug()<<"///////  MOVE CLIP, EVENT Y: "<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
-      int moveTrack = (int)  mapToScene(event->pos()).y() / 50;
-      int currentTrack = m_dragItem->track();
-
-      if (moveTrack > m_tracksCount - 1) moveTrack = m_tracksCount - 1;
-      else if (moveTrack < 0) moveTrack = 0;
-
-      int offset = moveTrack - currentTrack;
-      if (offset != 0) offset = 50 * offset;
-      m_dragItem->moveTo(moveX - m_clickPoint, m_scale, offset, moveTrack);
-  }
-
+       if (m_operationMode == MOVE) {
+         int moveX = mapToScene(event->pos()).x();
+         //kDebug()<<"///////  MOVE CLIP, EVENT Y: "<<event->scenePos().y()<<", SCENE HEIGHT: "<<scene()->sceneRect().height();
+         int moveTrack = (int)  mapToScene(event->pos()).y() / 50;
+         int currentTrack = m_dragItem->track();
+
+         if (moveTrack > m_tracksCount - 1) moveTrack = m_tracksCount - 1;
+         else if (moveTrack < 0) moveTrack = 0;
+
+         int offset = moveTrack - currentTrack;
+         if (offset != 0) offset = 50 * offset;
+         m_dragItem->moveTo((moveX - m_clickPoint) / m_scale, m_scale, offset, moveTrack);
+       }
+       else if (m_operationMode == RESIZESTART) {
+         int pos = mapToScene(event->pos()).x();
+         m_dragItem->resizeStart(pos / m_scale, m_scale);
+       }
+       else if (m_operationMode == RESIZEEND) {
+         int pos = mapToScene(event->pos()).x();
+         m_dragItem->resizeEnd(pos / m_scale, m_scale);
+       }
        if (m_animation) delete m_animation;
        m_animation = NULL;
        if (m_visualTip) delete m_visualTip;
@@ -250,29 +257,22 @@ void CustomTrackView::mousePressEvent ( QMouseEvent * event )
   else if (event->modifiers() == Qt::ShiftModifier) 
     setDragMode(QGraphicsView::RubberBandDrag);
   else {
-    QGraphicsItem * item = itemAt(event->pos());
-    if (item && item->type() != 70000) item = item->parentItem();
-    if (item && item->type() == 70000) {
-      m_dragItem = (ClipItem *) item;
-      m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale;
-      m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())));
-      if (m_operationMode == MOVE || m_operationMode == RESIZESTART) m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track());
-      else if (m_operationMode == RESIZEEND) m_startPos = QPointF(m_dragItem->startPos() + m_dragItem->duration(), m_dragItem->track());
-
-     kDebug()<<"//////// ITEM CLICKED: "<<m_startPos;
-      /*while (item->parentItem()) 
-       item = item->parentItem();
-
-       int cursorPos = event->x();
-       QRectF itemRect = item->sceneBoundingRect();
-       int itemStart = mapFromScene(itemRect.x(), 0).x();
-       int itemEnd = mapFromScene(itemRect.x() + itemRect.width(), 0).x();
-       if (abs(itemStart - cursorPos) < 6)
-         ((ClipItem *) item )->setResizeMode(1);
-       else if (abs(itemEnd - cursorPos) < 6)
-         ((ClipItem *) item )->setResizeMode(2);
-    */}
-    else {
+    bool collision = false;
+    QList<QGraphicsItem *> collisionList = items(event->pos());
+    for (int i = 0; i < collisionList.size(); ++i) {
+      QGraphicsItem *item = collisionList.at(i);
+      if (item->type() == 70000) {
+       m_dragItem = (ClipItem *) item;
+       m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale;
+       m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())));
+       if (m_operationMode == MOVE || m_operationMode == RESIZESTART) m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track());
+       else if (m_operationMode == RESIZEEND) m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track());
+       kDebug()<<"//////// ITEM CLICKED: "<<m_startPos;
+       collision = true;
+       break;
+      }
+    }
+    if (!collision) {
       kDebug()<<"//////// NO ITEM FOUND ON CLICK";
       m_dragItem = NULL;
       setCursor(Qt::ArrowCursor);
@@ -314,7 +314,7 @@ void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) {
   if (m_dropItem) {
     int track = (int) mapToScene(event->pos()).y()/50; //) * (m_scale * 50) + m_scale;
      kDebug()<<"+++++++++++++   DRAG MOVE, : "<<mapToScene(event->pos()).x()<<", SCAL: "<<m_scale;
-    m_dropItem->moveTo(mapToScene(event->pos()).x(), m_scale, (track - m_dropItem->track()) * 50, track);
+    m_dropItem->moveTo(mapToScene(event->pos()).x() / m_scale, m_scale, (track - m_dropItem->track()) * 50, track);
   }
        //if (item) {
   event->setDropAction(Qt::MoveAction);
@@ -401,12 +401,12 @@ void CustomTrackView::mouseReleaseEvent ( QMouseEvent * event )
   }
   else if (m_operationMode == RESIZESTART) {
     // resize start
-    ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->rect().x(), m_dragItem->rect().y()), true, false);
+    ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), true, false);
     m_commandStack->push(command);
   }
   else if (m_operationMode == RESIZEEND) {
     // resize end
-    ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->rect().x() + m_dragItem->rect().width(), m_dragItem->rect().y()), false, false);
+    ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos(), m_dragItem->track()), false, false);
     m_commandStack->push(command);
   }
   m_dragItem = NULL; 
@@ -437,12 +437,7 @@ void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos
     return;
   }
   kDebug()<<"----------------  Move CLIP FROM: "<<startPos.x()<<", END:"<<endPos.x();
-  //item->setRect(QRectF(endPos.x() * m_scale, endPos.y() * 50, item->rect().width(), item->rect().height()));
-  item->moveTo(endPos.x() * m_scale, m_scale, (endPos.y() - startPos.y()) * 50, endPos.y());
-  /*QList <QGraphicsItem *> childrenList = item->children();
-  for (int i = 0; i < childrenList.size(); ++i) {
-    childrenList.at(i)->moveBy((endPos.x() - startPos.x()) * m_scale , (endPos.y() - startPos.y()) * 50);
-  }*/
+  item->moveTo(endPos.x(), m_scale, (endPos.y() - startPos.y()) * 50, endPos.y());
 }
 
 void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart )
@@ -450,26 +445,17 @@ void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPo
   int offset;
   if (resizeClipStart) offset = 1;
   else offset = -1;
-  ClipItem *item = (ClipItem *) scene()->itemAt(startPos.x() + offset, startPos.y() + 1);
+  ClipItem *item = (ClipItem *) scene()->itemAt((startPos.x() + offset) * m_scale, startPos.y() * 50 + 25);
   if (!item) {
     kDebug()<<"----------------  ERROR, CANNOT find clip to resize at: "<<startPos;
     return;
   }
   qreal diff = endPos.x() - startPos.x();
   if (resizeClipStart) {
-    item->setRect(QRectF(endPos.x(), endPos.y(), item->rect().width() - diff, item->rect().height()));
-    QList <QGraphicsItem *> childrenList = item->QGraphicsItem::children();
-    for (int i = 0; i < childrenList.size(); ++i) {
-      childrenList.at(i)->moveBy(diff / 2 , endPos.y() - startPos.y());
-    }
+    item->resizeStart(endPos.x(), m_scale);
   }
   else {
-    //kdDebug()<<"///////  RESIZE CLIP END: "<<item->rect().x()<<", "<<item->rect().width()<<", "<<startPos<<", "<<endPos;
-    item->setRect(QRectF(item->rect().x(), item->rect().y(), endPos.x() - item->rect().x(), item->rect().height()));
-    QList <QGraphicsItem *> childrenList = item->QGraphicsItem::children();
-    for (int i = 0; i < childrenList.size(); ++i) {
-      childrenList.at(i)->moveBy(-diff/2, endPos.y() - startPos.y());
-    }
+    item->resizeEnd(endPos.x(), m_scale);
   }
 }
 
@@ -486,14 +472,14 @@ void CustomTrackView::setScale(double scaleFactor)
        ClipItem *clip = (ClipItem *)itemList.at(i);
        clip->setRect(clip->startPos() * m_scale, clip->rect().y(), clip->duration() * m_scale, clip->rect().height());
       }
-      else if (itemList.at(i)->type() == 70001) {
+      /*else if (itemList.at(i)->type() == 70001) {
        LabelItem *label = (LabelItem *)itemList.at(i);
        QGraphicsItem *parent = label->parentItem();
        QRectF r = label->boundingRect();
        QRectF p = parent->boundingRect();
        label->setPos(p.x() + p.width() / 2 - r.width() / 2, p.y() + p.height() / 2 - r.height() / 2);
        //label->setRect(clip->startPos() * m_scale, clip->rect().y(), clip->duration() * m_scale, clip->rect().height());
-      }
+      }*/
     }
 }
 
index 703007187b450c722b7a3283f11aca56ac511c65..b3a3cb0f7e3a0bf32c20e1b40bae3e7761a5b265 100644 (file)
@@ -153,33 +153,31 @@ void KThumb::extractImage(int frame, int frame2, int width, int height)
        emit thumbReady(frame, pix);
        return;
     }
-
+    Mlt::Frame * m_frame;
     mlt_image_format format = mlt_image_rgb24a;
     Mlt::Filter m_convert("avcolour_space");
     m_convert.set("forced", mlt_image_rgb24a);
     m_producer.attach(m_convert);
-    m_producer.seek(frame);
-    Mlt::Frame * m_frame = m_producer.get_frame();
-
-    if (m_frame && m_frame->is_valid()) {
-      uint8_t *thumb = m_frame->get_image(format, width, height);
-      QImage image(thumb, width, height, QImage::Format_ARGB32);
-  
-      if (!image.isNull()) {
-       pix = pix.fromImage(image);
+    if (frame != -1) {
+      m_producer.seek(frame);
+      m_frame = m_producer.get_frame();
+      if (m_frame && m_frame->is_valid()) {
+       uint8_t *thumb = m_frame->get_image(format, width, height);
+       QImage image(thumb, width, height, QImage::Format_ARGB32);
+       if (!image.isNull()) {
+         pix = pix.fromImage(image);
+       }
+       else pix.fill(Qt::black);
       }
-      else pix.fill(Qt::black);
+      if (m_frame) delete m_frame;
+      emit thumbReady(frame, pix);
     }
-    if (m_frame) delete m_frame;
-    emit thumbReady(frame, pix);
-
     if (frame2 == -1) return;
     m_producer.seek(frame2);
     m_frame = m_producer.get_frame();
     if (m_frame && m_frame->is_valid()) {
       uint8_t *thumb = m_frame->get_image(format, width, height);
       QImage image(thumb, width, height, QImage::Format_ARGB32);
-  
       if (!image.isNull()) {
        pix = pix.fromImage(image);
       }