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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_drawinglayer.hxx" 24 25 #include <drawinglayer/attribute/fillhatchattribute.hxx> 26 #include <basegfx/color/bcolor.hxx> 27 28 ////////////////////////////////////////////////////////////////////////////// 29 30 namespace drawinglayer 31 { 32 namespace attribute 33 { 34 class ImpFillHatchAttribute 35 { 36 public: 37 // refcounter 38 sal_uInt32 mnRefCount; 39 40 // data definitions 41 HatchStyle meStyle; 42 double mfDistance; 43 double mfAngle; 44 basegfx::BColor maColor; 45 46 // bitfield 47 unsigned mbFillBackground : 1; 48 49 ImpFillHatchAttribute( 50 HatchStyle eStyle, 51 double fDistance, 52 double fAngle, 53 const basegfx::BColor& rColor, 54 bool bFillBackground) 55 : mnRefCount(0), 56 meStyle(eStyle), 57 mfDistance(fDistance), 58 mfAngle(fAngle), 59 maColor(rColor), 60 mbFillBackground(bFillBackground) 61 { 62 } 63 64 // data read access 65 HatchStyle getStyle() const { return meStyle; } 66 double getDistance() const { return mfDistance; } 67 double getAngle() const { return mfAngle; } 68 const basegfx::BColor& getColor() const { return maColor; } 69 bool isFillBackground() const { return mbFillBackground; } 70 71 bool operator==(const ImpFillHatchAttribute& rCandidate) const 72 { 73 return (getStyle() == rCandidate.getStyle() 74 && getDistance() == rCandidate.getDistance() 75 && getAngle() == rCandidate.getAngle() 76 && getColor() == rCandidate.getColor() 77 && isFillBackground() == rCandidate.isFillBackground()); 78 } 79 80 static ImpFillHatchAttribute* get_global_default() 81 { 82 static ImpFillHatchAttribute* pDefault = 0; 83 84 if(!pDefault) 85 { 86 pDefault = new ImpFillHatchAttribute( 87 HATCHSTYLE_SINGLE, 88 0.0, 0.0, 89 basegfx::BColor(), 90 false); 91 92 // never delete; start with RefCount 1, not 0 93 pDefault->mnRefCount++; 94 } 95 96 return pDefault; 97 } 98 }; 99 100 FillHatchAttribute::FillHatchAttribute( 101 HatchStyle eStyle, 102 double fDistance, 103 double fAngle, 104 const basegfx::BColor& rColor, 105 bool bFillBackground) 106 : mpFillHatchAttribute(new ImpFillHatchAttribute( 107 eStyle, fDistance, fAngle, rColor, bFillBackground)) 108 { 109 } 110 111 FillHatchAttribute::FillHatchAttribute() 112 : mpFillHatchAttribute(ImpFillHatchAttribute::get_global_default()) 113 { 114 mpFillHatchAttribute->mnRefCount++; 115 } 116 117 FillHatchAttribute::FillHatchAttribute(const FillHatchAttribute& rCandidate) 118 : mpFillHatchAttribute(rCandidate.mpFillHatchAttribute) 119 { 120 mpFillHatchAttribute->mnRefCount++; 121 } 122 123 FillHatchAttribute::~FillHatchAttribute() 124 { 125 if(mpFillHatchAttribute->mnRefCount) 126 { 127 mpFillHatchAttribute->mnRefCount--; 128 } 129 else 130 { 131 delete mpFillHatchAttribute; 132 } 133 } 134 135 bool FillHatchAttribute::isDefault() const 136 { 137 return mpFillHatchAttribute == ImpFillHatchAttribute::get_global_default(); 138 } 139 140 FillHatchAttribute& FillHatchAttribute::operator=(const FillHatchAttribute& rCandidate) 141 { 142 if(rCandidate.mpFillHatchAttribute != mpFillHatchAttribute) 143 { 144 if(mpFillHatchAttribute->mnRefCount) 145 { 146 mpFillHatchAttribute->mnRefCount--; 147 } 148 else 149 { 150 delete mpFillHatchAttribute; 151 } 152 153 mpFillHatchAttribute = rCandidate.mpFillHatchAttribute; 154 mpFillHatchAttribute->mnRefCount++; 155 } 156 157 return *this; 158 } 159 160 bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const 161 { 162 if(rCandidate.mpFillHatchAttribute == mpFillHatchAttribute) 163 { 164 return true; 165 } 166 167 if(rCandidate.isDefault() != isDefault()) 168 { 169 return false; 170 } 171 172 return (*rCandidate.mpFillHatchAttribute == *mpFillHatchAttribute); 173 } 174 175 // data read access 176 HatchStyle FillHatchAttribute::getStyle() const 177 { 178 return mpFillHatchAttribute->getStyle(); 179 } 180 181 double FillHatchAttribute::getDistance() const 182 { 183 return mpFillHatchAttribute->getDistance(); 184 } 185 186 double FillHatchAttribute::getAngle() const 187 { 188 return mpFillHatchAttribute->getAngle(); 189 } 190 191 const basegfx::BColor& FillHatchAttribute::getColor() const 192 { 193 return mpFillHatchAttribute->getColor(); 194 } 195 196 bool FillHatchAttribute::isFillBackground() const 197 { 198 return mpFillHatchAttribute->isFillBackground(); 199 } 200 201 } // end of namespace attribute 202 } // end of namespace drawinglayer 203 204 ////////////////////////////////////////////////////////////////////////////// 205 // eof 206