]> git.sesse.net Git - kdenlive/blobdiff - src/monitorscene.cpp
Const'ref
[kdenlive] / src / monitorscene.cpp
index 08d6ee5ba87d8e6183cf7e636962a5021514c209..e6be3de10188933da55b54a6b60c13e3dd682076 100644 (file)
@@ -27,6 +27,7 @@
 #include <QGraphicsView>
 #include <QGraphicsPixmapItem>
 #include <QGraphicsSceneMouseEvent>
+#include <QScrollBar>
 
 
 MonitorScene::MonitorScene(Render *renderer, QObject* parent) :
@@ -64,9 +65,20 @@ MonitorScene::MonitorScene(Render *renderer, QObject* parent) :
     connect(m_renderer, SIGNAL(frameUpdated(QImage)), this, SLOT(slotSetBackgroundImage(QImage)));
 }
 
+void MonitorScene::centerView()
+{
+    if (m_view) m_view->centerOn(m_frameBorder);
+}
+
+void MonitorScene::cleanup()
+{
+    // Reset scene rect
+    setSceneRect(m_frameBorder->boundingRect());
+}
+
 void MonitorScene::setUp()
 {
-    if (views().count() > 0) {
+    if (!views().isEmpty()) {
         m_view = views().at(0);
         m_view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
     } else {
@@ -142,11 +154,22 @@ void MonitorScene::slotZoomIn(int by)
 
 void MonitorScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
 {
+    QList <QGraphicsItem *> selected = selectedItems();
+
     QGraphicsScene::mousePressEvent(event);
 
+    if (selected.count() < selectedItems().count()) {
+        // mouse click on item not in selection group
+        // -> select only this item
+        foreach (QGraphicsItem *item, selected) {
+            if (item)
+                item->setSelected(false);
+        }
+    }
+
     if (event->isAccepted() && selectedItems().count() > 1) {
         // multiple items selected + mouse pressed on an item
-        QList <QGraphicsItem *> selected = selectedItems();
+        selected = selectedItems();
         foreach (QGraphicsItem *item, selected) {
             if (qgraphicsitem_cast<BPointItem*>(item)) {
                 // works with rotoscoping only for now
@@ -222,7 +245,7 @@ void MonitorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
 }
 void MonitorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
 {
-    Q_UNUSED(event);
+    Q_UNUSED(event)
 
     if (!m_enabled)
         emit addKeyframe();
@@ -231,12 +254,23 @@ void MonitorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
 void MonitorScene::wheelEvent(QGraphicsSceneWheelEvent* event)
 {
     if (event->modifiers() == Qt::ControlModifier) {
-        if (event->delta() > 0)
+        if (event->delta() > 0) {
+            m_view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
             slotZoomIn(5);
-        else
+            m_view->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
+        } else {
             slotZoomOut(5);
+        }
     } else {
-        QGraphicsScene::wheelEvent(event);
+        QAbstractSlider::SliderAction action;
+        if (event->delta() > 0)
+            action = QAbstractSlider::SliderSingleStepSub;
+        else
+            action = QAbstractSlider::SliderSingleStepAdd;
+        if (event->orientation() == Qt::Horizontal)
+            m_view->horizontalScrollBar()->triggerAction(action);
+        else
+            m_view->verticalScrollBar()->triggerAction(action);
     }
 
     event->accept();