19f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
39f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
49f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file
59f62ea84SAndrew Rist * distributed with this work for additional information
69f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file
79f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the
89f62ea84SAndrew Rist * "License"); you may not use this file except in compliance
99f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at
109f62ea84SAndrew Rist *
119f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
129f62ea84SAndrew Rist *
139f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing,
149f62ea84SAndrew Rist * software distributed under the License is distributed on an
159f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169f62ea84SAndrew Rist * KIND, either express or implied. See the License for the
179f62ea84SAndrew Rist * specific language governing permissions and limitations
189f62ea84SAndrew Rist * under the License.
199f62ea84SAndrew Rist *
209f62ea84SAndrew Rist *************************************************************/
219f62ea84SAndrew Rist
229f62ea84SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir #include <tools/stream.hxx>
27cdf0e10cSrcweir #include <tools/vcompat.hxx>
28cdf0e10cSrcweir #include <tools/debug.hxx>
29cdf0e10cSrcweir #include <vcl/lineinfo.hxx>
30cdf0e10cSrcweir #include <basegfx/polygon/b2dpolypolygon.hxx>
31cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygontools.hxx>
32cdf0e10cSrcweir #include <basegfx/polygon/b2dlinegeometry.hxx>
33cdf0e10cSrcweir #include <numeric>
34cdf0e10cSrcweir
DBG_NAME(LineInfo)35cdf0e10cSrcweir DBG_NAME( LineInfo )
36cdf0e10cSrcweir
37cdf0e10cSrcweir // ----------------
38cdf0e10cSrcweir // - ImplLineInfo -
39cdf0e10cSrcweir // ----------------
40cdf0e10cSrcweir
41cdf0e10cSrcweir ImplLineInfo::ImplLineInfo() :
42cdf0e10cSrcweir mnRefCount ( 1 ),
43cdf0e10cSrcweir meStyle ( LINE_SOLID ),
44cdf0e10cSrcweir mnWidth ( 0 ),
45cdf0e10cSrcweir mnDashCount ( 0 ),
46cdf0e10cSrcweir mnDashLen ( 0 ),
47cdf0e10cSrcweir mnDotCount ( 0 ),
48cdf0e10cSrcweir mnDotLen ( 0 ),
49cdf0e10cSrcweir mnDistance ( 0 ),
50*5aaf853bSArmin Le Grand meLineJoin ( basegfx::B2DLINEJOIN_ROUND ),
51*5aaf853bSArmin Le Grand meLineCap ( com::sun::star::drawing::LineCap_BUTT )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir }
54cdf0e10cSrcweir
55cdf0e10cSrcweir // -----------------------------------------------------------------------
56cdf0e10cSrcweir
ImplLineInfo(const ImplLineInfo & rImplLineInfo)57cdf0e10cSrcweir ImplLineInfo::ImplLineInfo( const ImplLineInfo& rImplLineInfo ) :
58cdf0e10cSrcweir mnRefCount ( 1 ),
59cdf0e10cSrcweir meStyle ( rImplLineInfo.meStyle ),
60cdf0e10cSrcweir mnWidth ( rImplLineInfo.mnWidth ),
61cdf0e10cSrcweir mnDashCount ( rImplLineInfo.mnDashCount ),
62cdf0e10cSrcweir mnDashLen ( rImplLineInfo.mnDashLen ),
63cdf0e10cSrcweir mnDotCount ( rImplLineInfo.mnDotCount ),
64cdf0e10cSrcweir mnDotLen ( rImplLineInfo.mnDotLen ),
65cdf0e10cSrcweir mnDistance ( rImplLineInfo.mnDistance ),
66*5aaf853bSArmin Le Grand meLineJoin ( rImplLineInfo.meLineJoin ),
67*5aaf853bSArmin Le Grand meLineCap ( rImplLineInfo.meLineCap )
68cdf0e10cSrcweir {
69cdf0e10cSrcweir }
70cdf0e10cSrcweir
71cdf0e10cSrcweir // -----------------------------------------------------------------------
72cdf0e10cSrcweir
operator ==(const ImplLineInfo & rB) const73cdf0e10cSrcweir inline bool ImplLineInfo::operator==( const ImplLineInfo& rB ) const
74cdf0e10cSrcweir {
75cdf0e10cSrcweir return(meStyle == rB.meStyle
76cdf0e10cSrcweir && mnWidth == rB.mnWidth
77cdf0e10cSrcweir && mnDashCount == rB.mnDashCount
78cdf0e10cSrcweir && mnDashLen == rB.mnDashLen
79cdf0e10cSrcweir && mnDotCount == rB.mnDotCount
80cdf0e10cSrcweir && mnDotLen == rB.mnDotLen
81cdf0e10cSrcweir && mnDistance == rB.mnDistance
82*5aaf853bSArmin Le Grand && meLineJoin == rB.meLineJoin
83*5aaf853bSArmin Le Grand && meLineCap == rB.meLineCap);
84cdf0e10cSrcweir }
85cdf0e10cSrcweir
86cdf0e10cSrcweir // ------------
87cdf0e10cSrcweir // - LineInfo -
88cdf0e10cSrcweir // ------------
89cdf0e10cSrcweir
LineInfo(LineStyle eStyle,long nWidth)90cdf0e10cSrcweir LineInfo::LineInfo( LineStyle eStyle, long nWidth )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir DBG_CTOR( LineInfo, NULL );
93cdf0e10cSrcweir mpImplLineInfo = new ImplLineInfo;
94cdf0e10cSrcweir mpImplLineInfo->meStyle = eStyle;
95cdf0e10cSrcweir mpImplLineInfo->mnWidth = nWidth;
96cdf0e10cSrcweir }
97cdf0e10cSrcweir
98cdf0e10cSrcweir // -----------------------------------------------------------------------
99cdf0e10cSrcweir
LineInfo(const LineInfo & rLineInfo)100cdf0e10cSrcweir LineInfo::LineInfo( const LineInfo& rLineInfo )
101cdf0e10cSrcweir {
102cdf0e10cSrcweir DBG_CTOR( LineInfo, NULL );
103cdf0e10cSrcweir DBG_CHKOBJ( &rLineInfo, LineInfo, NULL );
104cdf0e10cSrcweir mpImplLineInfo = rLineInfo.mpImplLineInfo;
105cdf0e10cSrcweir mpImplLineInfo->mnRefCount++;
106cdf0e10cSrcweir }
107cdf0e10cSrcweir
108cdf0e10cSrcweir // -----------------------------------------------------------------------
109cdf0e10cSrcweir
~LineInfo()110cdf0e10cSrcweir LineInfo::~LineInfo()
111cdf0e10cSrcweir {
112cdf0e10cSrcweir DBG_DTOR( LineInfo, NULL );
113cdf0e10cSrcweir if( !( --mpImplLineInfo->mnRefCount ) )
114cdf0e10cSrcweir delete mpImplLineInfo;
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir // -----------------------------------------------------------------------
118cdf0e10cSrcweir
operator =(const LineInfo & rLineInfo)119cdf0e10cSrcweir LineInfo& LineInfo::operator=( const LineInfo& rLineInfo )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
122cdf0e10cSrcweir DBG_CHKOBJ( &rLineInfo, LineInfo, NULL );
123cdf0e10cSrcweir
124cdf0e10cSrcweir rLineInfo.mpImplLineInfo->mnRefCount++;
125cdf0e10cSrcweir
126cdf0e10cSrcweir if( !( --mpImplLineInfo->mnRefCount ) )
127cdf0e10cSrcweir delete mpImplLineInfo;
128cdf0e10cSrcweir
129cdf0e10cSrcweir mpImplLineInfo = rLineInfo.mpImplLineInfo;
130cdf0e10cSrcweir return *this;
131cdf0e10cSrcweir }
132cdf0e10cSrcweir
133cdf0e10cSrcweir // -----------------------------------------------------------------------
134cdf0e10cSrcweir
operator ==(const LineInfo & rLineInfo) const135cdf0e10cSrcweir sal_Bool LineInfo::operator==( const LineInfo& rLineInfo ) const
136cdf0e10cSrcweir {
137cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
138cdf0e10cSrcweir DBG_CHKOBJ( &rLineInfo, LineInfo, NULL );
139cdf0e10cSrcweir
140cdf0e10cSrcweir return( mpImplLineInfo == rLineInfo.mpImplLineInfo ||
141cdf0e10cSrcweir *mpImplLineInfo == *rLineInfo.mpImplLineInfo );
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
144cdf0e10cSrcweir // -----------------------------------------------------------------------
145cdf0e10cSrcweir
ImplMakeUnique()146cdf0e10cSrcweir void LineInfo::ImplMakeUnique()
147cdf0e10cSrcweir {
148cdf0e10cSrcweir if( mpImplLineInfo->mnRefCount != 1 )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir if( mpImplLineInfo->mnRefCount )
151cdf0e10cSrcweir mpImplLineInfo->mnRefCount--;
152cdf0e10cSrcweir
153cdf0e10cSrcweir mpImplLineInfo = new ImplLineInfo( *mpImplLineInfo );
154cdf0e10cSrcweir }
155cdf0e10cSrcweir }
156cdf0e10cSrcweir
157cdf0e10cSrcweir // -----------------------------------------------------------------------
158cdf0e10cSrcweir
SetStyle(LineStyle eStyle)159cdf0e10cSrcweir void LineInfo::SetStyle( LineStyle eStyle )
160cdf0e10cSrcweir {
161cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
162cdf0e10cSrcweir ImplMakeUnique();
163cdf0e10cSrcweir mpImplLineInfo->meStyle = eStyle;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir // -----------------------------------------------------------------------
167cdf0e10cSrcweir
SetWidth(long nWidth)168cdf0e10cSrcweir void LineInfo::SetWidth( long nWidth )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
171cdf0e10cSrcweir ImplMakeUnique();
172cdf0e10cSrcweir mpImplLineInfo->mnWidth = nWidth;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir
175cdf0e10cSrcweir // -----------------------------------------------------------------------
176cdf0e10cSrcweir
SetDashCount(sal_uInt16 nDashCount)177cdf0e10cSrcweir void LineInfo::SetDashCount( sal_uInt16 nDashCount )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
180cdf0e10cSrcweir ImplMakeUnique();
181cdf0e10cSrcweir mpImplLineInfo->mnDashCount = nDashCount;
182cdf0e10cSrcweir }
183cdf0e10cSrcweir
184cdf0e10cSrcweir // -----------------------------------------------------------------------
185cdf0e10cSrcweir
SetDashLen(long nDashLen)186cdf0e10cSrcweir void LineInfo::SetDashLen( long nDashLen )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
189cdf0e10cSrcweir ImplMakeUnique();
190cdf0e10cSrcweir mpImplLineInfo->mnDashLen = nDashLen;
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir // -----------------------------------------------------------------------
194cdf0e10cSrcweir
SetDotCount(sal_uInt16 nDotCount)195cdf0e10cSrcweir void LineInfo::SetDotCount( sal_uInt16 nDotCount )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
198cdf0e10cSrcweir ImplMakeUnique();
199cdf0e10cSrcweir mpImplLineInfo->mnDotCount = nDotCount;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir
202cdf0e10cSrcweir // -----------------------------------------------------------------------
203cdf0e10cSrcweir
SetDotLen(long nDotLen)204cdf0e10cSrcweir void LineInfo::SetDotLen( long nDotLen )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
207cdf0e10cSrcweir ImplMakeUnique();
208cdf0e10cSrcweir mpImplLineInfo->mnDotLen = nDotLen;
209cdf0e10cSrcweir }
210cdf0e10cSrcweir
211cdf0e10cSrcweir // -----------------------------------------------------------------------
212cdf0e10cSrcweir
SetDistance(long nDistance)213cdf0e10cSrcweir void LineInfo::SetDistance( long nDistance )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
216cdf0e10cSrcweir ImplMakeUnique();
217cdf0e10cSrcweir mpImplLineInfo->mnDistance = nDistance;
218cdf0e10cSrcweir }
219cdf0e10cSrcweir
220cdf0e10cSrcweir // -----------------------------------------------------------------------
221cdf0e10cSrcweir
SetLineJoin(basegfx::B2DLineJoin eLineJoin)222cdf0e10cSrcweir void LineInfo::SetLineJoin(basegfx::B2DLineJoin eLineJoin)
223cdf0e10cSrcweir {
224cdf0e10cSrcweir DBG_CHKTHIS( LineInfo, NULL );
225cdf0e10cSrcweir
226cdf0e10cSrcweir if(eLineJoin != mpImplLineInfo->meLineJoin)
227cdf0e10cSrcweir {
228cdf0e10cSrcweir ImplMakeUnique();
229cdf0e10cSrcweir mpImplLineInfo->meLineJoin = eLineJoin;
230cdf0e10cSrcweir }
231cdf0e10cSrcweir }
232cdf0e10cSrcweir
233cdf0e10cSrcweir // -----------------------------------------------------------------------
234cdf0e10cSrcweir
SetLineCap(com::sun::star::drawing::LineCap eLineCap)235*5aaf853bSArmin Le Grand void LineInfo::SetLineCap(com::sun::star::drawing::LineCap eLineCap)
236*5aaf853bSArmin Le Grand {
237*5aaf853bSArmin Le Grand DBG_CHKTHIS( LineInfo, NULL );
238*5aaf853bSArmin Le Grand
239*5aaf853bSArmin Le Grand if(eLineCap != mpImplLineInfo->meLineCap)
240*5aaf853bSArmin Le Grand {
241*5aaf853bSArmin Le Grand ImplMakeUnique();
242*5aaf853bSArmin Le Grand mpImplLineInfo->meLineCap = eLineCap;
243*5aaf853bSArmin Le Grand }
244*5aaf853bSArmin Le Grand }
245*5aaf853bSArmin Le Grand
246*5aaf853bSArmin Le Grand // -----------------------------------------------------------------------
247*5aaf853bSArmin Le Grand
IsDefault() const248*5aaf853bSArmin Le Grand sal_Bool LineInfo::IsDefault() const
249*5aaf853bSArmin Le Grand {
250*5aaf853bSArmin Le Grand return( !mpImplLineInfo->mnWidth
251*5aaf853bSArmin Le Grand && ( LINE_SOLID == mpImplLineInfo->meStyle )
252*5aaf853bSArmin Le Grand && ( com::sun::star::drawing::LineCap_BUTT == mpImplLineInfo->meLineCap));
253*5aaf853bSArmin Le Grand }
254*5aaf853bSArmin Le Grand
255*5aaf853bSArmin Le Grand // -----------------------------------------------------------------------
256*5aaf853bSArmin Le Grand
operator >>(SvStream & rIStm,ImplLineInfo & rImplLineInfo)257cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, ImplLineInfo& rImplLineInfo )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir VersionCompat aCompat( rIStm, STREAM_READ );
260cdf0e10cSrcweir sal_uInt16 nTmp16;
261cdf0e10cSrcweir
262cdf0e10cSrcweir rIStm >> nTmp16; rImplLineInfo.meStyle = (LineStyle) nTmp16;
263cdf0e10cSrcweir rIStm >> rImplLineInfo.mnWidth;
264cdf0e10cSrcweir
265cdf0e10cSrcweir if( aCompat.GetVersion() >= 2 )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir // version 2
268cdf0e10cSrcweir rIStm >> rImplLineInfo.mnDashCount >> rImplLineInfo.mnDashLen;
269cdf0e10cSrcweir rIStm >> rImplLineInfo.mnDotCount >> rImplLineInfo.mnDotLen;
270cdf0e10cSrcweir rIStm >> rImplLineInfo.mnDistance;
271cdf0e10cSrcweir }
272cdf0e10cSrcweir
273cdf0e10cSrcweir if( aCompat.GetVersion() >= 3 )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir // version 3
276cdf0e10cSrcweir rIStm >> nTmp16; rImplLineInfo.meLineJoin = (basegfx::B2DLineJoin) nTmp16;
277cdf0e10cSrcweir }
278cdf0e10cSrcweir
279*5aaf853bSArmin Le Grand if( aCompat.GetVersion() >= 4 )
280*5aaf853bSArmin Le Grand {
281*5aaf853bSArmin Le Grand // version 4
282*5aaf853bSArmin Le Grand rIStm >> nTmp16; rImplLineInfo.meLineCap = (com::sun::star::drawing::LineCap) nTmp16;
283*5aaf853bSArmin Le Grand }
284*5aaf853bSArmin Le Grand
285cdf0e10cSrcweir return rIStm;
286cdf0e10cSrcweir }
287cdf0e10cSrcweir
288cdf0e10cSrcweir // -----------------------------------------------------------------------
289cdf0e10cSrcweir
operator <<(SvStream & rOStm,const ImplLineInfo & rImplLineInfo)290cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const ImplLineInfo& rImplLineInfo )
291cdf0e10cSrcweir {
292*5aaf853bSArmin Le Grand VersionCompat aCompat( rOStm, STREAM_WRITE, 4 );
293cdf0e10cSrcweir
294cdf0e10cSrcweir // version 1
295cdf0e10cSrcweir rOStm << (sal_uInt16) rImplLineInfo.meStyle << rImplLineInfo.mnWidth;
296cdf0e10cSrcweir
297cdf0e10cSrcweir // since version2
298cdf0e10cSrcweir rOStm << rImplLineInfo.mnDashCount << rImplLineInfo.mnDashLen;
299cdf0e10cSrcweir rOStm << rImplLineInfo.mnDotCount << rImplLineInfo.mnDotLen;
300cdf0e10cSrcweir rOStm << rImplLineInfo.mnDistance;
301cdf0e10cSrcweir
302cdf0e10cSrcweir // since version3
303cdf0e10cSrcweir rOStm << (sal_uInt16) rImplLineInfo.meLineJoin;
304cdf0e10cSrcweir
305*5aaf853bSArmin Le Grand // since version4
306*5aaf853bSArmin Le Grand rOStm << (sal_uInt16) rImplLineInfo.meLineCap;
307*5aaf853bSArmin Le Grand
308cdf0e10cSrcweir return rOStm;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir
311cdf0e10cSrcweir // -----------------------------------------------------------------------
312cdf0e10cSrcweir
operator >>(SvStream & rIStm,LineInfo & rLineInfo)313cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, LineInfo& rLineInfo )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir rLineInfo.ImplMakeUnique();
316cdf0e10cSrcweir return( rIStm >> *rLineInfo.mpImplLineInfo );
317cdf0e10cSrcweir }
318cdf0e10cSrcweir
319cdf0e10cSrcweir // -----------------------------------------------------------------------
320cdf0e10cSrcweir
operator <<(SvStream & rOStm,const LineInfo & rLineInfo)321cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const LineInfo& rLineInfo )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir return( rOStm << *rLineInfo.mpImplLineInfo );
324cdf0e10cSrcweir }
325cdf0e10cSrcweir
326cdf0e10cSrcweir // -----------------------------------------------------------------------
327cdf0e10cSrcweir
isDashDotOrFatLineUsed() const328cdf0e10cSrcweir bool LineInfo::isDashDotOrFatLineUsed() const
329cdf0e10cSrcweir {
330cdf0e10cSrcweir return (LINE_DASH == GetStyle() || GetWidth() > 1);
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir // -----------------------------------------------------------------------
334cdf0e10cSrcweir
applyToB2DPolyPolygon(basegfx::B2DPolyPolygon & io_rLinePolyPolygon,basegfx::B2DPolyPolygon & o_rFillPolyPolygon) const335cdf0e10cSrcweir void LineInfo::applyToB2DPolyPolygon(
336cdf0e10cSrcweir basegfx::B2DPolyPolygon& io_rLinePolyPolygon,
337cdf0e10cSrcweir basegfx::B2DPolyPolygon& o_rFillPolyPolygon) const
338cdf0e10cSrcweir {
339cdf0e10cSrcweir o_rFillPolyPolygon.clear();
340cdf0e10cSrcweir
341cdf0e10cSrcweir if(io_rLinePolyPolygon.count())
342cdf0e10cSrcweir {
343cdf0e10cSrcweir if(LINE_DASH == GetStyle())
344cdf0e10cSrcweir {
345cdf0e10cSrcweir ::std::vector< double > fDotDashArray;
346cdf0e10cSrcweir const double fDashLen(GetDashLen());
347cdf0e10cSrcweir const double fDotLen(GetDotLen());
348cdf0e10cSrcweir const double fDistance(GetDistance());
349cdf0e10cSrcweir
350cdf0e10cSrcweir for(sal_uInt16 a(0); a < GetDashCount(); a++)
351cdf0e10cSrcweir {
352cdf0e10cSrcweir fDotDashArray.push_back(fDashLen);
353cdf0e10cSrcweir fDotDashArray.push_back(fDistance);
354cdf0e10cSrcweir }
355cdf0e10cSrcweir
356cdf0e10cSrcweir for(sal_uInt16 b(0); b < GetDotCount(); b++)
357cdf0e10cSrcweir {
358cdf0e10cSrcweir fDotDashArray.push_back(fDotLen);
359cdf0e10cSrcweir fDotDashArray.push_back(fDistance);
360cdf0e10cSrcweir }
361cdf0e10cSrcweir
362cdf0e10cSrcweir const double fAccumulated(::std::accumulate(fDotDashArray.begin(), fDotDashArray.end(), 0.0));
363cdf0e10cSrcweir
364cdf0e10cSrcweir if(fAccumulated > 0.0)
365cdf0e10cSrcweir {
366cdf0e10cSrcweir basegfx::B2DPolyPolygon aResult;
367cdf0e10cSrcweir
368cdf0e10cSrcweir for(sal_uInt32 c(0); c < io_rLinePolyPolygon.count(); c++)
369cdf0e10cSrcweir {
370cdf0e10cSrcweir basegfx::B2DPolyPolygon aLineTraget;
371cdf0e10cSrcweir basegfx::tools::applyLineDashing(
372cdf0e10cSrcweir io_rLinePolyPolygon.getB2DPolygon(c),
373cdf0e10cSrcweir fDotDashArray,
374cdf0e10cSrcweir &aLineTraget);
375cdf0e10cSrcweir aResult.append(aLineTraget);
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir io_rLinePolyPolygon = aResult;
379cdf0e10cSrcweir }
380cdf0e10cSrcweir }
381cdf0e10cSrcweir
382cdf0e10cSrcweir if(GetWidth() > 1 && io_rLinePolyPolygon.count())
383cdf0e10cSrcweir {
384cdf0e10cSrcweir const double fHalfLineWidth((GetWidth() * 0.5) + 0.5);
385cdf0e10cSrcweir
386cdf0e10cSrcweir for(sal_uInt32 a(0); a < io_rLinePolyPolygon.count(); a++)
387cdf0e10cSrcweir {
388cdf0e10cSrcweir o_rFillPolyPolygon.append(basegfx::tools::createAreaGeometry(
389cdf0e10cSrcweir io_rLinePolyPolygon.getB2DPolygon(a),
390cdf0e10cSrcweir fHalfLineWidth,
391*5aaf853bSArmin Le Grand GetLineJoin(),
392*5aaf853bSArmin Le Grand GetLineCap()));
393cdf0e10cSrcweir }
394cdf0e10cSrcweir
395cdf0e10cSrcweir io_rLinePolyPolygon.clear();
396cdf0e10cSrcweir }
397cdf0e10cSrcweir }
398cdf0e10cSrcweir }
399cdf0e10cSrcweir
400cdf0e10cSrcweir // -----------------------------------------------------------------------
401