Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgstextrenderer.h
3 : : -----------------
4 : : begin : September 2015
5 : : copyright : (C) 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 : : #ifndef QGSTEXTRENDERER_PRIVATE_H
18 : : #define QGSTEXTRENDERER_PRIVATE_H
19 : :
20 : : #define SIP_NO_FILE
21 : :
22 : : #include "qgis_core.h"
23 : : #include "qgstextshadowsettings.h"
24 : : #include "qgstextbackgroundsettings.h"
25 : : #include "qgstextformat.h"
26 : : #include "qgsmapunitscale.h"
27 : : #include "qgsunittypes.h"
28 : : #include "qgsapplication.h"
29 : : #include "qgspainteffect.h"
30 : : #include "qgssymbollayerreference.h"
31 : : #include "qgsstringutils.h"
32 : :
33 : : #include <QSharedData>
34 : : #include <QPainter>
35 : :
36 : : /// @cond
37 : :
38 : : //
39 : : // W A R N I N G
40 : : // -------------
41 : : //
42 : : // This file is not part of the QGIS API. It exists purely as an
43 : : // implementation detail. This header file may change from version to
44 : : // version without notice, or even be removed.
45 : : //
46 : :
47 : :
48 : 62 : class QgsTextBufferSettingsPrivate : public QSharedData
49 : : {
50 : : public:
51 : :
52 : 78 : QgsTextBufferSettingsPrivate()
53 : 78 : : color( Qt::white )
54 : 78 : {
55 : 78 : }
56 : :
57 : 0 : QgsTextBufferSettingsPrivate( const QgsTextBufferSettingsPrivate &other )
58 : 0 : : QSharedData( other )
59 : 0 : , enabled( other.enabled )
60 : 0 : , size( other.size )
61 : 0 : , sizeUnit( other.sizeUnit )
62 : 0 : , sizeMapUnitScale( other.sizeMapUnitScale )
63 : 0 : , color( other.color )
64 : 0 : , opacity( other.opacity )
65 : 0 : , fillBufferInterior( other.fillBufferInterior )
66 : 0 : , joinStyle( other.joinStyle )
67 : 0 : , blendMode( other.blendMode )
68 : 0 : , paintEffect( other.paintEffect ? other.paintEffect->clone() : nullptr )
69 : 0 : {
70 : 0 : }
71 : :
72 : 78 : bool enabled = false;
73 : 78 : double size = 1;
74 : 78 : QgsUnitTypes::RenderUnit sizeUnit = QgsUnitTypes::RenderMillimeters;
75 : : QgsMapUnitScale sizeMapUnitScale;
76 : : QColor color;
77 : 78 : double opacity = 1.0;
78 : 78 : bool fillBufferInterior = false;
79 : 78 : Qt::PenJoinStyle joinStyle = Qt::RoundJoin;
80 : 78 : QPainter::CompositionMode blendMode = QPainter::CompositionMode_SourceOver;
81 : : std::unique_ptr< QgsPaintEffect > paintEffect;
82 : :
83 : : private:
84 : : QgsTextBufferSettingsPrivate &operator=( const QgsTextBufferSettingsPrivate & ) = delete;
85 : : };
86 : :
87 : :
88 : 62 : class QgsTextBackgroundSettingsPrivate : public QSharedData
89 : : {
90 : : public:
91 : :
92 : 156 : QgsTextBackgroundSettingsPrivate()
93 : 78 : : size( QSizeF( 0.0, 0.0 ) )
94 : 78 : , offset( QPointF( 0.0, 0.0 ) )
95 : 78 : , radii( QSizeF( 0.0, 0.0 ) )
96 : 78 : , fillColor( Qt::white )
97 : 78 : , strokeColor( Qt::darkGray )
98 : 78 : {
99 : 78 : }
100 : :
101 : 0 : QgsTextBackgroundSettingsPrivate( const QgsTextBackgroundSettingsPrivate &other )
102 : 0 : : QSharedData( other )
103 : 0 : , enabled( other.enabled )
104 : 0 : , type( other.type )
105 : 0 : , svgFile( other.svgFile )
106 : 0 : , sizeType( other.sizeType )
107 : 0 : , size( other.size )
108 : 0 : , sizeUnits( other.sizeUnits )
109 : 0 : , sizeMapUnitScale( other.sizeMapUnitScale )
110 : 0 : , rotationType( other.rotationType )
111 : 0 : , rotation( other.rotation )
112 : 0 : , offset( other.offset )
113 : 0 : , offsetUnits( other.offsetUnits )
114 : 0 : , offsetMapUnitScale( other.offsetMapUnitScale )
115 : 0 : , radii( other.radii )
116 : 0 : , radiiUnits( other.radiiUnits )
117 : 0 : , radiiMapUnitScale( other.radiiMapUnitScale )
118 : 0 : , blendMode( other.blendMode )
119 : 0 : , fillColor( other.fillColor )
120 : 0 : , strokeColor( other.strokeColor )
121 : 0 : , opacity( other.opacity )
122 : 0 : , strokeWidth( other.strokeWidth )
123 : 0 : , strokeWidthUnits( other.strokeWidthUnits )
124 : 0 : , strokeWidthMapUnitScale( other.strokeWidthMapUnitScale )
125 : 0 : , joinStyle( other.joinStyle )
126 : 0 : , paintEffect( other.paintEffect ? other.paintEffect->clone() : nullptr )
127 : 0 : , markerSymbol( other.markerSymbol ? other.markerSymbol->clone() : nullptr )
128 : 0 : {
129 : 0 : }
130 : :
131 : 78 : bool enabled = false;
132 : 78 : QgsTextBackgroundSettings::ShapeType type = QgsTextBackgroundSettings::ShapeRectangle;
133 : : QString svgFile; //!< Absolute path to SVG file
134 : 78 : QgsTextBackgroundSettings::SizeType sizeType = QgsTextBackgroundSettings::SizeBuffer;
135 : : QSizeF size;
136 : 78 : QgsUnitTypes::RenderUnit sizeUnits = QgsUnitTypes::RenderMillimeters;
137 : : QgsMapUnitScale sizeMapUnitScale;
138 : 78 : QgsTextBackgroundSettings::RotationType rotationType = QgsTextBackgroundSettings::RotationSync;
139 : 78 : double rotation = 0.0;
140 : : QPointF offset;
141 : 78 : QgsUnitTypes::RenderUnit offsetUnits = QgsUnitTypes::RenderMillimeters;
142 : : QgsMapUnitScale offsetMapUnitScale;
143 : : QSizeF radii;
144 : 78 : QgsUnitTypes::RenderUnit radiiUnits = QgsUnitTypes::RenderMillimeters;
145 : : QgsMapUnitScale radiiMapUnitScale;
146 : 78 : QPainter::CompositionMode blendMode = QPainter::CompositionMode_SourceOver;
147 : : QColor fillColor;
148 : : QColor strokeColor;
149 : 78 : double opacity = 1.0;
150 : 78 : double strokeWidth = 0.0;
151 : 78 : QgsUnitTypes::RenderUnit strokeWidthUnits = QgsUnitTypes::RenderMillimeters;
152 : : QgsMapUnitScale strokeWidthMapUnitScale;
153 : 78 : Qt::PenJoinStyle joinStyle = Qt::BevelJoin;
154 : : std::unique_ptr< QgsPaintEffect > paintEffect;
155 : : std::unique_ptr< QgsMarkerSymbol > markerSymbol;
156 : :
157 : : private:
158 : : QgsTextBackgroundSettingsPrivate &operator=( const QgsTextBackgroundSettingsPrivate & ) = delete;
159 : : };
160 : :
161 : :
162 : :
163 : : class QgsTextShadowSettingsPrivate : public QSharedData
164 : : {
165 : : public:
166 : :
167 : 78 : QgsTextShadowSettingsPrivate()
168 : 78 : : color( QColor( 0, 0, 0 ) )
169 : 78 : {
170 : :
171 : 78 : }
172 : :
173 : 0 : QgsTextShadowSettingsPrivate( const QgsTextShadowSettingsPrivate &other )
174 : 0 : : QSharedData( other )
175 : 0 : , enabled( other.enabled )
176 : 0 : , shadowUnder( other.shadowUnder )
177 : 0 : , offsetAngle( other.offsetAngle )
178 : 0 : , offsetDist( other.offsetDist )
179 : 0 : , offsetUnits( other.offsetUnits )
180 : 0 : , offsetMapUnitScale( other.offsetMapUnitScale )
181 : 0 : , offsetGlobal( other.offsetGlobal )
182 : 0 : , radius( other.radius )
183 : 0 : , radiusUnits( other.radiusUnits )
184 : 0 : , radiusMapUnitScale( other.radiusMapUnitScale )
185 : 0 : , radiusAlphaOnly( other.radiusAlphaOnly )
186 : 0 : , scale( other.scale )
187 : 0 : , color( other.color )
188 : 0 : , opacity( other.opacity )
189 : 0 : , blendMode( other.blendMode )
190 : 0 : {
191 : 0 : }
192 : :
193 : 78 : bool enabled = false;
194 : 78 : QgsTextShadowSettings::ShadowPlacement shadowUnder = QgsTextShadowSettings::ShadowLowest;
195 : 78 : int offsetAngle = 135;
196 : 78 : double offsetDist = 1.0;
197 : 78 : QgsUnitTypes::RenderUnit offsetUnits = QgsUnitTypes::RenderMillimeters;
198 : : QgsMapUnitScale offsetMapUnitScale;
199 : 78 : bool offsetGlobal = true;
200 : 78 : double radius = 1.5;
201 : 78 : QgsUnitTypes::RenderUnit radiusUnits = QgsUnitTypes::RenderMillimeters;
202 : : QgsMapUnitScale radiusMapUnitScale;
203 : 78 : bool radiusAlphaOnly = false;
204 : 78 : int scale = 100;
205 : : QColor color;
206 : 78 : double opacity = 0.7;
207 : 78 : QPainter::CompositionMode blendMode = QPainter::CompositionMode_Multiply;
208 : :
209 : : private:
210 : : QgsTextShadowSettingsPrivate &operator=( const QgsTextShadowSettingsPrivate & ) = delete;
211 : : };
212 : :
213 : :
214 : 62 : class QgsTextMaskSettingsPrivate : public QSharedData
215 : : {
216 : : public:
217 : :
218 : 78 : QgsTextMaskSettingsPrivate()
219 : 78 : {
220 : :
221 : 78 : }
222 : :
223 : 0 : QgsTextMaskSettingsPrivate( const QgsTextMaskSettingsPrivate &other )
224 : 0 : : QSharedData( other )
225 : 0 : , enabled( other.enabled )
226 : 0 : , type( other.type )
227 : 0 : , size( other.size )
228 : 0 : , sizeUnit( other.sizeUnit )
229 : 0 : , sizeMapUnitScale( other.sizeMapUnitScale )
230 : 0 : , joinStyle( other.joinStyle )
231 : 0 : , opacity( other.opacity )
232 : 0 : , paintEffect( other.paintEffect ? other.paintEffect->clone() : nullptr )
233 : 0 : , maskedSymbolLayers( other.maskedSymbolLayers )
234 : 0 : {
235 : 0 : }
236 : :
237 : 78 : bool enabled = false;
238 : 78 : QgsTextMaskSettings::MaskType type = QgsTextMaskSettings::MaskBuffer;
239 : 78 : double size = 1.5;
240 : 78 : QgsUnitTypes::RenderUnit sizeUnit = QgsUnitTypes::RenderMillimeters;
241 : : QgsMapUnitScale sizeMapUnitScale;
242 : 78 : Qt::PenJoinStyle joinStyle = Qt::RoundJoin;
243 : 78 : double opacity = 1.0;
244 : : std::unique_ptr< QgsPaintEffect > paintEffect;
245 : : QgsSymbolLayerReferenceList maskedSymbolLayers;
246 : :
247 : : private:
248 : : QgsTextMaskSettingsPrivate &operator=( const QgsTextMaskSettingsPrivate & ) = delete;
249 : : };
250 : :
251 : :
252 : 62 : class QgsTextSettingsPrivate : public QSharedData
253 : : {
254 : : public:
255 : :
256 : 78 : QgsTextSettingsPrivate()
257 : 78 : : textColor( Qt::black )
258 : 78 : {
259 : 78 : }
260 : :
261 : 0 : QgsTextSettingsPrivate( const QgsTextSettingsPrivate &other )
262 : 0 : : QSharedData( other )
263 : 0 : , isValid( other.isValid )
264 : 0 : , textFont( other.textFont )
265 : 0 : , textNamedStyle( other.textNamedStyle )
266 : 0 : , fontSizeUnits( other.fontSizeUnits )
267 : 0 : , fontSizeMapUnitScale( other.fontSizeMapUnitScale )
268 : 0 : , fontSize( other.fontSize )
269 : 0 : , textColor( other.textColor )
270 : 0 : , opacity( other.opacity )
271 : 0 : , blendMode( other.blendMode )
272 : 0 : , multilineHeight( other.multilineHeight )
273 : 0 : , orientation( other.orientation )
274 : 0 : , previewBackgroundColor( other.previewBackgroundColor )
275 : 0 : , allowHtmlFormatting( other.allowHtmlFormatting )
276 : 0 : , capitalization( other.capitalization )
277 : 0 : , mDataDefinedProperties( other.mDataDefinedProperties )
278 : 0 : {
279 : 0 : }
280 : :
281 : 78 : bool isValid = false;
282 : : QFont textFont;
283 : : QString textNamedStyle;
284 : 78 : QgsUnitTypes::RenderUnit fontSizeUnits = QgsUnitTypes::RenderPoints;
285 : : QgsMapUnitScale fontSizeMapUnitScale;
286 : 78 : double fontSize = 10 ; //may differ from size in textFont due to units (e.g., size in map units)
287 : : QColor textColor;
288 : 78 : double opacity = 1.0;
289 : 78 : QPainter::CompositionMode blendMode = QPainter::CompositionMode_SourceOver;
290 : 78 : double multilineHeight = 1.0 ; //0.0 to 10.0, leading between lines as multiplyer of line height
291 : 78 : QgsTextFormat::TextOrientation orientation = QgsTextFormat::HorizontalOrientation;
292 : 78 : QColor previewBackgroundColor = Qt::white;
293 : 78 : bool allowHtmlFormatting = false;
294 : 78 : QgsStringUtils::Capitalization capitalization = QgsStringUtils::MixedCase;
295 : :
296 : : //! Property collection for data defined settings
297 : : QgsPropertyCollection mDataDefinedProperties;
298 : :
299 : : private:
300 : : QgsTextSettingsPrivate &operator=( const QgsTextSettingsPrivate & ) = delete;
301 : : };
302 : :
303 : :
304 : :
305 : :
306 : :
307 : : /// @endcond
308 : :
309 : : #endif // QGSTEXTRENDERER_PRIVATE_H
|