Skip to content

Commit e7a4ba7

Browse files
committed
Fix graphical corruption during item resize
1 parent a6a82fb commit e7a4ba7

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/core/composer/qgscomposermousehandles.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ void QgsComposerMouseHandles::drawSelectedItemBounds( QPainter* painter )
128128
{
129129
//if currently resizing, calculate relative resize of this item
130130
itemBounds = itemSceneBounds;
131-
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), sceneBoundingRect() );
131+
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), mResizeRect );
132132
itemBounds = mapRectFromScene( itemBounds );
133133
}
134134
else
@@ -446,7 +446,7 @@ void QgsComposerMouseHandles::mouseReleaseEvent( QGraphicsSceneMouseEvent* event
446446
QgsComposerItemCommand* subcommand = new QgsComposerItemCommand( *itemIter, "", parentCommand );
447447
subcommand->savePreviousState();
448448
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 );
450450
( *itemIter )->setSceneRect( itemBounds );
451451
subcommand->saveAfterState();
452452
}
@@ -495,6 +495,7 @@ void QgsComposerMouseHandles::mousePressEvent( QGraphicsSceneMouseEvent* event )
495495
mCurrentMouseMoveAction != QgsComposerMouseHandles::NoAction )
496496
{
497497
mIsResizing = true;
498+
mResizeRect = QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight );
498499
}
499500

500501
}
@@ -717,10 +718,14 @@ void QgsComposerMouseHandles::resizeMouseMove( const QPointF& currentPosition, b
717718

718719
//update selection handle rectangle
719720
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+
721726
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 ) );
724729
}
725730

726731
void QgsComposerMouseHandles::relativeResizeRect( QRectF& rectToResize, const QRectF& boundsBefore, const QRectF& boundsAfter )

src/core/composer/qgscomposermousehandles.h

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ class CORE_EXPORT QgsComposerMouseHandles: public QObject, public QGraphicsRectI
110110
double mBeginHandleWidth;
111111
double mBeginHandleHeight;
112112

113+
QRectF mResizeRect;
114+
113115
/**True if user is currently dragging items*/
114116
bool mIsDragging;
115117
/**True is user is currently resizing items*/

0 commit comments

Comments
 (0)