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

Generated by: LCOV version 1.10