Index: viewpg.cxx =================================================================== RCS file: /cvs/sw/sw/source/core/view/viewpg.cxx,v retrieving revision 1.28 diff -w -u -r1.28 viewpg.cxx --- viewpg.cxx 26 Apr 2007 09:39:30 -0000 1.28 +++ viewpg.cxx 13 Sep 2007 12:57:41 -0000 @@ -98,6 +98,13 @@ #include #include +// --> OD 2007-09-10 #i80209# - patch by ayaniger +#ifndef _SVX_FRMDIRITEM_HXX +#include +#endif +#include "frmfmt.hxx" +// <-- + const SwTwips nXFree = 4*142; // == 0.25 cm * 4 const SwTwips nYFree = 4*142; static USHORT nPrevViewXFreePix = 0; @@ -207,6 +214,12 @@ } const SwPageFrm *pStPage = (SwPageFrm*)GetLayout()->Lower(); + // --> OD 2007-09-10 #i80209# - patch by ayaniger + // Reverse column order for RTL + // Layout direction determined by layout direction of the first page. + const UINT16 nDir = ((SvxFrameDirectionItem&)pStPage->GetFmt()->GetAttr( RES_FRAMEDIR )).GetValue(); + const bool bRTL = (nDir == FRMDIR_HORI_RIGHT_TOP); + // <-- const SwFrm *pEndPage = pStPage; USHORT i; @@ -413,6 +426,12 @@ for( BYTE nR = 0; *ppTmpPg && nR < nRow; ++nR ) { aCalcPt.X() = nXStt; + // --> OD 2007-09-10 #i80209# - patch by ayaniger + if ( bRTL ) + { + aCalcPt.X() += nMaxColSz - (*ppTmpPg)->Frm().SSize().Width(); + } + // <-- for( BYTE nC = 0; *ppTmpPg && nC < nCol; ++nC ) { aShell.Imp()->SetFirstVisPageInvalid(); @@ -424,20 +443,29 @@ aMapMode.SetOrigin( aPos ); pPrt->SetMapMode( aMapMode ); (*ppTmpPg)->GetUpper()->Paint( (*ppTmpPg)->Frm() ); + + // Prepare next loop // OD 05.05.2003 #i14016# - consider empty pages // on calculation of the paint offset for the next page. aCalcPt.X() += nHOffs; + // --> OD 2007-09-10 #i80209# - patch by ayaniger + SwTwips nPageWidth( 0 ); if ( (*ppTmpPg)->IsEmptyPage() ) { if ( (*ppTmpPg)->GetPhyPageNum() % 2 == 0 ) - aCalcPt.X() += (*ppTmpPg)->GetPrev()->Frm().SSize().Width(); + nPageWidth = (*ppTmpPg)->GetPrev()->Frm().SSize().Width(); else - aCalcPt.X() += (*ppTmpPg)->GetNext()->Frm().SSize().Width(); + nPageWidth = (*ppTmpPg)->GetNext()->Frm().SSize().Width(); } else { - aCalcPt.X() += (*ppTmpPg)->Frm().Width(); + nPageWidth = (*ppTmpPg)->Frm().Width(); } + if ( bRTL ) + aCalcPt.X() -= nPageWidth; + else + aCalcPt.X() += nPageWidth; + // <-- ++ppTmpPg; } aCalcPt.Y() += nVOffs + nPageHeight;