4#ifndef PDF_PATTERN_DEFINITION_H
5#define PDF_PATTERN_DEFINITION_H
7#include "PdfFunctionDefinition.h"
9#include "PdfExtGState.h"
10#include "PdfColorSpace.h"
11#include "podofo/auxiliary/Rect.h"
12#include <podofo/auxiliary/Matrix.h>
16 class PdfIndirectObjectList;
17 class PdfShadingDictionary;
19 enum class PdfPatternType : uint8_t
26 class PODOFO_API PdfPatternDefinition
28 friend class PdfTilingPatternDefinition;
29 friend class PdfShadingPatternDefinition;
30 friend class PdfPattern;
32 virtual ~PdfPatternDefinition();
34 PdfPatternDefinition(nullable<const Matrix&> matrix);
36 virtual PdfPatternType GetType()
const = 0;
37 const Matrix& GetMatrix() {
return m_Matrix; }
39 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
40 PdfPatternDefinition(
const PdfPatternDefinition&) =
delete;
41 PdfPatternDefinition& operator=(
const PdfPatternDefinition&) =
delete;
43 virtual void FillExportDictionary(PdfDictionary& dict)
const;
48 enum class PdfTilingPaintType : uint8_t
55 enum class PdfTilingSpacingType : uint8_t
60 ConstantSpacingFasterTiling,
63 class PODOFO_API PdfTilingPatternDefinition :
public PdfPatternDefinition
65 friend class PdfColouredTilingPatternDefinition;
66 friend class PdfUncolouredTilingPatternDefinition;
69 PdfTilingPatternDefinition(PdfTilingSpacingType spacingType,
const Rect& bbox,
70 double xStep,
double yStep, nullable<const Matrix&> matrix);
73 PdfPatternType GetType()
const override;
75 virtual PdfTilingPaintType GetPaintType()
const = 0;
76 PdfTilingSpacingType GetSpacingType()
const {
return m_SpacingType; }
77 const Rect& GetBBox()
const {
return m_BBox; }
78 double GetXStep()
const {
return m_XStep; }
79 double GetYStep()
const {
return m_YStep; }
82 void fillExportDictionary(PdfDictionary& dict)
const override;
85 PdfTilingSpacingType m_SpacingType;
91 class PODOFO_API PdfColouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
94 PdfColouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
95 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
97 PdfTilingPaintType GetPaintType()
const override;
100 class PODOFO_API PdfUncolouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
103 PdfUncolouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
104 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
106 PdfTilingPaintType GetPaintType()
const override;
109 enum class PdfShadingType : uint8_t
117 TensorProductMesh = 7
120 class PODOFO_API PdfShadingDefinition
122 friend class PdfShadingDictionary;
123 friend class PdfFunctionBasedShadingDefinition;
124 friend class PdfAxialShadingDefinition;
125 friend class PdfRadialShadingDefinition;
126 friend class PdfFreeFormMeshShadingDefinition;
127 friend class PdfLatticeFormMeshShadingDefinition;
128 friend class PdfCoonsPatchMeshShadingDefinition;
129 friend class PdfTensorProductMeshShadingDefinition;
132 PdfShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
133 nullable<const PdfColorRaw&> background, nullable<const Rect&> bbox,
bool antiAlias);
135 PdfShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
136 nullable<const PdfColorRaw&> background,
const Rect& bbox,
bool antiAlias);
138 virtual ~PdfShadingDefinition();
139 virtual PdfShadingType GetShadingType()
const = 0;
141 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
143 const PdfColorSpaceFilter& GetColorSpace()
const {
return *m_ColorSpace; }
144 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
145 bool GetAntiAlias()
const {
return m_AntiAlias; }
146 const nullable<PdfColorRaw>& GetBackground()
const {
return m_Background; }
147 const Rect& GetBBox()
const {
return m_BBox; }
149 PdfShadingDefinition(
const PdfShadingDefinition&) =
delete;
150 PdfShadingDefinition& operator=(
const PdfShadingDefinition&) =
delete;
151 virtual void FillExportDictionary(PdfDictionary& dict)
const;
154 PdfVariant m_colorSpaceExpVar;
155 std::vector<PdfFunctionDefinitionPtr> m_Functions;
156 PdfVariant m_functionsExpVar;
157 nullable<PdfColorRaw> m_Background;
165 class PODOFO_API PdfShadingPatternDefinition
final :
public PdfPatternDefinition
176 PdfPatternType GetType()
const override;
177 const PdfShadingDefinition& GetShading()
const {
return *m_Shading; }
179 const Matrix& GetMatrix()
const {
return m_Matrix; }
180 const PdfExtGStateDefinition* GetExtGState()
const {
return m_ExtGState.get(); }
194 class PODOFO_API PdfFunctionBasedShadingDefinition final :
public PdfShadingDefinition
197 PdfFunctionBasedShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
198 nullable<
const std::array<double, 4>&> domain = { }, nullable<const Matrix&> matrix = { },
199 nullable<const PdfColorRaw&> background = { }, nullable<const Rect&> bbox = { },
200 bool antiAlias =
false);
203 PdfFunctionBasedShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
204 const std::array<double, 4>& domain,
const Matrix& matrix,
205 const PdfColorRaw& background,
const Rect& bbox,
bool antiAlias);
208 void fillExportDictionary(PdfDictionary& dict)
const override;
209 PdfShadingType GetShadingType()
const override;
210 const std::array<double, 4>& GetDomain()
const {
return m_Domain; }
211 const Matrix& GetMatrix()
const {
return m_Matrix; }
213 std::array<double, 4> m_Domain;
217 class PODOFO_API PdfAxialShadingDefinition final :
public PdfShadingDefinition
220 PdfAxialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
221 const std::array<double, 4>& coords, nullable<
const std::array<bool, 2>&> extend = { },
222 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
223 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
226 PdfAxialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
227 const std::array<double, 4>& coords,
const std::array<bool, 2>& extend,
228 const std::array<double, 2> domain,
const PdfColorRaw& background,
229 const Rect& bbox,
bool antiAlias);
231 void fillExportDictionary(PdfDictionary& dict)
const override;
232 PdfShadingType GetShadingType()
const override;
233 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
234 const std::array<double, 4>& GetCoords()
const {
return m_Coords; }
235 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
236 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
239 std::array<double, 4> m_Coords;
240 std::array<bool, 2> m_Extend;
241 std::array<double, 2> m_Domain;
244 class PODOFO_API PdfRadialShadingDefinition final :
public PdfShadingDefinition
247 PdfRadialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
248 const std::array<double, 6>& coords, nullable<
const std::array<bool, 2>&> extend = { },
249 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
250 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
253 PdfRadialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
254 const std::array<double, 6>& coords,
const std::array<bool, 2>& extend,
255 const std::array<double, 2>& domain,
const PdfColorRaw& background,
256 const Rect& bbox,
bool antiAlias);
258 void fillExportDictionary(PdfDictionary& dict)
const override;
259 PdfShadingType GetShadingType()
const override;
260 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
261 const std::array<double, 6>& GetCoords()
const {
return m_Coords; }
262 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
263 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
265 std::array<double, 6> m_Coords;
266 std::array<bool, 2> m_Extend;
267 std::array<double, 2> m_Domain;
270 class PODOFO_API PdfFreeFormMeshShadingDefinition final :
public PdfShadingDefinition
273 PdfFreeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
274 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
275 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
276 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
279 PdfFreeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
280 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
281 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
282 const Rect& bbox,
bool antiAlias);
284 void fillExportDictionary(PdfDictionary& dict)
const override;
285 PdfShadingType GetShadingType()
const override;
286 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
287 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
288 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
289 const std::vector<double>& GetDecode()
const {
return m_Decode; }
290 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
292 std::vector<double> m_Decode;
293 unsigned m_BitsPerCoordinate;
294 unsigned m_BitsPerComponent;
295 unsigned m_BitsPerFlag;
298 class PODOFO_API PdfLatticeFormMeshShadingDefinition final :
public PdfShadingDefinition
301 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
302 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
303 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
304 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
307 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
308 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
309 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
310 const Rect& bbox,
bool antiAlias);
313 void fillExportDictionary(PdfDictionary& dict)
const override;
314 PdfShadingType GetShadingType()
const override;
315 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
316 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
317 unsigned GetVerticesPerRow()
const {
return m_VerticesPerRow; }
318 const std::vector<double>& GetDecode()
const {
return m_Decode; }
319 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
321 std::vector<double> m_Decode;
322 unsigned m_BitsPerCoordinate;
323 unsigned m_BitsPerComponent;
324 unsigned m_VerticesPerRow;
327 class PODOFO_API PdfCoonsPatchMeshShadingDefinition final :
public PdfShadingDefinition
330 PdfCoonsPatchMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
331 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
332 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
333 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
336 PdfCoonsPatchMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
337 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
338 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
339 const Rect& bbox,
bool antiAlias);
341 void fillExportDictionary(PdfDictionary& dict)
const override;
342 PdfShadingType GetShadingType()
const override;
343 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
344 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
345 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
346 const std::vector<double>& GetDecode()
const {
return m_Decode; }
347 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
349 std::vector<double> m_Decode;
350 unsigned m_BitsPerCoordinate;
351 unsigned m_BitsPerComponent;
352 unsigned m_BitsPerFlag;
355 class PODOFO_API PdfTensorProductMeshShadingDefinition final :
public PdfShadingDefinition
358 PdfTensorProductMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
359 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
360 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
361 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
364 PdfTensorProductMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
365 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
366 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
367 const Rect& bbox,
bool antiAlias);
370 void fillExportDictionary(PdfDictionary& dict)
const override;
371 PdfShadingType GetShadingType()
const override;
372 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
373 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
374 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
375 const std::vector<double>& GetDecode()
const {
return m_Decode; }
376 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
378 std::vector<double> m_Decode;
379 unsigned m_BitsPerCoordinate;
380 unsigned m_BitsPerComponent;
381 unsigned m_BitsPerFlag;
The PDF dictionary data type of PoDoFo (inherits from PdfDataContainer, the base class for such repre...
Definition PdfDictionary.h:77
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:20
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:30
All classes, functions, types and enums of PoDoFo are members of these namespace.
Definition basetypes.h:13
std::shared_ptr< const PdfPatternDefinition > PdfPatternDefinitionPtr
Convenience alias for a constant PdfTilingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:385
std::shared_ptr< const PdfColorSpaceFilter > PdfColorSpaceFilterPtr
Convenience alias for a constant PdfColorSpaceFilter shared ptr.
Definition PdfColorSpaceFilter.h:71
std::shared_ptr< const PdfShadingDefinition > PdfShadingDefinitionPtr
Convenience alias for a constant PdfShadingDefinition shared ptr.
Definition PdfPatternDefinition.h:163
std::shared_ptr< const PdfTilingPatternDefinition > PdfTilingPatternDefinitionPtr
Convenience alias for a constant PdfTilingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:388
std::shared_ptr< const PdfShadingPatternDefinition > PdfShadingPatternDefinitionPtr
Convenience alias for a constant PdfShadingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:391
std::shared_ptr< const PdfExtGStateDefinition > PdfExtGStateDefinitionPtr
Convenience alias for a constant PdfExtGStateDefinition shared ptr.
Definition PdfExtGStateDefinition.h:30