]> git.sesse.net Git - kdenlive/commitdiff
rotoscoping: make it possible to finish spline by clicking on first point
authorTill Theato <root@ttill.de>
Thu, 3 Mar 2011 16:54:39 +0000 (16:54 +0000)
committerTill Theato <root@ttill.de>
Thu, 3 Mar 2011 16:54:39 +0000 (16:54 +0000)
svn path=/trunk/kdenlive/; revision=5469

src/onmonitoritems/rotoscoping/bpointitem.h
src/onmonitoritems/rotoscoping/splineitem.cpp

index 794bc8b503b7927f6a5cc17b9735c60d647df979..1a767c57eafb4cb3559505e15e3c8c88e5e1547a 100644 (file)
@@ -40,6 +40,9 @@ public:
     virtual QRectF boundingRect() const;
     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
 
+    /** @brief Gets The action mode for the area @param pos +- 4. */
+    int getSelection(QPointF pos);
+
 protected:
     virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
     virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
@@ -50,9 +53,6 @@ private:
     BPoint m_point;
     int m_selection;
     QGraphicsView *m_view;
-
-    /** @brief Gets The action mode for the area @param pos +- 4. */
-    int getSelection(QPointF pos);
 };
 
 #endif
index a4adbbdc639c8402f72d1af28203404720dfcf15..e22892c6f47a5710934587890dfe09701a991faf 100644 (file)
@@ -189,11 +189,21 @@ void SplineItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
             updateSpline();
         }
     } else {
-        if (event->button() == Qt::RightButton) {
-            if (childItems().count() > 1) {
+        bool close = false;
+        QList <QGraphicsItem *> items = childItems();
+        if (items.count() > 1) {
+            BPointItem *bp = qgraphicsitem_cast<BPointItem *>(items.at(0));
+            int selectionType = bp->getSelection(mapToItem(bp, event->pos()));
+            // since h1 == p we need to check for both
+            if (selectionType == 0 || selectionType == 1)
+                close = true;
+        }
+
+        if (close || event->button() == Qt::RightButton) {
+            if (items.count() > 1) {
                 // close the spline
-                BPointItem *i1 = qgraphicsitem_cast<BPointItem *>(childItems().first());
-                BPointItem *i2 = qgraphicsitem_cast<BPointItem *>(childItems().last());
+                BPointItem *i1 = qgraphicsitem_cast<BPointItem *>(items.first());
+                BPointItem *i2 = qgraphicsitem_cast<BPointItem *>(items.last());
                 BPoint p1 = i1->getPoint();
                 BPoint p2 = i2->getPoint();
                 p1.h1 = QLineF(p1.p, p2.p).pointAt(.2);
@@ -207,8 +217,8 @@ void SplineItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
         } else if (event->modifiers() == Qt::NoModifier) {
             BPoint p;
             p.p = p.h1 = p.h2 = event->scenePos();
-            if (childItems().count()) {
-                BPointItem *i = qgraphicsitem_cast<BPointItem *>(childItems().last());
+            if (items.count()) {
+                BPointItem *i = qgraphicsitem_cast<BPointItem *>(items.last());
                 BPoint prev = i->getPoint();
                 prev.h2 = QLineF(prev.p, p.p).pointAt(.2);
                 p.h1 = QLineF(prev.p, p.p).pointAt(.8);