1035a2f44SArmin Le Grand /************************************************************** 2035a2f44SArmin Le Grand * 3035a2f44SArmin Le Grand * Licensed to the Apache Software Foundation (ASF) under one 4035a2f44SArmin Le Grand * or more contributor license agreements. See the NOTICE file 5035a2f44SArmin Le Grand * distributed with this work for additional information 6035a2f44SArmin Le Grand * regarding copyright ownership. The ASF licenses this file 7035a2f44SArmin Le Grand * to you under the Apache License, Version 2.0 (the 8035a2f44SArmin Le Grand * "License"); you may not use this file except in compliance 9035a2f44SArmin Le Grand * with the License. You may obtain a copy of the License at 10035a2f44SArmin Le Grand * 11035a2f44SArmin Le Grand * http://www.apache.org/licenses/LICENSE-2.0 12035a2f44SArmin Le Grand * 13035a2f44SArmin Le Grand * Unless required by applicable law or agreed to in writing, 14035a2f44SArmin Le Grand * software distributed under the License is distributed on an 15035a2f44SArmin Le Grand * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16035a2f44SArmin Le Grand * KIND, either express or implied. See the License for the 17035a2f44SArmin Le Grand * specific language governing permissions and limitations 18035a2f44SArmin Le Grand * under the License. 19035a2f44SArmin Le Grand * 20035a2f44SArmin Le Grand *************************************************************/ 21035a2f44SArmin Le Grand 22035a2f44SArmin Le Grand 23035a2f44SArmin Le Grand 24035a2f44SArmin Le Grand // MARKER(update_precomp.py): autogen include statement, do not remove 25035a2f44SArmin Le Grand #include "precompiled_drawinglayer.hxx" 26035a2f44SArmin Le Grand 27035a2f44SArmin Le Grand #include <drawinglayer/attribute/fillgraphicattribute.hxx> 28035a2f44SArmin Le Grand #include <vcl/graph.hxx> 29035a2f44SArmin Le Grand 30035a2f44SArmin Le Grand ////////////////////////////////////////////////////////////////////////////// 31035a2f44SArmin Le Grand 32035a2f44SArmin Le Grand namespace drawinglayer 33035a2f44SArmin Le Grand { 34035a2f44SArmin Le Grand namespace attribute 35035a2f44SArmin Le Grand { 36035a2f44SArmin Le Grand class ImpFillGraphicAttribute 37035a2f44SArmin Le Grand { 38035a2f44SArmin Le Grand public: 39035a2f44SArmin Le Grand // refcounter 40035a2f44SArmin Le Grand sal_uInt32 mnRefCount; 41035a2f44SArmin Le Grand 42035a2f44SArmin Le Grand // data definitions 43035a2f44SArmin Le Grand Graphic maGraphic; 44035a2f44SArmin Le Grand basegfx::B2DRange maGraphicRange; 45035a2f44SArmin Le Grand 46035a2f44SArmin Le Grand // tiling definitions, offsets in X/Y in percent for each 2nd row. 47035a2f44SArmin Le Grand // If both are set, Y is ignored (X has precedence) 48035a2f44SArmin Le Grand double mfOffsetX; 49035a2f44SArmin Le Grand double mfOffsetY; 50035a2f44SArmin Le Grand 51035a2f44SArmin Le Grand // bitfield 52035a2f44SArmin Le Grand unsigned mbTiling : 1; 53035a2f44SArmin Le Grand 54035a2f44SArmin Le Grand ImpFillGraphicAttribute( 55035a2f44SArmin Le Grand const Graphic& rGraphic, 56035a2f44SArmin Le Grand const basegfx::B2DRange& rGraphicRange, 57035a2f44SArmin Le Grand bool bTiling, 58035a2f44SArmin Le Grand double fOffsetX, 59035a2f44SArmin Le Grand double fOffsetY) 60035a2f44SArmin Le Grand : mnRefCount(0), 61035a2f44SArmin Le Grand maGraphic(rGraphic), 62035a2f44SArmin Le Grand maGraphicRange(rGraphicRange), 63035a2f44SArmin Le Grand mfOffsetX(fOffsetX), 64*74e5dc1dSPavel Janík mfOffsetY(fOffsetY), 65*74e5dc1dSPavel Janík mbTiling(bTiling) 66035a2f44SArmin Le Grand { 67035a2f44SArmin Le Grand } 68035a2f44SArmin Le Grand 69035a2f44SArmin Le Grand // data read access 70035a2f44SArmin Le Grand const Graphic& getGraphic() const { return maGraphic; } 71035a2f44SArmin Le Grand const basegfx::B2DRange& getGraphicRange() const { return maGraphicRange; } 72035a2f44SArmin Le Grand bool getTiling() const { return mbTiling; } 73035a2f44SArmin Le Grand double getOffsetX() const { return mfOffsetX; } 74035a2f44SArmin Le Grand double getOffsetY() const { return mfOffsetY; } 75035a2f44SArmin Le Grand 76035a2f44SArmin Le Grand bool operator==(const ImpFillGraphicAttribute& rCandidate) const 77035a2f44SArmin Le Grand { 78035a2f44SArmin Le Grand return (getGraphic() == rCandidate.getGraphic() 79035a2f44SArmin Le Grand && getGraphicRange() == rCandidate.getGraphicRange() 80035a2f44SArmin Le Grand && getTiling() == rCandidate.getTiling() 81035a2f44SArmin Le Grand && getOffsetX() == rCandidate.getOffsetX() 82035a2f44SArmin Le Grand && getOffsetY() == rCandidate.getOffsetY()); 83035a2f44SArmin Le Grand } 84035a2f44SArmin Le Grand 85035a2f44SArmin Le Grand static ImpFillGraphicAttribute* get_global_default() 86035a2f44SArmin Le Grand { 87035a2f44SArmin Le Grand static ImpFillGraphicAttribute* pDefault = 0; 88035a2f44SArmin Le Grand 89035a2f44SArmin Le Grand if(!pDefault) 90035a2f44SArmin Le Grand { 91035a2f44SArmin Le Grand pDefault = new ImpFillGraphicAttribute( 92035a2f44SArmin Le Grand Graphic(), 93035a2f44SArmin Le Grand basegfx::B2DRange(), 94035a2f44SArmin Le Grand false, 95035a2f44SArmin Le Grand 0.0, 96035a2f44SArmin Le Grand 0.0); 97035a2f44SArmin Le Grand 98035a2f44SArmin Le Grand // never delete; start with RefCount 1, not 0 99035a2f44SArmin Le Grand pDefault->mnRefCount++; 100035a2f44SArmin Le Grand } 101035a2f44SArmin Le Grand 102035a2f44SArmin Le Grand return pDefault; 103035a2f44SArmin Le Grand } 104035a2f44SArmin Le Grand }; 105035a2f44SArmin Le Grand 106035a2f44SArmin Le Grand FillGraphicAttribute::FillGraphicAttribute( 107035a2f44SArmin Le Grand const Graphic& rGraphic, 108035a2f44SArmin Le Grand const basegfx::B2DRange& rGraphicRange, 109035a2f44SArmin Le Grand bool bTiling, 110035a2f44SArmin Le Grand double fOffsetX, 111035a2f44SArmin Le Grand double fOffsetY) 112035a2f44SArmin Le Grand : mpFillGraphicAttribute( 113035a2f44SArmin Le Grand new ImpFillGraphicAttribute( 114035a2f44SArmin Le Grand rGraphic, 115035a2f44SArmin Le Grand rGraphicRange, 116035a2f44SArmin Le Grand bTiling, 117035a2f44SArmin Le Grand basegfx::clamp(fOffsetX, 0.0, 1.0), 118035a2f44SArmin Le Grand basegfx::clamp(fOffsetY, 0.0, 1.0))) 119035a2f44SArmin Le Grand { 120035a2f44SArmin Le Grand } 121035a2f44SArmin Le Grand 122035a2f44SArmin Le Grand FillGraphicAttribute::FillGraphicAttribute() 123035a2f44SArmin Le Grand : mpFillGraphicAttribute(ImpFillGraphicAttribute::get_global_default()) 124035a2f44SArmin Le Grand { 125035a2f44SArmin Le Grand mpFillGraphicAttribute->mnRefCount++; 126035a2f44SArmin Le Grand } 127035a2f44SArmin Le Grand 128035a2f44SArmin Le Grand FillGraphicAttribute::FillGraphicAttribute(const FillGraphicAttribute& rCandidate) 129035a2f44SArmin Le Grand : mpFillGraphicAttribute(rCandidate.mpFillGraphicAttribute) 130035a2f44SArmin Le Grand { 131035a2f44SArmin Le Grand mpFillGraphicAttribute->mnRefCount++; 132035a2f44SArmin Le Grand } 133035a2f44SArmin Le Grand 134035a2f44SArmin Le Grand FillGraphicAttribute::~FillGraphicAttribute() 135035a2f44SArmin Le Grand { 136035a2f44SArmin Le Grand if(mpFillGraphicAttribute->mnRefCount) 137035a2f44SArmin Le Grand { 138035a2f44SArmin Le Grand mpFillGraphicAttribute->mnRefCount--; 139035a2f44SArmin Le Grand } 140035a2f44SArmin Le Grand else 141035a2f44SArmin Le Grand { 142035a2f44SArmin Le Grand delete mpFillGraphicAttribute; 143035a2f44SArmin Le Grand } 144035a2f44SArmin Le Grand } 145035a2f44SArmin Le Grand 146035a2f44SArmin Le Grand bool FillGraphicAttribute::isDefault() const 147035a2f44SArmin Le Grand { 148035a2f44SArmin Le Grand return mpFillGraphicAttribute == ImpFillGraphicAttribute::get_global_default(); 149035a2f44SArmin Le Grand } 150035a2f44SArmin Le Grand 151035a2f44SArmin Le Grand FillGraphicAttribute& FillGraphicAttribute::operator=(const FillGraphicAttribute& rCandidate) 152035a2f44SArmin Le Grand { 153035a2f44SArmin Le Grand if(rCandidate.mpFillGraphicAttribute != mpFillGraphicAttribute) 154035a2f44SArmin Le Grand { 155035a2f44SArmin Le Grand if(mpFillGraphicAttribute->mnRefCount) 156035a2f44SArmin Le Grand { 157035a2f44SArmin Le Grand mpFillGraphicAttribute->mnRefCount--; 158035a2f44SArmin Le Grand } 159035a2f44SArmin Le Grand else 160035a2f44SArmin Le Grand { 161035a2f44SArmin Le Grand delete mpFillGraphicAttribute; 162035a2f44SArmin Le Grand } 163035a2f44SArmin Le Grand 164035a2f44SArmin Le Grand mpFillGraphicAttribute = rCandidate.mpFillGraphicAttribute; 165035a2f44SArmin Le Grand mpFillGraphicAttribute->mnRefCount++; 166035a2f44SArmin Le Grand } 167035a2f44SArmin Le Grand 168035a2f44SArmin Le Grand return *this; 169035a2f44SArmin Le Grand } 170035a2f44SArmin Le Grand 171035a2f44SArmin Le Grand bool FillGraphicAttribute::operator==(const FillGraphicAttribute& rCandidate) const 172035a2f44SArmin Le Grand { 173035a2f44SArmin Le Grand if(rCandidate.mpFillGraphicAttribute == mpFillGraphicAttribute) 174035a2f44SArmin Le Grand { 175035a2f44SArmin Le Grand return true; 176035a2f44SArmin Le Grand } 177035a2f44SArmin Le Grand 178035a2f44SArmin Le Grand if(rCandidate.isDefault() != isDefault()) 179035a2f44SArmin Le Grand { 180035a2f44SArmin Le Grand return false; 181035a2f44SArmin Le Grand } 182035a2f44SArmin Le Grand 183035a2f44SArmin Le Grand return (*rCandidate.mpFillGraphicAttribute == *mpFillGraphicAttribute); 184035a2f44SArmin Le Grand } 185035a2f44SArmin Le Grand 186035a2f44SArmin Le Grand const Graphic& FillGraphicAttribute::getGraphic() const 187035a2f44SArmin Le Grand { 188035a2f44SArmin Le Grand return mpFillGraphicAttribute->getGraphic(); 189035a2f44SArmin Le Grand } 190035a2f44SArmin Le Grand 191035a2f44SArmin Le Grand const basegfx::B2DRange& FillGraphicAttribute::getGraphicRange() const 192035a2f44SArmin Le Grand { 193035a2f44SArmin Le Grand return mpFillGraphicAttribute->getGraphicRange(); 194035a2f44SArmin Le Grand } 195035a2f44SArmin Le Grand 196035a2f44SArmin Le Grand bool FillGraphicAttribute::getTiling() const 197035a2f44SArmin Le Grand { 198035a2f44SArmin Le Grand return mpFillGraphicAttribute->getTiling(); 199035a2f44SArmin Le Grand } 200035a2f44SArmin Le Grand 201035a2f44SArmin Le Grand double FillGraphicAttribute::getOffsetX() const 202035a2f44SArmin Le Grand { 203035a2f44SArmin Le Grand return mpFillGraphicAttribute->getOffsetX(); 204035a2f44SArmin Le Grand } 205035a2f44SArmin Le Grand 206035a2f44SArmin Le Grand double FillGraphicAttribute::getOffsetY() const 207035a2f44SArmin Le Grand { 208035a2f44SArmin Le Grand return mpFillGraphicAttribute->getOffsetY(); 209035a2f44SArmin Le Grand } 210035a2f44SArmin Le Grand 211035a2f44SArmin Le Grand } // end of namespace attribute 212035a2f44SArmin Le Grand } // end of namespace drawinglayer 213035a2f44SArmin Le Grand 214035a2f44SArmin Le Grand ////////////////////////////////////////////////////////////////////////////// 215035a2f44SArmin Le Grand // eof 216