7#ifndef PDF_PATTERN_DEFINITION_H
8#define PDF_PATTERN_DEFINITION_H
10#include "PdfFunctionDefinition.h"
11#include "PdfVariant.h"
12#include "PdfExtGState.h"
13#include "PdfColorSpace.h"
14#include "podofo/auxiliary/Rect.h"
15#include <podofo/auxiliary/Matrix.h>
19 class PdfIndirectObjectList;
20 class PdfShadingDictionary;
22 enum class PdfPatternType : uint8_t
29 class PODOFO_API PdfPatternDefinition
31 friend class PdfTilingPatternDefinition;
32 friend class PdfShadingPatternDefinition;
33 friend class PdfPattern;
35 virtual ~PdfPatternDefinition();
37 PdfPatternDefinition(nullable<const Matrix&> matrix);
39 virtual PdfPatternType GetType()
const = 0;
40 const Matrix& GetMatrix() {
return m_Matrix; }
42 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
43 PdfPatternDefinition(
const PdfPatternDefinition&) =
delete;
44 PdfPatternDefinition& operator=(
const PdfPatternDefinition&) =
delete;
46 virtual void FillExportDictionary(PdfDictionary& dict)
const;
51 enum class PdfTilingPaintType : uint8_t
58 enum class PdfTilingSpacingType : uint8_t
63 ConstantSpacingFasterTiling,
66 class PODOFO_API PdfTilingPatternDefinition :
public PdfPatternDefinition
68 friend class PdfColouredTilingPatternDefinition;
69 friend class PdfUncolouredTilingPatternDefinition;
72 PdfTilingPatternDefinition(PdfTilingSpacingType spacingType,
const Rect& bbox,
73 double xStep,
double yStep, nullable<const Matrix&> matrix);
76 PdfPatternType GetType()
const override;
78 virtual PdfTilingPaintType GetPaintType()
const = 0;
79 PdfTilingSpacingType GetSpacingType()
const {
return m_SpacingType; }
80 const Rect& GetBBox()
const {
return m_BBox; }
81 double GetXStep()
const {
return m_XStep; }
82 double GetYStep()
const {
return m_YStep; }
85 void fillExportDictionary(PdfDictionary& dict)
const override;
88 PdfTilingSpacingType m_SpacingType;
94 class PODOFO_API PdfColouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
97 PdfColouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
98 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
100 PdfTilingPaintType GetPaintType()
const override;
103 class PODOFO_API PdfUncolouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
106 PdfUncolouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
107 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
109 PdfTilingPaintType GetPaintType()
const override;
112 enum class PdfShadingType : uint8_t
120 TensorProductMesh = 7
123 class PODOFO_API PdfShadingDefinition
125 friend class PdfShadingDictionary;
126 friend class PdfFunctionBasedShadingDefinition;
127 friend class PdfAxialShadingDefinition;
128 friend class PdfRadialShadingDefinition;
129 friend class PdfFreeFormMeshShadingDefinition;
130 friend class PdfLatticeFormMeshShadingDefinition;
131 friend class PdfCoonsPatchMeshShadingDefinition;
132 friend class PdfTensorProductMeshShadingDefinition;
135 PdfShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
136 nullable<const PdfColorRaw&> background, nullable<const Rect&> bbox,
bool antiAlias);
138 PdfShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
139 nullable<const PdfColorRaw&> background,
const Rect& bbox,
bool antiAlias);
141 virtual ~PdfShadingDefinition();
142 virtual PdfShadingType GetShadingType()
const = 0;
144 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
146 const PdfColorSpaceFilter& GetColorSpace()
const {
return *m_ColorSpace; }
147 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
148 bool GetAntiAlias()
const {
return m_AntiAlias; }
149 const nullable<PdfColorRaw>& GetBackground()
const {
return m_Background; }
150 const Rect& GetBBox()
const {
return m_BBox; }
152 PdfShadingDefinition(
const PdfShadingDefinition&) =
delete;
153 PdfShadingDefinition& operator=(
const PdfShadingDefinition&) =
delete;
154 virtual void FillExportDictionary(PdfDictionary& dict)
const;
157 PdfVariant m_colorSpaceExpVar;
158 std::vector<PdfFunctionDefinitionPtr> m_Functions;
159 PdfVariant m_functionsExpVar;
160 nullable<PdfColorRaw> m_Background;
169 class PODOFO_API PdfShadingPatternDefinition
final :
public PdfPatternDefinition
182 PdfPatternType GetType()
const override;
183 const PdfShadingDefinition& GetShading()
const {
return *m_Shading; }
185 const Matrix& GetMatrix()
const {
return m_Matrix; }
186 const PdfExtGStateDefinition* GetExtGState()
const {
return m_ExtGState.get(); }
200 class PODOFO_API PdfFunctionBasedShadingDefinition final :
public PdfShadingDefinition
203 PdfFunctionBasedShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
204 nullable<
const std::array<double, 4>&> domain = { }, nullable<const Matrix&> matrix = { },
205 nullable<const PdfColorRaw&> background = { }, nullable<const Rect&> bbox = { },
206 bool antiAlias =
false);
211 PdfFunctionBasedShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
212 const std::array<double, 4>& domain,
const Matrix& matrix,
213 const PdfColorRaw& background,
const Rect& bbox,
bool antiAlias);
216 void fillExportDictionary(PdfDictionary& dict)
const override;
217 PdfShadingType GetShadingType()
const override;
218 const std::array<double, 4>& GetDomain()
const {
return m_Domain; }
219 const Matrix& GetMatrix()
const {
return m_Matrix; }
221 std::array<double, 4> m_Domain;
225 class PODOFO_API PdfAxialShadingDefinition final :
public PdfShadingDefinition
228 PdfAxialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
229 const std::array<double, 4>& coords, nullable<
const std::array<bool, 2>&> extend = { },
230 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
231 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
236 PdfAxialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
237 const std::array<double, 4>& coords,
const std::array<bool, 2>& extend,
238 const std::array<double, 2> domain,
const PdfColorRaw& background,
239 const Rect& bbox,
bool antiAlias);
241 void fillExportDictionary(PdfDictionary& dict)
const override;
242 PdfShadingType GetShadingType()
const override;
243 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
244 const std::array<double, 4>& GetCoords()
const {
return m_Coords; }
245 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
246 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
249 std::array<double, 4> m_Coords;
250 std::array<bool, 2> m_Extend;
251 std::array<double, 2> m_Domain;
254 class PODOFO_API PdfRadialShadingDefinition final :
public PdfShadingDefinition
257 PdfRadialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
258 const std::array<double, 6>& coords, nullable<
const std::array<bool, 2>&> extend = { },
259 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
260 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
265 PdfRadialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
266 const std::array<double, 6>& coords,
const std::array<bool, 2>& extend,
267 const std::array<double, 2>& domain,
const PdfColorRaw& background,
268 const Rect& bbox,
bool antiAlias);
270 void fillExportDictionary(PdfDictionary& dict)
const override;
271 PdfShadingType GetShadingType()
const override;
272 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
273 const std::array<double, 6>& GetCoords()
const {
return m_Coords; }
274 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
275 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
277 std::array<double, 6> m_Coords;
278 std::array<bool, 2> m_Extend;
279 std::array<double, 2> m_Domain;
282 class PODOFO_API PdfFreeFormMeshShadingDefinition final :
public PdfShadingDefinition
285 PdfFreeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
286 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
287 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
288 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
293 PdfFreeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
294 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
295 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
296 const Rect& bbox,
bool antiAlias);
298 void fillExportDictionary(PdfDictionary& dict)
const override;
299 PdfShadingType GetShadingType()
const override;
300 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
301 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
302 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
303 const std::vector<double>& GetDecode()
const {
return m_Decode; }
304 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
306 std::vector<double> m_Decode;
307 unsigned m_BitsPerCoordinate;
308 unsigned m_BitsPerComponent;
309 unsigned m_BitsPerFlag;
312 class PODOFO_API PdfLatticeFormMeshShadingDefinition final :
public PdfShadingDefinition
315 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
316 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
317 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
318 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
323 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
324 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
325 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
326 const Rect& bbox,
bool antiAlias);
329 void fillExportDictionary(PdfDictionary& dict)
const override;
330 PdfShadingType GetShadingType()
const override;
331 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
332 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
333 unsigned GetVerticesPerRow()
const {
return m_VerticesPerRow; }
334 const std::vector<double>& GetDecode()
const {
return m_Decode; }
335 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
337 std::vector<double> m_Decode;
338 unsigned m_BitsPerCoordinate;
339 unsigned m_BitsPerComponent;
340 unsigned m_VerticesPerRow;
343 class PODOFO_API PdfCoonsPatchMeshShadingDefinition final :
public PdfShadingDefinition
346 PdfCoonsPatchMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
347 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
348 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
349 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
354 PdfCoonsPatchMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
355 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
356 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
357 const Rect& bbox,
bool antiAlias);
359 void fillExportDictionary(PdfDictionary& dict)
const override;
360 PdfShadingType GetShadingType()
const override;
361 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
362 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
363 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
364 const std::vector<double>& GetDecode()
const {
return m_Decode; }
365 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
367 std::vector<double> m_Decode;
368 unsigned m_BitsPerCoordinate;
369 unsigned m_BitsPerComponent;
370 unsigned m_BitsPerFlag;
373 class PODOFO_API PdfTensorProductMeshShadingDefinition final :
public PdfShadingDefinition
376 PdfTensorProductMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
377 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
378 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
379 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
384 PdfTensorProductMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
385 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
386 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
387 const Rect& bbox,
bool antiAlias);
390 void fillExportDictionary(PdfDictionary& dict)
const override;
391 PdfShadingType GetShadingType()
const override;
392 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
393 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
394 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
395 const std::vector<double>& GetDecode()
const {
return m_Decode; }
396 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
398 std::vector<double> m_Decode;
399 unsigned m_BitsPerCoordinate;
400 unsigned m_BitsPerComponent;
401 unsigned m_BitsPerFlag;
The PDF dictionary data type of PoDoFo (inherits from PdfDataContainer, the base class for such repre...
Definition PdfDictionary.h:82
A reference is a pointer to a object in the PDF file of the form "4 0 R", where 4 is the object numbe...
Definition PdfReference.h:24
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:38
SPDX-FileCopyrightText: (C) 2022 Francesco Pretto ceztko@gmail.com SPDX-License-Identifier: LGPL-2....
Definition basetypes.h:16
std::shared_ptr< const PdfPatternDefinition > PdfPatternDefinitionPtr
Convenience alias for a constant PdfTilingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:406
std::shared_ptr< const PdfColorSpaceFilter > PdfColorSpaceFilterPtr
Convenience alias for a constant PdfColorSpaceFilter shared ptr.
Definition PdfColorSpaceFilter.h:85
std::shared_ptr< const PdfShadingDefinition > PdfShadingDefinitionPtr
Convenience alias for a constant PdfShadingDefinition shared ptr.
Definition PdfPatternDefinition.h:167
std::shared_ptr< const PdfTilingPatternDefinition > PdfTilingPatternDefinitionPtr
Convenience alias for a constant PdfTilingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:410
std::shared_ptr< const PdfShadingPatternDefinition > PdfShadingPatternDefinitionPtr
Convenience alias for a constant PdfShadingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:414
std::shared_ptr< const PdfExtGStateDefinition > PdfExtGStateDefinitionPtr
Convenience alias for a constant PdfExtGStateDefinition shared ptr.
Definition PdfExtGStateDefinition.h:34