diff --git a/python/core/raster/qgsrasterinterface.sip b/python/core/raster/qgsrasterinterface.sip index b51a01336c8..5d935a9caf3 100644 --- a/python/core/raster/qgsrasterinterface.sip +++ b/python/core/raster/qgsrasterinterface.sip @@ -9,7 +9,21 @@ class QgsRasterBlockFeedback : QgsFeedback %TypeHeaderCode #include %End - // TODO: extend with preview functionality?? + + public: + //! construct a new raster block feedback object + QgsRasterBlockFeedback( QObject* parent = nullptr ); + + //! whether the raster provider should return only data that are already available + //! without waiting for full result + bool preview_only; + + //! whether our painter is drawing to a temporary image used just by this layer + bool render_partial_output; + + //! may be emitted by raster data provider to indicate that some partial data are available + //! and a new preview image may be produced + virtual void onNewData(); }; diff --git a/src/core/raster/qgsrasterinterface.h b/src/core/raster/qgsrasterinterface.h index cdc8805022a..931b0ff8809 100644 --- a/src/core/raster/qgsrasterinterface.h +++ b/src/core/raster/qgsrasterinterface.h @@ -37,6 +37,7 @@ class CORE_EXPORT QgsRasterBlockFeedback : public QgsFeedback { public: + //! construct a new raster block feedback object QgsRasterBlockFeedback( QObject* parent = nullptr ) : QgsFeedback( parent ), preview_only( false ), render_partial_output( false ) {} //! whether the raster provider should return only data that are already available diff --git a/src/core/raster/qgsrasterlayerrenderer.cpp b/src/core/raster/qgsrasterlayerrenderer.cpp index 33f6cbfd741..1a164330284 100644 --- a/src/core/raster/qgsrasterlayerrenderer.cpp +++ b/src/core/raster/qgsrasterlayerrenderer.cpp @@ -29,7 +29,7 @@ QgsRasterLayerRenderer::QgsRasterLayerRenderer( QgsRasterLayer* layer, QgsRender , mRasterViewPort( nullptr ) , mPipe( nullptr ) , mContext( rendererContext ) - , mFeedback( new MyFeedback( this ) ) + , mFeedback( new Feedback( this ) ) { mPainter = rendererContext.painter(); const QgsMapToPixel& theQgsMapToPixel = rendererContext.mapToPixel(); @@ -227,14 +227,14 @@ QgsFeedback* QgsRasterLayerRenderer::feedback() const return mFeedback; } -MyFeedback::MyFeedback( QgsRasterLayerRenderer *r ) +QgsRasterLayerRenderer::Feedback::Feedback( QgsRasterLayerRenderer *r ) : mR( r ) , mMinimalPreviewInterval( 250 ) { render_partial_output = r->mContext.testFlag( QgsRenderContext::RenderPartialOutput ); } -void MyFeedback::onNewData() +void QgsRasterLayerRenderer::Feedback::onNewData() { qDebug( "\nGOT NEW DATA!\n" ); diff --git a/src/core/raster/qgsrasterlayerrenderer.h b/src/core/raster/qgsrasterlayerrenderer.h index b4c30e3115b..70b9b4ca120 100644 --- a/src/core/raster/qgsrasterlayerrenderer.h +++ b/src/core/raster/qgsrasterlayerrenderer.h @@ -31,18 +31,6 @@ class QgsRasterLayerRenderer; #include "qgsrasterinterface.h" -class MyFeedback : public QgsRasterBlockFeedback -{ - public: - explicit MyFeedback( QgsRasterLayerRenderer* r ); - - virtual void onNewData() override; - private: - QgsRasterLayerRenderer* mR; - int mMinimalPreviewInterval; //!< in miliseconds - QTime mLastPreview; -}; - /** \ingroup core * Implementation of threaded rendering for raster layers. @@ -69,8 +57,22 @@ class QgsRasterLayerRenderer : public QgsMapLayerRenderer QgsRasterPipe* mPipe; QgsRenderContext& mContext; - MyFeedback* mFeedback; - friend class MyFeedback; + //! Specific feedback class to provide preview of raster layer rendering. + class Feedback : public QgsRasterBlockFeedback + { + public: + explicit Feedback( QgsRasterLayerRenderer* r ); + + //! when notified of new data in data provider it launches a preview draw of the raster + virtual void onNewData() override; + private: + QgsRasterLayerRenderer* mR; //!< parent renderer instance + int mMinimalPreviewInterval; //!< in miliseconds + QTime mLastPreview; //!< when last preview has been generated + }; + + //! feedback class for cancellation and preview generation + Feedback* mFeedback; };