From: Jean-Baptiste Mardelle Date: Fri, 1 May 2009 21:24:11 +0000 (+0000) Subject: Composite transition: don't allow to turn over rectangle (negative width / height) X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=cabe5babbc054d37e135c04a3e1ecb7252793f5e;p=kdenlive Composite transition: don't allow to turn over rectangle (negative width / height) svn path=/trunk/kdenlive/; revision=3342 --- diff --git a/src/graphicsscenerectmove.cpp b/src/graphicsscenerectmove.cpp index 9a4071c4..8bd590d9 100644 --- a/src/graphicsscenerectmove.cpp +++ b/src/graphicsscenerectmove.cpp @@ -266,33 +266,49 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) //newpoint -= m_selectedItem->scenePos(); switch (m_resizeMode) { case TopLeft: - newrect.setBottomRight(newrect.bottomRight() + m_selectedItem->pos() - newpoint); - m_selectedItem->setPos(newpoint); + if (newpoint.x() < newrect.right() + m_selectedItem->pos().x() && newpoint.y() < newrect.bottom() + m_selectedItem->pos().y()) { + newrect.setBottomRight(newrect.bottomRight() + m_selectedItem->pos() - newpoint); + m_selectedItem->setPos(newpoint); + } break; case BottomLeft: - newrect.setBottomRight(QPointF(newrect.bottomRight().x() + m_selectedItem->pos().x() - newpoint.x(), newpoint.y() - m_selectedItem->pos().y())); - m_selectedItem->setPos(QPointF(newpoint.x(), m_selectedItem->pos().y())); + if (newpoint.x() < newrect.right() + m_selectedItem->pos().x() && newpoint.y() > m_selectedItem->pos().y()) { + newrect.setBottomRight(QPointF(newrect.bottomRight().x() + m_selectedItem->pos().x() - newpoint.x(), newpoint.y() - m_selectedItem->pos().y())); + m_selectedItem->setPos(QPointF(newpoint.x(), m_selectedItem->pos().y())); + } break; case TopRight: - newrect.setBottomRight(QPointF(newpoint.x() - m_selectedItem->pos().x(), newrect.bottom() + m_selectedItem->pos().y() - newpoint.y())); - m_selectedItem->setPos(QPointF(m_selectedItem->pos().x(), newpoint.y())); + if (newpoint.x() > m_selectedItem->pos().x() && newpoint.y() < newrect.bottom() + m_selectedItem->pos().y()) { + newrect.setBottomRight(QPointF(newpoint.x() - m_selectedItem->pos().x(), newrect.bottom() + m_selectedItem->pos().y() - newpoint.y())); + m_selectedItem->setPos(QPointF(m_selectedItem->pos().x(), newpoint.y())); + } break; case BottomRight: - newrect.setBottomRight(newpoint - m_selectedItem->pos()); + if (newpoint.x() > m_selectedItem->pos().x() && newpoint.y() > m_selectedItem->pos().y()) { + newrect.setBottomRight(newpoint - m_selectedItem->pos()); + } break; case Left: - newrect.setRight(m_selectedItem->pos().x() + newrect.width() - newpoint.x()); - m_selectedItem->setPos(QPointF(newpoint.x(), m_selectedItem->pos().y())); + if (newpoint.x() < newrect.right() + m_selectedItem->pos().x()) { + newrect.setRight(m_selectedItem->pos().x() + newrect.width() - newpoint.x()); + m_selectedItem->setPos(QPointF(newpoint.x(), m_selectedItem->pos().y())); + } break; case Right: - newrect.setRight(newpoint.x() - m_selectedItem->pos().x()); + if (newpoint.x() > m_selectedItem->pos().x()) { + newrect.setRight(newpoint.x() - m_selectedItem->pos().x()); + } break; case Up: - newrect.setBottom(m_selectedItem->pos().y() + newrect.bottom() - newpoint.y()); - m_selectedItem->setPos(QPointF(m_selectedItem->pos().x(), newpoint.y())); + if (newpoint.y() < newrect.bottom() + m_selectedItem->pos().y()) { + newrect.setBottom(m_selectedItem->pos().y() + newrect.bottom() - newpoint.y()); + m_selectedItem->setPos(QPointF(m_selectedItem->pos().x(), newpoint.y())); + } break; case Down: - newrect.setBottom(newpoint.y() - m_selectedItem->pos().y()); + if (newpoint.y() > m_selectedItem->pos().y()) { + newrect.setBottom(newpoint.y() - m_selectedItem->pos().y()); + } break; default: QPointF diff = e->scenePos() - m_sceneClickPoint;