Skip to content

Commit

Permalink
Fix graphical corruption during item resize
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Oct 13, 2013
1 parent a6a82fb commit e7a4ba7
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/core/composer/qgscomposermousehandles.cpp
Expand Up @@ -128,7 +128,7 @@ void QgsComposerMouseHandles::drawSelectedItemBounds( QPainter* painter )
{
//if currently resizing, calculate relative resize of this item
itemBounds = itemSceneBounds;
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), sceneBoundingRect() );
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), mResizeRect );
itemBounds = mapRectFromScene( itemBounds );
}
else
Expand Down Expand Up @@ -446,7 +446,7 @@ void QgsComposerMouseHandles::mouseReleaseEvent( QGraphicsSceneMouseEvent* event
QgsComposerItemCommand* subcommand = new QgsComposerItemCommand( *itemIter, "", parentCommand );
subcommand->savePreviousState();
QRectF itemBounds = ( *itemIter )->sceneBoundingRect();
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), sceneBoundingRect() );
relativeResizeRect( itemBounds, QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight ), mResizeRect );
( *itemIter )->setSceneRect( itemBounds );
subcommand->saveAfterState();
}
Expand Down Expand Up @@ -495,6 +495,7 @@ void QgsComposerMouseHandles::mousePressEvent( QGraphicsSceneMouseEvent* event )
mCurrentMouseMoveAction != QgsComposerMouseHandles::NoAction )
{
mIsResizing = true;
mResizeRect = QRectF( mBeginHandlePos.x(), mBeginHandlePos.y(), mBeginHandleWidth, mBeginHandleHeight );
}

}
Expand Down Expand Up @@ -717,10 +718,14 @@ void QgsComposerMouseHandles::resizeMouseMove( const QPointF& currentPosition, b

//update selection handle rectangle
QTransform itemTransform;
itemTransform.translate( mx, my );
//make sure selection handle size rectangle is normalized (ie, left coord < right coord)
double translateX = mBeginHandleWidth + rx > 0 ? mx : mx + mBeginHandleWidth + rx;
double translateY = mBeginHandleHeight + ry > 0 ? my : my + mBeginHandleHeight + ry;
itemTransform.translate( translateX, translateY );

setTransform( itemTransform );
QRectF itemRect( 0, 0, mBeginHandleWidth + rx, mBeginHandleHeight + ry );
setRect( itemRect );
mResizeRect = QRectF( mBeginHandlePos.x() + mx, mBeginHandlePos.y() + my, mBeginHandleWidth + rx, mBeginHandleHeight + ry );
setRect( 0, 0, fabs( mBeginHandleWidth + rx ), fabs( mBeginHandleHeight + ry ) );
}

void QgsComposerMouseHandles::relativeResizeRect( QRectF& rectToResize, const QRectF& boundsBefore, const QRectF& boundsAfter )
Expand Down
2 changes: 2 additions & 0 deletions src/core/composer/qgscomposermousehandles.h
Expand Up @@ -110,6 +110,8 @@ class CORE_EXPORT QgsComposerMouseHandles: public QObject, public QGraphicsRectI
double mBeginHandleWidth;
double mBeginHandleHeight;

QRectF mResizeRect;

/**True if user is currently dragging items*/
bool mIsDragging;
/**True is user is currently resizing items*/
Expand Down

0 comments on commit e7a4ba7

Please sign in to comment.