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/sdrtextattribute.hxx>
27*b1cdbd2cSJim Jagielski #include <svx/sdr/attribute/sdrformtextattribute.hxx>
28*b1cdbd2cSJim Jagielski #include <svx/svdotext.hxx>
29*b1cdbd2cSJim Jagielski #include <editeng/outlobj.hxx>
30*b1cdbd2cSJim Jagielski #include <editeng/editobj.hxx>
31*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/sdr/properties/properties.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski namespace drawinglayer
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski 	namespace attribute
39*b1cdbd2cSJim Jagielski 	{
40*b1cdbd2cSJim Jagielski 		class ImpSdrTextAttribute
41*b1cdbd2cSJim Jagielski 		{
42*b1cdbd2cSJim Jagielski 		public:
43*b1cdbd2cSJim Jagielski 			// refcounter
44*b1cdbd2cSJim Jagielski 			sal_uInt32							mnRefCount;
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski             // all-text attributes. The SdrText itself and a copy
47*b1cdbd2cSJim Jagielski             // of te OPO
48*b1cdbd2cSJim Jagielski 			const SdrText*						mpSdrText;
49*b1cdbd2cSJim Jagielski 			const OutlinerParaObject*			mpOutlinerParaObject;
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski             // Set when it's a FormText; contains all FormText attributes
52*b1cdbd2cSJim Jagielski             SdrFormTextAttribute                maSdrFormTextAttribute;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski             // text distances
55*b1cdbd2cSJim Jagielski 			sal_Int32							maTextLeftDistance;
56*b1cdbd2cSJim Jagielski 			sal_Int32							maTextUpperDistance;
57*b1cdbd2cSJim Jagielski 			sal_Int32							maTextRightDistance;
58*b1cdbd2cSJim Jagielski 			sal_Int32							maTextLowerDistance;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski             // #i101556# use versioning from text attributes to detect changes
61*b1cdbd2cSJim Jagielski             sal_uInt32                          maPropertiesVersion;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski             // text alignments
64*b1cdbd2cSJim Jagielski             SdrTextHorzAdjust                   maSdrTextHorzAdjust;
65*b1cdbd2cSJim Jagielski             SdrTextVertAdjust                   maSdrTextVertAdjust;
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 			// bitfield
68*b1cdbd2cSJim Jagielski 			unsigned							mbContour : 1;
69*b1cdbd2cSJim Jagielski 			unsigned							mbFitToSize : 1;
70*b1cdbd2cSJim Jagielski 			unsigned							mbHideContour : 1;
71*b1cdbd2cSJim Jagielski 			unsigned							mbBlink : 1;
72*b1cdbd2cSJim Jagielski 			unsigned							mbScroll : 1;
73*b1cdbd2cSJim Jagielski 			unsigned							mbInEditMode : 1;
74*b1cdbd2cSJim Jagielski 			unsigned							mbFixedCellHeight : 1;
75*b1cdbd2cSJim Jagielski 			unsigned							mbWrongSpell : 1;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 		public:
ImpSdrTextAttribute(const SdrText * pSdrText,const OutlinerParaObject & rOutlinerParaObject,XFormTextStyle eFormTextStyle,sal_Int32 aTextLeftDistance,sal_Int32 aTextUpperDistance,sal_Int32 aTextRightDistance,sal_Int32 aTextLowerDistance,SdrTextHorzAdjust aSdrTextHorzAdjust,SdrTextVertAdjust aSdrTextVertAdjust,bool bContour,bool bFitToSize,bool bHideContour,bool bBlink,bool bScroll,bool bInEditMode,bool bFixedCellHeight,bool bWrongSpell)78*b1cdbd2cSJim Jagielski 			ImpSdrTextAttribute(
79*b1cdbd2cSJim Jagielski 				const SdrText* pSdrText,
80*b1cdbd2cSJim Jagielski                 const OutlinerParaObject& rOutlinerParaObject,
81*b1cdbd2cSJim Jagielski 				XFormTextStyle eFormTextStyle,
82*b1cdbd2cSJim Jagielski 				sal_Int32 aTextLeftDistance,
83*b1cdbd2cSJim Jagielski 				sal_Int32 aTextUpperDistance,
84*b1cdbd2cSJim Jagielski 				sal_Int32 aTextRightDistance,
85*b1cdbd2cSJim Jagielski 				sal_Int32 aTextLowerDistance,
86*b1cdbd2cSJim Jagielski                 SdrTextHorzAdjust aSdrTextHorzAdjust,
87*b1cdbd2cSJim Jagielski                 SdrTextVertAdjust aSdrTextVertAdjust,
88*b1cdbd2cSJim Jagielski 				bool bContour,
89*b1cdbd2cSJim Jagielski                 bool bFitToSize,
90*b1cdbd2cSJim Jagielski 				bool bHideContour,
91*b1cdbd2cSJim Jagielski                 bool bBlink,
92*b1cdbd2cSJim Jagielski 				bool bScroll,
93*b1cdbd2cSJim Jagielski                 bool bInEditMode,
94*b1cdbd2cSJim Jagielski                 bool bFixedCellHeight,
95*b1cdbd2cSJim Jagielski 				bool bWrongSpell)
96*b1cdbd2cSJim Jagielski 			:	mnRefCount(0),
97*b1cdbd2cSJim Jagielski 				mpSdrText(pSdrText),
98*b1cdbd2cSJim Jagielski 				mpOutlinerParaObject(new OutlinerParaObject(rOutlinerParaObject)),
99*b1cdbd2cSJim Jagielski 				maSdrFormTextAttribute(),
100*b1cdbd2cSJim Jagielski 				maTextLeftDistance(aTextLeftDistance),
101*b1cdbd2cSJim Jagielski 				maTextUpperDistance(aTextUpperDistance),
102*b1cdbd2cSJim Jagielski 				maTextRightDistance(aTextRightDistance),
103*b1cdbd2cSJim Jagielski 				maTextLowerDistance(aTextLowerDistance),
104*b1cdbd2cSJim Jagielski 				maPropertiesVersion(0),
105*b1cdbd2cSJim Jagielski 				maSdrTextHorzAdjust(aSdrTextHorzAdjust),
106*b1cdbd2cSJim Jagielski 				maSdrTextVertAdjust(aSdrTextVertAdjust),
107*b1cdbd2cSJim Jagielski 				mbContour(bContour),
108*b1cdbd2cSJim Jagielski 				mbFitToSize(bFitToSize),
109*b1cdbd2cSJim Jagielski 				mbHideContour(bHideContour),
110*b1cdbd2cSJim Jagielski 				mbBlink(bBlink),
111*b1cdbd2cSJim Jagielski 				mbScroll(bScroll),
112*b1cdbd2cSJim Jagielski 				mbInEditMode(bInEditMode),
113*b1cdbd2cSJim Jagielski 				mbFixedCellHeight(bFixedCellHeight),
114*b1cdbd2cSJim Jagielski 				mbWrongSpell(bWrongSpell)
115*b1cdbd2cSJim Jagielski 			{
116*b1cdbd2cSJim Jagielski 				if(pSdrText)
117*b1cdbd2cSJim Jagielski 				{
118*b1cdbd2cSJim Jagielski 					if(XFT_NONE != eFormTextStyle)
119*b1cdbd2cSJim Jagielski 					{
120*b1cdbd2cSJim Jagielski 						// text on path. Create FormText attribute
121*b1cdbd2cSJim Jagielski         				const SfxItemSet& rSet = pSdrText->GetItemSet();
122*b1cdbd2cSJim Jagielski 						maSdrFormTextAttribute = SdrFormTextAttribute(rSet);
123*b1cdbd2cSJim Jagielski 					}
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 					// #i101556# init with version number to detect changes of single text
126*b1cdbd2cSJim Jagielski 					// attribute and/or style sheets in primitive data without having to
127*b1cdbd2cSJim Jagielski 					// copy that data locally (which would be better from principle)
128*b1cdbd2cSJim Jagielski 					maPropertiesVersion = pSdrText->GetObject().GetProperties().getVersion();
129*b1cdbd2cSJim Jagielski 				}
130*b1cdbd2cSJim Jagielski 			}
131*b1cdbd2cSJim Jagielski 
ImpSdrTextAttribute()132*b1cdbd2cSJim Jagielski 			ImpSdrTextAttribute()
133*b1cdbd2cSJim Jagielski 			:	mnRefCount(0),
134*b1cdbd2cSJim Jagielski 				mpSdrText(0),
135*b1cdbd2cSJim Jagielski 				mpOutlinerParaObject(0),
136*b1cdbd2cSJim Jagielski 				maSdrFormTextAttribute(),
137*b1cdbd2cSJim Jagielski 				maTextLeftDistance(0),
138*b1cdbd2cSJim Jagielski 				maTextUpperDistance(0),
139*b1cdbd2cSJim Jagielski 				maTextRightDistance(0),
140*b1cdbd2cSJim Jagielski 				maTextLowerDistance(0),
141*b1cdbd2cSJim Jagielski 				maPropertiesVersion(0),
142*b1cdbd2cSJim Jagielski 				maSdrTextHorzAdjust(SDRTEXTHORZADJUST_LEFT),
143*b1cdbd2cSJim Jagielski 				maSdrTextVertAdjust(SDRTEXTVERTADJUST_TOP),
144*b1cdbd2cSJim Jagielski 				mbContour(false),
145*b1cdbd2cSJim Jagielski 				mbFitToSize(false),
146*b1cdbd2cSJim Jagielski 				mbHideContour(false),
147*b1cdbd2cSJim Jagielski 				mbBlink(false),
148*b1cdbd2cSJim Jagielski 				mbScroll(false),
149*b1cdbd2cSJim Jagielski 				mbInEditMode(false),
150*b1cdbd2cSJim Jagielski 				mbFixedCellHeight(false),
151*b1cdbd2cSJim Jagielski 				mbWrongSpell(false)
152*b1cdbd2cSJim Jagielski 			{
153*b1cdbd2cSJim Jagielski 			}
154*b1cdbd2cSJim Jagielski 
~ImpSdrTextAttribute()155*b1cdbd2cSJim Jagielski 			~ImpSdrTextAttribute()
156*b1cdbd2cSJim Jagielski 			{
157*b1cdbd2cSJim Jagielski 				if(mpOutlinerParaObject)
158*b1cdbd2cSJim Jagielski 				{
159*b1cdbd2cSJim Jagielski 					delete mpOutlinerParaObject;
160*b1cdbd2cSJim Jagielski 				}
161*b1cdbd2cSJim Jagielski 			}
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 			// data read access
getSdrText() const164*b1cdbd2cSJim Jagielski 			const SdrText& getSdrText() const
165*b1cdbd2cSJim Jagielski 			{
166*b1cdbd2cSJim Jagielski 				OSL_ENSURE(mpSdrText, "Access to text of default version of ImpSdrTextAttribute (!)");
167*b1cdbd2cSJim Jagielski 				return *mpSdrText;
168*b1cdbd2cSJim Jagielski 			}
getOutlinerParaObject() const169*b1cdbd2cSJim Jagielski             const OutlinerParaObject& getOutlinerParaObject() const
170*b1cdbd2cSJim Jagielski 			{
171*b1cdbd2cSJim Jagielski 				OSL_ENSURE(mpOutlinerParaObject, "Access to OutlinerParaObject of default version of ImpSdrTextAttribute (!)");
172*b1cdbd2cSJim Jagielski 				return *mpOutlinerParaObject;
173*b1cdbd2cSJim Jagielski 			}
isContour() const174*b1cdbd2cSJim Jagielski 			bool isContour() const { return mbContour; }
isFitToSize() const175*b1cdbd2cSJim Jagielski 			bool isFitToSize() const { return mbFitToSize; }
isHideContour() const176*b1cdbd2cSJim Jagielski 			bool isHideContour() const { return mbHideContour; }
isBlink() const177*b1cdbd2cSJim Jagielski 			bool isBlink() const { return mbBlink; }
isScroll() const178*b1cdbd2cSJim Jagielski 			bool isScroll() const { return mbScroll; }
isInEditMode() const179*b1cdbd2cSJim Jagielski             bool isInEditMode() const { return mbInEditMode; }
isFixedCellHeight() const180*b1cdbd2cSJim Jagielski             bool isFixedCellHeight() const { return mbFixedCellHeight; }
isWrongSpell() const181*b1cdbd2cSJim Jagielski 			bool isWrongSpell() const { return mbWrongSpell; }
getSdrFormTextAttribute() const182*b1cdbd2cSJim Jagielski             const SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; }
getTextLeftDistance() const183*b1cdbd2cSJim Jagielski 			sal_Int32 getTextLeftDistance() const { return maTextLeftDistance; }
getTextUpperDistance() const184*b1cdbd2cSJim Jagielski 			sal_Int32 getTextUpperDistance() const { return maTextUpperDistance; }
getTextRightDistance() const185*b1cdbd2cSJim Jagielski 			sal_Int32 getTextRightDistance() const { return maTextRightDistance; }
getTextLowerDistance() const186*b1cdbd2cSJim Jagielski 			sal_Int32 getTextLowerDistance() const { return maTextLowerDistance; }
getPropertiesVersion() const187*b1cdbd2cSJim Jagielski             sal_uInt32 getPropertiesVersion() const { return maPropertiesVersion; }
getSdrTextHorzAdjust() const188*b1cdbd2cSJim Jagielski             SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; }
getSdrTextVertAdjust() const189*b1cdbd2cSJim Jagielski             SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 			// compare operator
operator ==(const ImpSdrTextAttribute & rCandidate) const192*b1cdbd2cSJim Jagielski 			bool operator==(const ImpSdrTextAttribute& rCandidate) const
193*b1cdbd2cSJim Jagielski 			{
194*b1cdbd2cSJim Jagielski 				if(mpOutlinerParaObject != rCandidate.mpOutlinerParaObject)
195*b1cdbd2cSJim Jagielski 				{
196*b1cdbd2cSJim Jagielski 					if(mpOutlinerParaObject && rCandidate.mpOutlinerParaObject)
197*b1cdbd2cSJim Jagielski 					{
198*b1cdbd2cSJim Jagielski 						// compares OPO and it's contents, but traditionally not the RedLining
199*b1cdbd2cSJim Jagielski 						// which is not seen as model, but as temporary information
200*b1cdbd2cSJim Jagielski 						if(!(getOutlinerParaObject() == rCandidate.getOutlinerParaObject()))
201*b1cdbd2cSJim Jagielski 						{
202*b1cdbd2cSJim Jagielski 							return false;
203*b1cdbd2cSJim Jagielski 						}
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 						// #i102062# for primitive visualisation, the WrongList (SpellChecking)
206*b1cdbd2cSJim Jagielski 						// is important, too, so use isWrongListEqual since there is no WrongList
207*b1cdbd2cSJim Jagielski 						// comparison in the regular OutlinerParaObject compare (since it's
208*b1cdbd2cSJim Jagielski 						// not-persistent data)
209*b1cdbd2cSJim Jagielski 						if(!(getOutlinerParaObject().isWrongListEqual(rCandidate.getOutlinerParaObject())))
210*b1cdbd2cSJim Jagielski 						{
211*b1cdbd2cSJim Jagielski 							return false;
212*b1cdbd2cSJim Jagielski 						}
213*b1cdbd2cSJim Jagielski 					}
214*b1cdbd2cSJim Jagielski 					else
215*b1cdbd2cSJim Jagielski 					{
216*b1cdbd2cSJim Jagielski 						// only one is zero; not equal
217*b1cdbd2cSJim Jagielski 						return false;
218*b1cdbd2cSJim Jagielski 					}
219*b1cdbd2cSJim Jagielski 				}
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 				return (
222*b1cdbd2cSJim Jagielski 					   getSdrFormTextAttribute() == rCandidate.getSdrFormTextAttribute()
223*b1cdbd2cSJim Jagielski 					&& getTextLeftDistance() == rCandidate.getTextLeftDistance()
224*b1cdbd2cSJim Jagielski 					&& getTextUpperDistance() == rCandidate.getTextUpperDistance()
225*b1cdbd2cSJim Jagielski 					&& getTextRightDistance() == rCandidate.getTextRightDistance()
226*b1cdbd2cSJim Jagielski 					&& getTextLowerDistance() == rCandidate.getTextLowerDistance()
227*b1cdbd2cSJim Jagielski 					&& getPropertiesVersion() == rCandidate.getPropertiesVersion()
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 					&& getSdrTextHorzAdjust() == rCandidate.getSdrTextHorzAdjust()
230*b1cdbd2cSJim Jagielski 					&& getSdrTextVertAdjust() == rCandidate.getSdrTextVertAdjust()
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 					&& isContour() == rCandidate.isContour()
233*b1cdbd2cSJim Jagielski 					&& isFitToSize() == rCandidate.isFitToSize()
234*b1cdbd2cSJim Jagielski 					&& isHideContour() == rCandidate.isHideContour()
235*b1cdbd2cSJim Jagielski 					&& isBlink() == rCandidate.isBlink()
236*b1cdbd2cSJim Jagielski 					&& isScroll() == rCandidate.isScroll()
237*b1cdbd2cSJim Jagielski 					&& isInEditMode() == rCandidate.isInEditMode()
238*b1cdbd2cSJim Jagielski 					&& isFixedCellHeight() == rCandidate.isFixedCellHeight()
239*b1cdbd2cSJim Jagielski 					&& isWrongSpell() == rCandidate.isWrongSpell());
240*b1cdbd2cSJim Jagielski 			}
241*b1cdbd2cSJim Jagielski 
get_global_default()242*b1cdbd2cSJim Jagielski 			static ImpSdrTextAttribute* get_global_default()
243*b1cdbd2cSJim Jagielski             {
244*b1cdbd2cSJim Jagielski                 static ImpSdrTextAttribute* pDefault = 0;
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski                 if(!pDefault)
247*b1cdbd2cSJim Jagielski                 {
248*b1cdbd2cSJim Jagielski 					// use default constructor
249*b1cdbd2cSJim Jagielski                     pDefault = new ImpSdrTextAttribute();
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski                     // never delete; start with RefCount 1, not 0
252*b1cdbd2cSJim Jagielski     			    pDefault->mnRefCount++;
253*b1cdbd2cSJim Jagielski                 }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski                 return pDefault;
256*b1cdbd2cSJim Jagielski             }
257*b1cdbd2cSJim Jagielski 		};
258*b1cdbd2cSJim Jagielski 
SdrTextAttribute(const SdrText & rSdrText,const OutlinerParaObject & rOutlinerParaObject,XFormTextStyle eFormTextStyle,sal_Int32 aTextLeftDistance,sal_Int32 aTextUpperDistance,sal_Int32 aTextRightDistance,sal_Int32 aTextLowerDistance,SdrTextHorzAdjust aSdrTextHorzAdjust,SdrTextVertAdjust aSdrTextVertAdjust,bool bContour,bool bFitToSize,bool bHideContour,bool bBlink,bool bScroll,bool bInEditMode,bool bFixedCellHeight,bool bWrongSpell)259*b1cdbd2cSJim Jagielski         SdrTextAttribute::SdrTextAttribute(
260*b1cdbd2cSJim Jagielski 			const SdrText& rSdrText,
261*b1cdbd2cSJim Jagielski             const OutlinerParaObject& rOutlinerParaObject,
262*b1cdbd2cSJim Jagielski 			XFormTextStyle eFormTextStyle,
263*b1cdbd2cSJim Jagielski 			sal_Int32 aTextLeftDistance,
264*b1cdbd2cSJim Jagielski 			sal_Int32 aTextUpperDistance,
265*b1cdbd2cSJim Jagielski 			sal_Int32 aTextRightDistance,
266*b1cdbd2cSJim Jagielski 			sal_Int32 aTextLowerDistance,
267*b1cdbd2cSJim Jagielski             SdrTextHorzAdjust aSdrTextHorzAdjust,
268*b1cdbd2cSJim Jagielski             SdrTextVertAdjust aSdrTextVertAdjust,
269*b1cdbd2cSJim Jagielski 			bool bContour,
270*b1cdbd2cSJim Jagielski             bool bFitToSize,
271*b1cdbd2cSJim Jagielski 			bool bHideContour,
272*b1cdbd2cSJim Jagielski             bool bBlink,
273*b1cdbd2cSJim Jagielski 			bool bScroll,
274*b1cdbd2cSJim Jagielski             bool bInEditMode,
275*b1cdbd2cSJim Jagielski             bool bFixedCellHeight,
276*b1cdbd2cSJim Jagielski 			bool bWrongSpell)
277*b1cdbd2cSJim Jagielski 		:	mpSdrTextAttribute(new ImpSdrTextAttribute(
278*b1cdbd2cSJim Jagielski 				&rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance, aTextUpperDistance,
279*b1cdbd2cSJim Jagielski 				aTextRightDistance, aTextLowerDistance, aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour,
280*b1cdbd2cSJim Jagielski 				bFitToSize, bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell))
281*b1cdbd2cSJim Jagielski 		{
282*b1cdbd2cSJim Jagielski 		}
283*b1cdbd2cSJim Jagielski 
SdrTextAttribute()284*b1cdbd2cSJim Jagielski 		SdrTextAttribute::SdrTextAttribute()
285*b1cdbd2cSJim Jagielski         :	mpSdrTextAttribute(ImpSdrTextAttribute::get_global_default())
286*b1cdbd2cSJim Jagielski 		{
287*b1cdbd2cSJim Jagielski 			mpSdrTextAttribute->mnRefCount++;
288*b1cdbd2cSJim Jagielski 		}
289*b1cdbd2cSJim Jagielski 
SdrTextAttribute(const SdrTextAttribute & rCandidate)290*b1cdbd2cSJim Jagielski         SdrTextAttribute::SdrTextAttribute(const SdrTextAttribute& rCandidate)
291*b1cdbd2cSJim Jagielski 		:	mpSdrTextAttribute(rCandidate.mpSdrTextAttribute)
292*b1cdbd2cSJim Jagielski 		{
293*b1cdbd2cSJim Jagielski 			mpSdrTextAttribute->mnRefCount++;
294*b1cdbd2cSJim Jagielski 		}
295*b1cdbd2cSJim Jagielski 
~SdrTextAttribute()296*b1cdbd2cSJim Jagielski 		SdrTextAttribute::~SdrTextAttribute()
297*b1cdbd2cSJim Jagielski 		{
298*b1cdbd2cSJim Jagielski 			if(mpSdrTextAttribute->mnRefCount)
299*b1cdbd2cSJim Jagielski 			{
300*b1cdbd2cSJim Jagielski 				mpSdrTextAttribute->mnRefCount--;
301*b1cdbd2cSJim Jagielski 			}
302*b1cdbd2cSJim Jagielski 			else
303*b1cdbd2cSJim Jagielski 			{
304*b1cdbd2cSJim Jagielski 				delete mpSdrTextAttribute;
305*b1cdbd2cSJim Jagielski 			}
306*b1cdbd2cSJim Jagielski 		}
307*b1cdbd2cSJim Jagielski 
isDefault() const308*b1cdbd2cSJim Jagielski         bool SdrTextAttribute::isDefault() const
309*b1cdbd2cSJim Jagielski         {
310*b1cdbd2cSJim Jagielski             return mpSdrTextAttribute == ImpSdrTextAttribute::get_global_default();
311*b1cdbd2cSJim Jagielski         }
312*b1cdbd2cSJim Jagielski 
operator =(const SdrTextAttribute & rCandidate)313*b1cdbd2cSJim Jagielski         SdrTextAttribute& SdrTextAttribute::operator=(const SdrTextAttribute& rCandidate)
314*b1cdbd2cSJim Jagielski 		{
315*b1cdbd2cSJim Jagielski 			if(rCandidate.mpSdrTextAttribute != mpSdrTextAttribute)
316*b1cdbd2cSJim Jagielski 			{
317*b1cdbd2cSJim Jagielski 				if(mpSdrTextAttribute->mnRefCount)
318*b1cdbd2cSJim Jagielski 				{
319*b1cdbd2cSJim Jagielski 					mpSdrTextAttribute->mnRefCount--;
320*b1cdbd2cSJim Jagielski 				}
321*b1cdbd2cSJim Jagielski 				else
322*b1cdbd2cSJim Jagielski 				{
323*b1cdbd2cSJim Jagielski 					delete mpSdrTextAttribute;
324*b1cdbd2cSJim Jagielski 				}
325*b1cdbd2cSJim Jagielski 
326*b1cdbd2cSJim Jagielski 				mpSdrTextAttribute = rCandidate.mpSdrTextAttribute;
327*b1cdbd2cSJim Jagielski 				mpSdrTextAttribute->mnRefCount++;
328*b1cdbd2cSJim Jagielski 			}
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski 			return *this;
331*b1cdbd2cSJim Jagielski 		}
332*b1cdbd2cSJim Jagielski 
operator ==(const SdrTextAttribute & rCandidate) const333*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::operator==(const SdrTextAttribute& rCandidate) const
334*b1cdbd2cSJim Jagielski 		{
335*b1cdbd2cSJim Jagielski 			if(rCandidate.mpSdrTextAttribute == mpSdrTextAttribute)
336*b1cdbd2cSJim Jagielski 			{
337*b1cdbd2cSJim Jagielski 				return true;
338*b1cdbd2cSJim Jagielski 			}
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 			if(rCandidate.isDefault() != isDefault())
341*b1cdbd2cSJim Jagielski 			{
342*b1cdbd2cSJim Jagielski 				return false;
343*b1cdbd2cSJim Jagielski 			}
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski 			return (*rCandidate.mpSdrTextAttribute == *mpSdrTextAttribute);
346*b1cdbd2cSJim Jagielski 		}
347*b1cdbd2cSJim Jagielski 
getSdrText() const348*b1cdbd2cSJim Jagielski 		const SdrText& SdrTextAttribute::getSdrText() const
349*b1cdbd2cSJim Jagielski 		{
350*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getSdrText();
351*b1cdbd2cSJim Jagielski 		}
352*b1cdbd2cSJim Jagielski 
getOutlinerParaObject() const353*b1cdbd2cSJim Jagielski 		const OutlinerParaObject& SdrTextAttribute::getOutlinerParaObject() const
354*b1cdbd2cSJim Jagielski 		{
355*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getOutlinerParaObject();
356*b1cdbd2cSJim Jagielski 		}
357*b1cdbd2cSJim Jagielski 
isContour() const358*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isContour() const
359*b1cdbd2cSJim Jagielski 		{
360*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isContour();
361*b1cdbd2cSJim Jagielski 		}
362*b1cdbd2cSJim Jagielski 
isFitToSize() const363*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isFitToSize() const
364*b1cdbd2cSJim Jagielski 		{
365*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isFitToSize();
366*b1cdbd2cSJim Jagielski 		}
367*b1cdbd2cSJim Jagielski 
isHideContour() const368*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isHideContour() const
369*b1cdbd2cSJim Jagielski 		{
370*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isHideContour();
371*b1cdbd2cSJim Jagielski 		}
372*b1cdbd2cSJim Jagielski 
isBlink() const373*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isBlink() const
374*b1cdbd2cSJim Jagielski 		{
375*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isBlink();
376*b1cdbd2cSJim Jagielski 		}
377*b1cdbd2cSJim Jagielski 
isScroll() const378*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isScroll() const
379*b1cdbd2cSJim Jagielski 		{
380*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isScroll();
381*b1cdbd2cSJim Jagielski 		}
382*b1cdbd2cSJim Jagielski 
isInEditMode() const383*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isInEditMode() const
384*b1cdbd2cSJim Jagielski 		{
385*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isInEditMode();
386*b1cdbd2cSJim Jagielski 		}
387*b1cdbd2cSJim Jagielski 
isFixedCellHeight() const388*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isFixedCellHeight() const
389*b1cdbd2cSJim Jagielski 		{
390*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isFixedCellHeight();
391*b1cdbd2cSJim Jagielski 		}
392*b1cdbd2cSJim Jagielski 
isWrongSpell() const393*b1cdbd2cSJim Jagielski 		bool SdrTextAttribute::isWrongSpell() const
394*b1cdbd2cSJim Jagielski 		{
395*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->isWrongSpell();
396*b1cdbd2cSJim Jagielski 		}
397*b1cdbd2cSJim Jagielski 
getSdrFormTextAttribute() const398*b1cdbd2cSJim Jagielski 		const SdrFormTextAttribute& SdrTextAttribute::getSdrFormTextAttribute() const
399*b1cdbd2cSJim Jagielski 		{
400*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getSdrFormTextAttribute();
401*b1cdbd2cSJim Jagielski 		}
402*b1cdbd2cSJim Jagielski 
getTextLeftDistance() const403*b1cdbd2cSJim Jagielski 		sal_Int32 SdrTextAttribute::getTextLeftDistance() const
404*b1cdbd2cSJim Jagielski 		{
405*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getTextLeftDistance();
406*b1cdbd2cSJim Jagielski 		}
407*b1cdbd2cSJim Jagielski 
getTextUpperDistance() const408*b1cdbd2cSJim Jagielski 		sal_Int32 SdrTextAttribute::getTextUpperDistance() const
409*b1cdbd2cSJim Jagielski 		{
410*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getTextUpperDistance();
411*b1cdbd2cSJim Jagielski 		}
412*b1cdbd2cSJim Jagielski 
getTextRightDistance() const413*b1cdbd2cSJim Jagielski 		sal_Int32 SdrTextAttribute::getTextRightDistance() const
414*b1cdbd2cSJim Jagielski 		{
415*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getTextRightDistance();
416*b1cdbd2cSJim Jagielski 		}
417*b1cdbd2cSJim Jagielski 
getTextLowerDistance() const418*b1cdbd2cSJim Jagielski 		sal_Int32 SdrTextAttribute::getTextLowerDistance() const
419*b1cdbd2cSJim Jagielski 		{
420*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getTextLowerDistance();
421*b1cdbd2cSJim Jagielski 		}
422*b1cdbd2cSJim Jagielski 
getPropertiesVersion() const423*b1cdbd2cSJim Jagielski 		sal_uInt32 SdrTextAttribute::getPropertiesVersion() const
424*b1cdbd2cSJim Jagielski 		{
425*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getPropertiesVersion();
426*b1cdbd2cSJim Jagielski 		}
427*b1cdbd2cSJim Jagielski 
getSdrTextHorzAdjust() const428*b1cdbd2cSJim Jagielski 		SdrTextHorzAdjust SdrTextAttribute::getSdrTextHorzAdjust() const
429*b1cdbd2cSJim Jagielski 		{
430*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getSdrTextHorzAdjust();
431*b1cdbd2cSJim Jagielski 		}
432*b1cdbd2cSJim Jagielski 
getSdrTextVertAdjust() const433*b1cdbd2cSJim Jagielski 		SdrTextVertAdjust SdrTextAttribute::getSdrTextVertAdjust() const
434*b1cdbd2cSJim Jagielski 		{
435*b1cdbd2cSJim Jagielski 			return mpSdrTextAttribute->getSdrTextVertAdjust();
436*b1cdbd2cSJim Jagielski 		}
437*b1cdbd2cSJim Jagielski 
getBlinkTextTiming(drawinglayer::animation::AnimationEntryList & rAnimList) const438*b1cdbd2cSJim Jagielski 		void SdrTextAttribute::getBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const
439*b1cdbd2cSJim Jagielski 		{
440*b1cdbd2cSJim Jagielski 			if(isBlink())
441*b1cdbd2cSJim Jagielski 			{
442*b1cdbd2cSJim Jagielski 				getSdrText().GetObject().impGetBlinkTextTiming(rAnimList);
443*b1cdbd2cSJim Jagielski 			}
444*b1cdbd2cSJim Jagielski 		}
445*b1cdbd2cSJim Jagielski 
getScrollTextTiming(drawinglayer::animation::AnimationEntryList & rAnimList,double fFrameLength,double fTextLength) const446*b1cdbd2cSJim Jagielski 		void SdrTextAttribute::getScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const
447*b1cdbd2cSJim Jagielski 		{
448*b1cdbd2cSJim Jagielski 			if(isScroll())
449*b1cdbd2cSJim Jagielski 			{
450*b1cdbd2cSJim Jagielski 				getSdrText().GetObject().impGetScrollTextTiming(rAnimList, fFrameLength, fTextLength);
451*b1cdbd2cSJim Jagielski 			}
452*b1cdbd2cSJim Jagielski 		}
453*b1cdbd2cSJim Jagielski 	} // end of namespace attribute
454*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
457*b1cdbd2cSJim Jagielski // eof
458