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

Generated by: LCOV version 1.10