diff --git a/python/gui/auto_generated/qgssymbolbutton.sip.in b/python/gui/auto_generated/qgssymbolbutton.sip.in index 026ebaeace6..b52dd6746c4 100644 --- a/python/gui/auto_generated/qgssymbolbutton.sip.in +++ b/python/gui/auto_generated/qgssymbolbutton.sip.in @@ -264,6 +264,9 @@ Emitted when the symbol's settings are changed. virtual void dropEvent( QDropEvent *e ); + virtual void wheelEvent( QWheelEvent *event ); + + }; /************************************************************************ diff --git a/src/gui/qgssymbolbutton.cpp b/src/gui/qgssymbolbutton.cpp index 0c375f38c41..de256dd0975 100644 --- a/src/gui/qgssymbolbutton.cpp +++ b/src/gui/qgssymbolbutton.cpp @@ -388,6 +388,54 @@ void QgsSymbolButton::dropEvent( QDropEvent *e ) updatePreview(); } +void QgsSymbolButton::wheelEvent( QWheelEvent *event ) +{ + if ( isEnabled() && mSymbol ) + { + bool symbolChanged = false; + const double increment = ( ( event->modifiers() & Qt::ControlModifier ) ? 0.1 : 1 ) * + event->angleDelta().y() > 0 ? 1 : -1; + switch ( mType ) + { + case Qgis::SymbolType::Marker: + { + QgsMarkerSymbol *marker = dynamic_cast( mSymbol.get() ); + if ( marker ) + { + const double size = std::max( 0.0, marker->size() + increment ); + marker->setSize( size ); + symbolChanged = true; + } + break; + } + + case Qgis::SymbolType::Line: + { + QgsLineSymbol *line = dynamic_cast( mSymbol.get() ); + if ( line ) + { + const double width = std::max( 0.0, line->width() + increment ); + line->setWidth( width ); + symbolChanged = true; + } + break; + } + + case Qgis::SymbolType::Fill: + case Qgis::SymbolType::Hybrid: + break; + } + + if ( symbolChanged ) + { + updatePreview(); + emit changed(); + } + + event->accept(); + } +} + void QgsSymbolButton::prepareMenu() { //we need to tear down and rebuild this menu every time it is shown. Otherwise the space allocated to any diff --git a/src/gui/qgssymbolbutton.h b/src/gui/qgssymbolbutton.h index e56db4da88c..19fdcfdf76c 100644 --- a/src/gui/qgssymbolbutton.h +++ b/src/gui/qgssymbolbutton.h @@ -267,6 +267,8 @@ class GUI_EXPORT QgsSymbolButton : public QToolButton // Reimplemented to accept dropped colors void dropEvent( QDropEvent *e ) override; + void wheelEvent( QWheelEvent *event ) override; + private slots: void showSettingsDialog();