QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
qgstextrenderer.h
Go to the documentation of this file.
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 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSTEXTRENDERER_H
17#define QGSTEXTRENDERER_H
18
19#include "qgis_sip.h"
20#include "qgis_core.h"
21#include "qgstextblock.h"
22#include "qgsmapunitscale.h"
23#include "qgis.h"
24
25#include <QPicture>
26
27class QgsTextDocument;
29class QgsTextFormat;
31
32class QFontMetricsF;
33
40class CORE_EXPORT QgsTextRenderer
41{
42 public:
43
50 static Qgis::TextHorizontalAlignment convertQtHAlignment( Qt::Alignment alignment );
51
58 static Qgis::TextVerticalAlignment convertQtVAlignment( Qt::Alignment alignment );
59
68 static int sizeToPixel( double size, const QgsRenderContext &c, Qgis::RenderUnit unit, const QgsMapUnitScale &mapUnitScale = QgsMapUnitScale() );
69
70 // TODO QGIS 4.0 -- remove drawAsOutlines from below methods!
71
90 static void drawText( const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines,
91 QgsRenderContext &context, const QgsTextFormat &format,
92 bool drawAsOutlines = true, Qgis::TextVerticalAlignment vAlignment = Qgis::TextVerticalAlignment::Top,
95
118 static void drawDocument( const QRectF &rect,
119 const QgsTextFormat &format,
120 const QgsTextDocument &document,
121 const QgsTextDocumentMetrics &metrics,
122 QgsRenderContext &context,
125 double rotation = 0,
128
142 static void drawText( QPointF point, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines,
143 QgsRenderContext &context, const QgsTextFormat &format,
144 bool drawAsOutlines = true );
145
158 static void drawTextOnLine( const QPolygonF &line, const QString &text,
159 QgsRenderContext &context, const QgsTextFormat &format,
160 double offsetAlongLine = 0, double offsetFromLine = 0 );
161
174 static void drawDocumentOnLine( const QPolygonF &line,
175 const QgsTextFormat &format,
176 const QgsTextDocument &document,
177 QgsRenderContext &context,
178 double offsetAlongLine = 0,
179 double offsetFromLine = 0 );
180
199 Q_DECL_DEPRECATED static void drawPart( const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines,
200 QgsRenderContext &context, const QgsTextFormat &format,
201 Qgis::TextComponent part, bool drawAsOutlines = true ) SIP_DEPRECATED;
202
221 Q_DECL_DEPRECATED static void drawPart( QPointF origin, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines,
222 QgsRenderContext &context, const QgsTextFormat &format,
223 Qgis::TextComponent part, bool drawAsOutlines = true ) SIP_DEPRECATED;
224
237 static QFontMetricsF fontMetrics( QgsRenderContext &context, const QgsTextFormat &format, double scaleFactor = 1.0 );
238
246 static double textWidth( const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines,
247 QFontMetricsF *fontMetrics = nullptr );
248
259 static double textHeight( const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, Qgis::TextLayoutMode mode = Qgis::TextLayoutMode::Point,
260 QFontMetricsF *fontMetrics = nullptr, Qgis::TextRendererFlags flags = Qgis::TextRendererFlags(), double maxLineWidth = 0 );
261
273 static double textHeight( const QgsRenderContext &context, const QgsTextFormat &format, QChar character, bool includeEffects = false );
274
281 static bool textRequiresWrapping( const QgsRenderContext &context, const QString &text, double width, const QgsTextFormat &format );
282
289 static QStringList wrappedText( const QgsRenderContext &context, const QString &text, double width, const QgsTextFormat &format );
290
301 static constexpr double FONT_WORKAROUND_SCALE = 10;
302
311 static double calculateScaleFactorForFormat( const QgsRenderContext &context, const QgsTextFormat &format );
312
313 // to match QTextEngine handling of superscript/subscript font sizes
314
320 static constexpr double SUPERSCRIPT_SUBSCRIPT_FONT_SIZE_SCALING_FACTOR = 2.0 / 3.0;
321
322 private:
323
324 struct Component
325 {
327 QgsTextBlock block;
328
330 int blockIndex = 0;
331
333 int firstFragmentIndex = 0;
334
336 QPointF origin;
338 bool useOrigin = false;
340 double rotation = 0.0;
342 double rotationOffset = 0.0;
344 QPointF center;
346 QSizeF size;
348 QPointF offset;
350 QPicture picture;
351
356 double pictureBuffer = 0.0;
358 double dpiRatio = 1.0;
361
363 double extraWordSpacing = 0;
365 double extraLetterSpacing = 0;
366 };
367
368 static double textWidth( const QgsRenderContext &context, const QgsTextFormat &format, const QgsTextDocument &document );
369 static double textHeight( const QgsRenderContext &context, const QgsTextFormat &format, const QgsTextDocument &document, Qgis::TextLayoutMode mode = Qgis::TextLayoutMode::Point );
370
388 static void drawPart( const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, Qgis::TextVerticalAlignment vAlignment, const QgsTextDocument &document, const QgsTextDocumentMetrics &metrics,
389 QgsRenderContext &context, const QgsTextFormat &format,
391
408 static void drawPart( QPointF origin, double rotation, Qgis::TextHorizontalAlignment alignment, const QgsTextDocument &document,
409 const QgsTextDocumentMetrics &metrics,
410 QgsRenderContext &context, const QgsTextFormat &format,
413
414 static double drawBuffer( QgsRenderContext &context,
415 const Component &component,
416 const QgsTextFormat &format,
417 const QgsTextDocumentMetrics &metrics,
419
420 static void drawBackground( QgsRenderContext &context,
421 Component component,
422 const QgsTextFormat &format,
423 const QgsTextDocumentMetrics &metrics,
425
426 static void drawShadow( QgsRenderContext &context,
427 const Component &component,
428 const QgsTextFormat &format );
429
430 static void drawMask( QgsRenderContext &context,
431 const Component &component,
432 const QgsTextFormat &format,
433 const QgsTextDocumentMetrics &metrics,
435
436 static void drawText( QgsRenderContext &context,
437 const Component &component,
438 const QgsTextFormat &format );
439
440 static void drawTextInternal( Qgis::TextComponent drawType,
441 QgsRenderContext &context,
442 const QgsTextFormat &format,
443 const Component &component,
444 const QgsTextDocument &document,
445 const QgsTextDocumentMetrics &metrics,
449
450 static Qgis::TextOrientation calculateRotationAndOrientationForComponent( const QgsTextFormat &format, const Component &component, double &rotation );
451
452 static void calculateExtraSpacingForLineJustification( double spaceToDistribute, const QgsTextBlock &block, double &extraWordSpace, double &extraLetterSpace );
453 static void applyExtraSpacingForLineJustification( QFont &font, double extraWordSpace, double extraLetterSpace );
454
455 static void drawTextInternalHorizontal( QgsRenderContext &context,
456 const QgsTextFormat &format,
457 Qgis::TextComponent drawType,
459 const Component &component,
460 const QgsTextDocument &document,
461 const QgsTextDocumentMetrics &metrics,
462 double fontScale,
465 double rotation );
466
467 static void drawTextInternalVertical( QgsRenderContext &context,
468 const QgsTextFormat &format,
469 Qgis::TextComponent drawType,
471 const Component &component,
472 const QgsTextDocument &document,
473 const QgsTextDocumentMetrics &metrics,
474 double fontScale,
477 double rotation );
478
480 friend class QgsLabelPreview;
481
482 static QgsTextFormat updateShadowPosition( const QgsTextFormat &format );
483
484};
485
486#endif // QGSTEXTRENDERER_H
TextLayoutMode
Text layout modes.
Definition qgis.h:2563
@ Point
Text at point of origin layout mode.
@ Rectangle
Text within rectangle layout mode.
QFlags< TextRendererFlag > TextRendererFlags
Definition qgis.h:2991
TextOrientation
Text orientations.
Definition qgis.h:2548
RenderUnit
Rendering size units.
Definition qgis.h:4594
TextVerticalAlignment
Text vertical alignment.
Definition qgis.h:2615
TextHorizontalAlignment
Text horizontal alignment.
Definition qgis.h:2596
TextComponent
Text components.
Definition qgis.h:2580
Struct for storing maximum and minimum scales for measurements in map units.
Contains information about the context of a rendering operation.
Represents a block of text consisting of one or more QgsTextFragment objects.
Contains pre-calculated metrics of a QgsTextDocument.
Represents a document consisting of one or more QgsTextBlock objects.
Container for all settings relating to text rendering.
Handles rendering text using rich formatting options, including drop shadows, buffers and background ...
The QgsVectorLayerLabelProvider class implements a label provider for vector layers.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define FONT_WORKAROUND_SCALE