1 /***************************************************************************
2                              qgslayoutrendercontext.cpp
3                              --------------------
4     begin                : July 2017
5     copyright            : (C) 2017 by Nyall Dawson
6     email                : nyall dot dawson at gmail dot com
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 "qgslayoutrendercontext.h"
18 #include "qgslayout.h"
19 
QgsLayoutRenderContext(QgsLayout * layout)20 QgsLayoutRenderContext::QgsLayoutRenderContext( QgsLayout *layout )
21   : QObject( layout )
22   , mFlags( FlagAntialiasing | FlagUseAdvancedEffects )
23   , mLayout( layout )
24 {
25   mSimplifyMethod.setSimplifyHints( QgsVectorSimplifyMethod::NoSimplification );
26 }
27 
setFlags(const QgsLayoutRenderContext::Flags flags)28 void QgsLayoutRenderContext::setFlags( const QgsLayoutRenderContext::Flags flags )
29 {
30   if ( flags == mFlags )
31     return;
32 
33   mFlags = flags;
34   emit flagsChanged( mFlags );
35 }
36 
setFlag(const QgsLayoutRenderContext::Flag flag,const bool on)37 void QgsLayoutRenderContext::setFlag( const QgsLayoutRenderContext::Flag flag, const bool on )
38 {
39   Flags newFlags = mFlags;
40   if ( on )
41     newFlags |= flag;
42   else
43     newFlags &= ~flag;
44 
45   if ( newFlags == mFlags )
46     return;
47 
48   mFlags = newFlags;
49   emit flagsChanged( mFlags );
50 }
51 
flags() const52 QgsLayoutRenderContext::Flags QgsLayoutRenderContext::flags() const
53 {
54   return mFlags;
55 }
56 
testFlag(const QgsLayoutRenderContext::Flag flag) const57 bool QgsLayoutRenderContext::testFlag( const QgsLayoutRenderContext::Flag flag ) const
58 {
59   return mFlags.testFlag( flag );
60 }
61 
renderContextFlags() const62 QgsRenderContext::Flags QgsLayoutRenderContext::renderContextFlags() const
63 {
64   QgsRenderContext::Flags flags = QgsRenderContext::Flags();
65   if ( mFlags & FlagAntialiasing )
66     flags = flags | QgsRenderContext::Antialiasing;
67   if ( mFlags & FlagUseAdvancedEffects )
68     flags = flags | QgsRenderContext::UseAdvancedEffects;
69   if ( mFlags & FlagLosslessImageRendering )
70     flags = flags | QgsRenderContext::LosslessImageRendering;
71 
72   // TODO - expose as layout context flag?
73   flags |= QgsRenderContext::ForceVectorOutput;
74   return flags;
75 }
76 
setDpi(double dpi)77 void QgsLayoutRenderContext::setDpi( double dpi )
78 {
79   if ( qgsDoubleNear( dpi, mMeasurementConverter.dpi() ) )
80     return;
81 
82   mMeasurementConverter.setDpi( dpi );
83   emit dpiChanged();
84 }
85 
dpi() const86 double QgsLayoutRenderContext::dpi() const
87 {
88   return mMeasurementConverter.dpi();
89 }
90 
gridVisible() const91 bool QgsLayoutRenderContext::gridVisible() const
92 {
93   return mGridVisible;
94 }
95 
setGridVisible(bool visible)96 void QgsLayoutRenderContext::setGridVisible( bool visible )
97 {
98   mGridVisible = visible;
99 }
100 
boundingBoxesVisible() const101 bool QgsLayoutRenderContext::boundingBoxesVisible() const
102 {
103   return mBoundingBoxesVisible;
104 }
105 
setBoundingBoxesVisible(bool visible)106 void QgsLayoutRenderContext::setBoundingBoxesVisible( bool visible )
107 {
108   mBoundingBoxesVisible = visible;
109 }
110 
setPagesVisible(bool visible)111 void QgsLayoutRenderContext::setPagesVisible( bool visible )
112 {
113   mPagesVisible = visible;
114 }
115 
exportThemes() const116 QStringList QgsLayoutRenderContext::exportThemes() const
117 {
118   return mExportThemes;
119 }
120 
setExportThemes(const QStringList & exportThemes)121 void QgsLayoutRenderContext::setExportThemes( const QStringList &exportThemes )
122 {
123   mExportThemes = exportThemes;
124 }
125 
setPredefinedScales(const QVector<qreal> & scales)126 void QgsLayoutRenderContext::setPredefinedScales( const QVector<qreal> &scales )
127 {
128   if ( scales == mPredefinedScales )
129     return;
130 
131   mPredefinedScales = scales;
132   // make sure the list is sorted
133   std::sort( mPredefinedScales.begin(), mPredefinedScales.end() ); // clazy:exclude=detaching-member
134   emit predefinedScalesChanged();
135 }
136 
featureFilterProvider() const137 QgsFeatureFilterProvider *QgsLayoutRenderContext::featureFilterProvider() const
138 {
139   return mFeatureFilterProvider;
140 }
141 
setFeatureFilterProvider(QgsFeatureFilterProvider * featureFilterProvider)142 void QgsLayoutRenderContext::setFeatureFilterProvider( QgsFeatureFilterProvider *featureFilterProvider )
143 {
144   mFeatureFilterProvider = featureFilterProvider;
145 }
146