X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fgraphicsscenerectmove.cpp;h=710d1d50e4ce13e829b574e479ebb5abb6e3955d;hb=59d2ab24cde3c580f4104d860f7ed3bdca65c2a2;hp=6e47bb19e76d6d0b197fa6c7fc378a5b82885286;hpb=dbe90c60ebee4ea154174b90972f673111f24172;p=kdenlive diff --git a/src/graphicsscenerectmove.cpp b/src/graphicsscenerectmove.cpp index 6e47bb19..710d1d50 100644 --- a/src/graphicsscenerectmove.cpp +++ b/src/graphicsscenerectmove.cpp @@ -5,16 +5,18 @@ #include #include #include +#include #include #include #include +#include #include "graphicsscenerectmove.h" GraphicsSceneRectMove::GraphicsSceneRectMove(QObject *parent): QGraphicsScene(parent), m_selectedItem(NULL), resizeMode(NoResize), m_tool(TITLE_RECTANGLE) { //grabMouse(); zoom = 1.0; - setBackgroundBrush(QBrush(QColor(0, 0, 0, 0))); + setBackgroundBrush(QBrush(Qt::transparent)); } void GraphicsSceneRectMove::setSelectedItem(QGraphicsItem *item) { @@ -49,6 +51,13 @@ void GraphicsSceneRectMove::keyPressEvent(QKeyEvent * keyEvent) { return; } int diff = 1; + if (m_selectedItem->type() == 8) { + QGraphicsTextItem *t = static_cast(m_selectedItem); + if (t->textInteractionFlags() & Qt::TextEditorInteraction) { + QGraphicsScene::keyPressEvent(keyEvent); + return; + } + } if (keyEvent->modifiers() & Qt::ControlModifier) diff = 10; switch (keyEvent->key()) { case Qt::Key_Left: @@ -76,6 +85,7 @@ void GraphicsSceneRectMove::keyPressEvent(QKeyEvent * keyEvent) { default: QGraphicsScene::keyPressEvent(keyEvent); } + emit actionFinished(); } //virtual @@ -88,6 +98,7 @@ void GraphicsSceneRectMove::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* e) { if (g) { if (g->type() == 8) { QGraphicsTextItem *t = static_cast(g); + m_selectedItem = g; t->setTextInteractionFlags(Qt::TextEditorInteraction); } } @@ -101,15 +112,16 @@ void GraphicsSceneRectMove::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { } void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { + m_clickPoint = e->screenPos(); QPointF p = e->scenePos(); p += QPoint(-2, -2); resizeMode = NoResize; - QList list = items(QRectF(p , QSizeF(4, 4)).toRect()); + const QList list = items(QRectF(p , QSizeF(4, 4)).toRect()); QGraphicsItem *item = NULL; bool hasSelected = false; if (m_tool == TITLE_SELECT) { - foreach(QGraphicsItem* g, list) { + foreach(QGraphicsItem *g, list) { kDebug() << " - - CHECKING ITEM Z:" << g->zValue() << ", TYPE: " << g->type(); // check is there is a selected item in list if (g->zValue() > -1000 && g->isSelected()) { @@ -122,6 +134,9 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { if (m_selectedItem && m_selectedItem->type() == 8) { // disable text editing QGraphicsTextItem *t = static_cast(m_selectedItem); + t->textCursor().setPosition(0); + QTextBlock cur = t->textCursor().block(); + t->setTextCursor(QTextCursor(cur)); t->setTextInteractionFlags(Qt::NoTextInteraction); } m_selectedItem = NULL; @@ -133,7 +148,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { } } if (item != NULL) { - m_clickPoint = e->scenePos(); + m_sceneClickPoint = e->scenePos(); m_selectedItem = item; kDebug() << "///////// ITEM TYPE: " << item->type(); if (item->type() == 8) { @@ -145,7 +160,11 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { t->setTextInteractionFlags(Qt::NoTextInteraction); setCursor(Qt::ClosedHandCursor); } else if (item->type() == 3 || item->type() == 13 || item->type() == 7) { - QRectF r = item->boundingRect(); + QRectF r; + if (m_selectedItem->type() == 3) { + r = ((QGraphicsRectItem*)m_selectedItem)->rect(); + } else r = m_selectedItem->boundingRect(); + r.translate(item->scenePos()); if ((r.toRect().topLeft() - e->scenePos().toPoint()).manhattanLength() < 6 / zoom) { resizeMode = TopLeft; @@ -168,7 +187,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { } QGraphicsScene::mousePressEvent(e); } else if (m_tool == TITLE_RECTANGLE) { - m_clickPoint = e->scenePos(); + m_sceneClickPoint = e->scenePos(); m_selectedItem = NULL; } else if (m_tool == TITLE_TEXT) { m_selectedItem = addText(QString()); @@ -183,13 +202,32 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) { } +void GraphicsSceneRectMove::clearTextSelection() { + if (m_selectedItem && m_selectedItem->type() == 8) { + // disable text editing + QGraphicsTextItem *t = static_cast(m_selectedItem); + t->textCursor().setPosition(0); + QTextBlock cur = t->textCursor().block(); + t->setTextCursor(QTextCursor(cur)); + t->setTextInteractionFlags(Qt::NoTextInteraction); + } + m_selectedItem = NULL; + clearSelection(); +} //virtual void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { - + if ((e->screenPos() - m_clickPoint).manhattanLength() < QApplication::startDragDistance()) { + e->accept(); + return; + } if (m_selectedItem && e->buttons() & Qt::LeftButton) { if (m_selectedItem->type() == 3 || m_selectedItem->type() == 13 || m_selectedItem->type() == 7) { - QRectF newrect = m_selectedItem->boundingRect(); + QRectF newrect; + if (m_selectedItem->type() == 3) { + newrect = ((QGraphicsRectItem*)m_selectedItem)->rect(); + } else newrect = m_selectedItem->boundingRect(); + QPointF newpoint = e->scenePos(); //newpoint -= m_selectedItem->scenePos(); switch (resizeMode) { @@ -223,12 +261,12 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { newrect.setBottom(newpoint.y() - m_selectedItem->pos().y()); break; default: - QPointF diff = e->scenePos() - m_clickPoint; - m_clickPoint = e->scenePos(); + QPointF diff = e->scenePos() - m_sceneClickPoint; + m_sceneClickPoint = e->scenePos(); m_selectedItem->moveBy(diff.x(), diff.y()); break; } - if (m_selectedItem->type() == 3) { + if (m_selectedItem->type() == 3 && resizeMode != NoResize) { QGraphicsRectItem *gi = (QGraphicsRectItem*)m_selectedItem; gi->setRect(newrect); } @@ -250,24 +288,23 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { QGraphicsScene::mouseMoveEvent(e); return; } - QPointF diff = e->scenePos() - m_clickPoint; - m_clickPoint = e->scenePos(); + QPointF diff = e->scenePos() - m_sceneClickPoint; + m_sceneClickPoint = e->scenePos(); m_selectedItem->moveBy(diff.x(), diff.y()); } emit itemMoved(); } else if (m_tool == TITLE_SELECT) { - QPointF p = e->scenePos(); p += QPoint(-2, -2); resizeMode = NoResize; bool itemFound = false; - foreach(QGraphicsItem* g, items(QRectF(p , QSizeF(4, 4)).toRect())) { + foreach(const QGraphicsItem* g, items(QRectF(p , QSizeF(4, 4)).toRect())) { if ((g->type() == 13 || g->type() == 7) && g->zValue() > -1000) { // image or svg item setCursor(Qt::OpenHandCursor); break; } else if (g->type() == 3 && g->zValue() > -1000) { - QRectF r = g->boundingRect(); + QRectF r = ((QGraphicsRectItem*)g)->rect(); r.translate(g->scenePos()); itemFound = true; if ((r.toRect().topLeft() - e->scenePos().toPoint()).manhattanLength() < 6 / zoom) { @@ -293,12 +330,12 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { } QGraphicsScene::mouseMoveEvent(e); } else if (m_tool == TITLE_RECTANGLE && e->buttons() & Qt::LeftButton) { - if (m_selectedItem == NULL && (m_clickPoint.toPoint() - e->scenePos().toPoint()).manhattanLength() >= QApplication::startDragDistance()) { + if (m_selectedItem == NULL && (m_clickPoint - e->screenPos()).manhattanLength() >= QApplication::startDragDistance()) { // create new rect item - m_selectedItem = addRect(0, 0, e->scenePos().x() - m_clickPoint.x(), e->scenePos().y() - m_clickPoint.y()); + m_selectedItem = addRect(0, 0, e->scenePos().x() - m_sceneClickPoint.x(), e->scenePos().y() - m_sceneClickPoint.y()); emit newRect((QGraphicsRectItem *) m_selectedItem); m_selectedItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); - m_selectedItem->setPos(m_clickPoint); + m_selectedItem->setPos(m_sceneClickPoint); resizeMode = BottomRight; QGraphicsScene::mouseMoveEvent(e); } @@ -338,7 +375,7 @@ void GraphicsSceneRectMove::setZoom(double s) { } void GraphicsSceneRectMove::setCursor(QCursor c) { - QList l = views(); + const QList l = views(); foreach(QGraphicsView* v, l) { v->setCursor(c); }