xref: /aoo4110/main/vcl/source/gdi/graphictools.cxx (revision b1cdbd2c)
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_vcl.hxx"
26*b1cdbd2cSJim Jagielski #include <tools/vcompat.hxx>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <vcl/graphictools.hxx>
29*b1cdbd2cSJim Jagielski 
polyToString(const Polygon & rPoly)30*b1cdbd2cSJim Jagielski static ::rtl::OString polyToString( const Polygon& rPoly )
31*b1cdbd2cSJim Jagielski {
32*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
33*b1cdbd2cSJim Jagielski     sal_uInt16 nVertex;
34*b1cdbd2cSJim Jagielski     for(nVertex=0; nVertex<rPoly.GetSize(); ++nVertex)
35*b1cdbd2cSJim Jagielski     {
36*b1cdbd2cSJim Jagielski         aStr += "(";
37*b1cdbd2cSJim Jagielski         switch( rPoly.GetFlags(nVertex) )
38*b1cdbd2cSJim Jagielski         {
39*b1cdbd2cSJim Jagielski             case POLY_NORMAL:
40*b1cdbd2cSJim Jagielski             case POLY_SMOOTH:
41*b1cdbd2cSJim Jagielski             case POLY_SYMMTR:
42*b1cdbd2cSJim Jagielski                 aStr += "n: ";
43*b1cdbd2cSJim Jagielski                 break;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski             case POLY_CONTROL:
46*b1cdbd2cSJim Jagielski                 aStr += "c: ";
47*b1cdbd2cSJim Jagielski                 break;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski             default:
50*b1cdbd2cSJim Jagielski                 DBG_ERROR( "SvtGraphicStroke::polyToString invalid flag");
51*b1cdbd2cSJim Jagielski                 break;
52*b1cdbd2cSJim Jagielski         }
53*b1cdbd2cSJim Jagielski         aStr += ::rtl::OString::valueOf( static_cast< double >( rPoly[nVertex].getX() ) );
54*b1cdbd2cSJim Jagielski         aStr += ",";
55*b1cdbd2cSJim Jagielski         aStr += ::rtl::OString::valueOf( static_cast< double >( rPoly[nVertex].getY() ) );
56*b1cdbd2cSJim Jagielski         aStr += ") ";
57*b1cdbd2cSJim Jagielski     }
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski     return aStr;
60*b1cdbd2cSJim Jagielski }
61*b1cdbd2cSJim Jagielski 
polyPolyToString(const PolyPolygon & rPolyPoly)62*b1cdbd2cSJim Jagielski static ::rtl::OString polyPolyToString( const PolyPolygon& rPolyPoly )
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
65*b1cdbd2cSJim Jagielski     sal_uInt16 nPoly;
66*b1cdbd2cSJim Jagielski     for(nPoly=0; nPoly<rPolyPoly.Count(); ++nPoly)
67*b1cdbd2cSJim Jagielski     {
68*b1cdbd2cSJim Jagielski         const Polygon& rPoly = rPolyPoly[nPoly];
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski         aStr += "{ ";
71*b1cdbd2cSJim Jagielski         aStr += polyToString( rPoly );
72*b1cdbd2cSJim Jagielski         aStr += "} ";
73*b1cdbd2cSJim Jagielski     }
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski     return aStr;
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski 
dashToString(const SvtGraphicStroke::DashArray & rDashArray)78*b1cdbd2cSJim Jagielski static ::rtl::OString dashToString( const SvtGraphicStroke::DashArray& rDashArray )
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski     aStr += "dash: [ ";
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski     int i, nDashes( rDashArray.size() );
85*b1cdbd2cSJim Jagielski     for(i=0; i<nDashes; ++i)
86*b1cdbd2cSJim Jagielski     {
87*b1cdbd2cSJim Jagielski         aStr += ::rtl::OString::valueOf( rDashArray[i] );
88*b1cdbd2cSJim Jagielski         aStr += " ";
89*b1cdbd2cSJim Jagielski     }
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     aStr += "] ";
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski     return aStr;
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski 
colorToString(Color aColor)96*b1cdbd2cSJim Jagielski static ::rtl::OString colorToString( Color aColor )
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski     aStr += "color: [ ";
101*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( aColor.GetRed() );
102*b1cdbd2cSJim Jagielski     aStr += " ";
103*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( aColor.GetGreen() );
104*b1cdbd2cSJim Jagielski     aStr += " ";
105*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( aColor.GetBlue() );
106*b1cdbd2cSJim Jagielski     aStr += " ] ";
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     return aStr;
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////
112*b1cdbd2cSJim Jagielski 
Transform()113*b1cdbd2cSJim Jagielski SvtGraphicFill::Transform::Transform()
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski     matrix[0] = 1.0; matrix[1] = 0.0; matrix[2] = 0.0;
116*b1cdbd2cSJim Jagielski     matrix[3] = 0.0; matrix[4] = 1.0; matrix[5] = 0.0;
117*b1cdbd2cSJim Jagielski }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////
120*b1cdbd2cSJim Jagielski 
SvtGraphicStroke()121*b1cdbd2cSJim Jagielski SvtGraphicStroke::SvtGraphicStroke() :
122*b1cdbd2cSJim Jagielski     maPath(),
123*b1cdbd2cSJim Jagielski     maStartArrow(),
124*b1cdbd2cSJim Jagielski     maEndArrow(),
125*b1cdbd2cSJim Jagielski     mfTransparency(),
126*b1cdbd2cSJim Jagielski     mfStrokeWidth(),
127*b1cdbd2cSJim Jagielski     maCapType(),
128*b1cdbd2cSJim Jagielski     maJoinType(),
129*b1cdbd2cSJim Jagielski     mfMiterLimit( 3.0 ),
130*b1cdbd2cSJim Jagielski     maDashArray()
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski }
133*b1cdbd2cSJim Jagielski 
SvtGraphicStroke(const Polygon & rPath,const PolyPolygon & rStartArrow,const PolyPolygon & rEndArrow,double fTransparency,double fStrokeWidth,CapType aCap,JoinType aJoin,double fMiterLimit,const DashArray & rDashArray)134*b1cdbd2cSJim Jagielski SvtGraphicStroke::SvtGraphicStroke( const Polygon& 		rPath,
135*b1cdbd2cSJim Jagielski                                     const PolyPolygon&	rStartArrow,
136*b1cdbd2cSJim Jagielski                                     const PolyPolygon&	rEndArrow,
137*b1cdbd2cSJim Jagielski                                     double				fTransparency,
138*b1cdbd2cSJim Jagielski                                     double 				fStrokeWidth,
139*b1cdbd2cSJim Jagielski                                     CapType				aCap,
140*b1cdbd2cSJim Jagielski                                     JoinType			aJoin,
141*b1cdbd2cSJim Jagielski                                     double				fMiterLimit,
142*b1cdbd2cSJim Jagielski                                     const DashArray&	rDashArray	) :
143*b1cdbd2cSJim Jagielski     maPath( rPath ),
144*b1cdbd2cSJim Jagielski     maStartArrow( rStartArrow ),
145*b1cdbd2cSJim Jagielski     maEndArrow( rEndArrow ),
146*b1cdbd2cSJim Jagielski     mfTransparency( fTransparency ),
147*b1cdbd2cSJim Jagielski     mfStrokeWidth( fStrokeWidth ),
148*b1cdbd2cSJim Jagielski     maCapType( aCap ),
149*b1cdbd2cSJim Jagielski     maJoinType( aJoin ),
150*b1cdbd2cSJim Jagielski     mfMiterLimit( fMiterLimit ),
151*b1cdbd2cSJim Jagielski     maDashArray( rDashArray )
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
getPath(Polygon & rPath) const155*b1cdbd2cSJim Jagielski void SvtGraphicStroke::getPath( Polygon& rPath ) const
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski     rPath = maPath;
158*b1cdbd2cSJim Jagielski }
159*b1cdbd2cSJim Jagielski 
getStartArrow(PolyPolygon & rPath) const160*b1cdbd2cSJim Jagielski void SvtGraphicStroke::getStartArrow( PolyPolygon& rPath ) const
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski     rPath = maStartArrow;
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski 
getEndArrow(PolyPolygon & rPath) const165*b1cdbd2cSJim Jagielski void SvtGraphicStroke::getEndArrow( PolyPolygon& rPath ) const
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski     rPath = maEndArrow;
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
getTransparency() const170*b1cdbd2cSJim Jagielski double SvtGraphicStroke::getTransparency() const
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski     return mfTransparency;
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski 
getStrokeWidth() const175*b1cdbd2cSJim Jagielski double SvtGraphicStroke::getStrokeWidth() const
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski     return mfStrokeWidth;
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
getCapType() const180*b1cdbd2cSJim Jagielski SvtGraphicStroke::CapType SvtGraphicStroke::getCapType() const
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski     return maCapType;
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski 
getJoinType() const185*b1cdbd2cSJim Jagielski SvtGraphicStroke::JoinType SvtGraphicStroke::getJoinType() const
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski     return maJoinType;
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski 
getMiterLimit() const190*b1cdbd2cSJim Jagielski double SvtGraphicStroke::getMiterLimit() const
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski     return mfMiterLimit;
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski 
getDashArray(DashArray & rDashArray) const195*b1cdbd2cSJim Jagielski void SvtGraphicStroke::getDashArray( DashArray& rDashArray ) const
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski     rDashArray = maDashArray;
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski 
toString() const200*b1cdbd2cSJim Jagielski ::rtl::OString SvtGraphicStroke::toString() const
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski     aStr += polyToString( maPath );
205*b1cdbd2cSJim Jagielski     aStr += "trans: ";
206*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( static_cast< double >(getTransparency()) );
207*b1cdbd2cSJim Jagielski     aStr += " width: ";
208*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( static_cast< double >(getStrokeWidth()) );
209*b1cdbd2cSJim Jagielski     aStr += " cap: ";
210*b1cdbd2cSJim Jagielski     switch( getCapType() )
211*b1cdbd2cSJim Jagielski     {
212*b1cdbd2cSJim Jagielski         case capButt:
213*b1cdbd2cSJim Jagielski             aStr += "butt";
214*b1cdbd2cSJim Jagielski             break;
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski         case capRound:
217*b1cdbd2cSJim Jagielski             aStr += "round";
218*b1cdbd2cSJim Jagielski             break;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski         case capSquare:
221*b1cdbd2cSJim Jagielski             aStr += "square";
222*b1cdbd2cSJim Jagielski             break;
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski         default:
225*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicStroke::toString missing cap type");
226*b1cdbd2cSJim Jagielski             break;
227*b1cdbd2cSJim Jagielski     }
228*b1cdbd2cSJim Jagielski     aStr += " join: ";
229*b1cdbd2cSJim Jagielski     switch( getJoinType() )
230*b1cdbd2cSJim Jagielski     {
231*b1cdbd2cSJim Jagielski         case joinMiter:
232*b1cdbd2cSJim Jagielski             aStr += "miter";
233*b1cdbd2cSJim Jagielski             break;
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski         case joinRound:
236*b1cdbd2cSJim Jagielski             aStr += "round";
237*b1cdbd2cSJim Jagielski             break;
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski         case joinBevel:
240*b1cdbd2cSJim Jagielski             aStr += "bevel";
241*b1cdbd2cSJim Jagielski             break;
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski         case joinNone:
244*b1cdbd2cSJim Jagielski             aStr += "none";
245*b1cdbd2cSJim Jagielski             break;
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski         default:
248*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicStroke::toString missing join type");
249*b1cdbd2cSJim Jagielski             break;
250*b1cdbd2cSJim Jagielski     }
251*b1cdbd2cSJim Jagielski     aStr += " ";
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski     if( maStartArrow.Count() )
254*b1cdbd2cSJim Jagielski     {
255*b1cdbd2cSJim Jagielski         aStr += "start: ";
256*b1cdbd2cSJim Jagielski         aStr += polyPolyToString( maStartArrow );
257*b1cdbd2cSJim Jagielski         aStr += " ";
258*b1cdbd2cSJim Jagielski     }
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski     if( maEndArrow.Count() )
261*b1cdbd2cSJim Jagielski     {
262*b1cdbd2cSJim Jagielski         aStr += "end: ";
263*b1cdbd2cSJim Jagielski         aStr += polyPolyToString( maEndArrow );
264*b1cdbd2cSJim Jagielski         aStr += " ";
265*b1cdbd2cSJim Jagielski     }
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     aStr += dashToString( maDashArray );
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski     return aStr;
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski 
setPath(const Polygon & rPoly)272*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setPath( const Polygon& rPoly )
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski     maPath = rPoly;
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
setStartArrow(const PolyPolygon & rPoly)277*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setStartArrow( const PolyPolygon& rPoly )
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski     maStartArrow = rPoly;
280*b1cdbd2cSJim Jagielski }
281*b1cdbd2cSJim Jagielski 
setEndArrow(const PolyPolygon & rPoly)282*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setEndArrow( const PolyPolygon& rPoly )
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski     maEndArrow = rPoly;
285*b1cdbd2cSJim Jagielski }
286*b1cdbd2cSJim Jagielski 
setTransparency(double fTrans)287*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setTransparency( double fTrans )
288*b1cdbd2cSJim Jagielski {
289*b1cdbd2cSJim Jagielski     mfTransparency = fTrans;
290*b1cdbd2cSJim Jagielski }
291*b1cdbd2cSJim Jagielski 
setStrokeWidth(double fWidth)292*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setStrokeWidth( double fWidth )
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski     mfStrokeWidth = fWidth;
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski 
setCapType(CapType eType)297*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setCapType( CapType eType )
298*b1cdbd2cSJim Jagielski {
299*b1cdbd2cSJim Jagielski     maCapType = eType;
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski 
setJoinType(JoinType eType)302*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setJoinType( JoinType eType )
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski     maJoinType = eType;
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski 
setMiterLimit(double fMiterLimit)307*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setMiterLimit( double fMiterLimit )
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski     mfMiterLimit = fMiterLimit;
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski 
setDashArray(const DashArray & rDashArray)312*b1cdbd2cSJim Jagielski void SvtGraphicStroke::setDashArray( const DashArray& rDashArray )
313*b1cdbd2cSJim Jagielski {
314*b1cdbd2cSJim Jagielski     maDashArray = rDashArray;
315*b1cdbd2cSJim Jagielski }
316*b1cdbd2cSJim Jagielski 
operator <<(SvStream & rOStm,const SvtGraphicStroke & rClass)317*b1cdbd2cSJim Jagielski SvStream& operator<<( SvStream& rOStm, const SvtGraphicStroke& rClass )
318*b1cdbd2cSJim Jagielski {
319*b1cdbd2cSJim Jagielski 	VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     rClass.maPath.Write( rOStm );
322*b1cdbd2cSJim Jagielski     rClass.maStartArrow.Write( rOStm );
323*b1cdbd2cSJim Jagielski     rClass.maEndArrow.Write( rOStm );
324*b1cdbd2cSJim Jagielski     rOStm << rClass.mfTransparency;
325*b1cdbd2cSJim Jagielski     rOStm << rClass.mfStrokeWidth;
326*b1cdbd2cSJim Jagielski     sal_uInt16 nTmp = sal::static_int_cast<sal_uInt16>( rClass.maCapType );
327*b1cdbd2cSJim Jagielski     rOStm << nTmp;
328*b1cdbd2cSJim Jagielski     nTmp = sal::static_int_cast<sal_uInt16>( rClass.maJoinType );
329*b1cdbd2cSJim Jagielski     rOStm << nTmp;
330*b1cdbd2cSJim Jagielski     rOStm << rClass.mfMiterLimit;
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski     rOStm << static_cast<sal_uInt32>(rClass.maDashArray.size());
333*b1cdbd2cSJim Jagielski     size_t i;
334*b1cdbd2cSJim Jagielski     for(i=0; i<rClass.maDashArray.size(); ++i)
335*b1cdbd2cSJim Jagielski         rOStm << rClass.maDashArray[i];
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 	return rOStm;
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski 
operator >>(SvStream & rIStm,SvtGraphicStroke & rClass)340*b1cdbd2cSJim Jagielski SvStream& operator>>( SvStream& rIStm, SvtGraphicStroke& rClass )
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski 	VersionCompat aCompat( rIStm, STREAM_READ );
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski     rClass.maPath.Read( rIStm );
345*b1cdbd2cSJim Jagielski     rClass.maStartArrow.Read( rIStm );
346*b1cdbd2cSJim Jagielski     rClass.maEndArrow.Read( rIStm );
347*b1cdbd2cSJim Jagielski     rIStm >> rClass.mfTransparency;
348*b1cdbd2cSJim Jagielski     rIStm >> rClass.mfStrokeWidth;
349*b1cdbd2cSJim Jagielski     sal_uInt16 nTmp;
350*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
351*b1cdbd2cSJim Jagielski     rClass.maCapType = SvtGraphicStroke::CapType(nTmp);
352*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
353*b1cdbd2cSJim Jagielski     rClass.maJoinType = SvtGraphicStroke::JoinType(nTmp);
354*b1cdbd2cSJim Jagielski     rIStm >> rClass.mfMiterLimit;
355*b1cdbd2cSJim Jagielski 
356*b1cdbd2cSJim Jagielski     sal_uInt32 nSize;
357*b1cdbd2cSJim Jagielski     rIStm >> nSize;
358*b1cdbd2cSJim Jagielski     rClass.maDashArray.resize(nSize);
359*b1cdbd2cSJim Jagielski     size_t i;
360*b1cdbd2cSJim Jagielski     for(i=0; i<rClass.maDashArray.size(); ++i)
361*b1cdbd2cSJim Jagielski         rIStm >> rClass.maDashArray[i];
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski 	return rIStm;
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////
368*b1cdbd2cSJim Jagielski 
SvtGraphicFill()369*b1cdbd2cSJim Jagielski SvtGraphicFill::SvtGraphicFill() :
370*b1cdbd2cSJim Jagielski     maPath(),
371*b1cdbd2cSJim Jagielski     maFillColor( COL_BLACK ),
372*b1cdbd2cSJim Jagielski     mfTransparency(),
373*b1cdbd2cSJim Jagielski     maFillRule(),
374*b1cdbd2cSJim Jagielski     maFillType(),
375*b1cdbd2cSJim Jagielski     maFillTransform(),
376*b1cdbd2cSJim Jagielski     maHatchType(),
377*b1cdbd2cSJim Jagielski     maHatchColor( COL_BLACK ),
378*b1cdbd2cSJim Jagielski     maGradientType(),
379*b1cdbd2cSJim Jagielski     maGradient1stColor( COL_BLACK ),
380*b1cdbd2cSJim Jagielski     maGradient2ndColor( COL_BLACK ),
381*b1cdbd2cSJim Jagielski     maGradientStepCount( gradientStepsInfinite ),
382*b1cdbd2cSJim Jagielski     maFillGraphic()
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
SvtGraphicFill(const PolyPolygon & rPath,Color aFillColor,double fTransparency,FillRule aFillRule,FillType aFillType,const Transform & aFillTransform,bool bTiling,HatchType aHatchType,Color aHatchColor,GradientType aGradientType,Color aGradient1stColor,Color aGradient2ndColor,int aGradientStepCount,const Graphic & aFillGraphic)386*b1cdbd2cSJim Jagielski SvtGraphicFill::SvtGraphicFill( const PolyPolygon& 	rPath,
387*b1cdbd2cSJim Jagielski                                 Color				aFillColor,
388*b1cdbd2cSJim Jagielski                                 double				fTransparency,
389*b1cdbd2cSJim Jagielski                                 FillRule			aFillRule,
390*b1cdbd2cSJim Jagielski                                 FillType			aFillType,
391*b1cdbd2cSJim Jagielski                                 const Transform&	aFillTransform,
392*b1cdbd2cSJim Jagielski                                 bool				bTiling,
393*b1cdbd2cSJim Jagielski                                 HatchType			aHatchType,
394*b1cdbd2cSJim Jagielski                                 Color				aHatchColor,
395*b1cdbd2cSJim Jagielski                                 GradientType		aGradientType,
396*b1cdbd2cSJim Jagielski                                 Color				aGradient1stColor,
397*b1cdbd2cSJim Jagielski                                 Color				aGradient2ndColor,
398*b1cdbd2cSJim Jagielski                                 int					aGradientStepCount,
399*b1cdbd2cSJim Jagielski                                 const Graphic&		aFillGraphic ) :
400*b1cdbd2cSJim Jagielski     maPath( rPath ),
401*b1cdbd2cSJim Jagielski     maFillColor( aFillColor ),
402*b1cdbd2cSJim Jagielski     mfTransparency( fTransparency ),
403*b1cdbd2cSJim Jagielski     maFillRule( aFillRule ),
404*b1cdbd2cSJim Jagielski     maFillType( aFillType ),
405*b1cdbd2cSJim Jagielski     maFillTransform( aFillTransform ),
406*b1cdbd2cSJim Jagielski     mbTiling( bTiling ),
407*b1cdbd2cSJim Jagielski     maHatchType( aHatchType ),
408*b1cdbd2cSJim Jagielski     maHatchColor( aHatchColor ),
409*b1cdbd2cSJim Jagielski     maGradientType( aGradientType ),
410*b1cdbd2cSJim Jagielski     maGradient1stColor( aGradient1stColor ),
411*b1cdbd2cSJim Jagielski     maGradient2ndColor( aGradient2ndColor ),
412*b1cdbd2cSJim Jagielski     maGradientStepCount( aGradientStepCount ),
413*b1cdbd2cSJim Jagielski     maFillGraphic( aFillGraphic )
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski 
getPath(PolyPolygon & rPath) const417*b1cdbd2cSJim Jagielski void SvtGraphicFill::getPath( PolyPolygon& rPath ) const
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski     rPath = maPath;
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski 
getFillColor() const422*b1cdbd2cSJim Jagielski Color SvtGraphicFill::getFillColor() const
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski     return maFillColor;
425*b1cdbd2cSJim Jagielski }
426*b1cdbd2cSJim Jagielski 
getTransparency() const427*b1cdbd2cSJim Jagielski double SvtGraphicFill::getTransparency() const
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski     return mfTransparency;
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski 
getFillRule() const432*b1cdbd2cSJim Jagielski SvtGraphicFill::FillRule SvtGraphicFill::getFillRule() const
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski     return maFillRule;
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski 
getFillType() const437*b1cdbd2cSJim Jagielski SvtGraphicFill::FillType SvtGraphicFill::getFillType() const
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski     return maFillType;
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski 
getTransform(Transform & rTrans) const442*b1cdbd2cSJim Jagielski void SvtGraphicFill::getTransform( Transform& rTrans ) const
443*b1cdbd2cSJim Jagielski {
444*b1cdbd2cSJim Jagielski     rTrans = maFillTransform;
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski 
IsTiling() const447*b1cdbd2cSJim Jagielski bool SvtGraphicFill::IsTiling() const
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski     return mbTiling;
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski 
isTiling() const452*b1cdbd2cSJim Jagielski bool SvtGraphicFill::isTiling() const
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski     return mbTiling;
455*b1cdbd2cSJim Jagielski }
456*b1cdbd2cSJim Jagielski 
getHatchType() const457*b1cdbd2cSJim Jagielski SvtGraphicFill::HatchType SvtGraphicFill::getHatchType() const
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski     return maHatchType;
460*b1cdbd2cSJim Jagielski }
461*b1cdbd2cSJim Jagielski 
getHatchColor() const462*b1cdbd2cSJim Jagielski Color SvtGraphicFill::getHatchColor() const
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski     return maHatchColor;
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
getGradientType() const467*b1cdbd2cSJim Jagielski SvtGraphicFill::GradientType SvtGraphicFill::getGradientType() const
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski     return maGradientType;
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski 
getGradient1stColor() const472*b1cdbd2cSJim Jagielski Color SvtGraphicFill::getGradient1stColor() const
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski     return maGradient1stColor;
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski 
getGradient2ndColor() const477*b1cdbd2cSJim Jagielski Color SvtGraphicFill::getGradient2ndColor() const
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski     return maGradient2ndColor;
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski 
getGradientStepCount() const482*b1cdbd2cSJim Jagielski int SvtGraphicFill::getGradientStepCount() const
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski     return maGradientStepCount;
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski 
getGraphic(Graphic & rGraphic) const487*b1cdbd2cSJim Jagielski void SvtGraphicFill::getGraphic( Graphic& rGraphic ) const
488*b1cdbd2cSJim Jagielski {
489*b1cdbd2cSJim Jagielski     rGraphic = maFillGraphic;
490*b1cdbd2cSJim Jagielski }
491*b1cdbd2cSJim Jagielski 
toString() const492*b1cdbd2cSJim Jagielski ::rtl::OString SvtGraphicFill::toString() const
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski     ::rtl::OString aStr;
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski     aStr += polyPolyToString( maPath );
497*b1cdbd2cSJim Jagielski     aStr += "fill";
498*b1cdbd2cSJim Jagielski     aStr += colorToString( getFillColor() );
499*b1cdbd2cSJim Jagielski     aStr += " trans: ";
500*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( static_cast< double >(getTransparency()) );
501*b1cdbd2cSJim Jagielski     aStr += " rule: ";
502*b1cdbd2cSJim Jagielski     switch( getFillRule() )
503*b1cdbd2cSJim Jagielski     {
504*b1cdbd2cSJim Jagielski         case fillNonZero:
505*b1cdbd2cSJim Jagielski             aStr += "nonzero";
506*b1cdbd2cSJim Jagielski             break;
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski         case fillEvenOdd:
509*b1cdbd2cSJim Jagielski             aStr += "evenodd";
510*b1cdbd2cSJim Jagielski             break;
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski         default:
513*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicFill::toString missing fill rule");
514*b1cdbd2cSJim Jagielski             break;
515*b1cdbd2cSJim Jagielski     }
516*b1cdbd2cSJim Jagielski     aStr += " type: ";
517*b1cdbd2cSJim Jagielski     switch( getFillType() )
518*b1cdbd2cSJim Jagielski     {
519*b1cdbd2cSJim Jagielski         case fillSolid:
520*b1cdbd2cSJim Jagielski             aStr += "solid";
521*b1cdbd2cSJim Jagielski             break;
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski         case fillGradient:
524*b1cdbd2cSJim Jagielski             aStr += "gradient";
525*b1cdbd2cSJim Jagielski             break;
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski         case fillHatch:
528*b1cdbd2cSJim Jagielski             aStr += "hatch";
529*b1cdbd2cSJim Jagielski             break;
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski         case fillTexture:
532*b1cdbd2cSJim Jagielski             aStr += "bitmap";
533*b1cdbd2cSJim Jagielski             break;
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski         default:
536*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicStroke::toString missing fill type");
537*b1cdbd2cSJim Jagielski             break;
538*b1cdbd2cSJim Jagielski     }
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski     aStr += " transform: [ ";
541*b1cdbd2cSJim Jagielski     int i;
542*b1cdbd2cSJim Jagielski     for(i=0; i<Transform::MatrixSize; ++i)
543*b1cdbd2cSJim Jagielski         aStr += ::rtl::OString::valueOf( maFillTransform.matrix[i] );
544*b1cdbd2cSJim Jagielski     aStr += " ] ";
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski     aStr += " hatch: ";
547*b1cdbd2cSJim Jagielski     switch( getHatchType() )
548*b1cdbd2cSJim Jagielski     {
549*b1cdbd2cSJim Jagielski         case hatchSingle:
550*b1cdbd2cSJim Jagielski             aStr += "single";
551*b1cdbd2cSJim Jagielski             break;
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski         case hatchDouble:
554*b1cdbd2cSJim Jagielski             aStr += "double";
555*b1cdbd2cSJim Jagielski             break;
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski         case hatchTriple:
558*b1cdbd2cSJim Jagielski             aStr += "triple";
559*b1cdbd2cSJim Jagielski             break;
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski         default:
562*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicStroke::toString missing hatch type");
563*b1cdbd2cSJim Jagielski             break;
564*b1cdbd2cSJim Jagielski     }
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski     aStr += " hatch";
567*b1cdbd2cSJim Jagielski     aStr += colorToString( getHatchColor() );
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski     aStr += " gradient: ";
570*b1cdbd2cSJim Jagielski     switch( getGradientType() )
571*b1cdbd2cSJim Jagielski     {
572*b1cdbd2cSJim Jagielski         case gradientLinear:
573*b1cdbd2cSJim Jagielski             aStr += "linear";
574*b1cdbd2cSJim Jagielski             break;
575*b1cdbd2cSJim Jagielski 
576*b1cdbd2cSJim Jagielski         case gradientRadial:
577*b1cdbd2cSJim Jagielski             aStr += "radial";
578*b1cdbd2cSJim Jagielski             break;
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski         case gradientRectangular:
581*b1cdbd2cSJim Jagielski             aStr += "rectangular";
582*b1cdbd2cSJim Jagielski             break;
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski         default:
585*b1cdbd2cSJim Jagielski             DBG_ERROR( "SvtGraphicStroke::toString missing gradient type");
586*b1cdbd2cSJim Jagielski             break;
587*b1cdbd2cSJim Jagielski     }
588*b1cdbd2cSJim Jagielski 
589*b1cdbd2cSJim Jagielski     aStr += " grad1st";
590*b1cdbd2cSJim Jagielski     aStr += colorToString( getGradient1stColor() );
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski     aStr += " grad2nd";
593*b1cdbd2cSJim Jagielski     aStr += colorToString( getGradient2ndColor() );
594*b1cdbd2cSJim Jagielski 
595*b1cdbd2cSJim Jagielski     aStr += " gradstep";
596*b1cdbd2cSJim Jagielski     aStr += ::rtl::OString::valueOf( (sal_Int32)getGradientStepCount() );
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski     if( maFillGraphic.GetType() != GRAPHIC_NONE )
599*b1cdbd2cSJim Jagielski     {
600*b1cdbd2cSJim Jagielski         aStr += " fillgraphic: ";
601*b1cdbd2cSJim Jagielski         switch( maFillGraphic.GetType() )
602*b1cdbd2cSJim Jagielski         {
603*b1cdbd2cSJim Jagielski             case GRAPHIC_BITMAP:
604*b1cdbd2cSJim Jagielski                 aStr += "bitmap";
605*b1cdbd2cSJim Jagielski                 break;
606*b1cdbd2cSJim Jagielski 
607*b1cdbd2cSJim Jagielski             case GRAPHIC_GDIMETAFILE:
608*b1cdbd2cSJim Jagielski                 aStr += "metafile";
609*b1cdbd2cSJim Jagielski                 break;
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski             case GRAPHIC_DEFAULT:
612*b1cdbd2cSJim Jagielski                 aStr += "default";
613*b1cdbd2cSJim Jagielski                 break;
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski             default:
616*b1cdbd2cSJim Jagielski                 DBG_ERROR( "SvtGraphicStroke::toString missing graphic type");
617*b1cdbd2cSJim Jagielski                 break;
618*b1cdbd2cSJim Jagielski         }
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski         aStr += " of ";
621*b1cdbd2cSJim Jagielski         aStr += ::rtl::OString::valueOf( static_cast< sal_Int32 >(maFillGraphic.GetSizeBytes()) );
622*b1cdbd2cSJim Jagielski         aStr += " bytes";
623*b1cdbd2cSJim Jagielski     }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski     return aStr;
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski 
setPath(const PolyPolygon & rPath)628*b1cdbd2cSJim Jagielski void SvtGraphicFill::setPath( const PolyPolygon& rPath )
629*b1cdbd2cSJim Jagielski {
630*b1cdbd2cSJim Jagielski     maPath = rPath;
631*b1cdbd2cSJim Jagielski }
632*b1cdbd2cSJim Jagielski 
setFillColor(Color aFillColor)633*b1cdbd2cSJim Jagielski void SvtGraphicFill::setFillColor( Color aFillColor )
634*b1cdbd2cSJim Jagielski {
635*b1cdbd2cSJim Jagielski     maFillColor = aFillColor;
636*b1cdbd2cSJim Jagielski }
637*b1cdbd2cSJim Jagielski 
setTransparency(double fTransparency)638*b1cdbd2cSJim Jagielski void SvtGraphicFill::setTransparency( double fTransparency )
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski     mfTransparency = fTransparency;
641*b1cdbd2cSJim Jagielski }
642*b1cdbd2cSJim Jagielski 
setFillRule(FillRule aFillRule)643*b1cdbd2cSJim Jagielski void SvtGraphicFill::setFillRule( FillRule aFillRule )
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski     maFillRule = aFillRule;
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski 
setFillType(FillType aFillType)648*b1cdbd2cSJim Jagielski void SvtGraphicFill::setFillType( FillType aFillType )
649*b1cdbd2cSJim Jagielski {
650*b1cdbd2cSJim Jagielski     maFillType = aFillType;
651*b1cdbd2cSJim Jagielski }
652*b1cdbd2cSJim Jagielski 
setTransform(const Transform & rTransform)653*b1cdbd2cSJim Jagielski void SvtGraphicFill::setTransform( const Transform& rTransform )
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski     maFillTransform = rTransform;
656*b1cdbd2cSJim Jagielski }
657*b1cdbd2cSJim Jagielski 
setTiling(bool bTiling)658*b1cdbd2cSJim Jagielski void SvtGraphicFill::setTiling( bool bTiling )
659*b1cdbd2cSJim Jagielski {
660*b1cdbd2cSJim Jagielski     mbTiling = bTiling;
661*b1cdbd2cSJim Jagielski }
662*b1cdbd2cSJim Jagielski 
setHatchType(HatchType aHatchType)663*b1cdbd2cSJim Jagielski void SvtGraphicFill::setHatchType( HatchType aHatchType )
664*b1cdbd2cSJim Jagielski {
665*b1cdbd2cSJim Jagielski     maHatchType = aHatchType;
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski 
setHatchColor(Color aHatchColor)668*b1cdbd2cSJim Jagielski void SvtGraphicFill::setHatchColor( Color aHatchColor )
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski     maHatchColor = aHatchColor;
671*b1cdbd2cSJim Jagielski }
672*b1cdbd2cSJim Jagielski 
setGradientType(GradientType aGradType)673*b1cdbd2cSJim Jagielski void SvtGraphicFill::setGradientType( GradientType aGradType )
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski     maGradientType = aGradType;
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski 
setGradient1stColor(Color aColor)678*b1cdbd2cSJim Jagielski void SvtGraphicFill::setGradient1stColor( Color aColor )
679*b1cdbd2cSJim Jagielski {
680*b1cdbd2cSJim Jagielski     maGradient1stColor = aColor;
681*b1cdbd2cSJim Jagielski }
682*b1cdbd2cSJim Jagielski 
setGradient2ndColor(Color aColor)683*b1cdbd2cSJim Jagielski void SvtGraphicFill::setGradient2ndColor( Color aColor )
684*b1cdbd2cSJim Jagielski {
685*b1cdbd2cSJim Jagielski     maGradient2ndColor = aColor;
686*b1cdbd2cSJim Jagielski }
687*b1cdbd2cSJim Jagielski 
setGradientStepCount(int aCount)688*b1cdbd2cSJim Jagielski void SvtGraphicFill::setGradientStepCount( int aCount )
689*b1cdbd2cSJim Jagielski {
690*b1cdbd2cSJim Jagielski     maGradientStepCount = aCount;
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski 
setGraphic(const Graphic & rGraphic)693*b1cdbd2cSJim Jagielski void SvtGraphicFill::setGraphic( const Graphic& rGraphic )
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski     maFillGraphic = rGraphic;
696*b1cdbd2cSJim Jagielski }
697*b1cdbd2cSJim Jagielski 
operator <<(SvStream & rOStm,const SvtGraphicFill & rClass)698*b1cdbd2cSJim Jagielski SvStream& operator<<( SvStream& rOStm, const SvtGraphicFill& rClass )
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski 	VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski     rClass.maPath.Write( rOStm );
703*b1cdbd2cSJim Jagielski     rOStm << rClass.maFillColor;
704*b1cdbd2cSJim Jagielski     rOStm << rClass.mfTransparency;
705*b1cdbd2cSJim Jagielski     sal_uInt16 nTmp = sal::static_int_cast<sal_uInt16>( rClass.maFillRule );
706*b1cdbd2cSJim Jagielski     rOStm << nTmp;
707*b1cdbd2cSJim Jagielski     nTmp = sal::static_int_cast<sal_uInt16>( rClass.maFillType );
708*b1cdbd2cSJim Jagielski     rOStm << nTmp;
709*b1cdbd2cSJim Jagielski     int i;
710*b1cdbd2cSJim Jagielski     for(i=0; i<SvtGraphicFill::Transform::MatrixSize; ++i)
711*b1cdbd2cSJim Jagielski         rOStm << rClass.maFillTransform.matrix[i];
712*b1cdbd2cSJim Jagielski     nTmp = rClass.mbTiling;
713*b1cdbd2cSJim Jagielski     rOStm << nTmp;
714*b1cdbd2cSJim Jagielski     nTmp = sal::static_int_cast<sal_uInt16>( rClass.maHatchType );
715*b1cdbd2cSJim Jagielski     rOStm << nTmp;
716*b1cdbd2cSJim Jagielski     rOStm << rClass.maHatchColor;
717*b1cdbd2cSJim Jagielski     nTmp = sal::static_int_cast<sal_uInt16>( rClass.maGradientType );
718*b1cdbd2cSJim Jagielski     rOStm << nTmp;
719*b1cdbd2cSJim Jagielski     rOStm << rClass.maGradient1stColor;
720*b1cdbd2cSJim Jagielski     rOStm << rClass.maGradient2ndColor;
721*b1cdbd2cSJim Jagielski     rOStm << rClass.maGradientStepCount;
722*b1cdbd2cSJim Jagielski     rOStm << rClass.maFillGraphic;
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski 	return rOStm;
725*b1cdbd2cSJim Jagielski }
726*b1cdbd2cSJim Jagielski 
operator >>(SvStream & rIStm,SvtGraphicFill & rClass)727*b1cdbd2cSJim Jagielski SvStream& operator>>( SvStream& rIStm, SvtGraphicFill& rClass )
728*b1cdbd2cSJim Jagielski {
729*b1cdbd2cSJim Jagielski 	VersionCompat aCompat( rIStm, STREAM_READ );
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski     rClass.maPath.Read( rIStm );
732*b1cdbd2cSJim Jagielski     rIStm >> rClass.maFillColor;
733*b1cdbd2cSJim Jagielski     rIStm >> rClass.mfTransparency;
734*b1cdbd2cSJim Jagielski     sal_uInt16 nTmp;
735*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
736*b1cdbd2cSJim Jagielski     rClass.maFillRule = SvtGraphicFill::FillRule( nTmp );
737*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
738*b1cdbd2cSJim Jagielski     rClass.maFillType = SvtGraphicFill::FillType( nTmp );
739*b1cdbd2cSJim Jagielski     int i;
740*b1cdbd2cSJim Jagielski     for(i=0; i<SvtGraphicFill::Transform::MatrixSize; ++i)
741*b1cdbd2cSJim Jagielski         rIStm >> rClass.maFillTransform.matrix[i];
742*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
743*b1cdbd2cSJim Jagielski     rClass.mbTiling = nTmp;
744*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
745*b1cdbd2cSJim Jagielski     rClass.maHatchType = SvtGraphicFill::HatchType( nTmp );
746*b1cdbd2cSJim Jagielski     rIStm >> rClass.maHatchColor;
747*b1cdbd2cSJim Jagielski     rIStm >> nTmp;
748*b1cdbd2cSJim Jagielski     rClass.maGradientType = SvtGraphicFill::GradientType( nTmp );
749*b1cdbd2cSJim Jagielski     rIStm >> rClass.maGradient1stColor;
750*b1cdbd2cSJim Jagielski     rIStm >> rClass.maGradient2ndColor;
751*b1cdbd2cSJim Jagielski     rIStm >> rClass.maGradientStepCount;
752*b1cdbd2cSJim Jagielski     rIStm >> rClass.maFillGraphic;
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski 	return rIStm;
755*b1cdbd2cSJim Jagielski }
756