LCOV - code coverage report
Current view: top level - core/textrenderer - qgstextformat.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 1 5 20.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :   qgstextformat.h
       3                 :            :   ---------------
       4                 :            :    begin                : May 2020
       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 QGSTEXTFORMAT_H
      17                 :            : #define QGSTEXTFORMAT_H
      18                 :            : 
      19                 :            : #include "qgis_sip.h"
      20                 :            : #include "qgis_core.h"
      21                 :            : #include "qgsunittypes.h"
      22                 :            : #include "qgstextbuffersettings.h"
      23                 :            : #include "qgstextbackgroundsettings.h"
      24                 :            : #include "qgstextshadowsettings.h"
      25                 :            : #include "qgstextmasksettings.h"
      26                 :            : #include "qgsstringutils.h"
      27                 :            : 
      28                 :            : #include <QSharedDataPointer>
      29                 :            : 
      30                 :            : class QMimeData;
      31                 :            : class QgsTextSettingsPrivate;
      32                 :            : 
      33                 :            : /**
      34                 :            :  * \class QgsTextFormat
      35                 :            :   * \ingroup core
      36                 :            :   * \brief Container for all settings relating to text rendering.
      37                 :            :   * \note QgsTextFormat objects are implicitly shared.
      38                 :            :   * \since QGIS 3.0
      39                 :            :  */
      40                 :            : class CORE_EXPORT QgsTextFormat
      41                 :            : {
      42                 :            :   public:
      43                 :            : 
      44                 :            :     //! Text orientation
      45                 :            :     enum TextOrientation
      46                 :            :     {
      47                 :            :       HorizontalOrientation, //!< Vertically oriented text
      48                 :            :       VerticalOrientation, //!< Horizontally oriented text
      49                 :            :       RotationBasedOrientation, //!< Horizontally or vertically oriented text based on rotation (only available for map labeling)
      50                 :            :     };
      51                 :            : 
      52                 :            :     /**
      53                 :            :      * Default constructor for QgsTextFormat. Creates a text format initially
      54                 :            :      * set to an invalid state (see isValid()).
      55                 :            :      */
      56                 :            :     QgsTextFormat();
      57                 :            : 
      58                 :            :     /**
      59                 :            :      * Copy constructor.
      60                 :            :      * \param other source QgsTextFormat
      61                 :            :      */
      62                 :            :     QgsTextFormat( const QgsTextFormat &other );
      63                 :            : 
      64                 :            :     QgsTextFormat &operator=( const QgsTextFormat &other );
      65                 :            : 
      66                 :            :     ~QgsTextFormat();
      67                 :            : 
      68                 :            :     bool operator==( const QgsTextFormat &other ) const;
      69                 :            :     bool operator!=( const QgsTextFormat &other ) const;
      70                 :            : 
      71                 :            :     /**
      72                 :            :      * Returns TRUE if the format is valid.
      73                 :            :      *
      74                 :            :      * A default constructed QgsTextFormat is invalid, until at least one or more properties
      75                 :            :      * have been set on the format. An invalid state can be used as a representation of a "not set"
      76                 :            :      * text format, e.g. for indicating that a default text format should be used.
      77                 :            :      *
      78                 :            :      * \note Calling any setter on a QgsTextFormat object will automatically set the format as valid.
      79                 :            :      *
      80                 :            :      * \see setValid()
      81                 :            :      * \since QGIS 3.16
      82                 :            :      */
      83                 :            :     bool isValid() const;
      84                 :            : 
      85                 :            :     /**
      86                 :            :      * Sets the format to a valid state, without changing any of the default format settings.
      87                 :            :      *
      88                 :            :      * \see isValid()
      89                 :            :      * \since QGIS 3.16
      90                 :            :      */
      91                 :            :     void setValid();
      92                 :            : 
      93                 :            :     /**
      94                 :            :      * Returns a reference to the text buffer settings.
      95                 :            :      * \see setBuffer()
      96                 :            :      */
      97                 :            :     QgsTextBufferSettings &buffer();
      98                 :            : 
      99                 :            :     /**
     100                 :            :      * Returns a reference to the text buffer settings.
     101                 :            :      * \see setBuffer()
     102                 :            :      */
     103                 :          0 :     SIP_SKIP QgsTextBufferSettings buffer() const { return mBufferSettings; }
     104                 :            : 
     105                 :            :     /**
     106                 :            :      * Sets the text's buffer settings.
     107                 :            :      * \param bufferSettings buffer settings
     108                 :            :      * \see buffer()
     109                 :            :      */
     110                 :            :     void setBuffer( const QgsTextBufferSettings &bufferSettings );
     111                 :            : 
     112                 :            :     /**
     113                 :            :      * Returns a reference to the text background settings.
     114                 :            :      * \see setBackground()
     115                 :            :      */
     116                 :            :     QgsTextBackgroundSettings &background();
     117                 :            : 
     118                 :            :     /**
     119                 :            :      * Returns a reference to the text background settings.
     120                 :            :      * \see setBackground()
     121                 :            :      */
     122                 :          0 :     SIP_SKIP QgsTextBackgroundSettings background() const { return mBackgroundSettings; }
     123                 :            : 
     124                 :            :     /**
     125                 :            :      * Sets the text's background settings.q
     126                 :            :      * \param backgroundSettings background settings
     127                 :            :      * \see background()
     128                 :            :      */
     129                 :            :     void setBackground( const QgsTextBackgroundSettings &backgroundSettings );
     130                 :            : 
     131                 :            :     /**
     132                 :            :      * Returns a reference to the text drop shadow settings.
     133                 :            :      * \see setShadow()
     134                 :            :      */
     135                 :            :     QgsTextShadowSettings &shadow();
     136                 :            : 
     137                 :            :     /**
     138                 :            :      * Returns a reference to the text drop shadow settings.
     139                 :            :      * \see setShadow()
     140                 :            :      */
     141                 :          0 :     SIP_SKIP QgsTextShadowSettings shadow() const { return mShadowSettings; }
     142                 :            : 
     143                 :            :     /**
     144                 :            :      * Sets the text's drop shadow settings.
     145                 :            :      * \param shadowSettings shadow settings
     146                 :            :      * \see shadow()
     147                 :            :      */
     148                 :            :     void setShadow( const QgsTextShadowSettings &shadowSettings );
     149                 :            : 
     150                 :            :     /**
     151                 :            :      * Returns a reference to the masking settings.
     152                 :            :      * \see setMask()
     153                 :            :      */
     154                 :            :     QgsTextMaskSettings &mask();
     155                 :            : 
     156                 :            :     /**
     157                 :            :      * Returns a reference to the masking settings.
     158                 :            :      * Masks may be defined in contexts where the text is rendered over some map layers, for labeling especially.
     159                 :            :      * \see setMask()
     160                 :            :      * \since QGIS 3.12
     161                 :            :      */
     162                 :          0 :     SIP_SKIP QgsTextMaskSettings mask() const { return mMaskSettings; }
     163                 :            : 
     164                 :            :     /**
     165                 :            :      * Sets the text's masking settings.
     166                 :            :      * Masks may be defined in contexts where the text is rendered over some map layers, for labeling especially.
     167                 :            :      * \param maskSettings mask settings
     168                 :            :      * \see mask()
     169                 :            :      * \since QGIS 3.12
     170                 :            :      */
     171                 :            :     void setMask( const QgsTextMaskSettings &maskSettings );
     172                 :            : 
     173                 :            :     /**
     174                 :            :      * Returns the font used for rendering text. Note that the size of the font
     175                 :            :      * is not used, and size() should be called instead to determine the size
     176                 :            :      * of rendered text.
     177                 :            :      * \see scaledFont()
     178                 :            :      * \see setFont()
     179                 :            :      * \see namedStyle()
     180                 :            :      * \see toQFont()
     181                 :            :      */
     182                 :            :     QFont font() const;
     183                 :            : 
     184                 :            :     /**
     185                 :            :      * Returns a font with the size scaled to match the format's size settings (including
     186                 :            :      * units and map unit scale) for a specified render context.
     187                 :            :      * \param context destination render context
     188                 :            :      * \param scaleFactor optional font size scaling factor. It is recommended to set this to
     189                 :            :      * QgsTextRenderer::FONT_WORKAROUND_SCALE and then manually scale painter devices or calculations
     190                 :            :      * based on the resultant font metrics. Failure to do so will result in poor quality text rendering
     191                 :            :      * at small font sizes.
     192                 :            :      * \returns font with scaled size
     193                 :            :      * \see font()
     194                 :            :      * \see size()
     195                 :            :      */
     196                 :            :     QFont scaledFont( const QgsRenderContext &context, double scaleFactor = 1.0 ) const;
     197                 :            : 
     198                 :            :     /**
     199                 :            :      * Sets the font used for rendering text. Note that the size of the font
     200                 :            :      * is not used, and setSize() should be called instead to explicitly set the size
     201                 :            :      * of rendered text.
     202                 :            :      * \param font desired font
     203                 :            :      * \see font()
     204                 :            :      * \see setNamedStyle()
     205                 :            :      * \see fromQFont()
     206                 :            :      */
     207                 :            :     void setFont( const QFont &font );
     208                 :            : 
     209                 :            :     /**
     210                 :            :      * Returns the named style for the font used for rendering text (e.g., "bold").
     211                 :            :      * \see setNamedStyle()
     212                 :            :      * \see font()
     213                 :            :      */
     214                 :            :     QString namedStyle() const;
     215                 :            : 
     216                 :            :     /**
     217                 :            :      * Sets the named style for the font used for rendering text.
     218                 :            :      * \param style named style, e.g., "bold"
     219                 :            :      * \see namedStyle()
     220                 :            :      * \see setFont()
     221                 :            :      */
     222                 :            :     void setNamedStyle( const QString &style );
     223                 :            : 
     224                 :            :     /**
     225                 :            :      * Returns the size for rendered text. Units are retrieved using sizeUnit().
     226                 :            :      * \see setSize()
     227                 :            :      * \see sizeUnit()
     228                 :            :      */
     229                 :            :     double size() const;
     230                 :            : 
     231                 :            :     /**
     232                 :            :      * Sets the size for rendered text.
     233                 :            :      * \param size size of rendered text. Units are set using setSizeUnit()
     234                 :            :      * \see size()
     235                 :            :      * \see setSizeUnit()
     236                 :            :      */
     237                 :            :     void setSize( double size );
     238                 :            : 
     239                 :            :     /**
     240                 :            :      * Returns the units for the size of rendered text.
     241                 :            :      * \see size()
     242                 :            :      * \see setSizeUnit()
     243                 :            :      * \see sizeMapUnitScale()
     244                 :            :      */
     245                 :            :     QgsUnitTypes::RenderUnit sizeUnit() const;
     246                 :            : 
     247                 :            :     /**
     248                 :            :      * Sets the units for the size of rendered text.
     249                 :            :      * \param unit size units
     250                 :            :      * \see setSize()
     251                 :            :      * \see sizeUnit()
     252                 :            :      * \see setSizeMapUnitScale()
     253                 :            :      */
     254                 :            :     void setSizeUnit( QgsUnitTypes::RenderUnit unit );
     255                 :            : 
     256                 :            :     /**
     257                 :            :      * Returns the map unit scale object for the size. This is only used if the
     258                 :            :      * sizeUnit() is set to QgsUnitTypes::RenderMapUnit.
     259                 :            :      * \see setSizeMapUnitScale()
     260                 :            :      * \see sizeUnit()
     261                 :            :      */
     262                 :            :     QgsMapUnitScale sizeMapUnitScale() const;
     263                 :            : 
     264                 :            :     /**
     265                 :            :      * Sets the map unit scale object for the size. This is only used if the
     266                 :            :      * sizeUnit() is set to QgsUnitTypes::RenderMapUnit.
     267                 :            :      * \see sizeMapUnitScale()
     268                 :            :      * \see setSizeUnit()
     269                 :            :      */
     270                 :            :     void setSizeMapUnitScale( const QgsMapUnitScale &scale );
     271                 :            : 
     272                 :            :     /**
     273                 :            :      * Returns the color that text will be rendered in.
     274                 :            :      * \see setColor()
     275                 :            :      */
     276                 :            :     QColor color() const;
     277                 :            : 
     278                 :            :     /**
     279                 :            :      * Sets the color that text will be rendered in.
     280                 :            :      * \param color text color
     281                 :            :      * \see color()
     282                 :            :      */
     283                 :            :     void setColor( const QColor &color );
     284                 :            : 
     285                 :            :     /**
     286                 :            :      * Returns the text's opacity. The opacity is a double value between 0 (fully transparent) and 1 (totally
     287                 :            :      * opaque).
     288                 :            :      * \see setOpacity()
     289                 :            :      */
     290                 :            :     double opacity() const;
     291                 :            : 
     292                 :            :     /**
     293                 :            :      * Sets the text's opacity.
     294                 :            :      * \param opacity opacity as a double value between 0 (fully transparent) and 1 (totally
     295                 :            :      * opaque)
     296                 :            :      * \see opacity()
     297                 :            :      */
     298                 :            :     void setOpacity( double opacity );
     299                 :            : 
     300                 :            :     /**
     301                 :            :      * Returns the blending mode used for drawing the text.
     302                 :            :      * \see setBlendMode()
     303                 :            :      */
     304                 :            :     QPainter::CompositionMode blendMode() const;
     305                 :            : 
     306                 :            :     /**
     307                 :            :      * Sets the blending mode used for drawing the text.
     308                 :            :      * \param mode blending mode
     309                 :            :      * \see blendMode()
     310                 :            :      */
     311                 :            :     void setBlendMode( QPainter::CompositionMode mode );
     312                 :            : 
     313                 :            :     /**
     314                 :            :      * Returns the line height for text. This is a number between
     315                 :            :      * 0.0 and 10.0 representing the leading between lines as a
     316                 :            :      * multiplier of line height.
     317                 :            :      * \see setLineHeight()
     318                 :            :      */
     319                 :            :     double lineHeight() const;
     320                 :            : 
     321                 :            :     /**
     322                 :            :      * Sets the line height for text.
     323                 :            :      * \param height a number between
     324                 :            :      * 0.0 and 10.0 representing the leading between lines as a
     325                 :            :      * multiplier of line height.
     326                 :            :      * \see lineHeight()
     327                 :            :      */
     328                 :            :     void setLineHeight( double height );
     329                 :            : 
     330                 :            :     /**
     331                 :            :      * Returns the orientation of the text.
     332                 :            :      * \see setOrientation()
     333                 :            :      * \since QGIS 3.10
     334                 :            :      */
     335                 :            :     TextOrientation orientation() const;
     336                 :            : 
     337                 :            :     /**
     338                 :            :      * Sets the \a orientation for the text.
     339                 :            :      * \see orientation()
     340                 :            :      * \since QGIS 3.10
     341                 :            :      */
     342                 :            :     void setOrientation( TextOrientation orientation );
     343                 :            : 
     344                 :            :     /**
     345                 :            :      * Returns the text capitalization style.
     346                 :            :      *
     347                 :            :      * \see setCapitalization()
     348                 :            :      * \since QGIS 3.16
     349                 :            :      */
     350                 :            :     QgsStringUtils::Capitalization capitalization() const;
     351                 :            : 
     352                 :            :     /**
     353                 :            :      * Sets the text \a capitalization style.
     354                 :            :      *
     355                 :            :      * \see capitalization()
     356                 :            :      * \since QGIS 3.16
     357                 :            :      */
     358                 :            :     void setCapitalization( QgsStringUtils::Capitalization capitalization );
     359                 :            : 
     360                 :            :     /**
     361                 :            :      * Returns TRUE if text should be treated as a HTML document and HTML tags should be used for formatting
     362                 :            :      * the rendered text.
     363                 :            :      *
     364                 :            :      * \warning Only a small subset of HTML formatting is supported. Currently this is restricted to:
     365                 :            :      *
     366                 :            :      * - text color formatting
     367                 :            :      * - strikethrough
     368                 :            :      * - underline
     369                 :            :      * - overline
     370                 :            :      *
     371                 :            :      * \see setAllowHtmlFormatting()
     372                 :            :      * \since QGIS 3.14
     373                 :            :      */
     374                 :            :     bool allowHtmlFormatting() const;
     375                 :            : 
     376                 :            :     /**
     377                 :            :      * Sets whether text should be treated as a HTML document and HTML tags should be used for formatting
     378                 :            :      * the rendered text.
     379                 :            :      *
     380                 :            :      * \warning Only a small subset of HTML formatting is supported. Currently this is restricted to:
     381                 :            :      *
     382                 :            :      * - text color formatting
     383                 :            :      * - strikethrough
     384                 :            :      * - underline
     385                 :            :      * - overline
     386                 :            :      *
     387                 :            :      * \see allowHtmlFormatting()
     388                 :            :      * \since QGIS 3.14
     389                 :            :      */
     390                 :            :     void setAllowHtmlFormatting( bool allow );
     391                 :            : 
     392                 :            :     /**
     393                 :            :      * Returns the background color for text previews.
     394                 :            :      * \see setPreviewBackgroundColor()
     395                 :            :      * \since QGIS 3.10
     396                 :            :      */
     397                 :            :     QColor previewBackgroundColor() const;
     398                 :            : 
     399                 :            :     /**
     400                 :            :      * Sets the background \a color that text will be rendered on for previews.
     401                 :            :      * \see previewBackgroundColor()
     402                 :            :      * \since QGIS 3.10
     403                 :            :      */
     404                 :            :     void setPreviewBackgroundColor( const QColor &color );
     405                 :            : 
     406                 :            :     /**
     407                 :            :      * Reads settings from a layer's custom properties (for QGIS 2.x projects).
     408                 :            :      * \param layer source vector layer
     409                 :            :      */
     410                 :            :     void readFromLayer( QgsVectorLayer *layer );
     411                 :            : 
     412                 :            :     /**
     413                 :            :      * Read settings from a DOM element.
     414                 :            :      * \see writeXml()
     415                 :            :      */
     416                 :            :     void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
     417                 :            : 
     418                 :            :     /**
     419                 :            :      * Write settings into a DOM element.
     420                 :            :      * \see readXml()
     421                 :            :      */
     422                 :            :     QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
     423                 :            : 
     424                 :            :     /**
     425                 :            :      * Returns new mime data representing the text format settings.
     426                 :            :      * Caller takes responsibility for deleting the returned object.
     427                 :            :      * \see fromMimeData()
     428                 :            :      */
     429                 :            :     QMimeData *toMimeData() const SIP_FACTORY;
     430                 :            : 
     431                 :            :     /**
     432                 :            :      * Returns a text format matching the settings from an input \a font.
     433                 :            :      * Unlike setFont(), this method also handles the size and size units
     434                 :            :      * from \a font.
     435                 :            :      * \see toQFont()
     436                 :            :      * \since QGIS 3.2
     437                 :            :      */
     438                 :            :     static QgsTextFormat fromQFont( const QFont &font );
     439                 :            : 
     440                 :            :     /**
     441                 :            :      * Returns a QFont matching the relevant settings from this text format.
     442                 :            :      * Unlike font(), this method also handles the size and size units
     443                 :            :      * from the text format.
     444                 :            :      * \see fromQFont()
     445                 :            :      * \since QGIS 3.2
     446                 :            :      */
     447                 :            :     QFont toQFont() const;
     448                 :            : 
     449                 :            :     /**
     450                 :            :      * Attempts to parse the provided mime \a data as a QgsTextFormat.
     451                 :            :      * If data can be parsed as a text format, \a ok will be set to TRUE.
     452                 :            :      * \see toMimeData()
     453                 :            :      */
     454                 :            :     static QgsTextFormat fromMimeData( const QMimeData *data, bool *ok SIP_OUT = nullptr );
     455                 :            : 
     456                 :            :     /**
     457                 :            :      * Returns TRUE if any component of the font format requires advanced effects
     458                 :            :      * such as blend modes, which require output in raster formats to be fully respected.
     459                 :            :      */
     460                 :            :     bool containsAdvancedEffects() const;
     461                 :            : 
     462                 :            :     /**
     463                 :            :      * Returns TRUE if the specified font was found on the system, or FALSE
     464                 :            :      * if the font was not found and a replacement was used instead.
     465                 :            :      * \see resolvedFontFamily()
     466                 :            :      */
     467                 :            :     bool fontFound() const { return mTextFontFound; }
     468                 :            : 
     469                 :            :     /**
     470                 :            :      * Returns the family for the resolved font, ie if the specified font
     471                 :            :      * was not found on the system this will return the name of the replacement
     472                 :            :      * font.
     473                 :            :      * \see fontFound()
     474                 :            :      */
     475                 :            :     QString resolvedFontFamily() const { return mTextFontFamily; }
     476                 :            : 
     477                 :            :     /**
     478                 :            :      * Returns a reference to the format's property collection, used for data defined overrides.
     479                 :            :      * \see setDataDefinedProperties()
     480                 :            :      * \since QGIS 3.10
     481                 :            :      */
     482                 :            :     QgsPropertyCollection &dataDefinedProperties();
     483                 :            : 
     484                 :            :     /**
     485                 :            :      * Returns a reference to the format's property collection, used for data defined overrides.
     486                 :            :      * \see setDataDefinedProperties()
     487                 :            :      * \note not available in Python bindings
     488                 :            :      * \since QGIS 3.10
     489                 :            :      */
     490                 :            :     const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP;
     491                 :            : 
     492                 :            :     /**
     493                 :            :      * Returns all field names referenced by the configuration (e.g. from data defined properties).
     494                 :            :      * \since QGIS 3.14
     495                 :            :      */
     496                 :            :     QSet<QString> referencedFields( const QgsRenderContext &context ) const;
     497                 :            : 
     498                 :            :     /**
     499                 :            :      * Sets the format's property collection, used for data defined overrides.
     500                 :            :      * \param collection property collection. Existing properties will be replaced.
     501                 :            :      * \see dataDefinedProperties()
     502                 :            :      * \since QGIS 3.10
     503                 :            :      */
     504                 :            :     void setDataDefinedProperties( const QgsPropertyCollection &collection );
     505                 :            : 
     506                 :            :     /**
     507                 :            :      * Updates the format by evaluating current values of data defined properties.
     508                 :            :      * \since QGIS 3.10
     509                 :            :      */
     510                 :            :     void updateDataDefinedProperties( QgsRenderContext &context );
     511                 :            : 
     512                 :            :     /**
     513                 :            :     * Returns a pixmap preview for a text \a format.
     514                 :            :     * \param format text format
     515                 :            :     * \param size target pixmap size
     516                 :            :     * \param previewText text to render in preview, or empty for default text
     517                 :            :     * \param padding space between icon edge and color ramp
     518                 :            :     * \since QGIS 3.10
     519                 :            :     */
     520                 :            :     static QPixmap textFormatPreviewPixmap( const QgsTextFormat &format, QSize size, const QString &previewText = QString(), int padding = 0 );
     521                 :            : 
     522                 :            :   private:
     523                 :            : 
     524                 :            :     QgsTextBufferSettings mBufferSettings;
     525                 :            :     QgsTextBackgroundSettings mBackgroundSettings;
     526                 :            :     QgsTextShadowSettings mShadowSettings;
     527                 :            :     QgsTextMaskSettings mMaskSettings;
     528                 :            : 
     529                 :            :     QString mTextFontFamily;
     530                 :            :     bool mTextFontFound = true;
     531                 :            : 
     532                 :            :     QSharedDataPointer<QgsTextSettingsPrivate> d;
     533                 :            : 
     534                 :            : };
     535                 :            : 
     536                 :          5 : Q_DECLARE_METATYPE( QgsTextFormat )
     537                 :            : 
     538                 :            : #endif // QGSTEXTFORMAT_H

Generated by: LCOV version 1.14