]> git.sesse.net Git - kdenlive/commitdiff
Draw handles in the monitor scene when we are on a keyframe, helps to see when we...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 5 Sep 2010 20:08:11 +0000 (20:08 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 5 Sep 2010 20:08:11 +0000 (20:08 +0000)
svn path=/trunk/kdenlive/; revision=4850

src/geometrywidget.cpp
src/geometrywidget.h

index ed9dd5eb60a5b33922262008523fc6da2e4d1b81..c1ccb32cf7d871255ea7a4e29e9d40fc52ea57d9 100644 (file)
@@ -32,7 +32,9 @@
 #include <QVBoxLayout>
 #include <QGridLayout>
 
-GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos, bool isEffect, QWidget* parent ):
+
+
+GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos, bool isEffect, QWidget* parent):
         QWidget(parent),
         m_monitor(monitor),
         m_timePos(new TimecodeDisplay(timecode)),
@@ -207,7 +209,7 @@ void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxfra
 
     m_geometry->fetch(&item, 0);
     delete m_rect;
-    m_rect = new QGraphicsRectItem(QRectF(0, 0, item.w(), item.h()));
+    m_rect = new QGraphicsRectHandleItem(QRectF(0, 0, item.w(), item.h()));
     m_rect->setPos(item.x(), item.y());
     m_rect->setZValue(0);
     m_rect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
@@ -248,12 +250,14 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek)
     Mlt::GeometryItem item;
     if (m_geometry->fetch(&item, pos) || item.key() == false) {
         // no keyframe
+        m_rect->drawHandles = false;
         m_scene->setEnabled(false);
         m_ui.widgetGeometry->setEnabled(false);
         m_ui.buttonAddDelete->setIcon(KIcon("document-new"));
         m_ui.buttonAddDelete->setToolTip(i18n("Add keyframe"));
     } else {
         // keyframe
+        m_rect->drawHandles = true;
         m_scene->setEnabled(true);
         m_ui.widgetGeometry->setEnabled(true);
         m_ui.buttonAddDelete->setIcon(KIcon("edit-delete"));
@@ -326,7 +330,7 @@ void GeometryWidget::slotPreviousKeyframe()
     // Go to start if no keyframe is found
     int currentPos = m_timePos->getValue();
     int pos = 0;
-    if(!m_geometry->prev_key(&item, currentPos - 1) && item.frame() < currentPos)
+    if (!m_geometry->prev_key(&item, currentPos - 1) && item.frame() < currentPos)
         pos = item.frame();
 
     slotPositionChanged(pos);
index a4394fb14bacdac752e4b90fc24e0810a73c1881..378501c2cde7c0dc97e37444836fcd574391fa36 100644 (file)
@@ -26,6 +26,8 @@
 #include <mlt++/Mlt.h>
 
 #include <QWidget>
+#include <QGraphicsRectItem>
+#include <QPainter>
 
 class QDomElement;
 class QGraphicsRectItem;
@@ -34,6 +36,32 @@ class MonitorScene;
 class KeyframeHelper;
 class TimecodeDisplay;
 
+
+class QGraphicsRectHandleItem: public QGraphicsRectItem
+{
+public:
+
+    QGraphicsRectHandleItem(const QRectF & rect, QGraphicsItem * parent = 0):
+            QGraphicsRectItem(rect, parent),
+            drawHandles(false) {
+    }
+
+    bool drawHandles;
+
+
+    virtual void paint(QPainter *painter,
+                       const QStyleOptionGraphicsItem * option,
+                       QWidget* widget = 0) {
+        QGraphicsRectItem::paint(painter, option, widget);
+        if (!drawHandles) return;
+        double handleSize = 6 / painter->matrix().m11();
+        painter->fillRect(0, 0, handleSize, handleSize, QColor(Qt::yellow));
+        painter->fillRect(option->rect.width() - handleSize, 0, handleSize, handleSize, QColor(Qt::yellow));
+        painter->fillRect(option->rect.width() - handleSize, option->rect.height() - handleSize, handleSize, handleSize, QColor(Qt::yellow));
+        painter->fillRect(0, option->rect.height() - handleSize, handleSize, handleSize, QColor(Qt::yellow));
+    }
+};
+
 class GeometryWidget : public QWidget
 {
     Q_OBJECT
@@ -70,7 +98,7 @@ private:
     int m_outPoint;
     bool m_isEffect;
     MonitorScene *m_scene;
-    QGraphicsRectItem *m_rect;
+    QGraphicsRectHandleItem *m_rect;
     KeyframeHelper *m_timeline;
     /** Stores the different settings in the MLT geometry format. */
     Mlt::Geometry *m_geometry;