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