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