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 #include "precompiled_svx.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <svx/sdr/attribute/sdrformtextoutlineattribute.hxx>
27*b1cdbd2cSJim Jagielski #include <drawinglayer/attribute/lineattribute.hxx>
28*b1cdbd2cSJim Jagielski #include <drawinglayer/attribute/strokeattribute.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 ImpSdrFormTextOutlineAttribute
37*b1cdbd2cSJim Jagielski         {
38*b1cdbd2cSJim Jagielski 		public:
39*b1cdbd2cSJim Jagielski 			// refcounter
40*b1cdbd2cSJim Jagielski 			sal_uInt32							mnRefCount;
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski             // one set of attributes for FormText (FontWork) outline visualisation
43*b1cdbd2cSJim Jagielski 		    LineAttribute                       maLineAttribute;
44*b1cdbd2cSJim Jagielski 		    StrokeAttribute                     maStrokeAttribute;
45*b1cdbd2cSJim Jagielski 		    sal_uInt8                           mnTransparence;
46*b1cdbd2cSJim Jagielski 
ImpSdrFormTextOutlineAttribute(const LineAttribute & rLineAttribute,const StrokeAttribute & rStrokeAttribute,sal_uInt8 nTransparence)47*b1cdbd2cSJim Jagielski 			ImpSdrFormTextOutlineAttribute(
48*b1cdbd2cSJim Jagielski                 const LineAttribute& rLineAttribute,
49*b1cdbd2cSJim Jagielski                 const StrokeAttribute& rStrokeAttribute,
50*b1cdbd2cSJim Jagielski                 sal_uInt8 nTransparence)
51*b1cdbd2cSJim Jagielski 			:	mnRefCount(0),
52*b1cdbd2cSJim Jagielski 				maLineAttribute(rLineAttribute),
53*b1cdbd2cSJim Jagielski 				maStrokeAttribute(rStrokeAttribute),
54*b1cdbd2cSJim Jagielski 				mnTransparence(nTransparence)
55*b1cdbd2cSJim Jagielski 			{
56*b1cdbd2cSJim Jagielski 			}
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 			// data read access
getLineAttribute() const59*b1cdbd2cSJim Jagielski             const LineAttribute& getLineAttribute() const { return maLineAttribute; }
getStrokeAttribute() const60*b1cdbd2cSJim Jagielski             const StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; }
getTransparence() const61*b1cdbd2cSJim Jagielski             sal_uInt8 getTransparence() const { return mnTransparence; }
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski 			// compare operator
operator ==(const ImpSdrFormTextOutlineAttribute & rCandidate) const64*b1cdbd2cSJim Jagielski 			bool operator==(const ImpSdrFormTextOutlineAttribute& rCandidate) const
65*b1cdbd2cSJim Jagielski 			{
66*b1cdbd2cSJim Jagielski 				return (getLineAttribute() == rCandidate.getLineAttribute()
67*b1cdbd2cSJim Jagielski 					&& getStrokeAttribute() == rCandidate.getStrokeAttribute()
68*b1cdbd2cSJim Jagielski 					&& getTransparence() == rCandidate.getTransparence());
69*b1cdbd2cSJim Jagielski 			}
70*b1cdbd2cSJim Jagielski 
get_global_default()71*b1cdbd2cSJim Jagielski 			static ImpSdrFormTextOutlineAttribute* get_global_default()
72*b1cdbd2cSJim Jagielski             {
73*b1cdbd2cSJim Jagielski                 static ImpSdrFormTextOutlineAttribute* pDefault = 0;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski                 if(!pDefault)
76*b1cdbd2cSJim Jagielski                 {
77*b1cdbd2cSJim Jagielski                     pDefault = new ImpSdrFormTextOutlineAttribute(
78*b1cdbd2cSJim Jagielski 						LineAttribute(),
79*b1cdbd2cSJim Jagielski 						StrokeAttribute(),
80*b1cdbd2cSJim Jagielski 						0);
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski                     // never delete; start with RefCount 1, not 0
83*b1cdbd2cSJim Jagielski     			    pDefault->mnRefCount++;
84*b1cdbd2cSJim Jagielski                 }
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski                 return pDefault;
87*b1cdbd2cSJim Jagielski             }
88*b1cdbd2cSJim Jagielski         };
89*b1cdbd2cSJim Jagielski 
SdrFormTextOutlineAttribute(const LineAttribute & rLineAttribute,const StrokeAttribute & rStrokeAttribute,sal_uInt8 nTransparence)90*b1cdbd2cSJim Jagielski         SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute(
91*b1cdbd2cSJim Jagielski 			const LineAttribute& rLineAttribute,
92*b1cdbd2cSJim Jagielski             const StrokeAttribute& rStrokeAttribute,
93*b1cdbd2cSJim Jagielski             sal_uInt8 nTransparence)
94*b1cdbd2cSJim Jagielski 		:	mpSdrFormTextOutlineAttribute(new ImpSdrFormTextOutlineAttribute(
95*b1cdbd2cSJim Jagielski 				rLineAttribute, rStrokeAttribute, nTransparence))
96*b1cdbd2cSJim Jagielski 		{
97*b1cdbd2cSJim Jagielski 		}
98*b1cdbd2cSJim Jagielski 
SdrFormTextOutlineAttribute()99*b1cdbd2cSJim Jagielski 		SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute()
100*b1cdbd2cSJim Jagielski         :	mpSdrFormTextOutlineAttribute(ImpSdrFormTextOutlineAttribute::get_global_default())
101*b1cdbd2cSJim Jagielski 		{
102*b1cdbd2cSJim Jagielski 			mpSdrFormTextOutlineAttribute->mnRefCount++;
103*b1cdbd2cSJim Jagielski 		}
104*b1cdbd2cSJim Jagielski 
SdrFormTextOutlineAttribute(const SdrFormTextOutlineAttribute & rCandidate)105*b1cdbd2cSJim Jagielski         SdrFormTextOutlineAttribute::SdrFormTextOutlineAttribute(const SdrFormTextOutlineAttribute& rCandidate)
106*b1cdbd2cSJim Jagielski 		:	mpSdrFormTextOutlineAttribute(rCandidate.mpSdrFormTextOutlineAttribute)
107*b1cdbd2cSJim Jagielski 		{
108*b1cdbd2cSJim Jagielski 			mpSdrFormTextOutlineAttribute->mnRefCount++;
109*b1cdbd2cSJim Jagielski 		}
110*b1cdbd2cSJim Jagielski 
~SdrFormTextOutlineAttribute()111*b1cdbd2cSJim Jagielski 		SdrFormTextOutlineAttribute::~SdrFormTextOutlineAttribute()
112*b1cdbd2cSJim Jagielski 		{
113*b1cdbd2cSJim Jagielski 			if(mpSdrFormTextOutlineAttribute->mnRefCount)
114*b1cdbd2cSJim Jagielski 			{
115*b1cdbd2cSJim Jagielski 				mpSdrFormTextOutlineAttribute->mnRefCount--;
116*b1cdbd2cSJim Jagielski 			}
117*b1cdbd2cSJim Jagielski 			else
118*b1cdbd2cSJim Jagielski 			{
119*b1cdbd2cSJim Jagielski 				delete mpSdrFormTextOutlineAttribute;
120*b1cdbd2cSJim Jagielski 			}
121*b1cdbd2cSJim Jagielski 		}
122*b1cdbd2cSJim Jagielski 
isDefault() const123*b1cdbd2cSJim Jagielski         bool SdrFormTextOutlineAttribute::isDefault() const
124*b1cdbd2cSJim Jagielski         {
125*b1cdbd2cSJim Jagielski             return mpSdrFormTextOutlineAttribute == ImpSdrFormTextOutlineAttribute::get_global_default();
126*b1cdbd2cSJim Jagielski         }
127*b1cdbd2cSJim Jagielski 
operator =(const SdrFormTextOutlineAttribute & rCandidate)128*b1cdbd2cSJim Jagielski         SdrFormTextOutlineAttribute& SdrFormTextOutlineAttribute::operator=(const SdrFormTextOutlineAttribute& rCandidate)
129*b1cdbd2cSJim Jagielski 		{
130*b1cdbd2cSJim Jagielski 			if(rCandidate.mpSdrFormTextOutlineAttribute != mpSdrFormTextOutlineAttribute)
131*b1cdbd2cSJim Jagielski 			{
132*b1cdbd2cSJim Jagielski 				if(mpSdrFormTextOutlineAttribute->mnRefCount)
133*b1cdbd2cSJim Jagielski 				{
134*b1cdbd2cSJim Jagielski 					mpSdrFormTextOutlineAttribute->mnRefCount--;
135*b1cdbd2cSJim Jagielski 				}
136*b1cdbd2cSJim Jagielski 				else
137*b1cdbd2cSJim Jagielski 				{
138*b1cdbd2cSJim Jagielski 					delete mpSdrFormTextOutlineAttribute;
139*b1cdbd2cSJim Jagielski 				}
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 				mpSdrFormTextOutlineAttribute = rCandidate.mpSdrFormTextOutlineAttribute;
142*b1cdbd2cSJim Jagielski 				mpSdrFormTextOutlineAttribute->mnRefCount++;
143*b1cdbd2cSJim Jagielski 			}
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 			return *this;
146*b1cdbd2cSJim Jagielski 		}
147*b1cdbd2cSJim Jagielski 
operator ==(const SdrFormTextOutlineAttribute & rCandidate) const148*b1cdbd2cSJim Jagielski 		bool SdrFormTextOutlineAttribute::operator==(const SdrFormTextOutlineAttribute& rCandidate) const
149*b1cdbd2cSJim Jagielski 		{
150*b1cdbd2cSJim Jagielski 			if(rCandidate.mpSdrFormTextOutlineAttribute == mpSdrFormTextOutlineAttribute)
151*b1cdbd2cSJim Jagielski 			{
152*b1cdbd2cSJim Jagielski 				return true;
153*b1cdbd2cSJim Jagielski 			}
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 			if(rCandidate.isDefault() != isDefault())
156*b1cdbd2cSJim Jagielski 			{
157*b1cdbd2cSJim Jagielski 				return false;
158*b1cdbd2cSJim Jagielski 			}
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 			return (*rCandidate.mpSdrFormTextOutlineAttribute == *mpSdrFormTextOutlineAttribute);
161*b1cdbd2cSJim Jagielski 		}
162*b1cdbd2cSJim Jagielski 
getLineAttribute() const163*b1cdbd2cSJim Jagielski         const LineAttribute& SdrFormTextOutlineAttribute::getLineAttribute() const
164*b1cdbd2cSJim Jagielski 		{
165*b1cdbd2cSJim Jagielski 			return mpSdrFormTextOutlineAttribute->getLineAttribute();
166*b1cdbd2cSJim Jagielski 		}
167*b1cdbd2cSJim Jagielski 
getStrokeAttribute() const168*b1cdbd2cSJim Jagielski 		const StrokeAttribute& SdrFormTextOutlineAttribute::getStrokeAttribute() const
169*b1cdbd2cSJim Jagielski 		{
170*b1cdbd2cSJim Jagielski 			return mpSdrFormTextOutlineAttribute->getStrokeAttribute();
171*b1cdbd2cSJim Jagielski 		}
172*b1cdbd2cSJim Jagielski 
getTransparence() const173*b1cdbd2cSJim Jagielski 		sal_uInt8 SdrFormTextOutlineAttribute::getTransparence() const
174*b1cdbd2cSJim Jagielski 		{
175*b1cdbd2cSJim Jagielski 			return mpSdrFormTextOutlineAttribute->getTransparence();
176*b1cdbd2cSJim Jagielski 		}
177*b1cdbd2cSJim Jagielski 	} // end of namespace attribute
178*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
181*b1cdbd2cSJim Jagielski // eof
182