1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 23*b1cdbd2cSJim Jagielski #include "precompiled_drawinglayer.hxx" 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #include <drawinglayer/attribute/fillhatchattribute.hxx> 26*b1cdbd2cSJim Jagielski #include <basegfx/color/bcolor.hxx> 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski namespace drawinglayer 31*b1cdbd2cSJim Jagielski { 32*b1cdbd2cSJim Jagielski namespace attribute 33*b1cdbd2cSJim Jagielski { 34*b1cdbd2cSJim Jagielski class ImpFillHatchAttribute 35*b1cdbd2cSJim Jagielski { 36*b1cdbd2cSJim Jagielski public: 37*b1cdbd2cSJim Jagielski // refcounter 38*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski // data definitions 41*b1cdbd2cSJim Jagielski HatchStyle meStyle; 42*b1cdbd2cSJim Jagielski double mfDistance; 43*b1cdbd2cSJim Jagielski double mfAngle; 44*b1cdbd2cSJim Jagielski basegfx::BColor maColor; 45*b1cdbd2cSJim Jagielski sal_uInt32 mnMinimalDiscreteDistance; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski // bitfield 48*b1cdbd2cSJim Jagielski unsigned mbFillBackground : 1; 49*b1cdbd2cSJim Jagielski ImpFillHatchAttribute(HatchStyle eStyle,double fDistance,double fAngle,const basegfx::BColor & rColor,sal_uInt32 nMinimalDiscreteDistance,bool bFillBackground)50*b1cdbd2cSJim Jagielski ImpFillHatchAttribute( 51*b1cdbd2cSJim Jagielski HatchStyle eStyle, 52*b1cdbd2cSJim Jagielski double fDistance, 53*b1cdbd2cSJim Jagielski double fAngle, 54*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 55*b1cdbd2cSJim Jagielski sal_uInt32 nMinimalDiscreteDistance, 56*b1cdbd2cSJim Jagielski bool bFillBackground) 57*b1cdbd2cSJim Jagielski : mnRefCount(0), 58*b1cdbd2cSJim Jagielski meStyle(eStyle), 59*b1cdbd2cSJim Jagielski mfDistance(fDistance), 60*b1cdbd2cSJim Jagielski mfAngle(fAngle), 61*b1cdbd2cSJim Jagielski maColor(rColor), 62*b1cdbd2cSJim Jagielski mnMinimalDiscreteDistance(nMinimalDiscreteDistance), 63*b1cdbd2cSJim Jagielski mbFillBackground(bFillBackground) 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski // data read access getStyle() const68*b1cdbd2cSJim Jagielski HatchStyle getStyle() const { return meStyle; } getDistance() const69*b1cdbd2cSJim Jagielski double getDistance() const { return mfDistance; } getAngle() const70*b1cdbd2cSJim Jagielski double getAngle() const { return mfAngle; } getColor() const71*b1cdbd2cSJim Jagielski const basegfx::BColor& getColor() const { return maColor; } getMinimalDiscreteDistance() const72*b1cdbd2cSJim Jagielski sal_uInt32 getMinimalDiscreteDistance() const { return mnMinimalDiscreteDistance; } isFillBackground() const73*b1cdbd2cSJim Jagielski bool isFillBackground() const { return mbFillBackground; } 74*b1cdbd2cSJim Jagielski operator ==(const ImpFillHatchAttribute & rCandidate) const75*b1cdbd2cSJim Jagielski bool operator==(const ImpFillHatchAttribute& rCandidate) const 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski return (getStyle() == rCandidate.getStyle() 78*b1cdbd2cSJim Jagielski && getDistance() == rCandidate.getDistance() 79*b1cdbd2cSJim Jagielski && getAngle() == rCandidate.getAngle() 80*b1cdbd2cSJim Jagielski && getColor() == rCandidate.getColor() 81*b1cdbd2cSJim Jagielski && getMinimalDiscreteDistance() == rCandidate.getMinimalDiscreteDistance() 82*b1cdbd2cSJim Jagielski && isFillBackground() == rCandidate.isFillBackground()); 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski get_global_default()85*b1cdbd2cSJim Jagielski static ImpFillHatchAttribute* get_global_default() 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski static ImpFillHatchAttribute* pDefault = 0; 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski if(!pDefault) 90*b1cdbd2cSJim Jagielski { 91*b1cdbd2cSJim Jagielski pDefault = new ImpFillHatchAttribute( 92*b1cdbd2cSJim Jagielski HATCHSTYLE_SINGLE, 93*b1cdbd2cSJim Jagielski 0.0, 0.0, 94*b1cdbd2cSJim Jagielski basegfx::BColor(), 95*b1cdbd2cSJim Jagielski 3, // same as VCL 96*b1cdbd2cSJim Jagielski false); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 99*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski return pDefault; 103*b1cdbd2cSJim Jagielski } 104*b1cdbd2cSJim Jagielski }; 105*b1cdbd2cSJim Jagielski FillHatchAttribute(HatchStyle eStyle,double fDistance,double fAngle,const basegfx::BColor & rColor,sal_uInt32 nMinimalDiscreteDistance,bool bFillBackground)106*b1cdbd2cSJim Jagielski FillHatchAttribute::FillHatchAttribute( 107*b1cdbd2cSJim Jagielski HatchStyle eStyle, 108*b1cdbd2cSJim Jagielski double fDistance, 109*b1cdbd2cSJim Jagielski double fAngle, 110*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 111*b1cdbd2cSJim Jagielski sal_uInt32 nMinimalDiscreteDistance, 112*b1cdbd2cSJim Jagielski bool bFillBackground) 113*b1cdbd2cSJim Jagielski : mpFillHatchAttribute( 114*b1cdbd2cSJim Jagielski new ImpFillHatchAttribute( 115*b1cdbd2cSJim Jagielski eStyle, 116*b1cdbd2cSJim Jagielski fDistance, 117*b1cdbd2cSJim Jagielski fAngle, 118*b1cdbd2cSJim Jagielski rColor, 119*b1cdbd2cSJim Jagielski nMinimalDiscreteDistance, 120*b1cdbd2cSJim Jagielski bFillBackground)) 121*b1cdbd2cSJim Jagielski { 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski FillHatchAttribute()124*b1cdbd2cSJim Jagielski FillHatchAttribute::FillHatchAttribute() 125*b1cdbd2cSJim Jagielski : mpFillHatchAttribute(ImpFillHatchAttribute::get_global_default()) 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski mpFillHatchAttribute->mnRefCount++; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski FillHatchAttribute(const FillHatchAttribute & rCandidate)130*b1cdbd2cSJim Jagielski FillHatchAttribute::FillHatchAttribute(const FillHatchAttribute& rCandidate) 131*b1cdbd2cSJim Jagielski : mpFillHatchAttribute(rCandidate.mpFillHatchAttribute) 132*b1cdbd2cSJim Jagielski { 133*b1cdbd2cSJim Jagielski mpFillHatchAttribute->mnRefCount++; 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski ~FillHatchAttribute()136*b1cdbd2cSJim Jagielski FillHatchAttribute::~FillHatchAttribute() 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski if(mpFillHatchAttribute->mnRefCount) 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski mpFillHatchAttribute->mnRefCount--; 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski else 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski delete mpFillHatchAttribute; 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski isDefault() const148*b1cdbd2cSJim Jagielski bool FillHatchAttribute::isDefault() const 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski return mpFillHatchAttribute == ImpFillHatchAttribute::get_global_default(); 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski operator =(const FillHatchAttribute & rCandidate)153*b1cdbd2cSJim Jagielski FillHatchAttribute& FillHatchAttribute::operator=(const FillHatchAttribute& rCandidate) 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski if(rCandidate.mpFillHatchAttribute != mpFillHatchAttribute) 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski if(mpFillHatchAttribute->mnRefCount) 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski mpFillHatchAttribute->mnRefCount--; 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski else 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski delete mpFillHatchAttribute; 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski mpFillHatchAttribute = rCandidate.mpFillHatchAttribute; 167*b1cdbd2cSJim Jagielski mpFillHatchAttribute->mnRefCount++; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski return *this; 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski operator ==(const FillHatchAttribute & rCandidate) const173*b1cdbd2cSJim Jagielski bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski if(rCandidate.mpFillHatchAttribute == mpFillHatchAttribute) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski return true; 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski return false; 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski return (*rCandidate.mpFillHatchAttribute == *mpFillHatchAttribute); 186*b1cdbd2cSJim Jagielski } 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski // data read access getStyle() const189*b1cdbd2cSJim Jagielski HatchStyle FillHatchAttribute::getStyle() const 190*b1cdbd2cSJim Jagielski { 191*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->getStyle(); 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski getDistance() const194*b1cdbd2cSJim Jagielski double FillHatchAttribute::getDistance() const 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->getDistance(); 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski getAngle() const199*b1cdbd2cSJim Jagielski double FillHatchAttribute::getAngle() const 200*b1cdbd2cSJim Jagielski { 201*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->getAngle(); 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski getColor() const204*b1cdbd2cSJim Jagielski const basegfx::BColor& FillHatchAttribute::getColor() const 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->getColor(); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski getMinimalDiscreteDistance() const209*b1cdbd2cSJim Jagielski sal_uInt32 FillHatchAttribute::getMinimalDiscreteDistance() const 210*b1cdbd2cSJim Jagielski { 211*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->getMinimalDiscreteDistance(); 212*b1cdbd2cSJim Jagielski } 213*b1cdbd2cSJim Jagielski isFillBackground() const214*b1cdbd2cSJim Jagielski bool FillHatchAttribute::isFillBackground() const 215*b1cdbd2cSJim Jagielski { 216*b1cdbd2cSJim Jagielski return mpFillHatchAttribute->isFillBackground(); 217*b1cdbd2cSJim Jagielski } 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski } // end of namespace attribute 220*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 223*b1cdbd2cSJim Jagielski // eof 224