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

Generated by: LCOV version 1.10