Skip to content

Commit

Permalink
Update canvas on short timeout after elevation slider is dragged
Browse files Browse the repository at this point in the history
Avoids sending many requests to redraw the canvas while the
slider is dragged rapidly
  • Loading branch information
nyalldawson authored and wonder-sk committed May 20, 2024
1 parent bc9635d commit a74f68f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/app/canvas/qgsappcanvasfiltering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,12 @@ QgsCanvasElevationControllerBridge::QgsCanvasElevationControllerBridge( QgsEleva
, mController( controller )
, mCanvas( canvas )
{
connect( mController, &QgsElevationControllerWidget::rangeChanged, mCanvas, &QgsMapCanvas::setZRange );
// canvas updates are applied after a short timeout, to avoid sending too many rapid redraw requests
// while the controller slider is being dragged
mUpdateCanvasTimer = new QTimer( this );
mUpdateCanvasTimer->setSingleShot( true );
connect( mController, &QgsElevationControllerWidget::rangeChanged, this, &QgsCanvasElevationControllerBridge::controllerZRangeChanged );
connect( mUpdateCanvasTimer, &QTimer::timeout, this, &QgsCanvasElevationControllerBridge::setCanvasZRange );

mCanvas->addOverlayWidget( mController, Qt::Edge::LeftEdge );

Expand Down Expand Up @@ -142,3 +147,16 @@ void QgsCanvasElevationControllerBridge::updateSignificantElevations()

mController->setSignificantElevations( QgsElevationUtils::significantZValuesForLayers( _qgis_listQPointerToRaw( mCanvasLayers ) ) );
}

void QgsCanvasElevationControllerBridge::controllerZRangeChanged( const QgsDoubleRange & )
{
mUpdateCanvasTimer->start( 100 );
}

void QgsCanvasElevationControllerBridge::setCanvasZRange()
{
if ( !mCanvas )
return;

mCanvas->setZRange( mController->range() );
}
3 changes: 3 additions & 0 deletions src/app/canvas/qgsappcanvasfiltering.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,11 @@ class QgsCanvasElevationControllerBridge : public QObject

void canvasLayersChanged();
void updateSignificantElevations();
void controllerZRangeChanged( const QgsDoubleRange &range );
void setCanvasZRange();

private:
QTimer *mUpdateCanvasTimer = nullptr;
QgsElevationControllerWidget *mController = nullptr;
QPointer< QgsMapCanvas> mCanvas;
QgsWeakMapLayerPointerList mCanvasLayers;
Expand Down

0 comments on commit a74f68f

Please sign in to comment.