mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-16 00:05:45 -04:00
Update canvas on short timeout after elevation slider is dragged
Avoids sending many requests to redraw the canvas while the slider is dragged rapidly
This commit is contained in:
parent
bc9635d2e9
commit
a74f68fd91
@ -86,7 +86,12 @@ QgsCanvasElevationControllerBridge::QgsCanvasElevationControllerBridge( QgsEleva
|
|||||||
, mController( controller )
|
, mController( controller )
|
||||||
, mCanvas( canvas )
|
, 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 );
|
mCanvas->addOverlayWidget( mController, Qt::Edge::LeftEdge );
|
||||||
|
|
||||||
@ -142,3 +147,16 @@ void QgsCanvasElevationControllerBridge::updateSignificantElevations()
|
|||||||
|
|
||||||
mController->setSignificantElevations( QgsElevationUtils::significantZValuesForLayers( _qgis_listQPointerToRaw( mCanvasLayers ) ) );
|
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() );
|
||||||
|
}
|
||||||
|
@ -38,8 +38,11 @@ class QgsCanvasElevationControllerBridge : public QObject
|
|||||||
|
|
||||||
void canvasLayersChanged();
|
void canvasLayersChanged();
|
||||||
void updateSignificantElevations();
|
void updateSignificantElevations();
|
||||||
|
void controllerZRangeChanged( const QgsDoubleRange &range );
|
||||||
|
void setCanvasZRange();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QTimer *mUpdateCanvasTimer = nullptr;
|
||||||
QgsElevationControllerWidget *mController = nullptr;
|
QgsElevationControllerWidget *mController = nullptr;
|
||||||
QPointer< QgsMapCanvas> mCanvas;
|
QPointer< QgsMapCanvas> mCanvas;
|
||||||
QgsWeakMapLayerPointerList mCanvasLayers;
|
QgsWeakMapLayerPointerList mCanvasLayers;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user