1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_canvas.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/AffineMatrix2D.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/Matrix2D.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/RealPoint2D.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/RealSize2D.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/IntegerPoint2D.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/IntegerSize2D.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/RealRectangle2D.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/geometry/RealBezierSegment2D.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/RenderState.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/ViewState.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/XCanvas.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/CompositeOperation.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/TexturingMode.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/util/Endianness.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/PathCapType.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/PathJoinType.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/IntegerBitmapLayout.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/FloatingPointBitmapFormat.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/FloatingPointBitmapLayout.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx>
50*b1cdbd2cSJim Jagielski #include <basegfx/range/b2drange.hxx>
51*b1cdbd2cSJim Jagielski #include <basegfx/range/b2irange.hxx>
52*b1cdbd2cSJim Jagielski #include <basegfx/range/b2drectangle.hxx>
53*b1cdbd2cSJim Jagielski #include <basegfx/point/b2dpoint.hxx>
54*b1cdbd2cSJim Jagielski #include <basegfx/tools/canvastools.hxx>
55*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolygon.hxx>
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski #include <canvas/verifyinput.hxx>
58*b1cdbd2cSJim Jagielski #include <canvas/canvastools.hxx>
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski namespace canvas
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski     namespace tools
66*b1cdbd2cSJim Jagielski     {
verifyInput(const geometry::RealPoint2D & rPoint,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)67*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::RealPoint2D&				rPoint,
68*b1cdbd2cSJim Jagielski                           const char*								pStr,
69*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
70*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
71*b1cdbd2cSJim Jagielski         {
72*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
75*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rPoint.X ) )
76*b1cdbd2cSJim Jagielski             {
77*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
78*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
79*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): point X value contains infinite or NAN"),
80*b1cdbd2cSJim Jagielski                     xIf,
81*b1cdbd2cSJim Jagielski                     nArgPos );
82*b1cdbd2cSJim Jagielski             }
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rPoint.Y ) )
85*b1cdbd2cSJim Jagielski             {
86*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
87*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
88*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): point X value contains infinite or NAN"),
89*b1cdbd2cSJim Jagielski                     xIf,
90*b1cdbd2cSJim Jagielski                     nArgPos );
91*b1cdbd2cSJim Jagielski             }
92*b1cdbd2cSJim Jagielski #else
93*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rPoint.X ) ||
94*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rPoint.Y ) )
95*b1cdbd2cSJim Jagielski             {
96*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
97*b1cdbd2cSJim Jagielski             }
98*b1cdbd2cSJim Jagielski #endif
99*b1cdbd2cSJim Jagielski         }
100*b1cdbd2cSJim Jagielski 
verifyInput(const geometry::RealSize2D & rSize,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)101*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::RealSize2D&				rSize,
102*b1cdbd2cSJim Jagielski                           const char*								pStr,
103*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
104*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
105*b1cdbd2cSJim Jagielski         {
106*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
109*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSize.Width ) )
110*b1cdbd2cSJim Jagielski             {
111*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
112*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
113*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): size.Width value contains infinite or NAN"),
114*b1cdbd2cSJim Jagielski                     xIf,
115*b1cdbd2cSJim Jagielski                     nArgPos );
116*b1cdbd2cSJim Jagielski             }
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSize.Height ) )
119*b1cdbd2cSJim Jagielski             {
120*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
121*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
122*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): size.Height value contains infinite or NAN"),
123*b1cdbd2cSJim Jagielski                     xIf,
124*b1cdbd2cSJim Jagielski                     nArgPos );
125*b1cdbd2cSJim Jagielski             }
126*b1cdbd2cSJim Jagielski #else
127*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSize.Width ) ||
128*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSize.Height ) )
129*b1cdbd2cSJim Jagielski             {
130*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
131*b1cdbd2cSJim Jagielski             }
132*b1cdbd2cSJim Jagielski #endif
133*b1cdbd2cSJim Jagielski         }
134*b1cdbd2cSJim Jagielski 
verifyInput(const geometry::RealBezierSegment2D & rSegment,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)135*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::RealBezierSegment2D&		rSegment,
136*b1cdbd2cSJim Jagielski                           const char*								pStr,
137*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
138*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
139*b1cdbd2cSJim Jagielski         {
140*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
143*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.Px ) )
144*b1cdbd2cSJim Jagielski             {
145*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
146*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
147*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's Px value contains infinite or NAN"),
148*b1cdbd2cSJim Jagielski                     xIf,
149*b1cdbd2cSJim Jagielski                     nArgPos );
150*b1cdbd2cSJim Jagielski             }
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.Py ) )
153*b1cdbd2cSJim Jagielski             {
154*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
155*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
156*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's Py value contains infinite or NAN"),
157*b1cdbd2cSJim Jagielski                     xIf,
158*b1cdbd2cSJim Jagielski                     nArgPos );
159*b1cdbd2cSJim Jagielski             }
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.C1x ) )
162*b1cdbd2cSJim Jagielski             {
163*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
164*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
165*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's C1x value contains infinite or NAN"),
166*b1cdbd2cSJim Jagielski                     xIf,
167*b1cdbd2cSJim Jagielski                     nArgPos );
168*b1cdbd2cSJim Jagielski             }
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.C1y ) )
171*b1cdbd2cSJim Jagielski             {
172*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
173*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
174*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's C1y value contains infinite or NAN"),
175*b1cdbd2cSJim Jagielski                     xIf,
176*b1cdbd2cSJim Jagielski                     nArgPos );
177*b1cdbd2cSJim Jagielski             }
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.C2x ) )
180*b1cdbd2cSJim Jagielski             {
181*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
182*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
183*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's C2x value contains infinite or NAN"),
184*b1cdbd2cSJim Jagielski                     xIf,
185*b1cdbd2cSJim Jagielski                     nArgPos );
186*b1cdbd2cSJim Jagielski             }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.C2y ) )
189*b1cdbd2cSJim Jagielski             {
190*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
191*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
192*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bezier segment's C2y value contains infinite or NAN"),
193*b1cdbd2cSJim Jagielski                     xIf,
194*b1cdbd2cSJim Jagielski                     nArgPos );
195*b1cdbd2cSJim Jagielski             }
196*b1cdbd2cSJim Jagielski #else
197*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rSegment.Px ) ||
198*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSegment.Py ) ||
199*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSegment.C1x ) ||
200*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSegment.C1y ) ||
201*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSegment.C2x ) ||
202*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rSegment.C2y ) )
203*b1cdbd2cSJim Jagielski             {
204*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
205*b1cdbd2cSJim Jagielski             }
206*b1cdbd2cSJim Jagielski #endif
207*b1cdbd2cSJim Jagielski         }
208*b1cdbd2cSJim Jagielski 
verifyInput(const geometry::RealRectangle2D & rRect,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)209*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::RealRectangle2D&			rRect,
210*b1cdbd2cSJim Jagielski                           const char*								pStr,
211*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
212*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
213*b1cdbd2cSJim Jagielski         {
214*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
217*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rRect.X1 ) )
218*b1cdbd2cSJim Jagielski             {
219*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
220*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
221*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): rectangle point X1 contains infinite or NAN"),
222*b1cdbd2cSJim Jagielski                     xIf,
223*b1cdbd2cSJim Jagielski                     nArgPos );
224*b1cdbd2cSJim Jagielski             }
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rRect.Y1 ) )
227*b1cdbd2cSJim Jagielski             {
228*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
229*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
230*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): rectangle point Y1 contains infinite or NAN"),
231*b1cdbd2cSJim Jagielski                     xIf,
232*b1cdbd2cSJim Jagielski                     nArgPos );
233*b1cdbd2cSJim Jagielski             }
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rRect.X2 ) )
236*b1cdbd2cSJim Jagielski             {
237*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
238*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
239*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): rectangle point X2 contains infinite or NAN"),
240*b1cdbd2cSJim Jagielski                     xIf,
241*b1cdbd2cSJim Jagielski                     nArgPos );
242*b1cdbd2cSJim Jagielski             }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rRect.Y2 ) )
245*b1cdbd2cSJim Jagielski             {
246*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
247*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
248*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): rectangle point Y2 contains infinite or NAN"),
249*b1cdbd2cSJim Jagielski                     xIf,
250*b1cdbd2cSJim Jagielski                     nArgPos );
251*b1cdbd2cSJim Jagielski             }
252*b1cdbd2cSJim Jagielski #else
253*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( rRect.X1 ) ||
254*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rRect.Y1 ) ||
255*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rRect.X2 ) ||
256*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( rRect.Y2 ) )
257*b1cdbd2cSJim Jagielski             {
258*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
259*b1cdbd2cSJim Jagielski             }
260*b1cdbd2cSJim Jagielski #endif
261*b1cdbd2cSJim Jagielski         }
262*b1cdbd2cSJim Jagielski 
verifyInput(const geometry::AffineMatrix2D & matrix,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)263*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::AffineMatrix2D&			matrix,
264*b1cdbd2cSJim Jagielski                           const char*								pStr,
265*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
266*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
267*b1cdbd2cSJim Jagielski         {
268*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
271*b1cdbd2cSJim Jagielski             const sal_Int32 nBinaryState(
272*b1cdbd2cSJim Jagielski                 100000 * !::rtl::math::isFinite( matrix.m00 ) +
273*b1cdbd2cSJim Jagielski                  10000 * !::rtl::math::isFinite( matrix.m01 ) +
274*b1cdbd2cSJim Jagielski                   1000 * !::rtl::math::isFinite( matrix.m02 ) +
275*b1cdbd2cSJim Jagielski                    100 * !::rtl::math::isFinite( matrix.m10 ) +
276*b1cdbd2cSJim Jagielski                     10 * !::rtl::math::isFinite( matrix.m11 ) +
277*b1cdbd2cSJim Jagielski                      1 * !::rtl::math::isFinite( matrix.m12 ) );
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski             if( nBinaryState )
280*b1cdbd2cSJim Jagielski             {
281*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
282*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
283*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): AffineMatrix2D contains infinite or NAN value(s) at the following positions (m00-m12): ") +
284*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(nBinaryState),
285*b1cdbd2cSJim Jagielski                     xIf,
286*b1cdbd2cSJim Jagielski                     nArgPos );
287*b1cdbd2cSJim Jagielski             }
288*b1cdbd2cSJim Jagielski #else
289*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( matrix.m00 ) ||
290*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m01 ) ||
291*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m02 ) ||
292*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m10 ) ||
293*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m11 ) ||
294*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m12 ) )
295*b1cdbd2cSJim Jagielski             {
296*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
297*b1cdbd2cSJim Jagielski             }
298*b1cdbd2cSJim Jagielski #endif
299*b1cdbd2cSJim Jagielski         }
300*b1cdbd2cSJim Jagielski 
verifyInput(const geometry::Matrix2D & matrix,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)301*b1cdbd2cSJim Jagielski         void verifyInput( const geometry::Matrix2D&					matrix,
302*b1cdbd2cSJim Jagielski                           const char*								pStr,
303*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
304*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
305*b1cdbd2cSJim Jagielski         {
306*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
309*b1cdbd2cSJim Jagielski             const sal_Int32 nBinaryState(
310*b1cdbd2cSJim Jagielski                 1000 * !::rtl::math::isFinite( matrix.m00 ) +
311*b1cdbd2cSJim Jagielski                  100 * !::rtl::math::isFinite( matrix.m01 ) +
312*b1cdbd2cSJim Jagielski                   10 * !::rtl::math::isFinite( matrix.m10 ) +
313*b1cdbd2cSJim Jagielski                    1 * !::rtl::math::isFinite( matrix.m11 ) );
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski             if( nBinaryState )
316*b1cdbd2cSJim Jagielski             {
317*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
318*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
319*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): Matrix2D contains infinite or NAN value(s) at the following positions (m00-m11): ") +
320*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(nBinaryState),
321*b1cdbd2cSJim Jagielski                     xIf,
322*b1cdbd2cSJim Jagielski                     nArgPos );
323*b1cdbd2cSJim Jagielski             }
324*b1cdbd2cSJim Jagielski #else
325*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( matrix.m00 ) ||
326*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m01 ) ||
327*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m10 ) ||
328*b1cdbd2cSJim Jagielski                 !::rtl::math::isFinite( matrix.m11 ) )
329*b1cdbd2cSJim Jagielski             {
330*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
331*b1cdbd2cSJim Jagielski             }
332*b1cdbd2cSJim Jagielski #endif
333*b1cdbd2cSJim Jagielski         }
334*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::ViewState & viewState,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)335*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::ViewState&				viewState,
336*b1cdbd2cSJim Jagielski                           const char*								pStr,
337*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
338*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
339*b1cdbd2cSJim Jagielski         {
340*b1cdbd2cSJim Jagielski             verifyInput( viewState.AffineTransform,
341*b1cdbd2cSJim Jagielski                          pStr, xIf, nArgPos );
342*b1cdbd2cSJim Jagielski         }
343*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::RenderState & renderState,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos,sal_Int32 nMinColorComponents)344*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::RenderState&				renderState,
345*b1cdbd2cSJim Jagielski                           const char*								pStr,
346*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
347*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos,
348*b1cdbd2cSJim Jagielski                           sal_Int32									nMinColorComponents )
349*b1cdbd2cSJim Jagielski         {
350*b1cdbd2cSJim Jagielski             verifyInput( renderState.AffineTransform,
351*b1cdbd2cSJim Jagielski                          pStr, xIf, nArgPos );
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski             if( renderState.DeviceColor.getLength() < nMinColorComponents )
354*b1cdbd2cSJim Jagielski             {
355*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
356*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
357*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
358*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): render state's device color has too few components (") +
359*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(nMinColorComponents) +
360*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" expected, ") +
361*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(renderState.DeviceColor.getLength()) +
362*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" provided)"),
363*b1cdbd2cSJim Jagielski                     xIf,
364*b1cdbd2cSJim Jagielski                     nArgPos );
365*b1cdbd2cSJim Jagielski #else
366*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
367*b1cdbd2cSJim Jagielski #endif
368*b1cdbd2cSJim Jagielski             }
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski             if( renderState.CompositeOperation < rendering::CompositeOperation::CLEAR ||
371*b1cdbd2cSJim Jagielski                 renderState.CompositeOperation > rendering::CompositeOperation::SATURATE )
372*b1cdbd2cSJim Jagielski             {
373*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
374*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
375*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
376*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): render state's CompositeOperation value out of range (") +
377*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(renderState.CompositeOperation)) +
378*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
379*b1cdbd2cSJim Jagielski                     xIf,
380*b1cdbd2cSJim Jagielski                     nArgPos );
381*b1cdbd2cSJim Jagielski #else
382*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
383*b1cdbd2cSJim Jagielski #endif
384*b1cdbd2cSJim Jagielski             }
385*b1cdbd2cSJim Jagielski         }
386*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::Texture & texture,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)387*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::Texture&					texture,
388*b1cdbd2cSJim Jagielski                           const char*								pStr,
389*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
390*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
391*b1cdbd2cSJim Jagielski         {
392*b1cdbd2cSJim Jagielski             verifyInput( texture.AffineTransform,
393*b1cdbd2cSJim Jagielski                          pStr, xIf, nArgPos );
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( texture.Alpha ) ||
396*b1cdbd2cSJim Jagielski                 texture.Alpha < 0.0 ||
397*b1cdbd2cSJim Jagielski                 texture.Alpha > 1.0 )
398*b1cdbd2cSJim Jagielski             {
399*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
400*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
401*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
402*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): textures' alpha value out of range (is ") +
403*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(texture.Alpha) +
404*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
405*b1cdbd2cSJim Jagielski                     xIf,
406*b1cdbd2cSJim Jagielski                     nArgPos );
407*b1cdbd2cSJim Jagielski #else
408*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
409*b1cdbd2cSJim Jagielski #endif
410*b1cdbd2cSJim Jagielski             }
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski             if( texture.NumberOfHatchPolygons < 0 )
413*b1cdbd2cSJim Jagielski             {
414*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
415*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
416*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
417*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): textures' NumberOfHatchPolygons is negative"),
418*b1cdbd2cSJim Jagielski                     xIf,
419*b1cdbd2cSJim Jagielski                     nArgPos );
420*b1cdbd2cSJim Jagielski #else
421*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
422*b1cdbd2cSJim Jagielski #endif
423*b1cdbd2cSJim Jagielski             }
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski             if( texture.RepeatModeX < rendering::TexturingMode::NONE ||
426*b1cdbd2cSJim Jagielski                 texture.RepeatModeX > rendering::TexturingMode::REPEAT )
427*b1cdbd2cSJim Jagielski             {
428*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
429*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
430*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
431*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): textures' RepeatModeX value is out of range (") +
432*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(texture.RepeatModeX)) +
433*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
434*b1cdbd2cSJim Jagielski                     xIf,
435*b1cdbd2cSJim Jagielski                     nArgPos );
436*b1cdbd2cSJim Jagielski #else
437*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
438*b1cdbd2cSJim Jagielski #endif
439*b1cdbd2cSJim Jagielski             }
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski             if( texture.RepeatModeY < rendering::TexturingMode::NONE ||
442*b1cdbd2cSJim Jagielski                 texture.RepeatModeY > rendering::TexturingMode::REPEAT )
443*b1cdbd2cSJim Jagielski             {
444*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
445*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
446*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
447*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): textures' RepeatModeY value is out of range (") +
448*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(texture.RepeatModeY)) +
449*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
450*b1cdbd2cSJim Jagielski                     xIf,
451*b1cdbd2cSJim Jagielski                     nArgPos );
452*b1cdbd2cSJim Jagielski #else
453*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
454*b1cdbd2cSJim Jagielski #endif
455*b1cdbd2cSJim Jagielski             }
456*b1cdbd2cSJim Jagielski         }
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski         namespace
459*b1cdbd2cSJim Jagielski         {
460*b1cdbd2cSJim Jagielski             struct VerifyDashValue
461*b1cdbd2cSJim Jagielski             {
VerifyDashValuecanvas::tools::__anon2f8ffd900111::VerifyDashValue462*b1cdbd2cSJim Jagielski                 VerifyDashValue( const char*								pStr,
463*b1cdbd2cSJim Jagielski                                  const uno::Reference< uno::XInterface >&	xIf,
464*b1cdbd2cSJim Jagielski                                  ::sal_Int16								nArgPos ) :
465*b1cdbd2cSJim Jagielski                     mpStr( pStr ),
466*b1cdbd2cSJim Jagielski                     mrIf( xIf ),
467*b1cdbd2cSJim Jagielski                     mnArgPos( nArgPos )
468*b1cdbd2cSJim Jagielski                 {
469*b1cdbd2cSJim Jagielski                 }
470*b1cdbd2cSJim Jagielski 
operator ()canvas::tools::__anon2f8ffd900111::VerifyDashValue471*b1cdbd2cSJim Jagielski                 void operator()( const double& rVal )
472*b1cdbd2cSJim Jagielski                 {
473*b1cdbd2cSJim Jagielski                     if( !::rtl::math::isFinite( rVal ) || rVal < 0.0 )
474*b1cdbd2cSJim Jagielski                     {
475*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
476*b1cdbd2cSJim Jagielski                         throw lang::IllegalArgumentException(
477*b1cdbd2cSJim Jagielski                             ::rtl::OUString::createFromAscii(mpStr) +
478*b1cdbd2cSJim Jagielski                             ::rtl::OUString::createFromAscii(": verifyInput(): one of stroke attributes' DashArray value out of range (is ") +
479*b1cdbd2cSJim Jagielski                             ::rtl::OUString::valueOf(rVal) +
480*b1cdbd2cSJim Jagielski                             ::rtl::OUString::createFromAscii(")"),
481*b1cdbd2cSJim Jagielski                             mrIf,
482*b1cdbd2cSJim Jagielski                             mnArgPos );
483*b1cdbd2cSJim Jagielski #else
484*b1cdbd2cSJim Jagielski                         throw lang::IllegalArgumentException();
485*b1cdbd2cSJim Jagielski #endif
486*b1cdbd2cSJim Jagielski                     }
487*b1cdbd2cSJim Jagielski                 }
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski                 const char*									mpStr;
490*b1cdbd2cSJim Jagielski                 const uno::Reference< uno::XInterface >&	mrIf;
491*b1cdbd2cSJim Jagielski                 sal_Int16									mnArgPos;
492*b1cdbd2cSJim Jagielski             };
493*b1cdbd2cSJim Jagielski         }
494*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::StrokeAttributes & strokeAttributes,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)495*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::StrokeAttributes&		strokeAttributes,
496*b1cdbd2cSJim Jagielski                           const char*								pStr,
497*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
498*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
499*b1cdbd2cSJim Jagielski         {
500*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( strokeAttributes.StrokeWidth ) ||
501*b1cdbd2cSJim Jagielski                 strokeAttributes.StrokeWidth < 0.0 )
502*b1cdbd2cSJim Jagielski             {
503*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
504*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
505*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
506*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): stroke attributes' StrokeWidth value out of range (is ") +
507*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(strokeAttributes.StrokeWidth) +
508*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
509*b1cdbd2cSJim Jagielski                     xIf,
510*b1cdbd2cSJim Jagielski                     nArgPos );
511*b1cdbd2cSJim Jagielski #else
512*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
513*b1cdbd2cSJim Jagielski #endif
514*b1cdbd2cSJim Jagielski             }
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( strokeAttributes.MiterLimit ) ||
517*b1cdbd2cSJim Jagielski                 strokeAttributes.MiterLimit < 0.0 )
518*b1cdbd2cSJim Jagielski             {
519*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
520*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
521*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
522*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): stroke attributes' MiterLimit value out of range (is ") +
523*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(strokeAttributes.MiterLimit) +
524*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
525*b1cdbd2cSJim Jagielski                     xIf,
526*b1cdbd2cSJim Jagielski                     nArgPos );
527*b1cdbd2cSJim Jagielski #else
528*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
529*b1cdbd2cSJim Jagielski #endif
530*b1cdbd2cSJim Jagielski             }
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski             ::std::for_each( strokeAttributes.DashArray.getConstArray(),
533*b1cdbd2cSJim Jagielski                              strokeAttributes.DashArray.getConstArray() + strokeAttributes.DashArray.getLength(),
534*b1cdbd2cSJim Jagielski                              VerifyDashValue( pStr, xIf, nArgPos ) );
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski             ::std::for_each( strokeAttributes.LineArray.getConstArray(),
537*b1cdbd2cSJim Jagielski                              strokeAttributes.LineArray.getConstArray() + strokeAttributes.LineArray.getLength(),
538*b1cdbd2cSJim Jagielski                              VerifyDashValue( pStr, xIf, nArgPos ) );
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski             if( strokeAttributes.StartCapType < rendering::PathCapType::BUTT ||
541*b1cdbd2cSJim Jagielski                 strokeAttributes.StartCapType > rendering::PathCapType::SQUARE )
542*b1cdbd2cSJim Jagielski             {
543*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
544*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
545*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
546*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): stroke attributes' StartCapType value is out of range (") +
547*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(strokeAttributes.StartCapType)) +
548*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
549*b1cdbd2cSJim Jagielski                     xIf,
550*b1cdbd2cSJim Jagielski                     nArgPos );
551*b1cdbd2cSJim Jagielski #else
552*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
553*b1cdbd2cSJim Jagielski #endif
554*b1cdbd2cSJim Jagielski             }
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski             if( strokeAttributes.EndCapType < rendering::PathCapType::BUTT ||
557*b1cdbd2cSJim Jagielski                 strokeAttributes.EndCapType > rendering::PathCapType::SQUARE )
558*b1cdbd2cSJim Jagielski             {
559*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
560*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
561*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
562*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): stroke attributes' StartCapType value is out of range (") +
563*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(strokeAttributes.EndCapType)) +
564*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
565*b1cdbd2cSJim Jagielski                     xIf,
566*b1cdbd2cSJim Jagielski                     nArgPos );
567*b1cdbd2cSJim Jagielski #else
568*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
569*b1cdbd2cSJim Jagielski #endif
570*b1cdbd2cSJim Jagielski             }
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski             if( strokeAttributes.JoinType < rendering::PathJoinType::NONE ||
573*b1cdbd2cSJim Jagielski                 strokeAttributes.JoinType > rendering::PathJoinType::BEVEL )
574*b1cdbd2cSJim Jagielski             {
575*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
576*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
577*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
578*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): stroke attributes' JoinType value is out of range (") +
579*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(strokeAttributes.JoinType)) +
580*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
581*b1cdbd2cSJim Jagielski                     xIf,
582*b1cdbd2cSJim Jagielski                     nArgPos );
583*b1cdbd2cSJim Jagielski #else
584*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
585*b1cdbd2cSJim Jagielski #endif
586*b1cdbd2cSJim Jagielski             }
587*b1cdbd2cSJim Jagielski         }
588*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::IntegerBitmapLayout & bitmapLayout,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)589*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::IntegerBitmapLayout& 	bitmapLayout,
590*b1cdbd2cSJim Jagielski                           const char*								pStr,
591*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
592*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
593*b1cdbd2cSJim Jagielski         {
594*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski             if( bitmapLayout.ScanLines < 0 )
597*b1cdbd2cSJim Jagielski             {
598*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
599*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
600*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
601*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ScanLines is negative"),
602*b1cdbd2cSJim Jagielski                     xIf,
603*b1cdbd2cSJim Jagielski                     nArgPos );
604*b1cdbd2cSJim Jagielski #else
605*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
606*b1cdbd2cSJim Jagielski #endif
607*b1cdbd2cSJim Jagielski             }
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski             if( bitmapLayout.ScanLineBytes < 0 )
610*b1cdbd2cSJim Jagielski             {
611*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
612*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
613*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
614*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ScanLineBytes is negative"),
615*b1cdbd2cSJim Jagielski                     xIf,
616*b1cdbd2cSJim Jagielski                     nArgPos );
617*b1cdbd2cSJim Jagielski #else
618*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
619*b1cdbd2cSJim Jagielski #endif
620*b1cdbd2cSJim Jagielski             }
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski             if( !bitmapLayout.ColorSpace.is() )
623*b1cdbd2cSJim Jagielski             {
624*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
625*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
626*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
627*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ColorSpace is invalid"),
628*b1cdbd2cSJim Jagielski                     xIf,
629*b1cdbd2cSJim Jagielski                     nArgPos );
630*b1cdbd2cSJim Jagielski #else
631*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
632*b1cdbd2cSJim Jagielski #endif
633*b1cdbd2cSJim Jagielski             }
634*b1cdbd2cSJim Jagielski             else
635*b1cdbd2cSJim Jagielski             {
636*b1cdbd2cSJim Jagielski                 if( bitmapLayout.ColorSpace->getBitsPerPixel() < 0 )
637*b1cdbd2cSJim Jagielski                 {
638*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
639*b1cdbd2cSJim Jagielski                     throw lang::IllegalArgumentException(
640*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii(pStr) +
641*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ColorSpace getBitsPerPixel() is negative"),
642*b1cdbd2cSJim Jagielski                         xIf,
643*b1cdbd2cSJim Jagielski                         nArgPos );
644*b1cdbd2cSJim Jagielski #else
645*b1cdbd2cSJim Jagielski                     throw lang::IllegalArgumentException();
646*b1cdbd2cSJim Jagielski #endif
647*b1cdbd2cSJim Jagielski                 }
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski                 if( bitmapLayout.ColorSpace->getEndianness() < util::Endianness::LITTLE ||
650*b1cdbd2cSJim Jagielski                     bitmapLayout.ColorSpace->getEndianness() > util::Endianness::BIG )
651*b1cdbd2cSJim Jagielski                 {
652*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
653*b1cdbd2cSJim Jagielski                     throw lang::IllegalArgumentException(
654*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii(pStr) +
655*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ColorSpace getEndianness() value is out of range (") +
656*b1cdbd2cSJim Jagielski                         ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(bitmapLayout.ColorSpace->getEndianness())) +
657*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii(" not known)"),
658*b1cdbd2cSJim Jagielski                         xIf,
659*b1cdbd2cSJim Jagielski                         nArgPos );
660*b1cdbd2cSJim Jagielski #else
661*b1cdbd2cSJim Jagielski                     throw lang::IllegalArgumentException();
662*b1cdbd2cSJim Jagielski #endif
663*b1cdbd2cSJim Jagielski                 }
664*b1cdbd2cSJim Jagielski             }
665*b1cdbd2cSJim Jagielski         }
666*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::FloatingPointBitmapLayout & bitmapLayout,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)667*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::FloatingPointBitmapLayout&	bitmapLayout,
668*b1cdbd2cSJim Jagielski                           const char*									pStr,
669*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&		xIf,
670*b1cdbd2cSJim Jagielski                           ::sal_Int16									nArgPos )
671*b1cdbd2cSJim Jagielski         {
672*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf; (void)nArgPos;
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski             if( bitmapLayout.ScanLines < 0 )
675*b1cdbd2cSJim Jagielski             {
676*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
677*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
678*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
679*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ScanLines is negative"),
680*b1cdbd2cSJim Jagielski                     xIf,
681*b1cdbd2cSJim Jagielski                     nArgPos );
682*b1cdbd2cSJim Jagielski #else
683*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
684*b1cdbd2cSJim Jagielski #endif
685*b1cdbd2cSJim Jagielski             }
686*b1cdbd2cSJim Jagielski 
687*b1cdbd2cSJim Jagielski             if( bitmapLayout.ScanLineBytes < 0 )
688*b1cdbd2cSJim Jagielski             {
689*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
690*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
691*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
692*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ScanLineBytes is negative"),
693*b1cdbd2cSJim Jagielski                     xIf,
694*b1cdbd2cSJim Jagielski                     nArgPos );
695*b1cdbd2cSJim Jagielski #else
696*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
697*b1cdbd2cSJim Jagielski #endif
698*b1cdbd2cSJim Jagielski             }
699*b1cdbd2cSJim Jagielski 
700*b1cdbd2cSJim Jagielski             if( !bitmapLayout.ColorSpace.is() )
701*b1cdbd2cSJim Jagielski             {
702*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
703*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
704*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
705*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's ColorSpace is invalid"),
706*b1cdbd2cSJim Jagielski                     xIf,
707*b1cdbd2cSJim Jagielski                     nArgPos );
708*b1cdbd2cSJim Jagielski #else
709*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
710*b1cdbd2cSJim Jagielski #endif
711*b1cdbd2cSJim Jagielski             }
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski             if( bitmapLayout.NumComponents < 0 )
714*b1cdbd2cSJim Jagielski             {
715*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
716*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
717*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
718*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's NumComponents is negative"),
719*b1cdbd2cSJim Jagielski                     xIf,
720*b1cdbd2cSJim Jagielski                     nArgPos );
721*b1cdbd2cSJim Jagielski #else
722*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
723*b1cdbd2cSJim Jagielski #endif
724*b1cdbd2cSJim Jagielski             }
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski             if( bitmapLayout.Endianness < util::Endianness::LITTLE ||
727*b1cdbd2cSJim Jagielski                 bitmapLayout.Endianness > util::Endianness::BIG )
728*b1cdbd2cSJim Jagielski             {
729*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
730*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
731*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
732*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's Endianness value is out of range (") +
733*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(bitmapLayout.Endianness)) +
734*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
735*b1cdbd2cSJim Jagielski                     xIf,
736*b1cdbd2cSJim Jagielski                     nArgPos );
737*b1cdbd2cSJim Jagielski #else
738*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
739*b1cdbd2cSJim Jagielski #endif
740*b1cdbd2cSJim Jagielski             }
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski             if( bitmapLayout.Format < rendering::FloatingPointBitmapFormat::HALFFLOAT ||
743*b1cdbd2cSJim Jagielski                 bitmapLayout.Format > rendering::FloatingPointBitmapFormat::DOUBLE )
744*b1cdbd2cSJim Jagielski             {
745*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
746*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
747*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
748*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): bitmap layout's Format value is out of range (") +
749*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(sal::static_int_cast<sal_Int32>(bitmapLayout.Format)) +
750*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(" not known)"),
751*b1cdbd2cSJim Jagielski                     xIf,
752*b1cdbd2cSJim Jagielski                     nArgPos );
753*b1cdbd2cSJim Jagielski #else
754*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
755*b1cdbd2cSJim Jagielski #endif
756*b1cdbd2cSJim Jagielski             }
757*b1cdbd2cSJim Jagielski         }
758*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::FontInfo &,const char *,const uno::Reference<uno::XInterface> &,::sal_Int16)759*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::FontInfo&				/*fontInfo*/,
760*b1cdbd2cSJim Jagielski                           const char*								/*pStr*/,
761*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	/*xIf*/,
762*b1cdbd2cSJim Jagielski                           ::sal_Int16								/*nArgPos*/ )
763*b1cdbd2cSJim Jagielski         {
764*b1cdbd2cSJim Jagielski             // TODO(E3): Implement FontDescription checks, once the
765*b1cdbd2cSJim Jagielski             // Panose stuff is ready.
766*b1cdbd2cSJim Jagielski         }
767*b1cdbd2cSJim Jagielski 
verifyInput(const rendering::FontRequest & fontRequest,const char * pStr,const uno::Reference<uno::XInterface> & xIf,::sal_Int16 nArgPos)768*b1cdbd2cSJim Jagielski         void verifyInput( const rendering::FontRequest&				fontRequest,
769*b1cdbd2cSJim Jagielski                           const char*								pStr,
770*b1cdbd2cSJim Jagielski                           const uno::Reference< uno::XInterface >&	xIf,
771*b1cdbd2cSJim Jagielski                           ::sal_Int16								nArgPos )
772*b1cdbd2cSJim Jagielski         {
773*b1cdbd2cSJim Jagielski             verifyInput( fontRequest.FontDescription,
774*b1cdbd2cSJim Jagielski                          pStr, xIf, nArgPos );
775*b1cdbd2cSJim Jagielski 
776*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( fontRequest.CellSize ) )
777*b1cdbd2cSJim Jagielski             {
778*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
779*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
780*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
781*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): font request's CellSize value contains infinite or NAN"),
782*b1cdbd2cSJim Jagielski                     xIf,
783*b1cdbd2cSJim Jagielski                     nArgPos );
784*b1cdbd2cSJim Jagielski #else
785*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
786*b1cdbd2cSJim Jagielski #endif
787*b1cdbd2cSJim Jagielski             }
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski             if( !::rtl::math::isFinite( fontRequest.ReferenceAdvancement ) )
790*b1cdbd2cSJim Jagielski             {
791*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
792*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
793*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
794*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): font request's ReferenceAdvancement value contains infinite or NAN"),
795*b1cdbd2cSJim Jagielski                     xIf,
796*b1cdbd2cSJim Jagielski                     nArgPos );
797*b1cdbd2cSJim Jagielski #else
798*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
799*b1cdbd2cSJim Jagielski #endif
800*b1cdbd2cSJim Jagielski             }
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski             if( fontRequest.CellSize != 0.0 &&
803*b1cdbd2cSJim Jagielski                 fontRequest.ReferenceAdvancement != 0.0 )
804*b1cdbd2cSJim Jagielski             {
805*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
806*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
807*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
808*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyInput(): font request's CellSize and ReferenceAdvancement are mutually exclusive, one of them must be 0.0"),
809*b1cdbd2cSJim Jagielski                     xIf,
810*b1cdbd2cSJim Jagielski                     nArgPos );
811*b1cdbd2cSJim Jagielski #else
812*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
813*b1cdbd2cSJim Jagielski #endif
814*b1cdbd2cSJim Jagielski             }
815*b1cdbd2cSJim Jagielski         }
816*b1cdbd2cSJim Jagielski 
verifyIndexRange(const geometry::IntegerRectangle2D & rect,const geometry::IntegerSize2D & size)817*b1cdbd2cSJim Jagielski         void verifyIndexRange( const geometry::IntegerRectangle2D& 	rect,
818*b1cdbd2cSJim Jagielski                                const geometry::IntegerSize2D& 	 	size )
819*b1cdbd2cSJim Jagielski         {
820*b1cdbd2cSJim Jagielski             const ::basegfx::B2IRange aRect(
821*b1cdbd2cSJim Jagielski                 ::basegfx::unotools::b2IRectangleFromIntegerRectangle2D(
822*b1cdbd2cSJim Jagielski                     rect ) );
823*b1cdbd2cSJim Jagielski 
824*b1cdbd2cSJim Jagielski             if( aRect.getMinX() < 0 ||
825*b1cdbd2cSJim Jagielski                 aRect.getMaxX() > size.Width ||
826*b1cdbd2cSJim Jagielski                 aRect.getMinY() < 0 ||
827*b1cdbd2cSJim Jagielski                 aRect.getMaxY() > size.Height )
828*b1cdbd2cSJim Jagielski             {
829*b1cdbd2cSJim Jagielski                 throw ::com::sun::star::lang::IndexOutOfBoundsException();
830*b1cdbd2cSJim Jagielski             }
831*b1cdbd2cSJim Jagielski         }
832*b1cdbd2cSJim Jagielski 
verifyIndexRange(const geometry::IntegerPoint2D & pos,const geometry::IntegerSize2D & size)833*b1cdbd2cSJim Jagielski         void verifyIndexRange( const geometry::IntegerPoint2D& pos,
834*b1cdbd2cSJim Jagielski                                const geometry::IntegerSize2D&  size )
835*b1cdbd2cSJim Jagielski         {
836*b1cdbd2cSJim Jagielski             if( pos.X < 0 ||
837*b1cdbd2cSJim Jagielski                 pos.X > size.Width ||
838*b1cdbd2cSJim Jagielski                 pos.Y < 0 ||
839*b1cdbd2cSJim Jagielski                 pos.Y > size.Height )
840*b1cdbd2cSJim Jagielski             {
841*b1cdbd2cSJim Jagielski                 throw ::com::sun::star::lang::IndexOutOfBoundsException();
842*b1cdbd2cSJim Jagielski             }
843*b1cdbd2cSJim Jagielski         }
844*b1cdbd2cSJim Jagielski 
verifyBitmapSize(const geometry::IntegerSize2D & size,const char * pStr,const uno::Reference<uno::XInterface> & xIf)845*b1cdbd2cSJim Jagielski         void verifyBitmapSize( const geometry::IntegerSize2D& 			size,
846*b1cdbd2cSJim Jagielski                                const char*								pStr,
847*b1cdbd2cSJim Jagielski                                const uno::Reference< uno::XInterface >&	xIf )
848*b1cdbd2cSJim Jagielski         {
849*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf;
850*b1cdbd2cSJim Jagielski 
851*b1cdbd2cSJim Jagielski             if( size.Width <= 0 )
852*b1cdbd2cSJim Jagielski             {
853*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
854*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
855*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
856*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyBitmapSize(): size has 0 or negative width (value: ") +
857*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(size.Width) +
858*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
859*b1cdbd2cSJim Jagielski                     xIf,
860*b1cdbd2cSJim Jagielski                     0 );
861*b1cdbd2cSJim Jagielski #else
862*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
863*b1cdbd2cSJim Jagielski #endif
864*b1cdbd2cSJim Jagielski             }
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski             if( size.Height <= 0 )
867*b1cdbd2cSJim Jagielski             {
868*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
869*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
870*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
871*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifyBitmapSize(): size has 0 or negative height (value: ") +
872*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(size.Height) +
873*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
874*b1cdbd2cSJim Jagielski                     xIf,
875*b1cdbd2cSJim Jagielski                     0 );
876*b1cdbd2cSJim Jagielski #else
877*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
878*b1cdbd2cSJim Jagielski #endif
879*b1cdbd2cSJim Jagielski             }
880*b1cdbd2cSJim Jagielski         }
881*b1cdbd2cSJim Jagielski 
verifySpriteSize(const geometry::RealSize2D & size,const char * pStr,const uno::Reference<uno::XInterface> & xIf)882*b1cdbd2cSJim Jagielski         void verifySpriteSize( const geometry::RealSize2D& 				size,
883*b1cdbd2cSJim Jagielski                                const char*								pStr,
884*b1cdbd2cSJim Jagielski                                const uno::Reference< uno::XInterface >&	xIf )
885*b1cdbd2cSJim Jagielski         {
886*b1cdbd2cSJim Jagielski             (void)pStr; (void)xIf;
887*b1cdbd2cSJim Jagielski 
888*b1cdbd2cSJim Jagielski             if( size.Width <= 0.0 )
889*b1cdbd2cSJim Jagielski             {
890*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
891*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
892*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
893*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifySpriteSize(): size has 0 or negative width (value: ") +
894*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(size.Width) +
895*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
896*b1cdbd2cSJim Jagielski                     xIf,
897*b1cdbd2cSJim Jagielski                     0 );
898*b1cdbd2cSJim Jagielski #else
899*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
900*b1cdbd2cSJim Jagielski #endif
901*b1cdbd2cSJim Jagielski             }
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski             if( size.Height <= 0.0 )
904*b1cdbd2cSJim Jagielski             {
905*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
906*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException(
907*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(pStr) +
908*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(": verifySpriteSize(): size has 0 or negative height (value: ") +
909*b1cdbd2cSJim Jagielski                     ::rtl::OUString::valueOf(size.Height) +
910*b1cdbd2cSJim Jagielski                     ::rtl::OUString::createFromAscii(")"),
911*b1cdbd2cSJim Jagielski                     xIf,
912*b1cdbd2cSJim Jagielski                     0 );
913*b1cdbd2cSJim Jagielski #else
914*b1cdbd2cSJim Jagielski                 throw lang::IllegalArgumentException();
915*b1cdbd2cSJim Jagielski #endif
916*b1cdbd2cSJim Jagielski             }
917*b1cdbd2cSJim Jagielski         }
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 	} // namespace tools
921*b1cdbd2cSJim Jagielski 
922*b1cdbd2cSJim Jagielski } // namespace canvas
923