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 : #ifndef INCLUDED_SW_SOURCE_CORE_INC_SWFONT_HXX
20 : #define INCLUDED_SW_SOURCE_CORE_INC_SWFONT_HXX
21 :
22 : #include <i18nlangtag/lang.h>
23 : #include <tools/color.hxx>
24 : #include <tools/stream.hxx>
25 : #include <tools/gen.hxx>
26 : #include <editeng/svxfont.hxx>
27 : #include <swtypes.hxx>
28 : #include <drawfont.hxx>
29 : #include <editeng/borderline.hxx>
30 : #include <boost/optional.hpp>
31 :
32 : class SfxItemSet;
33 : class SwAttrSet;
34 : class SwDoCapitals; // DoCapitals
35 : class SwDrawTextInfo; // _DrawText
36 : class SwScriptInfo; // _GetTextSize
37 : class SwViewShell;
38 : class IDocumentSettingAccess;
39 : typedef struct _xmlTextWriter *xmlTextWriterPtr;
40 : enum class SvxShadowItemSide;
41 :
42 : const sal_Unicode CH_BLANK = ' '; // ' ' blank spaces
43 : const sal_Unicode CH_BREAK = 0x0A;
44 : const sal_Unicode CH_TAB = '\t'; // \t
45 : const sal_Unicode CH_PAR = 0xB6; // paragraph
46 : const sal_Unicode CH_BULLET = 0xB7; // centered dot
47 :
48 : sal_uInt16 UnMapDirection( sal_uInt16 nDir, const bool bVertFormat );
49 :
50 1835126 : class SwSubFont : public SvxFont
51 : {
52 : friend class SwFont;
53 : const void *pMagic; // "MagicNumber" within the font cache
54 : Size aSize; // foreigners only see this size
55 : sal_uInt16 nFntIndex; // index in the font cache
56 : sal_uInt16 nOrgHeight; // height including escapement/proportion
57 : sal_uInt16 nOrgAscent; // ascent including escapement/proportion
58 : sal_uInt16 nPropWidth; // proportional width
59 : bool smallCapsPercentage66;
60 1834704 : inline SwSubFont() : aSize(0,0)
61 1834704 : { pMagic = NULL; nFntIndex = nOrgHeight = nOrgAscent = 0; nPropWidth =100; smallCapsPercentage66 = false; }
62 :
63 : sal_uInt16 CalcEscAscent( const sal_uInt16 nOldAscent ) const;
64 : sal_uInt16 CalcEscHeight( const sal_uInt16 nOldHeight,
65 : const sal_uInt16 nOldAscent ) const;
66 : void CalcEsc( SwDrawTextInfo& rInf, Point& rPos );
67 :
68 : inline void CopyMagic( const SwSubFont& rFnt )
69 : { pMagic = rFnt.pMagic; nFntIndex = rFnt.nFntIndex; }
70 :
71 : SwSubFont& operator=( const SwSubFont &rFont );
72 :
73 : short _CheckKerning( );
74 :
75 : bool ChgFnt( SwViewShell const *pSh, OutputDevice& rOut );
76 : bool IsSymbol( SwViewShell *pSh );
77 : sal_uInt16 GetAscent( SwViewShell *pSh, const OutputDevice& rOut );
78 : sal_uInt16 GetHeight( SwViewShell *pSh, const OutputDevice& rOut );
79 : Size _GetTextSize( SwDrawTextInfo& rInf );
80 : Size GetCapitalSize( SwDrawTextInfo& rInf );
81 : void _DrawText( SwDrawTextInfo &rInf, const bool bGrey );
82 : void DrawCapital( SwDrawTextInfo &rInf );
83 : void DrawStretchCapital( SwDrawTextInfo &rInf );
84 : void DoOnCapitals( SwDoCapitals &rDo );
85 : void _DrawStretchText( SwDrawTextInfo &rInf );
86 : sal_Int32 _GetCrsrOfst( SwDrawTextInfo& rInf );
87 : sal_Int32 GetCapitalCrsrOfst( SwDrawTextInfo& rInf );
88 :
89 : inline void SetColor( const Color& rColor );
90 : inline void SetFillColor( const Color& rColor );
91 : inline void SetCharSet( const rtl_TextEncoding eCharSet );
92 : inline void SetPitch( const FontPitch ePitch );
93 : inline void SetAlign( const FontAlign eAlign );
94 : inline void SetUnderline( const FontUnderline eUnderline );
95 : inline void SetOverline( const FontUnderline eOverline );
96 : inline void SetStrikeout( const FontStrikeout eStrikeout );
97 : inline void SetItalic( const FontItalic eItalic );
98 : inline void SetOutline( const bool bOutline );
99 : inline void SetVertical( const sal_uInt16 nDir, const bool bVertFormat );
100 : inline void SetShadow( const bool bShadow );
101 : inline void SetAutoKern( FontKerning nAutoKern );
102 : inline void SetWordLineMode( const bool bWordLineMode );
103 : inline void SetEmphasisMark( const FontEmphasisMark eValue );
104 : inline void SetRelief( const FontRelief eNew );
105 :
106 : // methods for sub-/superscript
107 : inline void SetEscapement( const short nNewEsc );
108 : inline void SetProportion( const sal_uInt8 nNewPropr );
109 :
110 : inline void SetFamily( const FontFamily eFamily );
111 : inline void SetName( const OUString& rName );
112 : inline void SetStyleName( const OUString& rStyleName );
113 : inline void SetSize( const Size& rSize );
114 : inline void SetWeight( const FontWeight eWeight );
115 : inline void SetLanguage( LanguageType eNewLang );
116 231371 : inline short CheckKerning()
117 231371 : { return GetFixKerning() >= 0 ? GetFixKerning() : _CheckKerning( ); }
118 2847 : inline void SetPropWidth( const sal_uInt16 nNew )
119 2847 : { pMagic = 0; nPropWidth = nNew; }
120 : public:
121 647046 : sal_uInt16 GetPropWidth() const { return nPropWidth; }
122 : };
123 :
124 : #define SW_LATIN 0
125 : #define SW_CJK 1
126 : #define SW_CTL 2
127 : #define SW_SCRIPTS 3
128 :
129 : class SwFont
130 : {
131 : // CJK == Chinese, Japanese, Korean
132 : // CTL == Complex text layout ( Hebrew, Arabic )
133 : SwSubFont aSub[SW_SCRIPTS]; // Latin-, CJK- and CTL-font
134 :
135 : Color* pBackColor; // background color (i.e. at character styles)
136 : Color m_aHighlightColor; // highlight color
137 : Color aUnderColor; // color of the underlining
138 : Color aOverColor; // color of the overlining
139 :
140 : // character borders
141 : boost::optional<editeng::SvxBorderLine> m_aTopBorder;
142 : boost::optional<editeng::SvxBorderLine> m_aBottomBorder;
143 : boost::optional<editeng::SvxBorderLine> m_aRightBorder;
144 : boost::optional<editeng::SvxBorderLine> m_aLeftBorder;
145 :
146 : // border distance
147 : sal_uInt16 m_nTopBorderDist;
148 : sal_uInt16 m_nBottomBorderDist;
149 : sal_uInt16 m_nRightBorderDist;
150 : sal_uInt16 m_nLeftBorderDist;
151 :
152 : Color m_aShadowColor;
153 : sal_uInt16 m_nShadowWidth;
154 : SvxShadowLocation m_aShadowLocation;
155 :
156 : sal_uInt8 nToxCnt; // counts the nesting depth of the Tox
157 : sal_uInt8 nRefCnt; // counts the nesting depth of the Refs
158 : sal_uInt8 m_nMetaCount; // count META/METAFIELD
159 : sal_uInt8 m_nInputFieldCount; // count INPUTFIELD
160 :
161 : sal_uInt8 nActual; // actual font (Latin, CJK or CTL)
162 :
163 : // switch for the font-extensions
164 : bool bNoHyph :1; // SwTextNoHyphenHere: no separator
165 : bool bBlink :1; // blinking font
166 : bool bPaintBlank :1; // blanks not with DrawRect
167 : bool bFntChg :1;
168 : bool bOrgChg :1; // nOrgHeight/Ascent are invalid
169 : bool bURL :1;
170 : bool bPaintWrong :1; // flag for spelling mistakes
171 : bool bGreyWave :1; // for the extended TextInput: gray waveline
172 : bool bNoColReplace :1; // Replacement without colormanipulation
173 :
174 : public:
175 : SwFont( const SwAttrSet* pSet, const IDocumentSettingAccess* pIDocumentSettingAccess );
176 : SwFont( const SwFont& rFont );
177 :
178 462779 : inline void ChgFnt( SwViewShell const *pSh, OutputDevice& rOut )
179 462779 : { bPaintBlank = aSub[nActual].ChgFnt( pSh, rOut ); }
180 :
181 : ~SwFont();
182 :
183 : SwFont& operator=( const SwFont &rFont );
184 :
185 1143109 : inline sal_uInt8 GetActual() const { return nActual; }
186 : inline void SetActual( sal_uInt8 nNew );
187 0 : inline const SvxFont& GetActualFont() const { return aSub[nActual]; }
188 :
189 : // gets a MagicNumber via SwFntAccess
190 : void GoMagic( SwViewShell *pSh, sal_uInt8 nWhich );
191 : // set background color
192 : void SetBackColor( Color* pNewColor );
193 88011 : inline const Color* GetBackColor() const{ return pBackColor; }
194 : void SetHighlightColor( const Color& aNewColor );
195 19887 : const Color& GetHighlightColor() const { return m_aHighlightColor; }
196 :
197 216728 : inline void ChkMagic( SwViewShell *pSh, sal_uInt8 nWhich )
198 216728 : { if( !aSub[ nWhich ].pMagic ) GoMagic( pSh, nWhich ); }
199 : // assumes the MagicNumber of a (hopefully not identical) colleague
200 : inline void CopyMagic( const SwFont* pFnt, sal_uInt8 nWhich )
201 : { aSub[nWhich].CopyMagic( pFnt->aSub[nWhich] ); }
202 185395 : inline void GetMagic( const void* &rMagic, sal_uInt16 &rIdx, sal_uInt8 nWhich )
203 185395 : { rMagic = aSub[nWhich].pMagic; rIdx = aSub[nWhich].nFntIndex; }
204 190254 : inline void SetMagic( const void* pNew, const sal_uInt16 nIdx, sal_uInt8 nWhich )
205 190254 : { aSub[nWhich].pMagic = pNew; aSub[nWhich].nFntIndex = nIdx; }
206 32998 : inline bool DifferentMagic( const SwFont* pFnt, sal_uInt8 nWhich )
207 47641 : { return aSub[nWhich].pMagic != pFnt->aSub[nWhich].pMagic ||
208 47641 : !aSub[nWhich].pMagic || !pFnt->aSub[nWhich].pMagic; }
209 :
210 287 : inline const Size &GetSize( sal_uInt8 nWhich ) const
211 287 : { return aSub[nWhich].aSize; }
212 396162 : inline bool IsFntChg() const { return bFntChg; }
213 136778 : inline void SetFntChg( const bool bNew ) { bFntChg = bNew; }
214 :
215 : // the encapsulated SV-Font-methods (set bFntChg to true)
216 : inline void SetColor( const Color& rColor );
217 : inline void SetFillColor( const Color& rColor );
218 : inline void SetAlign( const FontAlign eAlign );
219 : inline void SetUnderline( const FontUnderline eUnderline );
220 70512 : inline void SetUnderColor( const Color &rColor ) { aUnderColor = rColor; }
221 : inline void SetOverline( const FontUnderline eOverline );
222 57191 : inline void SetOverColor( const Color &rColor ) { aOverColor = rColor; }
223 : inline void SetStrikeout( const FontStrikeout eStrikeout );
224 : inline void SetOutline( const bool bOutline );
225 : void SetVertical( sal_uInt16 nDir, const bool nVertLayout = false );
226 : inline void SetShadow( const bool bShadow );
227 : inline void SetAutoKern( FontKerning nAutoKern );
228 : inline void SetTransparent( const bool bTrans );
229 : inline void SetWordLineMode( const bool bWordLineMode );
230 : inline void SetFixKerning( const short nNewKern );
231 : inline void SetCaseMap( const SvxCaseMap eNew );
232 : inline void SetEmphasisMark( const FontEmphasisMark eValue );
233 :
234 : // methods for sub-/superscript
235 : inline void SetEscapement( const short nNewEsc );
236 : inline void SetProportion( const sal_uInt8 nNewPropr );
237 :
238 : inline void SetPropWidth( const sal_uInt16 nNew );
239 :
240 : inline void SetFamily( const FontFamily eFamily, const sal_uInt8 nWhich );
241 : inline void SetName( const OUString& rName, const sal_uInt8 nWhich );
242 : inline void SetStyleName( const OUString& rStyleName, const sal_uInt8 nWhich );
243 : inline void SetSize( const Size& rSize, const sal_uInt8 nWhich );
244 : inline void SetWeight( const FontWeight eWeight, const sal_uInt8 nWhich );
245 : inline void SetItalic( const FontItalic eItalic, const sal_uInt8 nWhich );
246 : inline void SetLanguage( LanguageType eNewLang, const sal_uInt8 nWhich );
247 : inline void SetCharSet( const rtl_TextEncoding eCharSet, const sal_uInt8 nWhich );
248 : inline void SetPitch( const FontPitch ePitch, const sal_uInt8 nWhich );
249 : inline void SetRelief( const FontRelief eNew );
250 :
251 : // Get/Set-methods for the current setting
252 : inline void SetNoHyph( const bool bNew );
253 : inline bool IsNoHyph() const { return bNoHyph; }
254 : inline void SetBlink( const bool bBlink );
255 20449 : inline bool IsBlink() const { return bBlink; }
256 1630 : inline sal_uInt8 &GetTox() { return nToxCnt; }
257 : inline sal_uInt8 GetTox() const { return nToxCnt; }
258 87972 : inline bool IsTox() const { return ( 0 != nToxCnt ); }
259 155 : inline sal_uInt8 &GetRef() { return nRefCnt; }
260 : inline sal_uInt8 GetRef() const { return nRefCnt; }
261 87926 : inline bool IsRef() const { return ( 0 != nRefCnt ); }
262 1216 : inline sal_uInt8 &GetMeta() { return m_nMetaCount; }
263 : inline sal_uInt8 GetMeta() const { return m_nMetaCount; }
264 87908 : inline bool IsMeta() const { return (0 != m_nMetaCount); }
265 116 : inline sal_uInt8 &GetInputField() { return m_nInputFieldCount; }
266 : inline sal_uInt8 GetInputField() const { return m_nInputFieldCount; }
267 87951 : inline bool IsInputField() const { return (0 != m_nInputFieldCount); }
268 : inline void SetURL( const bool bURL );
269 122063 : inline bool IsURL() const { return bURL; }
270 : inline void SetGreyWave( const bool bNew );
271 20515 : inline bool IsGreyWave() const { return bGreyWave; }
272 : inline void SetNoCol( const bool bNew );
273 : inline bool IsNoCol() const { return bNoColReplace; }
274 :
275 : inline void SetPaintBlank( const bool bNew );
276 554 : inline bool IsPaintBlank() const { return bPaintBlank; }
277 : inline void SetPaintWrong( const bool bNew );
278 : inline bool IsPaintWrong() const { return bPaintWrong; }
279 :
280 : // setting of the base class font for SwTextCharFormat
281 : void SetDiffFnt( const SfxItemSet* pSet,
282 : const IDocumentSettingAccess* pIDocumentSettingAccess );
283 :
284 0 : inline const SvxFont &GetFnt( const sal_uInt8 nWhich ) const
285 0 : { return aSub[nWhich]; };
286 :
287 0 : bool IsSymbol( SwViewShell *pSh )
288 0 : { return aSub[nActual].IsSymbol( pSh ); }
289 301363 : FontUnderline GetUnderline() const { return aSub[nActual].GetUnderline(); }
290 616947 : const Color& GetUnderColor() const { return aUnderColor; }
291 681 : FontUnderline GetOverline() const { return aSub[nActual].GetOverline(); }
292 616880 : const Color& GetOverColor() const { return aOverColor; }
293 : short GetFixKerning() const { return aSub[nActual].GetFixKerning(); }
294 681 : FontStrikeout GetStrikeout() const { return aSub[nActual].GetStrikeout(); }
295 39 : const Color& GetColor() const { return aSub[nActual].GetColor(); }
296 : bool IsShadow() const { return aSub[nActual].IsShadow(); }
297 7810 : bool IsWordLineMode() const { return aSub[nActual].IsWordLineMode(); }
298 : bool IsOutline() const { return aSub[nActual].IsOutline(); }
299 : bool IsKerning() const { return aSub[nActual].IsKerning(); }
300 8952 : short GetEscapement() const { return aSub[nActual].GetEscapement(); }
301 7365 : SvxCaseMap GetCaseMap() const { return aSub[nActual].GetCaseMap(); }
302 311 : sal_uInt8 GetPropr() const { return aSub[nActual].GetPropr(); }
303 103647 : FontItalic GetItalic() const { return aSub[nActual].GetItalic(); }
304 162829 : LanguageType GetLanguage() const { return aSub[nActual].GetLanguage(); }
305 : FontAlign GetAlign() const { return aSub[nActual].GetAlign(); }
306 : const OUString& GetName() const { return aSub[nActual].GetName(); }
307 : const OUString& GetStyleName() const {return aSub[nActual].GetStyleName();}
308 : FontFamily GetFamily() const { return aSub[nActual].GetFamily(); }
309 : FontPitch GetPitch() const { return aSub[nActual].GetPitch(); }
310 : rtl_TextEncoding GetCharSet() const { return aSub[nActual].GetCharSet(); }
311 112378 : long GetHeight() const { return aSub[nActual].GetSize().Height(); }
312 246 : FontWeight GetWeight() const { return aSub[nActual].GetWeight(); }
313 0 : FontEmphasisMark GetEmphasisMark() const
314 0 : { return aSub[nActual].GetEmphasisMark(); }
315 : sal_uInt16 GetPropWidth() const { return aSub[nActual].GetPropWidth(); }
316 : sal_uInt16 GetOrientation( const bool nVertLayout = false ) const;
317 :
318 0 : inline const OUString& GetName( const sal_uInt8 nWhich ) const
319 0 : { return aSub[nWhich].GetName(); }
320 0 : inline LanguageType GetLanguage( const sal_uInt8 nWhich ) const
321 0 : { return aSub[nWhich].GetLanguage(); }
322 : inline const OUString& GetStyleName( const sal_uInt8 nWhich ) const
323 : { return aSub[nWhich].GetStyleName(); }
324 : inline FontFamily GetFamily( const sal_uInt8 nWhich ) const
325 : { return aSub[nWhich].GetFamily(); }
326 : inline FontItalic GetItalic( const sal_uInt8 nWhich ) const
327 : { return aSub[nWhich].GetItalic(); }
328 : inline FontPitch GetPitch( const sal_uInt8 nWhich ) const
329 : { return aSub[nWhich].GetPitch(); }
330 41 : inline rtl_TextEncoding GetCharSet( const sal_uInt8 nWhich ) const
331 41 : { return aSub[nWhich].GetCharSet(); }
332 33 : inline long GetHeight( const sal_uInt8 nWhich ) const
333 33 : { return aSub[nWhich].GetSize().Height(); }
334 : inline FontWeight GetWeight( const sal_uInt8 nWhich ) const
335 : { return aSub[nWhich].GetWeight(); }
336 : inline FontEmphasisMark GetEmphasisMark( const sal_uInt8 nWhich ) const
337 : { return aSub[nWhich].GetEmphasisMark(); }
338 :
339 : // makes the logical font be effective in the OutputDevice
340 : void ChgPhysFnt( SwViewShell *pSh, OutputDevice& rOut );
341 :
342 : Size GetCapitalSize( SwDrawTextInfo& rInf )
343 : { return aSub[nActual].GetCapitalSize( rInf ); }
344 :
345 : sal_Int32 GetCapitalBreak( SwViewShell const* pSh, const OutputDevice* pOut,
346 : const SwScriptInfo* pScript, const OUString& rText,
347 : long nTextWidth, const sal_Int32 nIdx,
348 : const sal_Int32 nLen );
349 :
350 : sal_Int32 GetCapitalCrsrOfst( SwDrawTextInfo& rInf )
351 : { return aSub[nActual].GetCapitalCrsrOfst( rInf ); }
352 :
353 : void DrawCapital( SwDrawTextInfo &rInf )
354 : { aSub[nActual].DrawCapital( rInf ); }
355 :
356 : void DrawStretchCapital( SwDrawTextInfo &rInf )
357 : { aSub[nActual].DrawStretchCapital( rInf ); }
358 :
359 2 : void DoOnCapitals( SwDoCapitals &rDo )
360 2 : { aSub[nActual].DoOnCapitals( rDo ); }
361 :
362 103496 : Size _GetTextSize( SwDrawTextInfo& rInf )
363 103496 : { rInf.SetFont( this ); return aSub[nActual]._GetTextSize( rInf ); }
364 :
365 : sal_Int32 GetTextBreak( SwDrawTextInfo& rInf, long nTextWidth );
366 :
367 16 : sal_Int32 _GetCrsrOfst( SwDrawTextInfo& rInf )
368 16 : { return aSub[nActual]._GetCrsrOfst( rInf ); }
369 :
370 20515 : inline void _DrawText( SwDrawTextInfo &rInf )
371 20515 : { aSub[nActual]._DrawText( rInf, IsGreyWave() ); }
372 :
373 147 : inline void _DrawStretchText( SwDrawTextInfo &rInf )
374 147 : { aSub[nActual]._DrawStretchText( rInf ); }
375 :
376 107130 : inline short CheckKerning()
377 107130 : { return aSub[nActual].CheckKerning(); }
378 :
379 238186 : inline sal_uInt16 GetAscent( SwViewShell *pSh, const OutputDevice& rOut )
380 238186 : { return aSub[nActual].GetAscent( pSh, rOut ); }
381 314463 : inline sal_uInt16 GetHeight( SwViewShell *pSh, const OutputDevice& rOut )
382 314463 : { return aSub[nActual].GetHeight( pSh, rOut ); }
383 :
384 55330 : inline void Invalidate()
385 55330 : { bFntChg = bOrgChg = true; }
386 :
387 : void SetTopBorder( const editeng::SvxBorderLine* pTopBorder );
388 : void SetBottomBorder( const editeng::SvxBorderLine* pBottomBorder );
389 : void SetRightBorder( const editeng::SvxBorderLine* pRightBorder );
390 : void SetLeftBorder( const editeng::SvxBorderLine* pLeftBorder );
391 :
392 22 : const boost::optional<editeng::SvxBorderLine>& GetTopBorder() const { return m_aTopBorder; }
393 22 : const boost::optional<editeng::SvxBorderLine>& GetBottomBorder() const { return m_aBottomBorder; }
394 2334 : const boost::optional<editeng::SvxBorderLine>& GetRightBorder() const { return m_aRightBorder; }
395 20475 : const boost::optional<editeng::SvxBorderLine>& GetLeftBorder() const { return m_aLeftBorder; }
396 :
397 : // Get absolute border correspond to the layout verticality and orientation.
398 : const boost::optional<editeng::SvxBorderLine>& GetAbsTopBorder( const bool bVertLayout ) const;
399 : const boost::optional<editeng::SvxBorderLine>& GetAbsBottomBorder( const bool bVertLayout ) const;
400 : const boost::optional<editeng::SvxBorderLine>& GetAbsRightBorder( const bool bVertLayout ) const;
401 : const boost::optional<editeng::SvxBorderLine>& GetAbsLeftBorder( const bool bVertLayout ) const;
402 :
403 : void SetTopBorderDist( const sal_uInt16 nTopDist );
404 : void SetBottomBorderDist( const sal_uInt16 nBottomDist );
405 : void SetRightBorderDist( const sal_uInt16 nRightDist );
406 : void SetLeftBorderDist( const sal_uInt16 nLeftDist );
407 :
408 10 : sal_uInt16 GetTopBorderDist() const { return m_nTopBorderDist; }
409 10 : sal_uInt16 GetBottomBorderDist() const { return m_nBottomBorderDist; }
410 10 : sal_uInt16 GetRightBorderDist() const { return m_nRightBorderDist; }
411 10 : sal_uInt16 GetLeftBorderDist() const { return m_nLeftBorderDist; }
412 :
413 : // Return with the whole space which border holed (border width, spacing and shadow width)
414 : sal_uInt16 GetTopBorderSpace() const;
415 : sal_uInt16 GetBottomBorderSpace() const;
416 : sal_uInt16 GetRightBorderSpace() const;
417 : sal_uInt16 GetLeftBorderSpace() const;
418 :
419 : /// Check whether font has any border on any side
420 : bool HasBorder() const;
421 :
422 : void SetShadowColor( const Color& rColor );
423 : void SetShadowWidth( const sal_uInt16 nWidth );
424 : void SetShadowLocation( const SvxShadowLocation aLocation );
425 :
426 20780 : const Color& GetShadowColor() const { return m_aShadowColor; }
427 20780 : sal_uInt16 GetShadowWidth() const { return m_nShadowWidth; }
428 10 : SvxShadowLocation GetShadowLocation() const { return m_aShadowLocation; }
429 :
430 : /**
431 : * Get the absolute shadow location dependent from orientation.
432 : *
433 : * @param[in] bVertLayout true, if the container layout is vertical
434 : * false, otherwise
435 : * @return absolute location
436 : **/
437 : SvxShadowLocation GetAbsShadowLocation( const bool bVertLayout ) const;
438 :
439 : /**
440 : * Calculate the shadow space on the specified side dependent from
441 : * the orientation and connection with neightbours.
442 : * @see shaditem.hxx for integer constants of sides
443 : *
444 : * @param[in] nShadow specify the side
445 : * @param[in] bVertLayout true, if the container layout is vertical
446 : * false, otherwise
447 : * @param[in] bSkipLeft relative left shadow space is skipped
448 : * @param[in] bSkipRight relative right shadow space is skipped
449 : * @return the shadow space
450 : **/
451 : sal_uInt16 CalcShadowSpace(
452 : const SvxShadowItemSide nShadow, const bool bVertLayout,
453 : const bool bSkipLeft, const bool bSkipRight ) const;
454 :
455 : void dumpAsXml( xmlTextWriterPtr writer = NULL ) const;
456 : };
457 :
458 93662 : inline void SwFont::SetColor( const Color& rColor )
459 : {
460 93662 : bFntChg = true;
461 93662 : aSub[0].SetColor( rColor );
462 93662 : aSub[1].SetColor( rColor );
463 93662 : aSub[2].SetColor( rColor );
464 93662 : }
465 :
466 : // encapsulated SV-Font-method
467 280986 : inline void SwSubFont::SetColor( const Color& rColor )
468 : {
469 280986 : pMagic = 0;
470 280986 : Font::SetColor( rColor );
471 280986 : }
472 :
473 : // encapsulated SV-Font-method
474 201 : inline void SwSubFont::SetFillColor( const Color& rColor )
475 : {
476 201 : pMagic = 0;
477 201 : Font::SetFillColor( rColor );
478 201 : }
479 :
480 67 : inline void SwFont::SetFillColor( const Color& rColor )
481 : {
482 67 : bFntChg = true;
483 67 : aSub[0].SetFillColor( rColor );
484 67 : aSub[1].SetFillColor( rColor );
485 67 : aSub[2].SetFillColor( rColor );
486 67 : }
487 :
488 : // encapsulated SV-Font-method
489 253099 : inline void SwSubFont::SetFamily( const FontFamily eFamily )
490 : {
491 253099 : pMagic = 0;
492 253099 : Font::SetFamily( eFamily );
493 253099 : }
494 :
495 75840 : inline void SwFont::SetFamily( const FontFamily eFamily, const sal_uInt8 nWhich )
496 : {
497 75840 : bFntChg = true;
498 75840 : aSub[nWhich].SetFamily( eFamily );
499 75840 : }
500 :
501 : // encapsulated SV-Font-method
502 247116 : inline void SwSubFont::SetName( const OUString& rName )
503 : {
504 247116 : pMagic = 0;
505 247116 : Font::SetName( rName );
506 247116 : }
507 :
508 75840 : inline void SwFont::SetName( const OUString& rName, const sal_uInt8 nWhich )
509 : {
510 75840 : bFntChg = true;
511 75840 : aSub[nWhich].SetName( rName );
512 75840 : }
513 :
514 : // encapsulated SV-Font-method
515 247116 : inline void SwSubFont::SetStyleName( const OUString& rStyleName )
516 : {
517 247116 : pMagic = 0;
518 247116 : Font::SetStyleName( rStyleName );
519 247116 : }
520 :
521 75840 : inline void SwFont::SetStyleName( const OUString& rStyle, const sal_uInt8 nWhich )
522 : {
523 75840 : bFntChg = true;
524 75840 : aSub[nWhich].SetStyleName( rStyle );
525 75840 : }
526 :
527 : // encapsulated SV-Font-method
528 247116 : inline void SwSubFont::SetCharSet( const rtl_TextEncoding eCharSet )
529 : {
530 247116 : pMagic = 0;
531 247116 : Font::SetCharSet( eCharSet );
532 247116 : }
533 :
534 75840 : inline void SwFont::SetCharSet( const rtl_TextEncoding eCharSet, const sal_uInt8 nWhich )
535 : {
536 75840 : bFntChg = true;
537 75840 : aSub[nWhich].SetCharSet( eCharSet );
538 75840 : }
539 :
540 : // encapsulated SV-Font-method
541 247115 : inline void SwSubFont::SetPitch( const FontPitch ePitch )
542 : {
543 247115 : pMagic = 0;
544 247115 : Font::SetPitch( ePitch );
545 247115 : }
546 :
547 : // encapsulated SV-Font-method
548 75839 : inline void SwFont::SetPitch( const FontPitch ePitch, const sal_uInt8 nWhich )
549 : {
550 75839 : bFntChg = true;
551 75839 : aSub[nWhich].SetPitch( ePitch );
552 75839 : }
553 :
554 : // encapsulated SV-Font-method
555 252225 : inline void SwSubFont::SetAlign( const FontAlign eAlign )
556 : {
557 252225 : pMagic = 0;
558 252225 : Font::SetAlign( eAlign );
559 252225 : }
560 :
561 84075 : inline void SwFont::SetAlign( const FontAlign eAlign )
562 : {
563 84075 : bFntChg = true;
564 84075 : aSub[0].SetAlign( eAlign );
565 84075 : aSub[1].SetAlign( eAlign );
566 84075 : aSub[2].SetAlign( eAlign );
567 84075 : }
568 :
569 : // encapsulated SV-Font-method
570 236265 : inline void SwSubFont::SetWeight( const FontWeight eWeight )
571 : {
572 236265 : pMagic = 0;
573 236265 : Font::SetWeight( eWeight );
574 236265 : }
575 :
576 64989 : inline void SwFont::SetWeight( const FontWeight eWeight, const sal_uInt8 nWhich )
577 : {
578 64989 : bFntChg = true;
579 64989 : aSub[nWhich].SetWeight( eWeight );
580 64989 : }
581 :
582 : // encapsulated SV-Font-method
583 233118 : inline void SwSubFont::SetUnderline( const FontUnderline eUnderline )
584 : {
585 233118 : pMagic = 0;
586 233118 : Font::SetUnderline( eUnderline );
587 233118 : }
588 :
589 77637 : inline void SwFont::SetUnderline( const FontUnderline eUnderline )
590 : {
591 77637 : bFntChg = true;
592 77637 : aSub[0].SetUnderline( eUnderline );
593 77637 : aSub[1].SetUnderline( eUnderline );
594 77637 : aSub[2].SetUnderline( eUnderline );
595 77637 : }
596 :
597 : // encapsulated SV-Font-method
598 193067 : inline void SwSubFont::SetOverline( const FontUnderline eOverline )
599 : {
600 193067 : pMagic = 0;
601 193067 : Font::SetOverline( eOverline );
602 193067 : }
603 :
604 64332 : inline void SwFont::SetOverline( const FontUnderline eOverline )
605 : {
606 64332 : bFntChg = true;
607 64332 : aSub[0].SetOverline( eOverline );
608 64332 : aSub[1].SetOverline( eOverline );
609 64332 : aSub[2].SetOverline( eOverline );
610 64332 : }
611 :
612 : // encapsulated SV-Font-method
613 179969 : inline void SwSubFont::SetStrikeout( const FontStrikeout eStrikeout )
614 : {
615 179969 : pMagic = 0;
616 179969 : Font::SetStrikeout( eStrikeout );
617 179969 : }
618 :
619 59966 : inline void SwFont::SetStrikeout( const FontStrikeout eStrikeout )
620 : {
621 59966 : bFntChg = true;
622 59966 : aSub[0].SetStrikeout( eStrikeout );
623 59966 : aSub[1].SetStrikeout( eStrikeout );
624 59966 : aSub[2].SetStrikeout( eStrikeout );
625 59966 : }
626 :
627 : // encapsulated SV-Font-method
628 200473 : inline void SwSubFont::SetItalic( const FontItalic eItalic )
629 : {
630 200473 : pMagic = 0;
631 200473 : Font::SetItalic( eItalic );
632 200473 : }
633 :
634 29197 : inline void SwFont::SetItalic( const FontItalic eItalic, const sal_uInt8 nWhich )
635 : {
636 29197 : bFntChg = true;
637 29197 : aSub[nWhich].SetItalic( eItalic );
638 29197 : }
639 :
640 : // encapsulated SV-Font-method
641 174009 : inline void SwSubFont::SetOutline( const bool bOutline )
642 : {
643 174009 : pMagic = 0;
644 174009 : Font::SetOutline( bOutline );
645 174009 : }
646 :
647 58003 : inline void SwFont::SetOutline( const bool bOutline )
648 : {
649 58003 : bFntChg = true;
650 58003 : aSub[0].SetOutline( bOutline );
651 58003 : aSub[1].SetOutline( bOutline );
652 58003 : aSub[2].SetOutline( bOutline );
653 58003 : }
654 :
655 : // encapsulated SV-Font-method
656 174708 : inline void SwSubFont::SetShadow( const bool bShadow )
657 : {
658 174708 : pMagic = 0;
659 174708 : Font::SetShadow( bShadow );
660 174708 : }
661 :
662 58236 : inline void SwFont::SetShadow( const bool bShadow )
663 : {
664 58236 : bFntChg = true;
665 58236 : aSub[0].SetShadow( bShadow );
666 58236 : aSub[1].SetShadow( bShadow );
667 58236 : aSub[2].SetShadow( bShadow );
668 58236 : }
669 :
670 : // encapsulated SV-Font-method
671 178584 : inline void SwSubFont::SetAutoKern( FontKerning nAutoKern )
672 : {
673 178584 : pMagic = 0;
674 178584 : Font::SetKerning( nAutoKern );
675 178584 : }
676 :
677 59528 : inline void SwFont::SetAutoKern( FontKerning nAutoKern )
678 : {
679 59528 : bFntChg = true;
680 59528 : aSub[1].SetAutoKern( nAutoKern );
681 59528 : if( nAutoKern != FontKerning::NONE )
682 51935 : nAutoKern = FontKerning::FontSpecific;
683 59528 : aSub[0].SetAutoKern( nAutoKern );
684 59528 : aSub[2].SetAutoKern( nAutoKern );
685 59528 : }
686 :
687 84075 : inline void SwFont::SetTransparent( const bool bTrans )
688 : {
689 84075 : aSub[0].SetTransparent( bTrans );
690 84075 : aSub[1].SetTransparent( bTrans );
691 84075 : aSub[2].SetTransparent( bTrans );
692 84075 : }
693 :
694 59411 : inline void SwFont::SetFixKerning( const short nNewKern )
695 : {
696 59411 : aSub[SW_LATIN].SetFixKerning( nNewKern );
697 59411 : aSub[SW_CJK].SetFixKerning( nNewKern );
698 59411 : aSub[SW_CTL].SetFixKerning( nNewKern );
699 59411 : }
700 :
701 59193 : inline void SwFont::SetCaseMap( const SvxCaseMap eNew )
702 : {
703 59193 : aSub[SW_LATIN].SetCaseMap( eNew );
704 59193 : aSub[SW_CJK].SetCaseMap( eNew );
705 59193 : aSub[SW_CTL].SetCaseMap( eNew );
706 59193 : }
707 :
708 : // encapsulated SV-Font-method
709 174678 : inline void SwSubFont::SetWordLineMode( const bool bWordLineMode )
710 : {
711 174678 : pMagic = 0;
712 174678 : Font::SetWordLineMode( bWordLineMode );
713 174678 : }
714 :
715 58226 : inline void SwFont::SetWordLineMode( const bool bWordLineMode )
716 : {
717 58226 : bFntChg = true;
718 58226 : aSub[0].SetWordLineMode( bWordLineMode );
719 58226 : aSub[1].SetWordLineMode( bWordLineMode );
720 58226 : aSub[2].SetWordLineMode( bWordLineMode );
721 58226 : }
722 : // encapsulated SV-Font-method
723 174171 : inline void SwSubFont::SetEmphasisMark( const FontEmphasisMark eValue )
724 : {
725 174171 : pMagic = 0;
726 174171 : Font::SetEmphasisMark( eValue );
727 174171 : }
728 :
729 58057 : inline void SwFont::SetEmphasisMark( const FontEmphasisMark eValue )
730 : {
731 58057 : bFntChg = true;
732 58057 : aSub[0].SetEmphasisMark( eValue );
733 58057 : aSub[1].SetEmphasisMark( eValue );
734 58057 : aSub[2].SetEmphasisMark( eValue );
735 58057 : }
736 :
737 57520 : inline void SwFont::SetPropWidth( const sal_uInt16 nNew )
738 : {
739 57520 : if( nNew != aSub[0].GetPropWidth() )
740 : {
741 949 : bFntChg = true;
742 949 : aSub[0].SetPropWidth( nNew );
743 949 : aSub[1].SetPropWidth( nNew );
744 949 : aSub[2].SetPropWidth( nNew );
745 : }
746 57520 : }
747 :
748 : // encapsulated SV-Font-method
749 4803 : inline void SwSubFont::SetRelief( const FontRelief eNew )
750 : {
751 4803 : pMagic = 0;
752 4803 : Font::SetRelief( eNew );
753 4803 : }
754 :
755 57859 : inline void SwFont::SetRelief( const FontRelief eNew )
756 : {
757 57859 : if( eNew != aSub[0].GetRelief() )
758 : {
759 1601 : bFntChg = true;
760 1601 : aSub[0].SetRelief( eNew );
761 1601 : aSub[1].SetRelief( eNew );
762 1601 : aSub[2].SetRelief( eNew );
763 : }
764 57859 : }
765 :
766 : // overloaded font-method
767 278111 : inline void SwSubFont::SetSize( const Size& rSize )
768 : {
769 278111 : aSize = rSize;
770 278111 : if ( GetPropr() == 100 )
771 276738 : Font::SetSize( aSize );
772 : else
773 : {
774 : Font::SetSize( Size(
775 1373 : (long) aSize.Width() * GetPropr() / 100L,
776 2746 : (long) aSize.Height() * GetPropr() / 100L ) );
777 : }
778 278111 : pMagic = 0;
779 278111 : }
780 :
781 124658 : inline void SwFont::SetSize( const Size& rSize, const sal_uInt8 nWhich )
782 : {
783 124658 : if( aSub[nWhich].aSize != rSize )
784 : {
785 103173 : aSub[nWhich].SetSize( rSize );
786 103173 : bFntChg = true;
787 103173 : bOrgChg = true;
788 : }
789 124658 : }
790 :
791 486879 : inline void SwFont::SetActual( sal_uInt8 nNew )
792 : {
793 486879 : if ( nActual != nNew )
794 : {
795 4990 : bFntChg = true;
796 4990 : bOrgChg = true;
797 4990 : nActual = nNew;
798 : }
799 486879 : }
800 :
801 16438 : inline void SwSubFont::SetProportion( const sal_uInt8 nNewPropr )
802 : {
803 16438 : pMagic = 0;
804 16438 : Font::SetSize( Size( (long) aSize.Width() * nNewPropr / 100L,
805 32876 : (long) aSize.Height() * nNewPropr / 100L ) );
806 16438 : SvxFont::SetPropr( nNewPropr );
807 16438 : }
808 :
809 13837 : inline void SwFont::SetProportion( const sal_uInt8 nNewPropr )
810 : {
811 13837 : if( nNewPropr != aSub[0].GetPropr() )
812 : {
813 5406 : bFntChg = true;
814 5406 : bOrgChg = true;
815 :
816 5406 : aSub[0].SetProportion( nNewPropr );
817 5406 : aSub[1].SetProportion( nNewPropr );
818 5406 : aSub[2].SetProportion( nNewPropr );
819 : }
820 13837 : }
821 :
822 15393 : inline void SwSubFont::SetEscapement( const short nNewEsc )
823 : {
824 15393 : pMagic = 0;
825 15393 : SvxFont::SetEscapement( nNewEsc );
826 15393 : }
827 :
828 60368 : inline void SwFont::SetEscapement( const short nNewEsc )
829 : {
830 60368 : if( nNewEsc != aSub[0].GetEscapement() )
831 : {
832 : // these have to be set, otherwise nOrgHeight and nOrgAscent will not
833 : // be calculated
834 5131 : bFntChg = true;
835 5131 : bOrgChg = true;
836 :
837 5131 : aSub[0].SetEscapement( nNewEsc );
838 5131 : aSub[1].SetEscapement( nNewEsc );
839 5131 : aSub[2].SetEscapement( nNewEsc );
840 : }
841 60368 : }
842 :
843 187108 : inline void SwSubFont::SetLanguage( LanguageType eNewLang )
844 : {
845 187108 : pMagic = 0;
846 187108 : if( eNewLang == LANGUAGE_SYSTEM )
847 537 : eNewLang = (LanguageType)GetAppLanguage();
848 187108 : SvxFont::SetLanguage( eNewLang );
849 187108 : }
850 :
851 15541 : inline void SwFont::SetLanguage( const LanguageType eNewLang, const sal_uInt8 nWhich )
852 : {
853 15541 : aSub[nWhich].SetLanguage( eNewLang );
854 15541 : if( SW_CJK == nWhich )
855 : {
856 2603 : aSub[SW_LATIN].SetCJKContextLanguage( eNewLang );
857 2603 : aSub[SW_CJK].SetCJKContextLanguage( eNewLang );
858 2603 : aSub[SW_CTL].SetCJKContextLanguage( eNewLang );
859 : }
860 15541 : }
861 :
862 : inline void SwFont::SetPaintBlank( const bool bNew )
863 : {
864 : bPaintBlank = bNew;
865 : }
866 :
867 : inline void SwFont::SetPaintWrong( const bool bNew )
868 : {
869 : bPaintWrong = bNew;
870 : }
871 :
872 0 : inline void SwFont::SetNoHyph( const bool bNew )
873 : {
874 0 : bNoHyph = bNew;
875 0 : }
876 :
877 1215 : inline void SwFont::SetBlink( const bool bNew )
878 : {
879 1215 : bBlink = bNew;
880 1215 : }
881 :
882 : inline void SwFont::SetURL( const bool bNew )
883 : {
884 : bURL = bNew;
885 : }
886 :
887 0 : inline void SwFont::SetGreyWave( const bool bNew )
888 : {
889 0 : bGreyWave = bNew;
890 0 : }
891 :
892 2973 : inline void SwFont::SetNoCol( const bool bNew )
893 : {
894 2973 : bNoColReplace = bNew;
895 2973 : }
896 :
897 2634 : inline void SwSubFont::SetVertical( const sal_uInt16 nDir, const bool bVertFormat )
898 : {
899 2634 : pMagic = 0;
900 2634 : Font::SetVertical( bVertFormat );
901 2634 : Font::SetOrientation( nDir );
902 2634 : }
903 :
904 57484 : inline void SwFont::SetTopBorderDist( const sal_uInt16 nTopDist )
905 : {
906 57484 : m_nTopBorderDist = nTopDist;
907 57484 : bFntChg = true;
908 57484 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
909 57484 : }
910 :
911 57484 : inline void SwFont::SetBottomBorderDist( const sal_uInt16 nBottomDist )
912 : {
913 57484 : m_nBottomBorderDist = nBottomDist;
914 57484 : bFntChg = true;
915 57484 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
916 57484 : }
917 :
918 57484 : inline void SwFont::SetRightBorderDist( const sal_uInt16 nRightDist )
919 : {
920 57484 : m_nRightBorderDist = nRightDist;
921 57484 : bFntChg = true;
922 57484 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
923 57484 : }
924 :
925 57484 : inline void SwFont::SetLeftBorderDist( const sal_uInt16 nLeftDist )
926 : {
927 57484 : m_nLeftBorderDist = nLeftDist;
928 57484 : bFntChg = true;
929 57484 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
930 57484 : }
931 :
932 421640 : inline sal_uInt16 SwFont::GetTopBorderSpace() const
933 : {
934 421640 : sal_uInt16 nRet = 0;
935 421640 : if( m_aTopBorder )
936 : {
937 100 : nRet += m_aTopBorder.get().GetScaledWidth() + m_nTopBorderDist;
938 : }
939 843268 : if( m_aShadowLocation == SVX_SHADOW_TOPLEFT ||
940 421628 : m_aShadowLocation == SVX_SHADOW_TOPRIGHT )
941 : {
942 30 : nRet += m_nShadowWidth;
943 : }
944 421640 : return nRet;
945 : }
946 :
947 212801 : inline sal_uInt16 SwFont::GetBottomBorderSpace() const
948 : {
949 212801 : sal_uInt16 nRet = 0;
950 212801 : if( m_aBottomBorder )
951 : {
952 50 : nRet += m_aBottomBorder.get().GetScaledWidth() + m_nBottomBorderDist;
953 : }
954 425599 : if( m_aShadowLocation == SVX_SHADOW_BOTTOMLEFT ||
955 212798 : m_aShadowLocation == SVX_SHADOW_BOTTOMRIGHT )
956 : {
957 15 : nRet += m_nShadowWidth;
958 : }
959 212801 : return nRet;
960 : }
961 :
962 105973 : inline sal_uInt16 SwFont::GetRightBorderSpace() const
963 : {
964 105973 : sal_uInt16 nRet = 0;
965 105973 : if( m_aRightBorder )
966 : {
967 29 : nRet += m_aRightBorder.get().GetScaledWidth() + m_nRightBorderDist;
968 : }
969 211940 : if( m_aShadowLocation == SVX_SHADOW_TOPRIGHT ||
970 105967 : m_aShadowLocation == SVX_SHADOW_BOTTOMRIGHT )
971 : {
972 15 : nRet += m_nShadowWidth;
973 : }
974 105973 : return nRet;
975 : }
976 :
977 105988 : inline sal_uInt16 SwFont::GetLeftBorderSpace() const
978 : {
979 105988 : sal_uInt16 nRet = 0;
980 105988 : if( m_aLeftBorder )
981 : {
982 47 : nRet += m_aLeftBorder.get().GetScaledWidth() + m_nLeftBorderDist;
983 : }
984 211973 : if( m_aShadowLocation == SVX_SHADOW_TOPLEFT ||
985 105985 : m_aShadowLocation == SVX_SHADOW_BOTTOMLEFT )
986 : {
987 7 : nRet += m_nShadowWidth;
988 : }
989 105988 : return nRet;
990 : }
991 :
992 130633 : inline bool SwFont::HasBorder() const
993 : {
994 130633 : return m_aTopBorder || m_aBottomBorder || m_aLeftBorder || m_aRightBorder;
995 : }
996 :
997 57383 : inline void SwFont::SetShadowColor( const Color& rColor )
998 : {
999 57383 : m_aShadowColor = rColor;
1000 57383 : bFntChg = true;
1001 57383 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
1002 57383 : }
1003 :
1004 57383 : inline void SwFont::SetShadowWidth( const sal_uInt16 nWidth )
1005 : {
1006 57383 : m_nShadowWidth = nWidth;
1007 57383 : bFntChg = true;
1008 57383 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
1009 57383 : }
1010 :
1011 57383 : inline void SwFont::SetShadowLocation( const SvxShadowLocation aLocation )
1012 : {
1013 57383 : m_aShadowLocation = aLocation;
1014 57383 : bFntChg = true;
1015 57383 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
1016 57383 : }
1017 :
1018 58560 : inline void SwFont::SetHighlightColor( const Color& aNewColor )
1019 : {
1020 58560 : m_aHighlightColor = aNewColor;
1021 58560 : bFntChg = true;
1022 58560 : aSub[SW_LATIN].pMagic = aSub[SW_CJK].pMagic = aSub[SW_CTL].pMagic = 0;
1023 58560 : }
1024 :
1025 : // Used for the "continuous underline" feature.
1026 : class SwUnderlineFont
1027 : {
1028 : Point aPos;
1029 : SwFont* pFnt;
1030 :
1031 : public:
1032 : // sets the font which should paint the common baseline
1033 : // and the starting point of the common baseline
1034 : SwUnderlineFont( SwFont& rFnt, const Point& rPoint );
1035 : ~SwUnderlineFont();
1036 :
1037 135 : SwFont& GetFont()
1038 : {
1039 : OSL_ENSURE( pFnt, "No underline font" );
1040 135 : return *pFnt;
1041 : }
1042 80 : const Point& GetPos() const { return aPos; }
1043 : // the x coordinate of the starting point has to be set for each portion
1044 67 : void SetPos( const Point& rPoint ) { aPos = rPoint; }
1045 : };
1046 :
1047 : #ifdef DBG_UTIL
1048 :
1049 : class SvStatistics
1050 : {
1051 : public:
1052 : sal_uInt16 nGetTextSize;
1053 : sal_uInt16 nDrawText;
1054 : sal_uInt16 nGetStretchTextSize;
1055 : sal_uInt16 nDrawStretchText;
1056 : sal_uInt16 nChangeFont;
1057 : sal_uInt16 nGetFontMetric;
1058 :
1059 : inline void Reset()
1060 : {
1061 : nGetTextSize = nDrawText = nGetStretchTextSize =
1062 : nDrawStretchText = nChangeFont = nGetFontMetric = 0;
1063 : }
1064 :
1065 : inline SvStatistics() { Reset(); }
1066 :
1067 : inline void PrintOn( SvStream &rOS ) const; //$ ostream
1068 : inline bool IsEmpty() const
1069 : {
1070 : return !( nGetTextSize || nDrawText ||
1071 : nDrawStretchText || nChangeFont || nGetFontMetric );
1072 : }
1073 : };
1074 :
1075 : // global variable, implemented in swfont.cxx
1076 : extern SvStatistics g_SvStat;
1077 :
1078 : #define SV_STAT(nWhich) ++(g_SvStat.nWhich);
1079 :
1080 : inline void SvStatistics::PrintOn( SvStream &rOS ) const //$ ostream
1081 : {
1082 : if( IsEmpty() )
1083 : return;
1084 :
1085 : rOS.WriteCharPtr( "{ SV called:\n" );
1086 : if( nGetTextSize )
1087 : rOS.WriteCharPtr( "\tnGetTextSize: " ).WriteUInt16( nGetTextSize ).WriteChar( '\n' );
1088 : if( nDrawText )
1089 : rOS.WriteCharPtr( "\tnDrawText: " ).WriteUInt16( nDrawText ).WriteChar( '\n' );
1090 : if( nGetStretchTextSize )
1091 : rOS.WriteCharPtr( "\tnGetStretchTextSize: " ).WriteUInt16( nGetStretchTextSize ).WriteChar( '\n' );
1092 : if( nDrawStretchText )
1093 : rOS.WriteCharPtr( "\tnDrawStretchText: " ).WriteUInt16( nDrawStretchText ).WriteChar( '\n' );
1094 : if( nChangeFont )
1095 : rOS.WriteCharPtr( "\tnChangeFont: " ).WriteUInt16( nChangeFont ).WriteChar( '\n' );
1096 : if( nGetFontMetric )
1097 : rOS.WriteCharPtr( "\tnGetFontMetric: " ).WriteUInt16( nGetFontMetric ).WriteChar( '\n' );
1098 : rOS.WriteCharPtr( "}\n" );
1099 : }
1100 : #else
1101 : #define SV_STAT(nWhich)
1102 : #endif /* DBG_UTIL */
1103 :
1104 : #endif
1105 :
1106 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|