xref: /aoo41x/main/vcl/source/gdi/hatch.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_vcl.hxx"
30*cdf0e10cSrcweir #include <tools/stream.hxx>
31*cdf0e10cSrcweir #include <tools/vcompat.hxx>
32*cdf0e10cSrcweir #include <tools/debug.hxx>
33*cdf0e10cSrcweir #ifndef _SV_HATCX_HXX
34*cdf0e10cSrcweir #include <vcl/hatch.hxx>
35*cdf0e10cSrcweir #endif
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir DBG_NAME( Hatch )
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir // --------------
40*cdf0e10cSrcweir // - ImplHatch -
41*cdf0e10cSrcweir // --------------
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir ImplHatch::ImplHatch() :
44*cdf0e10cSrcweir     mnRefCount	( 1 ),
45*cdf0e10cSrcweir     maColor		( COL_BLACK ),
46*cdf0e10cSrcweir     meStyle		( HATCH_SINGLE ),
47*cdf0e10cSrcweir 	mnDistance	( 1 ),
48*cdf0e10cSrcweir     mnAngle		( 0 )
49*cdf0e10cSrcweir {
50*cdf0e10cSrcweir }
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir // -----------------------------------------------------------------------
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir ImplHatch::ImplHatch( const ImplHatch& rImplHatch ) :
55*cdf0e10cSrcweir 	mnRefCount	( 1 ),
56*cdf0e10cSrcweir     maColor		( rImplHatch.maColor ),
57*cdf0e10cSrcweir     meStyle		( rImplHatch.meStyle ),
58*cdf0e10cSrcweir 	mnDistance	( rImplHatch.mnDistance ),
59*cdf0e10cSrcweir     mnAngle		( rImplHatch.mnAngle )
60*cdf0e10cSrcweir {
61*cdf0e10cSrcweir }
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir // ---------
64*cdf0e10cSrcweir // - Hatch -
65*cdf0e10cSrcweir // ---------
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir Hatch::Hatch()
68*cdf0e10cSrcweir {
69*cdf0e10cSrcweir     DBG_CTOR( Hatch, NULL );
70*cdf0e10cSrcweir     mpImplHatch = new ImplHatch;
71*cdf0e10cSrcweir }
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir // -----------------------------------------------------------------------
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir Hatch::Hatch( const Hatch& rHatch )
76*cdf0e10cSrcweir {
77*cdf0e10cSrcweir     DBG_CTOR( Hatch, NULL );
78*cdf0e10cSrcweir     DBG_CHKOBJ( &rHatch, Hatch, NULL );
79*cdf0e10cSrcweir     mpImplHatch = rHatch.mpImplHatch;
80*cdf0e10cSrcweir     mpImplHatch->mnRefCount++;
81*cdf0e10cSrcweir }
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir // -----------------------------------------------------------------------
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir Hatch::Hatch( HatchStyle eStyle, const Color& rColor,
86*cdf0e10cSrcweir 			  long nDistance, sal_uInt16 nAngle10 )
87*cdf0e10cSrcweir {
88*cdf0e10cSrcweir     DBG_CTOR( Hatch, NULL );
89*cdf0e10cSrcweir     mpImplHatch = new ImplHatch;
90*cdf0e10cSrcweir     mpImplHatch->maColor = rColor;
91*cdf0e10cSrcweir     mpImplHatch->meStyle = eStyle;
92*cdf0e10cSrcweir     mpImplHatch->mnDistance = nDistance;
93*cdf0e10cSrcweir     mpImplHatch->mnAngle = nAngle10;
94*cdf0e10cSrcweir }
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir // -----------------------------------------------------------------------
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir Hatch::~Hatch()
99*cdf0e10cSrcweir {
100*cdf0e10cSrcweir     DBG_DTOR( Hatch, NULL );
101*cdf0e10cSrcweir     if( !( --mpImplHatch->mnRefCount ) )
102*cdf0e10cSrcweir         delete mpImplHatch;
103*cdf0e10cSrcweir }
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir // -----------------------------------------------------------------------
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir Hatch& Hatch::operator=( const Hatch& rHatch )
108*cdf0e10cSrcweir {
109*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
110*cdf0e10cSrcweir     DBG_CHKOBJ( &rHatch, Hatch, NULL );
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir     rHatch.mpImplHatch->mnRefCount++;
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir     if( !( --mpImplHatch->mnRefCount ) )
115*cdf0e10cSrcweir         delete mpImplHatch;
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir 	mpImplHatch = rHatch.mpImplHatch;
118*cdf0e10cSrcweir     return *this;
119*cdf0e10cSrcweir }
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir // -----------------------------------------------------------------------
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir sal_Bool Hatch::operator==( const Hatch& rHatch ) const
124*cdf0e10cSrcweir {
125*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
126*cdf0e10cSrcweir     DBG_CHKOBJ( &rHatch, Hatch, NULL );
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir     return( mpImplHatch == rHatch.mpImplHatch ||
129*cdf0e10cSrcweir 			( mpImplHatch->maColor == rHatch.mpImplHatch->maColor &&
130*cdf0e10cSrcweir 			  mpImplHatch->meStyle == rHatch.mpImplHatch->meStyle &&
131*cdf0e10cSrcweir 			  mpImplHatch->mnDistance == rHatch.mpImplHatch->mnDistance &&
132*cdf0e10cSrcweir 			  mpImplHatch->mnAngle == rHatch.mpImplHatch->mnAngle ) );
133*cdf0e10cSrcweir }
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir // -----------------------------------------------------------------------
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir void Hatch::ImplMakeUnique()
138*cdf0e10cSrcweir {
139*cdf0e10cSrcweir     if( mpImplHatch->mnRefCount != 1 )
140*cdf0e10cSrcweir 	{
141*cdf0e10cSrcweir 		if( mpImplHatch->mnRefCount )
142*cdf0e10cSrcweir 			mpImplHatch->mnRefCount--;
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir         mpImplHatch = new ImplHatch( *mpImplHatch );
145*cdf0e10cSrcweir 	}
146*cdf0e10cSrcweir }
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir // -----------------------------------------------------------------------
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir void Hatch::SetStyle( HatchStyle eStyle )
151*cdf0e10cSrcweir {
152*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
153*cdf0e10cSrcweir     ImplMakeUnique();
154*cdf0e10cSrcweir     mpImplHatch->meStyle = eStyle;
155*cdf0e10cSrcweir }
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir // -----------------------------------------------------------------------
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir void Hatch::SetColor( const Color& rColor )
160*cdf0e10cSrcweir {
161*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
162*cdf0e10cSrcweir     ImplMakeUnique();
163*cdf0e10cSrcweir     mpImplHatch->maColor = rColor;
164*cdf0e10cSrcweir }
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir // -----------------------------------------------------------------------
167*cdf0e10cSrcweir 
168*cdf0e10cSrcweir void Hatch::SetDistance( long nDistance )
169*cdf0e10cSrcweir {
170*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
171*cdf0e10cSrcweir     ImplMakeUnique();
172*cdf0e10cSrcweir     mpImplHatch->mnDistance = nDistance;
173*cdf0e10cSrcweir }
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir // -----------------------------------------------------------------------
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir void Hatch::SetAngle( sal_uInt16 nAngle10 )
178*cdf0e10cSrcweir {
179*cdf0e10cSrcweir     DBG_CHKTHIS( Hatch, NULL );
180*cdf0e10cSrcweir     ImplMakeUnique();
181*cdf0e10cSrcweir     mpImplHatch->mnAngle = nAngle10;
182*cdf0e10cSrcweir }
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir // -----------------------------------------------------------------------
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, ImplHatch& rImplHatch )
187*cdf0e10cSrcweir {
188*cdf0e10cSrcweir     VersionCompat	aCompat( rIStm, STREAM_READ );
189*cdf0e10cSrcweir     sal_uInt16			nTmp16;
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir     rIStm >> nTmp16; rImplHatch.meStyle = (HatchStyle) nTmp16;
192*cdf0e10cSrcweir     rIStm >> rImplHatch.maColor >> rImplHatch.mnDistance >> rImplHatch.mnAngle;
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir     return rIStm;
195*cdf0e10cSrcweir }
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir // -----------------------------------------------------------------------
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const ImplHatch& rImplHatch )
200*cdf0e10cSrcweir {
201*cdf0e10cSrcweir     VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir     rOStm << (sal_uInt16) rImplHatch.meStyle << rImplHatch.maColor;
204*cdf0e10cSrcweir 	rOStm << rImplHatch.mnDistance << rImplHatch.mnAngle;
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir     return rOStm;
207*cdf0e10cSrcweir }
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir // -----------------------------------------------------------------------
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, Hatch& rHatch )
212*cdf0e10cSrcweir {
213*cdf0e10cSrcweir     rHatch.ImplMakeUnique();
214*cdf0e10cSrcweir     return( rIStm >> *rHatch.mpImplHatch );
215*cdf0e10cSrcweir }
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir // -----------------------------------------------------------------------
218*cdf0e10cSrcweir 
219*cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const Hatch& rHatch )
220*cdf0e10cSrcweir {
221*cdf0e10cSrcweir     return( rOStm << *rHatch.mpImplHatch );
222*cdf0e10cSrcweir }
223