]> git.sesse.net Git - kdenlive/blobdiff - src/monitorscene.cpp
Const'ref
[kdenlive] / src / monitorscene.cpp
index 921439ce743403f1a18b2fd93057775606aef6a8..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 {
@@ -146,11 +158,13 @@ void MonitorScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
 
     QGraphicsScene::mousePressEvent(event);
 
-    if (selected.count() != selectedItems().count()) {
+    if (selected.count() < selectedItems().count()) {
         // mouse click on item not in selection group
         // -> select only this item
-        foreach (QGraphicsItem *item, selected)
-            item->setSelected(false);
+        foreach (QGraphicsItem *item, selected) {
+            if (item)
+                item->setSelected(false);
+        }
     }
 
     if (event->isAccepted() && selectedItems().count() > 1) {
@@ -231,7 +245,7 @@ void MonitorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
 }
 void MonitorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
 {
-    Q_UNUSED(event);
+    Q_UNUSED(event)
 
     if (!m_enabled)
         emit addKeyframe();
@@ -240,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();