From: Till Theato Date: Thu, 3 Mar 2011 16:54:39 +0000 (+0000) Subject: rotoscoping: make it possible to finish spline by clicking on first point X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e448c59e5520f08a5c91cb1c358ec5d92f1e0c93;p=kdenlive rotoscoping: make it possible to finish spline by clicking on first point svn path=/trunk/kdenlive/; revision=5469 --- diff --git a/src/onmonitoritems/rotoscoping/bpointitem.h b/src/onmonitoritems/rotoscoping/bpointitem.h index 794bc8b5..1a767c57 100644 --- a/src/onmonitoritems/rotoscoping/bpointitem.h +++ b/src/onmonitoritems/rotoscoping/bpointitem.h @@ -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 diff --git a/src/onmonitoritems/rotoscoping/splineitem.cpp b/src/onmonitoritems/rotoscoping/splineitem.cpp index a4adbbdc..e22892c6 100644 --- a/src/onmonitoritems/rotoscoping/splineitem.cpp +++ b/src/onmonitoritems/rotoscoping/splineitem.cpp @@ -189,11 +189,21 @@ void SplineItem::mousePressEvent(QGraphicsSceneMouseEvent* event) updateSpline(); } } else { - if (event->button() == Qt::RightButton) { - if (childItems().count() > 1) { + bool close = false; + QList items = childItems(); + if (items.count() > 1) { + BPointItem *bp = qgraphicsitem_cast(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(childItems().first()); - BPointItem *i2 = qgraphicsitem_cast(childItems().last()); + BPointItem *i1 = qgraphicsitem_cast(items.first()); + BPointItem *i2 = qgraphicsitem_cast(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(childItems().last()); + if (items.count()) { + BPointItem *i = qgraphicsitem_cast(items.last()); BPoint prev = i->getPoint(); prev.h2 = QLineF(prev.p, p.p).pointAt(.2); p.h1 = QLineF(prev.p, p.p).pointAt(.8);