|
|
@ -254,10 +254,10 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
|
|
|
qreal moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180); |
|
|
|
qreal moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180); |
|
|
|
qreal width = delegated()->boundingRect().width() * mTotalScaleX; |
|
|
|
qreal width = delegated()->boundingRect().width() * mTotalScaleX; |
|
|
|
qreal height = delegated()->boundingRect().height() * mTotalScaleY; |
|
|
|
qreal height = delegated()->boundingRect().height() * mTotalScaleY; |
|
|
|
mTranslateX = moveX; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(mOperationMode == Scaling) |
|
|
|
if(mOperationMode == Scaling) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
mTranslateX = moveX; |
|
|
|
// Perform the resize
|
|
|
|
// Perform the resize
|
|
|
|
if (resizingBottomRight()) |
|
|
|
if (resizingBottomRight()) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -353,6 +353,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
|
|
|
} |
|
|
|
} |
|
|
|
else if (mOperationMode == Resizing) |
|
|
|
else if (mOperationMode == Resizing) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
mTranslateX = moveX; |
|
|
|
UBResizableGraphicsItem* resizableItem = dynamic_cast<UBResizableGraphicsItem*>(delegated()); |
|
|
|
UBResizableGraphicsItem* resizableItem = dynamic_cast<UBResizableGraphicsItem*>(delegated()); |
|
|
|
|
|
|
|
|
|
|
|
if (resizableItem) |
|
|
|
if (resizableItem) |
|
|
@ -390,12 +391,14 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
|
|
|
|
|
|
|
|
|
|
|
if (rotating()) |
|
|
|
if (rotating()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
mTranslateX = 0; |
|
|
|
|
|
|
|
mTranslateY = 0; |
|
|
|
|
|
|
|
|
|
|
|
QLineF startLine(sceneBoundingRect().center(), event->lastScenePos()); |
|
|
|
QLineF startLine(sceneBoundingRect().center(), event->lastScenePos()); |
|
|
|
QLineF currentLine(sceneBoundingRect().center(), event->scenePos()); |
|
|
|
QLineF currentLine(sceneBoundingRect().center(), event->scenePos()); |
|
|
|
mAngle += startLine.angleTo(currentLine); |
|
|
|
mAngle += startLine.angleTo(currentLine); |
|
|
|
|
|
|
|
|
|
|
|
if ((int)mAngle % 45 >= 45 - mAngleTolerance
|
|
|
|
if ((int)mAngle % 45 >= 45 - mAngleTolerance || (int)mAngle % 45 <= mAngleTolerance) |
|
|
|
|| (int)mAngle % 45 <= mAngleTolerance) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
mAngle = qRound(mAngle / 45) * 45; |
|
|
|
mAngle = qRound(mAngle / 45) * 45; |
|
|
|
mAngleOffset += startLine.angleTo(currentLine); |
|
|
|
mAngleOffset += startLine.angleTo(currentLine); |
|
|
@ -405,8 +408,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) |
|
|
|
mAngleOffset = 0; |
|
|
|
mAngleOffset = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if ((int)mAngle % 30 >= 30 - mAngleTolerance |
|
|
|
else if ((int)mAngle % 30 >= 30 - mAngleTolerance || (int)mAngle % 30 <= mAngleTolerance) |
|
|
|
|| (int)mAngle % 30 <= mAngleTolerance) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
mAngle = qRound(mAngle / 30) * 30; |
|
|
|
mAngle = qRound(mAngle / 30) * 30; |
|
|
|
mAngleOffset += startLine.angleTo(currentLine); |
|
|
|
mAngleOffset += startLine.angleTo(currentLine); |
|
|
@ -498,10 +500,16 @@ QTransform UBGraphicsDelegateFrame::buildTransform() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QTransform tr; |
|
|
|
QTransform tr; |
|
|
|
QPointF center = delegated()->boundingRect().center(); |
|
|
|
QPointF center = delegated()->boundingRect().center(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Translate
|
|
|
|
tr.translate(mTotalTranslateX + mTranslateX, mTotalTranslateY + mTranslateY); |
|
|
|
tr.translate(mTotalTranslateX + mTranslateX, mTotalTranslateY + mTranslateY); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Set angle
|
|
|
|
tr.translate(center.x() * mTotalScaleX * mScaleX, center.y() * mTotalScaleY * mScaleY); |
|
|
|
tr.translate(center.x() * mTotalScaleX * mScaleX, center.y() * mTotalScaleY * mScaleY); |
|
|
|
tr.rotate(-mAngle); |
|
|
|
tr.rotate(-mAngle); |
|
|
|
tr.translate(-center.x() * mTotalScaleX * mScaleX, -center.y() * mTotalScaleY * mScaleY); |
|
|
|
tr.translate(-center.x() * mTotalScaleX * mScaleX, -center.y() * mTotalScaleY * mScaleY); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Scale
|
|
|
|
tr.scale(mTotalScaleX * mScaleX, mTotalScaleY * mScaleY); |
|
|
|
tr.scale(mTotalScaleX * mScaleX, mTotalScaleY * mScaleY); |
|
|
|
return tr; |
|
|
|
return tr; |
|
|
|
} |
|
|
|
} |
|
|
@ -565,35 +573,53 @@ void UBGraphicsDelegateFrame::setVisible(bool visible) |
|
|
|
|
|
|
|
|
|
|
|
void UBGraphicsDelegateFrame::positionHandles() |
|
|
|
void UBGraphicsDelegateFrame::positionHandles() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// TODO: Check why the height is modified if the user rotates the item more than 90°
|
|
|
|
|
|
|
|
|
|
|
|
QRectF itemRect = delegated()->boundingRect(); |
|
|
|
QRectF itemRect = delegated()->boundingRect(); |
|
|
|
QTransform itemTransform = delegated()->sceneTransform(); |
|
|
|
QTransform itemTransform = delegated()->sceneTransform(); |
|
|
|
QPointF topLeft = itemTransform.map(itemRect.topLeft()); |
|
|
|
QPointF topLeft = itemTransform.map(itemRect.topLeft()); |
|
|
|
QPointF topRight = itemTransform.map(itemRect.topRight()); |
|
|
|
QPointF topRight = itemTransform.map(itemRect.topRight()); |
|
|
|
QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft()); |
|
|
|
QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft()); |
|
|
|
|
|
|
|
QPointF bottomRight = itemTransform.map(itemRect.bottomRight()); |
|
|
|
QPointF center = itemTransform.map(itemRect.center()); |
|
|
|
QPointF center = itemTransform.map(itemRect.center()); |
|
|
|
|
|
|
|
int rotateHeight = QLineF(topLeft, bottomLeft).length(); |
|
|
|
|
|
|
|
|
|
|
|
// Handle the mirroring
|
|
|
|
// Handle the mirroring
|
|
|
|
if(topLeft.x() > topRight.x()){ |
|
|
|
if(topLeft.x() > topRight.x()){ |
|
|
|
QPointF tmp = topRight; |
|
|
|
QPointF topTmp = topRight; |
|
|
|
|
|
|
|
QPointF bottomTmp = bottomRight; |
|
|
|
topRight = topLeft; |
|
|
|
topRight = topLeft; |
|
|
|
topLeft = tmp; |
|
|
|
topLeft = topTmp; |
|
|
|
bottomLeft.setX(topLeft.x()); |
|
|
|
bottomRight = bottomLeft; |
|
|
|
|
|
|
|
bottomLeft = bottomTmp; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(bottomLeft.y() > topLeft.y()){ |
|
|
|
|
|
|
|
QPointF leftTmp = bottomLeft; |
|
|
|
|
|
|
|
QPointF rightTmp = bottomRight; |
|
|
|
|
|
|
|
bottomLeft = topLeft; |
|
|
|
|
|
|
|
topLeft = leftTmp; |
|
|
|
|
|
|
|
bottomRight = topRight; |
|
|
|
|
|
|
|
topRight = rightTmp; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QLineF topLine(topLeft, topRight); |
|
|
|
QLineF topLine(topLeft, topRight); |
|
|
|
qreal angle = topLine.angle(); |
|
|
|
qreal angle = topLine.angle(); |
|
|
|
qreal width = topLine.length(); |
|
|
|
qreal width = topLine.length(); |
|
|
|
|
|
|
|
|
|
|
|
QLineF leftLine(topLeft, bottomLeft); |
|
|
|
QLineF leftLine(topLeft, bottomLeft); |
|
|
|
qreal height = leftLine.length(); |
|
|
|
qreal height = leftLine.length(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int h = rotating()?rotateHeight:height; |
|
|
|
|
|
|
|
|
|
|
|
if (mVisible) |
|
|
|
if (mVisible) |
|
|
|
{ |
|
|
|
{ |
|
|
|
setRect(center.x() - mFrameWidth - width / 2, center.y() - mFrameWidth - height / 2, |
|
|
|
qDebug() << center.y(); |
|
|
|
width + 2 * mFrameWidth, height + 2 * mFrameWidth); |
|
|
|
setRect(center.x() - mFrameWidth - width / 2, center.y() - mFrameWidth - h / 2, width + 2 * mFrameWidth, h + 2 * mFrameWidth); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
setRect(center.x() - width / 2, center.y() - height / 2, width, height); |
|
|
|
setRect(center.x() - width / 2, center.y() - h / 2, width, h); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
resetTransform(); |
|
|
|
resetTransform(); |
|
|
@ -680,30 +706,38 @@ UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF |
|
|
|
return ResizeBottomRight; |
|
|
|
return ResizeBottomRight; |
|
|
|
else if (bottomResizeGripRect().contains(pos)){ |
|
|
|
else if (bottomResizeGripRect().contains(pos)){ |
|
|
|
if(mMirrorY){ |
|
|
|
if(mMirrorY){ |
|
|
|
|
|
|
|
qDebug() << "Top"; |
|
|
|
return ResizeTop; |
|
|
|
return ResizeTop; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
|
|
|
|
qDebug() << "Bottom"; |
|
|
|
return ResizeBottom; |
|
|
|
return ResizeBottom; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (leftResizeGripRect().contains(pos)){ |
|
|
|
else if (leftResizeGripRect().contains(pos)){ |
|
|
|
if(mMirrorX){ |
|
|
|
if(mMirrorX){ |
|
|
|
|
|
|
|
qDebug() << "Right"; |
|
|
|
return ResizeRight; |
|
|
|
return ResizeRight; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
|
|
|
|
qDebug() << "Left"; |
|
|
|
return ResizeLeft; |
|
|
|
return ResizeLeft; |
|
|
|
} |
|
|
|
} |
|
|
|
return ResizeLeft; |
|
|
|
return ResizeLeft; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (rightResizeGripRect().contains(pos)){ |
|
|
|
else if (rightResizeGripRect().contains(pos)){ |
|
|
|
if(mMirrorX){ |
|
|
|
if(mMirrorX){ |
|
|
|
|
|
|
|
qDebug() << "Left"; |
|
|
|
return ResizeLeft; |
|
|
|
return ResizeLeft; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
|
|
|
|
qDebug() << "Right"; |
|
|
|
return ResizeRight; |
|
|
|
return ResizeRight; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (topResizeGripRect().contains(pos)){ |
|
|
|
else if (topResizeGripRect().contains(pos)){ |
|
|
|
if(mMirrorY){ |
|
|
|
if(mMirrorY){ |
|
|
|
|
|
|
|
qDebug() << "Bottom"; |
|
|
|
return ResizeBottom; |
|
|
|
return ResizeBottom; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
|
|
|
|
qDebug() << "Top"; |
|
|
|
return ResizeTop; |
|
|
|
return ResizeTop; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|