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

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                              qgslayoutrendercontext.h
       3                 :            :                              -------------------
       4                 :            :     begin                : July 2017
       5                 :            :     copyright            : (C) 2017 by 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                 :            : #ifndef QGSLAYOUTRENDERCONTEXT_H
      17                 :            : #define QGSLAYOUTRENDERCONTEXT_H
      18                 :            : 
      19                 :            : #include "qgis_core.h"
      20                 :            : #include "qgslayoutmeasurementconverter.h"
      21                 :            : #include "qgsrendercontext.h"
      22                 :            : #include <QtGlobal>
      23                 :            : 
      24                 :            : class QgsLayout;
      25                 :            : 
      26                 :            : /**
      27                 :            :  * \ingroup core
      28                 :            :  * \class QgsLayoutRenderContext
      29                 :            :  * \brief Stores information relating to the current rendering settings for a layout.
      30                 :            :  * \since QGIS 3.0
      31                 :            :  */
      32                 :            : class CORE_EXPORT QgsLayoutRenderContext : public QObject
      33                 :            : {
      34                 :            : 
      35                 :            :     Q_OBJECT
      36                 :            : 
      37                 :            :   public:
      38                 :            : 
      39                 :            :     //! Flags for controlling how a layout is rendered
      40                 :            :     enum Flag
      41                 :            :     {
      42                 :            :       FlagDebug = 1 << 1,  //!< Debug/testing mode, items are drawn as solid rectangles.
      43                 :            :       FlagOutlineOnly = 1 << 2, //!< Render items as outlines only.
      44                 :            :       FlagAntialiasing = 1 << 3, //!< Use antialiasing when drawing items.
      45                 :            :       FlagUseAdvancedEffects = 1 << 4, //!< Enable advanced effects such as blend modes.
      46                 :            :       FlagForceVectorOutput = 1 << 5, //!< Force output in vector format where possible, even if items require rasterization to keep their correct appearance.
      47                 :            :       FlagHideCoverageLayer = 1 << 6, //!< Hide coverage layer in outputs
      48                 :            :       FlagDrawSelection = 1 << 7, //!< Draw selection
      49                 :            :       FlagDisableTiledRasterLayerRenders = 1 << 8, //!< If set, then raster layers will not be drawn as separate tiles. This may improve the appearance in exported files, at the cost of much higher memory usage during exports.
      50                 :            :       FlagRenderLabelsByMapLayer = 1 << 9, //!< When rendering map items to multi-layered exports, render labels belonging to different layers into separate export layers
      51                 :            :       FlagLosslessImageRendering = 1 << 10, //!< Render images losslessly whenever possible, instead of the default lossy jpeg rendering used for some destination devices (e.g. PDF). This flag only works with builds based on Qt 5.13 or later.
      52                 :            :     };
      53                 :            :     Q_DECLARE_FLAGS( Flags, Flag )
      54                 :            : 
      55                 :            :     /**
      56                 :            :      * Constructor for QgsLayoutRenderContext.
      57                 :            :      */
      58                 :            :     QgsLayoutRenderContext( QgsLayout *layout SIP_TRANSFERTHIS );
      59                 :            : 
      60                 :            :     /**
      61                 :            :      * Sets the combination of \a flags that will be used for rendering the layout.
      62                 :            :      * \see setFlag()
      63                 :            :      * \see flags()
      64                 :            :      * \see testFlag()
      65                 :            :      */
      66                 :            :     void setFlags( QgsLayoutRenderContext::Flags flags );
      67                 :            : 
      68                 :            :     /**
      69                 :            :      * Enables or disables a particular rendering \a flag for the layout. Other existing
      70                 :            :      * flags are not affected.
      71                 :            :      * \see setFlags()
      72                 :            :      * \see flags()
      73                 :            :      * \see testFlag()
      74                 :            :      */
      75                 :            :     void setFlag( QgsLayoutRenderContext::Flag flag, bool on = true );
      76                 :            : 
      77                 :            :     /**
      78                 :            :      * Returns the current combination of flags used for rendering the layout.
      79                 :            :      * \see setFlags()
      80                 :            :      * \see setFlag()
      81                 :            :      * \see testFlag()
      82                 :            :      */
      83                 :            :     QgsLayoutRenderContext::Flags flags() const;
      84                 :            : 
      85                 :            :     /**
      86                 :            :      * Check whether a particular rendering \a flag is enabled for the layout.
      87                 :            :      * \see setFlags()
      88                 :            :      * \see setFlag()
      89                 :            :      * \see flags()
      90                 :            :      */
      91                 :            :     bool testFlag( Flag flag ) const;
      92                 :            : 
      93                 :            :     /**
      94                 :            :      * Returns the combination of render context flags matched to the layout context's settings.
      95                 :            :      */
      96                 :            :     QgsRenderContext::Flags renderContextFlags() const;
      97                 :            : 
      98                 :            :     /**
      99                 :            :      * Sets the \a dpi for outputting the layout. This also sets the
     100                 :            :      * corresponding DPI for the context's measurementConverter().
     101                 :            :      * \see dpi()
     102                 :            :      */
     103                 :            :     void setDpi( double dpi );
     104                 :            : 
     105                 :            :     /**
     106                 :            :      * Returns the \a dpi for outputting the layout.
     107                 :            :      * \see setDpi()
     108                 :            :      */
     109                 :            :     double dpi() const;
     110                 :            : 
     111                 :            :     /**
     112                 :            :      * Sets color that is used for drawing of selected vector features
     113                 :            :      * \see selectionColor()
     114                 :            :      * \since QGIS 3.4
     115                 :            :      */
     116                 :            :     void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
     117                 :            : 
     118                 :            :     /**
     119                 :            :      * Gets color that is used for drawing of selected vector features
     120                 :            :      * \see setSelectionColor()
     121                 :            :      * \since QGIS 3.4
     122                 :            :      */
     123                 :          0 :     QColor selectionColor() const { return mSelectionColor; }
     124                 :            : 
     125                 :            :     /**
     126                 :            :      * Returns the layout measurement converter to be used in the layout. This converter is used
     127                 :            :      * for translating between other measurement units and the layout's native unit.
     128                 :            :      */
     129                 :            :     SIP_SKIP const QgsLayoutMeasurementConverter &measurementConverter() const { return mMeasurementConverter; }
     130                 :            : 
     131                 :            :     /**
     132                 :            :      * Returns the layout measurement converter to be used in the layout. This converter is used
     133                 :            :      * for translating between other measurement units and the layout's native unit.
     134                 :            :      */
     135                 :          0 :     QgsLayoutMeasurementConverter &measurementConverter() { return mMeasurementConverter; }
     136                 :            : 
     137                 :            :     /**
     138                 :            :      * Returns TRUE if the render current being conducted is a preview render,
     139                 :            :      * i.e. it is being rendered inside a QGraphicsView widget as opposed to a destination
     140                 :            :      * device (such as an image).
     141                 :            :      */
     142                 :          0 :     bool isPreviewRender() const { return mIsPreviewRender; }
     143                 :            : 
     144                 :            :     /**
     145                 :            :      * Returns TRUE if the page grid should be drawn.
     146                 :            :      * \see setGridVisible()
     147                 :            :      */
     148                 :            :     bool gridVisible() const;
     149                 :            : 
     150                 :            :     /**
     151                 :            :      * Sets whether the page grid should be \a visible.
     152                 :            :      * \see gridVisible()
     153                 :            :      */
     154                 :            :     void setGridVisible( bool visible );
     155                 :            : 
     156                 :            :     /**
     157                 :            :      * Returns TRUE if the item bounding boxes should be drawn.
     158                 :            :      * \see setBoundingBoxesVisible()
     159                 :            :      */
     160                 :            :     bool boundingBoxesVisible() const;
     161                 :            : 
     162                 :            :     /**
     163                 :            :      * Sets whether the item bounding boxes should be \a visible.
     164                 :            :      * \see boundingBoxesVisible()
     165                 :            :      */
     166                 :            :     void setBoundingBoxesVisible( bool visible );
     167                 :            : 
     168                 :            :     /**
     169                 :            :      * Sets whether the page items should be \a visible in the layout. Removing
     170                 :            :      * them will prevent both display of the page boundaries in layout views and
     171                 :            :      * will also prevent them from being rendered in layout exports.
     172                 :            :      * \see pagesVisible()
     173                 :            :      */
     174                 :            :     void setPagesVisible( bool visible );
     175                 :            : 
     176                 :            :     /**
     177                 :            :      * Returns whether the page items are be visible in the layout. This setting
     178                 :            :      * effects both display of the page boundaries in layout views and
     179                 :            :      * whether they will be rendered in layout exports.
     180                 :            :      * \see setPagesVisible()
     181                 :            :      */
     182                 :          0 :     bool pagesVisible() const { return mPagesVisible; }
     183                 :            : 
     184                 :            :     /**
     185                 :            :      * Sets the current item \a layer to draw while exporting. QgsLayoutItem subclasses
     186                 :            :      * which support multi-layer SVG exports must check the currentExportLayer()
     187                 :            :      * and customize their rendering based on the layer.
     188                 :            :      *
     189                 :            :      * If \a layer is -1, all item layers will be rendered.
     190                 :            :      *
     191                 :            :      * \see currentExportLayer()
     192                 :            :      * \deprecated Items should now handle this themselves, via QgsLayoutItem::exportLayerBehavior() and returning QgsLayoutItem::nextExportPart().
     193                 :            :      */
     194                 :          0 :     Q_DECL_DEPRECATED void setCurrentExportLayer( int layer = -1 ) SIP_DEPRECATED { mCurrentExportLayer = layer; }
     195                 :            : 
     196                 :            :     /**
     197                 :            :      * Returns the current item layer to draw while exporting. QgsLayoutItem subclasses
     198                 :            :      * which support multi-layer SVG exports must check this
     199                 :            :      * and customize their rendering based on the layer.
     200                 :            :      *
     201                 :            :      * If \a layer is -1, all item layers should be rendered.
     202                 :            :      *
     203                 :            :      * \see setCurrentExportLayer()
     204                 :            :      * \deprecated Items should now handle this themselves, via QgsLayoutItem::exportLayerBehavior() and returning QgsLayoutItem::nextExportPart().
     205                 :            :      */
     206                 :          0 :     Q_DECL_DEPRECATED int currentExportLayer() const SIP_DEPRECATED  { return mCurrentExportLayer; }
     207                 :            : 
     208                 :            :     /**
     209                 :            :      * Returns the text render format, which dictates how text is rendered (e.g. as paths or real text objects).
     210                 :            :      *
     211                 :            :      * \see setTextRenderFormat()
     212                 :            :      * \since QGIS 3.4.3
     213                 :            :      */
     214                 :          0 :     QgsRenderContext::TextRenderFormat textRenderFormat() const
     215                 :            :     {
     216                 :          0 :       return mTextRenderFormat;
     217                 :            :     }
     218                 :            : 
     219                 :            :     /**
     220                 :            :      * Sets the text render \a format, which dictates how text is rendered (e.g. as paths or real text objects).
     221                 :            :      *
     222                 :            :      * \see textRenderFormat()
     223                 :            :      * \since QGIS 3.4.3
     224                 :            :      */
     225                 :          0 :     void setTextRenderFormat( QgsRenderContext::TextRenderFormat format )
     226                 :            :     {
     227                 :          0 :       mTextRenderFormat = format;
     228                 :          0 :     }
     229                 :            : 
     230                 :            :     /**
     231                 :            :      * Sets the simplification setting to use when rendering vector layers.
     232                 :            :      *
     233                 :            :      * If the simplify \a method is enabled, it apply to all vector layers rendered inside map items.
     234                 :            :      *
     235                 :            :      * This can be used to specify global simplification methods to apply during map exports,
     236                 :            :      * e.g. to allow vector layers to be simplified to an appropriate maximum level of detail
     237                 :            :      * during PDF exports (avoiding excessive PDF size due to huge numbers of vertices).
     238                 :            :      *
     239                 :            :      * The default is to use no simplification.
     240                 :            :      *
     241                 :            :      * \note This simplification method is only used during non-preview renders.
     242                 :            :      *
     243                 :            :      * \see simplifyMethod()
     244                 :            :      *
     245                 :            :      * \since QGIS 3.10
     246                 :            :      */
     247                 :          0 :     void setSimplifyMethod( const QgsVectorSimplifyMethod &method ) { mSimplifyMethod = method; }
     248                 :            : 
     249                 :            :     /**
     250                 :            :      * Returns the simplification settings to use when rendering vector layers.
     251                 :            :      *
     252                 :            :      * If enabled, it will apply to all vector layers rendered for the map.
     253                 :            :      *
     254                 :            :      * The default is to use no simplification.
     255                 :            :      *
     256                 :            :      * \note This simplification method is only used during non-preview renders.
     257                 :            :      *
     258                 :            :      * \see setSimplifyMethod()
     259                 :            :      * \since QGIS 3.10
     260                 :            :      */
     261                 :          0 :     const QgsVectorSimplifyMethod &simplifyMethod() const { return mSimplifyMethod; }
     262                 :            : 
     263                 :            :     /**
     264                 :            :      * Returns a list of map themes to use during the export.
     265                 :            :      *
     266                 :            :      * Items which handle layered exports (e.g. maps) may utilize this list to export different
     267                 :            :      * representations of the item as export layers, as they iterate through these included themes.
     268                 :            :      *
     269                 :            :      * \see setExportThemes()
     270                 :            :      * \since QGIS 3.10
     271                 :            :      */
     272                 :            :     QStringList exportThemes() const;
     273                 :            : 
     274                 :            :     /**
     275                 :            :      * Sets a list of map \a themes to use during the export.
     276                 :            :      *
     277                 :            :      * Items which handle layered exports (e.g. maps) may utilize this list to export different
     278                 :            :      * representations of the item as export layers, as they iterate through these included themes.
     279                 :            :      *
     280                 :            :      * \see exportThemes()
     281                 :            :      * \since QGIS 3.10
     282                 :            :      */
     283                 :            :     void setExportThemes( const QStringList &themes );
     284                 :            : 
     285                 :            :     /**
     286                 :            :      * Sets the list of predefined \a scales to use with the layout. This is used
     287                 :            :      * for maps which are set to the predefined atlas scaling mode.
     288                 :            :      * \see predefinedScales()
     289                 :            :      * \since QGIS 3.10
     290                 :            :      */
     291                 :            :     void setPredefinedScales( const QVector<qreal> &scales );
     292                 :            : 
     293                 :            :     /**
     294                 :            :      * Returns the current list of predefined scales for use with the layout.
     295                 :            :      * \see setPredefinedScales()
     296                 :            :      * \since QGIS 3.10
     297                 :            :      */
     298                 :          0 :     QVector<qreal> predefinedScales() const { return mPredefinedScales; }
     299                 :            : 
     300                 :            :     /**
     301                 :            :      * Returns the possibly NULL feature filter provider.
     302                 :            :      *
     303                 :            :      * A feature filter provider for filtering visible features or attributes.
     304                 :            :      * It is currently used by QGIS Server Access Control Plugins.
     305                 :            :      *
     306                 :            :      * \since QGIS 3.18
     307                 :            :      */
     308                 :            :     QgsFeatureFilterProvider *featureFilterProvider() const;
     309                 :            : 
     310                 :            :     /**
     311                 :            :      * Sets feature filter provider to \a featureFilterProvider.
     312                 :            :      *
     313                 :            :      * A feature filter provider for filtering visible features or attributes.
     314                 :            :      * It is currently used by QGIS Server Access Control Plugins.
     315                 :            :      *
     316                 :            :      * \since QGIS 3.18
     317                 :            :      */
     318                 :            :     void setFeatureFilterProvider( QgsFeatureFilterProvider *featureFilterProvider );
     319                 :            : 
     320                 :            :   signals:
     321                 :            : 
     322                 :            :     /**
     323                 :            :      * Emitted whenever the context's \a flags change.
     324                 :            :      * \see setFlags()
     325                 :            :      */
     326                 :            :     void flagsChanged( QgsLayoutRenderContext::Flags flags );
     327                 :            : 
     328                 :            :     /**
     329                 :            :      * Emitted when the context's DPI is changed.
     330                 :            :      */
     331                 :            :     void dpiChanged();
     332                 :            : 
     333                 :            :     /**
     334                 :            :      * Emitted when the list of predefined scales changes.
     335                 :            :      * \see predefinedScales()
     336                 :            :      * \since QGIS 3.10
     337                 :            :      */
     338                 :            :     void predefinedScalesChanged();
     339                 :            : 
     340                 :            :   private:
     341                 :            : 
     342                 :            :     Flags mFlags = Flags();
     343                 :            : 
     344                 :            :     QgsLayout *mLayout = nullptr;
     345                 :            : 
     346                 :            :     int mCurrentExportLayer = -1;
     347                 :            : 
     348                 :            :     QColor mSelectionColor = Qt::yellow;
     349                 :            : 
     350                 :            :     QgsLayoutMeasurementConverter mMeasurementConverter;
     351                 :            : 
     352                 :            :     bool mIsPreviewRender = true;
     353                 :            :     bool mGridVisible = false;
     354                 :            :     bool mBoundingBoxesVisible = true;
     355                 :            :     bool mPagesVisible = true;
     356                 :            : 
     357                 :            :     QgsRenderContext::TextRenderFormat mTextRenderFormat = QgsRenderContext::TextFormatAlwaysOutlines;
     358                 :            : 
     359                 :            :     QStringList mExportThemes;
     360                 :            : 
     361                 :            :     QgsVectorSimplifyMethod mSimplifyMethod;
     362                 :            : 
     363                 :            :     QVector<qreal> mPredefinedScales;
     364                 :            : 
     365                 :            :     QgsFeatureFilterProvider *mFeatureFilterProvider = nullptr;
     366                 :            : 
     367                 :            :     friend class QgsLayoutExporter;
     368                 :            :     friend class TestQgsLayout;
     369                 :            :     friend class LayoutContextPreviewSettingRestorer;
     370                 :            :     friend class TestQgsLayoutMap;
     371                 :            :     friend class TestQgsLayoutLabel;
     372                 :            : 
     373                 :            : };
     374                 :            : 
     375                 :          0 : Q_DECLARE_METATYPE( QgsLayoutRenderContext::Flags )
     376                 :            : 
     377                 :            : #endif //QGSLAYOUTRENDERCONTEXT_H
     378                 :            : 
     379                 :            : 
     380                 :            : 

Generated by: LCOV version 1.14