From: Alberto Villa Date: Fri, 19 Jun 2009 15:04:59 +0000 (+0000) Subject: rotate the cursor when resizing a rotated rectangle, and make it easier to resize... X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9eb2cc81613ff72e6907c93fb788bfe02a3761c4;p=kdenlive rotate the cursor when resizing a rotated rectangle, and make it easier to resize from a vertex: http://www.kdenlive.org/mantis/view.php?id=919 svn path=/trunk/kdenlive/; revision=3594 --- diff --git a/src/graphicsscenerectmove.cpp b/src/graphicsscenerectmove.cpp index 221fae4b..5274a461 100644 --- a/src/graphicsscenerectmove.cpp +++ b/src/graphicsscenerectmove.cpp @@ -214,7 +214,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) QGraphicsLineItem borderLeft(bottomLeft.x(), bottomLeft.y(), topLeft.x(), topLeft.y()); // The area interested by the mouse pointer QPainterPath mouseArea; - mouseArea.addRect(e->scenePos().toPoint().x() - 3 / m_zoom, e->scenePos().toPoint().y() - 3 / m_zoom, 6 / m_zoom, 6 / m_zoom); + mouseArea.addRect(e->scenePos().toPoint().x() - 4 / m_zoom, e->scenePos().toPoint().y() - 4 / m_zoom, 8 / m_zoom, 8 / m_zoom); // Check for collisions between the mouse and the borders if (borderLeft.collidesWithPath(mouseArea) && borderTop.collidesWithPath(mouseArea)) m_resizeMode = TopLeft; @@ -459,24 +459,16 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) QGraphicsLineItem borderLeft(bottomLeft.x(), bottomLeft.y(), topLeft.x(), topLeft.y()); // The area interested by the mouse pointer QPainterPath mouseArea; - mouseArea.addRect(e->scenePos().toPoint().x() - 3 / m_zoom, e->scenePos().toPoint().y() - 3 / m_zoom, 6 / m_zoom, 6 / m_zoom); + mouseArea.addRect(e->scenePos().toPoint().x() - 4 / m_zoom, e->scenePos().toPoint().y() - 4 / m_zoom, 8 / m_zoom, 8 / m_zoom); // Check for collisions between the mouse and the borders - if (borderLeft.collidesWithPath(mouseArea) && borderTop.collidesWithPath(mouseArea)) - setCursor(QCursor(Qt::SizeFDiagCursor)); - else if (borderLeft.collidesWithPath(mouseArea) && borderBottom.collidesWithPath(mouseArea)) - setCursor(QCursor(Qt::SizeBDiagCursor)); - else if (borderRight.collidesWithPath(mouseArea) && borderTop.collidesWithPath(mouseArea)) - setCursor(QCursor(Qt::SizeBDiagCursor)); - else if (borderRight.collidesWithPath(mouseArea) && borderBottom.collidesWithPath(mouseArea)) - setCursor(QCursor(Qt::SizeFDiagCursor)); - else if (borderLeft.collidesWithPath(mouseArea)) - setCursor(Qt::SizeHorCursor); - else if (borderRight.collidesWithPath(mouseArea)) - setCursor(Qt::SizeHorCursor); - else if (borderTop.collidesWithPath(mouseArea)) - setCursor(Qt::SizeVerCursor); - else if (borderBottom.collidesWithPath(mouseArea)) - setCursor(Qt::SizeVerCursor); + if (borderLeft.collidesWithPath(mouseArea) && borderTop.collidesWithPath(mouseArea) || borderRight.collidesWithPath(mouseArea) && borderBottom.collidesWithPath(mouseArea)) + setResizeCursor(borderLeft.line().angle() - 45); + else if (borderLeft.collidesWithPath(mouseArea) && borderBottom.collidesWithPath(mouseArea) || borderRight.collidesWithPath(mouseArea) && borderTop.collidesWithPath(mouseArea)) + setResizeCursor(borderLeft.line().angle() + 45); + else if (borderLeft.collidesWithPath(mouseArea) || borderRight.collidesWithPath(mouseArea)) + setResizeCursor(borderLeft.line().angle()); + else if (borderTop.collidesWithPath(mouseArea) || borderBottom.collidesWithPath(mouseArea)) + setResizeCursor(borderTop.line().angle()); else setCursor(Qt::OpenHandCursor); break; @@ -538,3 +530,20 @@ void GraphicsSceneRectMove::setCursor(QCursor c) v->setCursor(c); } } + +void GraphicsSceneRectMove::setResizeCursor(qreal angle) +{ + // % is not working... + while (angle < 0) + angle += 180; + while (angle >= 180) + angle -= 180; + if (angle > 157.5 || angle <= 22.5) + setCursor(Qt::SizeVerCursor); + else if (angle > 22.5 && angle <= 67.5) + setCursor(Qt::SizeFDiagCursor); + else if (angle > 67.5 && angle <= 112.5) + setCursor(Qt::SizeHorCursor); + else if (angle > 112.5 && angle <= 157.5) + setCursor(Qt::SizeBDiagCursor); +} diff --git a/src/graphicsscenerectmove.h b/src/graphicsscenerectmove.h index 26092d25..57970f39 100644 --- a/src/graphicsscenerectmove.h +++ b/src/graphicsscenerectmove.h @@ -49,6 +49,7 @@ protected: private: void setCursor(QCursor); + void setResizeCursor(qreal angle); double m_zoom; QGraphicsItem* m_selectedItem; resizeModes m_resizeMode;