LCOV - code coverage report
Current view: top level - sw/source/core/text - porrst.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 153 296 51.7 %
Date: 2014-11-03 Functions: 17 27 63.0 %
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             : #include <hintids.hxx>
      21             : #include <sfx2/printer.hxx>
      22             : #include <editeng/lspcitem.hxx>
      23             : #include <editeng/adjustitem.hxx>
      24             : #include <editeng/escapementitem.hxx>
      25             : #include <editeng/lrspitem.hxx>
      26             : #include <editeng/pgrditem.hxx>
      27             : #include <vcl/window.hxx>
      28             : #include <vcl/svapp.hxx>
      29             : #include <viewsh.hxx>
      30             : #include <viewopt.hxx>
      31             : #include <ndtxt.hxx>
      32             : #include <pagefrm.hxx>
      33             : #include <paratr.hxx>
      34             : #include <SwPortionHandler.hxx>
      35             : #include <porrst.hxx>
      36             : #include <inftxt.hxx>
      37             : #include <txtpaint.hxx>
      38             : #include <swfntcch.hxx>
      39             : #include <tgrditem.hxx>
      40             : #include <pagedesc.hxx>
      41             : #include <frmatr.hxx>
      42             : #include <redlnitr.hxx>
      43             : #include <porfly.hxx>
      44             : #include <atrhndl.hxx>
      45             : #include "rootfrm.hxx"
      46             : 
      47             : #include <IDocumentRedlineAccess.hxx>
      48             : #include <IDocumentSettingAccess.hxx>
      49             : #include <IDocumentDeviceAccess.hxx>
      50             : 
      51             : #include <crsrsh.hxx>
      52             : 
      53           0 : SwTmpEndPortion::SwTmpEndPortion( const SwLinePortion &rPortion )
      54             : {
      55           0 :     Height( rPortion.Height() );
      56           0 :     SetAscent( rPortion.GetAscent() );
      57           0 :     SetWhichPor( POR_TMPEND );
      58           0 : }
      59             : 
      60           0 : void SwTmpEndPortion::Paint( const SwTxtPaintInfo &rInf ) const
      61             : {
      62           0 :     if (rInf.OnWin() && rInf.GetOpt().IsParagraph())
      63             :     {
      64           0 :         const SwFont* pOldFnt = rInf.GetFont();
      65             : 
      66           0 :         SwFont aFont(*pOldFnt);
      67           0 :         aFont.SetColor(NON_PRINTING_CHARACTER_COLOR);
      68           0 :         const_cast<SwTxtPaintInfo&>(rInf).SetFont(&aFont);
      69             : 
      70             :         // draw the pilcrow
      71           0 :         rInf.DrawText(OUString(CH_PAR), *this);
      72             : 
      73           0 :         const_cast<SwTxtPaintInfo&>(rInf).SetFont(const_cast<SwFont*>(pOldFnt));
      74             :     }
      75           0 : }
      76             : 
      77         886 : SwBreakPortion::SwBreakPortion( const SwLinePortion &rPortion )
      78         886 :     : SwLinePortion( rPortion )
      79             : {
      80         886 :     nLineLength = 1;
      81         886 :     SetWhichPor( POR_BRK );
      82         886 : }
      83             : 
      84           0 : sal_Int32 SwBreakPortion::GetCrsrOfst( const sal_uInt16 ) const
      85           0 : { return 0; }
      86             : 
      87        1222 : sal_uInt16 SwBreakPortion::GetViewWidth( const SwTxtSizeInfo & ) const
      88        1222 : { return 0; }
      89             : 
      90         630 : SwLinePortion *SwBreakPortion::Compress()
      91         630 : { return (GetPortion() && GetPortion()->InTxtGrp() ? 0 : this); }
      92             : 
      93         948 : void SwBreakPortion::Paint( const SwTxtPaintInfo &rInf ) const
      94             : {
      95         948 :     if( rInf.OnWin() && rInf.GetOpt().IsLineBreak() )
      96           0 :         rInf.DrawLineBreak( *this );
      97         948 : }
      98             : 
      99         886 : bool SwBreakPortion::Format( SwTxtFormatInfo &rInf )
     100             : {
     101         886 :     const SwLinePortion *pRoot = rInf.GetRoot();
     102         886 :     Width( 0 );
     103         886 :     Height( pRoot->Height() );
     104         886 :     SetAscent( pRoot->GetAscent() );
     105         886 :     if ( rInf.GetIdx()+1 == rInf.GetTxt().getLength() )
     106         372 :         rInf.SetNewLine( true );
     107         886 :     return true;
     108             : }
     109             : 
     110           2 : void SwBreakPortion::HandlePortion( SwPortionHandler& rPH ) const
     111             : {
     112           2 :     rPH.Text( GetLen(), GetWhichPor() );
     113           2 : }
     114             : 
     115         662 : SwKernPortion::SwKernPortion( SwLinePortion &rPortion, short nKrn,
     116             :                               bool bBG, bool bGK ) :
     117         662 :     nKern( nKrn ), bBackground( bBG ), bGridKern( bGK )
     118             : {
     119         662 :     Height( rPortion.Height() );
     120         662 :     SetAscent( rPortion.GetAscent() );
     121         662 :     nLineLength = 0;
     122         662 :     SetWhichPor( POR_KERN );
     123         662 :     if( nKern > 0 )
     124         630 :         Width( nKern );
     125         662 :      rPortion.Insert( this );
     126         662 : }
     127             : 
     128         140 : SwKernPortion::SwKernPortion( const SwLinePortion& rPortion ) :
     129         140 :     nKern( 0 ), bBackground( false ), bGridKern( true )
     130             : {
     131         140 :     Height( rPortion.Height() );
     132         140 :     SetAscent( rPortion.GetAscent() );
     133             : 
     134         140 :     nLineLength = 0;
     135         140 :     SetWhichPor( POR_KERN );
     136         140 : }
     137             : 
     138           8 : void SwKernPortion::Paint( const SwTxtPaintInfo &rInf ) const
     139             : {
     140           8 :     if( Width() )
     141             :     {
     142             :         // bBackground is set for Kerning Portions between two fields
     143           8 :         if ( bBackground )
     144           0 :             rInf.DrawViewOpt( *this, POR_FLD );
     145             : 
     146           8 :         rInf.DrawBackBrush( *this );
     147             : 
     148             :         // do we have to repaint a post it portion?
     149           8 :         if( rInf.OnWin() && pPortion && !pPortion->Width() )
     150           0 :             pPortion->PrePaint( rInf, this );
     151             : 
     152           8 :         if( rInf.GetFont()->IsPaintBlank() )
     153             :         {
     154           0 :             OUString aTxtDouble("  ");
     155             : 
     156           0 :             SwRect aClipRect;
     157           0 :             rInf.CalcRect( *this, &aClipRect, 0 );
     158           0 :             SwSaveClip aClip( (OutputDevice*)rInf.GetOut() );
     159           0 :             aClip.ChgClip( aClipRect, 0 );
     160           0 :             rInf.DrawText( aTxtDouble, *this, 0, 2, true );
     161             :         }
     162             :     }
     163           8 : }
     164             : 
     165         566 : void SwKernPortion::FormatEOL( SwTxtFormatInfo &rInf )
     166             : {
     167         566 :     if ( bGridKern )
     168         620 :         return;
     169             : 
     170         512 :     if( rInf.GetLast() == this )
     171         512 :         rInf.SetLast( FindPrevPortion( rInf.GetRoot() ) );
     172         512 :     if( nKern < 0 )
     173          16 :         Width( -nKern );
     174             :     else
     175         496 :         Width( 0 );
     176         512 :     rInf.GetLast()->FormatEOL( rInf );
     177             : }
     178             : 
     179           0 : SwArrowPortion::SwArrowPortion( const SwLinePortion &rPortion ) :
     180           0 :     bLeft( true )
     181             : {
     182           0 :     Height( rPortion.Height() );
     183           0 :     SetAscent( rPortion.GetAscent() );
     184           0 :     nLineLength = 0;
     185           0 :     SetWhichPor( POR_ARROW );
     186           0 : }
     187             : 
     188          24 : SwArrowPortion::SwArrowPortion( const SwTxtPaintInfo &rInf )
     189          24 :     : bLeft( false )
     190             : {
     191          24 :     Height( (sal_uInt16)(rInf.GetTxtFrm()->Prt().Height()) );
     192          48 :     aPos.X() = rInf.GetTxtFrm()->Frm().Left() +
     193          48 :                rInf.GetTxtFrm()->Prt().Right();
     194          48 :     aPos.Y() = rInf.GetTxtFrm()->Frm().Top() +
     195          48 :                rInf.GetTxtFrm()->Prt().Bottom();
     196          24 :     SetWhichPor( POR_ARROW );
     197          24 : }
     198             : 
     199           0 : void SwArrowPortion::Paint( const SwTxtPaintInfo &rInf ) const
     200             : {
     201           0 :     ((SwArrowPortion*)this)->aPos = rInf.GetPos();
     202           0 : }
     203             : 
     204           0 : SwLinePortion *SwArrowPortion::Compress() { return this; }
     205             : 
     206      140086 : SwTwips SwTxtFrm::EmptyHeight() const
     207             : {
     208      140086 :     if (IsCollapse()) {
     209         456 :         SwViewShell *pSh = getRootFrm()->GetCurrShell();
     210         456 :         if ( pSh->IsA( TYPE(SwCrsrShell) ) ) {
     211         456 :             SwCrsrShell *pCrSh=(SwCrsrShell*)pSh;
     212         456 :             SwCntntFrm *pCurrFrm=pCrSh->GetCurrFrm();
     213         456 :             if (pCurrFrm==(SwCntntFrm*)this) {
     214             :                 // do nothing
     215             :             } else {
     216         456 :                 return 1;
     217             :             }
     218             :         } else {
     219           0 :             return 1;
     220             :         }
     221             :     }
     222             :     OSL_ENSURE( ! IsVertical() || ! IsSwapped(),"SwTxtFrm::EmptyHeight with swapped frame" );
     223             : 
     224             :     SwFont *pFnt;
     225      139630 :     const SwTxtNode& rTxtNode = *GetTxtNode();
     226      139630 :     const IDocumentSettingAccess* pIDSA = rTxtNode.getIDocumentSettingAccess();
     227      139630 :     SwViewShell *pSh = getRootFrm()->GetCurrShell();
     228      139630 :     if ( rTxtNode.HasSwAttrSet() )
     229             :     {
     230       81514 :         const SwAttrSet *pAttrSet = &( rTxtNode.GetSwAttrSet() );
     231       81514 :         pFnt = new SwFont( pAttrSet, pIDSA );
     232             :     }
     233             :     else
     234             :     {
     235       58116 :         SwFontAccess aFontAccess( &rTxtNode.GetAnyFmtColl(), pSh);
     236       58116 :         pFnt = new SwFont( aFontAccess.Get()->GetFont() );
     237       58116 :         pFnt->ChkMagic( pSh, pFnt->GetActual() );
     238             :     }
     239             : 
     240      139630 :     if ( IsVertical() )
     241           6 :         pFnt->SetVertical( 2700 );
     242             : 
     243      139630 :     OutputDevice* pOut = pSh ? pSh->GetOut() : 0;
     244      139854 :     if ( !pOut || !pSh->GetViewOptions()->getBrowseMode() ||
     245         224 :          pSh->GetViewOptions()->IsPrtFormat() )
     246             :     {
     247      139406 :         pOut = rTxtNode.getIDocumentDeviceAccess()->getReferenceDevice(true);
     248             :     }
     249             : 
     250      139630 :     const IDocumentRedlineAccess* pIDRA = rTxtNode.getIDocumentRedlineAccess();
     251      139630 :     if( IDocumentRedlineAccess::IsShowChanges( pIDRA->GetRedlineMode() ) )
     252             :     {
     253      139552 :         const sal_uInt16 nRedlPos = pIDRA->GetRedlinePos( rTxtNode, USHRT_MAX );
     254      139552 :         if( USHRT_MAX != nRedlPos )
     255             :         {
     256         562 :             SwAttrHandler aAttrHandler;
     257         562 :             aAttrHandler.Init(  GetTxtNode()->GetSwAttrSet(),
     258        1124 :                                *GetTxtNode()->getIDocumentSettingAccess(), NULL );
     259             :             SwRedlineItr aRedln( rTxtNode, *pFnt, aAttrHandler,
     260         562 :                                  nRedlPos, true );
     261             :         }
     262             :     }
     263             : 
     264             :     SwTwips nRet;
     265      139630 :     if( !pOut )
     266           0 :         nRet = IsVertical() ?
     267           0 :                Prt().SSize().Width() + 1 :
     268           0 :                Prt().SSize().Height() + 1;
     269             :     else
     270             :     {
     271      139630 :         pFnt->SetFntChg( true );
     272      139630 :         pFnt->ChgPhysFnt( pSh, *pOut );
     273      139630 :         nRet = pFnt->GetHeight( pSh, *pOut );
     274             :     }
     275      139630 :     delete pFnt;
     276      139630 :     return nRet;
     277             : }
     278             : 
     279       55371 : bool SwTxtFrm::FormatEmpty()
     280             : {
     281             :     OSL_ENSURE( ! IsVertical() || ! IsSwapped(),"SwTxtFrm::FormatEmpty with swapped frame" );
     282             : 
     283       55371 :     bool bCollapse = EmptyHeight( ) == 1 && this->IsCollapse( );
     284             : 
     285      217974 :     if ( HasFollow() || GetTxtNode()->GetpSwpHints() ||
     286      101462 :         0 != GetTxtNode()->GetNumRule() ||
     287       98994 :         GetTxtNode()->HasHiddenCharAttribute( true ) ||
     288      153953 :          IsInFtn() || ( HasPara() && GetPara()->IsPrepMustFit() ) )
     289        6220 :         return false;
     290       49151 :     const SwAttrSet& aSet = GetTxtNode()->GetSwAttrSet();
     291       49151 :     const SvxAdjust nAdjust = aSet.GetAdjust().GetAdjust();
     292       98150 :     if( !bCollapse && ( ( ( ! IsRightToLeft() && ( SVX_ADJUST_LEFT != nAdjust ) ) ||
     293       83190 :           (   IsRightToLeft() && ( SVX_ADJUST_RIGHT != nAdjust ) ) ) ||
     294       41571 :           aSet.GetRegister().GetValue() ) )
     295        7428 :         return false;
     296       41723 :     const SvxLineSpacingItem &rSpacing = aSet.GetLineSpacing();
     297       84960 :     if( !bCollapse && ( SVX_LINE_SPACE_MIN == rSpacing.GetLineSpaceRule() ||
     298       80644 :         SVX_LINE_SPACE_FIX == rSpacing.GetLineSpaceRule() ||
     299       39489 :         aSet.GetLRSpace().IsAutoFirst() ) )
     300        2082 :         return false;
     301             : 
     302       39641 :     SwTxtFly aTxtFly( this );
     303       39641 :     SwRect aRect;
     304       39641 :     bool bFirstFlyCheck = 0 != Prt().Height();
     305      137006 :     if ( !bCollapse && bFirstFlyCheck &&
     306       65203 :             aTxtFly.IsOn() && aTxtFly.IsAnyObj( aRect ) )
     307        5653 :         return false;
     308             : 
     309       33988 :     SwTwips nHeight = EmptyHeight();
     310             : 
     311       67414 :     if ( GetTxtNode()->GetSwAttrSet().GetParaGrid().GetValue() &&
     312       33426 :             IsInDocBody() )
     313             :     {
     314       24624 :         SwTextGridItem const*const pGrid(GetGridItem(FindPageFrm()));
     315       24624 :         if ( pGrid )
     316           0 :             nHeight = pGrid->GetBaseHeight() + pGrid->GetRubyHeight();
     317             :     }
     318             : 
     319       33988 :     SWRECTFN( this )
     320       33988 :     const SwTwips nChg = nHeight - (Prt().*fnRect->fnGetHeight)();
     321             : 
     322       33988 :     if( !nChg )
     323       11240 :         SetUndersized( false );
     324       33988 :     AdjustFrm( nChg );
     325             : 
     326       33988 :     if( HasBlinkPor() )
     327             :     {
     328           0 :         ClearPara();
     329           0 :         ResetBlinkPor();
     330             :     }
     331       33988 :     SetCacheIdx( USHRT_MAX );
     332       33988 :     if( !IsEmpty() )
     333             :     {
     334       20784 :         SetEmpty( true );
     335       20784 :         SetCompletePaint();
     336             :     }
     337      123066 :     if( !bCollapse && !bFirstFlyCheck &&
     338       61966 :             aTxtFly.IsOn() && aTxtFly.IsAnyObj( aRect ) )
     339        3312 :         return false;
     340             : 
     341             :     // #i35635# - call method <HideAndShowObjects()>
     342             :     // to assure that objects anchored at the empty paragraph are
     343             :     // correctly visible resp. invisible.
     344       30676 :     HideAndShowObjects();
     345       30676 :     return true;
     346             : }
     347             : 
     348           0 : bool SwTxtFrm::FillRegister( SwTwips& rRegStart, sal_uInt16& rRegDiff )
     349             : {
     350           0 :     const SwFrm *pFrm = this;
     351           0 :     rRegDiff = 0;
     352           0 :     while( !( ( FRM_BODY | FRM_FLY )
     353           0 :            & pFrm->GetType() ) && pFrm->GetUpper() )
     354           0 :         pFrm = pFrm->GetUpper();
     355           0 :     if( ( FRM_BODY| FRM_FLY ) & pFrm->GetType() )
     356             :     {
     357           0 :         SWRECTFN( pFrm )
     358           0 :         rRegStart = (pFrm->*fnRect->fnGetPrtTop)();
     359           0 :         pFrm = pFrm->FindPageFrm();
     360           0 :         if( pFrm->IsPageFrm() )
     361             :         {
     362           0 :             SwPageDesc* pDesc = ((SwPageFrm*)pFrm)->FindPageDesc();
     363           0 :             if( pDesc )
     364             :             {
     365           0 :                 rRegDiff = pDesc->GetRegHeight();
     366           0 :                 if( !rRegDiff )
     367             :                 {
     368           0 :                     const SwTxtFmtColl *pFmt = pDesc->GetRegisterFmtColl();
     369           0 :                     if( pFmt )
     370             :                     {
     371           0 :                         const SvxLineSpacingItem &rSpace = pFmt->GetLineSpacing();
     372           0 :                         if( SVX_LINE_SPACE_FIX == rSpace.GetLineSpaceRule() )
     373             :                         {
     374           0 :                             rRegDiff = rSpace.GetLineHeight();
     375           0 :                             pDesc->SetRegHeight( rRegDiff );
     376           0 :                             pDesc->SetRegAscent( ( 4 * rRegDiff ) / 5 );
     377             :                         }
     378             :                         else
     379             :                         {
     380           0 :                             SwViewShell *pSh = getRootFrm()->GetCurrShell();
     381           0 :                             SwFontAccess aFontAccess( pFmt, pSh );
     382           0 :                             SwFont aFnt( aFontAccess.Get()->GetFont() );
     383             : 
     384           0 :                             OutputDevice *pOut = 0;
     385           0 :                             if( !pSh || !pSh->GetViewOptions()->getBrowseMode() ||
     386           0 :                                 pSh->GetViewOptions()->IsPrtFormat() )
     387           0 :                                 pOut = GetTxtNode()->getIDocumentDeviceAccess()->getReferenceDevice( true );
     388             : 
     389           0 :                             if( pSh && !pOut )
     390           0 :                                 pOut = pSh->GetWin();
     391             : 
     392           0 :                             if( !pOut )
     393           0 :                                 pOut = Application::GetDefaultDevice();
     394             : 
     395           0 :                             MapMode aOldMap( pOut->GetMapMode() );
     396           0 :                             pOut->SetMapMode( MapMode( MAP_TWIP ) );
     397             : 
     398           0 :                             aFnt.ChgFnt( pSh, *pOut );
     399           0 :                             rRegDiff = aFnt.GetHeight( pSh, *pOut );
     400           0 :                             sal_uInt16 nNetHeight = rRegDiff;
     401             : 
     402           0 :                             switch( rSpace.GetLineSpaceRule() )
     403             :                             {
     404             :                                 case SVX_LINE_SPACE_AUTO:
     405           0 :                                 break;
     406             :                                 case SVX_LINE_SPACE_MIN:
     407             :                                 {
     408           0 :                                     if( rRegDiff < rSpace.GetLineHeight() )
     409           0 :                                         rRegDiff = rSpace.GetLineHeight();
     410           0 :                                     break;
     411             :                                 }
     412             :                                 default:
     413             :                                     OSL_FAIL( ": unknown LineSpaceRule" );
     414             :                             }
     415           0 :                             switch( rSpace.GetInterLineSpaceRule() )
     416             :                             {
     417             :                                 case SVX_INTER_LINE_SPACE_OFF:
     418           0 :                                 break;
     419             :                                 case SVX_INTER_LINE_SPACE_PROP:
     420             :                                 {
     421           0 :                                     long nTmp = rSpace.GetPropLineSpace();
     422           0 :                                     if( nTmp < 50 )
     423           0 :                                         nTmp = nTmp ? 50 : 100;
     424           0 :                                     nTmp *= rRegDiff;
     425           0 :                                     nTmp /= 100;
     426           0 :                                     if( !nTmp )
     427           0 :                                         ++nTmp;
     428           0 :                                     rRegDiff = (sal_uInt16)nTmp;
     429           0 :                                     nNetHeight = rRegDiff;
     430           0 :                                     break;
     431             :                                 }
     432             :                                 case SVX_INTER_LINE_SPACE_FIX:
     433             :                                 {
     434           0 :                                     rRegDiff = rRegDiff + rSpace.GetInterLineSpace();
     435           0 :                                     nNetHeight = rRegDiff;
     436           0 :                                     break;
     437             :                                 }
     438             :                                 default: OSL_FAIL( ": unknown InterLineSpaceRule" );
     439             :                             }
     440           0 :                             pDesc->SetRegHeight( rRegDiff );
     441             :                             pDesc->SetRegAscent( rRegDiff - nNetHeight +
     442           0 :                                                  aFnt.GetAscent( pSh, *pOut ) );
     443           0 :                             pOut->SetMapMode( aOldMap );
     444             :                         }
     445             :                     }
     446             :                 }
     447           0 :                 const long nTmpDiff = pDesc->GetRegAscent() - rRegDiff;
     448           0 :                 if ( bVert )
     449           0 :                     rRegStart -= nTmpDiff;
     450             :                 else
     451           0 :                     rRegStart += nTmpDiff;
     452             :             }
     453             :         }
     454             :     }
     455           0 :     return ( 0 != rRegDiff );
     456             : }
     457             : 
     458           4 : void SwHiddenTextPortion::Paint( const SwTxtPaintInfo & rInf) const
     459             : {
     460             :     (void)rInf;
     461             : #ifdef DBG_UTIL
     462             :     OutputDevice* pOut = (OutputDevice*)rInf.GetOut();
     463             :     Color aCol( SwViewOption::GetFieldShadingsColor() );
     464             :     Color aOldColor( pOut->GetFillColor() );
     465             :     pOut->SetFillColor( aCol );
     466             :     Point aPos( rInf.GetPos() );
     467             :     aPos.Y() -= 150;
     468             :     aPos.X() -= 25;
     469             :     SwRect aRect( aPos, Size( 100, 200 ) );
     470             :     ((OutputDevice*)pOut)->DrawRect( aRect.SVRect() );
     471             :     pOut->SetFillColor( aOldColor );
     472             : #endif
     473           4 : }
     474             : 
     475           8 : bool SwHiddenTextPortion::Format( SwTxtFormatInfo &rInf )
     476             : {
     477           8 :     Width( 0 );
     478           8 :     rInf.GetTxtFrm()->HideFootnotes( rInf.GetIdx(), rInf.GetIdx() + GetLen() );
     479             : 
     480           8 :     return false;
     481             : };
     482             : 
     483           0 : void SwControlCharPortion::Paint( const SwTxtPaintInfo &rInf ) const
     484             : {
     485           0 :     if ( Width() )  // is only set during prepaint mode
     486             :     {
     487           0 :         rInf.DrawViewOpt( *this, POR_CONTROLCHAR );
     488             : 
     489           0 :         if ( !rInf.GetOpt().IsPagePreview() &&
     490           0 :              !rInf.GetOpt().IsReadonly() &&
     491           0 :               SwViewOption::IsFieldShadings() &&
     492           0 :               CHAR_ZWNBSP != mcChar )
     493             :         {
     494           0 :             SwFont aTmpFont( *rInf.GetFont() );
     495           0 :             aTmpFont.SetEscapement( CHAR_ZWSP == mcChar ? DFLT_ESC_AUTO_SUB : -25 );
     496           0 :             const sal_uInt16 nProp = 40;
     497           0 :             aTmpFont.SetProportion( nProp );  // a smaller font
     498           0 :             SwFontSave aFontSave( rInf, &aTmpFont );
     499             : 
     500           0 :             OUString aOutString;
     501             : 
     502           0 :             switch ( mcChar )
     503             :             {
     504             :                 case CHAR_ZWSP :
     505           0 :                     aOutString = "/"; break;
     506             : //                case CHAR_LRM :
     507             : //                    rTxt = sal_Unicode(0x2514); break;
     508             : //                case CHAR_RLM :
     509             : //                    rTxt = sal_Unicode(0x2518); break;
     510             :             }
     511             : 
     512           0 :             if ( !mnHalfCharWidth )
     513           0 :                 mnHalfCharWidth = rInf.GetTxtSize( aOutString ).Width() / 2;
     514             : 
     515           0 :             Point aOldPos = rInf.GetPos();
     516           0 :             Point aNewPos( aOldPos );
     517           0 :             aNewPos.X() = aNewPos.X() + ( Width() / 2 ) - mnHalfCharWidth;
     518           0 :             const_cast< SwTxtPaintInfo& >( rInf ).SetPos( aNewPos );
     519             : 
     520           0 :             rInf.DrawText( aOutString, *this );
     521             : 
     522           0 :             const_cast< SwTxtPaintInfo& >( rInf ).SetPos( aOldPos );
     523             :         }
     524             :     }
     525           0 : }
     526             : 
     527           0 : bool SwControlCharPortion::Format( SwTxtFormatInfo &rInf )
     528             : {
     529           0 :     const SwLinePortion* pRoot = rInf.GetRoot();
     530           0 :     Width( 0 );
     531           0 :     Height( pRoot->Height() );
     532           0 :     SetAscent( pRoot->GetAscent() );
     533             : 
     534           0 :     return false;
     535             : }
     536             : 
     537           0 : sal_uInt16 SwControlCharPortion::GetViewWidth( const SwTxtSizeInfo& rInf ) const
     538             : {
     539           0 :     if( !mnViewWidth )
     540           0 :         mnViewWidth = rInf.GetTxtSize(OUString(' ')).Width();
     541             : 
     542           0 :     return mnViewWidth;
     543         270 : }
     544             : 
     545             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10