Skip to content

Commit

Permalink
Avoid at times tremendous cost of snapping when cursor is not visible
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed May 26, 2023
1 parent 7abb880 commit 574698c
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/core/utils/snappingutils.cpp
Expand Up @@ -74,6 +74,13 @@ QgsPoint SnappingUtils::newPoint( const QgsPoint &snappedPoint, const Qgis::WkbT

void SnappingUtils::snap()
{
if ( !mEnabled )
{
mSnappingResult = SnappingResult();
emit snappingResultChanged();
return;
}

QgsPointXY point = mapSettings()->screenToCoordinate( mInputCoordinate );
QgsPointLocator::Match match = snapToMap( point );
mSnappingResult = SnappingResult( match );
Expand Down Expand Up @@ -199,3 +206,20 @@ void SnappingUtils::setMapSettings( QgsQuickMapSettings *settings )
mSettings = settings;
emit mapSettingsChanged();
}

bool SnappingUtils::enabled() const
{
return mEnabled;
}

void SnappingUtils::setEnabled( bool enabled )
{
if ( mEnabled == enabled )
return;

mEnabled = enabled;

snap();

emit enabledChanged();
}
6 changes: 6 additions & 0 deletions src/core/utils/snappingutils.h
Expand Up @@ -27,6 +27,7 @@ class SnappingUtils : public QgsSnappingUtils
{
Q_OBJECT

Q_PROPERTY( bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged )
Q_PROPERTY( QgsQuickMapSettings *mapSettings READ mapSettings WRITE setMapSettings NOTIFY mapSettingsChanged )
Q_PROPERTY( QgsVectorLayer *currentLayer READ currentLayer WRITE setCurrentLayer NOTIFY currentLayerChanged )
Q_PROPERTY( SnappingResult snappingResult READ snappingResult NOTIFY snappingResultChanged )
Expand All @@ -35,6 +36,9 @@ class SnappingUtils : public QgsSnappingUtils
public:
explicit SnappingUtils( QObject *parent = nullptr );

bool enabled() const;
void setEnabled( bool enabled );

QgsQuickMapSettings *mapSettings() const;
void setMapSettings( QgsQuickMapSettings *settings );

Expand All @@ -55,6 +59,7 @@ class SnappingUtils : public QgsSnappingUtils
static Q_INVOKABLE QgsSnappingConfig emptySnappingConfig() { return QgsSnappingConfig(); }

signals:
void enabledChanged();
void mapSettingsChanged();
void currentLayerChanged();
void snappingResultChanged();
Expand All @@ -75,6 +80,7 @@ class SnappingUtils : public QgsSnappingUtils
private:
void snap();

bool mEnabled = false;
QgsQuickMapSettings *mSettings = nullptr;
QgsVectorLayer *mCurrentLayer = nullptr;

Expand Down
1 change: 1 addition & 0 deletions src/qml/CoordinateLocator.qml
Expand Up @@ -52,6 +52,7 @@ Item {
SnappingUtils {
id: snappingUtils

enabled: locator.visible
mapSettings: locator.mapSettings
inputCoordinate: sourceLocation === undefined ? Qt.point( locator.width / 2, locator.height / 2 ) : sourceLocation // In screen coordinates
config: qgisProject ? qgisProject.snappingConfig : snappingUtils.emptySnappingConfig()
Expand Down

0 comments on commit 574698c

Please sign in to comment.