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/fillgradientattribute.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 ImpFillGradientAttribute 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 GradientStyle meStyle; 42*b1cdbd2cSJim Jagielski double mfBorder; 43*b1cdbd2cSJim Jagielski double mfOffsetX; 44*b1cdbd2cSJim Jagielski double mfOffsetY; 45*b1cdbd2cSJim Jagielski double mfAngle; 46*b1cdbd2cSJim Jagielski basegfx::BColor maStartColor; 47*b1cdbd2cSJim Jagielski basegfx::BColor maEndColor; 48*b1cdbd2cSJim Jagielski sal_uInt16 mnSteps; 49*b1cdbd2cSJim Jagielski ImpFillGradientAttribute(GradientStyle eStyle,double fBorder,double fOffsetX,double fOffsetY,double fAngle,const basegfx::BColor & rStartColor,const basegfx::BColor & rEndColor,sal_uInt16 nSteps)50*b1cdbd2cSJim Jagielski ImpFillGradientAttribute( 51*b1cdbd2cSJim Jagielski GradientStyle eStyle, 52*b1cdbd2cSJim Jagielski double fBorder, 53*b1cdbd2cSJim Jagielski double fOffsetX, 54*b1cdbd2cSJim Jagielski double fOffsetY, 55*b1cdbd2cSJim Jagielski double fAngle, 56*b1cdbd2cSJim Jagielski const basegfx::BColor& rStartColor, 57*b1cdbd2cSJim Jagielski const basegfx::BColor& rEndColor, 58*b1cdbd2cSJim Jagielski sal_uInt16 nSteps) 59*b1cdbd2cSJim Jagielski : mnRefCount(0), 60*b1cdbd2cSJim Jagielski meStyle(eStyle), 61*b1cdbd2cSJim Jagielski mfBorder(fBorder), 62*b1cdbd2cSJim Jagielski mfOffsetX(fOffsetX), 63*b1cdbd2cSJim Jagielski mfOffsetY(fOffsetY), 64*b1cdbd2cSJim Jagielski mfAngle(fAngle), 65*b1cdbd2cSJim Jagielski maStartColor(rStartColor), 66*b1cdbd2cSJim Jagielski maEndColor(rEndColor), 67*b1cdbd2cSJim Jagielski mnSteps(nSteps) 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski // data read access getStyle() const72*b1cdbd2cSJim Jagielski GradientStyle getStyle() const { return meStyle; } getBorder() const73*b1cdbd2cSJim Jagielski double getBorder() const { return mfBorder; } getOffsetX() const74*b1cdbd2cSJim Jagielski double getOffsetX() const { return mfOffsetX; } getOffsetY() const75*b1cdbd2cSJim Jagielski double getOffsetY() const { return mfOffsetY; } getAngle() const76*b1cdbd2cSJim Jagielski double getAngle() const { return mfAngle; } getStartColor() const77*b1cdbd2cSJim Jagielski const basegfx::BColor& getStartColor() const { return maStartColor; } getEndColor() const78*b1cdbd2cSJim Jagielski const basegfx::BColor& getEndColor() const { return maEndColor; } getSteps() const79*b1cdbd2cSJim Jagielski sal_uInt16 getSteps() const { return mnSteps; } 80*b1cdbd2cSJim Jagielski operator ==(const ImpFillGradientAttribute & rCandidate) const81*b1cdbd2cSJim Jagielski bool operator==(const ImpFillGradientAttribute& rCandidate) const 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski return (getStyle() == rCandidate.getStyle() 84*b1cdbd2cSJim Jagielski && getBorder() == rCandidate.getBorder() 85*b1cdbd2cSJim Jagielski && getOffsetX() == rCandidate.getOffsetX() 86*b1cdbd2cSJim Jagielski && getOffsetY() == rCandidate.getOffsetY() 87*b1cdbd2cSJim Jagielski && getAngle() == rCandidate.getAngle() 88*b1cdbd2cSJim Jagielski && getStartColor() == rCandidate.getStartColor() 89*b1cdbd2cSJim Jagielski && getEndColor() == rCandidate.getEndColor() 90*b1cdbd2cSJim Jagielski && getSteps() == rCandidate.getSteps()); 91*b1cdbd2cSJim Jagielski } 92*b1cdbd2cSJim Jagielski get_global_default()93*b1cdbd2cSJim Jagielski static ImpFillGradientAttribute* get_global_default() 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski static ImpFillGradientAttribute* pDefault = 0; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski if(!pDefault) 98*b1cdbd2cSJim Jagielski { 99*b1cdbd2cSJim Jagielski pDefault = new ImpFillGradientAttribute( 100*b1cdbd2cSJim Jagielski GRADIENTSTYLE_LINEAR, 101*b1cdbd2cSJim Jagielski 0.0, 0.0, 0.0, 0.0, 102*b1cdbd2cSJim Jagielski basegfx::BColor(), 103*b1cdbd2cSJim Jagielski basegfx::BColor(), 104*b1cdbd2cSJim Jagielski 0); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 107*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski return pDefault; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski }; 113*b1cdbd2cSJim Jagielski FillGradientAttribute(GradientStyle eStyle,double fBorder,double fOffsetX,double fOffsetY,double fAngle,const basegfx::BColor & rStartColor,const basegfx::BColor & rEndColor,sal_uInt16 nSteps)114*b1cdbd2cSJim Jagielski FillGradientAttribute::FillGradientAttribute( 115*b1cdbd2cSJim Jagielski GradientStyle eStyle, 116*b1cdbd2cSJim Jagielski double fBorder, 117*b1cdbd2cSJim Jagielski double fOffsetX, 118*b1cdbd2cSJim Jagielski double fOffsetY, 119*b1cdbd2cSJim Jagielski double fAngle, 120*b1cdbd2cSJim Jagielski const basegfx::BColor& rStartColor, 121*b1cdbd2cSJim Jagielski const basegfx::BColor& rEndColor, 122*b1cdbd2cSJim Jagielski sal_uInt16 nSteps) 123*b1cdbd2cSJim Jagielski : mpFillGradientAttribute(new ImpFillGradientAttribute( 124*b1cdbd2cSJim Jagielski eStyle, fBorder, fOffsetX, fOffsetY, fAngle, rStartColor, rEndColor, nSteps)) 125*b1cdbd2cSJim Jagielski { 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski FillGradientAttribute()128*b1cdbd2cSJim Jagielski FillGradientAttribute::FillGradientAttribute() 129*b1cdbd2cSJim Jagielski : mpFillGradientAttribute(ImpFillGradientAttribute::get_global_default()) 130*b1cdbd2cSJim Jagielski { 131*b1cdbd2cSJim Jagielski mpFillGradientAttribute->mnRefCount++; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski FillGradientAttribute(const FillGradientAttribute & rCandidate)134*b1cdbd2cSJim Jagielski FillGradientAttribute::FillGradientAttribute(const FillGradientAttribute& rCandidate) 135*b1cdbd2cSJim Jagielski : mpFillGradientAttribute(rCandidate.mpFillGradientAttribute) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski mpFillGradientAttribute->mnRefCount++; 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski ~FillGradientAttribute()140*b1cdbd2cSJim Jagielski FillGradientAttribute::~FillGradientAttribute() 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski if(mpFillGradientAttribute->mnRefCount) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski mpFillGradientAttribute->mnRefCount--; 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski else 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski delete mpFillGradientAttribute; 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski } 151*b1cdbd2cSJim Jagielski isDefault() const152*b1cdbd2cSJim Jagielski bool FillGradientAttribute::isDefault() const 153*b1cdbd2cSJim Jagielski { 154*b1cdbd2cSJim Jagielski return mpFillGradientAttribute == ImpFillGradientAttribute::get_global_default(); 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski operator =(const FillGradientAttribute & rCandidate)157*b1cdbd2cSJim Jagielski FillGradientAttribute& FillGradientAttribute::operator=(const FillGradientAttribute& rCandidate) 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski if(rCandidate.mpFillGradientAttribute != mpFillGradientAttribute) 160*b1cdbd2cSJim Jagielski { 161*b1cdbd2cSJim Jagielski if(mpFillGradientAttribute->mnRefCount) 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski mpFillGradientAttribute->mnRefCount--; 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski else 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski delete mpFillGradientAttribute; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski mpFillGradientAttribute = rCandidate.mpFillGradientAttribute; 171*b1cdbd2cSJim Jagielski mpFillGradientAttribute->mnRefCount++; 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski return *this; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski operator ==(const FillGradientAttribute & rCandidate) const177*b1cdbd2cSJim Jagielski bool FillGradientAttribute::operator==(const FillGradientAttribute& rCandidate) const 178*b1cdbd2cSJim Jagielski { 179*b1cdbd2cSJim Jagielski if(rCandidate.mpFillGradientAttribute == mpFillGradientAttribute) 180*b1cdbd2cSJim Jagielski { 181*b1cdbd2cSJim Jagielski return true; 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 185*b1cdbd2cSJim Jagielski { 186*b1cdbd2cSJim Jagielski return false; 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski return (*rCandidate.mpFillGradientAttribute == *mpFillGradientAttribute); 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski getStartColor() const192*b1cdbd2cSJim Jagielski const basegfx::BColor& FillGradientAttribute::getStartColor() const 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getStartColor(); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski getEndColor() const197*b1cdbd2cSJim Jagielski const basegfx::BColor& FillGradientAttribute::getEndColor() const 198*b1cdbd2cSJim Jagielski { 199*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getEndColor(); 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski getBorder() const202*b1cdbd2cSJim Jagielski double FillGradientAttribute::getBorder() const 203*b1cdbd2cSJim Jagielski { 204*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getBorder(); 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski getOffsetX() const207*b1cdbd2cSJim Jagielski double FillGradientAttribute::getOffsetX() const 208*b1cdbd2cSJim Jagielski { 209*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getOffsetX(); 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski getOffsetY() const212*b1cdbd2cSJim Jagielski double FillGradientAttribute::getOffsetY() const 213*b1cdbd2cSJim Jagielski { 214*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getOffsetY(); 215*b1cdbd2cSJim Jagielski } 216*b1cdbd2cSJim Jagielski getAngle() const217*b1cdbd2cSJim Jagielski double FillGradientAttribute::getAngle() const 218*b1cdbd2cSJim Jagielski { 219*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getAngle(); 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski getStyle() const222*b1cdbd2cSJim Jagielski GradientStyle FillGradientAttribute::getStyle() const 223*b1cdbd2cSJim Jagielski { 224*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getStyle(); 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski getSteps() const227*b1cdbd2cSJim Jagielski sal_uInt16 FillGradientAttribute::getSteps() const 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski return mpFillGradientAttribute->getSteps(); 230*b1cdbd2cSJim Jagielski } 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski } // end of namespace attribute 233*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 236*b1cdbd2cSJim Jagielski // eof 237