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