1 /************************************************************************* 2 * 3 * OpenOffice.org - a multi-platform office productivity suite 4 * 5 * $RCSfile: fillattribute.cxx,v $ 6 * 7 * $Revision: 1.4 $ 8 * 9 * last change: $Author: aw $ $Date: 2008-05-27 14:11:19 $ 10 * 11 * The Contents of this file are made available subject to 12 * the terms of GNU Lesser General Public License Version 2.1. 13 * 14 * 15 * GNU Lesser General Public License Version 2.1 16 * ============================================= 17 * Copyright 2005 by Sun Microsystems, Inc. 18 * 901 San Antonio Road, Palo Alto, CA 94303, USA 19 * 20 * This library is free software; you can redistribute it and/or 21 * modify it under the terms of the GNU Lesser General Public 22 * License version 2.1, as published by the Free Software Foundation. 23 * 24 * This library is distributed in the hope that it will be useful, 25 * but WITHOUT ANY WARRANTY; without even the implied warranty of 26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 27 * Lesser General Public License for more details. 28 * 29 * You should have received a copy of the GNU Lesser General Public 30 * License along with this library; if not, write to the Free Software 31 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 32 * MA 02111-1307 USA 33 * 34 ************************************************************************/ 35 36 // MARKER(update_precomp.py): autogen include statement, do not remove 37 #include "precompiled_drawinglayer.hxx" 38 39 #include <drawinglayer/attribute/fillhatchattribute.hxx> 40 #include <basegfx/color/bcolor.hxx> 41 42 ////////////////////////////////////////////////////////////////////////////// 43 44 namespace drawinglayer 45 { 46 namespace attribute 47 { 48 class ImpFillHatchAttribute 49 { 50 public: 51 // refcounter 52 sal_uInt32 mnRefCount; 53 54 // data definitions 55 HatchStyle meStyle; 56 double mfDistance; 57 double mfAngle; 58 basegfx::BColor maColor; 59 60 // bitfield 61 unsigned mbFillBackground : 1; 62 63 ImpFillHatchAttribute( 64 HatchStyle eStyle, 65 double fDistance, 66 double fAngle, 67 const basegfx::BColor& rColor, 68 bool bFillBackground) 69 : mnRefCount(0), 70 meStyle(eStyle), 71 mfDistance(fDistance), 72 mfAngle(fAngle), 73 maColor(rColor), 74 mbFillBackground(bFillBackground) 75 { 76 } 77 78 // data read access 79 HatchStyle getStyle() const { return meStyle; } 80 double getDistance() const { return mfDistance; } 81 double getAngle() const { return mfAngle; } 82 const basegfx::BColor& getColor() const { return maColor; } 83 bool isFillBackground() const { return mbFillBackground; } 84 85 bool operator==(const ImpFillHatchAttribute& rCandidate) const 86 { 87 return (getStyle() == rCandidate.getStyle() 88 && getDistance() == rCandidate.getDistance() 89 && getAngle() == rCandidate.getAngle() 90 && getColor() == rCandidate.getColor() 91 && isFillBackground() == rCandidate.isFillBackground()); 92 } 93 94 static ImpFillHatchAttribute* get_global_default() 95 { 96 static ImpFillHatchAttribute* pDefault = 0; 97 98 if(!pDefault) 99 { 100 pDefault = new ImpFillHatchAttribute( 101 HATCHSTYLE_SINGLE, 102 0.0, 0.0, 103 basegfx::BColor(), 104 false); 105 106 // never delete; start with RefCount 1, not 0 107 pDefault->mnRefCount++; 108 } 109 110 return pDefault; 111 } 112 }; 113 114 FillHatchAttribute::FillHatchAttribute( 115 HatchStyle eStyle, 116 double fDistance, 117 double fAngle, 118 const basegfx::BColor& rColor, 119 bool bFillBackground) 120 : mpFillHatchAttribute(new ImpFillHatchAttribute( 121 eStyle, fDistance, fAngle, rColor, bFillBackground)) 122 { 123 } 124 125 FillHatchAttribute::FillHatchAttribute() 126 : mpFillHatchAttribute(ImpFillHatchAttribute::get_global_default()) 127 { 128 mpFillHatchAttribute->mnRefCount++; 129 } 130 131 FillHatchAttribute::FillHatchAttribute(const FillHatchAttribute& rCandidate) 132 : mpFillHatchAttribute(rCandidate.mpFillHatchAttribute) 133 { 134 mpFillHatchAttribute->mnRefCount++; 135 } 136 137 FillHatchAttribute::~FillHatchAttribute() 138 { 139 if(mpFillHatchAttribute->mnRefCount) 140 { 141 mpFillHatchAttribute->mnRefCount--; 142 } 143 else 144 { 145 delete mpFillHatchAttribute; 146 } 147 } 148 149 bool FillHatchAttribute::isDefault() const 150 { 151 return mpFillHatchAttribute == ImpFillHatchAttribute::get_global_default(); 152 } 153 154 FillHatchAttribute& FillHatchAttribute::operator=(const FillHatchAttribute& rCandidate) 155 { 156 if(rCandidate.mpFillHatchAttribute != mpFillHatchAttribute) 157 { 158 if(mpFillHatchAttribute->mnRefCount) 159 { 160 mpFillHatchAttribute->mnRefCount--; 161 } 162 else 163 { 164 delete mpFillHatchAttribute; 165 } 166 167 mpFillHatchAttribute = rCandidate.mpFillHatchAttribute; 168 mpFillHatchAttribute->mnRefCount++; 169 } 170 171 return *this; 172 } 173 174 bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const 175 { 176 if(rCandidate.mpFillHatchAttribute == mpFillHatchAttribute) 177 { 178 return true; 179 } 180 181 if(rCandidate.isDefault() != isDefault()) 182 { 183 return false; 184 } 185 186 return (*rCandidate.mpFillHatchAttribute == *mpFillHatchAttribute); 187 } 188 189 // data read access 190 HatchStyle FillHatchAttribute::getStyle() const 191 { 192 return mpFillHatchAttribute->getStyle(); 193 } 194 195 double FillHatchAttribute::getDistance() const 196 { 197 return mpFillHatchAttribute->getDistance(); 198 } 199 200 double FillHatchAttribute::getAngle() const 201 { 202 return mpFillHatchAttribute->getAngle(); 203 } 204 205 const basegfx::BColor& FillHatchAttribute::getColor() const 206 { 207 return mpFillHatchAttribute->getColor(); 208 } 209 210 bool FillHatchAttribute::isFillBackground() const 211 { 212 return mpFillHatchAttribute->isFillBackground(); 213 } 214 215 } // end of namespace attribute 216 } // end of namespace drawinglayer 217 218 ////////////////////////////////////////////////////////////////////////////// 219 // eof 220