@@ -128,7 +128,7 @@ void QgsComposerMouseHandles::drawSelectedItemBounds( QPainter* painter )
128
128
{
129
129
// if currently resizing, calculate relative resize of this item
130
130
itemBounds = itemSceneBounds;
131
- relativeResizeRect ( itemBounds, QRectF ( mBeginHandlePos .x (), mBeginHandlePos .y (), mBeginHandleWidth , mBeginHandleHeight ), sceneBoundingRect () );
131
+ relativeResizeRect ( itemBounds, QRectF ( mBeginHandlePos .x (), mBeginHandlePos .y (), mBeginHandleWidth , mBeginHandleHeight ), mResizeRect );
132
132
itemBounds = mapRectFromScene ( itemBounds );
133
133
}
134
134
else
@@ -446,7 +446,7 @@ void QgsComposerMouseHandles::mouseReleaseEvent( QGraphicsSceneMouseEvent* event
446
446
QgsComposerItemCommand* subcommand = new QgsComposerItemCommand ( *itemIter, " " , parentCommand );
447
447
subcommand->savePreviousState ();
448
448
QRectF itemBounds = ( *itemIter )->sceneBoundingRect ();
449
- relativeResizeRect ( itemBounds, QRectF ( mBeginHandlePos .x (), mBeginHandlePos .y (), mBeginHandleWidth , mBeginHandleHeight ), sceneBoundingRect () );
449
+ relativeResizeRect ( itemBounds, QRectF ( mBeginHandlePos .x (), mBeginHandlePos .y (), mBeginHandleWidth , mBeginHandleHeight ), mResizeRect );
450
450
( *itemIter )->setSceneRect ( itemBounds );
451
451
subcommand->saveAfterState ();
452
452
}
@@ -495,6 +495,7 @@ void QgsComposerMouseHandles::mousePressEvent( QGraphicsSceneMouseEvent* event )
495
495
mCurrentMouseMoveAction != QgsComposerMouseHandles::NoAction )
496
496
{
497
497
mIsResizing = true ;
498
+ mResizeRect = QRectF ( mBeginHandlePos .x (), mBeginHandlePos .y (), mBeginHandleWidth , mBeginHandleHeight );
498
499
}
499
500
500
501
}
@@ -717,10 +718,14 @@ void QgsComposerMouseHandles::resizeMouseMove( const QPointF& currentPosition, b
717
718
718
719
// update selection handle rectangle
719
720
QTransform itemTransform;
720
- itemTransform.translate ( mx, my );
721
+ // make sure selection handle size rectangle is normalized (ie, left coord < right coord)
722
+ double translateX = mBeginHandleWidth + rx > 0 ? mx : mx + mBeginHandleWidth + rx;
723
+ double translateY = mBeginHandleHeight + ry > 0 ? my : my + mBeginHandleHeight + ry;
724
+ itemTransform.translate ( translateX, translateY );
725
+
721
726
setTransform ( itemTransform );
722
- QRectF itemRect ( 0 , 0 , mBeginHandleWidth + rx, mBeginHandleHeight + ry );
723
- setRect ( itemRect );
727
+ mResizeRect = QRectF ( mBeginHandlePos . x () + mx, mBeginHandlePos . y () + my , mBeginHandleWidth + rx, mBeginHandleHeight + ry );
728
+ setRect ( 0 , 0 , fabs ( mBeginHandleWidth + rx ), fabs ( mBeginHandleHeight + ry ) );
724
729
}
725
730
726
731
void QgsComposerMouseHandles::relativeResizeRect ( QRectF& rectToResize, const QRectF& boundsBefore, const QRectF& boundsAfter )
0 commit comments