Skip to content

Commit

Permalink
Merge pull request #52303 from YoannQDQ/reverse-wheel-zoom
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Mar 20, 2023
2 parents 56ce8ca + dc8603d commit 0ee7b4c
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 11 deletions.
2 changes: 2 additions & 0 deletions src/app/options/qgsoptions.cpp
Expand Up @@ -806,6 +806,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti

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

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

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

//digitizing
QgsSettingsRegistryCore::settingsDigitizingLineWidth->setValue( mLineWidthSpinBox->value() );
Expand Down
3 changes: 2 additions & 1 deletion src/gui/elevation/qgselevationprofilecanvas.cpp
Expand Up @@ -553,6 +553,8 @@ void QgsElevationProfileCanvas::wheelZoom( QWheelEvent *event )
//get mouse wheel zoom behavior settings
QgsSettings settings;
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;

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

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

QRectF viewportRect = mPlotItem->plotArea();
Expand Down
3 changes: 2 additions & 1 deletion src/gui/layout/qgslayoutview.cpp
Expand Up @@ -1205,6 +1205,8 @@ void QgsLayoutView::wheelZoom( QWheelEvent *event )
//get mouse wheel zoom behavior settings
QgsSettings settings;
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;

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

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

//get current visible part of scene
Expand Down
3 changes: 2 additions & 1 deletion src/gui/layout/qgslayoutviewtoolmoveitemcontent.cpp
Expand Up @@ -107,6 +107,8 @@ void QgsLayoutViewToolMoveItemContent::wheelEvent( QWheelEvent *event )

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

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

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

const QPointF itemPoint = item->mapFromScene( scenePoint );
Expand Down
3 changes: 2 additions & 1 deletion src/gui/processing/models/qgsmodelgraphicsview.cpp
Expand Up @@ -128,6 +128,8 @@ void QgsModelGraphicsView::wheelZoom( QWheelEvent *event )
//get mouse wheel zoom behavior settings
QgsSettings settings;
double zoomFactor = settings.value( QStringLiteral( "qgis/zoom_factor" ), 2 ).toDouble();
bool reverseZoom = settings.value( QStringLiteral( "qgis/reverse_wheel_zoom" ), false ).toBool();
bool zoomIn = reverseZoom ? event->angleDelta().y() < 0 : event->angleDelta().y() > 0;

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

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

//get current visible part of scene
Expand Down
9 changes: 6 additions & 3 deletions src/gui/qgsmapcanvas.cpp
Expand Up @@ -2596,7 +2596,10 @@ void QgsMapCanvas::wheelEvent( QWheelEvent *e )
return;
}

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

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

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

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

void QgsMapCanvas::setWheelFactor( double factor )
{
mWheelZoomFactor = factor;
mWheelZoomFactor = std::max( factor, 1.01 );
}

void QgsMapCanvas::zoomIn()
Expand Down
7 changes: 5 additions & 2 deletions src/gui/qgsmapoverviewcanvas.cpp
Expand Up @@ -147,7 +147,10 @@ void QgsMapOverviewCanvas::mouseReleaseEvent( QMouseEvent *e )

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

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

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

const QgsMapToPixel &cXf = mSettings.mapToPixel();
const QgsPointXY center = cXf.toMapCoordinates( e->position().x(), e->position().y() );
Expand Down
18 changes: 16 additions & 2 deletions src/ui/qgsoptionsbase.ui
Expand Up @@ -3179,10 +3179,10 @@ The bigger the number, the faster zooming with the mouse wheel will be.</string>
<number>100</number>
</property>
<property name="maximum">
<number>999999999</number>
<number>1000</number>
</property>
<property name="singleStep">
<number>100</number>
<number>10</number>
</property>
<property name="value">
<number>200</number>
Expand All @@ -3192,6 +3192,20 @@ The bigger the number, the faster zooming with the mouse wheel will be.</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Reverse wheel zoom</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="reverseWheelZoom">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down

0 comments on commit 0ee7b4c

Please sign in to comment.