PoDoFo 1.0.0-dev
Loading...
Searching...
No Matches
PdfPatternDefinition.h
1
7#ifndef PDF_PATTERN_DEFINITION_H
8#define PDF_PATTERN_DEFINITION_H
9
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>
16
17namespace PoDoFo
18{
19 class PdfIndirectObjectList;
20 class PdfShadingDictionary;
21
22 enum class PdfPatternType : uint8_t
23 {
24 Unknown = 0,
25 Tiling,
26 Shading
27 };
28
29 class PODOFO_API PdfPatternDefinition
30 {
31 friend class PdfTilingPatternDefinition;
32 friend class PdfShadingPatternDefinition;
33 friend class PdfPattern;
34 public:
35 virtual ~PdfPatternDefinition();
36 private:
37 PdfPatternDefinition(nullable<const Matrix&> matrix);
38 public:
39 virtual PdfPatternType GetType() const = 0;
40 const Matrix& GetMatrix() { return m_Matrix; }
41 protected:
42 virtual void fillExportDictionary(PdfDictionary& dict) const = 0;
43 PdfPatternDefinition(const PdfPatternDefinition&) = delete;
44 PdfPatternDefinition& operator=(const PdfPatternDefinition&) = delete;
45 private:
46 virtual void FillExportDictionary(PdfDictionary& dict) const;
47 private:
48 Matrix m_Matrix;
49 };
50
51 enum class PdfTilingPaintType : uint8_t
52 {
53 Unknown = 0,
54 Coloured,
55 Uncoloured
56 };
57
58 enum class PdfTilingSpacingType : uint8_t
59 {
60 Unknown = 0,
61 ConstantSpacing,
62 NoDistortion,
63 ConstantSpacingFasterTiling,
64 };
65
66 class PODOFO_API PdfTilingPatternDefinition : public PdfPatternDefinition
67 {
68 friend class PdfColouredTilingPatternDefinition;
69 friend class PdfUncolouredTilingPatternDefinition;
70
71 private:
72 PdfTilingPatternDefinition(PdfTilingSpacingType spacingType, const Rect& bbox,
73 double xStep, double yStep, nullable<const Matrix&> matrix);
74
75 public:
76 PdfPatternType GetType() const override;
77
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; }
83
84 protected:
85 void fillExportDictionary(PdfDictionary& dict) const override;
86
87 private:
88 PdfTilingSpacingType m_SpacingType;
89 Rect m_BBox;
90 double m_XStep;
91 double m_YStep;
92 };
93
94 class PODOFO_API PdfColouredTilingPatternDefinition final : public PdfTilingPatternDefinition
95 {
96 public:
97 PdfColouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
98 const Rect& bbox, double xStep, double yStep, nullable<const Matrix&> matrix = { });
99 public:
100 PdfTilingPaintType GetPaintType() const override;
101 };
102
103 class PODOFO_API PdfUncolouredTilingPatternDefinition final : public PdfTilingPatternDefinition
104 {
105 public:
106 PdfUncolouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
107 const Rect& bbox, double xStep, double yStep, nullable<const Matrix&> matrix = { });
108 public:
109 PdfTilingPaintType GetPaintType() const override;
110 };
111
112 enum class PdfShadingType : uint8_t
113 {
114 FunctionBased = 1,
115 Axial = 2,
116 Radial = 3,
117 FreeFormMesh = 4,
118 LatticeFormMesh = 5,
119 CoonsPatchMesh = 6,
120 TensorProductMesh = 7
121 };
122
123 class PODOFO_API PdfShadingDefinition
124 {
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;
133
134 private:
135 PdfShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
136 nullable<const PdfColorRaw&> background, nullable<const Rect&> bbox, bool antiAlias);
137
138 PdfShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
139 nullable<const PdfColorRaw&> background, const Rect& bbox, bool antiAlias);
140 public:
141 virtual ~PdfShadingDefinition();
142 virtual PdfShadingType GetShadingType() const = 0;
143 protected:
144 virtual void fillExportDictionary(PdfDictionary& dict) const = 0;
145 public:
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; }
151 private:
152 PdfShadingDefinition(const PdfShadingDefinition&) = delete;
153 PdfShadingDefinition& operator=(const PdfShadingDefinition&) = delete;
154 virtual void FillExportDictionary(PdfDictionary& dict) const;
155 private:
156 PdfColorSpaceFilterPtr m_ColorSpace;
157 PdfVariant m_colorSpaceExpVar;
158 std::vector<PdfFunctionDefinitionPtr> m_Functions;
159 PdfVariant m_functionsExpVar;
160 nullable<PdfColorRaw> m_Background;
161 Rect m_BBox;
162 bool m_AntiAlias;
163 };
164
167 using PdfShadingDefinitionPtr = std::shared_ptr<const PdfShadingDefinition>;
168
169 class PODOFO_API PdfShadingPatternDefinition final : public PdfPatternDefinition
170 {
171 public:
172 PdfShadingPatternDefinition(const PdfShadingDictionary& shading, nullable<const Matrix&> matrix = { },
174
178 PdfShadingPatternDefinition(PdfShadingDefinitionPtr&& shading, const Matrix& matrix,
180
181 public:
182 PdfPatternType GetType() const override;
183 const PdfShadingDefinition& GetShading() const { return *m_Shading; }
184 PdfShadingDefinitionPtr GetShadingPtr() const { return m_Shading; }
185 const Matrix& GetMatrix() const { return m_Matrix; }
186 const PdfExtGStateDefinition* GetExtGState() const { return m_ExtGState.get(); }
187 PdfExtGStateDefinitionPtr GetExtGStatePtr() const { return m_ExtGState; }
188
189 protected:
190 void fillExportDictionary(PdfDictionary& dict) const override;
191
192 private:
193 PdfShadingDefinitionPtr m_Shading;
194 PdfReference m_shadingExpRef;
195 Matrix m_Matrix;
196 PdfExtGStateDefinitionPtr m_ExtGState;
197 PdfReference m_extGStateExpRef;
198 };
199
200 class PODOFO_API PdfFunctionBasedShadingDefinition final : public PdfShadingDefinition
201 {
202 public:
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);
207
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);
214
215 public:
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; }
220 private:
221 std::array<double, 4> m_Domain;
222 Matrix m_Matrix;
223 };
224
225 class PODOFO_API PdfAxialShadingDefinition final : public PdfShadingDefinition
226 {
227 public:
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);
232
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);
240 public:
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; }
247
248 private:
249 std::array<double, 4> m_Coords;
250 std::array<bool, 2> m_Extend;
251 std::array<double, 2> m_Domain;
252 };
253
254 class PODOFO_API PdfRadialShadingDefinition final : public PdfShadingDefinition
255 {
256 public:
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);
261
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);
269 public:
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; }
276 private:
277 std::array<double, 6> m_Coords;
278 std::array<bool, 2> m_Extend;
279 std::array<double, 2> m_Domain;
280 };
281
282 class PODOFO_API PdfFreeFormMeshShadingDefinition final : public PdfShadingDefinition
283 {
284 public:
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);
289
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);
297 public:
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; }
305 private:
306 std::vector<double> m_Decode;
307 unsigned m_BitsPerCoordinate;
308 unsigned m_BitsPerComponent;
309 unsigned m_BitsPerFlag;
310 };
311
312 class PODOFO_API PdfLatticeFormMeshShadingDefinition final : public PdfShadingDefinition
313 {
314 public:
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);
319
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);
327
328 public:
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; }
336 private:
337 std::vector<double> m_Decode;
338 unsigned m_BitsPerCoordinate;
339 unsigned m_BitsPerComponent;
340 unsigned m_VerticesPerRow;
341 };
342
343 class PODOFO_API PdfCoonsPatchMeshShadingDefinition final : public PdfShadingDefinition
344 {
345 public:
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);
350
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);
358 public:
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; }
366 private:
367 std::vector<double> m_Decode;
368 unsigned m_BitsPerCoordinate;
369 unsigned m_BitsPerComponent;
370 unsigned m_BitsPerFlag;
371 };
372
373 class PODOFO_API PdfTensorProductMeshShadingDefinition final : public PdfShadingDefinition
374 {
375 public:
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);
380
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);
388
389 public:
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; }
397 private:
398 std::vector<double> m_Decode;
399 unsigned m_BitsPerCoordinate;
400 unsigned m_BitsPerComponent;
401 unsigned m_BitsPerFlag;
402 };
403
406 using PdfPatternDefinitionPtr = std::shared_ptr<const PdfPatternDefinition>;
407
410 using PdfTilingPatternDefinitionPtr = std::shared_ptr<const PdfTilingPatternDefinition>;
411
414 using PdfShadingPatternDefinitionPtr = std::shared_ptr<const PdfShadingPatternDefinition>;
415}
416
417#endif // PDF_PATTERN_DEFINITION_H
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