1*9f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*9f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*9f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*9f62ea84SAndrew Rist * distributed with this work for additional information
6*9f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*9f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*9f62ea84SAndrew Rist * "License"); you may not use this file except in compliance
9*9f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at
10*9f62ea84SAndrew Rist *
11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*9f62ea84SAndrew Rist *
13*9f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*9f62ea84SAndrew Rist * software distributed under the License is distributed on an
15*9f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9f62ea84SAndrew Rist * KIND, either express or implied. See the License for the
17*9f62ea84SAndrew Rist * specific language governing permissions and limitations
18*9f62ea84SAndrew Rist * under the License.
19*9f62ea84SAndrew Rist *
20*9f62ea84SAndrew Rist *************************************************************/
21*9f62ea84SAndrew Rist
22*9f62ea84SAndrew 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 #ifndef _SV_HATCX_HXX
30cdf0e10cSrcweir #include <vcl/hatch.hxx>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir
DBG_NAME(Hatch)33cdf0e10cSrcweir DBG_NAME( Hatch )
34cdf0e10cSrcweir
35cdf0e10cSrcweir // --------------
36cdf0e10cSrcweir // - ImplHatch -
37cdf0e10cSrcweir // --------------
38cdf0e10cSrcweir
39cdf0e10cSrcweir ImplHatch::ImplHatch() :
40cdf0e10cSrcweir mnRefCount ( 1 ),
41cdf0e10cSrcweir maColor ( COL_BLACK ),
42cdf0e10cSrcweir meStyle ( HATCH_SINGLE ),
43cdf0e10cSrcweir mnDistance ( 1 ),
44cdf0e10cSrcweir mnAngle ( 0 )
45cdf0e10cSrcweir {
46cdf0e10cSrcweir }
47cdf0e10cSrcweir
48cdf0e10cSrcweir // -----------------------------------------------------------------------
49cdf0e10cSrcweir
ImplHatch(const ImplHatch & rImplHatch)50cdf0e10cSrcweir ImplHatch::ImplHatch( const ImplHatch& rImplHatch ) :
51cdf0e10cSrcweir mnRefCount ( 1 ),
52cdf0e10cSrcweir maColor ( rImplHatch.maColor ),
53cdf0e10cSrcweir meStyle ( rImplHatch.meStyle ),
54cdf0e10cSrcweir mnDistance ( rImplHatch.mnDistance ),
55cdf0e10cSrcweir mnAngle ( rImplHatch.mnAngle )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir }
58cdf0e10cSrcweir
59cdf0e10cSrcweir // ---------
60cdf0e10cSrcweir // - Hatch -
61cdf0e10cSrcweir // ---------
62cdf0e10cSrcweir
Hatch()63cdf0e10cSrcweir Hatch::Hatch()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir DBG_CTOR( Hatch, NULL );
66cdf0e10cSrcweir mpImplHatch = new ImplHatch;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir
69cdf0e10cSrcweir // -----------------------------------------------------------------------
70cdf0e10cSrcweir
Hatch(const Hatch & rHatch)71cdf0e10cSrcweir Hatch::Hatch( const Hatch& rHatch )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir DBG_CTOR( Hatch, NULL );
74cdf0e10cSrcweir DBG_CHKOBJ( &rHatch, Hatch, NULL );
75cdf0e10cSrcweir mpImplHatch = rHatch.mpImplHatch;
76cdf0e10cSrcweir mpImplHatch->mnRefCount++;
77cdf0e10cSrcweir }
78cdf0e10cSrcweir
79cdf0e10cSrcweir // -----------------------------------------------------------------------
80cdf0e10cSrcweir
Hatch(HatchStyle eStyle,const Color & rColor,long nDistance,sal_uInt16 nAngle10)81cdf0e10cSrcweir Hatch::Hatch( HatchStyle eStyle, const Color& rColor,
82cdf0e10cSrcweir long nDistance, sal_uInt16 nAngle10 )
83cdf0e10cSrcweir {
84cdf0e10cSrcweir DBG_CTOR( Hatch, NULL );
85cdf0e10cSrcweir mpImplHatch = new ImplHatch;
86cdf0e10cSrcweir mpImplHatch->maColor = rColor;
87cdf0e10cSrcweir mpImplHatch->meStyle = eStyle;
88cdf0e10cSrcweir mpImplHatch->mnDistance = nDistance;
89cdf0e10cSrcweir mpImplHatch->mnAngle = nAngle10;
90cdf0e10cSrcweir }
91cdf0e10cSrcweir
92cdf0e10cSrcweir // -----------------------------------------------------------------------
93cdf0e10cSrcweir
~Hatch()94cdf0e10cSrcweir Hatch::~Hatch()
95cdf0e10cSrcweir {
96cdf0e10cSrcweir DBG_DTOR( Hatch, NULL );
97cdf0e10cSrcweir if( !( --mpImplHatch->mnRefCount ) )
98cdf0e10cSrcweir delete mpImplHatch;
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
101cdf0e10cSrcweir // -----------------------------------------------------------------------
102cdf0e10cSrcweir
operator =(const Hatch & rHatch)103cdf0e10cSrcweir Hatch& Hatch::operator=( const Hatch& rHatch )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
106cdf0e10cSrcweir DBG_CHKOBJ( &rHatch, Hatch, NULL );
107cdf0e10cSrcweir
108cdf0e10cSrcweir rHatch.mpImplHatch->mnRefCount++;
109cdf0e10cSrcweir
110cdf0e10cSrcweir if( !( --mpImplHatch->mnRefCount ) )
111cdf0e10cSrcweir delete mpImplHatch;
112cdf0e10cSrcweir
113cdf0e10cSrcweir mpImplHatch = rHatch.mpImplHatch;
114cdf0e10cSrcweir return *this;
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir // -----------------------------------------------------------------------
118cdf0e10cSrcweir
operator ==(const Hatch & rHatch) const119cdf0e10cSrcweir sal_Bool Hatch::operator==( const Hatch& rHatch ) const
120cdf0e10cSrcweir {
121cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
122cdf0e10cSrcweir DBG_CHKOBJ( &rHatch, Hatch, NULL );
123cdf0e10cSrcweir
124cdf0e10cSrcweir return( mpImplHatch == rHatch.mpImplHatch ||
125cdf0e10cSrcweir ( mpImplHatch->maColor == rHatch.mpImplHatch->maColor &&
126cdf0e10cSrcweir mpImplHatch->meStyle == rHatch.mpImplHatch->meStyle &&
127cdf0e10cSrcweir mpImplHatch->mnDistance == rHatch.mpImplHatch->mnDistance &&
128cdf0e10cSrcweir mpImplHatch->mnAngle == rHatch.mpImplHatch->mnAngle ) );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir // -----------------------------------------------------------------------
132cdf0e10cSrcweir
ImplMakeUnique()133cdf0e10cSrcweir void Hatch::ImplMakeUnique()
134cdf0e10cSrcweir {
135cdf0e10cSrcweir if( mpImplHatch->mnRefCount != 1 )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir if( mpImplHatch->mnRefCount )
138cdf0e10cSrcweir mpImplHatch->mnRefCount--;
139cdf0e10cSrcweir
140cdf0e10cSrcweir mpImplHatch = new ImplHatch( *mpImplHatch );
141cdf0e10cSrcweir }
142cdf0e10cSrcweir }
143cdf0e10cSrcweir
144cdf0e10cSrcweir // -----------------------------------------------------------------------
145cdf0e10cSrcweir
SetStyle(HatchStyle eStyle)146cdf0e10cSrcweir void Hatch::SetStyle( HatchStyle eStyle )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
149cdf0e10cSrcweir ImplMakeUnique();
150cdf0e10cSrcweir mpImplHatch->meStyle = eStyle;
151cdf0e10cSrcweir }
152cdf0e10cSrcweir
153cdf0e10cSrcweir // -----------------------------------------------------------------------
154cdf0e10cSrcweir
SetColor(const Color & rColor)155cdf0e10cSrcweir void Hatch::SetColor( const Color& rColor )
156cdf0e10cSrcweir {
157cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
158cdf0e10cSrcweir ImplMakeUnique();
159cdf0e10cSrcweir mpImplHatch->maColor = rColor;
160cdf0e10cSrcweir }
161cdf0e10cSrcweir
162cdf0e10cSrcweir // -----------------------------------------------------------------------
163cdf0e10cSrcweir
SetDistance(long nDistance)164cdf0e10cSrcweir void Hatch::SetDistance( long nDistance )
165cdf0e10cSrcweir {
166cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
167cdf0e10cSrcweir ImplMakeUnique();
168cdf0e10cSrcweir mpImplHatch->mnDistance = nDistance;
169cdf0e10cSrcweir }
170cdf0e10cSrcweir
171cdf0e10cSrcweir // -----------------------------------------------------------------------
172cdf0e10cSrcweir
SetAngle(sal_uInt16 nAngle10)173cdf0e10cSrcweir void Hatch::SetAngle( sal_uInt16 nAngle10 )
174cdf0e10cSrcweir {
175cdf0e10cSrcweir DBG_CHKTHIS( Hatch, NULL );
176cdf0e10cSrcweir ImplMakeUnique();
177cdf0e10cSrcweir mpImplHatch->mnAngle = nAngle10;
178cdf0e10cSrcweir }
179cdf0e10cSrcweir
180cdf0e10cSrcweir // -----------------------------------------------------------------------
181cdf0e10cSrcweir
operator >>(SvStream & rIStm,ImplHatch & rImplHatch)182cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, ImplHatch& rImplHatch )
183cdf0e10cSrcweir {
184cdf0e10cSrcweir VersionCompat aCompat( rIStm, STREAM_READ );
185cdf0e10cSrcweir sal_uInt16 nTmp16;
186cdf0e10cSrcweir
187cdf0e10cSrcweir rIStm >> nTmp16; rImplHatch.meStyle = (HatchStyle) nTmp16;
188cdf0e10cSrcweir rIStm >> rImplHatch.maColor >> rImplHatch.mnDistance >> rImplHatch.mnAngle;
189cdf0e10cSrcweir
190cdf0e10cSrcweir return rIStm;
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir // -----------------------------------------------------------------------
194cdf0e10cSrcweir
operator <<(SvStream & rOStm,const ImplHatch & rImplHatch)195cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const ImplHatch& rImplHatch )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
198cdf0e10cSrcweir
199cdf0e10cSrcweir rOStm << (sal_uInt16) rImplHatch.meStyle << rImplHatch.maColor;
200cdf0e10cSrcweir rOStm << rImplHatch.mnDistance << rImplHatch.mnAngle;
201cdf0e10cSrcweir
202cdf0e10cSrcweir return rOStm;
203cdf0e10cSrcweir }
204cdf0e10cSrcweir
205cdf0e10cSrcweir // -----------------------------------------------------------------------
206cdf0e10cSrcweir
operator >>(SvStream & rIStm,Hatch & rHatch)207cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStm, Hatch& rHatch )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir rHatch.ImplMakeUnique();
210cdf0e10cSrcweir return( rIStm >> *rHatch.mpImplHatch );
211cdf0e10cSrcweir }
212cdf0e10cSrcweir
213cdf0e10cSrcweir // -----------------------------------------------------------------------
214cdf0e10cSrcweir
operator <<(SvStream & rOStm,const Hatch & rHatch)215cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStm, const Hatch& rHatch )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir return( rOStm << *rHatch.mpImplHatch );
218cdf0e10cSrcweir }
219