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/sdrshadowattribute.hxx> 26*b1cdbd2cSJim Jagielski #include <basegfx/vector/b2dvector.hxx> 27*b1cdbd2cSJim Jagielski #include <basegfx/color/bcolor.hxx> 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski namespace drawinglayer 32*b1cdbd2cSJim Jagielski { 33*b1cdbd2cSJim Jagielski namespace attribute 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski class ImpSdrShadowAttribute 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski public: 38*b1cdbd2cSJim Jagielski // refcounter 39*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski // shadow definitions 42*b1cdbd2cSJim Jagielski basegfx::B2DVector maOffset; // shadow offset 1/100th mm 43*b1cdbd2cSJim Jagielski double mfTransparence; // [0.0 .. 1.0], 0.0==no transp. 44*b1cdbd2cSJim Jagielski basegfx::BColor maColor; // color of shadow 45*b1cdbd2cSJim Jagielski ImpSdrShadowAttribute(const basegfx::B2DVector & rOffset,double fTransparence,const basegfx::BColor & rColor)46*b1cdbd2cSJim Jagielski ImpSdrShadowAttribute( 47*b1cdbd2cSJim Jagielski const basegfx::B2DVector& rOffset, 48*b1cdbd2cSJim Jagielski double fTransparence, 49*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor) 50*b1cdbd2cSJim Jagielski : mnRefCount(0), 51*b1cdbd2cSJim Jagielski maOffset(rOffset), 52*b1cdbd2cSJim Jagielski mfTransparence(fTransparence), 53*b1cdbd2cSJim Jagielski maColor(rColor) 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski // data read access getOffset() const58*b1cdbd2cSJim Jagielski const basegfx::B2DVector& getOffset() const { return maOffset; } getTransparence() const59*b1cdbd2cSJim Jagielski double getTransparence() const { return mfTransparence; } getColor() const60*b1cdbd2cSJim Jagielski const basegfx::BColor& getColor() const { return maColor; } 61*b1cdbd2cSJim Jagielski operator ==(const ImpSdrShadowAttribute & rCandidate) const62*b1cdbd2cSJim Jagielski bool operator==(const ImpSdrShadowAttribute& rCandidate) const 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski return (getOffset() == rCandidate.getOffset() 65*b1cdbd2cSJim Jagielski && getTransparence() == rCandidate.getTransparence() 66*b1cdbd2cSJim Jagielski && getColor() == rCandidate.getColor()); 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski get_global_default()69*b1cdbd2cSJim Jagielski static ImpSdrShadowAttribute* get_global_default() 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski static ImpSdrShadowAttribute* pDefault = 0; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski if(!pDefault) 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski pDefault = new ImpSdrShadowAttribute( 76*b1cdbd2cSJim Jagielski basegfx::B2DVector(), 77*b1cdbd2cSJim Jagielski 0.0, 78*b1cdbd2cSJim Jagielski basegfx::BColor()); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 81*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski return pDefault; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski }; 87*b1cdbd2cSJim Jagielski SdrShadowAttribute(const basegfx::B2DVector & rOffset,double fTransparence,const basegfx::BColor & rColor)88*b1cdbd2cSJim Jagielski SdrShadowAttribute::SdrShadowAttribute( 89*b1cdbd2cSJim Jagielski const basegfx::B2DVector& rOffset, 90*b1cdbd2cSJim Jagielski double fTransparence, 91*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor) 92*b1cdbd2cSJim Jagielski : mpSdrShadowAttribute(new ImpSdrShadowAttribute( 93*b1cdbd2cSJim Jagielski rOffset, fTransparence, rColor)) 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski SdrShadowAttribute()97*b1cdbd2cSJim Jagielski SdrShadowAttribute::SdrShadowAttribute() 98*b1cdbd2cSJim Jagielski : mpSdrShadowAttribute(ImpSdrShadowAttribute::get_global_default()) 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski mpSdrShadowAttribute->mnRefCount++; 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski SdrShadowAttribute(const SdrShadowAttribute & rCandidate)103*b1cdbd2cSJim Jagielski SdrShadowAttribute::SdrShadowAttribute(const SdrShadowAttribute& rCandidate) 104*b1cdbd2cSJim Jagielski : mpSdrShadowAttribute(rCandidate.mpSdrShadowAttribute) 105*b1cdbd2cSJim Jagielski { 106*b1cdbd2cSJim Jagielski mpSdrShadowAttribute->mnRefCount++; 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski ~SdrShadowAttribute()109*b1cdbd2cSJim Jagielski SdrShadowAttribute::~SdrShadowAttribute() 110*b1cdbd2cSJim Jagielski { 111*b1cdbd2cSJim Jagielski if(mpSdrShadowAttribute->mnRefCount) 112*b1cdbd2cSJim Jagielski { 113*b1cdbd2cSJim Jagielski mpSdrShadowAttribute->mnRefCount--; 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski else 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski delete mpSdrShadowAttribute; 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski isDefault() const121*b1cdbd2cSJim Jagielski bool SdrShadowAttribute::isDefault() const 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski return mpSdrShadowAttribute == ImpSdrShadowAttribute::get_global_default(); 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski operator =(const SdrShadowAttribute & rCandidate)126*b1cdbd2cSJim Jagielski SdrShadowAttribute& SdrShadowAttribute::operator=(const SdrShadowAttribute& rCandidate) 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski if(rCandidate.mpSdrShadowAttribute != mpSdrShadowAttribute) 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski if(mpSdrShadowAttribute->mnRefCount) 131*b1cdbd2cSJim Jagielski { 132*b1cdbd2cSJim Jagielski mpSdrShadowAttribute->mnRefCount--; 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski else 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski delete mpSdrShadowAttribute; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski mpSdrShadowAttribute = rCandidate.mpSdrShadowAttribute; 140*b1cdbd2cSJim Jagielski mpSdrShadowAttribute->mnRefCount++; 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski return *this; 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski operator ==(const SdrShadowAttribute & rCandidate) const146*b1cdbd2cSJim Jagielski bool SdrShadowAttribute::operator==(const SdrShadowAttribute& rCandidate) const 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski if(rCandidate.mpSdrShadowAttribute == mpSdrShadowAttribute) 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski return true; 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski return false; 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski return (*rCandidate.mpSdrShadowAttribute == *mpSdrShadowAttribute); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski getOffset() const161*b1cdbd2cSJim Jagielski const basegfx::B2DVector& SdrShadowAttribute::getOffset() const 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski return mpSdrShadowAttribute->getOffset(); 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski getTransparence() const166*b1cdbd2cSJim Jagielski double SdrShadowAttribute::getTransparence() const 167*b1cdbd2cSJim Jagielski { 168*b1cdbd2cSJim Jagielski return mpSdrShadowAttribute->getTransparence(); 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski getColor() const171*b1cdbd2cSJim Jagielski const basegfx::BColor& SdrShadowAttribute::getColor() const 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski return mpSdrShadowAttribute->getColor(); 174*b1cdbd2cSJim Jagielski } 175*b1cdbd2cSJim Jagielski } // end of namespace attribute 176*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 179*b1cdbd2cSJim Jagielski // eof 180