sw/inc/tgrditem.hxx | 77 ++++++++++--------- sw/source/core/inc/pagefrm.hxx | 11 +- sw/source/core/layout/atrfrm.cxx | 141 +++++++++++++++++++----------------- sw/source/core/layout/flowfrm.cxx | 2 sw/source/core/layout/pagechg.cxx | 28 ++++++- sw/source/core/layout/paintfrm.cxx | 4 - sw/source/core/text/frmpaint.cxx | 2 sw/source/core/text/guess.cxx | 3 sw/source/core/text/itrcrsr.cxx | 3 sw/source/core/text/itrform2.cxx | 20 ++--- sw/source/core/text/itrpaint.cxx | 2 sw/source/core/text/itrtxt.cxx | 2 sw/source/core/text/pormulti.cxx | 7 + sw/source/core/text/porrst.cxx | 2 sw/source/core/text/txtfrm.cxx | 4 - sw/source/core/txtnode/fntcache.cxx | 32 ++++---- 16 files changed, 190 insertions(+), 150 deletions(-)
New commits: commit 955fd65a75c971b23ff552bbe627d3fd30aac907 Author: Michael Stahl <mst...@redhat.com> Date: Fri Mar 7 16:49:52 2014 +0100 sw: remove that GETGRID abomination Change-Id: Ib2299dae7c1aab2d9af992930c29381a1027141b diff --git a/sw/source/core/inc/pagefrm.hxx b/sw/source/core/inc/pagefrm.hxx index 67e3e50..1b6c1bf 100644 --- a/sw/source/core/inc/pagefrm.hxx +++ b/sw/source/core/inc/pagefrm.hxx @@ -430,13 +430,12 @@ inline sal_Bool SwPageFrm::IsInvalidFly() const return bInvalidFlyLayout || bInvalidFlyCntnt; } -#define GETGRID( pPage ) const SwTextGridItem *pGrid = NULL; \ - {if( pPage && pPage->HasGrid() && GRID_NONE==(pGrid=(SwTextGridItem*)&pPage->\ - GetPageDesc()->GetMaster().GetFmtAttr(RES_TEXTGRID))->GetGridType() ) \ - pGrid = NULL;} -#define GETGRIDWIDTH( pGrid , pDoc ) pDoc->IsSquaredPageMode() ? \ - pGrid->GetBaseHeight(): pGrid->GetBaseWidth() +class SwTextGridItem; + +SwTextGridItem const* GetGridItem(SwPageFrm const*const); + +sal_uInt16 GetGridWidth(SwTextGridItem const&, SwDoc const&); #endif // INCLUDED_SW_SOURCE_CORE_INC_PAGEFRM_HXX diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx index cdb913d..bbab257 100644 --- a/sw/source/core/layout/flowfrm.cxx +++ b/sw/source/core/layout/flowfrm.cxx @@ -1506,7 +1506,7 @@ SwTwips SwFlowFrm::_GetUpperSpaceAmountConsideredForPageGrid( if ( m_rThis.IsInDocBody() && m_rThis.GetAttrSet()->GetParaGrid().GetValue() ) { const SwPageFrm* pPageFrm = m_rThis.FindPageFrm(); - GETGRID( pPageFrm ) + SwTextGridItem const*const pGrid(GetGridItem(pPageFrm)); if( pGrid ) { const SwFrm* pBodyFrm = pPageFrm->FindBodyCont(); diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index 8e99d9e..b809700 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -113,7 +113,8 @@ void SwBodyFrm::Format( const SwBorderAttrs * ) bool bNoGrid = true; if( GetUpper()->IsPageFrm() && ((SwPageFrm*)GetUpper())->HasGrid() ) { - GETGRID( ((SwPageFrm*)GetUpper()) ) + SwTextGridItem const*const pGrid( + GetGridItem(static_cast<SwPageFrm*>(GetUpper()))); if( pGrid ) { bNoGrid = false; @@ -125,7 +126,7 @@ void SwBodyFrm::Format( const SwBorderAttrs * ) { //for textgrid refactor SwDoc *pDoc = GetFmt()->GetDoc(); - nBorder = nSize % (GETGRIDWIDTH(pGrid, pDoc)); + nBorder = nSize % (GetGridWidth(*pGrid, *pDoc)); nSize -= nBorder; nBorder /= 2; } @@ -174,7 +175,7 @@ SwPageFrm::SwPageFrm( SwFrmFmt *pFmt, SwFrm* pSib, SwPageDesc *pPgDsc ) : if( pDesc ) { bHasGrid = sal_True; - GETGRID( this ) + SwTextGridItem const*const pGrid(GetGridItem(this)); if( !pGrid ) bHasGrid = sal_False; } @@ -281,7 +282,7 @@ void SwPageFrm::CheckGrid( sal_Bool bInvalidate ) { sal_Bool bOld = bHasGrid; bHasGrid = sal_True; - GETGRID( this ) + SwTextGridItem const*const pGrid(GetGridItem(this)); bHasGrid = 0 != pGrid; if( bInvalidate || bOld != bHasGrid ) { @@ -2279,4 +2280,23 @@ bool SwPageFrm::IsOverHeaderFooterArea( const Point& rPt, FrameControlType &rCon return false; } +SwTextGridItem const* GetGridItem(SwPageFrm const*const pPage) +{ + if (pPage && pPage->HasGrid()) + { + SwTextGridItem const& rGridItem( + pPage->GetPageDesc()->GetMaster().GetTextGrid()); + if (GRID_NONE != rGridItem.GetGridType()) + { + return &rGridItem; + } + } + return 0; +} + +sal_uInt16 GetGridWidth(SwTextGridItem const& rG, SwDoc const& rDoc) +{ + return (rDoc.IsSquaredPageMode()) ? rG.GetBaseHeight() : rG.GetBaseWidth(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index b090ae1..097a025 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -5504,7 +5504,7 @@ void SwPageFrm::PaintGrid( OutputDevice* pOut, SwRect &rRect ) const { if( !bHasGrid || pRetoucheFly || pRetoucheFly2 ) return; - GETGRID( this ) + SwTextGridItem const*const pGrid(GetGridItem(this)); if( pGrid && ( OUTDEV_PRINTER != pOut->GetOutDevType() ? pGrid->GetDisplayGrid() : pGrid->GetPrintGrid() ) ) { @@ -5522,7 +5522,7 @@ void SwPageFrm::PaintGrid( OutputDevice* pOut, SwRect &rRect ) const bool bCell = GRID_LINES_CHARS == pGrid->GetGridType(); long nGrid = pGrid->GetBaseHeight(); const SwDoc* pDoc = GetFmt()->GetDoc(); - long nGridWidth = GETGRIDWIDTH(pGrid,pDoc); //for textgrid refactor + long nGridWidth = GetGridWidth(*pGrid, *pDoc); long nRuby = pGrid->GetRubyHeight(); long nSum = nGrid + nRuby; const Color *pCol = &pGrid->GetColor(); diff --git a/sw/source/core/text/frmpaint.cxx b/sw/source/core/text/frmpaint.cxx index 04d52b5..93a4170 100644 --- a/sw/source/core/text/frmpaint.cxx +++ b/sw/source/core/text/frmpaint.cxx @@ -527,7 +527,7 @@ bool SwTxtFrm::PaintEmpty( const SwRect &rRect, bool bCheck ) const if ( GetTxtNode()->GetSwAttrSet().GetParaGrid().GetValue() && IsInDocBody() ) { - GETGRID( FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(FindPageFrm())); if ( pGrid ) { // center character in grid line diff --git a/sw/source/core/text/guess.cxx b/sw/source/core/text/guess.cxx index f911e6a..21b7121 100644 --- a/sw/source/core/text/guess.cxx +++ b/sw/source/core/text/guess.cxx @@ -94,7 +94,8 @@ bool SwTxtGuess::Guess( const SwTxtPortion& rPor, SwTxtFormatInfo &rInf, // do not add extra italic value if we have an active character grid if ( rInf.SnapToGrid() ) { - GETGRID( rInf.GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(rInf.GetTxtFrm()->FindPageFrm())); bAddItalic = !pGrid || GRID_LINES_CHARS != pGrid->GetGridType(); } diff --git a/sw/source/core/text/itrcrsr.cxx b/sw/source/core/text/itrcrsr.cxx index 033eb0b..df80a34 100644 --- a/sw/source/core/text/itrcrsr.cxx +++ b/sw/source/core/text/itrcrsr.cxx @@ -741,7 +741,8 @@ void SwTxtCursor::_GetCharRect( SwRect* pOrig, const sal_Int32 nOfst, if( ((SwMultiPortion*)pPor)->IsDouble() ) SetPropFont( 50 ); - GETGRID( GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(GetTxtFrm()->FindPageFrm())); const bool bHasGrid = pGrid && GetInfo().SnapToGrid(); const sal_uInt16 nRubyHeight = bHasGrid ? pGrid->GetRubyHeight() : 0; diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 08eca5e..602e645 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -409,13 +409,12 @@ void SwTxtFormatter::BuildPortions( SwTxtFormatInfo &rInf ) SwLinePortion *pPor = NewPortion( rInf ); // Asian grid stuff - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); const bool bHasGrid = pGrid && rInf.SnapToGrid() && GRID_LINES_CHARS == pGrid->GetGridType(); const SwDoc *pDoc = rInf.GetTxtFrm()->GetNode()->GetDoc(); - const sal_uInt16 nGridWidth = bHasGrid ? - GETGRIDWIDTH(pGrid,pDoc) : 0; //for textgrid refactor + const sal_uInt16 nGridWidth = (bHasGrid) ? GetGridWidth(*pGrid, *pDoc) : 0; // used for grid mode only: // the pointer is stored, because after formatting of non-asian text, @@ -1057,7 +1056,8 @@ SwLinePortion *SwTxtFormatter::WhichFirstPortion(SwTxtFormatInfo &rInf) // 3. Kerning portions at beginning of line in grid mode if ( ! pPor && ! pCurr->GetPortion() ) { - GETGRID( GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(GetTxtFrm()->FindPageFrm())); if ( pGrid ) pPor = new SwKernPortion( *pCurr ); } @@ -1116,7 +1116,8 @@ SwLinePortion *SwTxtFormatter::WhichFirstPortion(SwTxtFormatInfo &rInf) // 9. Kerning portions at beginning of line in grid mode if ( !pPor && !pCurr->GetPortion() ) { - GETGRID( GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(GetTxtFrm()->FindPageFrm())); if ( pGrid ) pPor = new SwKernPortion( *pCurr ); } @@ -1268,7 +1269,8 @@ SwLinePortion *SwTxtFormatter::NewPortion( SwTxtFormatInfo &rInf ) if ( rInf.SnapToGrid() ) { - GETGRID( GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(GetTxtFrm()->FindPageFrm())); if ( pGrid ) { bRubyTop = ! pGrid->GetRubyTextBelow(); @@ -1716,7 +1718,7 @@ void SwTxtFormatter::CalcRealHeight( bool bNewLine ) KSHORT nLineHeight = pCurr->Height(); pCurr->SetClipping( false ); - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); if ( pGrid && GetInfo().SnapToGrid() ) { const sal_uInt16 nGridWidth = pGrid->GetBaseHeight(); @@ -2476,7 +2478,7 @@ void SwTxtFormatter::CalcFlyWidth( SwTxtFormatInfo &rInf ) if( pFly->Fix() < rInf.Width() ) rInf.Width( pFly->Fix() ); - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); if ( pGrid ) { const SwPageFrm* pPageFrm = pFrm->FindPageFrm(); @@ -2489,7 +2491,7 @@ void SwTxtFormatter::CalcFlyWidth( SwTxtFormatInfo &rInf ) (pPageFrm->*fnRect->fnGetPrtLeft)(); const SwDoc *pDoc = rInf.GetTxtFrm()->GetNode()->GetDoc(); - const sal_uInt16 nGridWidth = GETGRIDWIDTH( pGrid, pDoc); //For textgrid refactor + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); SwTwips nStartX = GetLeftMargin(); if ( bVert ) diff --git a/sw/source/core/text/itrpaint.cxx b/sw/source/core/text/itrpaint.cxx index 5ee8e9b..4bd2b0f 100644 --- a/sw/source/core/text/itrpaint.cxx +++ b/sw/source/core/text/itrpaint.cxx @@ -243,7 +243,7 @@ void SwTxtPainter::DrawTextLine( const SwRect &rPaint, SwSaveClip &rClip, // Baseline-Ausgabe auch bei nicht-TxtPortions (vgl. TabPor mit Fill) // if no special vertical alignment is used, // we calculate Y value for the whole line - GETGRID( GetTxtFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(GetTxtFrm()->FindPageFrm())); const bool bAdjustBaseLine = GetLineInfo().HasSpecialAlign( GetTxtFrm()->IsVertical() ) || ( 0 != pGrid ); diff --git a/sw/source/core/text/itrtxt.cxx b/sw/source/core/text/itrtxt.cxx index de34d1f..aea80ef 100644 --- a/sw/source/core/text/itrtxt.cxx +++ b/sw/source/core/text/itrtxt.cxx @@ -284,7 +284,7 @@ sal_uInt16 SwTxtCursor::AdjustBaseLine( const SwLineLayout& rLine, sal_uInt16 nOfst = rLine.GetRealHeight() - rLine.Height(); - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); if ( pGrid && GetInfo().SnapToGrid() ) { diff --git a/sw/source/core/text/pormulti.cxx b/sw/source/core/text/pormulti.cxx index 5e03352..bd87c74 100644 --- a/sw/source/core/text/pormulti.cxx +++ b/sw/source/core/text/pormulti.cxx @@ -1341,7 +1341,7 @@ SwSpaceManipulator::~SwSpaceManipulator() void SwTxtPainter::PaintMultiPortion( const SwRect &rPaint, SwMultiPortion& rMulti, const SwMultiPortion* pEnvPor ) { - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); const bool bHasGrid = pGrid && GetInfo().SnapToGrid(); sal_uInt16 nRubyHeight = 0; bool bRubyTop = false; @@ -1845,7 +1845,7 @@ bool SwTxtFormatter::BuildMultiPortion( SwTxtFormatInfo &rInf, SwLinePortion *pNextSecond = NULL; bool bRet = false; - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(pFrm->FindPageFrm())); const bool bHasGrid = pGrid && GRID_LINES_CHARS == pGrid->GetGridType(); bool bRubyTop = false; @@ -2293,7 +2293,8 @@ SwLinePortion* SwTxtFormatter::MakeRestPortion( const SwLineLayout* pLine, if ( GetInfo().SnapToGrid() ) { - GETGRID( pFrm->FindPageFrm() ) + SwTextGridItem const*const pGrid( + GetGridItem(pFrm->FindPageFrm())); if ( pGrid ) { bRubyTop = ! pGrid->GetRubyTextBelow(); diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx index c39e0a7..a56dc41 100644 --- a/sw/source/core/text/porrst.cxx +++ b/sw/source/core/text/porrst.cxx @@ -325,7 +325,7 @@ bool SwTxtFrm::FormatEmpty() if ( GetTxtNode()->GetSwAttrSet().GetParaGrid().GetValue() && IsInDocBody() ) { - GETGRID( FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(FindPageFrm())); if ( pGrid ) nHeight = pGrid->GetBaseHeight() + pGrid->GetRubyHeight(); } diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx index cef5612..d1fee29 100644 --- a/sw/source/core/text/txtfrm.cxx +++ b/sw/source/core/text/txtfrm.cxx @@ -1437,7 +1437,7 @@ void SwTxtFrm::Prepare( const PrepareHint ePrep, const void* pVoid, if( GetTxtNode()->GetSwAttrSet().GetRegister().GetValue()) break; - GETGRID( FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(FindPageFrm())); if ( pGrid && GetTxtNode()->GetSwAttrSet().GetParaGrid().GetValue() ) break; @@ -1598,7 +1598,7 @@ void SwTxtFrm::Prepare( const PrepareHint ePrep, const void* pVoid, { if ( GetValidPrtAreaFlag() ) { - GETGRID( FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(FindPageFrm())); if ( pGrid && GetTxtNode()->GetSwAttrSet().GetParaGrid().GetValue() ) InvalidatePrt(); } diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index 66efedb..c4af0ba 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -950,13 +950,13 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if ( rInf.GetFrm() && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && pGrid->IsSnapToChars()) { //for textgrid refactor //const sal_uInt16 nGridWidth = pGrid->GetBaseHeight(); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - const sal_uInt16 nGridWidth = GETGRIDWIDTH(pGrid, pDoc); + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); sal_Int32* pKernArray = new sal_Int32[rInf.GetLen()]; if ( pPrinter ) @@ -1040,14 +1040,14 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) if ( rInf.GetFrm() && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && !pGrid->IsSnapToChars() ) { const sal_uInt16 nDefaultFontHeight = GetDefaultFontHeight( rInf ); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - long nGridWidthAdd = GETGRIDWIDTH(pGrid, pDoc); + long nGridWidthAdd = GetGridWidth(*pGrid, *pDoc); if( SW_LATIN == rInf.GetFont()->GetActual() ) nGridWidthAdd = ( nGridWidthAdd - nDefaultFontHeight ) / 2; else @@ -1822,11 +1822,11 @@ Size SwFntObj::GetTextSize( SwDrawTextInfo& rInf ) if ( rInf.GetFrm() && nLn && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && pGrid->IsSnapToChars() ) { const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - const sal_uInt16 nGridWidth = GETGRIDWIDTH(pGrid, pDoc); + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); OutputDevice* pOutDev; @@ -1864,13 +1864,13 @@ Size SwFntObj::GetTextSize( SwDrawTextInfo& rInf ) if ( rInf.GetFrm() && nLn && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && !pGrid->IsSnapToChars() ) { const sal_uInt16 nDefaultFontHeight = GetDefaultFontHeight( rInf ); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - long nGridWidthAdd = GETGRIDWIDTH(pGrid, pDoc); + long nGridWidthAdd = GetGridWidth(*pGrid, *pDoc); if( SW_LATIN == rInf.GetFont()->GetActual() ) nGridWidthAdd = ( nGridWidthAdd - nDefaultFontHeight ) / 2; else @@ -2110,11 +2110,11 @@ sal_Int32 SwFntObj::GetCrsrOfst( SwDrawTextInfo &rInf ) if ( rInf.GetFrm() && rInf.GetLen() && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && pGrid->IsSnapToChars() ) { const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - const sal_uInt16 nGridWidth = GETGRIDWIDTH(pGrid, pDoc); + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); long nWidthPerChar = pKernArray[ rInf.GetLen() - 1 ] / rInf.GetLen(); @@ -2137,14 +2137,14 @@ sal_Int32 SwFntObj::GetCrsrOfst( SwDrawTextInfo &rInf ) if ( rInf.GetFrm() && rInf.GetLen() && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && !pGrid->IsSnapToChars() ) { const sal_uInt16 nDefaultFontHeight = GetDefaultFontHeight( rInf ); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - long nGridWidthAdd = GETGRIDWIDTH(pGrid, pDoc); + long nGridWidthAdd = GetGridWidth(*pGrid, *pDoc); if( SW_LATIN == rInf.GetFont()->GetActual() ) nGridWidthAdd = ( nGridWidthAdd - nDefaultFontHeight ) / 2; else @@ -2365,11 +2365,11 @@ sal_Int32 SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth ) if ( rInf.GetFrm() && nLn && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && pGrid->IsSnapToChars() ) { const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - const sal_uInt16 nGridWidth = GETGRIDWIDTH(pGrid, pDoc); + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); sal_Int32* pKernArray = new sal_Int32[rInf.GetLen()]; rInf.GetOut().GetTextArray( rInf.GetText(), pKernArray, @@ -2399,13 +2399,13 @@ sal_Int32 SwFont::GetTxtBreak( SwDrawTextInfo& rInf, long nTextWidth ) if ( rInf.GetFrm() && nLn && rInf.SnapToGrid() && rInf.GetFont() && SW_CJK == rInf.GetFont()->GetActual() ) { - GETGRID( rInf.GetFrm()->FindPageFrm() ) + SwTextGridItem const*const pGrid(GetGridItem(rInf.GetFrm()->FindPageFrm())); if ( pGrid && GRID_LINES_CHARS == pGrid->GetGridType() && !pGrid->IsSnapToChars() ) { const sal_uInt16 nDefaultFontHeight = GetDefaultFontHeight( rInf ); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - long nGridWidthAdd = GETGRIDWIDTH(pGrid, pDoc); + long nGridWidthAdd = GetGridWidth(*pGrid, *pDoc); if( SW_LATIN == rInf.GetFont()->GetActual() ) nGridWidthAdd = ( nGridWidthAdd - nDefaultFontHeight ) / 2 ; else commit 2f91d6c40356038145861bb0459cf0d32c0e7ffe Author: Michael Stahl <mst...@redhat.com> Date: Fri Mar 7 16:14:16 2014 +0100 sw: add prefix to SwTextGridItem members Change-Id: Ie086d56f01bc06de14c6fb1713a43aec8e6335f9 diff --git a/sw/inc/tgrditem.hxx b/sw/inc/tgrditem.hxx index c137fcd..dd25833 100644 --- a/sw/inc/tgrditem.hxx +++ b/sw/inc/tgrditem.hxx @@ -31,18 +31,21 @@ enum SwTextGrid { GRID_NONE, GRID_LINES_ONLY, GRID_LINES_CHARS }; class SW_DLLPUBLIC SwTextGridItem : public SfxPoolItem { - Color aColor; - sal_uInt16 nLines; - sal_uInt16 nBaseHeight, nRubyHeight; - SwTextGrid eGridType; - sal_Bool bRubyTextBelow; - sal_Bool bPrintGrid; - sal_Bool bDisplayGrid; +private: + Color m_aColor; + sal_uInt16 m_nLines; + sal_uInt16 m_nBaseHeight; + sal_uInt16 m_nRubyHeight; + SwTextGrid m_eGridType; + sal_Bool m_bRubyTextBelow; + sal_Bool m_bPrintGrid; + sal_Bool m_bDisplayGrid; //for textgrid enhancement - sal_uInt16 nBaseWidth; - sal_Bool bSnapToChars; - sal_Bool bSquaredMode; + sal_uInt16 m_nBaseWidth; + sal_Bool m_bSnapToChars; + sal_Bool m_bSquaredMode; + public: SwTextGridItem(); virtual ~SwTextGridItem(); @@ -60,44 +63,44 @@ public: SwTextGridItem& operator=( const SwTextGridItem& ); - const Color& GetColor() const { return aColor; } - void SetColor( const Color& rCol ) { aColor = rCol; } + const Color& GetColor() const { return m_aColor; } + void SetColor( const Color& rCol ) { m_aColor = rCol; } - sal_uInt16 GetLines() const { return nLines; } - void SetLines( sal_uInt16 nNew ) { nLines = nNew; } + sal_uInt16 GetLines() const { return m_nLines; } + void SetLines( sal_uInt16 nNew ) { m_nLines = nNew; } - sal_uInt16 GetBaseHeight() const { return nBaseHeight; } - void SetBaseHeight( sal_uInt16 nNew ) { nBaseHeight = nNew; } + sal_uInt16 GetBaseHeight() const { return m_nBaseHeight; } + void SetBaseHeight( sal_uInt16 nNew ) { m_nBaseHeight = nNew; } - sal_uInt16 GetRubyHeight() const { return nRubyHeight; } - void SetRubyHeight( sal_uInt16 nNew ) { nRubyHeight = nNew; } + sal_uInt16 GetRubyHeight() const { return m_nRubyHeight; } + void SetRubyHeight( sal_uInt16 nNew ) { m_nRubyHeight = nNew; } - SwTextGrid GetGridType() const { return eGridType; } - void SetGridType( SwTextGrid eNew ) { eGridType = eNew; } + SwTextGrid GetGridType() const { return m_eGridType; } + void SetGridType( SwTextGrid eNew ) { m_eGridType = eNew; } - sal_Bool IsRubyTextBelow() const { return bRubyTextBelow; } - sal_Bool GetRubyTextBelow() const { return bRubyTextBelow; } - void SetRubyTextBelow( sal_Bool bNew ) { bRubyTextBelow = bNew; } + sal_Bool IsRubyTextBelow() const { return m_bRubyTextBelow; } + sal_Bool GetRubyTextBelow() const { return m_bRubyTextBelow; } + void SetRubyTextBelow( sal_Bool bNew ) { m_bRubyTextBelow = bNew; } - sal_Bool IsPrintGrid() const { return bPrintGrid; } - sal_Bool GetPrintGrid() const { return bPrintGrid; } - void SetPrintGrid( sal_Bool bNew ) { bPrintGrid = bNew; } + sal_Bool IsPrintGrid() const { return m_bPrintGrid; } + sal_Bool GetPrintGrid() const { return m_bPrintGrid; } + void SetPrintGrid( sal_Bool bNew ) { m_bPrintGrid = bNew; } - sal_Bool IsDisplayGrid() const { return bDisplayGrid; } - sal_Bool GetDisplayGrid() const { return bDisplayGrid; } - void SetDisplayGrid( sal_Bool bNew ) { bDisplayGrid = bNew; } + sal_Bool IsDisplayGrid() const { return m_bDisplayGrid; } + sal_Bool GetDisplayGrid() const { return m_bDisplayGrid; } + void SetDisplayGrid( sal_Bool bNew ) { m_bDisplayGrid = bNew; } //for textgrid enhancement - sal_uInt16 GetBaseWidth() const { return nBaseWidth;} - void SetBaseWidth( sal_uInt16 nNew ) { nBaseWidth = nNew; } + sal_uInt16 GetBaseWidth() const { return m_nBaseWidth;} + void SetBaseWidth( sal_uInt16 nNew ) { m_nBaseWidth = nNew; } - sal_Bool IsSnapToChars() const { return bSnapToChars; } - sal_Bool GetSnapToChars() const { return bSnapToChars; } - void SetSnapToChars( sal_Bool bNew ) { bSnapToChars = bNew; } + sal_Bool IsSnapToChars() const { return m_bSnapToChars; } + sal_Bool GetSnapToChars() const { return m_bSnapToChars; } + void SetSnapToChars( sal_Bool bNew ) { m_bSnapToChars = bNew; } - sal_Bool IsSquaredMode() const { return bSquaredMode; } - sal_Bool GetSquaredMode() const { return bSquaredMode; } - void SetSquaredMode( sal_Bool bNew ) { bSquaredMode = bNew; } + sal_Bool IsSquaredMode() const { return m_bSquaredMode; } + sal_Bool GetSquaredMode() const { return m_bSquaredMode; } + void SetSquaredMode( sal_Bool bNew ) { m_bSquaredMode = bNew; } void SwitchPaperMode(sal_Bool bNew ); void Init(); diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index f80cf38..f251813 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -2105,10 +2105,10 @@ bool SwFmtLineNumber::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) // class SwTextGridItem SwTextGridItem::SwTextGridItem() - : SfxPoolItem( RES_TEXTGRID ), aColor( COL_LIGHTGRAY ), nLines( 20 ), - nBaseHeight( 400 ), nRubyHeight( 200 ), eGridType( GRID_NONE ), - bRubyTextBelow( 0 ), bPrintGrid( 1 ), bDisplayGrid( 1 ), - nBaseWidth(400), bSnapToChars( 1 ), bSquaredMode(1) + : SfxPoolItem( RES_TEXTGRID ), m_aColor( COL_LIGHTGRAY ), m_nLines( 20 ) + , m_nBaseHeight( 400 ), m_nRubyHeight( 200 ), m_eGridType( GRID_NONE ) + , m_bRubyTextBelow( 0 ), m_bPrintGrid( 1 ), m_bDisplayGrid( 1 ) + , m_nBaseWidth(400), m_bSnapToChars( 1 ), m_bSquaredMode(1) { } @@ -2119,17 +2119,18 @@ SwTextGridItem::~SwTextGridItem() bool SwTextGridItem::operator==( const SfxPoolItem& rAttr ) const { OSL_ENSURE( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" ); - return eGridType == ((SwTextGridItem&)rAttr).GetGridType() && - nLines == ((SwTextGridItem&)rAttr).GetLines() && - nBaseHeight == ((SwTextGridItem&)rAttr).GetBaseHeight() && - nRubyHeight == ((SwTextGridItem&)rAttr).GetRubyHeight() && - bRubyTextBelow == ((SwTextGridItem&)rAttr).GetRubyTextBelow() && - bDisplayGrid == ((SwTextGridItem&)rAttr).GetDisplayGrid() && - bPrintGrid == ((SwTextGridItem&)rAttr).GetPrintGrid() && - aColor == ((SwTextGridItem&)rAttr).GetColor() && - nBaseWidth == ((SwTextGridItem&)rAttr).GetBaseWidth() && - bSnapToChars == ((SwTextGridItem&)rAttr).GetSnapToChars() && - bSquaredMode == ((SwTextGridItem&)rAttr).GetSquaredMode(); + SwTextGridItem const& rOther(static_cast<SwTextGridItem const&>(rAttr)); + return m_eGridType == rOther.GetGridType() + && m_nLines == rOther.GetLines() + && m_nBaseHeight == rOther.GetBaseHeight() + && m_nRubyHeight == rOther.GetRubyHeight() + && m_bRubyTextBelow == rOther.GetRubyTextBelow() + && m_bDisplayGrid == rOther.GetDisplayGrid() + && m_bPrintGrid == rOther.GetPrintGrid() + && m_aColor == rOther.GetColor() + && m_nBaseWidth == rOther.GetBaseWidth() + && m_bSnapToChars == rOther.GetSnapToChars() + && m_bSquaredMode == rOther.GetSquaredMode(); } SfxPoolItem* SwTextGridItem::Clone( SfxItemPool* ) const @@ -2139,17 +2140,17 @@ SfxPoolItem* SwTextGridItem::Clone( SfxItemPool* ) const SwTextGridItem& SwTextGridItem::operator=( const SwTextGridItem& rCpy ) { - aColor = rCpy.GetColor(); - nLines = rCpy.GetLines(); - nBaseHeight = rCpy.GetBaseHeight(); - nRubyHeight = rCpy.GetRubyHeight(); - eGridType = rCpy.GetGridType(); - bRubyTextBelow = rCpy.GetRubyTextBelow(); - bPrintGrid = rCpy.GetPrintGrid(); - bDisplayGrid = rCpy.GetDisplayGrid(); - nBaseWidth = rCpy.GetBaseWidth(); - bSnapToChars = rCpy.GetSnapToChars(); - bSquaredMode = rCpy.GetSquaredMode(); + m_aColor = rCpy.GetColor(); + m_nLines = rCpy.GetLines(); + m_nBaseHeight = rCpy.GetBaseHeight(); + m_nRubyHeight = rCpy.GetRubyHeight(); + m_eGridType = rCpy.GetGridType(); + m_bRubyTextBelow = rCpy.GetRubyTextBelow(); + m_bPrintGrid = rCpy.GetPrintGrid(); + m_bDisplayGrid = rCpy.GetDisplayGrid(); + m_nBaseWidth = rCpy.GetBaseWidth(); + m_bSnapToChars = rCpy.GetSnapToChars(); + m_bSquaredMode = rCpy.GetSquaredMode(); return *this; } @@ -2167,28 +2168,28 @@ bool SwTextGridItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const rVal <<= GetLines(); break; case MID_GRID_RUBY_BELOW: - rVal.setValue( &bRubyTextBelow, ::getBooleanCppuType() ); + rVal.setValue( &m_bRubyTextBelow, ::getBooleanCppuType() ); break; case MID_GRID_PRINT: - rVal.setValue( &bPrintGrid, ::getBooleanCppuType() ); + rVal.setValue( &m_bPrintGrid, ::getBooleanCppuType() ); break; case MID_GRID_DISPLAY: - rVal.setValue( &bDisplayGrid, ::getBooleanCppuType() ); + rVal.setValue( &m_bDisplayGrid, ::getBooleanCppuType() ); break; case MID_GRID_BASEHEIGHT: OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0, "This value needs TWIPS-MM100 conversion" ); - rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(nBaseHeight); + rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(m_nBaseHeight); break; case MID_GRID_BASEWIDTH: OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0, "This value needs TWIPS-MM100 conversion" ); - rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(nBaseWidth); + rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(m_nBaseWidth); break; case MID_GRID_RUBYHEIGHT: OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0, "This value needs TWIPS-MM100 conversion" ); - rVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nRubyHeight); + rVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(m_nRubyHeight); break; case MID_GRID_TYPE: switch( GetGridType() ) @@ -2209,11 +2210,11 @@ bool SwTextGridItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const } break; case MID_GRID_SNAPTOCHARS: - rVal.setValue( &bSnapToChars, ::getBooleanCppuType() ); + rVal.setValue( &m_bSnapToChars, ::getBooleanCppuType() ); break; case MID_GRID_STANDARD_MODE: { - sal_Bool bStandardMode = !bSquaredMode; + sal_Bool bStandardMode = !m_bSquaredMode; rVal.setValue( &bStandardMode, ::getBooleanCppuType() ); } break; @@ -2333,62 +2334,62 @@ bool SwTextGridItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) void SwTextGridItem::SwitchPaperMode(sal_Bool bNew) { - if( bNew == bSquaredMode ) + if (bNew == m_bSquaredMode) { //same paper mode, not switch return; } // use default value when grid is disable - if( eGridType == GRID_NONE ) + if (m_eGridType == GRID_NONE) { - bSquaredMode = bNew; + m_bSquaredMode = bNew; Init(); return; } - if( bSquaredMode ) + if (m_bSquaredMode) { //switch from "squared mode" to "standard mode" - nBaseWidth = nBaseHeight; - nBaseHeight = nBaseHeight + nRubyHeight; - nRubyHeight = 0; + m_nBaseWidth = m_nBaseHeight; + m_nBaseHeight = m_nBaseHeight + m_nRubyHeight; + m_nRubyHeight = 0; } else { //switch from "standard mode" to "squared mode" - nRubyHeight = nBaseHeight/3; - nBaseHeight = nBaseHeight - nRubyHeight; - nBaseWidth = nBaseHeight; + m_nRubyHeight = m_nBaseHeight/3; + m_nBaseHeight = m_nBaseHeight - m_nRubyHeight; + m_nBaseWidth = m_nBaseHeight; } - bSquaredMode = !bSquaredMode; + m_bSquaredMode = !m_bSquaredMode; } void SwTextGridItem::Init() { - if( bSquaredMode ) + if (m_bSquaredMode) { - nLines = 20; - nBaseHeight = 400; - nRubyHeight = 200; - eGridType = GRID_NONE; - bRubyTextBelow = 0; - bPrintGrid = 1; - bDisplayGrid = 1; - bSnapToChars = 1; - nBaseWidth = 400; + m_nLines = 20; + m_nBaseHeight = 400; + m_nRubyHeight = 200; + m_eGridType = GRID_NONE; + m_bRubyTextBelow = 0; + m_bPrintGrid = 1; + m_bDisplayGrid = 1; + m_bSnapToChars = 1; + m_nBaseWidth = 400; } else { - nLines = 44; - nBaseHeight = 312; - nRubyHeight = 0; - eGridType = GRID_NONE; - bRubyTextBelow = 0; - bPrintGrid = 1; - bDisplayGrid = 1; - nBaseWidth = 210; - bSnapToChars = 1; + m_nLines = 44; + m_nBaseHeight = 312; + m_nRubyHeight = 0; + m_eGridType = GRID_NONE; + m_bRubyTextBelow = 0; + m_bPrintGrid = 1; + m_bDisplayGrid = 1; + m_nBaseWidth = 210; + m_bSnapToChars = 1; } } commit 71b55cf57460aec3fec948676251448934ba31d1 Author: Michael Stahl <mst...@redhat.com> Date: Fri Mar 7 15:56:37 2014 +0100 rhbz#1043551: sw: avoid division-by-0 in Text Grid painting code Possible to trigger with a document containing: style:layout-grid-base-height="0cm" Change-Id: Id3bd1f29157b39e8a577be0b87b86236dbe5a50c diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index 51a0d53..f80cf38 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -2268,12 +2268,24 @@ bool SwTextGridItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) bRet = (rVal >>= nTmp); nTmp = MM100_TO_TWIP( nTmp ); if( bRet && (nTmp >= 0) && ( nTmp <= USHRT_MAX) ) + { + // rhbz#1043551 round up to 5pt -- 0 causes divide-by-zero + // in layout; 1pt ties the painting code up in knots for + // minutes with bazillion lines... +#define MIN_TEXTGRID_SIZE 100 if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEHEIGHT ) + { + nTmp = std::max(nTmp, MIN_TEXTGRID_SIZE); SetBaseHeight( (sal_uInt16)nTmp ); + } else if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEWIDTH ) + { + nTmp = std::max(nTmp, MIN_TEXTGRID_SIZE); SetBaseWidth( (sal_uInt16)nTmp ); + } else SetRubyHeight( (sal_uInt16)nTmp ); + } else bRet = false; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits