Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <epptbase.hxx>
30 : : #include <epptdef.hxx>
31 : : #include <text.hxx>
32 : : #include <tools/color.hxx>
33 : : #include <editeng/svxenum.hxx>
34 : :
35 : : using namespace ::com::sun::star;
36 : :
37 : 0 : PPTExCharSheet::PPTExCharSheet( int nInstance )
38 : : {
39 : 0 : sal_uInt16 nFontHeight = 24;
40 : :
41 [ # # ]: 0 : for ( int nDepth = 0; nDepth < 5; nDepth++ )
42 : : {
43 : 0 : PPTExCharLevel& rLev = maCharLevel[ nDepth ];
44 [ # # # # : 0 : switch ( nInstance )
# ]
45 : : {
46 : : case EPP_TEXTTYPE_Title :
47 : : case EPP_TEXTTYPE_CenterTitle :
48 : 0 : nFontHeight = 44;
49 : 0 : break;
50 : : case EPP_TEXTTYPE_Body :
51 : : case EPP_TEXTTYPE_CenterBody :
52 : : case EPP_TEXTTYPE_HalfBody :
53 : : case EPP_TEXTTYPE_QuarterBody :
54 : : {
55 [ # # # # ]: 0 : switch ( nDepth )
56 : : {
57 : 0 : case 0 : nFontHeight = 32; break;
58 : 0 : case 1 : nFontHeight = 28; break;
59 : 0 : case 2 : nFontHeight = 24; break;
60 : 0 : default :nFontHeight = 20; break;
61 : : }
62 : : }
63 : 0 : break;
64 : : case EPP_TEXTTYPE_Notes :
65 : 0 : nFontHeight = 12;
66 : 0 : break;
67 : : case EPP_TEXTTYPE_notUsed :
68 : : case EPP_TEXTTYPE_Other :
69 : 0 : nFontHeight = 24;
70 : 0 : break;
71 : : }
72 : 0 : rLev.mnFlags = 0;
73 : 0 : rLev.mnFont = 0;
74 : 0 : rLev.mnAsianOrComplexFont = 0xffff;
75 : 0 : rLev.mnFontHeight = nFontHeight;
76 : 0 : rLev.mnFontColor = 0;
77 : 0 : rLev.mnEscapement = 0;
78 : : }
79 : 0 : }
80 : :
81 : :
82 : 0 : void PPTExCharSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
83 : : FontCollection& rFontCollection, int nLevel )
84 : : {
85 [ # # ]: 0 : PortionObj aPortionObj( rXPropSet, rFontCollection );
86 : :
87 : 0 : PPTExCharLevel& rLev = maCharLevel[ nLevel ];
88 : :
89 [ # # ]: 0 : if ( aPortionObj.meCharColor == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
90 : 0 : rLev.mnFontColor = aPortionObj.mnCharColor;
91 [ # # ]: 0 : if ( aPortionObj.meCharEscapement == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
92 : 0 : rLev.mnEscapement = aPortionObj.mnCharEscapement;
93 [ # # ]: 0 : if ( aPortionObj.meCharHeight == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
94 : 0 : rLev.mnFontHeight = aPortionObj.mnCharHeight;
95 [ # # ]: 0 : if ( aPortionObj.meFontName == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
96 : 0 : rLev.mnFont = aPortionObj.mnFont;
97 [ # # ]: 0 : if ( aPortionObj.meAsianOrComplexFont == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
98 : 0 : rLev.mnAsianOrComplexFont = aPortionObj.mnAsianOrComplexFont;
99 [ # # ]: 0 : rLev.mnFlags = aPortionObj.mnCharAttr;
100 : 0 : }
101 : :
102 : 0 : void PPTExCharSheet::Write( SvStream& rSt, PptEscherEx*, sal_uInt16 nLev, sal_Bool, sal_Bool bSimpleText,
103 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet )
104 : : {
105 : 0 : const PPTExCharLevel& rLev = maCharLevel[ nLev ];
106 : :
107 : 0 : sal_uInt32 nCharFlags = 0xefffff;
108 [ # # ]: 0 : if ( bSimpleText )
109 : 0 : nCharFlags = 0x7ffff;
110 : :
111 : 0 : rSt << nCharFlags
112 : 0 : << rLev.mnFlags
113 : 0 : << rLev.mnFont;
114 : :
115 : 0 : sal_uInt32 nFontColor = rLev.mnFontColor;
116 [ # # ]: 0 : if ( nFontColor == COL_AUTO )
117 : : {
118 : 0 : sal_Bool bIsDark = sal_False;
119 : 0 : ::com::sun::star::uno::Any aAny;
120 [ # # ][ # # ]: 0 : if ( PropValue::GetPropertyValue( aAny, rPagePropSet, rtl::OUString( "IsBackgroundDark" ), sal_True ) )
[ # # ][ # # ]
121 : 0 : aAny >>= bIsDark;
122 [ # # ]: 0 : nFontColor = bIsDark ? 0xffffff : 0x000000;
123 : : }
124 : 0 : nFontColor &= 0xffffff;
125 : 0 : nFontColor |= 0xfe000000;
126 [ # # ]: 0 : if ( bSimpleText )
127 : : {
128 : 0 : rSt << rLev.mnFontHeight
129 : 0 : << nFontColor;
130 : : }
131 : : else
132 : : {
133 : 0 : rSt << rLev.mnAsianOrComplexFont
134 : 0 : << (sal_uInt16)0xffff // unbekannt
135 : 0 : << (sal_uInt16)0xffff // unbekannt
136 : 0 : << rLev.mnFontHeight
137 : 0 : << nFontColor
138 : 0 : << rLev.mnEscapement;
139 : : }
140 : 0 : }
141 : :
142 : 0 : PPTExParaSheet::PPTExParaSheet( int nInstance, sal_uInt16 nDefaultTab, PPTExBulletProvider& rProv ) :
143 : : rBuProv ( rProv ),
144 : 0 : mnInstance ( nInstance )
145 : : {
146 : 0 : sal_Bool bHasBullet = sal_False;
147 : :
148 : 0 : sal_uInt16 nUpperDist = 0;
149 : 0 : sal_uInt16 nBulletChar = 0x2022;
150 : 0 : sal_uInt16 nBulletOfs = 0;
151 : 0 : sal_uInt16 nTextOfs = 0;
152 : :
153 [ # # ]: 0 : for ( int nDepth = 0; nDepth < 5; nDepth++ )
154 : : {
155 : 0 : PPTExParaLevel& rLev = maParaLevel[ nDepth ];
156 [ # # # # ]: 0 : switch ( nInstance )
157 : : {
158 : : case EPP_TEXTTYPE_Title :
159 : : case EPP_TEXTTYPE_CenterTitle :
160 : 0 : break;
161 : : case EPP_TEXTTYPE_Body :
162 : : case EPP_TEXTTYPE_CenterBody :
163 : : case EPP_TEXTTYPE_HalfBody :
164 : : case EPP_TEXTTYPE_QuarterBody :
165 : : {
166 : 0 : bHasBullet = sal_True;
167 : 0 : nUpperDist = 0x14;
168 : : }
169 : 0 : break;
170 : : case EPP_TEXTTYPE_Notes :
171 : 0 : nUpperDist = 0x1e;
172 : 0 : break;
173 : :
174 : : }
175 [ # # # # : 0 : switch ( nDepth )
# # ]
176 : : {
177 : : case 0 :
178 : : {
179 : 0 : nBulletChar = 0x2022;
180 : 0 : nBulletOfs = 0;
181 [ # # ]: 0 : nTextOfs = ( bHasBullet ) ? 0xd8 : 0;
182 : : }
183 : 0 : break;
184 : : case 1 :
185 : : {
186 : 0 : nBulletChar = 0x2013;
187 : 0 : nBulletOfs = 0x120;
188 : 0 : nTextOfs = 0x1d4;
189 : : }
190 : 0 : break;
191 : : case 2 :
192 : : {
193 : 0 : nBulletChar = 0x2022;
194 : 0 : nBulletOfs = 0x240;
195 : 0 : nTextOfs = 0x2d0;
196 : : }
197 : 0 : break;
198 : : case 3 :
199 : : {
200 : 0 : nBulletChar = 0x2013;
201 : 0 : nBulletOfs = 0x360;
202 : 0 : nTextOfs = 0x3f0;
203 : : }
204 : 0 : break;
205 : : case 4 :
206 : : {
207 : 0 : nBulletChar = 0xbb;
208 : 0 : nBulletOfs = 0x480;
209 : 0 : nTextOfs = 0x510;
210 : : }
211 : 0 : break;
212 : : }
213 : 0 : rLev.mbIsBullet = bHasBullet;
214 : 0 : rLev.mnBulletChar = nBulletChar;
215 : 0 : rLev.mnBulletFont = 0;
216 : 0 : rLev.mnBulletHeight = 100;
217 : 0 : rLev.mnBulletColor = 0;
218 : 0 : rLev.mnAdjust = 0;
219 : 0 : rLev.mnLineFeed = 100;
220 : 0 : rLev.mnLowerDist = 0;
221 : 0 : rLev.mnUpperDist = nUpperDist;
222 : 0 : rLev.mnTextOfs = nTextOfs;
223 : 0 : rLev.mnBulletOfs = nBulletOfs;
224 : 0 : rLev.mnDefaultTab = nDefaultTab;
225 : 0 : rLev.mnAsianSettings = 2;
226 : 0 : rLev.mnBiDi = 0;
227 : :
228 : 0 : rLev.mbExtendedBulletsUsed = sal_False;
229 : 0 : rLev.mnBulletId = 0xffff;
230 : 0 : rLev.mnBulletStart = 0;
231 : 0 : rLev.mnMappedNumType = 0;
232 : 0 : rLev.mnNumberingType = 0;
233 : : }
234 : 0 : }
235 : :
236 : 0 : void PPTExParaSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
237 : : FontCollection& rFontCollection, int nLevel, const PPTExCharLevel& rCharLevel )
238 : : {
239 [ # # ]: 0 : ParagraphObj aParagraphObj( rXPropSet, rBuProv );
240 [ # # ]: 0 : aParagraphObj.CalculateGraphicBulletSize( rCharLevel.mnFontHeight );
241 : 0 : PPTExParaLevel& rLev = maParaLevel[ nLevel ];
242 : :
243 [ # # ]: 0 : if ( aParagraphObj.meTextAdjust == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
244 : 0 : rLev.mnAdjust = aParagraphObj.mnTextAdjust;
245 [ # # ]: 0 : if ( aParagraphObj.meLineSpacing == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
246 : : {
247 : 0 : sal_Int16 nLineSpacing = aParagraphObj.mnLineSpacing;
248 [ # # ]: 0 : if ( nLineSpacing > 0 ) // if nLinespacing is < 0 the linespacing is an absolute spacing
249 : : {
250 : 0 : sal_Bool bFixedLineSpacing = sal_False;
251 [ # # ][ # # ]: 0 : uno::Any aAny = rXPropSet->getPropertyValue( ::rtl::OUString( "FontIndependentLineSpacing" ) );
252 [ # # ][ # # ]: 0 : if( !(aAny >>= bFixedLineSpacing) || !bFixedLineSpacing )
[ # # ]
253 : : {
254 [ # # ]: 0 : const FontCollectionEntry* pDesc = rFontCollection.GetById( rCharLevel.mnFont );
255 [ # # ]: 0 : if ( pDesc )
256 : 0 : nLineSpacing = (sal_Int16)( (double)nLineSpacing * pDesc->Scaling + 0.5 );
257 : 0 : }
258 : : }
259 : : else
260 : : {
261 [ # # ]: 0 : if ( rCharLevel.mnFontHeight > (sal_uInt16)( ((double)-nLineSpacing) * 0.001 * 72.0 / 2.54 ) ) // 1/100mm to point
262 : : {
263 [ # # ]: 0 : const FontCollectionEntry* pDesc = rFontCollection.GetById( rCharLevel.mnFont );
264 [ # # ]: 0 : if ( pDesc )
265 : 0 : nLineSpacing = (sal_Int16)( (double)100.0 * pDesc->Scaling + 0.5 );
266 : : else
267 : 0 : nLineSpacing = 100;
268 : : }
269 : : else
270 : 0 : nLineSpacing = (sal_Int16)( (double)nLineSpacing / 4.40972 );
271 : : }
272 : 0 : rLev.mnLineFeed = nLineSpacing;
273 : : }
274 [ # # ]: 0 : if ( aParagraphObj.meLineSpacingBottom == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
275 : 0 : rLev.mnLowerDist = aParagraphObj.mnLineSpacingBottom;
276 [ # # ]: 0 : if ( aParagraphObj.meLineSpacingTop == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
277 : 0 : rLev.mnUpperDist = aParagraphObj.mnLineSpacingTop;
278 [ # # ]: 0 : if ( aParagraphObj.meForbiddenRules == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
279 : : {
280 : 0 : rLev.mnAsianSettings &=~1;
281 [ # # ]: 0 : if ( aParagraphObj.mbForbiddenRules )
282 : 0 : rLev.mnAsianSettings |= 1;
283 : : }
284 [ # # ]: 0 : if ( aParagraphObj.meParagraphPunctation == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
285 : : {
286 : 0 : rLev.mnAsianSettings &=~4;
287 [ # # ]: 0 : if ( aParagraphObj.mbParagraphPunctation )
288 : 0 : rLev.mnAsianSettings |= 4;
289 : : }
290 : :
291 [ # # ]: 0 : if ( aParagraphObj.meBiDi == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
292 : 0 : rLev.mnBiDi = aParagraphObj.mnBiDi;
293 : :
294 : 0 : rLev.mbIsBullet = aParagraphObj.mbIsBullet; //( ( aParagraphObj.nBulletFlags & 1 ) != 0 );
295 : :
296 [ # # ]: 0 : if ( !nLevel )
297 : : {
298 [ # # ][ # # ]: 0 : if ( ( aParagraphObj.meBullet == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
299 : : && aParagraphObj.bExtendedParameters )
300 : : {
301 [ # # ]: 0 : for ( sal_Int16 i = 0; i < 5; i++ )
302 : : {
303 : 0 : PPTExParaLevel& rLevel = maParaLevel[ i ];
304 [ # # ]: 0 : if ( i )
305 [ # # ]: 0 : aParagraphObj.ImplGetNumberingLevel( rBuProv, i, sal_False );
306 : 0 : rLevel.mnTextOfs = aParagraphObj.nTextOfs;
307 : 0 : rLevel.mnBulletOfs = (sal_uInt16)aParagraphObj.nBulletOfs;
308 : 0 : rLevel.mnBulletChar = aParagraphObj.cBulletId;
309 : : FontCollectionEntry aFontDescEntry( aParagraphObj.aFontDesc.Name, aParagraphObj.aFontDesc.Family,
310 [ # # ][ # # ]: 0 : aParagraphObj.aFontDesc.Pitch, aParagraphObj.aFontDesc.CharSet );
[ # # ]
311 [ # # ]: 0 : rLevel.mnBulletFont = (sal_uInt16)rFontCollection.GetId( aFontDescEntry );
312 : 0 : rLevel.mnBulletHeight = aParagraphObj.nBulletRealSize;
313 : 0 : rLevel.mnBulletColor = aParagraphObj.nBulletColor;
314 : :
315 : 0 : rLevel.mbExtendedBulletsUsed = aParagraphObj.bExtendedBulletsUsed;
316 : 0 : rLevel.mnBulletId = aParagraphObj.nBulletId;
317 : 0 : rLevel.mnNumberingType = aParagraphObj.nNumberingType;
318 : 0 : rLevel.mnBulletStart = aParagraphObj.nStartWith;
319 : 0 : rLevel.mnMappedNumType = aParagraphObj.nMappedNumType;
320 [ # # ]: 0 : }
321 : : }
322 [ # # ]: 0 : }
323 : 0 : }
324 : :
325 : 0 : void PPTExParaSheet::Write( SvStream& rSt, PptEscherEx*, sal_uInt16 nLev, sal_Bool, sal_Bool bSimpleText,
326 : : const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rPagePropSet )
327 : : {
328 : 0 : const PPTExParaLevel& rLev = maParaLevel[ nLev ];
329 : :
330 [ # # ][ # # ]: 0 : if ( maParaLevel[ 0 ].mbExtendedBulletsUsed || maParaLevel[ 1 ].mbExtendedBulletsUsed ||
[ # # ][ # # ]
[ # # ]
331 : : maParaLevel[ 2 ].mbExtendedBulletsUsed || maParaLevel[ 3 ].mbExtendedBulletsUsed ||
332 : : maParaLevel[ 4 ].mbExtendedBulletsUsed )
333 : : {
334 : 0 : SvStream& rOut = rBuProv.aBuExMasterStream;
335 [ # # ]: 0 : if ( !nLev )
336 : : {
337 : 0 : rOut << (sal_uInt32)( ( EPP_PST_ExtendedParagraphMasterAtom << 16 ) | ( mnInstance << 4 ) )
338 : 0 : << (sal_uInt32)( 5 * 16 + 2 )
339 : 0 : << (sal_uInt16)5; // depth
340 : : }
341 : 0 : sal_uInt16 nBulletId = rLev.mnBulletId;
342 [ # # ]: 0 : if ( rLev.mnNumberingType != SVX_NUM_BITMAP )
343 : 0 : nBulletId = 0xffff;
344 : 0 : rOut << (sal_uInt32)0x03800000
345 : 0 : << (sal_uInt16)nBulletId
346 : 0 : << (sal_uInt32)rLev.mnMappedNumType
347 : 0 : << (sal_uInt16)rLev.mnBulletStart
348 : 0 : << (sal_uInt32)0;
349 : : }
350 : :
351 : 0 : sal_uInt32 nParaFlags = 0x3ffdff;
352 [ # # ]: 0 : sal_uInt16 nBulletFlags = ( rLev.mbIsBullet ) ? 0xf : 0xe;
353 : :
354 [ # # ]: 0 : if ( nLev )
355 : 0 : nParaFlags &= 0x207fff;
356 [ # # ]: 0 : if ( bSimpleText )
357 : 0 : nParaFlags &= 0x7fff;
358 : 0 : sal_uInt32 nBulletColor = rLev.mnBulletColor;
359 [ # # ]: 0 : if ( nBulletColor == COL_AUTO )
360 : : {
361 : 0 : sal_Bool bIsDark = sal_False;
362 : 0 : ::com::sun::star::uno::Any aAny;
363 [ # # ][ # # ]: 0 : if ( PropValue::GetPropertyValue( aAny, rPagePropSet, rtl::OUString( "IsBackgroundDark" ), sal_True ) )
[ # # ][ # # ]
364 : 0 : aAny >>= bIsDark;
365 [ # # ]: 0 : nBulletColor = bIsDark ? 0xffffff : 0x000000;
366 : : }
367 : 0 : nBulletColor &= 0xffffff;
368 : 0 : nBulletColor |= 0xfe000000;
369 : 0 : rSt << nParaFlags
370 : 0 : << nBulletFlags
371 : 0 : << rLev.mnBulletChar
372 : 0 : << rLev.mnBulletFont
373 : 0 : << rLev.mnBulletHeight
374 : 0 : << nBulletColor
375 : 0 : << rLev.mnAdjust
376 : 0 : << rLev.mnLineFeed
377 : 0 : << rLev.mnUpperDist
378 : 0 : << rLev.mnLowerDist
379 : 0 : << rLev.mnTextOfs
380 : 0 : << rLev.mnBulletOfs;
381 : :
382 [ # # ][ # # ]: 0 : if ( bSimpleText || nLev )
383 : : {
384 [ # # ]: 0 : if ( nParaFlags & 0x200000 )
385 : 0 : rSt << rLev.mnBiDi;
386 : : }
387 : : else
388 : : {
389 : 0 : rSt << rLev.mnDefaultTab
390 : 0 : << (sal_uInt16)0
391 : 0 : << (sal_uInt16)0
392 : 0 : << rLev.mnAsianSettings
393 : 0 : << rLev.mnBiDi;
394 : : }
395 : 0 : }
396 : :
397 : :
398 : 0 : PPTExStyleSheet::PPTExStyleSheet( sal_uInt16 nDefaultTab, PPTExBulletProvider& rBuProv )
399 : : {
400 [ # # ]: 0 : for ( int nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
401 : : {
402 [ # # ]: 0 : mpParaSheet[ nInstance ] = ( nInstance == EPP_TEXTTYPE_notUsed ) ? NULL : new PPTExParaSheet( nInstance, nDefaultTab, rBuProv );
403 [ # # ]: 0 : mpCharSheet[ nInstance ] = ( nInstance == EPP_TEXTTYPE_notUsed ) ? NULL : new PPTExCharSheet( nInstance );
404 : : }
405 : 0 : }
406 : :
407 : 0 : PPTExStyleSheet::~PPTExStyleSheet()
408 : : {
409 [ # # ]: 0 : for ( int nInstance = EPP_TEXTTYPE_Title; nInstance <= EPP_TEXTTYPE_QuarterBody; nInstance++ )
410 : : {
411 [ # # ]: 0 : if ( nInstance == EPP_TEXTTYPE_notUsed )
412 : 0 : continue;
413 : :
414 : 0 : delete mpParaSheet[ nInstance ];
415 : 0 : delete mpCharSheet[ nInstance ];
416 : : }
417 : 0 : }
418 : :
419 : 0 : void PPTExStyleSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
420 : : FontCollection& rFontCollection, int nInstance, int nLevel )
421 : : {
422 [ # # ]: 0 : if ( nInstance == EPP_TEXTTYPE_notUsed )
423 : 0 : return;
424 : 0 : mpCharSheet[ nInstance ]->SetStyleSheet( rXPropSet, rFontCollection, nLevel );
425 : 0 : mpParaSheet[ nInstance ]->SetStyleSheet( rXPropSet, rFontCollection, nLevel, mpCharSheet[ nInstance ]->maCharLevel[ nLevel ] );
426 : : }
427 : :
428 : 0 : sal_Bool PPTExStyleSheet::IsHardAttribute( sal_uInt32 nInstance, sal_uInt32 nLevel, PPTExTextAttr eAttr, sal_uInt32 nValue )
429 : : {
430 : 0 : const PPTExParaLevel& rPara = mpParaSheet[ nInstance ]->maParaLevel[ nLevel ];
431 : 0 : const PPTExCharLevel& rChar = mpCharSheet[ nInstance ]->maCharLevel[ nLevel ];
432 : :
433 : 0 : sal_uInt32 nFlag = 0;
434 : :
435 [ # # # # : 0 : switch ( eAttr )
# # # # #
# # # # #
# # # # #
# # # # #
# # ]
436 : : {
437 [ # # ][ # # ]: 0 : case ParaAttr_BulletOn : return ( rPara.mbIsBullet ) ? ( nValue ) ? sal_False : sal_True : ( nValue ) ? sal_True : sal_False;
438 : : case ParaAttr_BuHardFont :
439 : 0 : case ParaAttr_BulletFont : return ( rPara.mnBulletFont != nValue );
440 : : case ParaAttr_BuHardColor :
441 : 0 : case ParaAttr_BulletColor : return ( rPara.mnBulletColor != nValue );
442 : : case ParaAttr_BuHardHeight :
443 : 0 : case ParaAttr_BulletHeight : return ( rPara.mnBulletHeight != nValue );
444 : 0 : case ParaAttr_BulletChar : return ( rPara.mnBulletChar != nValue );
445 : 0 : case ParaAttr_Adjust : return ( rPara.mnAdjust != nValue );
446 : 0 : case ParaAttr_LineFeed : return ( rPara.mnLineFeed != nValue );
447 : 0 : case ParaAttr_UpperDist : return ( rPara.mnUpperDist != nValue );
448 : 0 : case ParaAttr_LowerDist : return ( rPara.mnLowerDist != nValue );
449 : 0 : case ParaAttr_TextOfs : return ( rPara.mnTextOfs != nValue );
450 : 0 : case ParaAttr_BulletOfs : return ( rPara.mnBulletOfs != nValue );
451 : 0 : case ParaAttr_DefaultTab : return ( rPara.mnDefaultTab != nValue );
452 : 0 : case ParaAttr_BiDi : return ( rPara.mnBiDi != nValue );
453 : 0 : case CharAttr_Bold : nFlag = 1; break;
454 : 0 : case CharAttr_Italic : nFlag = 2; break;
455 : 0 : case CharAttr_Underline : nFlag = 4; break;
456 : 0 : case CharAttr_Shadow : nFlag = 16; break;
457 : 0 : case CharAttr_Strikeout : nFlag = 256; break;
458 : 0 : case CharAttr_Embossed : nFlag = 512; break;
459 : 0 : case CharAttr_Font : return ( rChar.mnFont != nValue );
460 : 0 : case CharAttr_AsianOrComplexFont : return ( rChar.mnAsianOrComplexFont != nValue );
461 : 0 : case CharAttr_Symbol : return sal_True;
462 : 0 : case CharAttr_FontHeight : return ( rChar.mnFontHeight != nValue );
463 : 0 : case CharAttr_FontColor : return ( rChar.mnFontColor != nValue );
464 : 0 : case CharAttr_Escapement : return ( rChar.mnEscapement != nValue );
465 : : default:
466 : 0 : break;
467 : : };
468 [ # # ]: 0 : if ( nFlag )
469 : : {
470 [ # # ]: 0 : if ( rChar.mnFlags & nFlag )
471 : 0 : return ( ( nValue & nFlag ) == 0 );
472 : : else
473 : 0 : return ( ( nValue & nFlag ) != 0 );
474 : : }
475 : 0 : return sal_True;
476 : : }
477 : :
478 : 0 : sal_uInt32 PPTExStyleSheet::SizeOfTxCFStyleAtom() const
479 : : {
480 : 0 : return 24;
481 : : }
482 : :
483 : : // the TxCFStyleAtom stores the text properties that are used
484 : : // when creating new objects in PowerPoint.
485 : :
486 : 0 : void PPTExStyleSheet::WriteTxCFStyleAtom( SvStream& rSt )
487 : : {
488 : 0 : const PPTExCharLevel& rCharStyle = mpCharSheet[ EPP_TEXTTYPE_Other ]->maCharLevel[ 0 ];
489 : :
490 : : sal_uInt16 nFlags = 0x60 // ??
491 : : | 0x02 // fontsize;
492 : 0 : | 0x04; // fontcolor
493 : :
494 : 0 : sal_uInt32 nCharFlags = rCharStyle.mnFlags;
495 : 0 : nCharFlags &= CharAttr_Italic | CharAttr_Bold | CharAttr_Underline | CharAttr_Shadow;
496 : :
497 : 0 : rSt << (sal_uInt32)( EPP_TxCFStyleAtom << 16 ) // recordheader
498 : 0 : << SizeOfTxCFStyleAtom() - 8
499 : 0 : << (sal_uInt16)( 0x80 | nCharFlags )
500 : 0 : << (sal_uInt16)nFlags
501 : 0 : << (sal_uInt16)nCharFlags
502 : 0 : << (sal_Int32)-1 // ?
503 : 0 : << rCharStyle.mnFontHeight
504 : 0 : << rCharStyle.mnFontColor;
505 : 0 : }
506 : :
507 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|