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 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_drawinglayer.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <drawinglayer/attribute/materialattribute3d.hxx> 28*b1cdbd2cSJim Jagielski #include <basegfx/color/bcolor.hxx> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski namespace drawinglayer 33*b1cdbd2cSJim Jagielski { 34*b1cdbd2cSJim Jagielski namespace attribute 35*b1cdbd2cSJim Jagielski { 36*b1cdbd2cSJim Jagielski class ImpMaterialAttribute3D 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski public: 39*b1cdbd2cSJim Jagielski // refcounter 40*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski // materialAttribute3D definitions 43*b1cdbd2cSJim Jagielski basegfx::BColor maColor; // object color 44*b1cdbd2cSJim Jagielski basegfx::BColor maSpecular; // material specular color 45*b1cdbd2cSJim Jagielski basegfx::BColor maEmission; // material emissive color 46*b1cdbd2cSJim Jagielski sal_uInt16 mnSpecularIntensity; // material specular intensity [0..128] 47*b1cdbd2cSJim Jagielski ImpMaterialAttribute3D(const basegfx::BColor & rColor,const basegfx::BColor & rSpecular,const basegfx::BColor & rEmission,sal_uInt16 nSpecularIntensity)48*b1cdbd2cSJim Jagielski ImpMaterialAttribute3D(const basegfx::BColor& rColor, const basegfx::BColor& rSpecular, const basegfx::BColor& rEmission, sal_uInt16 nSpecularIntensity) 49*b1cdbd2cSJim Jagielski : mnRefCount(0), 50*b1cdbd2cSJim Jagielski maColor(rColor), 51*b1cdbd2cSJim Jagielski maSpecular(rSpecular), 52*b1cdbd2cSJim Jagielski maEmission(rEmission), 53*b1cdbd2cSJim Jagielski mnSpecularIntensity(nSpecularIntensity) 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski ImpMaterialAttribute3D(const basegfx::BColor & rColor)57*b1cdbd2cSJim Jagielski ImpMaterialAttribute3D(const basegfx::BColor& rColor) 58*b1cdbd2cSJim Jagielski : mnRefCount(0), 59*b1cdbd2cSJim Jagielski maColor(rColor), 60*b1cdbd2cSJim Jagielski maSpecular(1.0, 1.0, 1.0), 61*b1cdbd2cSJim Jagielski maEmission(), 62*b1cdbd2cSJim Jagielski mnSpecularIntensity(15) 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski } 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski // data read access getColor() const67*b1cdbd2cSJim Jagielski const basegfx::BColor& getColor() const { return maColor; } getSpecular() const68*b1cdbd2cSJim Jagielski const basegfx::BColor& getSpecular() const { return maSpecular; } getEmission() const69*b1cdbd2cSJim Jagielski const basegfx::BColor& getEmission() const { return maEmission; } getSpecularIntensity() const70*b1cdbd2cSJim Jagielski sal_uInt16 getSpecularIntensity() const { return mnSpecularIntensity; } 71*b1cdbd2cSJim Jagielski operator ==(const ImpMaterialAttribute3D & rCandidate) const72*b1cdbd2cSJim Jagielski bool operator==(const ImpMaterialAttribute3D& rCandidate) const 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski return (getColor() == rCandidate.getColor() 75*b1cdbd2cSJim Jagielski && getSpecular() == rCandidate.getSpecular() 76*b1cdbd2cSJim Jagielski && getEmission() == rCandidate.getEmission() 77*b1cdbd2cSJim Jagielski && getSpecularIntensity() == rCandidate.getSpecularIntensity()); 78*b1cdbd2cSJim Jagielski } 79*b1cdbd2cSJim Jagielski get_global_default()80*b1cdbd2cSJim Jagielski static ImpMaterialAttribute3D* get_global_default() 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski static ImpMaterialAttribute3D* pDefault = 0; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski if(!pDefault) 85*b1cdbd2cSJim Jagielski { 86*b1cdbd2cSJim Jagielski pDefault = new ImpMaterialAttribute3D( 87*b1cdbd2cSJim Jagielski basegfx::BColor(), 88*b1cdbd2cSJim Jagielski basegfx::BColor(), 89*b1cdbd2cSJim Jagielski basegfx::BColor(), 90*b1cdbd2cSJim Jagielski 0); 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 MaterialAttribute3D(const basegfx::BColor & rColor,const basegfx::BColor & rSpecular,const basegfx::BColor & rEmission,sal_uInt16 nSpecularIntensity)100*b1cdbd2cSJim Jagielski MaterialAttribute3D::MaterialAttribute3D( 101*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 102*b1cdbd2cSJim Jagielski const basegfx::BColor& rSpecular, 103*b1cdbd2cSJim Jagielski const basegfx::BColor& rEmission, 104*b1cdbd2cSJim Jagielski sal_uInt16 nSpecularIntensity) 105*b1cdbd2cSJim Jagielski : mpMaterialAttribute3D(new ImpMaterialAttribute3D( 106*b1cdbd2cSJim Jagielski rColor, rSpecular, rEmission, nSpecularIntensity)) 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski MaterialAttribute3D(const basegfx::BColor & rColor)110*b1cdbd2cSJim Jagielski MaterialAttribute3D::MaterialAttribute3D( 111*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor) 112*b1cdbd2cSJim Jagielski : mpMaterialAttribute3D(new ImpMaterialAttribute3D(rColor)) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski MaterialAttribute3D()116*b1cdbd2cSJim Jagielski MaterialAttribute3D::MaterialAttribute3D() 117*b1cdbd2cSJim Jagielski : mpMaterialAttribute3D(ImpMaterialAttribute3D::get_global_default()) 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski mpMaterialAttribute3D->mnRefCount++; 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski MaterialAttribute3D(const MaterialAttribute3D & rCandidate)122*b1cdbd2cSJim Jagielski MaterialAttribute3D::MaterialAttribute3D(const MaterialAttribute3D& rCandidate) 123*b1cdbd2cSJim Jagielski : mpMaterialAttribute3D(rCandidate.mpMaterialAttribute3D) 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski mpMaterialAttribute3D->mnRefCount++; 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski ~MaterialAttribute3D()128*b1cdbd2cSJim Jagielski MaterialAttribute3D::~MaterialAttribute3D() 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski if(mpMaterialAttribute3D->mnRefCount) 131*b1cdbd2cSJim Jagielski { 132*b1cdbd2cSJim Jagielski mpMaterialAttribute3D->mnRefCount--; 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski else 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski delete mpMaterialAttribute3D; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski isDefault() const140*b1cdbd2cSJim Jagielski bool MaterialAttribute3D::isDefault() const 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski return mpMaterialAttribute3D == ImpMaterialAttribute3D::get_global_default(); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski operator =(const MaterialAttribute3D & rCandidate)145*b1cdbd2cSJim Jagielski MaterialAttribute3D& MaterialAttribute3D::operator=(const MaterialAttribute3D& rCandidate) 146*b1cdbd2cSJim Jagielski { 147*b1cdbd2cSJim Jagielski if(rCandidate.mpMaterialAttribute3D != mpMaterialAttribute3D) 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski if(mpMaterialAttribute3D->mnRefCount) 150*b1cdbd2cSJim Jagielski { 151*b1cdbd2cSJim Jagielski mpMaterialAttribute3D->mnRefCount--; 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski else 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski delete mpMaterialAttribute3D; 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski mpMaterialAttribute3D = rCandidate.mpMaterialAttribute3D; 159*b1cdbd2cSJim Jagielski mpMaterialAttribute3D->mnRefCount++; 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski return *this; 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski operator ==(const MaterialAttribute3D & rCandidate) const165*b1cdbd2cSJim Jagielski bool MaterialAttribute3D::operator==(const MaterialAttribute3D& rCandidate) const 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski if(rCandidate.mpMaterialAttribute3D == mpMaterialAttribute3D) 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski return true; 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 173*b1cdbd2cSJim Jagielski { 174*b1cdbd2cSJim Jagielski return false; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski return (*rCandidate.mpMaterialAttribute3D == *mpMaterialAttribute3D); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski getColor() const180*b1cdbd2cSJim Jagielski const basegfx::BColor& MaterialAttribute3D::getColor() const 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski return mpMaterialAttribute3D->getColor(); 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski getSpecular() const185*b1cdbd2cSJim Jagielski const basegfx::BColor& MaterialAttribute3D::getSpecular() const 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski return mpMaterialAttribute3D->getSpecular(); 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski getEmission() const190*b1cdbd2cSJim Jagielski const basegfx::BColor& MaterialAttribute3D::getEmission() const 191*b1cdbd2cSJim Jagielski { 192*b1cdbd2cSJim Jagielski return mpMaterialAttribute3D->getEmission(); 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski getSpecularIntensity() const195*b1cdbd2cSJim Jagielski sal_uInt16 MaterialAttribute3D::getSpecularIntensity() const 196*b1cdbd2cSJim Jagielski { 197*b1cdbd2cSJim Jagielski return mpMaterialAttribute3D->getSpecularIntensity(); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski } // end of namespace attribute 200*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 203*b1cdbd2cSJim Jagielski // eof 204