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);
37 PdfPatternDefinition(
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);
77 PdfTilingPatternDefinition(
const PdfDictionary& dict);
80 PdfPatternType GetType()
const override;
82 virtual PdfTilingPaintType GetPaintType()
const = 0;
83 PdfTilingSpacingType GetSpacingType()
const {
return m_SpacingType; }
84 const Rect& GetBBox()
const {
return m_BBox; }
85 double GetXStep()
const {
return m_XStep; }
86 double GetYStep()
const {
return m_YStep; }
89 void fillExportDictionary(PdfDictionary& dict)
const override;
92 PdfTilingSpacingType m_SpacingType;
98 class PODOFO_API PdfColouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
100 friend class PdfColouredTilingPattern;
102 PdfColouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
103 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
107 PdfColouredTilingPatternDefinition(
const PdfDictionary& dict);
109 PdfTilingPaintType GetPaintType()
const override;
112 class PODOFO_API PdfUncolouredTilingPatternDefinition final :
public PdfTilingPatternDefinition
114 friend class PdfUncolouredTilingPattern;
116 PdfUncolouredTilingPatternDefinition(PdfTilingSpacingType spacingType,
117 const Rect& bbox,
double xStep,
double yStep, nullable<const Matrix&> matrix = { });
121 PdfUncolouredTilingPatternDefinition(
const PdfDictionary& dict);
123 PdfTilingPaintType GetPaintType()
const override;
126 enum class PdfShadingType : uint8_t
134 TensorProductMesh = 7
137 class PODOFO_API PdfShadingDefinition
139 friend class PdfShadingDictionary;
140 friend class PdfFunctionBasedShadingDefinition;
141 friend class PdfAxialShadingDefinition;
142 friend class PdfRadialShadingDefinition;
143 friend class PdfFreeFormMeshShadingDefinition;
144 friend class PdfLatticeFormMeshShadingDefinition;
145 friend class PdfCoonsPatchMeshShadingDefinition;
146 friend class PdfTensorProductMeshShadingDefinition;
149 PdfShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
150 nullable<const PdfColorRaw&> background, nullable<const Rect&> bbox,
bool antiAlias);
152 PdfShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
153 nullable<const PdfColorRaw&> background,
const Rect& bbox,
bool antiAlias);
155 virtual ~PdfShadingDefinition();
156 virtual PdfShadingType GetShadingType()
const = 0;
158 virtual void fillExportDictionary(PdfDictionary& dict)
const = 0;
160 const PdfColorSpaceFilter& GetColorSpace()
const {
return *m_ColorSpace; }
161 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
162 bool GetAntiAlias()
const {
return m_AntiAlias; }
163 const nullable<PdfColorRaw>& GetBackground()
const {
return m_Background; }
164 const Rect& GetBBox()
const {
return m_BBox; }
166 PdfShadingDefinition(
const PdfShadingDefinition&) =
delete;
167 PdfShadingDefinition& operator=(
const PdfShadingDefinition&) =
delete;
168 virtual void FillExportDictionary(PdfDictionary& dict)
const;
171 PdfVariant m_colorSpaceExpVar;
172 std::vector<PdfFunctionDefinitionPtr> m_Functions;
173 PdfVariant m_functionsExpVar;
174 nullable<PdfColorRaw> m_Background;
182 class PODOFO_API PdfShadingPatternDefinition
final :
public PdfPatternDefinition
184 friend class PdfShadingPattern;
194 PdfPatternType GetType()
const override;
195 const PdfShadingDefinition& GetShading()
const {
return *m_Shading; }
197 const Matrix& GetMatrix()
const {
return m_Matrix; }
198 const PdfExtGStateDefinition* GetExtGState()
const {
return m_ExtGState.get(); }
212 class PODOFO_API PdfFunctionBasedShadingDefinition final :
public PdfShadingDefinition
215 PdfFunctionBasedShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
216 nullable<
const std::array<double, 4>&> domain = { }, nullable<const Matrix&> matrix = { },
217 nullable<const PdfColorRaw&> background = { }, nullable<const Rect&> bbox = { },
218 bool antiAlias =
false);
221 PdfFunctionBasedShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
222 const std::array<double, 4>& domain,
const Matrix& matrix,
223 const PdfColorRaw& background,
const Rect& bbox,
bool antiAlias);
226 void fillExportDictionary(PdfDictionary& dict)
const override;
227 PdfShadingType GetShadingType()
const override;
228 const std::array<double, 4>& GetDomain()
const {
return m_Domain; }
229 const Matrix& GetMatrix()
const {
return m_Matrix; }
231 std::array<double, 4> m_Domain;
235 class PODOFO_API PdfAxialShadingDefinition final :
public PdfShadingDefinition
238 PdfAxialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
239 const std::array<double, 4>& coords, nullable<
const std::array<bool, 2>&> extend = { },
240 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
241 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
244 PdfAxialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
245 const std::array<double, 4>& coords,
const std::array<bool, 2>& extend,
246 const std::array<double, 2> domain,
const PdfColorRaw& background,
247 const Rect& bbox,
bool antiAlias);
249 void fillExportDictionary(PdfDictionary& dict)
const override;
250 PdfShadingType GetShadingType()
const override;
251 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
252 const std::array<double, 4>& GetCoords()
const {
return m_Coords; }
253 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
254 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
257 std::array<double, 4> m_Coords;
258 std::array<bool, 2> m_Extend;
259 std::array<double, 2> m_Domain;
262 class PODOFO_API PdfRadialShadingDefinition final :
public PdfShadingDefinition
265 PdfRadialShadingDefinition(PdfColorSpaceInitializer&& colorSpace, PdfFunctionListInitializer&& functions,
266 const std::array<double, 6>& coords, nullable<
const std::array<bool, 2>&> extend = { },
267 nullable<const std::array<double, 2>&> domain = { }, nullable<const PdfColorRaw&> background = { },
268 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
271 PdfRadialShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<PdfFunctionDefinitionPtr>&& functions,
272 const std::array<double, 6>& coords,
const std::array<bool, 2>& extend,
273 const std::array<double, 2>& domain,
const PdfColorRaw& background,
274 const Rect& bbox,
bool antiAlias);
276 void fillExportDictionary(PdfDictionary& dict)
const override;
277 PdfShadingType GetShadingType()
const override;
278 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
279 const std::array<double, 6>& GetCoords()
const {
return m_Coords; }
280 const std::array<bool, 2>& GetExtend()
const {
return m_Extend; }
281 const std::array<double, 2>& GetDomain()
const {
return m_Domain; }
283 std::array<double, 6> m_Coords;
284 std::array<bool, 2> m_Extend;
285 std::array<double, 2> m_Domain;
288 class PODOFO_API PdfFreeFormMeshShadingDefinition final :
public PdfShadingDefinition
291 PdfFreeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
292 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
293 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
294 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
297 PdfFreeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
298 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
299 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
300 const Rect& bbox,
bool antiAlias);
302 void fillExportDictionary(PdfDictionary& dict)
const override;
303 PdfShadingType GetShadingType()
const override;
304 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
305 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
306 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
307 const std::vector<double>& GetDecode()
const {
return m_Decode; }
308 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
310 std::vector<double> m_Decode;
311 unsigned m_BitsPerCoordinate;
312 unsigned m_BitsPerComponent;
313 unsigned m_BitsPerFlag;
316 class PODOFO_API PdfLatticeFormMeshShadingDefinition final :
public PdfShadingDefinition
319 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
320 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
321 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
322 nullable<const Rect&> bbox = { },
bool antiAlias =
false);
325 PdfLatticeFormMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
326 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned verticesPerRow,
327 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
328 const Rect& bbox,
bool antiAlias);
331 void fillExportDictionary(PdfDictionary& dict)
const override;
332 PdfShadingType GetShadingType()
const override;
333 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
334 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
335 unsigned GetVerticesPerRow()
const {
return m_VerticesPerRow; }
336 const std::vector<double>& GetDecode()
const {
return m_Decode; }
337 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
339 std::vector<double> m_Decode;
340 unsigned m_BitsPerCoordinate;
341 unsigned m_BitsPerComponent;
342 unsigned m_VerticesPerRow;
345 class PODOFO_API PdfCoonsPatchMeshShadingDefinition final :
public PdfShadingDefinition
348 PdfCoonsPatchMeshShadingDefinition(PdfColorSpaceInitializer&& colorSpace, std::vector<double> decode,
349 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
350 PdfFunctionListInitializer&& functions = { }, nullable<const PdfColorRaw&> background = { },
351 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);
382 PdfTensorProductMeshShadingDefinition(PdfColorSpaceFilterPtr&& colorSpace, std::vector<double>&& decode,
383 unsigned bitsPerCoordinate,
unsigned bitsPerComponent,
unsigned bitsPerFlag,
384 std::vector<PdfFunctionDefinitionPtr>&& functions,
const PdfColorRaw& background,
385 const Rect& bbox,
bool antiAlias);
388 void fillExportDictionary(PdfDictionary& dict)
const override;
389 PdfShadingType GetShadingType()
const override;
390 unsigned GetBitsPerCoordinate()
const {
return m_BitsPerCoordinate; }
391 unsigned GetBitsPerComponent()
const {
return m_BitsPerComponent; }
392 unsigned GetBitsPerFlag()
const {
return m_BitsPerFlag; }
393 const std::vector<double>& GetDecode()
const {
return m_Decode; }
394 const std::vector<PdfFunctionDefinitionPtr>& GetFunctions()
const {
return m_Functions; }
396 std::vector<double> m_Decode;
397 unsigned m_BitsPerCoordinate;
398 unsigned m_BitsPerComponent;
399 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:403
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:180
std::shared_ptr< const PdfTilingPatternDefinition > PdfTilingPatternDefinitionPtr
Convenience alias for a constant PdfTilingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:406
std::shared_ptr< const PdfShadingPatternDefinition > PdfShadingPatternDefinitionPtr
Convenience alias for a constant PdfShadingPatternDefinition shared ptr.
Definition PdfPatternDefinition.h:409
std::shared_ptr< const PdfExtGStateDefinition > PdfExtGStateDefinitionPtr
Convenience alias for a constant PdfExtGStateDefinition shared ptr.
Definition PdfExtGStateDefinition.h:30