fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / sdext / source / pdfimport / inc / pdfihelper.hxx
blobe989279a32b7c4973f64bc9d9c1b685e9971b947
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SDEXT_SOURCE_PDFIMPORT_INC_PDFIHELPER_HXX
21 #define INCLUDED_SDEXT_SOURCE_PDFIMPORT_INC_PDFIHELPER_HXX
23 #include "contentsink.hxx"
25 #include <rtl/ustring.hxx>
26 #include <rtl/math.h>
27 #include <basegfx/matrix/b2dhommatrix.hxx>
28 #include <basegfx/polygon/b2dpolypolygon.hxx>
29 #include <basegfx/polygon/b2dpolygon.hxx>
30 #include <com/sun/star/rendering/XColorSpace.hpp>
31 #include "com/sun/star/rendering/PathCapType.hpp"
32 #include "com/sun/star/rendering/PathJoinType.hpp"
34 #include <unordered_map>
35 #include <vector>
36 #include <boost/functional/hash.hpp>
38 // virtual resolution of the PDF OutputDev in dpi
39 #define PDFI_OUTDEV_RESOLUTION 7200
41 namespace com { namespace sun { namespace star { namespace task
42 { class XInteractionHandler; }}}}
44 namespace pdfi
46 typedef std::unordered_map< OUString, OUString, OUStringHash > PropertyMap;
47 typedef sal_Int32 ImageId;
49 /// What to do with a polygon. values can be ORed together
50 enum PolygonAction { PATH_STROKE=1, PATH_FILL=2, PATH_EOFILL=4 };
52 OUString unitMMString( double fMM );
53 OUString convertPixelToUnitString( double fPix );
55 inline double convPx2mm( double fPix )
57 const double px2mm = 25.4/PDFI_OUTDEV_RESOLUTION;
58 fPix *= px2mm;
59 return fPix;
62 inline double convmm2Px( double fMM )
64 const double mm2px = PDFI_OUTDEV_RESOLUTION/25.4;
65 fMM *= mm2px;
66 return fMM;
69 inline double convPx2mmPrec2( double fPix )
71 return rtl_math_round( convPx2mm( fPix ), 2, rtl_math_RoundingMode_Floor );
74 /// Convert color to "#FEFEFE" color notation
75 OUString getColorString( const css::rendering::ARGBColor& );
76 OUString getPercentString(double value);
78 double GetAverageTransformationScale(const basegfx::B2DHomMatrix& matrix);
79 void FillDashStyleProps(PropertyMap& props, const std::vector<double>& dashArray, double scale);
81 struct FontAttrHash
83 size_t operator()(const FontAttributes& rFont ) const
85 return (size_t)rFont.familyName.hashCode()
86 ^ size_t(rFont.isBold ? 0xd47be593 : 0)
87 ^ size_t(rFont.isItalic ? 0x1efd51a1 : 0)
88 ^ size_t(rFont.isUnderline ? 0xf6bd325a : 0)
89 ^ size_t(rFont.isOutline ? 0x12345678 : 0)
90 ^ size_t(rFont.size)
95 struct GraphicsContext
97 css::rendering::ARGBColor LineColor;
98 css::rendering::ARGBColor FillColor;
99 sal_Int8 LineJoin;
100 sal_Int8 LineCap;
101 sal_Int8 BlendMode;
102 double Flatness;
103 double LineWidth;
104 double MiterLimit;
105 std::vector<double> DashArray;
106 sal_Int32 FontId;
107 sal_Int32 TextRenderMode;
108 basegfx::B2DHomMatrix Transformation;
109 basegfx::B2DPolyPolygon Clip;
111 GraphicsContext() :
112 LineColor(),
113 FillColor(),
114 LineJoin(0),
115 LineCap(0),
116 BlendMode(0),
117 Flatness(0.0),
118 LineWidth(1.0),
119 MiterLimit(10.0),
120 DashArray(),
121 FontId(0),
122 TextRenderMode(0),
123 Transformation(),
124 Clip()
127 bool operator==(const GraphicsContext& rRight ) const
129 return LineColor.Red == rRight.LineColor.Red &&
130 LineColor.Green == rRight.LineColor.Green &&
131 LineColor.Blue == rRight.LineColor.Blue &&
132 LineColor.Alpha == rRight.LineColor.Alpha &&
133 FillColor.Red == rRight.FillColor.Red &&
134 FillColor.Green == rRight.FillColor.Green &&
135 FillColor.Blue == rRight.FillColor.Blue &&
136 FillColor.Alpha == rRight.FillColor.Alpha &&
137 LineJoin == rRight.LineJoin &&
138 LineCap == rRight.LineCap &&
139 BlendMode == rRight.BlendMode &&
140 LineWidth == rRight.LineWidth &&
141 Flatness == rRight.Flatness &&
142 MiterLimit == rRight.MiterLimit &&
143 DashArray == rRight.DashArray &&
144 FontId == rRight.FontId &&
145 TextRenderMode == rRight.TextRenderMode &&
146 Transformation == rRight.Transformation &&
147 Clip == rRight.Clip;
150 OUString GetLineJoinString() const
152 switch (LineJoin)
154 default:
155 case css::rendering::PathJoinType::MITER:
156 return OUString("miter");
157 case css::rendering::PathJoinType::ROUND:
158 return OUString("round");
159 case css::rendering::PathJoinType::BEVEL:
160 return OUString("bevel");
164 OUString GetLineCapString() const
166 switch (LineCap)
168 default:
169 case css::rendering::PathCapType::BUTT:
170 return OUString("butt");
171 case css::rendering::PathCapType::ROUND:
172 return OUString("round");
173 case css::rendering::PathCapType::SQUARE:
174 return OUString("square");
178 bool isRotatedOrSkewed() const
179 { return Transformation.get( 0, 1 ) != 0.0 ||
180 Transformation.get( 1, 0 ) != 0.0; }
183 struct GraphicsContextHash
185 size_t operator()(const GraphicsContext& rGC ) const
187 return boost::hash_value(rGC.LineColor.Red)
188 ^ boost::hash_value(rGC.LineColor.Green)
189 ^ boost::hash_value(rGC.LineColor.Blue)
190 ^ boost::hash_value(rGC.LineColor.Alpha)
191 ^ boost::hash_value(rGC.FillColor.Red)
192 ^ boost::hash_value(rGC.FillColor.Green)
193 ^ boost::hash_value(rGC.FillColor.Blue)
194 ^ boost::hash_value(rGC.FillColor.Alpha)
195 ^ boost::hash_value(rGC.LineJoin)
196 ^ boost::hash_value(rGC.LineCap)
197 ^ boost::hash_value(rGC.BlendMode)
198 ^ boost::hash_value(rGC.LineWidth)
199 ^ boost::hash_value(rGC.Flatness)
200 ^ boost::hash_value(rGC.MiterLimit)
201 ^ rGC.DashArray.size()
202 ^ boost::hash_value(rGC.FontId)
203 ^ boost::hash_value(rGC.TextRenderMode)
204 ^ boost::hash_value(rGC.Transformation.get( 0, 0 ))
205 ^ boost::hash_value(rGC.Transformation.get( 1, 0 ))
206 ^ boost::hash_value(rGC.Transformation.get( 0, 1 ))
207 ^ boost::hash_value(rGC.Transformation.get( 1, 1 ))
208 ^ boost::hash_value(rGC.Transformation.get( 0, 2 ))
209 ^ boost::hash_value(rGC.Transformation.get( 1, 2 ))
210 ^ boost::hash_value(rGC.Clip.count() ? rGC.Clip.getB2DPolygon(0).count() : 0)
215 /** retrieve password from user
217 bool getPassword( const css::uno::Reference<
218 css::task::XInteractionHandler >& xHandler,
219 OUString& rOutPwd,
220 bool bFirstTry,
221 const OUString& rDocName
224 void reportUnsupportedEncryptionFormat(
225 css::uno::Reference<
226 css::task::XInteractionHandler > const & handler);
229 #endif
231 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */