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/sdrsceneattribute3d.hxx> 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski namespace drawinglayer 30*b1cdbd2cSJim Jagielski { 31*b1cdbd2cSJim Jagielski namespace attribute 32*b1cdbd2cSJim Jagielski { 33*b1cdbd2cSJim Jagielski class ImpSdrSceneAttribute 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski public: 36*b1cdbd2cSJim Jagielski // refcounter 37*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski // 3D scene attribute definitions 40*b1cdbd2cSJim Jagielski double mfDistance; 41*b1cdbd2cSJim Jagielski double mfShadowSlant; 42*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode maProjectionMode; 43*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode maShadeMode; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski // bitfield 46*b1cdbd2cSJim Jagielski unsigned mbTwoSidedLighting : 1; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski public: ImpSdrSceneAttribute(double fDistance,double fShadowSlant,::com::sun::star::drawing::ProjectionMode aProjectionMode,::com::sun::star::drawing::ShadeMode aShadeMode,bool bTwoSidedLighting)49*b1cdbd2cSJim Jagielski ImpSdrSceneAttribute( 50*b1cdbd2cSJim Jagielski double fDistance, 51*b1cdbd2cSJim Jagielski double fShadowSlant, 52*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode aProjectionMode, 53*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode aShadeMode, 54*b1cdbd2cSJim Jagielski bool bTwoSidedLighting) 55*b1cdbd2cSJim Jagielski : mnRefCount(0), 56*b1cdbd2cSJim Jagielski mfDistance(fDistance), 57*b1cdbd2cSJim Jagielski mfShadowSlant(fShadowSlant), 58*b1cdbd2cSJim Jagielski maProjectionMode(aProjectionMode), 59*b1cdbd2cSJim Jagielski maShadeMode(aShadeMode), 60*b1cdbd2cSJim Jagielski mbTwoSidedLighting(bTwoSidedLighting) 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski // data read access getDistance() const65*b1cdbd2cSJim Jagielski double getDistance() const { return mfDistance; } getShadowSlant() const66*b1cdbd2cSJim Jagielski double getShadowSlant() const { return mfShadowSlant; } getProjectionMode() const67*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode getProjectionMode() const { return maProjectionMode; } getShadeMode() const68*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode getShadeMode() const { return maShadeMode; } getTwoSidedLighting() const69*b1cdbd2cSJim Jagielski bool getTwoSidedLighting() const { return mbTwoSidedLighting; } 70*b1cdbd2cSJim Jagielski operator ==(const ImpSdrSceneAttribute & rCandidate) const71*b1cdbd2cSJim Jagielski bool operator==(const ImpSdrSceneAttribute& rCandidate) const 72*b1cdbd2cSJim Jagielski { 73*b1cdbd2cSJim Jagielski return (getDistance() == rCandidate.getDistance() 74*b1cdbd2cSJim Jagielski && getShadowSlant() == rCandidate.getShadowSlant() 75*b1cdbd2cSJim Jagielski && getProjectionMode() == rCandidate.getProjectionMode() 76*b1cdbd2cSJim Jagielski && getShadeMode() == rCandidate.getShadeMode() 77*b1cdbd2cSJim Jagielski && getTwoSidedLighting() == rCandidate.getTwoSidedLighting()); 78*b1cdbd2cSJim Jagielski } 79*b1cdbd2cSJim Jagielski get_global_default()80*b1cdbd2cSJim Jagielski static ImpSdrSceneAttribute* get_global_default() 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski static ImpSdrSceneAttribute* pDefault = 0; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski if(!pDefault) 85*b1cdbd2cSJim Jagielski { 86*b1cdbd2cSJim Jagielski pDefault = new ImpSdrSceneAttribute( 87*b1cdbd2cSJim Jagielski 0.0, 0.0, 88*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode_PARALLEL, 89*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode_FLAT, 90*b1cdbd2cSJim Jagielski false); 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 93*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski return pDefault; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski }; 99*b1cdbd2cSJim Jagielski SdrSceneAttribute(double fDistance,double fShadowSlant,::com::sun::star::drawing::ProjectionMode aProjectionMode,::com::sun::star::drawing::ShadeMode aShadeMode,bool bTwoSidedLighting)100*b1cdbd2cSJim Jagielski SdrSceneAttribute::SdrSceneAttribute( 101*b1cdbd2cSJim Jagielski double fDistance, 102*b1cdbd2cSJim Jagielski double fShadowSlant, 103*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode aProjectionMode, 104*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode aShadeMode, 105*b1cdbd2cSJim Jagielski bool bTwoSidedLighting) 106*b1cdbd2cSJim Jagielski : mpSdrSceneAttribute(new ImpSdrSceneAttribute( 107*b1cdbd2cSJim Jagielski fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting)) 108*b1cdbd2cSJim Jagielski { 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski SdrSceneAttribute()111*b1cdbd2cSJim Jagielski SdrSceneAttribute::SdrSceneAttribute() 112*b1cdbd2cSJim Jagielski : mpSdrSceneAttribute(ImpSdrSceneAttribute::get_global_default()) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski mpSdrSceneAttribute->mnRefCount++; 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski SdrSceneAttribute(const SdrSceneAttribute & rCandidate)117*b1cdbd2cSJim Jagielski SdrSceneAttribute::SdrSceneAttribute(const SdrSceneAttribute& rCandidate) 118*b1cdbd2cSJim Jagielski : mpSdrSceneAttribute(rCandidate.mpSdrSceneAttribute) 119*b1cdbd2cSJim Jagielski { 120*b1cdbd2cSJim Jagielski mpSdrSceneAttribute->mnRefCount++; 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski ~SdrSceneAttribute()123*b1cdbd2cSJim Jagielski SdrSceneAttribute::~SdrSceneAttribute() 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski if(mpSdrSceneAttribute->mnRefCount) 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski mpSdrSceneAttribute->mnRefCount--; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski else 130*b1cdbd2cSJim Jagielski { 131*b1cdbd2cSJim Jagielski delete mpSdrSceneAttribute; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski isDefault() const135*b1cdbd2cSJim Jagielski bool SdrSceneAttribute::isDefault() const 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute == ImpSdrSceneAttribute::get_global_default(); 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski operator =(const SdrSceneAttribute & rCandidate)140*b1cdbd2cSJim Jagielski SdrSceneAttribute& SdrSceneAttribute::operator=(const SdrSceneAttribute& rCandidate) 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski if(rCandidate.mpSdrSceneAttribute != mpSdrSceneAttribute) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski if(mpSdrSceneAttribute->mnRefCount) 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski mpSdrSceneAttribute->mnRefCount--; 147*b1cdbd2cSJim Jagielski } 148*b1cdbd2cSJim Jagielski else 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski delete mpSdrSceneAttribute; 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski mpSdrSceneAttribute = rCandidate.mpSdrSceneAttribute; 154*b1cdbd2cSJim Jagielski mpSdrSceneAttribute->mnRefCount++; 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski return *this; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski operator ==(const SdrSceneAttribute & rCandidate) const160*b1cdbd2cSJim Jagielski bool SdrSceneAttribute::operator==(const SdrSceneAttribute& rCandidate) const 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski if(rCandidate.mpSdrSceneAttribute == mpSdrSceneAttribute) 163*b1cdbd2cSJim Jagielski { 164*b1cdbd2cSJim Jagielski return true; 165*b1cdbd2cSJim Jagielski } 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski return false; 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski return (*rCandidate.mpSdrSceneAttribute == *mpSdrSceneAttribute); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski getDistance() const175*b1cdbd2cSJim Jagielski double SdrSceneAttribute::getDistance() const 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute->getDistance(); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski getShadowSlant() const180*b1cdbd2cSJim Jagielski double SdrSceneAttribute::getShadowSlant() const 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute->getShadowSlant(); 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski getProjectionMode() const185*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ProjectionMode SdrSceneAttribute::getProjectionMode() const 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute->getProjectionMode(); 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski getShadeMode() const190*b1cdbd2cSJim Jagielski ::com::sun::star::drawing::ShadeMode SdrSceneAttribute::getShadeMode() const 191*b1cdbd2cSJim Jagielski { 192*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute->getShadeMode(); 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski getTwoSidedLighting() const195*b1cdbd2cSJim Jagielski bool SdrSceneAttribute::getTwoSidedLighting() const 196*b1cdbd2cSJim Jagielski { 197*b1cdbd2cSJim Jagielski return mpSdrSceneAttribute->getTwoSidedLighting(); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski } // end of namespace attribute 201*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 204*b1cdbd2cSJim Jagielski // eof 205