Skip to content

Commit

Permalink
Clean up QgsRasterBlockFeedback class
Browse files Browse the repository at this point in the history
  • Loading branch information
wonder-sk committed Sep 9, 2016
1 parent 267f263 commit f6a2a5e
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 29 deletions.
27 changes: 18 additions & 9 deletions python/core/raster/qgsrasterinterface.sip
Expand Up @@ -11,19 +11,28 @@ class QgsRasterBlockFeedback : QgsFeedback
%End

public:
//! construct a new raster block feedback object
//! 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
//! 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();

//! Whether the raster provider should return only data that are already available
//! without waiting for full result. By default this flag is not enabled.
//! @see setPreviewOnly()
bool isPreviewOnly() const;
//! set flag whether the block request is for preview purposes only
//! @see isPreviewOnly()
void setPreviewOnly( bool preview );

//! Whether our painter is drawing to a temporary image used just by this layer
//! @see setRenderPartialOutput()
bool renderPartialOutput() const;
//! Set whether our painter is drawing to a temporary image used just by this layer
//! @see renderPartialOutput()
void setRenderPartialOutput( bool enable );

};


Expand Down
2 changes: 1 addition & 1 deletion src/core/raster/qgsrasterdrawer.cpp
Expand Up @@ -88,7 +88,7 @@ void QgsRasterDrawer::draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsM
}
}

if ( feedback && feedback->render_partial_output )
if ( feedback && feedback->renderPartialOutput() )
{
// there could have been partial preview written before
// so overwrite anything with the resulting image.
Expand Down
36 changes: 26 additions & 10 deletions src/core/raster/qgsrasterinterface.h
Expand Up @@ -37,19 +37,35 @@
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 ) {}
//! Construct a new raster block feedback object
QgsRasterBlockFeedback( QObject* parent = nullptr ) : QgsFeedback( parent ), mPreviewOnly( false ), mRenderPartialOutput( false ) {}

//! 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
//! 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() {}

//! Whether the raster provider should return only data that are already available
//! without waiting for full result. By default this flag is not enabled.
//! @see setPreviewOnly()
bool isPreviewOnly() const { return mPreviewOnly; }
//! set flag whether the block request is for preview purposes only
//! @see isPreviewOnly()
void setPreviewOnly( bool preview ) { mPreviewOnly = preview; }

//! Whether our painter is drawing to a temporary image used just by this layer
//! @see setRenderPartialOutput()
bool renderPartialOutput() const { return mRenderPartialOutput; }
//! Set whether our painter is drawing to a temporary image used just by this layer
//! @see renderPartialOutput()
void setRenderPartialOutput( bool enable ) { mRenderPartialOutput = enable; }

private:
//! Whether the raster provider should return only data that are already available
//! without waiting for full result
bool mPreviewOnly;

//! Whether our painter is drawing to a temporary image used just by this layer
bool mRenderPartialOutput;
};


Expand Down
8 changes: 4 additions & 4 deletions src/core/raster/qgsrasterlayerrenderer.cpp
Expand Up @@ -231,14 +231,14 @@ QgsRasterLayerRenderer::Feedback::Feedback( QgsRasterLayerRenderer *r )
: mR( r )
, mMinimalPreviewInterval( 250 )
{
render_partial_output = r->mContext.testFlag( QgsRenderContext::RenderPartialOutput );
setRenderPartialOutput( r->mContext.testFlag( QgsRenderContext::RenderPartialOutput ) );
}

void QgsRasterLayerRenderer::Feedback::onNewData()
{
qDebug( "\nGOT NEW DATA!\n" );

if ( !render_partial_output )
if ( !renderPartialOutput() )
return; // we were not asked for partial renders and we may not have a temporary image for overwriting...

// update only once upon a time
Expand All @@ -252,8 +252,8 @@ void QgsRasterLayerRenderer::Feedback::onNewData()
QTime t;
t.start();
QgsRasterBlockFeedback feedback;
feedback.preview_only = true;
feedback.render_partial_output = true;
feedback.setPreviewOnly( true );
feedback.setRenderPartialOutput( true );
QgsRasterIterator iterator( mR->mPipe->last() );
QgsRasterDrawer drawer( &iterator );
drawer.draw( mR->mPainter, mR->mRasterViewPort, mR->mMapToPixel, &feedback );
Expand Down
10 changes: 5 additions & 5 deletions src/providers/wms/qgswmsprovider.cpp
Expand Up @@ -780,7 +780,7 @@ QImage *QgsWmsProvider::draw( QgsRectangle const & viewExtent, int pixelWidth, i

// draw other res tiles if preview
QPainter p( image );
if ( feedback && feedback->preview_only && missing.count() > 0 )
if ( feedback && feedback->isPreviewOnly() && missing.count() > 0 )
{
// some tiles are still missing, so let's see if we have any cached tiles
// from lower or higher resolution available to give the user a bit of context
Expand Down Expand Up @@ -825,22 +825,22 @@ QImage *QgsWmsProvider::draw( QgsRectangle const & viewExtent, int pixelWidth, i
p.setRenderHint( QPainter::SmoothPixmapTransform, true );
p.drawImage( ti.rect, ti.img );

if ( feedback && feedback->preview_only )
if ( feedback && feedback->isPreviewOnly() )
_drawDebugRect( p, ti.rect, Qt::green );
}
p.end();

int t2 = t.elapsed() - t1;

if ( feedback && feedback->preview_only )
if ( feedback && feedback->isPreviewOnly() )
{
qDebug( "PREVIEW - CACHED: %d / MISSING: %d", tileImages.count(), requests.count() - tileImages.count() );
qDebug( "PREVIEW - TIME: this res %d ms | other res %d ms | TOTAL %d ms", t0 + t2, t1, t0 + t1 + t2 );
}
else if ( !requestsFinal.isEmpty() )
{
// let the feedback object know about the tiles we have already
if ( feedback && feedback->render_partial_output )
if ( feedback && feedback->renderPartialOutput() )
feedback->onNewData();

// order tile requests according to the distance from view center
Expand Down Expand Up @@ -3908,7 +3908,7 @@ void QgsWmsTiledImageDownloadHandler::tileReplyFinished()
}
else
{
if ( !( mFeedback && mFeedback->preview_only ) )
if ( !( mFeedback && mFeedback->isPreviewOnly() ) )
{
// report any errors except for the one we have caused by cancelling the request
if ( reply->error() != QNetworkReply::OperationCanceledError )
Expand Down

0 comments on commit f6a2a5e

Please sign in to comment.