]> git.sesse.net Git - kdenlive/commitdiff
animate clip deletion (Qt 4.3)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 27 Oct 2009 15:28:42 +0000 (15:28 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 27 Oct 2009 15:28:42 +0000 (15:28 +0000)
svn path=/trunk/kdenlive/; revision=4069

src/abstractclipitem.cpp
src/abstractclipitem.h
src/clipitem.cpp
src/customtrackview.cpp
src/transition.cpp

index c3149852e726bdb6ba867e80e4bf4c0d1e1cca58..7e7e329d18d528858824486bac0d7883974be4c3 100644 (file)
@@ -37,6 +37,9 @@ AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect, doub
         m_selectedKeyframe(0),
         m_keyframeFactor(1),
         m_fps(fps)
+#if QT_VERSION >= 0x040600     
+       , m_closeAnimation(NULL)
+#endif
 {
     setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
 #if QT_VERSION >= 0x040600
@@ -44,6 +47,33 @@ AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect, doub
 #endif
 }
 
+AbstractClipItem::~AbstractClipItem()
+{
+#if QT_VERSION >= 0x040600
+    if (m_closeAnimation) delete m_closeAnimation;
+#endif  
+}  
+void AbstractClipItem::closeAnimation()
+{
+#if QT_VERSION >= 0x040600
+    if (m_closeAnimation) return;
+    m_closeAnimation = new QPropertyAnimation(this, "rect");
+    connect(m_closeAnimation, SIGNAL(finished()), this, SLOT(deleteLater()));
+    m_closeAnimation->setDuration(200);
+    QRectF r = rect();
+    QRectF r2 = r;
+    r2.setLeft(r.left() + r.width() / 2);
+    r2.setTop(r.top() + r.height() / 2);
+    r2.setWidth(1);
+    r2.setHeight(1);
+    m_closeAnimation->setStartValue(r);
+    m_closeAnimation->setEndValue(r2);
+    m_closeAnimation->setEasingCurve(QEasingCurve::InQuad);
+    m_closeAnimation->start();
+#endif
+}
+
 ItemInfo AbstractClipItem::info() const
 {
     ItemInfo info = m_info;
index 09fd98d4209c98d036fba13408ddcb6d6dfe2e68..7cf0d5fa23f5aff2dc98c4459f555de890b410ee 100644 (file)
 #define ABSTRACTCLIPITEM
 
 #include <QGraphicsRectItem>
+#include <QGraphicsWidget>
+
+#if QT_VERSION >= 0x040600
+#include <QPropertyAnimation>
+#endif
+
 #include "definitions.h"
 #include "gentime.h"
 
 class CustomTrackScene;
 class QGraphicsSceneMouseEvent;
 
-class AbstractClipItem : public QObject , public QGraphicsRectItem
+class AbstractClipItem : public QObject, public QGraphicsRectItem
 {
     Q_OBJECT
+#if QT_VERSION >= 0x040600
+    Q_PROPERTY(QRectF rect READ rect WRITE setRect)
+#endif
+
 public:
     AbstractClipItem(const ItemInfo info, const QRectF& rect, double fps);
+    virtual ~ AbstractClipItem();
     void updateSelectedKeyFrame();
     void updateKeyFramePos(const GenTime pos, const double value);
     void addKeyFrame(const GenTime pos, const double value);
@@ -46,7 +57,8 @@ public:
     void updateItem();
     void setItemLocked(bool locked);
     bool isItemLocked() const;
-
+    void closeAnimation();
+    
     virtual  OPERATIONTYPE operationMode(QPointF pos) = 0;
     virtual GenTime startPos() const ;
     virtual void setTrack(int track);
@@ -79,6 +91,11 @@ protected:
     void drawKeyFrames(QPainter *painter, QRectF exposedRect);
     int mouseOverKeyFrames(QPointF pos, double maxOffset);
     virtual void mousePressEvent(QGraphicsSceneMouseEvent * event);
+    
+private:
+#if QT_VERSION >= 0x040600
+    QPropertyAnimation *m_closeAnimation;
+#endif
 };
 
 #endif
index 71687d87a8e13c4eb592c5b55af72a926f03988c..5c21201cd7d53c272272db9d2477175cbc167d6f 100644 (file)
@@ -116,6 +116,7 @@ ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double fps, double speed, i
 ClipItem::~ClipItem()
 {
     blockSignals(true);
+    if (scene()) scene()->removeItem(this);
     if (m_clipType == VIDEO || m_clipType == AV || m_clipType == SLIDESHOW || m_clipType == PLAYLIST) {
         disconnect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QImage)), this, SLOT(slotThumbReady(int, QImage)));
         disconnect(m_clip, SIGNAL(gotAudioData()), this, SLOT(slotGotAudioData()));
index 4dd28fd6fee83b33bcdfcdf67bcfe44251e7aa01..5658ceec16f8b050dc636d6a47bc52fef8ff3bd3 100644 (file)
@@ -3287,9 +3287,14 @@ void CustomTrackView::deleteClip(ItemInfo info, bool refresh)
     }*/
     m_waitingThumbs.removeAll(item);
     if (m_dragItem == item) m_dragItem = NULL;
-    scene()->removeItem(item);
+#if QT_VERSION >= 0x040600
+    // animate item deletion
+    item->closeAnimation();
+#else
     delete item;
     item = NULL;
+#endif
+    
     setDocumentModified();
     if (refresh) m_document->renderer()->doRefresh();
 }
index faca57f41cbabc19785497dd4abc1941fe2026c3..84507918c0c83d0e90b2ebfc96b1022cdc6d9e58 100644 (file)
@@ -66,6 +66,8 @@ Transition::Transition(const ItemInfo info, int transitiontrack, double fps, QDo
 
 Transition::~Transition()
 {
+    blockSignals(true);
+    if (scene()) scene()->removeItem(this);
 }
 
 Transition *Transition::clone()