xref: /trunk/main/drawinglayer/source/attribute/fillhatchattribute.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
14bfbcde8SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
34bfbcde8SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
44bfbcde8SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
54bfbcde8SAndrew Rist  * distributed with this work for additional information
64bfbcde8SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
74bfbcde8SAndrew Rist  * to you under the Apache License, Version 2.0 (the
84bfbcde8SAndrew Rist  * "License"); you may not use this file except in compliance
94bfbcde8SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
114bfbcde8SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
134bfbcde8SAndrew Rist  * Unless required by applicable law or agreed to in writing,
144bfbcde8SAndrew Rist  * software distributed under the License is distributed on an
154bfbcde8SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
164bfbcde8SAndrew Rist  * KIND, either express or implied.  See the License for the
174bfbcde8SAndrew Rist  * specific language governing permissions and limitations
184bfbcde8SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
204bfbcde8SAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_drawinglayer.hxx"
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #include <drawinglayer/attribute/fillhatchattribute.hxx>
26cdf0e10cSrcweir #include <basegfx/color/bcolor.hxx>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
29cdf0e10cSrcweir 
30cdf0e10cSrcweir namespace drawinglayer
31cdf0e10cSrcweir {
32cdf0e10cSrcweir     namespace attribute
33cdf0e10cSrcweir     {
34cdf0e10cSrcweir         class ImpFillHatchAttribute
35cdf0e10cSrcweir         {
36cdf0e10cSrcweir         public:
37cdf0e10cSrcweir             // refcounter
38cdf0e10cSrcweir             sal_uInt32                              mnRefCount;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir             // data definitions
41cdf0e10cSrcweir             HatchStyle                              meStyle;
42cdf0e10cSrcweir             double                                  mfDistance;
43cdf0e10cSrcweir             double                                  mfAngle;
44cdf0e10cSrcweir             basegfx::BColor                         maColor;
45*0702bc67SArmin Le Grand             sal_uInt32                              mnMinimalDiscreteDistance;
46cdf0e10cSrcweir 
47cdf0e10cSrcweir             // bitfield
48cdf0e10cSrcweir             unsigned                                mbFillBackground : 1;
49cdf0e10cSrcweir 
ImpFillHatchAttribute(HatchStyle eStyle,double fDistance,double fAngle,const basegfx::BColor & rColor,sal_uInt32 nMinimalDiscreteDistance,bool bFillBackground)50cdf0e10cSrcweir             ImpFillHatchAttribute(
51cdf0e10cSrcweir                 HatchStyle eStyle,
52cdf0e10cSrcweir                 double fDistance,
53cdf0e10cSrcweir                 double fAngle,
54cdf0e10cSrcweir                 const basegfx::BColor& rColor,
55*0702bc67SArmin Le Grand                 sal_uInt32 nMinimalDiscreteDistance,
56cdf0e10cSrcweir                 bool bFillBackground)
57cdf0e10cSrcweir             :   mnRefCount(0),
58cdf0e10cSrcweir                 meStyle(eStyle),
59cdf0e10cSrcweir                 mfDistance(fDistance),
60cdf0e10cSrcweir                 mfAngle(fAngle),
61cdf0e10cSrcweir                 maColor(rColor),
62*0702bc67SArmin Le Grand                 mnMinimalDiscreteDistance(nMinimalDiscreteDistance),
63cdf0e10cSrcweir                 mbFillBackground(bFillBackground)
64cdf0e10cSrcweir             {
65cdf0e10cSrcweir             }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir             // data read access
getStyle() const68cdf0e10cSrcweir             HatchStyle getStyle() const { return meStyle; }
getDistance() const69cdf0e10cSrcweir             double getDistance() const { return mfDistance; }
getAngle() const70cdf0e10cSrcweir             double getAngle() const { return mfAngle; }
getColor() const71cdf0e10cSrcweir             const basegfx::BColor& getColor() const { return maColor; }
getMinimalDiscreteDistance() const72*0702bc67SArmin Le Grand             sal_uInt32 getMinimalDiscreteDistance() const { return mnMinimalDiscreteDistance; }
isFillBackground() const73cdf0e10cSrcweir             bool isFillBackground() const { return mbFillBackground; }
74cdf0e10cSrcweir 
operator ==(const ImpFillHatchAttribute & rCandidate) const75cdf0e10cSrcweir             bool operator==(const ImpFillHatchAttribute& rCandidate) const
76cdf0e10cSrcweir             {
77cdf0e10cSrcweir                 return (getStyle() == rCandidate.getStyle()
78cdf0e10cSrcweir                     && getDistance() == rCandidate.getDistance()
79cdf0e10cSrcweir                     && getAngle() == rCandidate.getAngle()
80cdf0e10cSrcweir                     && getColor() == rCandidate.getColor()
81*0702bc67SArmin Le Grand                     && getMinimalDiscreteDistance() == rCandidate.getMinimalDiscreteDistance()
82cdf0e10cSrcweir                     && isFillBackground() == rCandidate.isFillBackground());
83cdf0e10cSrcweir             }
84cdf0e10cSrcweir 
get_global_default()85cdf0e10cSrcweir             static ImpFillHatchAttribute* get_global_default()
86cdf0e10cSrcweir             {
87cdf0e10cSrcweir                 static ImpFillHatchAttribute* pDefault = 0;
88cdf0e10cSrcweir 
89cdf0e10cSrcweir                 if(!pDefault)
90cdf0e10cSrcweir                 {
91cdf0e10cSrcweir                     pDefault = new ImpFillHatchAttribute(
92cdf0e10cSrcweir                         HATCHSTYLE_SINGLE,
93cdf0e10cSrcweir                         0.0, 0.0,
94cdf0e10cSrcweir                         basegfx::BColor(),
95*0702bc67SArmin Le Grand                         3, // same as VCL
96cdf0e10cSrcweir                         false);
97cdf0e10cSrcweir 
98cdf0e10cSrcweir                     // never delete; start with RefCount 1, not 0
99cdf0e10cSrcweir                     pDefault->mnRefCount++;
100cdf0e10cSrcweir                 }
101cdf0e10cSrcweir 
102cdf0e10cSrcweir                 return pDefault;
103cdf0e10cSrcweir             }
104cdf0e10cSrcweir         };
105cdf0e10cSrcweir 
FillHatchAttribute(HatchStyle eStyle,double fDistance,double fAngle,const basegfx::BColor & rColor,sal_uInt32 nMinimalDiscreteDistance,bool bFillBackground)106cdf0e10cSrcweir         FillHatchAttribute::FillHatchAttribute(
107cdf0e10cSrcweir             HatchStyle eStyle,
108cdf0e10cSrcweir             double fDistance,
109cdf0e10cSrcweir             double fAngle,
110cdf0e10cSrcweir             const basegfx::BColor& rColor,
111*0702bc67SArmin Le Grand             sal_uInt32 nMinimalDiscreteDistance,
112cdf0e10cSrcweir             bool bFillBackground)
113*0702bc67SArmin Le Grand         :   mpFillHatchAttribute(
114*0702bc67SArmin Le Grand                 new ImpFillHatchAttribute(
115*0702bc67SArmin Le Grand                     eStyle,
116*0702bc67SArmin Le Grand                     fDistance,
117*0702bc67SArmin Le Grand                     fAngle,
118*0702bc67SArmin Le Grand                     rColor,
119*0702bc67SArmin Le Grand                     nMinimalDiscreteDistance,
120*0702bc67SArmin Le Grand                     bFillBackground))
121cdf0e10cSrcweir         {
122cdf0e10cSrcweir         }
123cdf0e10cSrcweir 
FillHatchAttribute()124cdf0e10cSrcweir         FillHatchAttribute::FillHatchAttribute()
125cdf0e10cSrcweir         :   mpFillHatchAttribute(ImpFillHatchAttribute::get_global_default())
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             mpFillHatchAttribute->mnRefCount++;
128cdf0e10cSrcweir         }
129cdf0e10cSrcweir 
FillHatchAttribute(const FillHatchAttribute & rCandidate)130cdf0e10cSrcweir         FillHatchAttribute::FillHatchAttribute(const FillHatchAttribute& rCandidate)
131cdf0e10cSrcweir         :   mpFillHatchAttribute(rCandidate.mpFillHatchAttribute)
132cdf0e10cSrcweir         {
133cdf0e10cSrcweir             mpFillHatchAttribute->mnRefCount++;
134cdf0e10cSrcweir         }
135cdf0e10cSrcweir 
~FillHatchAttribute()136cdf0e10cSrcweir         FillHatchAttribute::~FillHatchAttribute()
137cdf0e10cSrcweir         {
138cdf0e10cSrcweir             if(mpFillHatchAttribute->mnRefCount)
139cdf0e10cSrcweir             {
140cdf0e10cSrcweir                 mpFillHatchAttribute->mnRefCount--;
141cdf0e10cSrcweir             }
142cdf0e10cSrcweir             else
143cdf0e10cSrcweir             {
144cdf0e10cSrcweir                 delete mpFillHatchAttribute;
145cdf0e10cSrcweir             }
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir 
isDefault() const148cdf0e10cSrcweir         bool FillHatchAttribute::isDefault() const
149cdf0e10cSrcweir         {
150cdf0e10cSrcweir             return mpFillHatchAttribute == ImpFillHatchAttribute::get_global_default();
151cdf0e10cSrcweir         }
152cdf0e10cSrcweir 
operator =(const FillHatchAttribute & rCandidate)153cdf0e10cSrcweir         FillHatchAttribute& FillHatchAttribute::operator=(const FillHatchAttribute& rCandidate)
154cdf0e10cSrcweir         {
155cdf0e10cSrcweir             if(rCandidate.mpFillHatchAttribute != mpFillHatchAttribute)
156cdf0e10cSrcweir             {
157cdf0e10cSrcweir                 if(mpFillHatchAttribute->mnRefCount)
158cdf0e10cSrcweir                 {
159cdf0e10cSrcweir                     mpFillHatchAttribute->mnRefCount--;
160cdf0e10cSrcweir                 }
161cdf0e10cSrcweir                 else
162cdf0e10cSrcweir                 {
163cdf0e10cSrcweir                     delete mpFillHatchAttribute;
164cdf0e10cSrcweir                 }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir                 mpFillHatchAttribute = rCandidate.mpFillHatchAttribute;
167cdf0e10cSrcweir                 mpFillHatchAttribute->mnRefCount++;
168cdf0e10cSrcweir             }
169cdf0e10cSrcweir 
170cdf0e10cSrcweir             return *this;
171cdf0e10cSrcweir         }
172cdf0e10cSrcweir 
operator ==(const FillHatchAttribute & rCandidate) const173cdf0e10cSrcweir         bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const
174cdf0e10cSrcweir         {
175cdf0e10cSrcweir             if(rCandidate.mpFillHatchAttribute == mpFillHatchAttribute)
176cdf0e10cSrcweir             {
177cdf0e10cSrcweir                 return true;
178cdf0e10cSrcweir             }
179cdf0e10cSrcweir 
180cdf0e10cSrcweir             if(rCandidate.isDefault() != isDefault())
181cdf0e10cSrcweir             {
182cdf0e10cSrcweir                 return false;
183cdf0e10cSrcweir             }
184cdf0e10cSrcweir 
185cdf0e10cSrcweir             return (*rCandidate.mpFillHatchAttribute == *mpFillHatchAttribute);
186cdf0e10cSrcweir         }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir         // data read access
getStyle() const189cdf0e10cSrcweir         HatchStyle FillHatchAttribute::getStyle() const
190cdf0e10cSrcweir         {
191cdf0e10cSrcweir             return mpFillHatchAttribute->getStyle();
192cdf0e10cSrcweir         }
193cdf0e10cSrcweir 
getDistance() const194cdf0e10cSrcweir         double FillHatchAttribute::getDistance() const
195cdf0e10cSrcweir         {
196cdf0e10cSrcweir             return mpFillHatchAttribute->getDistance();
197cdf0e10cSrcweir         }
198cdf0e10cSrcweir 
getAngle() const199cdf0e10cSrcweir         double FillHatchAttribute::getAngle() const
200cdf0e10cSrcweir         {
201cdf0e10cSrcweir             return mpFillHatchAttribute->getAngle();
202cdf0e10cSrcweir         }
203cdf0e10cSrcweir 
getColor() const204cdf0e10cSrcweir         const basegfx::BColor& FillHatchAttribute::getColor() const
205cdf0e10cSrcweir         {
206cdf0e10cSrcweir             return mpFillHatchAttribute->getColor();
207cdf0e10cSrcweir         }
208cdf0e10cSrcweir 
getMinimalDiscreteDistance() const209*0702bc67SArmin Le Grand         sal_uInt32 FillHatchAttribute::getMinimalDiscreteDistance() const
210*0702bc67SArmin Le Grand         {
211*0702bc67SArmin Le Grand             return mpFillHatchAttribute->getMinimalDiscreteDistance();
212*0702bc67SArmin Le Grand         }
213*0702bc67SArmin Le Grand 
isFillBackground() const214cdf0e10cSrcweir         bool FillHatchAttribute::isFillBackground() const
215cdf0e10cSrcweir         {
216cdf0e10cSrcweir             return mpFillHatchAttribute->isFillBackground();
217cdf0e10cSrcweir         }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir     } // end of namespace attribute
220cdf0e10cSrcweir } // end of namespace drawinglayer
221cdf0e10cSrcweir 
222cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
223cdf0e10cSrcweir // eof
224