LCOV - code coverage report
Current view: top level - sw/source/core/inc - swfont.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 436 453 96.2 %
Date: 2015-06-13 12:38:46 Functions: 137 145 94.5 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.11