QGIS API Documentation  3.6.0-Noosa (5873452)
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 "qgsapplication.h"
18 #include <QDesktopWidget>
19 #include <QPainter>
20 
22  : QLabel( parent )
23 {
24  // initially use a basic transform with no scale
25  QgsMapToPixel newCoordXForm;
26  newCoordXForm.setParameters( 1, 0, 0, 0, 0, 0 );
27  mContext.setMapToPixel( newCoordXForm );
28 
29  mContext.setScaleFactor( QgsApplication::desktop()->logicalDpiX() / 25.4 );
30  mContext.setUseAdvancedEffects( true );
31 }
32 
33 
34 void QgsTextPreview::paintEvent( QPaintEvent *e )
35 {
36  Q_UNUSED( e );
37  QPainter p( this );
38 
39  p.setRenderHint( QPainter::Antialiasing );
40 
41  // slightly inset text
42  double xtrans = 0;
43  if ( mFormat.buffer().enabled() )
44  xtrans = mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() );
46  xtrans = std::max( xtrans, mContext.convertToPainterUnits( mFormat.background().size().width(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
47  xtrans += 4;
48 
49  double ytrans = 0.0;
50  if ( mFormat.buffer().enabled() )
51  ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() ) );
52  if ( mFormat.background().enabled() )
53  ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.background().size().height(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
54  ytrans += 4;
55 
56  QRectF textRect = rect();
57  textRect.setLeft( xtrans );
58  textRect.setWidth( textRect.width() - xtrans );
59  textRect.setTop( ytrans );
60  if ( textRect.height() > 300 )
61  textRect.setHeight( 300 );
62  if ( textRect.width() > 2000 )
63  textRect.setWidth( 2000 );
64 
65  mContext.setPainter( &p );
66  QgsTextRenderer::drawText( textRect, 0, QgsTextRenderer::AlignLeft, QStringList() << text(),
67  mContext, mFormat );
68 }
69 
71 {
72  mFormat = format;
73  update();
74 }
75 
76 void QgsTextPreview::updateContext()
77 {
78  if ( mScale >= 0 )
79  {
80  QgsMapToPixel newCoordXForm = QgsMapToPixel::fromScale( mScale, mMapUnits, QgsApplication::desktop()->logicalDpiX() );
81  mContext.setMapToPixel( newCoordXForm );
82  }
83  update();
84 }
85 
87 {
88  mScale = scale;
89  updateContext();
90 }
91 
93 {
94  mMapUnits = unit;
95  updateContext();
96 }
QSizeF size() const
Returns the size of the background shape.
QgsTextPreview(QWidget *parent=nullptr)
Constructor for QgsTextPreview.
void setScale(double scale)
Sets the scale to use for previewing format sizes in map units.
double scale() const
Returns the scale used for previewing format sizes in map units.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:37
void setUseAdvancedEffects(bool enabled)
Used to enable or disable advanced effects such as blend modes.
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.
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.
QgsTextFormat format() const
Returns the text format used for previewing text in the widget.
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:54
void setParameters(double mapUnitsPerPixel, double centerX, double centerY, int widthPixels, int heightPixels, double rotation)
Set parameters for use in transforming coordinates.
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.
double size() const
Returns the size of the buffer.
bool enabled() const
Returns whether the background is enabled.
void setMapToPixel(const QgsMapToPixel &mtp)
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
bool enabled() const
Returns whether the buffer is enabled.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
Container for all settings relating to text rendering.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape&#39;s size.
void paintEvent(QPaintEvent *e) override