Skip to content

Commit d02be61

Browse files
committed
[composer] Make sure that zooming in/out of composer with mouse wheel always results in an exact change in zoom.
1 parent c6d0bef commit d02be61

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

src/gui/qgscomposerview.cpp

+20-20
Original file line numberDiff line numberDiff line change
@@ -1259,6 +1259,11 @@ void QgsComposerView::wheelZoom( QWheelEvent * event )
12591259
int wheelAction = mySettings.value( "/qgis/wheel_action", 2 ).toInt();
12601260
double zoomFactor = mySettings.value( "/qgis/zoom_factor", 2 ).toDouble();
12611261

1262+
if (( QgsMapCanvas::WheelAction )wheelAction == QgsMapCanvas::WheelNothing )
1263+
{
1264+
return;
1265+
}
1266+
12621267
if ( event->modifiers() & Qt::ControlModifier )
12631268
{
12641269
//holding ctrl while wheel zooming results in a finer zoom
@@ -1276,25 +1281,12 @@ void QgsComposerView::wheelZoom( QWheelEvent * event )
12761281
//transform the mouse pos to scene coordinates
12771282
QPointF scenePoint = mapToScene( event->pos() );
12781283

1279-
//zoom composition, respecting wheel action setting
1284+
//adjust view center according to wheel action setting
12801285
switch (( QgsMapCanvas::WheelAction )wheelAction )
12811286
{
1282-
case QgsMapCanvas::WheelZoom:
1283-
// zoom without changing extent
1284-
if ( zoomIn )
1285-
{
1286-
scale( zoomFactor, zoomFactor );
1287-
}
1288-
else
1289-
{
1290-
scale( 1 / zoomFactor, 1 / zoomFactor );
1291-
}
1292-
break;
1293-
12941287
case QgsMapCanvas::WheelZoomAndRecenter:
12951288
{
1296-
visibleRect.scale( scaleFactor, scenePoint.x(), scenePoint.y() );
1297-
fitInView( visibleRect.toRectF(), Qt::KeepAspectRatio );
1289+
centerOn( scenePoint.x(), scenePoint.y() );
12981290
break;
12991291
}
13001292

@@ -1303,14 +1295,22 @@ void QgsComposerView::wheelZoom( QWheelEvent * event )
13031295
QgsPoint oldCenter( visibleRect.center() );
13041296
QgsPoint newCenter( scenePoint.x() + (( oldCenter.x() - scenePoint.x() ) * scaleFactor ),
13051297
scenePoint.y() + (( oldCenter.y() - scenePoint.y() ) * scaleFactor ) );
1306-
1307-
visibleRect.scale( scaleFactor, newCenter.x(), newCenter.y() );
1308-
fitInView( visibleRect.toRectF(), Qt::KeepAspectRatio );
1298+
centerOn( newCenter.x(), newCenter.y() );
13091299
break;
13101300
}
13111301

1312-
case QgsMapCanvas::WheelNothing:
1313-
return;
1302+
default:
1303+
break;
1304+
}
1305+
1306+
//zoom composition
1307+
if ( zoomIn )
1308+
{
1309+
scale( zoomFactor, zoomFactor );
1310+
}
1311+
else
1312+
{
1313+
scale( 1 / zoomFactor, 1 / zoomFactor );
13141314
}
13151315

13161316
//update composition for new zoom

0 commit comments

Comments
 (0)