QGIS API Documentation  3.4.15-Madeira (e83d02e274)
qgstextpreview.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgstextpreview.cpp
3  ------------------
4  begin : October 2016
5  copyright : (C) 2016 by 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 #include "qgstextpreview.h"
17 #include <QDesktopWidget>
18 #include <QPainter>
19 
21  : QLabel( parent )
22 {
23  // initially use a basic transform with no scale
24  QgsMapToPixel newCoordXForm;
25  newCoordXForm.setParameters( 1, 0, 0, 0, 0, 0 );
26  mContext.setMapToPixel( newCoordXForm );
27 
28  mContext.setScaleFactor( QgsApplication::desktop()->logicalDpiX() / 25.4 );
29  mContext.setUseAdvancedEffects( true );
30 }
31 
32 
33 void QgsTextPreview::paintEvent( QPaintEvent *e )
34 {
35  Q_UNUSED( e );
36  QPainter p( this );
37 
38  p.setRenderHint( QPainter::Antialiasing );
39 
40  // slightly inset text
41  double xtrans = 0;
42  if ( mFormat.buffer().enabled() )
43  xtrans = mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() );
45  xtrans = std::max( xtrans, mContext.convertToPainterUnits( mFormat.background().size().width(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
46  xtrans += 4;
47 
48  double ytrans = 0.0;
49  if ( mFormat.buffer().enabled() )
50  ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() ) );
51  if ( mFormat.background().enabled() )
52  ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.background().size().height(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
53  ytrans += 4;
54 
55  QRectF textRect = rect();
56  textRect.setLeft( xtrans );
57  textRect.setWidth( textRect.width() - xtrans );
58  textRect.setTop( ytrans );
59  if ( textRect.height() > 300 )
60  textRect.setHeight( 300 );
61  if ( textRect.width() > 2000 )
62  textRect.setWidth( 2000 );
63 
64  mContext.setPainter( &p );
65  QgsTextRenderer::drawText( textRect, 0, QgsTextRenderer::AlignLeft, QStringList() << text(),
66  mContext, mFormat );
67 }
68 
70 {
71  mFormat = format;
72  update();
73 }
74 
75 void QgsTextPreview::updateContext()
76 {
77  if ( mScale >= 0 )
78  {
79  QgsMapToPixel newCoordXForm = QgsMapToPixel::fromScale( mScale, mMapUnits, QgsApplication::desktop()->logicalDpiX() );
80  mContext.setMapToPixel( newCoordXForm );
81  }
82  update();
83 }
84 
86 {
87  mScale = scale;
88  updateContext();
89 }
90 
92 {
93  mMapUnits = unit;
94  updateContext();
95 }
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
QSizeF size() const
Returns the size of the background shape.
QgsTextPreview(QWidget *parent=nullptr)
Constructor for QgsTextPreview.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
void setScale(double scale)
Sets the scale to use for previewing format sizes in map units.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
bool enabled() const
Returns whether the background is enabled.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:36
QgsTextFormat format() const
Returns the text format used for previewing text in the widget.
void setUseAdvancedEffects(bool enabled)
Used to enable or disable advanced effects such as blend modes.
bool enabled() const
Returns whether the buffer is enabled.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
static QgsMapToPixel fromScale(double scale, QgsUnitTypes::DistanceUnit mapUnits, double dpi=96)
Returns a new QgsMapToPixel created using a specified scale and distance unit.
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
void setMapUnits(QgsUnitTypes::DistanceUnit unit)
Sets the map unit type for previewing format sizes in map units.
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
static void drawText(const QRectF &rect, double rotation, HAlignment alignment, const QStringList &textLines, QgsRenderContext &context, const QgsTextFormat &format, bool drawAsOutlines=true)
Draws text within a rectangle using the specified settings.
void setFormat(const QgsTextFormat &format)
Sets the text format for previewing in the widget.
DistanceUnit
Units of distance.
Definition: qgsunittypes.h:53
void setParameters(double mapUnitsPerPixel, double centerX, double centerY, int widthPixels, int heightPixels, double rotation)
Set parameters for use in transforming coordinates.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape&#39;s size.
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context&#39;s map to pixel transform, which transforms between map coordinates and device coordi...
double size() const
Returns the size of the buffer.
Container for all settings relating to text rendering.
double scale() const
Returns the scale used for previewing format sizes in map units.
void paintEvent(QPaintEvent *e) override