LCOV - code coverage report
Current view: top level - sw/source/core/inc - drawfont.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 204 210 97.1 %
Date: 2015-06-13 12:38:46 Functions: 68 70 97.1 %
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             : 
      20             : #ifndef INCLUDED_SW_SOURCE_CORE_INC_DRAWFONT_HXX
      21             : #define INCLUDED_SW_SOURCE_CORE_INC_DRAWFONT_HXX
      22             : 
      23             : #include <tools/solar.h>
      24             : #include <osl/diagnose.h>
      25             : #include <vcl/vclptr.hxx>
      26             : #include <vcl/outdev.hxx>
      27             : 
      28             : class SwTextFrm;
      29             : class SwViewShell;
      30             : class SwScriptInfo;
      31             : class Point;
      32             : class SwWrongList;
      33             : class Size;
      34             : class SwFont;
      35             : namespace vcl {
      36             :     class Font;
      37             :     class TextLayoutCache;
      38             :     typedef OutputDevice RenderContext;
      39             : }
      40             : class SwUnderlineFont;
      41             : 
      42             : // encapsulates information for drawing text
      43      164317 : class SwDrawTextInfo
      44             : {
      45             :     const SwTextFrm* pFrm;
      46             :     VclPtr<OutputDevice> pOut;
      47             :     SwViewShell const * pSh;
      48             :     const SwScriptInfo* pScriptInfo;
      49             :     Point m_aPos;
      50             :     vcl::TextLayoutCache const* m_pCachedVclData;
      51             :     OUString m_aText;
      52             :     const SwWrongList* pWrong;
      53             :     const SwWrongList* pGrammarCheck;
      54             :     const SwWrongList* pSmartTags;
      55             :     Size m_aSize;
      56             :     SwFont *pFnt;
      57             :     SwUnderlineFont* pUnderFnt;
      58             :     sal_Int32* pHyphPos;
      59             :     long nLeft;
      60             :     long nRight;
      61             :     long nKanaDiff;
      62             :     sal_Int32 nIdx;
      63             :     sal_Int32 nLen;
      64             :     sal_Int32 nOfst;
      65             :     sal_uInt16 nWidth;
      66             :     sal_uInt16 nAscent;
      67             :     sal_uInt16 nCompress;
      68             :     long nSperren;
      69             :     long nSpace;
      70             :     long nKern;
      71             :     sal_Int32 nNumberOfBlanks;
      72             :     sal_uInt8 nCursorBidiLevel;
      73             :     bool bBullet : 1;
      74             :     bool bUpper : 1;        // for small caps: upper case flag
      75             :     bool bDrawSpace : 1;    // for small caps: underline/ line through
      76             :     bool bGreyWave  : 1;    // grey wave line for extended text input
      77             :     // For underlining we need to know, if a section is right in front of a
      78             :     // whole block or a fix margin section.
      79             :     bool bSpaceStop : 1;
      80             :     bool bSnapToGrid : 1;   // Does paragraph snap to grid?
      81             :     // Paint text as if text has LTR direction, used for line numbering
      82             :     bool bIgnoreFrmRTL : 1;
      83             :     // GetCrsrOfst should not return the next position if screen position is
      84             :     // inside second half of bound rect, used for Accessibility
      85             :     bool bPosMatchesBounds :1;
      86             : 
      87             :     SwDrawTextInfo();          // prohibited
      88             : public:
      89             : 
      90             : #ifdef DBG_UTIL
      91             :     // These flags should control that the appropriate Set-function has been
      92             :     // called before calling the Get-function of a member
      93             :     bool m_bPos   : 1;
      94             :     bool m_bWrong : 1;
      95             :     bool m_bGrammarCheck : 1;
      96             :     bool m_bSize  : 1;
      97             :     bool m_bFnt   : 1;
      98             :     bool m_bHyph  : 1;
      99             :     bool m_bLeft  : 1;
     100             :     bool m_bRight : 1;
     101             :     bool m_bKana  : 1;
     102             :     bool m_bOfst  : 1;
     103             :     bool m_bAscent: 1;
     104             :     bool m_bSperr : 1;
     105             :     bool m_bSpace : 1;
     106             :     bool m_bNumberOfBlanks : 1;
     107             :     bool m_bUppr  : 1;
     108             :     bool m_bDrawSp: 1;
     109             : #endif
     110             : 
     111      164317 :     SwDrawTextInfo( SwViewShell const *pS, OutputDevice &rO, const SwScriptInfo* pSI,
     112             :                     const OUString &rSt, sal_Int32 nI, sal_Int32 nL,
     113             :                     sal_uInt16 nW = 0, bool bB = false,
     114             :                     vcl::TextLayoutCache const*const pCachedVclData = nullptr)
     115      164317 :         : m_pCachedVclData(pCachedVclData)
     116             :     {
     117      164317 :         pFrm = NULL;
     118      164317 :         pSh = pS;
     119      164317 :         pOut = &rO;
     120      164317 :         pScriptInfo = pSI;
     121      164317 :         m_aText = rSt;
     122      164317 :         nIdx = nI;
     123      164317 :         nLen = nL;
     124      164317 :         nKern = 0;
     125      164317 :         nCompress = 0;
     126      164317 :         nWidth = nW;
     127      164317 :         nNumberOfBlanks = 0;
     128      164317 :         nCursorBidiLevel = 0;
     129      164317 :         bBullet = bB;
     130      164317 :         pUnderFnt = 0;
     131      164317 :         bGreyWave = false;
     132      164317 :         bSpaceStop = false;
     133      164317 :         bSnapToGrid = false;
     134      164317 :         bIgnoreFrmRTL = false;
     135      164317 :         bPosMatchesBounds = false;
     136             : 
     137             :         // These values are initialized but have to be set explicitly via their
     138             :         // Set-function before they may be accessed by their Get-function:
     139      164317 :         pWrong = 0;
     140      164317 :         pGrammarCheck = 0;
     141      164317 :         pSmartTags = 0;
     142      164317 :         pFnt = 0;
     143      164317 :         pHyphPos = 0;
     144      164317 :         nLeft = 0;
     145      164317 :         nRight = 0;
     146      164317 :         nKanaDiff = 0;
     147      164317 :         nOfst = 0;
     148      164317 :         nAscent = 0;
     149      164317 :         nSperren = 0;
     150      164317 :         nSpace = 0;
     151      164317 :         bUpper = false;
     152      164317 :         bDrawSpace = false;
     153             : 
     154             : #ifdef DBG_UTIL
     155             :         // these flags control whether the matching member variables have been
     156             :         // set by using the Set-function before they may be accessed by their
     157             :         // Get-function:
     158             :         m_bPos = m_bWrong = m_bGrammarCheck = m_bSize = m_bFnt = m_bAscent =
     159             :         m_bSpace = m_bNumberOfBlanks = m_bUppr =
     160             :         m_bDrawSp = m_bLeft = m_bRight = m_bKana = m_bOfst = m_bHyph =
     161             :         m_bSperr = false;
     162             : #endif
     163      164317 :     }
     164             : 
     165      461666 :     const SwTextFrm* GetFrm() const
     166             :     {
     167      461666 :         return pFrm;
     168             :     }
     169             : 
     170      164287 :     void SetFrm( const SwTextFrm* pNewFrm )
     171             :     {
     172      164287 :         pFrm = pNewFrm;
     173      164287 :     }
     174             : 
     175      451723 :     SwViewShell const *GetShell() const
     176             :     {
     177      451723 :         return pSh;
     178             :     }
     179             : 
     180     1154695 :     vcl::RenderContext& GetOut() const
     181             :     {
     182     1154695 :         return *pOut;
     183             :     }
     184             : 
     185      251531 :     vcl::RenderContext *GetpOut() const
     186             :     {
     187      251531 :         return pOut;
     188             :     }
     189             : 
     190       20940 :     const SwScriptInfo* GetScriptInfo() const
     191             :     {
     192       20940 :         return pScriptInfo;
     193             :     }
     194             : 
     195       66536 :     const Point &GetPos() const
     196             :     {
     197             : #ifdef DBG_UTIL
     198             :         OSL_ENSURE( m_bPos, "DrawTextInfo: Undefined Position" );
     199             : #endif
     200       66536 :         return m_aPos;
     201             :     }
     202             : 
     203       40311 :     sal_Int32 *GetHyphPos() const
     204             :     {
     205             : #ifdef DBG_UTIL
     206             :         OSL_ENSURE( m_bHyph, "DrawTextInfo: Undefined Hyph Position" );
     207             : #endif
     208       40311 :         return pHyphPos;
     209             :     }
     210             : 
     211      143909 :     vcl::TextLayoutCache const* GetVclCache() const
     212             :     {
     213      143909 :         return m_pCachedVclData;
     214             :     }
     215             : 
     216     1294820 :     const OUString &GetText() const
     217             :     {
     218     1294820 :         return m_aText;
     219             :     }
     220             : 
     221       26966 :     const SwWrongList* GetWrong() const
     222             :     {
     223             : #ifdef DBG_UTIL
     224             :         OSL_ENSURE( m_bWrong, "DrawTextInfo: Undefined WrongList" );
     225             : #endif
     226       26966 :         return pWrong;
     227             :     }
     228             : 
     229       20890 :     const SwWrongList* GetGrammarCheck() const
     230             :     {
     231             : #ifdef DBG_UTIL
     232             :         OSL_ENSURE( m_bGrammarCheck, "DrawTextInfo: Undefined GrammarCheck List" );
     233             : #endif
     234       20890 :         return pGrammarCheck;
     235             :     }
     236             : 
     237       21563 :     const SwWrongList* GetSmartTags() const
     238             :     {
     239       21563 :         return pSmartTags;
     240             :     }
     241             : 
     242        3084 :     const Size &GetSize() const
     243             :     {
     244             : #ifdef DBG_UTIL
     245             :         OSL_ENSURE( m_bSize, "DrawTextInfo: Undefined Size" );
     246             : #endif
     247        3084 :         return m_aSize;
     248             :     }
     249             : 
     250      780787 :     SwFont* GetFont() const
     251             :     {
     252             : #ifdef DBG_UTIL
     253             :         OSL_ENSURE( m_bFnt, "DrawTextInfo: Undefined Font" );
     254             : #endif
     255      780787 :         return pFnt;
     256             :     }
     257             : 
     258       20730 :     SwUnderlineFont* GetUnderFnt() const
     259             :     {
     260       20730 :         return pUnderFnt;
     261             :     }
     262             : 
     263     1202026 :     sal_Int32 GetIdx() const
     264             :     {
     265     1202026 :         return nIdx;
     266             :     }
     267             : 
     268      965980 :     sal_Int32 GetLen() const
     269             :     {
     270      965980 :         return nLen;
     271             :     }
     272             : 
     273          22 :     sal_Int32 GetOfst() const
     274             :     {
     275             : #ifdef DBG_UTIL
     276             :         OSL_ENSURE( m_bOfst, "DrawTextInfo: Undefined Offset" );
     277             : #endif
     278          22 :         return nOfst;
     279             :     }
     280             : 
     281           2 :     sal_Int32 GetEnd() const
     282             :     {
     283           2 :         return nIdx + nLen;
     284             :     }
     285             : 
     286             :     long GetLeft() const
     287             :     {
     288             : #ifdef DBG_UTIL
     289             :         OSL_ENSURE( m_bLeft, "DrawTextInfo: Undefined left range" );
     290             : #endif
     291             :         return nLeft;
     292             :     }
     293             : 
     294             :     long GetRight() const
     295             :     {
     296             : #ifdef DBG_UTIL
     297             :         OSL_ENSURE( m_bRight, "DrawTextInfo: Undefined right range" );
     298             : #endif
     299             :         return nRight;
     300             :     }
     301             : 
     302      101935 :     long GetKanaDiff() const
     303             :     {
     304             : #ifdef DBG_UTIL
     305             :         OSL_ENSURE( m_bKana, "DrawTextInfo: Undefined kana difference" );
     306             : #endif
     307      101935 :         return nKanaDiff;
     308             :     }
     309             : 
     310         706 :     sal_uInt16 GetWidth() const
     311             :     {
     312         706 :         return nWidth;
     313             :     }
     314             : 
     315         280 :     sal_uInt16 GetAscent() const
     316             :     {
     317             : #ifdef DBG_UTIL
     318             :         OSL_ENSURE( m_bAscent, "DrawTextInfo: Undefined Ascent" );
     319             : #endif
     320         280 :         return nAscent;
     321             :     }
     322             : 
     323      145481 :     sal_uInt16 GetKanaComp() const
     324             :     {
     325      145481 :         return nCompress;
     326             :     }
     327             : 
     328       20678 :     long GetSperren() const
     329             :     {
     330             : #ifdef DBG_UTIL
     331             :         OSL_ENSURE( m_bSperr, "DrawTextInfo: Undefined >Sperren<" );
     332             : #endif
     333       20678 :         return nSperren;
     334             :     }
     335             : 
     336     1101047 :     long GetKern() const
     337             :     {
     338     1101047 :         return nKern;
     339             :     }
     340             : 
     341       26479 :     long GetSpace() const
     342             :     {
     343             : #ifdef DBG_UTIL
     344             :         OSL_ENSURE( m_bSpace, "DrawTextInfo: Undefined Spacing" );
     345             : #endif
     346       26479 :         return nSpace;
     347             :     }
     348             : 
     349           0 :     sal_Int32 GetNumberOfBlanks() const
     350             :     {
     351             : #ifdef DBG_UTIL
     352             :         OSL_ENSURE( m_bNumberOfBlanks, "DrawTextInfo::Undefined NumberOfBlanks" );
     353             : #endif
     354           0 :         return nNumberOfBlanks;
     355             :     }
     356             : 
     357          15 :     sal_uInt8 GetCursorBidiLevel() const
     358             :     {
     359          15 :         return nCursorBidiLevel;
     360             :     }
     361             : 
     362       21196 :     bool GetBullet() const
     363             :     {
     364       21196 :         return bBullet;
     365             :     }
     366             : 
     367        1660 :     bool GetUpper() const
     368             :     {
     369             : #ifdef DBG_UTIL
     370             :         OSL_ENSURE( m_bUppr, "DrawTextInfo: Undefined Upperflag" );
     371             : #endif
     372        1660 :         return bUpper;
     373             :     }
     374             : 
     375          71 :     bool GetDrawSpace() const
     376             :     {
     377             : #ifdef DBG_UTIL
     378             :         OSL_ENSURE( m_bDrawSp, "DrawTextInfo: Undefined DrawSpaceflag" );
     379             : #endif
     380          71 :         return bDrawSpace;
     381             :     }
     382             : 
     383       20959 :     bool GetGreyWave() const
     384             :     {
     385       20959 :         return bGreyWave;
     386             :     }
     387             : 
     388           0 :     bool IsSpaceStop() const
     389             :     {
     390           0 :         return bSpaceStop;
     391             :     }
     392             : 
     393      332648 :     bool SnapToGrid() const
     394             :     {
     395      332648 :         return bSnapToGrid;
     396             :     }
     397             : 
     398           9 :     bool IsIgnoreFrmRTL() const
     399             :     {
     400           9 :         return bIgnoreFrmRTL;
     401             :     }
     402             : 
     403           1 :     bool IsPosMatchesBounds() const
     404             :     {
     405           1 :         return bPosMatchesBounds;
     406             :     }
     407             : 
     408        3332 :     void SetOut( OutputDevice &rNew )
     409             :     {
     410        3332 :         pOut = &rNew;
     411        3332 :     }
     412             : 
     413       62858 :     void SetPos( const Point &rNew )
     414             :     {
     415       62858 :         m_aPos = rNew;
     416             : #ifdef DBG_UTIL
     417             :         m_bPos = true;
     418             : #endif
     419       62858 :     }
     420             : 
     421       40313 :     void SetHyphPos( sal_Int32 *pNew )
     422             :     {
     423       40313 :         pHyphPos = pNew;
     424             : #ifdef DBG_UTIL
     425             :         m_bHyph = true;
     426             : #endif
     427       40313 :     }
     428             : 
     429      104502 :     void SetText( const OUString &rNew )
     430             :     {
     431      104502 :         m_aText = rNew;
     432      104502 :         m_pCachedVclData = nullptr; // would any case benefit from save/restore?
     433      104502 :     }
     434             : 
     435       20520 :     void SetWrong( const SwWrongList* pNew )
     436             :     {
     437       20520 :         pWrong = pNew;
     438             : #ifdef DBG_UTIL
     439             :         m_bWrong = true;
     440             : #endif
     441       20520 :     }
     442             : 
     443       20520 :     void SetGrammarCheck( const SwWrongList* pNew )
     444             :     {
     445       20520 :         pGrammarCheck = pNew;
     446             : #ifdef DBG_UTIL
     447             :         m_bGrammarCheck = true;
     448             : #endif
     449       20520 :     }
     450             : 
     451       20520 :     void SetSmartTags( const SwWrongList* pNew )
     452             :     {
     453       20520 :         pSmartTags = pNew;
     454       20520 :     }
     455             : 
     456        1946 :     void SetSize( const Size &rNew )
     457             :     {
     458        1946 :         m_aSize = rNew;
     459             : #ifdef DBG_UTIL
     460             :         m_bSize = true;
     461             : #endif
     462        1946 :     }
     463             : 
     464      267785 :     void SetFont( SwFont* pNew )
     465             :     {
     466      267785 :         pFnt = pNew;
     467             : #ifdef DBG_UTIL
     468             :         m_bFnt = true;
     469             : #endif
     470      267785 :     }
     471             : 
     472        1802 :     void SetIdx( sal_Int32 nNew )
     473             :     {
     474        1802 :         nIdx = nNew;
     475        1802 :     }
     476             : 
     477      105607 :     void SetLen( sal_Int32 nNew )
     478             :     {
     479      105607 :         nLen = nNew;
     480      105607 :     }
     481             : 
     482          16 :     void SetOfst( sal_Int32 nNew )
     483             :     {
     484          16 :         nOfst = nNew;
     485             : #ifdef DBG_UTIL
     486             :         m_bOfst = true;
     487             : #endif
     488          16 :     }
     489             : 
     490       20596 :     void SetLeft( long nNew )
     491             :     {
     492       20596 :         nLeft = nNew;
     493             : #ifdef DBG_UTIL
     494             :         m_bLeft = true;
     495             : #endif
     496       20596 :     }
     497             : 
     498       20596 :     void SetRight( long nNew )
     499             :     {
     500       20596 :         nRight = nNew;
     501             : #ifdef DBG_UTIL
     502             :         m_bRight = true;
     503             : #endif
     504       20596 :     }
     505             : 
     506      105288 :     void SetKanaDiff( long nNew )
     507             :     {
     508      105288 :         nKanaDiff = nNew;
     509             : #ifdef DBG_UTIL
     510             :         m_bKana = true;
     511             : #endif
     512      105288 :     }
     513             : 
     514        1081 :     void SetWidth( sal_uInt16 nNew )
     515             :     {
     516        1081 :         nWidth = nNew;
     517        1081 :     }
     518             : 
     519         280 :     void SetAscent( sal_uInt16 nNew )
     520             :     {
     521         280 :         nAscent = nNew;
     522             : #ifdef DBG_UTIL
     523             :         m_bAscent = true;
     524             : #endif
     525         280 :     }
     526             : 
     527      228102 :     void SetKern( long nNew )
     528             :     {
     529      228102 :         nKern = nNew;
     530      228102 :     }
     531             : 
     532       20775 :     void SetSpace( long nNew )
     533             :     {
     534       20775 :         if( nNew < 0 )
     535             :         {
     536           0 :             nSperren = -nNew;
     537           0 :             nSpace = 0;
     538             :         }
     539             :         else
     540             :         {
     541       20775 :             nSpace = nNew;
     542       20775 :             nSperren = 0;
     543             :         }
     544             : #ifdef DBG_UTIL
     545             :         m_bSpace = true;
     546             :         m_bSperr = true;
     547             : #endif
     548       20775 :     }
     549             : 
     550         951 :     void SetNumberOfBlanks( sal_Int32 nNew )
     551             :     {
     552             : #ifdef DBG_UTIL
     553             :         m_bNumberOfBlanks = true;
     554             : #endif
     555         951 :         nNumberOfBlanks = nNew;
     556         951 :     }
     557             : 
     558          16 :     void SetCursorBidiLevel( sal_uInt8 nNew )
     559             :     {
     560          16 :         nCursorBidiLevel = nNew;
     561          16 :     }
     562             : 
     563      164167 :     void SetKanaComp( short nNew )
     564             :     {
     565      164167 :         nCompress = nNew;
     566      164167 :     }
     567             : 
     568         462 :     void SetBullet( bool bNew )
     569             :     {
     570         462 :         bBullet = bNew;
     571         462 :     }
     572             : 
     573       20585 :     void SetUnderFnt( SwUnderlineFont* pULFnt )
     574             :     {
     575       20585 :         pUnderFnt = pULFnt;
     576       20585 :     }
     577             : 
     578        1666 :     void SetUpper( bool bNew )
     579             :     {
     580        1666 :         bUpper = bNew;
     581             : #ifdef DBG_UTIL
     582             :         m_bUppr = true;
     583             : #endif
     584        1666 :     }
     585             : 
     586         220 :     void SetDrawSpace( bool bNew )
     587             :     {
     588         220 :         bDrawSpace = bNew;
     589             : #ifdef DBG_UTIL
     590             :         m_bDrawSp = true;
     591             : #endif
     592         220 :     }
     593             : 
     594       20515 :     void SetGreyWave( bool bNew )
     595             :     {
     596       20515 :         bGreyWave = bNew;
     597       20515 :     }
     598             : 
     599       20449 :     void SetSpaceStop( bool bNew )
     600             :     {
     601       20449 :         bSpaceStop = bNew;
     602       20449 :     }
     603             : 
     604      164287 :     void SetSnapToGrid( bool bNew )
     605             :     {
     606      164287 :         bSnapToGrid = bNew;
     607      164287 :     }
     608             : 
     609         106 :     void SetIgnoreFrmRTL( bool bNew )
     610             :     {
     611         106 :         bIgnoreFrmRTL = bNew;
     612         106 :     }
     613             : 
     614          16 :     void SetPosMatchesBounds( bool bNew )
     615             :     {
     616          16 :         bPosMatchesBounds = bNew;
     617          16 :     }
     618             : 
     619             :     void Shift( sal_uInt16 nDir );
     620             : 
     621             :     // sets a new color at the output device if necessary if a font is passed
     622             :     // as argument, the change if made to the font otherwise the font at the
     623             :     // output device is changed returns if the font has been changed
     624             :     bool ApplyAutoColor( vcl::Font* pFnt = 0 );
     625             : };
     626             : 
     627             : #endif
     628             : 
     629             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11