X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fgraphicsscenerectmove.cpp;h=710d1d50e4ce13e829b574e479ebb5abb6e3955d;hb=1930a8bde87b38dd699e1cf8ce7761df85d9e0e1;hp=26af61c73015d64cd1ff8cfc58d4a7c0f1321627;hpb=d851fb29b57f9a5b86af81d9f281c11dc38a987f;p=kdenlive diff --git a/src/graphicsscenerectmove.cpp b/src/graphicsscenerectmove.cpp index 26af61c7..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) { @@ -83,6 +85,7 @@ void GraphicsSceneRectMove::keyPressEvent(QKeyEvent * keyEvent) { default: QGraphicsScene::keyPressEvent(keyEvent); } + emit actionFinished(); } //virtual @@ -95,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); } } @@ -108,10 +112,11 @@ 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; @@ -129,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; @@ -140,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) { @@ -179,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()); @@ -194,10 +202,25 @@ 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; @@ -238,8 +261,8 @@ 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; } @@ -265,13 +288,12 @@ 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; @@ -308,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); } @@ -353,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); }