]> git.sesse.net Git - kdenlive/blobdiff - src/graphicsscenerectmove.cpp
Re-use KOffice widget in the titler to gain space (spin box with popup slider)
[kdenlive] / src / graphicsscenerectmove.cpp
index 275c2a4da4fa0e8271d1a44ce541f5a8be78c8be..97929201a9012ad894854350af508b7c6ddd54af 100644 (file)
@@ -42,6 +42,7 @@ GraphicsSceneRectMove::GraphicsSceneRectMove(QObject *parent) :
     //grabMouse();
     m_zoom = 1.0;
     setBackgroundBrush(QBrush(Qt::transparent));
+    m_fontSize = 0;
 }
 
 void GraphicsSceneRectMove::setSelectedItem(QGraphicsItem *item)
@@ -74,7 +75,7 @@ void GraphicsSceneRectMove::setTool(TITLETOOL tool)
 
 void GraphicsSceneRectMove::keyPressEvent(QKeyEvent * keyEvent)
 {
-    if (m_selectedItem == NULL) {
+    if (m_selectedItem == NULL || !(m_selectedItem->flags() & QGraphicsItem::ItemIsMovable)) {
         QGraphicsScene::keyPressEvent(keyEvent);
         return;
     }
@@ -165,7 +166,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e)
                 break;
             }
         }
-        if (item == NULL) {
+        if (item == NULL  || !(item->flags() & QGraphicsItem::ItemIsSelectable)) {
             if (m_selectedItem && m_selectedItem->type() == 8) {
                 // disable text editing
                 QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(m_selectedItem);
@@ -182,7 +183,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e)
                 }
             }
         }
-        if (item != NULL) {
+        if (item != NULL && item->flags() & QGraphicsItem::ItemIsMovable) {
             m_sceneClickPoint = e->scenePos();
             m_selectedItem = item;
             kDebug() << "/////////  ITEM TYPE: " << item->type();
@@ -248,7 +249,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e)
         emit newText((QGraphicsTextItem *) m_selectedItem);
         m_selectedItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
         ((QGraphicsTextItem *)m_selectedItem)->setTextInteractionFlags(Qt::TextEditorInteraction);
-        m_selectedItem->setPos(e->scenePos());
+        m_selectedItem->setPos(e->scenePos() - QPointF(0, (int)(m_fontSize/2)));
         QGraphicsScene::mousePressEvent(e);
     }
 
@@ -406,6 +407,15 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e)
             }
             if (m_selectedItem->type() == 3 && m_resizeMode != NoResize) {
                 QGraphicsRectItem *gi = (QGraphicsRectItem*)m_selectedItem;
+                // Resize using aspect ratio
+                if (!m_selectedItem->data(0).isNull()) {
+                    // we want to keep aspect ratio
+                    double hRatio = (double) newrect.width() / m_selectedItem->data(0).toInt();
+                    double vRatio = (double) newrect.height() / m_selectedItem->data(1).toInt();
+                    if (hRatio < vRatio) newrect.setHeight(m_selectedItem->data(1).toInt() * hRatio);
+                    else newrect.setWidth(m_selectedItem->data(0).toInt() * vRatio);
+                }
+
                 gi->setRect(newrect);
             }
             /*else {
@@ -479,9 +489,11 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e)
         }
         QGraphicsScene::mouseMoveEvent(e);
     } else if (m_tool == TITLE_RECTANGLE && e->buttons() & Qt::LeftButton) {
-        if (m_selectedItem == NULL && (m_clickPoint - e->screenPos()).manhattanLength() >= QApplication::startDragDistance()) {
+        if (m_selectedItem == NULL) {
             // create new rect item
-            m_selectedItem = addRect(0, 0, e->scenePos().x() - m_sceneClickPoint.x(), e->scenePos().y() - m_sceneClickPoint.y());
+            QRectF r(0, 0, e->scenePos().x() - m_sceneClickPoint.x(), e->scenePos().y() - m_sceneClickPoint.y());
+            r = r.normalized();
+            m_selectedItem = addRect(QRectF(0, 0, r.width(), r.height()));
             emit newRect((QGraphicsRectItem *) m_selectedItem);
             m_selectedItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
             m_selectedItem->setPos(m_sceneClickPoint);
@@ -493,12 +505,14 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e)
 
 void GraphicsSceneRectMove::wheelEvent(QGraphicsSceneWheelEvent * wheelEvent)
 {
-    QList<QGraphicsView*> viewlist = views();
-    //kDebug() << wheelEvent->delta() << " " << zoom;
-    if (viewlist.size() > 0) {
-        if (wheelEvent->delta() < 0) emit sceneZoom(true);
-        else emit sceneZoom(false);
-    }
+    if (wheelEvent->modifiers() == Qt::ControlModifier) {
+        QList<QGraphicsView*> viewlist = views();
+        //kDebug() << wheelEvent->delta() << " " << zoom;
+        if (viewlist.size() > 0) {
+            if (wheelEvent->delta() > 0) emit sceneZoom(true);
+            else emit sceneZoom(false);
+        }
+    } else wheelEvent->setAccepted(false);
 }
 
 void GraphicsSceneRectMove::setScale(double s)
@@ -549,3 +563,10 @@ void GraphicsSceneRectMove::setResizeCursor(qreal angle)
     else if (angle > 112.5 && angle <= 157.5)
         setCursor(Qt::SizeBDiagCursor);
 }
+
+void GraphicsSceneRectMove::slotUpdateFontSize(int s)
+{
+       m_fontSize = s;
+}
+
+#include "graphicsscenerectmove.moc"