Skip to content

Commit 0ee7b4c

Browse files
authoredMar 20, 2023
Merge pull request #52303 from YoannQDQ/reverse-wheel-zoom
2 parents 56ce8ca + dc8603d commit 0ee7b4c

File tree

8 files changed

+37
-11
lines changed

8 files changed

+37
-11
lines changed
 

‎src/app/options/qgsoptions.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti
806806

807807
setZoomFactorValue();
808808
spinZoomFactor->setClearValue( 200 );
809+
reverseWheelZoom->setChecked( mSettings->value( QStringLiteral( "/qgis/reverse_wheel_zoom" ), false ).toBool() );
809810

810811
// predefined scales for scale combobox
811812
const QStringList scalePaths = QgsSettingsRegistryCore::settingsMapScales->value();
@@ -1680,6 +1681,7 @@ void QgsOptions::saveOptions()
16801681
mSettings->setValue( QStringLiteral( "/qgis/default_measure_color_blue" ), myColor.blue() );
16811682

16821683
mSettings->setValue( QStringLiteral( "/qgis/zoom_factor" ), zoomFactorValue() );
1684+
mSettings->setValue( QStringLiteral( "/qgis/reverse_wheel_zoom" ), reverseWheelZoom->isChecked() );
16831685

16841686
//digitizing
16851687
QgsSettingsRegistryCore::settingsDigitizingLineWidth->setValue( mLineWidthSpinBox->value() );

‎src/gui/elevation/qgselevationprofilecanvas.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,8 @@ void QgsElevationProfileCanvas::wheelZoom( QWheelEvent *event )
553553
//get mouse wheel zoom behavior settings
554554
QgsSettings settings;
555555
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
556+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
557+
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;
556558

557559
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
558560
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( event->angleDelta().y() );
@@ -564,7 +566,6 @@ void QgsElevationProfileCanvas::wheelZoom( QWheelEvent *event )
564566
}
565567

566568
//calculate zoom scale factor
567-
bool zoomIn = event->angleDelta().y() > 0;
568569
double scaleFactor = ( zoomIn ? 1 / zoomFactor : zoomFactor );
569570

570571
QRectF viewportRect = mPlotItem->plotArea();

‎src/gui/layout/qgslayoutview.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,8 @@ void QgsLayoutView::wheelZoom( QWheelEvent *event )
12051205
//get mouse wheel zoom behavior settings
12061206
QgsSettings settings;
12071207
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
1208+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
1209+
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;
12081210

12091211
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
12101212
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( event->angleDelta().y() );
@@ -1216,7 +1218,6 @@ void QgsLayoutView::wheelZoom( QWheelEvent *event )
12161218
}
12171219

12181220
//calculate zoom scale factor
1219-
bool zoomIn = event->angleDelta().y() > 0;
12201221
double scaleFactor = ( zoomIn ? 1 / zoomFactor : zoomFactor );
12211222

12221223
//get current visible part of scene

‎src/gui/layout/qgslayoutviewtoolmoveitemcontent.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ void QgsLayoutViewToolMoveItemContent::wheelEvent( QWheelEvent *event )
107107

108108
const QgsSettings settings;
109109
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2.0 ).toDouble();
110+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
111+
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;
110112

111113
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
112114
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( event->angleDelta().y() );
@@ -118,7 +120,6 @@ void QgsLayoutViewToolMoveItemContent::wheelEvent( QWheelEvent *event )
118120
}
119121

120122
//calculate zoom scale factor
121-
const bool zoomIn = event->angleDelta().y() > 0;
122123
const double scaleFactor = ( zoomIn ? zoomFactor : 1 / zoomFactor );
123124

124125
const QPointF itemPoint = item->mapFromScene( scenePoint );

‎src/gui/processing/models/qgsmodelgraphicsview.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ void QgsModelGraphicsView::wheelZoom( QWheelEvent *event )
128128
//get mouse wheel zoom behavior settings
129129
QgsSettings settings;
130130
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
131+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
132+
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;
131133

132134
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
133135
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( event->angleDelta().y() );
@@ -139,7 +141,6 @@ void QgsModelGraphicsView::wheelZoom( QWheelEvent *event )
139141
}
140142

141143
//calculate zoom scale factor
142-
bool zoomIn = event->angleDelta().y() > 0;
143144
double scaleFactor = ( zoomIn ? 1 / zoomFactor : zoomFactor );
144145

145146
//get current visible part of scene

‎src/gui/qgsmapcanvas.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,7 +2596,10 @@ void QgsMapCanvas::wheelEvent( QWheelEvent *e )
25962596
return;
25972597
}
25982598

2599-
double zoomFactor = e->angleDelta().y() > 0 ? 1. / zoomInFactor() : zoomOutFactor();
2599+
QgsSettings settings;
2600+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
2601+
bool zoomIn = reverseZoom ? e->angleDelta().y() < 0 : e->angleDelta().y() > 0;
2602+
double zoomFactor = zoomIn ? 1. / zoomInFactor() : zoomOutFactor();
26002603

26012604
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
26022605
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( e->angleDelta().y() );
@@ -2607,7 +2610,7 @@ void QgsMapCanvas::wheelEvent( QWheelEvent *e )
26072610
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 20.0;
26082611
}
26092612

2610-
double signedWheelFactor = e->angleDelta().y() > 0 ? 1 / zoomFactor : zoomFactor;
2613+
double signedWheelFactor = zoomIn ? 1 / zoomFactor : zoomFactor;
26112614

26122615
// zoom map to mouse cursor by scaling
26132616
QgsPointXY oldCenter = center();
@@ -2621,7 +2624,7 @@ void QgsMapCanvas::wheelEvent( QWheelEvent *e )
26212624

26222625
void QgsMapCanvas::setWheelFactor( double factor )
26232626
{
2624-
mWheelZoomFactor = factor;
2627+
mWheelZoomFactor = std::max( factor, 1.01 );
26252628
}
26262629

26272630
void QgsMapCanvas::zoomIn()

‎src/gui/qgsmapoverviewcanvas.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,10 @@ void QgsMapOverviewCanvas::mouseReleaseEvent( QMouseEvent *e )
147147

148148
void QgsMapOverviewCanvas::wheelEvent( QWheelEvent *e )
149149
{
150-
double zoomFactor = e->angleDelta().y() > 0 ? 1. / mMapCanvas->zoomInFactor() : mMapCanvas->zoomOutFactor();
150+
QgsSettings settings;
151+
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
152+
bool zoomIn = reverseZoom ? e->angleDelta().y() < 0 : e->angleDelta().y() > 0;
153+
double zoomFactor = zoomIn ? 1. / mMapCanvas->zoomInFactor() : mMapCanvas->zoomOutFactor();
151154

152155
// "Normal" mouse have an angle delta of 120, precision mouses provide data faster, in smaller steps
153156
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( e->angleDelta().y() );
@@ -158,7 +161,7 @@ void QgsMapOverviewCanvas::wheelEvent( QWheelEvent *e )
158161
zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 20.0;
159162
}
160163

161-
const double signedWheelFactor = e->angleDelta().y() > 0 ? 1 / zoomFactor : zoomFactor;
164+
const double signedWheelFactor = zoomIn ? 1 / zoomFactor : zoomFactor;
162165

163166
const QgsMapToPixel &cXf = mSettings.mapToPixel();
164167
const QgsPointXY center = cXf.toMapCoordinates( e->position().x(), e->position().y() );

‎src/ui/qgsoptionsbase.ui

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3179,10 +3179,10 @@ The bigger the number, the faster zooming with the mouse wheel will be.</string>
31793179
<number>100</number>
31803180
</property>
31813181
<property name="maximum">
3182-
<number>999999999</number>
3182+
<number>1000</number>
31833183
</property>
31843184
<property name="singleStep">
3185-
<number>100</number>
3185+
<number>10</number>
31863186
</property>
31873187
<property name="value">
31883188
<number>200</number>
@@ -3192,6 +3192,20 @@ The bigger the number, the faster zooming with the mouse wheel will be.</string>
31923192
</property>
31933193
</widget>
31943194
</item>
3195+
<item row="1" column="0">
3196+
<widget class="QLabel" name="label_21">
3197+
<property name="text">
3198+
<string>Reverse wheel zoom</string>
3199+
</property>
3200+
</widget>
3201+
</item>
3202+
<item row="1" column="1">
3203+
<widget class="QCheckBox" name="reverseWheelZoom">
3204+
<property name="text">
3205+
<string/>
3206+
</property>
3207+
</widget>
3208+
</item>
31953209
</layout>
31963210
</widget>
31973211
</item>

0 commit comments

Comments
 (0)
Please sign in to comment.