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/lineattribute.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 ImpLineAttribute 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski public: 39*b1cdbd2cSJim Jagielski // refcounter 40*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski // data definitions 43*b1cdbd2cSJim Jagielski basegfx::BColor maColor; // color 44*b1cdbd2cSJim Jagielski double mfWidth; // absolute line width 45*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin meLineJoin; // type of LineJoin 46*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap meLineCap; // BUTT, ROUND, or SQUARE 47*b1cdbd2cSJim Jagielski ImpLineAttribute(const basegfx::BColor & rColor,double fWidth,basegfx::B2DLineJoin aB2DLineJoin,com::sun::star::drawing::LineCap aLineCap)48*b1cdbd2cSJim Jagielski ImpLineAttribute( 49*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 50*b1cdbd2cSJim Jagielski double fWidth, 51*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin aB2DLineJoin, 52*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap aLineCap) 53*b1cdbd2cSJim Jagielski : mnRefCount(0), 54*b1cdbd2cSJim Jagielski maColor(rColor), 55*b1cdbd2cSJim Jagielski mfWidth(fWidth), 56*b1cdbd2cSJim Jagielski meLineJoin(aB2DLineJoin), 57*b1cdbd2cSJim Jagielski meLineCap(aLineCap) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski } 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski // data read access getColor() const62*b1cdbd2cSJim Jagielski const basegfx::BColor& getColor() const { return maColor; } getWidth() const63*b1cdbd2cSJim Jagielski double getWidth() const { return mfWidth; } getLineJoin() const64*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin getLineJoin() const { return meLineJoin; } getLineCap() const65*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap getLineCap() const { return meLineCap; } 66*b1cdbd2cSJim Jagielski operator ==(const ImpLineAttribute & rCandidate) const67*b1cdbd2cSJim Jagielski bool operator==(const ImpLineAttribute& rCandidate) const 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski return (getColor() == rCandidate.getColor() 70*b1cdbd2cSJim Jagielski && getWidth() == rCandidate.getWidth() 71*b1cdbd2cSJim Jagielski && getLineJoin() == rCandidate.getLineJoin() 72*b1cdbd2cSJim Jagielski && getLineCap() == rCandidate.getLineCap()); 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski get_global_default()75*b1cdbd2cSJim Jagielski static ImpLineAttribute* get_global_default() 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski static ImpLineAttribute* pDefault = 0; 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski if(!pDefault) 80*b1cdbd2cSJim Jagielski { 81*b1cdbd2cSJim Jagielski pDefault = new ImpLineAttribute( 82*b1cdbd2cSJim Jagielski basegfx::BColor(), 83*b1cdbd2cSJim Jagielski 0.0, 84*b1cdbd2cSJim Jagielski basegfx::B2DLINEJOIN_ROUND, 85*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap_BUTT); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 88*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski return pDefault; 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski }; 94*b1cdbd2cSJim Jagielski LineAttribute(const basegfx::BColor & rColor,double fWidth,basegfx::B2DLineJoin aB2DLineJoin,com::sun::star::drawing::LineCap aLineCap)95*b1cdbd2cSJim Jagielski LineAttribute::LineAttribute( 96*b1cdbd2cSJim Jagielski const basegfx::BColor& rColor, 97*b1cdbd2cSJim Jagielski double fWidth, 98*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin aB2DLineJoin, 99*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap aLineCap) 100*b1cdbd2cSJim Jagielski : mpLineAttribute( 101*b1cdbd2cSJim Jagielski new ImpLineAttribute( 102*b1cdbd2cSJim Jagielski rColor, 103*b1cdbd2cSJim Jagielski fWidth, 104*b1cdbd2cSJim Jagielski aB2DLineJoin, 105*b1cdbd2cSJim Jagielski aLineCap)) 106*b1cdbd2cSJim Jagielski { 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski LineAttribute()109*b1cdbd2cSJim Jagielski LineAttribute::LineAttribute() 110*b1cdbd2cSJim Jagielski : mpLineAttribute(ImpLineAttribute::get_global_default()) 111*b1cdbd2cSJim Jagielski { 112*b1cdbd2cSJim Jagielski mpLineAttribute->mnRefCount++; 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski LineAttribute(const LineAttribute & rCandidate)115*b1cdbd2cSJim Jagielski LineAttribute::LineAttribute(const LineAttribute& rCandidate) 116*b1cdbd2cSJim Jagielski : mpLineAttribute(rCandidate.mpLineAttribute) 117*b1cdbd2cSJim Jagielski { 118*b1cdbd2cSJim Jagielski mpLineAttribute->mnRefCount++; 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski ~LineAttribute()121*b1cdbd2cSJim Jagielski LineAttribute::~LineAttribute() 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski if(mpLineAttribute->mnRefCount) 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski mpLineAttribute->mnRefCount--; 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski else 128*b1cdbd2cSJim Jagielski { 129*b1cdbd2cSJim Jagielski delete mpLineAttribute; 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski isDefault() const133*b1cdbd2cSJim Jagielski bool LineAttribute::isDefault() const 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski return mpLineAttribute == ImpLineAttribute::get_global_default(); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski operator =(const LineAttribute & rCandidate)138*b1cdbd2cSJim Jagielski LineAttribute& LineAttribute::operator=(const LineAttribute& rCandidate) 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski if(rCandidate.mpLineAttribute != mpLineAttribute) 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski if(mpLineAttribute->mnRefCount) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski mpLineAttribute->mnRefCount--; 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski else 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski delete mpLineAttribute; 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski mpLineAttribute = rCandidate.mpLineAttribute; 152*b1cdbd2cSJim Jagielski mpLineAttribute->mnRefCount++; 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski return *this; 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski operator ==(const LineAttribute & rCandidate) const158*b1cdbd2cSJim Jagielski bool LineAttribute::operator==(const LineAttribute& rCandidate) const 159*b1cdbd2cSJim Jagielski { 160*b1cdbd2cSJim Jagielski if(rCandidate.mpLineAttribute == mpLineAttribute) 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski return true; 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski return false; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski return (*rCandidate.mpLineAttribute == *mpLineAttribute); 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski getColor() const173*b1cdbd2cSJim Jagielski const basegfx::BColor& LineAttribute::getColor() const 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski return mpLineAttribute->getColor(); 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski getWidth() const178*b1cdbd2cSJim Jagielski double LineAttribute::getWidth() const 179*b1cdbd2cSJim Jagielski { 180*b1cdbd2cSJim Jagielski return mpLineAttribute->getWidth(); 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski getLineJoin() const183*b1cdbd2cSJim Jagielski basegfx::B2DLineJoin LineAttribute::getLineJoin() const 184*b1cdbd2cSJim Jagielski { 185*b1cdbd2cSJim Jagielski return mpLineAttribute->getLineJoin(); 186*b1cdbd2cSJim Jagielski } 187*b1cdbd2cSJim Jagielski getLineCap() const188*b1cdbd2cSJim Jagielski com::sun::star::drawing::LineCap LineAttribute::getLineCap() const 189*b1cdbd2cSJim Jagielski { 190*b1cdbd2cSJim Jagielski return mpLineAttribute->getLineCap(); 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski } // end of namespace attribute 194*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 197*b1cdbd2cSJim Jagielski // eof 198