From: Till Theato Date: Sun, 20 Feb 2011 13:40:34 +0000 (+0000) Subject: Make it easier to edit rect and corners on the monitor by making the area around... X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=d835f5039377f5c592783f9f6989437470d67e04;p=kdenlive Make it easier to edit rect and corners on the monitor by making the area around the mouse in which we search for an edit point dependent on the current zoom level svn path=/trunk/kdenlive/; revision=5437 --- diff --git a/src/onmonitoritems/onmonitorcornersitem.cpp b/src/onmonitoritems/onmonitorcornersitem.cpp index f37512b8..754d9eed 100644 --- a/src/onmonitoritems/onmonitorcornersitem.cpp +++ b/src/onmonitoritems/onmonitorcornersitem.cpp @@ -26,11 +26,13 @@ #include #include #include +#include OnMonitorCornersItem::OnMonitorCornersItem(QGraphicsItem* parent) : QGraphicsPolygonItem(parent), m_selectedCorner(-1), - m_modified(false) + m_modified(false), + m_view(NULL) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); @@ -48,7 +50,10 @@ OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(QPointF pos, return NoAction; QPainterPath mouseArea; - mouseArea.addRect(pos.x() - 6, pos.y() - 6, 12, 12); + qreal size = 12; + if (getView()) + size /= m_view->matrix().m11(); + mouseArea.addRect(pos.x() - size / 2, pos.y() - size / 2, size, size); for (int i = 0; i < 4; ++i) { if (mouseArea.contains(polygon().at(i))) { *corner = i; @@ -253,4 +258,17 @@ QList OnMonitorCornersItem::sortedClockwise() return points; } +bool OnMonitorCornersItem::getView() +{ + if (m_view) + return true; + + if (scene() && scene()->views().count()) { + m_view = scene()->views()[0]; + return true; + } else { + return false; + } +} + #include "onmonitorcornersitem.moc" diff --git a/src/onmonitoritems/onmonitorcornersitem.h b/src/onmonitoritems/onmonitorcornersitem.h index c97114a3..1e09069b 100644 --- a/src/onmonitoritems/onmonitorcornersitem.h +++ b/src/onmonitoritems/onmonitorcornersitem.h @@ -25,6 +25,8 @@ #include #include +class QGraphicsView; + class OnMonitorCornersItem : public QObject, public QGraphicsPolygonItem { Q_OBJECT @@ -51,12 +53,17 @@ private: /** @brief Returns the points of this polygon but sorted clockwise. */ QList sortedClockwise(); + /** @brief Tries to get the view of the scene. */ + bool getView(); + cornersActions m_mode; /** Number of the selected corner or if in MoveSide mode number of the first corner on this side */ int m_selectedCorner; QPointF m_lastPoint; bool m_modified; + QGraphicsView *m_view; + signals: void changed(); }; diff --git a/src/onmonitoritems/onmonitorrectitem.cpp b/src/onmonitoritems/onmonitorrectitem.cpp index 974d0aae..5188be8f 100644 --- a/src/onmonitoritems/onmonitorrectitem.cpp +++ b/src/onmonitoritems/onmonitorrectitem.cpp @@ -24,11 +24,13 @@ #include #include #include +#include OnMonitorRectItem::OnMonitorRectItem(const QRectF &rect, double dar, QGraphicsItem* parent) : QGraphicsRectItem(rect, parent), m_dar(dar), - m_modified(false) + m_modified(false), + m_view(NULL) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); @@ -54,7 +56,10 @@ rectActions OnMonitorRectItem::getMode(QPointF pos) right.lineTo(pol.at(2)); QPainterPath mouseArea; - mouseArea.addRect(pos.x() - 4, pos.y() - 4, 8, 8); + qreal size = 8; + if (getView()) + size /= m_view->matrix().m11(); + mouseArea.addRect(pos.x() - size / 2, pos.y() - size / 2, size, size); // Check for collisions between the mouse and the borders if (mouseArea.contains(pol.at(0))) @@ -268,4 +273,17 @@ void OnMonitorRectItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* } } +bool OnMonitorRectItem::getView() +{ + if (m_view) + return true; + + if (scene() && scene()->views().count()) { + m_view = scene()->views()[0]; + return true; + } else { + return false; + } +} + #include "onmonitorrectitem.moc" diff --git a/src/onmonitoritems/onmonitorrectitem.h b/src/onmonitoritems/onmonitorrectitem.h index 047f3e6a..ea7c2fe7 100644 --- a/src/onmonitoritems/onmonitorrectitem.h +++ b/src/onmonitoritems/onmonitorrectitem.h @@ -25,6 +25,8 @@ #include #include +class QGraphicsView; + enum rectActions { Move, ResizeTopLeft, ResizeBottomLeft, ResizeTopRight, ResizeBottomRight, ResizeLeft, ResizeRight, ResizeTop, ResizeBottom, NoAction }; class OnMonitorRectItem : public QObject, public QGraphicsRectItem @@ -53,6 +55,11 @@ private: QPointF m_lastPoint; bool m_modified; + QGraphicsView *m_view; + + /** @brief Tries to get the view of the scene. */ + bool getView(); + signals: void changed(); };