mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Synchronize layout render flags to rasterization policy
This commit is contained in:
parent
6bd71ef1de
commit
881bc87c66
@ -341,6 +341,7 @@ class LayoutContextSettingsRestorer
|
||||
: mLayout( layout )
|
||||
, mPreviousDpi( layout->renderContext().dpi() )
|
||||
, mPreviousFlags( layout->renderContext().flags() )
|
||||
, mPreviousRasterPolicy( layout->renderContext().rasterizedRenderingPolicy() )
|
||||
, mPreviousTextFormat( layout->renderContext().textRenderFormat() )
|
||||
, mPreviousExportLayer( layout->renderContext().currentExportLayer() )
|
||||
, mPreviousSimplifyMethod( layout->renderContext().simplifyMethod() )
|
||||
@ -355,6 +356,7 @@ class LayoutContextSettingsRestorer
|
||||
{
|
||||
mLayout->renderContext().setDpi( mPreviousDpi );
|
||||
mLayout->renderContext().setFlags( mPreviousFlags );
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( mPreviousRasterPolicy );
|
||||
mLayout->renderContext().setTextRenderFormat( mPreviousTextFormat );
|
||||
Q_NOWARN_DEPRECATED_PUSH
|
||||
mLayout->renderContext().setCurrentExportLayer( mPreviousExportLayer );
|
||||
@ -372,6 +374,7 @@ class LayoutContextSettingsRestorer
|
||||
QgsLayout *mLayout = nullptr;
|
||||
double mPreviousDpi = 0;
|
||||
Qgis::LayoutRenderFlags mPreviousFlags;
|
||||
Qgis::RasterizedRenderingPolicy mPreviousRasterPolicy = Qgis::RasterizedRenderingPolicy::AllowRasterization;
|
||||
Qgis::TextRenderFormat mPreviousTextFormat = Qgis::TextRenderFormat::AlwaysOutlines;
|
||||
int mPreviousExportLayer = 0;
|
||||
QgsVectorSimplifyMethod mPreviousSimplifyMethod;
|
||||
@ -418,7 +421,6 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::exportToImage( const QString
|
||||
mLayout->renderContext().setDpi( settings.dpi );
|
||||
mLayout->renderContext().setFlags( settings.flags );
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::AllowRasterization );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, true );
|
||||
mLayout->renderContext().setPredefinedScales( settings.predefinedMapScales );
|
||||
|
||||
QList< int > pages;
|
||||
@ -580,13 +582,10 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::exportToPdf( const QString &f
|
||||
if ( settings.forceVectorOutput )
|
||||
{
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, false );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, true );
|
||||
}
|
||||
else
|
||||
{
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::PreferVector );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, true );
|
||||
}
|
||||
|
||||
// Force synchronous legend graphics requests. Necessary for WMS GetPrint,
|
||||
@ -821,13 +820,10 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::exportToPdf( QgsAbstractLayou
|
||||
if ( settings.forceVectorOutput )
|
||||
{
|
||||
iterator->layout()->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
iterator->layout()->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, false );
|
||||
iterator->layout()->renderContext().setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, true );
|
||||
}
|
||||
else
|
||||
{
|
||||
iterator->layout()->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::PreferVector );
|
||||
iterator->layout()->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, true );
|
||||
}
|
||||
iterator->layout()->renderContext().setTextRenderFormat( settings.textRenderFormat );
|
||||
|
||||
@ -944,8 +940,8 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::print( QPrinter &printer, con
|
||||
// If we are not printing as raster, temporarily disable advanced effects
|
||||
// as QPrinter does not support composition modes and can result
|
||||
// in items missing from the output
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, !settings.rasterizeWholeImage );
|
||||
|
||||
if ( !settings.rasterizeWholeImage )
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
preparePrint( mLayout, &printer, true );
|
||||
QPainter p;
|
||||
if ( !p.begin( &printer ) )
|
||||
@ -1007,7 +1003,8 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::print( QgsAbstractLayoutItera
|
||||
// If we are not printing as raster, temporarily disable advanced effects
|
||||
// as QPrinter does not support composition modes and can result
|
||||
// in items missing from the output
|
||||
iterator->layout()->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, !settings.rasterizeWholeImage );
|
||||
if ( !settings.rasterizeWholeImage )
|
||||
iterator->layout()->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
|
||||
if ( first )
|
||||
{
|
||||
@ -1065,14 +1062,10 @@ QgsLayoutExporter::ExportResult QgsLayoutExporter::exportToSvg( const QString &f
|
||||
if ( settings.forceVectorOutput )
|
||||
{
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, true );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
mLayout->renderContext().setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy::PreferVector );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, false );
|
||||
mLayout->renderContext().setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, true );
|
||||
}
|
||||
mLayout->renderContext().setTextRenderFormat( s.textRenderFormat );
|
||||
mLayout->renderContext().setPredefinedScales( settings.predefinedMapScales );
|
||||
|
@ -295,8 +295,7 @@ void QgsLayoutItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *it
|
||||
const bool useImageCache = false;
|
||||
bool forceRasterOutput = containsAdvancedEffects();
|
||||
QPainter::CompositionMode blendMode = blendModeForRender();
|
||||
if ( mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::ForceVectorOutput
|
||||
|| mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector )
|
||||
if ( mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector )
|
||||
{
|
||||
// the FlagForceVectorOutput flag overrides everything, and absolutely DISABLES rasterisation
|
||||
// even when we need it to get correct rendering of opacity/blend modes/etc
|
||||
@ -1084,12 +1083,6 @@ QgsLayoutSize QgsLayoutItem::applyDataDefinedSize( const QgsLayoutSize &size )
|
||||
QPainter::CompositionMode QgsLayoutItem::blendModeForRender() const
|
||||
{
|
||||
QPainter::CompositionMode mode = mEvaluatedBlendMode;
|
||||
if ( !( mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::UseAdvancedEffects ) )
|
||||
{
|
||||
// advanced effects disabled, reset blend mode
|
||||
mode = QPainter::CompositionMode_SourceOver;
|
||||
}
|
||||
|
||||
if ( mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector )
|
||||
{
|
||||
// this policy overrides everything, and absolutely DISABLES rasterisation
|
||||
|
@ -648,8 +648,7 @@ void QgsLayoutItemElevationProfile::paint( QPainter *painter, const QStyleOption
|
||||
|
||||
if ( !qgsDoubleNear( layoutSize.width(), 0.0 ) && !qgsDoubleNear( layoutSize.height(), 0.0 ) )
|
||||
{
|
||||
const bool forceVector = mLayout && ( ( mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::ForceVectorOutput )
|
||||
|| mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
const bool forceVector = mLayout && mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector;
|
||||
if ( ( containsAdvancedEffects() || ( blendModeForRender() != QPainter::CompositionMode_SourceOver ) )
|
||||
&& !forceVector )
|
||||
{
|
||||
|
@ -1198,8 +1198,7 @@ void QgsLayoutItemMap::paint( QPainter *painter, const QStyleOptionGraphicsItem
|
||||
if ( mLayout && mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::LosslessImageRendering )
|
||||
painter->setRenderHint( QPainter::LosslessImageRendering, true );
|
||||
|
||||
const bool forceVector = mLayout && ( ( mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::ForceVectorOutput )
|
||||
|| mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
const bool forceVector = mLayout && ( mLayout->renderContext().rasterizedRenderingPolicy() == Qgis::RasterizedRenderingPolicy::ForceVector );
|
||||
|
||||
if ( ( containsAdvancedEffects() || ( blendModeForRender() != QPainter::CompositionMode_SourceOver ) )
|
||||
&& ( !mLayout || !forceVector ) )
|
||||
@ -1773,7 +1772,6 @@ QgsMapSettings QgsLayoutItemMap::mapSettings( const QgsRectangle &extent, QSizeF
|
||||
jobMapSettings.setSelectionColor( mLayout->renderContext().selectionColor() );
|
||||
jobMapSettings.setFlag( Qgis::MapSettingsFlag::DrawSelection, mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::DrawSelection );
|
||||
jobMapSettings.setFlag( Qgis::MapSettingsFlag::RenderPartialOutput, mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::DisableTiledRasterLayerRenders );
|
||||
jobMapSettings.setFlag( Qgis::MapSettingsFlag::UseAdvancedEffects, mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::UseAdvancedEffects );
|
||||
jobMapSettings.setFlag( Qgis::MapSettingsFlag::AlwaysUseGlobalMasks, mLayout->renderContext().flags() & Qgis::LayoutRenderFlag::AlwaysUseGlobalMasks );
|
||||
jobMapSettings.setTransformContext( mLayout->project()->transformContext() );
|
||||
jobMapSettings.setPathResolver( mLayout->project()->pathResolver() );
|
||||
|
@ -86,6 +86,18 @@ Qgis::RasterizedRenderingPolicy QgsLayoutRenderContext::rasterizedRenderingPolic
|
||||
void QgsLayoutRenderContext::setRasterizedRenderingPolicy( Qgis::RasterizedRenderingPolicy policy )
|
||||
{
|
||||
mRasterizedRenderingPolicy = policy;
|
||||
switch ( mRasterizedRenderingPolicy )
|
||||
{
|
||||
case Qgis::RasterizedRenderingPolicy::AllowRasterization:
|
||||
case Qgis::RasterizedRenderingPolicy::PreferVector:
|
||||
mFlags.setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, false );
|
||||
mFlags.setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, true );
|
||||
break;
|
||||
case Qgis::RasterizedRenderingPolicy::ForceVector:
|
||||
mFlags.setFlag( Qgis::LayoutRenderFlag::ForceVectorOutput, true );
|
||||
mFlags.setFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects, false );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsLayoutRenderContext::setDpi( double dpi )
|
||||
@ -162,3 +174,12 @@ void QgsLayoutRenderContext::setFeatureFilterProvider( QgsFeatureFilterProvider
|
||||
{
|
||||
mFeatureFilterProvider = featureFilterProvider;
|
||||
}
|
||||
|
||||
void QgsLayoutRenderContext::matchRasterizedRenderingPolicyToFlags()
|
||||
{
|
||||
if ( !mFlags.testFlag( Qgis::LayoutRenderFlag::ForceVectorOutput )
|
||||
&& mFlags.testFlag( Qgis::LayoutRenderFlag::UseAdvancedEffects ) )
|
||||
mRasterizedRenderingPolicy = Qgis::RasterizedRenderingPolicy::PreferVector;
|
||||
else if ( mFlags.testFlag( Qgis::LayoutRenderFlag::ForceVectorOutput ) )
|
||||
mRasterizedRenderingPolicy = Qgis::RasterizedRenderingPolicy::ForceVector;
|
||||
}
|
||||
|
@ -370,6 +370,8 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject
|
||||
|
||||
private:
|
||||
|
||||
void matchRasterizedRenderingPolicyToFlags();
|
||||
|
||||
Qgis::LayoutRenderFlags mFlags;
|
||||
Qgis::RasterizedRenderingPolicy mRasterizedRenderingPolicy = Qgis::RasterizedRenderingPolicy::PreferVector;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user