Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsannotationlayerrenderer.cpp 3 : : ------------------ 4 : : copyright : (C) 2019 by Sandro Mani 5 : : email : smani at sourcepole dot ch 6 : : ***************************************************************************/ 7 : : 8 : : /*************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #include "qgsannotationlayerrenderer.h" 18 : : #include "qgsannotationlayer.h" 19 : : #include "qgsfeedback.h" 20 : : 21 : 0 : QgsAnnotationLayerRenderer::QgsAnnotationLayerRenderer( QgsAnnotationLayer *layer, QgsRenderContext &context ) 22 : 0 : : QgsMapLayerRenderer( layer->id(), &context ) 23 : 0 : , mFeedback( std::make_unique< QgsFeedback >() ) 24 : 0 : , mLayerOpacity( layer->opacity() ) 25 : 0 : { 26 : : // clone items from layer 27 : 0 : const QMap< QString, QgsAnnotationItem * > items = layer->items(); 28 : 0 : mItems.reserve( items.size() ); 29 : 0 : for ( auto it = items.constBegin(); it != items.constEnd(); ++it ) 30 : : { 31 : 0 : if ( it.value() ) 32 : 0 : mItems << ( *it )->clone(); 33 : 0 : } 34 : : 35 : 0 : std::sort( mItems.begin(), mItems.end(), []( QgsAnnotationItem * a, QgsAnnotationItem * b ) { return a->zIndex() < b->zIndex(); } ); //clazy:exclude=detaching-member 36 : 0 : } 37 : : 38 : 0 : QgsAnnotationLayerRenderer::~QgsAnnotationLayerRenderer() 39 : 0 : { 40 : 0 : qDeleteAll( mItems ); 41 : 0 : } 42 : : 43 : 0 : QgsFeedback *QgsAnnotationLayerRenderer::feedback() const 44 : : { 45 : 0 : return mFeedback.get(); 46 : : } 47 : : 48 : 0 : bool QgsAnnotationLayerRenderer::render() 49 : : { 50 : 0 : QgsRenderContext &context = *renderContext(); 51 : : 52 : 0 : bool canceled = false; 53 : 0 : for ( QgsAnnotationItem *item : std::as_const( mItems ) ) 54 : : { 55 : 0 : if ( mFeedback->isCanceled() ) 56 : : { 57 : 0 : canceled = true; 58 : 0 : break; 59 : : } 60 : : 61 : 0 : item->render( context, mFeedback.get() ); 62 : : } 63 : 0 : return !canceled; 64 : : } 65 : : 66 : 0 : bool QgsAnnotationLayerRenderer::forceRasterRender() const 67 : : { 68 : 0 : return renderContext()->testFlag( QgsRenderContext::UseAdvancedEffects ) && ( !qgsDoubleNear( mLayerOpacity, 1.0 ) ); 69 : : }