]> git.sesse.net Git - kdenlive/commitdiff
Make it easier to edit rect and corners on the monitor by making the area around...
authorTill Theato <root@ttill.de>
Sun, 20 Feb 2011 13:40:34 +0000 (13:40 +0000)
committerTill Theato <root@ttill.de>
Sun, 20 Feb 2011 13:40:34 +0000 (13:40 +0000)
svn path=/trunk/kdenlive/; revision=5437

src/onmonitoritems/onmonitorcornersitem.cpp
src/onmonitoritems/onmonitorcornersitem.h
src/onmonitoritems/onmonitorrectitem.cpp
src/onmonitoritems/onmonitorrectitem.h

index f37512b85b581c37c658f2e7ce89c902b70cebb9..754d9eeda14ccb4e90341ed4e0c480c79ff66bf8 100644 (file)
 #include <QPainter>
 #include <QStyleOptionGraphicsItem>
 #include <QCursor>
+#include <QGraphicsView>
 
 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 <QPointF> 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"
index c97114a3766dcf2ea0a4cbb2fca1bde90e6e0495..1e09069b38d29d764eea8abaef6f901715ae7ae0 100644 (file)
@@ -25,6 +25,8 @@
 #include <QtCore>
 #include <QGraphicsPolygonItem>
 
+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 <QPointF> 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();
 };
index 974d0aae136dd4b8416986e27fa19202d417e4ac..5188be8fadaee2dd9edc01c4b6d313f13e315ad1 100644 (file)
 #include <QPainter>
 #include <QStyleOptionGraphicsItem>
 #include <QCursor>
+#include <QGraphicsView>
 
 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"
index 047f3e6a191c8a894bb5a0e663be06b60322e26d..ea7c2fe7206a7026ebb3ff44846d42c0c5e3f6b9 100644 (file)
@@ -25,6 +25,8 @@
 #include <QtCore>
 #include <QGraphicsRectItem>
 
+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();
 };