]> git.sesse.net Git - kdenlive/blobdiff - src/monitorscene.cpp
Implement document notes:
[kdenlive] / src / monitorscene.cpp
index 3b619e168ce92c4866b382727e268f7983938e2f..655425e27ed769deec4dc8e86452593711e9aa57 100644 (file)
@@ -40,23 +40,23 @@ MonitorScene::MonitorScene(Render *renderer, QObject* parent) :
 {
     setBackgroundBrush(QBrush(QColor(KdenliveSettings::window_background().name())));
 
-    QPen framepen(Qt::SolidLine);
+    QPen framepen(Qt::DotLine);
     framepen.setColor(Qt::red);
 
-    m_frameBorder = new QGraphicsRectItem(QRectF(0, 0, m_renderer->renderWidth(), m_renderer->renderHeight()));
+    m_frameBorder = new QGraphicsRectItem(QRectF(0, 0, m_renderer->frameRenderWidth(), m_renderer->renderHeight()));
     m_frameBorder->setPen(framepen);
-    m_frameBorder->setZValue(-2);
+    m_frameBorder->setZValue(-1);
     m_frameBorder->setBrush(Qt::transparent);
     m_frameBorder->setFlags(0);
     addItem(m_frameBorder);
 
     m_lastUpdate.start();
     m_background = new QGraphicsPixmapItem();
-    m_background->setZValue(-1);
+    m_background->setZValue(-2);
     m_background->setFlags(0);
     m_background->setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
     m_background->setTransformationMode(Qt::FastTransformation);
-    QPixmap bg(m_renderer->renderWidth(), m_renderer->renderHeight());
+    QPixmap bg(m_renderer->frameRenderWidth(), m_renderer->renderHeight());
     bg.fill();
     m_background->setPixmap(bg);
     addItem(m_background);
@@ -73,13 +73,11 @@ void MonitorScene::setUp()
         m_view = NULL;
 
     m_view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
-
-    slotUpdateBackground(true);
 }
 
 void MonitorScene::resetProfile()
 {
-    const QRectF border(0, 0, m_renderer->renderWidth(), m_renderer->renderHeight());
+    const QRectF border(0, 0, m_renderer->frameRenderWidth(), m_renderer->renderHeight());
     m_frameBorder->setRect(border);
 }
 
@@ -88,13 +86,11 @@ void MonitorScene::setEnabled(bool enabled)
     m_enabled = enabled;
 }
 
-void MonitorScene::slotUpdateBackground(bool fit)
+void MonitorScene::slotUpdateBackground()
 {
     if (m_view && m_view->isVisible()) {
-        if (m_lastUpdate.elapsed() > 200) {
-            m_background->setPixmap(QPixmap::fromImage(m_backgroundImage, Qt::ThresholdDither));
-            if (fit)
-                slotZoomFit();
+        if (m_lastUpdate.elapsed() > 100) {
+            m_background->setPixmap(QPixmap::fromImage(m_backgroundImage));
             m_lastUpdate.start();
         }
     }
@@ -107,8 +103,10 @@ void MonitorScene::slotSetDirectUpdate(bool directUpdate)
 
 void MonitorScene::slotSetBackgroundImage(const QImage &image)
 {
-    m_backgroundImage = image;
-    slotUpdateBackground();
+    if (m_view && m_view->isVisible()) {
+        m_backgroundImage = image;
+        slotUpdateBackground();
+    }
 }
 
 
@@ -117,7 +115,7 @@ void MonitorScene::slotZoom(int value)
     if (m_view) {
         m_zoom = value / 100.0;
         m_view->resetTransform();
-        m_view->scale(m_zoom, m_zoom);
+        m_view->scale(m_renderer->renderWidth() * m_zoom / m_renderer->frameRenderWidth(), m_zoom);
         emit zoomChanged(value);
     }
 }
@@ -125,10 +123,10 @@ void MonitorScene::slotZoom(int value)
 void MonitorScene::slotZoomFit()
 {
     if (m_view) {
-        m_view->fitInView(m_frameBorder, Qt::KeepAspectRatio);
+        int xzoom = 100 * m_view->viewport()->height() / m_renderer->renderHeight();
+        int yzoom = 100 * m_view->viewport()->width() / m_renderer->renderWidth();
+        slotZoom(qMin(xzoom, yzoom));
         m_view->centerOn(m_frameBorder);
-        m_zoom = m_view->matrix().m11();
-        emit zoomChanged((int)(m_zoom * 100));
     }
 }
 
@@ -146,7 +144,9 @@ void MonitorScene::slotZoomOut()
 
 void MonitorScene::slotZoomIn()
 {
-    slotZoom(qMin(300, (int)(m_zoom * 100 + 1)));
+    int newzoom = (100 * m_zoom + 0.5);
+    newzoom++;
+    slotZoom(qMin(300, newzoom));
 }
 
 
@@ -218,8 +218,16 @@ void MonitorScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
 
 void MonitorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
 {
-    if (!m_enabled)
+    if (!m_enabled) {
+        if (m_view)
+            m_view->setCursor(Qt::ArrowCursor);
+        return;
+    }
+
+    /*if (event->buttons() != Qt::NoButton && (event->screenPos() - m_screenClickPoint).manhattanLength() < QApplication::startDragDistance()) {
+        event->accept();
         return;
+    }*/
 
     QPointF mousePos = event->scenePos();
 
@@ -351,14 +359,24 @@ void MonitorScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
 
 void MonitorScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
+    Q_UNUSED(event);
+
     if (!m_enabled)
         return;
 
-    QGraphicsScene::mouseReleaseEvent(event);
     if (m_modified) {
         m_modified = false;
         emit actionFinished();
     }
 }
 
+void MonitorScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
+{
+    Q_UNUSED(event);
+
+    if (!m_enabled)
+        emit addKeyframe();
+}
+
+
 #include "monitorscene.moc"