This is an automated email from the ASF dual-hosted git repository. mseidel pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/trunk by this push: new 20a4bcff38 Cleanup 20a4bcff38 is described below commit 20a4bcff3806011e555ba114deeec0a8e4a5f048 Author: mseidel <msei...@apache.org> AuthorDate: Sun Dec 8 02:34:00 2024 +0100 Cleanup --- main/sw/source/core/view/pagepreviewlayout.cxx | 2433 ++++++++++++------------ main/sw/source/core/view/vdraw.cxx | 158 +- main/sw/source/core/view/viewpg.cxx | 326 ++-- 3 files changed, 1457 insertions(+), 1460 deletions(-) diff --git a/main/sw/source/core/view/pagepreviewlayout.cxx b/main/sw/source/core/view/pagepreviewlayout.cxx index 4a03dd000f..0fbc505bda 100644 --- a/main/sw/source/core/view/pagepreviewlayout.cxx +++ b/main/sw/source/core/view/pagepreviewlayout.cxx @@ -53,251 +53,250 @@ extern void SwCalcPixStatics( OutputDevice *pOut ); // methods to initialize page preview layout // ============================================================================= SwPagePreviewLayout::SwPagePreviewLayout( ViewShell& _rParentViewShell, - const SwRootFrm& _rLayoutRootFrm ) - : mnXFree ( 3 * 142 ), - mnYFree ( 3 * 142 ), - mrParentViewShell( _rParentViewShell ), - mrLayoutRootFrm ( _rLayoutRootFrm ) + const SwRootFrm& _rLayoutRootFrm ) + : mnXFree ( 3 * 142 ), + mnYFree ( 3 * 142 ), + mrParentViewShell( _rParentViewShell ), + mrLayoutRootFrm ( _rLayoutRootFrm ) { - _Clear(); + _Clear(); - // OD 2004-03-05 #i18143# - mbBookPreview = false; - mbBookPreviewModeToggled = false; + // OD 2004-03-05 #i18143# + mbBookPreview = false; + mbBookPreviewModeToggled = false; - mbPrintEmptyPages = mrParentViewShell.getIDocumentDeviceAccess()->getPrintData().IsPrintEmptyPages(); + mbPrintEmptyPages = mrParentViewShell.getIDocumentDeviceAccess()->getPrintData().IsPrintEmptyPages(); } void SwPagePreviewLayout::_Clear() { - mbLayoutInfoValid = mbLayoutSizesValid = mbPaintInfoValid = false; - - maWinSize.Width() = 0; - maWinSize.Height() = 0; - mnCols = mnRows = 0; - - _ClearPrevwLayoutSizes(); - - mbDoesLayoutRowsFitIntoWindow = false; - mbDoesLayoutColsFitIntoWindow = false; - - mnPaintPhyStartPageNum = 0; - mnPaintStartCol = mnPaintStartRow = 0; - mbNoPageVisible = false; - maPaintStartPageOffset.X() = 0; - maPaintStartPageOffset.Y() = 0; - maPaintPreviewDocOffset.X() = 0; - maPaintPreviewDocOffset.Y() = 0; - maAdditionalPaintOffset.X() = 0; - maAdditionalPaintOffset.Y() = 0; - maPaintedPrevwDocRect.Left() = 0; - maPaintedPrevwDocRect.Top() = 0; - maPaintedPrevwDocRect.Right() = 0; - maPaintedPrevwDocRect.Bottom() = 0; - mnSelectedPageNum = 0; - _ClearPrevwPageData(); - - // OD 07.11.2003 #i22014# - mbInPaint = false; - mbNewLayoutDuringPaint = false; + mbLayoutInfoValid = mbLayoutSizesValid = mbPaintInfoValid = false; + + maWinSize.Width() = 0; + maWinSize.Height() = 0; + mnCols = mnRows = 0; + + _ClearPrevwLayoutSizes(); + + mbDoesLayoutRowsFitIntoWindow = false; + mbDoesLayoutColsFitIntoWindow = false; + + mnPaintPhyStartPageNum = 0; + mnPaintStartCol = mnPaintStartRow = 0; + mbNoPageVisible = false; + maPaintStartPageOffset.X() = 0; + maPaintStartPageOffset.Y() = 0; + maPaintPreviewDocOffset.X() = 0; + maPaintPreviewDocOffset.Y() = 0; + maAdditionalPaintOffset.X() = 0; + maAdditionalPaintOffset.Y() = 0; + maPaintedPrevwDocRect.Left() = 0; + maPaintedPrevwDocRect.Top() = 0; + maPaintedPrevwDocRect.Right() = 0; + maPaintedPrevwDocRect.Bottom() = 0; + mnSelectedPageNum = 0; + _ClearPrevwPageData(); + + // OD 07.11.2003 #i22014# + mbInPaint = false; + mbNewLayoutDuringPaint = false; } void SwPagePreviewLayout::_ClearPrevwLayoutSizes() { - mnPages = 0; - - maMaxPageSize.Width() = 0; - maMaxPageSize.Height() = 0; - maPreviewDocRect.Left() = maPreviewDocRect.Top() = 0; - maPreviewDocRect.Right() = maPreviewDocRect.Bottom() = 0; - mnColWidth = mnRowHeight = 0; - mnPrevwLayoutWidth = mnPrevwLayoutHeight = 0; + mnPages = 0; + + maMaxPageSize.Width() = 0; + maMaxPageSize.Height() = 0; + maPreviewDocRect.Left() = maPreviewDocRect.Top() = 0; + maPreviewDocRect.Right() = maPreviewDocRect.Bottom() = 0; + mnColWidth = mnRowHeight = 0; + mnPrevwLayoutWidth = mnPrevwLayoutHeight = 0; } void SwPagePreviewLayout::_ClearPrevwPageData() { - for ( std::vector<PrevwPage*>::iterator aPageDelIter = maPrevwPages.begin(); - aPageDelIter != maPrevwPages.end(); - ++aPageDelIter ) - { - delete (*aPageDelIter); - } - maPrevwPages.clear(); + for ( std::vector<PrevwPage*>::iterator aPageDelIter = maPrevwPages.begin(); + aPageDelIter != maPrevwPages.end(); + ++aPageDelIter ) + { + delete (*aPageDelIter); + } + maPrevwPages.clear(); } /** calculate page preview layout sizes - OD 18.12.2002 #103492# + OD 18.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::_CalcPrevwLayoutSizes() { - // calculate maximal page size; calculate also number of pages - - const SwPageFrm* pPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); - while ( pPage ) - { - if ( !mbBookPreview && !mbPrintEmptyPages && pPage->IsEmptyPage() ) - { - pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); - continue; - } - - ++mnPages; - pPage->Calc(); - const Size& rPageSize = pPage->Frm().SSize(); - if ( rPageSize.Width() > maMaxPageSize.Width() ) - maMaxPageSize.Width() = rPageSize.Width(); - if ( rPageSize.Height() > maMaxPageSize.Height() ) - maMaxPageSize.Height() = rPageSize.Height(); - pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); - } - // calculate and set column width and row height - mnColWidth = maMaxPageSize.Width() + mnXFree; - mnRowHeight = maMaxPageSize.Height() + mnYFree; - - // calculate and set preview layout width and height - mnPrevwLayoutWidth = mnCols * mnColWidth + mnXFree; - mnPrevwLayoutHeight = mnRows * mnRowHeight + mnYFree; - - // calculate document rectangle in preview layout - { - Size aDocSize; - // document width - aDocSize.Width() = mnPrevwLayoutWidth; - - // document height - // determine number of rows needed for <nPages> in preview layout - // OD 19.02.2003 #107369# - use method <GetRowOfPage(..)>. - sal_uInt16 nDocRows = GetRowOfPage( mnPages ); - aDocSize.Height() = nDocRows * maMaxPageSize.Height() + - (nDocRows+1) * mnYFree; - maPreviewDocRect.SetPos( Point( 0, 0 ) ); - maPreviewDocRect.SetSize( aDocSize ); - } + // calculate maximal page size; calculate also number of pages + + const SwPageFrm* pPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); + while ( pPage ) + { + if ( !mbBookPreview && !mbPrintEmptyPages && pPage->IsEmptyPage() ) + { + pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); + continue; + } + + ++mnPages; + pPage->Calc(); + const Size& rPageSize = pPage->Frm().SSize(); + if ( rPageSize.Width() > maMaxPageSize.Width() ) + maMaxPageSize.Width() = rPageSize.Width(); + if ( rPageSize.Height() > maMaxPageSize.Height() ) + maMaxPageSize.Height() = rPageSize.Height(); + pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); + } + // calculate and set column width and row height + mnColWidth = maMaxPageSize.Width() + mnXFree; + mnRowHeight = maMaxPageSize.Height() + mnYFree; + + // calculate and set preview layout width and height + mnPrevwLayoutWidth = mnCols * mnColWidth + mnXFree; + mnPrevwLayoutHeight = mnRows * mnRowHeight + mnYFree; + + // calculate document rectangle in preview layout + { + Size aDocSize; + // document width + aDocSize.Width() = mnPrevwLayoutWidth; + + // document height + // determine number of rows needed for <nPages> in preview layout + // OD 19.02.2003 #107369# - use method <GetRowOfPage(..)>. + sal_uInt16 nDocRows = GetRowOfPage( mnPages ); + aDocSize.Height() = nDocRows * maMaxPageSize.Height() + (nDocRows+1) * mnYFree; + maPreviewDocRect.SetPos( Point( 0, 0 ) ); + maPreviewDocRect.SetSize( aDocSize ); + } } /** init page preview layout - OD 11.12.2002 #103492# - initialize the page preview settings for a given layout. - side effects: - (1) If parameter <_bCalcScale> is true, mapping mode with calculated - scaling is set at the output device and the zoom at the view options of - the given view shell is set with the calculated scaling. + OD 11.12.2002 #103492# + initialize the page preview settings for a given layout. + side effects: + (1) If parameter <_bCalcScale> is true, mapping mode with calculated + scaling is set at the output device and the zoom at the view options of + the given view shell is set with the calculated scaling. - @author OD + @author OD */ bool SwPagePreviewLayout::Init( const sal_uInt16 _nCols, - const sal_uInt16 _nRows, - const Size& _rPxWinSize, - const bool _bCalcScale - ) + const sal_uInt16 _nRows, + const Size& _rPxWinSize, + const bool _bCalcScale + ) { - // check environment and parameters - { - bool bColsRowsValid = (_nCols != 0) && (_nRows != 0); - ASSERT( bColsRowsValid, "preview layout parameters not correct - preview layout can *not* be initialized" ); - if ( !bColsRowsValid ) - return false; - - bool bPxWinSizeValid = (_rPxWinSize.Width() >= 0) && - (_rPxWinSize.Height() >= 0); - ASSERT( bPxWinSizeValid, "no window size - preview layout can *not* be initialized" ); - if ( !bPxWinSizeValid ) - return false; - } - - // environment and parameters OK - - // clear existing preview settings - _Clear(); - - // set layout information columns and rows - mnCols = _nCols; - mnRows = _nRows; - - _CalcPrevwLayoutSizes(); - - // validate layout information - mbLayoutInfoValid = true; - - if ( _bCalcScale ) - { - // calculate scaling - MapMode aMapMode( MAP_TWIP ); - Size aWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize, aMapMode ); - Fraction aXScale( aWinSize.Width(), mnPrevwLayoutWidth ); - Fraction aYScale( aWinSize.Height(), mnPrevwLayoutHeight ); - if( aXScale < aYScale ) - aYScale = aXScale; - { - // adjust scaling for Drawing layer. - aYScale *= Fraction( 1000, 1 ); - long nNewNuminator = aYScale.operator long(); - if( nNewNuminator < 1 ) - nNewNuminator = 1; - aYScale = Fraction( nNewNuminator, 1000 ); - // propagate scaling as zoom percentage to view options for font cache - _ApplyNewZoomAtViewShell( static_cast<sal_uInt8>(nNewNuminator/10) ); - } - aMapMode.SetScaleY( aYScale ); - aMapMode.SetScaleX( aYScale ); - // set created mapping mode with calculated scaling at output device. - mrParentViewShell.GetOut()->SetMapMode( aMapMode ); - // OD 20.02.2003 #107369# - update statics for paint. - ::SwCalcPixStatics( mrParentViewShell.GetOut() ); - } - - // set window size in twips - maWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize ); - // validate layout sizes - mbLayoutSizesValid = true; - - return true; + // check environment and parameters + { + bool bColsRowsValid = (_nCols != 0) && (_nRows != 0); + ASSERT( bColsRowsValid, "preview layout parameters not correct - preview layout can *not* be initialized" ); + if ( !bColsRowsValid ) + return false; + + bool bPxWinSizeValid = (_rPxWinSize.Width() >= 0) && + (_rPxWinSize.Height() >= 0); + ASSERT( bPxWinSizeValid, "no window size - preview layout can *not* be initialized" ); + if ( !bPxWinSizeValid ) + return false; + } + + // environment and parameters OK + + // clear existing preview settings + _Clear(); + + // set layout information columns and rows + mnCols = _nCols; + mnRows = _nRows; + + _CalcPrevwLayoutSizes(); + + // validate layout information + mbLayoutInfoValid = true; + + if ( _bCalcScale ) + { + // calculate scaling + MapMode aMapMode( MAP_TWIP ); + Size aWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize, aMapMode ); + Fraction aXScale( aWinSize.Width(), mnPrevwLayoutWidth ); + Fraction aYScale( aWinSize.Height(), mnPrevwLayoutHeight ); + if( aXScale < aYScale ) + aYScale = aXScale; + { + // adjust scaling for Drawing layer. + aYScale *= Fraction( 1000, 1 ); + long nNewNuminator = aYScale.operator long(); + if( nNewNuminator < 1 ) + nNewNuminator = 1; + aYScale = Fraction( nNewNuminator, 1000 ); + // propagate scaling as zoom percentage to view options for font cache + _ApplyNewZoomAtViewShell( static_cast<sal_uInt8>(nNewNuminator/10) ); + } + aMapMode.SetScaleY( aYScale ); + aMapMode.SetScaleX( aYScale ); + // set created mapping mode with calculated scaling at output device. + mrParentViewShell.GetOut()->SetMapMode( aMapMode ); + // OD 20.02.2003 #107369# - update statics for paint. + ::SwCalcPixStatics( mrParentViewShell.GetOut() ); + } + + // set window size in twips + maWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize ); + // validate layout sizes + mbLayoutSizesValid = true; + + return true; } /** apply new zoom at given view shell - OD 11.12.2002 #103492# - implementation of <_ApplyNewZoomAtViewShell> + OD 11.12.2002 #103492# - implementation of <_ApplyNewZoomAtViewShell> - @author OD + @author OD */ void SwPagePreviewLayout::_ApplyNewZoomAtViewShell( sal_uInt8 _aNewZoom ) { - SwViewOption aNewViewOptions = *(mrParentViewShell.GetViewOptions()); - if ( aNewViewOptions.GetZoom() != _aNewZoom ) - { - aNewViewOptions.SetZoom( _aNewZoom ); - // OD 24.09.2003 #i19975# - consider zoom type. - enum SvxZoomType eZoomType = SVX_ZOOM_PERCENT; - aNewViewOptions.SetZoomType( eZoomType ); - mrParentViewShell.ApplyViewOptions( aNewViewOptions ); - } + SwViewOption aNewViewOptions = *(mrParentViewShell.GetViewOptions()); + if ( aNewViewOptions.GetZoom() != _aNewZoom ) + { + aNewViewOptions.SetZoom( _aNewZoom ); + // OD 24.09.2003 #i19975# - consider zoom type. + enum SvxZoomType eZoomType = SVX_ZOOM_PERCENT; + aNewViewOptions.SetZoomType( eZoomType ); + mrParentViewShell.ApplyViewOptions( aNewViewOptions ); + } } /** method to adjust page preview layout to document changes - OD 18.12.2002 #103492# + OD 18.12.2002 #103492# - @author OD + @author OD */ bool SwPagePreviewLayout::ReInit() { - // check environment and parameters - { - bool bLayoutSettingsValid = mbLayoutInfoValid && mbLayoutSizesValid; - ASSERT( bLayoutSettingsValid, - "no valid preview layout info/sizes - no re-init of page preview layout"); - if ( !bLayoutSettingsValid ) - return false; - } - - _ClearPrevwLayoutSizes(); - _CalcPrevwLayoutSizes(); - - return true; + // check environment and parameters + { + bool bLayoutSettingsValid = mbLayoutInfoValid && mbLayoutSizesValid; + ASSERT( bLayoutSettingsValid, + "no valid preview layout info/sizes - no re-init of page preview layout"); + if ( !bLayoutSettingsValid ) + return false; + } + + _ClearPrevwLayoutSizes(); + _CalcPrevwLayoutSizes(); + + return true; } // ============================================================================= @@ -305,451 +304,449 @@ bool SwPagePreviewLayout::ReInit() // ============================================================================= /** prepare paint of page preview - OD 12.12.2002 #103492# - OD 21.03.2003 #108282# - delete parameter _onStartPageVirtNum + OD 12.12.2002 #103492# + OD 21.03.2003 #108282# - delete parameter _onStartPageVirtNum - @author OD, _nProposedStartPageNum, _onStartPageNum are absolute + @author OD, _nProposedStartPageNum, _onStartPageNum are absolute */ bool SwPagePreviewLayout::Prepare( const sal_uInt16 _nProposedStartPageNum, - const Point _aProposedStartPos, - const Size& _rPxWinSize, - sal_uInt16& _onStartPageNum, - Rectangle& _orDocPreviewPaintRect, - const bool _bStartWithPageAtFirstCol - ) + const Point _aProposedStartPos, + const Size& _rPxWinSize, + sal_uInt16& _onStartPageNum, + Rectangle& _orDocPreviewPaintRect, + const bool _bStartWithPageAtFirstCol + ) { - sal_uInt16 nProposedStartPageNum = ConvertAbsoluteToRelativePageNum( _nProposedStartPageNum ); - // check environment and parameters - { - bool bLayoutSettingsValid = mbLayoutInfoValid && mbLayoutSizesValid; - ASSERT( bLayoutSettingsValid, - "no valid preview layout info/sizes - no prepare of preview paint"); - if ( !bLayoutSettingsValid ) - return false; - - bool bStartPageRangeValid = nProposedStartPageNum <= mnPages; - ASSERT( bStartPageRangeValid, - "proposed start page not existing - no prepare of preview paint"); - if ( !bStartPageRangeValid ) - return false; - - bool bStartPosRangeValid = - _aProposedStartPos.X() >= 0 && _aProposedStartPos.Y() >= 0 && - _aProposedStartPos.X() <= maPreviewDocRect.Right() && - _aProposedStartPos.Y() <= maPreviewDocRect.Bottom(); - ASSERT( bStartPosRangeValid, - "proposed start position out of range - no prepare of preview paint"); - if ( !bStartPosRangeValid ) - return false; - - bool bWinSizeValid = _rPxWinSize.Width() != 0 && _rPxWinSize.Height() != 0; - ASSERT ( bWinSizeValid, "no window size - no prepare of preview paint"); - if ( !bWinSizeValid ) - return false; - - bool bStartInfoValid = _nProposedStartPageNum > 0 || - _aProposedStartPos != Point(0,0); - if ( !bStartInfoValid ) - nProposedStartPageNum = 1; - } - - // environment and parameter OK - - // update window size at preview setting data - maWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize ); - - mbNoPageVisible = false; - if ( nProposedStartPageNum > 0 ) - { - // determine column and row of proposed start page in virtual preview layout - sal_uInt16 nColOfProposed = GetColOfPage( nProposedStartPageNum ); - sal_uInt16 nRowOfProposed = GetRowOfPage( nProposedStartPageNum ); - // determine start page - if ( _bStartWithPageAtFirstCol ) - { - // OD 19.02.2003 #107369# - leaving left-top-corner blank is - // controlled by <mbBookPreview>. - if ( mbBookPreview && - ( nProposedStartPageNum == 1 || nRowOfProposed == 1 ) - ) - mnPaintPhyStartPageNum = 1; - else - mnPaintPhyStartPageNum = nProposedStartPageNum - (nColOfProposed-1); - } - else - mnPaintPhyStartPageNum = nProposedStartPageNum; - - mnPaintPhyStartPageNum = ConvertRelativeToAbsolutePageNum( mnPaintPhyStartPageNum ); - - // set starting column - if ( _bStartWithPageAtFirstCol ) - mnPaintStartCol = 1; - else - mnPaintStartCol = nColOfProposed; - // set starting row - mnPaintStartRow = nRowOfProposed; - // page offset == (-1,-1), indicating no offset and paint of free space. - maPaintStartPageOffset.X() = -1; - maPaintStartPageOffset.Y() = -1; - // virtual preview document offset. - if ( _bStartWithPageAtFirstCol ) - maPaintPreviewDocOffset.X() = 0; - else - maPaintPreviewDocOffset.X() = (nColOfProposed-1) * mnColWidth; - maPaintPreviewDocOffset.Y() = (nRowOfProposed-1) * mnRowHeight; - } - else - { - // determine column and row of proposed start position. - // Note: paint starts at point (0,0) - sal_uInt16 nColOfProposed = - static_cast<sal_uInt16>(_aProposedStartPos.X() / mnColWidth) + 1; - sal_uInt16 nRowOfProposed = - static_cast<sal_uInt16>(_aProposedStartPos.Y() / mnRowHeight) + 1; - // determine start page == page at proposed start position - // OD 19.02.2003 #107369# - leaving left-top-corner blank is - // controlled by <mbBookPreview>. - if ( mbBookPreview && - ( nRowOfProposed == 1 && nColOfProposed == 1 ) - ) - mnPaintPhyStartPageNum = 1; - else - { - // OD 19.02.2003 #107369# - leaving left-top-corner blank is - // controlled by <mbBookPreview>. - mnPaintPhyStartPageNum = (nRowOfProposed-1) * mnCols + nColOfProposed; - if ( mbBookPreview ) - --mnPaintPhyStartPageNum; - if ( mnPaintPhyStartPageNum > mnPages ) - { - // no page will be visible, because shown part of document - // preview is the last row to the right of the last page - mnPaintPhyStartPageNum = mnPages; - mbNoPageVisible = true; - } - } - // set starting column and starting row - mnPaintStartCol = nColOfProposed; - mnPaintStartRow = nRowOfProposed; - // page offset - maPaintStartPageOffset.X() = - (_aProposedStartPos.X() % mnColWidth) - mnXFree; - maPaintStartPageOffset.Y() = - (_aProposedStartPos.Y() % mnRowHeight) - mnYFree; - // virtual preview document offset. - maPaintPreviewDocOffset = _aProposedStartPos; - } - - // determine additional paint offset, if preview layout fits into window. - _CalcAdditionalPaintOffset(); - - // determine rectangle to be painted from document preview - _CalcDocPrevwPaintRect(); - _orDocPreviewPaintRect = maPaintedPrevwDocRect; - - // OD 20.01.2003 #103492# - shift visible preview document area to the left, - // if on the right is an area left blank. - if ( !mbDoesLayoutColsFitIntoWindow && - maPaintedPrevwDocRect.GetWidth() < maWinSize.Width() ) - { - maPaintedPrevwDocRect.Move( - -(maWinSize.Width() - maPaintedPrevwDocRect.GetWidth()), 0 ); - Prepare( 0, maPaintedPrevwDocRect.TopLeft(), - _rPxWinSize, _onStartPageNum, - _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); - } - - // OD 20.01.2003 #103492# - shift visible preview document area to the top, - // if at the bottom is an area left blank. - if ( mbBookPreviewModeToggled && - maPaintedPrevwDocRect.Bottom() == maPreviewDocRect.Bottom() && - maPaintedPrevwDocRect.GetHeight() < maWinSize.Height() ) - { - if ( mbDoesLayoutRowsFitIntoWindow ) - { - if ( maPaintedPrevwDocRect.GetHeight() < mnPrevwLayoutHeight) - { - maPaintedPrevwDocRect.Move( - 0, -(mnPrevwLayoutHeight - maPaintedPrevwDocRect.GetHeight()) ); - Prepare( 0, maPaintedPrevwDocRect.TopLeft(), - _rPxWinSize, _onStartPageNum, - _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); - } - } - else - { - maPaintedPrevwDocRect.Move( - 0, -(maWinSize.Height() - maPaintedPrevwDocRect.GetHeight()) ); - Prepare( 0, maPaintedPrevwDocRect.TopLeft(), - _rPxWinSize, _onStartPageNum, - _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); - } - } - - // determine preview pages - visible pages with needed data for paint and - // accessible pages with needed data. - _CalcPreviewPages(); - - // OD 07.11.2003 #i22014# - indicate new layout, if print preview is in paint - if ( mbInPaint ) - { - mbNewLayoutDuringPaint = true; - } - - // validate paint data - mbPaintInfoValid = true; - - // return start page - _onStartPageNum = mnPaintPhyStartPageNum; - - return true; + sal_uInt16 nProposedStartPageNum = ConvertAbsoluteToRelativePageNum( _nProposedStartPageNum ); + // check environment and parameters + { + bool bLayoutSettingsValid = mbLayoutInfoValid && mbLayoutSizesValid; + ASSERT( bLayoutSettingsValid, + "no valid preview layout info/sizes - no prepare of preview paint"); + if ( !bLayoutSettingsValid ) + return false; + + bool bStartPageRangeValid = nProposedStartPageNum <= mnPages; + ASSERT( bStartPageRangeValid, + "proposed start page not existing - no prepare of preview paint"); + if ( !bStartPageRangeValid ) + return false; + + bool bStartPosRangeValid = + _aProposedStartPos.X() >= 0 && _aProposedStartPos.Y() >= 0 && + _aProposedStartPos.X() <= maPreviewDocRect.Right() && + _aProposedStartPos.Y() <= maPreviewDocRect.Bottom(); + ASSERT( bStartPosRangeValid, + "proposed start position out of range - no prepare of preview paint"); + if ( !bStartPosRangeValid ) + return false; + + bool bWinSizeValid = _rPxWinSize.Width() != 0 && _rPxWinSize.Height() != 0; + ASSERT ( bWinSizeValid, "no window size - no prepare of preview paint"); + if ( !bWinSizeValid ) + return false; + + bool bStartInfoValid = _nProposedStartPageNum > 0 || + _aProposedStartPos != Point(0,0); + if ( !bStartInfoValid ) + nProposedStartPageNum = 1; + } + + // environment and parameter OK + + // update window size at preview setting data + maWinSize = mrParentViewShell.GetOut()->PixelToLogic( _rPxWinSize ); + + mbNoPageVisible = false; + if ( nProposedStartPageNum > 0 ) + { + // determine column and row of proposed start page in virtual preview layout + sal_uInt16 nColOfProposed = GetColOfPage( nProposedStartPageNum ); + sal_uInt16 nRowOfProposed = GetRowOfPage( nProposedStartPageNum ); + // determine start page + if ( _bStartWithPageAtFirstCol ) + { + // OD 19.02.2003 #107369# - leaving left-top-corner blank is + // controlled by <mbBookPreview>. + if ( mbBookPreview && + ( nProposedStartPageNum == 1 || nRowOfProposed == 1 ) + ) + mnPaintPhyStartPageNum = 1; + else + mnPaintPhyStartPageNum = nProposedStartPageNum - (nColOfProposed-1); + } + else + mnPaintPhyStartPageNum = nProposedStartPageNum; + + mnPaintPhyStartPageNum = ConvertRelativeToAbsolutePageNum( mnPaintPhyStartPageNum ); + + // set starting column + if ( _bStartWithPageAtFirstCol ) + mnPaintStartCol = 1; + else + mnPaintStartCol = nColOfProposed; + // set starting row + mnPaintStartRow = nRowOfProposed; + // page offset == (-1,-1), indicating no offset and paint of free space. + maPaintStartPageOffset.X() = -1; + maPaintStartPageOffset.Y() = -1; + // virtual preview document offset. + if ( _bStartWithPageAtFirstCol ) + maPaintPreviewDocOffset.X() = 0; + else + maPaintPreviewDocOffset.X() = (nColOfProposed-1) * mnColWidth; + maPaintPreviewDocOffset.Y() = (nRowOfProposed-1) * mnRowHeight; + } + else + { + // determine column and row of proposed start position. + // Note: paint starts at point (0,0) + sal_uInt16 nColOfProposed = + static_cast<sal_uInt16>(_aProposedStartPos.X() / mnColWidth) + 1; + sal_uInt16 nRowOfProposed = + static_cast<sal_uInt16>(_aProposedStartPos.Y() / mnRowHeight) + 1; + // determine start page == page at proposed start position + // OD 19.02.2003 #107369# - leaving left-top-corner blank is + // controlled by <mbBookPreview>. + if ( mbBookPreview && + ( nRowOfProposed == 1 && nColOfProposed == 1 ) + ) + mnPaintPhyStartPageNum = 1; + else + { + // OD 19.02.2003 #107369# - leaving left-top-corner blank is + // controlled by <mbBookPreview>. + mnPaintPhyStartPageNum = (nRowOfProposed-1) * mnCols + nColOfProposed; + if ( mbBookPreview ) + --mnPaintPhyStartPageNum; + if ( mnPaintPhyStartPageNum > mnPages ) + { + // no page will be visible, because shown part of document + // preview is the last row to the right of the last page + mnPaintPhyStartPageNum = mnPages; + mbNoPageVisible = true; + } + } + // set starting column and starting row + mnPaintStartCol = nColOfProposed; + mnPaintStartRow = nRowOfProposed; + // page offset + maPaintStartPageOffset.X() = + (_aProposedStartPos.X() % mnColWidth) - mnXFree; + maPaintStartPageOffset.Y() = + (_aProposedStartPos.Y() % mnRowHeight) - mnYFree; + // virtual preview document offset. + maPaintPreviewDocOffset = _aProposedStartPos; + } + + // determine additional paint offset, if preview layout fits into window. + _CalcAdditionalPaintOffset(); + + // determine rectangle to be painted from document preview + _CalcDocPrevwPaintRect(); + _orDocPreviewPaintRect = maPaintedPrevwDocRect; + + // OD 20.01.2003 #103492# - shift visible preview document area to the left, + // if on the right is an area left blank. + if ( !mbDoesLayoutColsFitIntoWindow && + maPaintedPrevwDocRect.GetWidth() < maWinSize.Width() ) + { + maPaintedPrevwDocRect.Move( + -(maWinSize.Width() - maPaintedPrevwDocRect.GetWidth()), 0 ); + Prepare( 0, maPaintedPrevwDocRect.TopLeft(), + _rPxWinSize, _onStartPageNum, + _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); + } + + // OD 20.01.2003 #103492# - shift visible preview document area to the top, + // if at the bottom is an area left blank. + if ( mbBookPreviewModeToggled && + maPaintedPrevwDocRect.Bottom() == maPreviewDocRect.Bottom() && + maPaintedPrevwDocRect.GetHeight() < maWinSize.Height() ) + { + if ( mbDoesLayoutRowsFitIntoWindow ) + { + if ( maPaintedPrevwDocRect.GetHeight() < mnPrevwLayoutHeight) + { + maPaintedPrevwDocRect.Move( + 0, -(mnPrevwLayoutHeight - maPaintedPrevwDocRect.GetHeight()) ); + Prepare( 0, maPaintedPrevwDocRect.TopLeft(), + _rPxWinSize, _onStartPageNum, + _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); + } + } + else + { + maPaintedPrevwDocRect.Move( + 0, -(maWinSize.Height() - maPaintedPrevwDocRect.GetHeight()) ); + Prepare( 0, maPaintedPrevwDocRect.TopLeft(), + _rPxWinSize, _onStartPageNum, + _orDocPreviewPaintRect, _bStartWithPageAtFirstCol ); + } + } + + // determine preview pages - visible pages with needed data for paint and + // accessible pages with needed data. + _CalcPreviewPages(); + + // OD 07.11.2003 #i22014# - indicate new layout, if print preview is in paint + if ( mbInPaint ) + { + mbNewLayoutDuringPaint = true; + } + + // validate paint data + mbPaintInfoValid = true; + + // return start page + _onStartPageNum = mnPaintPhyStartPageNum; + + return true; } /** calculate additional paint offset - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::_CalcAdditionalPaintOffset() { - if ( mnPrevwLayoutWidth <= maWinSize.Width() && - maPaintStartPageOffset.X() <= 0 ) - { - mbDoesLayoutColsFitIntoWindow = true; - maAdditionalPaintOffset.X() = (maWinSize.Width() - mnPrevwLayoutWidth) / 2; - } - else - { - mbDoesLayoutColsFitIntoWindow = false; - maAdditionalPaintOffset.X() = 0; - } - - if ( mnPrevwLayoutHeight <= maWinSize.Height() && - maPaintStartPageOffset.Y() <= 0 ) - { - mbDoesLayoutRowsFitIntoWindow = true; - maAdditionalPaintOffset.Y() = (maWinSize.Height() - mnPrevwLayoutHeight) / 2; - } - else - { - mbDoesLayoutRowsFitIntoWindow = false; - maAdditionalPaintOffset.Y() = 0; - } + if ( mnPrevwLayoutWidth <= maWinSize.Width() && + maPaintStartPageOffset.X() <= 0 ) + { + mbDoesLayoutColsFitIntoWindow = true; + maAdditionalPaintOffset.X() = (maWinSize.Width() - mnPrevwLayoutWidth) / 2; + } + else + { + mbDoesLayoutColsFitIntoWindow = false; + maAdditionalPaintOffset.X() = 0; + } + + if ( mnPrevwLayoutHeight <= maWinSize.Height() && + maPaintStartPageOffset.Y() <= 0 ) + { + mbDoesLayoutRowsFitIntoWindow = true; + maAdditionalPaintOffset.Y() = (maWinSize.Height() - mnPrevwLayoutHeight) / 2; + } + else + { + mbDoesLayoutRowsFitIntoWindow = false; + maAdditionalPaintOffset.Y() = 0; + } } /** calculate painted preview document rectangle - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::_CalcDocPrevwPaintRect() { - Point aTopLeftPos = maPaintPreviewDocOffset; - maPaintedPrevwDocRect.SetPos( aTopLeftPos ); - - Size aSize; - if ( mbDoesLayoutColsFitIntoWindow ) - //aSize.Width() = mnPrevwLayoutWidth; - aSize.Width() = Min( mnPrevwLayoutWidth, - maPreviewDocRect.GetWidth() - aTopLeftPos.X() ); - else - aSize.Width() = Min( maPreviewDocRect.GetWidth() - aTopLeftPos.X(), - maWinSize.Width() - maAdditionalPaintOffset.X() ); - if ( mbDoesLayoutRowsFitIntoWindow ) - //aSize.Height() = mnPrevwLayoutHeight; - aSize.Height() = Min( mnPrevwLayoutHeight, - maPreviewDocRect.GetHeight() - aTopLeftPos.Y() ); - else - aSize.Height() = Min( maPreviewDocRect.GetHeight() - aTopLeftPos.Y(), - maWinSize.Height() - maAdditionalPaintOffset.Y() ); - maPaintedPrevwDocRect.SetSize( aSize ); + Point aTopLeftPos = maPaintPreviewDocOffset; + maPaintedPrevwDocRect.SetPos( aTopLeftPos ); + + Size aSize; + if ( mbDoesLayoutColsFitIntoWindow ) + //aSize.Width() = mnPrevwLayoutWidth; + aSize.Width() = Min( mnPrevwLayoutWidth, + maPreviewDocRect.GetWidth() - aTopLeftPos.X() ); + else + aSize.Width() = Min( maPreviewDocRect.GetWidth() - aTopLeftPos.X(), + maWinSize.Width() - maAdditionalPaintOffset.X() ); + if ( mbDoesLayoutRowsFitIntoWindow ) + //aSize.Height() = mnPrevwLayoutHeight; + aSize.Height() = Min( mnPrevwLayoutHeight, + maPreviewDocRect.GetHeight() - aTopLeftPos.Y() ); + else + aSize.Height() = Min( maPreviewDocRect.GetHeight() - aTopLeftPos.Y(), + maWinSize.Height() - maAdditionalPaintOffset.Y() ); + maPaintedPrevwDocRect.SetSize( aSize ); } /** calculate preview pages - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::_CalcPreviewPages() { - _ClearPrevwPageData(); - - if ( mbNoPageVisible ) - return; - - // determine start page frame - const SwPageFrm* pStartPage = mrLayoutRootFrm.GetPageByPageNum( mnPaintPhyStartPageNum ); - - // calculate initial paint offset - Point aInitialPaintOffset; - if ( maPaintStartPageOffset != Point( -1, -1 ) ) - aInitialPaintOffset = Point(0,0) - maPaintStartPageOffset; - else - aInitialPaintOffset = Point( mnXFree, mnYFree ); - aInitialPaintOffset += maAdditionalPaintOffset; - - // prepare loop data - const SwPageFrm* pPage = pStartPage; - sal_uInt16 nCurrCol = mnPaintStartCol; - sal_uInt16 nConsideredRows = 0; - Point aCurrPaintOffset = aInitialPaintOffset; - // loop on pages to determine preview background rectangles - while ( pPage && - (!mbDoesLayoutRowsFitIntoWindow || nConsideredRows < mnRows) && - aCurrPaintOffset.Y() < maWinSize.Height() - ) - { - if ( !mbBookPreview && !mbPrintEmptyPages && pPage->IsEmptyPage() ) - { - pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); - continue; - } - - pPage->Calc(); - - // consider only pages, which have to be painted. - if ( nCurrCol < mnPaintStartCol ) - { - // calculate data of invisible page needed for accessibility - PrevwPage* pPrevwPage = new PrevwPage; - Point aCurrAccOffset = aCurrPaintOffset - - Point( (mnPaintStartCol-nCurrCol) * mnColWidth, 0 ); - _CalcPreviewDataForPage( *(pPage), aCurrAccOffset, pPrevwPage ); - pPrevwPage->bVisible = false; - maPrevwPages.push_back( pPrevwPage ); - // continue with next page and next column - pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); - ++nCurrCol; - continue; - } - if ( aCurrPaintOffset.X() < maWinSize.Width() ) - { - // OD 19.02.2003 #107369# - leaving left-top-corner blank is - // controlled by <mbBookPreview>. - if ( mbBookPreview && pPage->GetPhyPageNum() == 1 && mnCols != 1 && nCurrCol == 1 - ) - { - // first page in 2nd column - // --> continue with increased paint offset and next column - aCurrPaintOffset.X() += mnColWidth; - ++nCurrCol; - continue; - } - - // calculate data of visible page - PrevwPage* pPrevwPage = new PrevwPage; - _CalcPreviewDataForPage( *(pPage), aCurrPaintOffset, pPrevwPage ); - pPrevwPage->bVisible = true; - maPrevwPages.push_back( pPrevwPage ); - } - else - { - // calculate data of invisible page needed for accessibility - PrevwPage* pPrevwPage = new PrevwPage; - _CalcPreviewDataForPage( *(pPage), aCurrPaintOffset, pPrevwPage ); - pPrevwPage->bVisible = false; - maPrevwPages.push_back( pPrevwPage ); - } - - // prepare data for next loop - pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); - - aCurrPaintOffset.X() += mnColWidth; - ++nCurrCol; - if ( nCurrCol > mnCols ) - { - ++nConsideredRows; - aCurrPaintOffset.X() = aInitialPaintOffset.X(); - nCurrCol = 1; - aCurrPaintOffset.Y() += mnRowHeight; - } - } + _ClearPrevwPageData(); + + if ( mbNoPageVisible ) + return; + + // determine start page frame + const SwPageFrm* pStartPage = mrLayoutRootFrm.GetPageByPageNum( mnPaintPhyStartPageNum ); + + // calculate initial paint offset + Point aInitialPaintOffset; + if ( maPaintStartPageOffset != Point( -1, -1 ) ) + aInitialPaintOffset = Point(0,0) - maPaintStartPageOffset; + else + aInitialPaintOffset = Point( mnXFree, mnYFree ); + aInitialPaintOffset += maAdditionalPaintOffset; + + // prepare loop data + const SwPageFrm* pPage = pStartPage; + sal_uInt16 nCurrCol = mnPaintStartCol; + sal_uInt16 nConsideredRows = 0; + Point aCurrPaintOffset = aInitialPaintOffset; + // loop on pages to determine preview background rectangles + while ( pPage && + (!mbDoesLayoutRowsFitIntoWindow || nConsideredRows < mnRows) && + aCurrPaintOffset.Y() < maWinSize.Height() + ) + { + if ( !mbBookPreview && !mbPrintEmptyPages && pPage->IsEmptyPage() ) + { + pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); + continue; + } + + pPage->Calc(); + + // consider only pages, which have to be painted. + if ( nCurrCol < mnPaintStartCol ) + { + // calculate data of invisible page needed for accessibility + PrevwPage* pPrevwPage = new PrevwPage; + Point aCurrAccOffset = aCurrPaintOffset - + Point( (mnPaintStartCol-nCurrCol) * mnColWidth, 0 ); + _CalcPreviewDataForPage( *(pPage), aCurrAccOffset, pPrevwPage ); + pPrevwPage->bVisible = false; + maPrevwPages.push_back( pPrevwPage ); + // continue with next page and next column + pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); + ++nCurrCol; + continue; + } + if ( aCurrPaintOffset.X() < maWinSize.Width() ) + { + // OD 19.02.2003 #107369# - leaving left-top-corner blank is + // controlled by <mbBookPreview>. + if ( mbBookPreview && pPage->GetPhyPageNum() == 1 && mnCols != 1 && nCurrCol == 1 ) + { + // first page in 2nd column + // --> continue with increased paint offset and next column + aCurrPaintOffset.X() += mnColWidth; + ++nCurrCol; + continue; + } + + // calculate data of visible page + PrevwPage* pPrevwPage = new PrevwPage; + _CalcPreviewDataForPage( *(pPage), aCurrPaintOffset, pPrevwPage ); + pPrevwPage->bVisible = true; + maPrevwPages.push_back( pPrevwPage ); + } + else + { + // calculate data of invisible page needed for accessibility + PrevwPage* pPrevwPage = new PrevwPage; + _CalcPreviewDataForPage( *(pPage), aCurrPaintOffset, pPrevwPage ); + pPrevwPage->bVisible = false; + maPrevwPages.push_back( pPrevwPage ); + } + + // prepare data for next loop + pPage = static_cast<const SwPageFrm*>(pPage->GetNext()); + + aCurrPaintOffset.X() += mnColWidth; + ++nCurrCol; + if ( nCurrCol > mnCols ) + { + ++nConsideredRows; + aCurrPaintOffset.X() = aInitialPaintOffset.X(); + nCurrCol = 1; + aCurrPaintOffset.Y() += mnRowHeight; + } + } } /** determines preview data for a given page and a given preview offset - OD 13.12.2002 #103492# + OD 13.12.2002 #103492# - @author OD + @author OD */ bool SwPagePreviewLayout::_CalcPreviewDataForPage( const SwPageFrm& _rPage, - const Point& _rPrevwOffset, - PrevwPage* _opPrevwPage ) + const Point& _rPrevwOffset, + PrevwPage* _opPrevwPage ) { - // page frame - _opPrevwPage->pPage = &_rPage; - // size of page frame - if ( _rPage.IsEmptyPage() ) - { - if ( _rPage.GetPhyPageNum() % 2 == 0 ) - _opPrevwPage->aPageSize = _rPage.GetPrev()->Frm().SSize(); - else - _opPrevwPage->aPageSize = _rPage.GetNext()->Frm().SSize(); - } - else - _opPrevwPage->aPageSize = _rPage.Frm().SSize(); - // position of page in preview window - Point aPrevwWinOffset( _rPrevwOffset ); - if ( _opPrevwPage->aPageSize.Width() < maMaxPageSize.Width() ) - aPrevwWinOffset.X() += ( maMaxPageSize.Width() - _opPrevwPage->aPageSize.Width() ) / 2; - if ( _opPrevwPage->aPageSize.Height() < maMaxPageSize.Height() ) - aPrevwWinOffset.Y() += ( maMaxPageSize.Height() - _opPrevwPage->aPageSize.Height() ) / 2; - _opPrevwPage->aPrevwWinPos = aPrevwWinOffset; - // logic position of page and mapping offset for paint - if ( _rPage.IsEmptyPage() ) - { - _opPrevwPage->aLogicPos = _opPrevwPage->aPrevwWinPos; - _opPrevwPage->aMapOffset = Point( 0, 0 ); - } - else - { - _opPrevwPage->aLogicPos = _rPage.Frm().Pos(); - _opPrevwPage->aMapOffset = _opPrevwPage->aPrevwWinPos - _opPrevwPage->aLogicPos; - } - - return true; + // page frame + _opPrevwPage->pPage = &_rPage; + // size of page frame + if ( _rPage.IsEmptyPage() ) + { + if ( _rPage.GetPhyPageNum() % 2 == 0 ) + _opPrevwPage->aPageSize = _rPage.GetPrev()->Frm().SSize(); + else + _opPrevwPage->aPageSize = _rPage.GetNext()->Frm().SSize(); + } + else + _opPrevwPage->aPageSize = _rPage.Frm().SSize(); + // position of page in preview window + Point aPrevwWinOffset( _rPrevwOffset ); + if ( _opPrevwPage->aPageSize.Width() < maMaxPageSize.Width() ) + aPrevwWinOffset.X() += ( maMaxPageSize.Width() - _opPrevwPage->aPageSize.Width() ) / 2; + if ( _opPrevwPage->aPageSize.Height() < maMaxPageSize.Height() ) + aPrevwWinOffset.Y() += ( maMaxPageSize.Height() - _opPrevwPage->aPageSize.Height() ) / 2; + _opPrevwPage->aPrevwWinPos = aPrevwWinOffset; + // logic position of page and mapping offset for paint + if ( _rPage.IsEmptyPage() ) + { + _opPrevwPage->aLogicPos = _opPrevwPage->aPrevwWinPos; + _opPrevwPage->aMapOffset = Point( 0, 0 ); + } + else + { + _opPrevwPage->aLogicPos = _rPage.Frm().Pos(); + _opPrevwPage->aMapOffset = _opPrevwPage->aPrevwWinPos - _opPrevwPage->aLogicPos; + } + + return true; } /** enable/disable book preview - OD 2004-03-04 #i18143# + OD 2004-03-04 #i18143# - @author OD + @author OD */ bool SwPagePreviewLayout::SetBookPreviewMode( const bool _bEnableBookPreview, - sal_uInt16& _onStartPageNum, - Rectangle& _orDocPreviewPaintRect ) + sal_uInt16& _onStartPageNum, + Rectangle& _orDocPreviewPaintRect ) { - bool bRet = false; - - if ( mbBookPreview != _bEnableBookPreview) - { - mbBookPreview = _bEnableBookPreview; - // re-initialize page preview layout - ReInit(); - // re-prepare page preview layout - { - mbBookPreviewModeToggled = true; - Point aProposedStartPos( maPaintPreviewDocOffset ); - // if proposed start position is below virtual preview document - // bottom, adjust it to the virtual preview document bottom - if ( aProposedStartPos.Y() > maPreviewDocRect.Bottom() ) - { - aProposedStartPos.Y() = maPreviewDocRect.Bottom(); - } - Prepare( 0, aProposedStartPos, - mrParentViewShell.GetOut()->LogicToPixel( maWinSize ), - _onStartPageNum, _orDocPreviewPaintRect ); - mbBookPreviewModeToggled = false; - } - - bRet = true; - } - - return bRet; + if ( mbBookPreview != _bEnableBookPreview) + { + mbBookPreview = _bEnableBookPreview; + // re-initialize page preview layout + ReInit(); + // re-prepare page preview layout + { + + mbBookPreviewModeToggled = true; + Point aProposedStartPos( maPaintPreviewDocOffset ); + // if proposed start position is below virtual preview document + // bottom, adjust it to the virtual preview document bottom + if ( aProposedStartPos.Y() > maPreviewDocRect.Bottom() ) + { + aProposedStartPos.Y() = maPreviewDocRect.Bottom(); + } + Prepare( 0, aProposedStartPos, + mrParentViewShell.GetOut()->LogicToPixel( maWinSize ), + _onStartPageNum, _orDocPreviewPaintRect ); + mbBookPreviewModeToggled = false; + } + + return true; + } + + return false; } // ============================================================================= @@ -758,282 +755,282 @@ bool SwPagePreviewLayout::SetBookPreviewMode( const bool _bEnableBookPreview, // ============================================================================= /** calculate start position for new scale - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD + @author OD */ Point SwPagePreviewLayout::GetPreviewStartPosForNewScale( - const Fraction& _aNewScale, - const Fraction& _aOldScale, - const Size& _aNewWinSize ) const + const Fraction& _aNewScale, + const Fraction& _aOldScale, + const Size& _aNewWinSize ) const { - Point aNewPaintStartPos = maPaintedPrevwDocRect.TopLeft(); - if ( _aNewScale < _aOldScale ) - { - // increase paint width by moving start point to left. - if ( mnPrevwLayoutWidth < _aNewWinSize.Width() ) - aNewPaintStartPos.X() = 0; - else if ( maPaintedPrevwDocRect.GetWidth() < _aNewWinSize.Width() ) - { - aNewPaintStartPos.X() -= - (_aNewWinSize.Width() - maPaintedPrevwDocRect.GetWidth()) / 2; - if ( aNewPaintStartPos.X() < 0) - aNewPaintStartPos.X() = 0; - } - - if ( !mbDoesLayoutRowsFitIntoWindow ) - { - // increase paint height by moving start point to top. - if ( mnPrevwLayoutHeight < _aNewWinSize.Height() ) - { - aNewPaintStartPos.Y() = - ( (mnPaintStartRow - 1) * mnRowHeight ); - } - else if ( maPaintedPrevwDocRect.GetHeight() < _aNewWinSize.Height() ) - { - aNewPaintStartPos.Y() -= - (_aNewWinSize.Height() - maPaintedPrevwDocRect.GetHeight()) / 2; - if ( aNewPaintStartPos.Y() < 0) - aNewPaintStartPos.Y() = 0; - } - } - } - else - { - // decrease paint width by moving start point to right - if ( maPaintedPrevwDocRect.GetWidth() > _aNewWinSize.Width() ) - aNewPaintStartPos.X() += - (maPaintedPrevwDocRect.GetWidth() - _aNewWinSize.Width()) / 2; - // decrease paint height by moving start point to bottom - if ( maPaintedPrevwDocRect.GetHeight() > _aNewWinSize.Height() ) - { - aNewPaintStartPos.Y() += - (maPaintedPrevwDocRect.GetHeight() - _aNewWinSize.Height()) / 2; - // check, if new y-position is outside document preview - if ( aNewPaintStartPos.Y() > maPreviewDocRect.Bottom() ) - aNewPaintStartPos.Y() = - Max( 0L, maPreviewDocRect.Bottom() - mnPrevwLayoutHeight ); - } - } - - return aNewPaintStartPos; + Point aNewPaintStartPos = maPaintedPrevwDocRect.TopLeft(); + if ( _aNewScale < _aOldScale ) + { + // increase paint width by moving start point to left. + if ( mnPrevwLayoutWidth < _aNewWinSize.Width() ) + aNewPaintStartPos.X() = 0; + else if ( maPaintedPrevwDocRect.GetWidth() < _aNewWinSize.Width() ) + { + aNewPaintStartPos.X() -= + (_aNewWinSize.Width() - maPaintedPrevwDocRect.GetWidth()) / 2; + if ( aNewPaintStartPos.X() < 0) + aNewPaintStartPos.X() = 0; + } + + if ( !mbDoesLayoutRowsFitIntoWindow ) + { + // increase paint height by moving start point to top. + if ( mnPrevwLayoutHeight < _aNewWinSize.Height() ) + { + aNewPaintStartPos.Y() = + ( (mnPaintStartRow - 1) * mnRowHeight ); + } + else if ( maPaintedPrevwDocRect.GetHeight() < _aNewWinSize.Height() ) + { + aNewPaintStartPos.Y() -= + (_aNewWinSize.Height() - maPaintedPrevwDocRect.GetHeight()) / 2; + if ( aNewPaintStartPos.Y() < 0) + aNewPaintStartPos.Y() = 0; + } + } + } + else + { + // decrease paint width by moving start point to right + if ( maPaintedPrevwDocRect.GetWidth() > _aNewWinSize.Width() ) + aNewPaintStartPos.X() += + (maPaintedPrevwDocRect.GetWidth() - _aNewWinSize.Width()) / 2; + // decrease paint height by moving start point to bottom + if ( maPaintedPrevwDocRect.GetHeight() > _aNewWinSize.Height() ) + { + aNewPaintStartPos.Y() += + (maPaintedPrevwDocRect.GetHeight() - _aNewWinSize.Height()) / 2; + // check, if new y-position is outside document preview + if ( aNewPaintStartPos.Y() > maPreviewDocRect.Bottom() ) + aNewPaintStartPos.Y() = + Max( 0L, maPreviewDocRect.Bottom() - mnPrevwLayoutHeight ); + } + } + + return aNewPaintStartPos; } /** determines, if page with given page number is visible in preview - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD, _nPageNum is absolute! + @author OD, _nPageNum is absolute! */ bool SwPagePreviewLayout::IsPageVisible( const sal_uInt16 _nPageNum ) const { - const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); - return pPrevwPage && pPrevwPage->bVisible; + const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); + return pPrevwPage && pPrevwPage->bVisible; } /** calculate data to bring new selected page into view. - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD, IN/OUT parameters are absolute page numbers!!! + @author OD, IN/OUT parameters are absolute page numbers! */ bool SwPagePreviewLayout::CalcStartValuesForSelectedPageMove( - const sal_Int16 _nHoriMove, - const sal_Int16 _nVertMove, - sal_uInt16& _orNewSelectedPage, - sal_uInt16& _orNewStartPage, - Point& _orNewStartPos ) const + const sal_Int16 _nHoriMove, + const sal_Int16 _nVertMove, + sal_uInt16& _orNewSelectedPage, + sal_uInt16& _orNewStartPage, + Point& _orNewStartPos ) const { - // determine position of current selected page - sal_uInt16 nTmpRelSelPageNum = ConvertAbsoluteToRelativePageNum( mnSelectedPageNum ); - sal_uInt16 nNewRelSelectedPageNum = nTmpRelSelPageNum; - - // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled - // by <mbBookPreview>. - if ( mbBookPreview ) - { - // Note: consider that left-top-corner is left blank --> +1 - ++nTmpRelSelPageNum; - } - sal_uInt16 nTmpCol = nTmpRelSelPageNum % mnCols; - sal_uInt16 nCurrRow = nTmpRelSelPageNum / mnCols; - if ( nTmpCol > 0 ) - ++nCurrRow; - - // determine new selected page number - { - if ( _nHoriMove != 0 ) - { - if ( (nNewRelSelectedPageNum + _nHoriMove) < 1 ) - nNewRelSelectedPageNum = 1; - else if ( (nNewRelSelectedPageNum + _nHoriMove) > mnPages ) - nNewRelSelectedPageNum = mnPages; - else - nNewRelSelectedPageNum = nNewRelSelectedPageNum + _nHoriMove; - } - if ( _nVertMove != 0 ) - { - if ( (nNewRelSelectedPageNum + (_nVertMove * mnCols)) < 1 ) - nNewRelSelectedPageNum = 1; - else if ( (nNewRelSelectedPageNum + (_nVertMove * mnCols)) > mnPages ) - nNewRelSelectedPageNum = mnPages; - else - nNewRelSelectedPageNum += ( _nVertMove * mnCols ); - } - } - - sal_uInt16 nNewStartPage = mnPaintPhyStartPageNum; - Point aNewStartPos = Point(0,0); - - sal_uInt16 nNewAbsSelectedPageNum = ConvertRelativeToAbsolutePageNum( nNewRelSelectedPageNum ); - if ( !IsPageVisible( nNewAbsSelectedPageNum ) ) - { - if ( _nHoriMove != 0 && _nVertMove != 0 ) - { - ASSERT( false, "missing implementation for moving preview selected page horizontal AND vertical"); - return false; - } - - // new selected page has to be brought into view considering current - // visible preview. - sal_Int16 nTotalRows = GetRowOfPage( mnPages ); - if ( (_nHoriMove > 0 || _nVertMove > 0) && - mbDoesLayoutRowsFitIntoWindow && - mbDoesLayoutColsFitIntoWindow && // OD 20.02.2003 #107369# - add condition - nCurrRow > nTotalRows - mnRows ) - { - // new proposed start page = left-top-corner of last possible - // preview page. - nNewStartPage = (nTotalRows - mnRows) * mnCols + 1; - // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled - // by <mbBookPreview>. - if ( mbBookPreview ) - { - // Note: decrease new proposed start page number by one, - // because of blank left-top-corner - --nNewStartPage; - } - nNewStartPage = ConvertRelativeToAbsolutePageNum( nNewStartPage ); - } - else - { - // new proposed start page = new selected page. - nNewStartPage = ConvertRelativeToAbsolutePageNum( nNewRelSelectedPageNum ); - } - } - - _orNewSelectedPage = nNewAbsSelectedPageNum; - _orNewStartPage = nNewStartPage; - _orNewStartPos = aNewStartPos; - - return true; + // determine position of current selected page + sal_uInt16 nTmpRelSelPageNum = ConvertAbsoluteToRelativePageNum( mnSelectedPageNum ); + sal_uInt16 nNewRelSelectedPageNum = nTmpRelSelPageNum; + + // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled + // by <mbBookPreview>. + if ( mbBookPreview ) + { + // Note: consider that left-top-corner is left blank --> +1 + ++nTmpRelSelPageNum; + } + sal_uInt16 nTmpCol = nTmpRelSelPageNum % mnCols; + sal_uInt16 nCurrRow = nTmpRelSelPageNum / mnCols; + if ( nTmpCol > 0 ) + ++nCurrRow; + + // determine new selected page number + { + if ( _nHoriMove != 0 ) + { + if ( (nNewRelSelectedPageNum + _nHoriMove) < 1 ) + nNewRelSelectedPageNum = 1; + else if ( (nNewRelSelectedPageNum + _nHoriMove) > mnPages ) + nNewRelSelectedPageNum = mnPages; + else + nNewRelSelectedPageNum = nNewRelSelectedPageNum + _nHoriMove; + } + if ( _nVertMove != 0 ) + { + if ( (nNewRelSelectedPageNum + (_nVertMove * mnCols)) < 1 ) + nNewRelSelectedPageNum = 1; + else if ( (nNewRelSelectedPageNum + (_nVertMove * mnCols)) > mnPages ) + nNewRelSelectedPageNum = mnPages; + else + nNewRelSelectedPageNum += ( _nVertMove * mnCols ); + } + } + + sal_uInt16 nNewStartPage = mnPaintPhyStartPageNum; + Point aNewStartPos = Point(0,0); + + sal_uInt16 nNewAbsSelectedPageNum = ConvertRelativeToAbsolutePageNum( nNewRelSelectedPageNum ); + if ( !IsPageVisible( nNewAbsSelectedPageNum ) ) + { + if ( _nHoriMove != 0 && _nVertMove != 0 ) + { + ASSERT( false, "missing implementation for moving preview selected page horizontal AND vertical"); + return false; + } + + // new selected page has to be brought into view considering current + // visible preview. + sal_Int16 nTotalRows = GetRowOfPage( mnPages ); + if ( (_nHoriMove > 0 || _nVertMove > 0) && + mbDoesLayoutRowsFitIntoWindow && + mbDoesLayoutColsFitIntoWindow && // OD 20.02.2003 #107369# - add condition + nCurrRow > nTotalRows - mnRows ) + { + // new proposed start page = left-top-corner of last possible + // preview page. + nNewStartPage = (nTotalRows - mnRows) * mnCols + 1; + // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled + // by <mbBookPreview>. + if ( mbBookPreview ) + { + // Note: decrease new proposed start page number by one, + // because of blank left-top-corner + --nNewStartPage; + } + nNewStartPage = ConvertRelativeToAbsolutePageNum( nNewStartPage ); + } + else + { + // new proposed start page = new selected page. + nNewStartPage = ConvertRelativeToAbsolutePageNum( nNewRelSelectedPageNum ); + } + } + + _orNewSelectedPage = nNewAbsSelectedPageNum; + _orNewStartPage = nNewStartPage; + _orNewStartPos = aNewStartPos; + + return true; } /** checks, if given position is inside a shown document page - OD 17.12.2002 #103492# + OD 17.12.2002 #103492# - @author OD + @author OD */ struct PrevwPosInsidePagePred { - const Point mnPrevwPos; - PrevwPosInsidePagePred( const Point _nPrevwPos ) : mnPrevwPos( _nPrevwPos ) {}; - bool operator() ( const PrevwPage* _pPrevwPage ) - { - if ( _pPrevwPage->bVisible ) - { - Rectangle aPrevwPageRect( _pPrevwPage->aPrevwWinPos, _pPrevwPage->aPageSize ); - return aPrevwPageRect.IsInside( mnPrevwPos ) ? true : false; - } - else - return false; - } + const Point mnPrevwPos; + PrevwPosInsidePagePred( const Point _nPrevwPos ) : mnPrevwPos( _nPrevwPos ) {}; + bool operator() ( const PrevwPage* _pPrevwPage ) + { + if ( _pPrevwPage->bVisible ) + { + Rectangle aPrevwPageRect( _pPrevwPage->aPrevwWinPos, _pPrevwPage->aPageSize ); + return aPrevwPageRect.IsInside( mnPrevwPos ) ? true : false; + } + else + return false; + } }; bool SwPagePreviewLayout::IsPrevwPosInDocPrevwPage( const Point _aPrevwPos, - Point& _orDocPos, - bool& _obPosInEmptyPage, - sal_uInt16& _onPageNum ) const + Point& _orDocPos, + bool& _obPosInEmptyPage, + sal_uInt16& _onPageNum ) const { - bool bIsPosInsideDoc; - - // initialize variable parameter values. - _orDocPos.X() = 0; - _orDocPos.Y() = 0; - _obPosInEmptyPage = false; - _onPageNum = 0; - - std::vector<PrevwPage*>::const_iterator aFoundPrevwPageIter = - std::find_if( maPrevwPages.begin(), maPrevwPages.end(), - PrevwPosInsidePagePred( _aPrevwPos ) ); - - if ( aFoundPrevwPageIter == maPrevwPages.end() ) - // given preview position outside a document page. - bIsPosInsideDoc = false; - else - { - _onPageNum = (*aFoundPrevwPageIter)->pPage->GetPhyPageNum(); - if ( (*aFoundPrevwPageIter)->pPage->IsEmptyPage() ) - { - // given preview position inside an empty page - bIsPosInsideDoc = false; - _obPosInEmptyPage = true; - } - else - { - // given preview position inside a normal page - bIsPosInsideDoc = true; - _orDocPos = _aPrevwPos - - (*aFoundPrevwPageIter)->aPrevwWinPos + - (*aFoundPrevwPageIter)->aLogicPos; - } - } - - return bIsPosInsideDoc; + bool bIsPosInsideDoc; + + // initialize variable parameter values. + _orDocPos.X() = 0; + _orDocPos.Y() = 0; + _obPosInEmptyPage = false; + _onPageNum = 0; + + std::vector<PrevwPage*>::const_iterator aFoundPrevwPageIter = + std::find_if( maPrevwPages.begin(), maPrevwPages.end(), + PrevwPosInsidePagePred( _aPrevwPos ) ); + + if ( aFoundPrevwPageIter == maPrevwPages.end() ) + // given preview position outside a document page. + bIsPosInsideDoc = false; + else + { + _onPageNum = (*aFoundPrevwPageIter)->pPage->GetPhyPageNum(); + if ( (*aFoundPrevwPageIter)->pPage->IsEmptyPage() ) + { + // given preview position inside an empty page + bIsPosInsideDoc = false; + _obPosInEmptyPage = true; + } + else + { + // given preview position inside a normal page + bIsPosInsideDoc = true; + _orDocPos = _aPrevwPos - + (*aFoundPrevwPageIter)->aPrevwWinPos + + (*aFoundPrevwPageIter)->aLogicPos; + } + } + + return bIsPosInsideDoc; } /** determine window page scroll amount - OD 17.12.2002 #103492# + OD 17.12.2002 #103492# - @author OD + @author OD */ SwTwips SwPagePreviewLayout::GetWinPagesScrollAmount( - const sal_Int16 _nWinPagesToScroll ) const + const sal_Int16 _nWinPagesToScroll ) const { - SwTwips nScrollAmount; - if ( mbDoesLayoutRowsFitIntoWindow ) - { - nScrollAmount = (mnPrevwLayoutHeight - mnYFree) * _nWinPagesToScroll; - } - else - nScrollAmount = _nWinPagesToScroll * maPaintedPrevwDocRect.GetHeight(); - - // OD 19.02.2003 #107369# - check, if preview layout size values are valid. - // If not, the checks for an adjustment of the scroll amount aren't useful. - if ( mbLayoutSizesValid ) - { - if ( (maPaintedPrevwDocRect.Top() + nScrollAmount) <= 0 ) - nScrollAmount = -maPaintedPrevwDocRect.Top(); - - // OD 14.02.2003 #107369# - correct scroll amount - if ( nScrollAmount > 0 && - maPaintedPrevwDocRect.Bottom() == maPreviewDocRect.Bottom() - ) - { - nScrollAmount = 0; - } - else - { - while ( (maPaintedPrevwDocRect.Top() + nScrollAmount + mnYFree) >= maPreviewDocRect.GetHeight() ) - { - nScrollAmount -= mnRowHeight; - } - } - } - - return nScrollAmount; + SwTwips nScrollAmount; + if ( mbDoesLayoutRowsFitIntoWindow ) + { + nScrollAmount = (mnPrevwLayoutHeight - mnYFree) * _nWinPagesToScroll; + } + else + nScrollAmount = _nWinPagesToScroll * maPaintedPrevwDocRect.GetHeight(); + + // OD 19.02.2003 #107369# - check, if preview layout size values are valid. + // If not, the checks for an adjustment of the scroll amount aren't useful. + if ( mbLayoutSizesValid ) + { + if ( (maPaintedPrevwDocRect.Top() + nScrollAmount) <= 0 ) + nScrollAmount = -maPaintedPrevwDocRect.Top(); + + // OD 14.02.2003 #107369# - correct scroll amount + if ( nScrollAmount > 0 && + maPaintedPrevwDocRect.Bottom() == maPreviewDocRect.Bottom() + ) + { + nScrollAmount = 0; + } + else + { + while ( (maPaintedPrevwDocRect.Top() + nScrollAmount + mnYFree) >= maPreviewDocRect.GetHeight() ) + { + nScrollAmount -= mnRowHeight; + } + } + } + + return nScrollAmount; } // ============================================================================= @@ -1041,236 +1038,236 @@ SwTwips SwPagePreviewLayout::GetWinPagesScrollAmount( // ============================================================================= /** paint prepared preview - OD 12.12.2002 #103492# + OD 12.12.2002 #103492# - @author OD + @author OD */ bool SwPagePreviewLayout::Paint( const Rectangle _aOutRect ) const { - // check environment and parameters - { - if ( !mrParentViewShell.GetWin() && - !mrParentViewShell.GetOut()->GetConnectMetaFile() ) - return false; - - ASSERT( mbPaintInfoValid, - "invalid preview settings - no paint of preview" ); - if ( !mbPaintInfoValid ) - return false; - } - - // OD 17.11.2003 #i22014# - no paint, if <superfluous> flag is set at layout - if ( mrLayoutRootFrm.IsSuperfluous() ) - { - return true; - } - - // environment and parameter ok - - // OD 07.11.2003 #i22014# - if ( mbInPaint ) - { - return false; - } - mbInPaint = true; - - OutputDevice* pOutputDev = mrParentViewShell.GetOut(); - - // prepare paint - if ( maPrevwPages.size() > 0 ) - { - mrParentViewShell.Imp()->bFirstPageInvalid = sal_False; - mrParentViewShell.Imp()->pFirstVisPage = - const_cast<SwPageFrm*>(maPrevwPages[0]->pPage); - } - - // paint preview background - { - SwRegionRects aPreviewBackgrdRegion( _aOutRect ); - // calculate preview background rectangles - for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); - aPageIter != maPrevwPages.end(); - ++aPageIter ) - { - if ( (*aPageIter)->bVisible ) - { - aPreviewBackgrdRegion -= - SwRect( (*aPageIter)->aPrevwWinPos, (*aPageIter)->aPageSize ); - } - } - // paint preview background rectangles - mrParentViewShell._PaintDesktop( aPreviewBackgrdRegion ); - } - - // prepare data for paint of pages - const Rectangle aPxOutRect( pOutputDev->LogicToPixel( _aOutRect ) ); - - MapMode aMapMode( pOutputDev->GetMapMode() ); - MapMode aSavedMapMode = aMapMode; - - const Font& rEmptyPgFont = SwPageFrm::GetEmptyPageFont(); - - for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); - aPageIter != maPrevwPages.end(); - ++aPageIter ) - { - if ( !(*aPageIter)->bVisible ) - continue; - - Rectangle aPageRect( (*aPageIter)->aLogicPos, (*aPageIter)->aPageSize ); - aMapMode.SetOrigin( (*aPageIter)->aMapOffset ); - pOutputDev->SetMapMode( aMapMode ); - Rectangle aPxPaintRect = pOutputDev->LogicToPixel( aPageRect ); - if ( aPxOutRect.IsOver( aPxPaintRect) ) - { - if ( (*aPageIter)->pPage->IsEmptyPage() ) - { - const Color aRetouche( mrParentViewShell.Imp()->GetRetoucheColor() ); - if( pOutputDev->GetFillColor() != aRetouche ) - pOutputDev->SetFillColor( aRetouche ); - pOutputDev->SetLineColor(); // OD 20.02.2003 #107369# - no line color - // OD 20.02.2003 #107369# - use aligned page rectangle - { - SwRect aTmpPageRect( aPageRect ); - ::SwAlignRect( aTmpPageRect, &mrParentViewShell); - aPageRect = aTmpPageRect.SVRect(); - } - pOutputDev->DrawRect( aPageRect ); - - // paint empty page text - Font aOldFont( pOutputDev->GetFont() ); - pOutputDev->SetFont( rEmptyPgFont ); - pOutputDev->DrawText( aPageRect, SW_RESSTR( STR_EMPTYPAGE ), - TEXT_DRAW_VCENTER | - TEXT_DRAW_CENTER | - TEXT_DRAW_CLIP ); - pOutputDev->SetFont( aOldFont ); - // paint border for empty page (shadow removed now) - // OD 19.02.2003 #107369# - use new method to paint page border - SwPageFrm::PaintPageBorder( aPageRect, &mrParentViewShell, true ); - } - else - { - mrParentViewShell.aVisArea = aPageRect; - aPxPaintRect.Intersection( aPxOutRect ); - Rectangle aPaintRect = pOutputDev->PixelToLogic( aPxPaintRect ); - mrParentViewShell.Paint( aPaintRect ); - // --> OD 2007-08-15 #i80691# - // paint page border (shadow removed now) - { - SwRect aPageBorderRect; - SwPageFrm::GetBorderAndShadowBoundRect( SwRect( aPageRect ), &mrParentViewShell, aPageBorderRect, true ); - const Region aDLRegion(aPageBorderRect.SVRect()); - mrParentViewShell.DLPrePaint2(aDLRegion); - SwPageFrm::PaintPageBorder( aPageRect, &mrParentViewShell, true ); - mrParentViewShell.DLPostPaint2(true); - } - // <-- - } - // OD 07.11.2003 #i22014# - stop painting, because new print - // preview layout is created during paint. - if ( mbNewLayoutDuringPaint ) - { - break; - } - - if ( (*aPageIter)->pPage->GetPhyPageNum() == mnSelectedPageNum ) - { - _PaintSelectMarkAtPage( (*aPageIter) ); - } - - } - } - - // OD 17.11.2003 #i22014# - no update of accessible preview, if a new - // print preview layout is created during paint. - if ( !mbNewLayoutDuringPaint ) - { - // update at accessibility interface - mrParentViewShell.Imp()->UpdateAccessiblePreview( - maPrevwPages, - aMapMode.GetScaleX(), - mrLayoutRootFrm.GetPageByPageNum( mnSelectedPageNum ), - maWinSize ); - } - - pOutputDev->SetMapMode( aSavedMapMode ); - mrParentViewShell.aVisArea.Clear(); - - // OD 07.11.2003 #i22014# - mbInPaint = false; - mbNewLayoutDuringPaint = false; - - return true; + // check environment and parameters + { + if ( !mrParentViewShell.GetWin() && + !mrParentViewShell.GetOut()->GetConnectMetaFile() ) + return false; + + ASSERT( mbPaintInfoValid, + "invalid preview settings - no paint of preview" ); + if ( !mbPaintInfoValid ) + return false; + } + + // OD 17.11.2003 #i22014# - no paint, if <superfluous> flag is set at layout + if ( mrLayoutRootFrm.IsSuperfluous() ) + { + return true; + } + + // environment and parameter ok + + // OD 07.11.2003 #i22014# + if ( mbInPaint ) + { + return false; + } + mbInPaint = true; + + OutputDevice* pOutputDev = mrParentViewShell.GetOut(); + + // prepare paint + if ( maPrevwPages.size() > 0 ) + { + mrParentViewShell.Imp()->bFirstPageInvalid = sal_False; + mrParentViewShell.Imp()->pFirstVisPage = + const_cast<SwPageFrm*>(maPrevwPages[0]->pPage); + } + + // paint preview background + { + SwRegionRects aPreviewBackgrdRegion( _aOutRect ); + // calculate preview background rectangles + for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); + aPageIter != maPrevwPages.end(); + ++aPageIter ) + { + if ( (*aPageIter)->bVisible ) + { + aPreviewBackgrdRegion -= + SwRect( (*aPageIter)->aPrevwWinPos, (*aPageIter)->aPageSize ); + } + } + // paint preview background rectangles + mrParentViewShell._PaintDesktop( aPreviewBackgrdRegion ); + } + + // prepare data for paint of pages + const Rectangle aPxOutRect( pOutputDev->LogicToPixel( _aOutRect ) ); + + MapMode aMapMode( pOutputDev->GetMapMode() ); + MapMode aSavedMapMode = aMapMode; + + const Font& rEmptyPgFont = SwPageFrm::GetEmptyPageFont(); + + for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); + aPageIter != maPrevwPages.end(); + ++aPageIter ) + { + if ( !(*aPageIter)->bVisible ) + continue; + + Rectangle aPageRect( (*aPageIter)->aLogicPos, (*aPageIter)->aPageSize ); + aMapMode.SetOrigin( (*aPageIter)->aMapOffset ); + pOutputDev->SetMapMode( aMapMode ); + Rectangle aPxPaintRect = pOutputDev->LogicToPixel( aPageRect ); + if ( aPxOutRect.IsOver( aPxPaintRect) ) + { + if ( (*aPageIter)->pPage->IsEmptyPage() ) + { + const Color aRetouche( mrParentViewShell.Imp()->GetRetoucheColor() ); + if( pOutputDev->GetFillColor() != aRetouche ) + pOutputDev->SetFillColor( aRetouche ); + pOutputDev->SetLineColor(); // OD 20.02.2003 #107369# - no line color + // OD 20.02.2003 #107369# - use aligned page rectangle + { + SwRect aTmpPageRect( aPageRect ); + ::SwAlignRect( aTmpPageRect, &mrParentViewShell); + aPageRect = aTmpPageRect.SVRect(); + } + pOutputDev->DrawRect( aPageRect ); + + // paint empty page text + Font aOldFont( pOutputDev->GetFont() ); + pOutputDev->SetFont( rEmptyPgFont ); + pOutputDev->DrawText( aPageRect, SW_RESSTR( STR_EMPTYPAGE ), + TEXT_DRAW_VCENTER | + TEXT_DRAW_CENTER | + TEXT_DRAW_CLIP ); + pOutputDev->SetFont( aOldFont ); + // paint border for empty page (shadow removed now) + // OD 19.02.2003 #107369# - use new method to paint page border + SwPageFrm::PaintPageBorder( aPageRect, &mrParentViewShell, true ); + } + else + { + mrParentViewShell.aVisArea = aPageRect; + aPxPaintRect.Intersection( aPxOutRect ); + Rectangle aPaintRect = pOutputDev->PixelToLogic( aPxPaintRect ); + mrParentViewShell.Paint( aPaintRect ); + // --> OD 2007-08-15 #i80691# + // paint page border (shadow removed now) + { + SwRect aPageBorderRect; + SwPageFrm::GetBorderAndShadowBoundRect( SwRect( aPageRect ), &mrParentViewShell, aPageBorderRect, true ); + const Region aDLRegion(aPageBorderRect.SVRect()); + mrParentViewShell.DLPrePaint2(aDLRegion); + SwPageFrm::PaintPageBorder( aPageRect, &mrParentViewShell, true ); + mrParentViewShell.DLPostPaint2(true); + } + // <-- + } + // OD 07.11.2003 #i22014# - stop painting, because new print + // preview layout is created during paint. + if ( mbNewLayoutDuringPaint ) + { + break; + } + + if ( (*aPageIter)->pPage->GetPhyPageNum() == mnSelectedPageNum ) + { + _PaintSelectMarkAtPage( (*aPageIter) ); + } + + } + } + + // OD 17.11.2003 #i22014# - no update of accessible preview, if a new + // print preview layout is created during paint. + if ( !mbNewLayoutDuringPaint ) + { + // update at accessibility interface + mrParentViewShell.Imp()->UpdateAccessiblePreview( + maPrevwPages, + aMapMode.GetScaleX(), + mrLayoutRootFrm.GetPageByPageNum( mnSelectedPageNum ), + maWinSize ); + } + + pOutputDev->SetMapMode( aSavedMapMode ); + mrParentViewShell.aVisArea.Clear(); + + // OD 07.11.2003 #i22014# + mbInPaint = false; + mbNewLayoutDuringPaint = false; + + return true; } /** repaint pages on page preview - OD 18.12.2002 #103492# + OD 18.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::Repaint( const Rectangle _aInvalidCoreRect ) const { - // check environment and parameters - { - if ( !mrParentViewShell.GetWin() && - !mrParentViewShell.GetOut()->GetConnectMetaFile() ) - return; - - ASSERT( mbPaintInfoValid, - "invalid preview settings - no paint of preview" ); - if ( !mbPaintInfoValid ) - return; - } - - // environment and parameter OK - - // prepare paint - if ( maPrevwPages.size() > 0 ) - { - mrParentViewShell.Imp()->bFirstPageInvalid = sal_False; - mrParentViewShell.Imp()->pFirstVisPage = - const_cast<SwPageFrm*>(maPrevwPages[0]->pPage); - } - - // invalidate visible pages, which overlap the invalid core rectangle - for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); - aPageIter != maPrevwPages.end(); - ++aPageIter ) - { - if ( !(*aPageIter)->bVisible ) - continue; - - Rectangle aPageRect( (*aPageIter)->aLogicPos, (*aPageIter)->aPageSize ); - if ( _aInvalidCoreRect.IsOver( aPageRect ) ) - { - aPageRect.Intersection( _aInvalidCoreRect ); - Rectangle aInvalidPrevwRect = aPageRect; - aInvalidPrevwRect.SetPos( aInvalidPrevwRect.TopLeft() - - (*aPageIter)->aLogicPos + - (*aPageIter)->aPrevwWinPos ); - mrParentViewShell.GetWin()->Invalidate( aInvalidPrevwRect ); - } - } + // check environment and parameters + { + if ( !mrParentViewShell.GetWin() && + !mrParentViewShell.GetOut()->GetConnectMetaFile() ) + return; + + ASSERT( mbPaintInfoValid, + "invalid preview settings - no paint of preview" ); + if ( !mbPaintInfoValid ) + return; + } + + // environment and parameter OK + + // prepare paint + if ( maPrevwPages.size() > 0 ) + { + mrParentViewShell.Imp()->bFirstPageInvalid = sal_False; + mrParentViewShell.Imp()->pFirstVisPage = + const_cast<SwPageFrm*>(maPrevwPages[0]->pPage); + } + + // invalidate visible pages, which overlap the invalid core rectangle + for ( std::vector<PrevwPage*>::const_iterator aPageIter = maPrevwPages.begin(); + aPageIter != maPrevwPages.end(); + ++aPageIter ) + { + if ( !(*aPageIter)->bVisible ) + continue; + + Rectangle aPageRect( (*aPageIter)->aLogicPos, (*aPageIter)->aPageSize ); + if ( _aInvalidCoreRect.IsOver( aPageRect ) ) + { + aPageRect.Intersection( _aInvalidCoreRect ); + Rectangle aInvalidPrevwRect = aPageRect; + aInvalidPrevwRect.SetPos( aInvalidPrevwRect.TopLeft() - + (*aPageIter)->aLogicPos + + (*aPageIter)->aPrevwWinPos ); + mrParentViewShell.GetWin()->Invalidate( aInvalidPrevwRect ); + } + } } /** paint selection mark at page - OD 17.12.2002 #103492# + OD 17.12.2002 #103492# - @author OD + @author OD */ void SwPagePreviewLayout::_PaintSelectMarkAtPage( - const PrevwPage* _aSelectedPrevwPage ) const + const PrevwPage* _aSelectedPrevwPage ) const { - OutputDevice* pOutputDev = mrParentViewShell.GetOut(); - MapMode aMapMode( pOutputDev->GetMapMode() ); - // save mapping mode of output device - MapMode aSavedMapMode = aMapMode; - // save fill and line color of output device - Color aFill( pOutputDev->GetFillColor() ); - Color aLine( pOutputDev->GetLineColor() ); + OutputDevice* pOutputDev = mrParentViewShell.GetOut(); + MapMode aMapMode( pOutputDev->GetMapMode() ); + // save mapping mode of output device + MapMode aSavedMapMode = aMapMode; + // save fill and line color of output device + Color aFill( pOutputDev->GetFillColor() ); + Color aLine( pOutputDev->GetLineColor() ); // determine selection mark color const StyleSettings& rSettings = mrParentViewShell.GetWin()->GetSettings().GetStyleSettings(); @@ -1278,85 +1275,85 @@ void SwPagePreviewLayout::_PaintSelectMarkAtPage( if ( rSettings.GetHighContrastMode() ) aSelPgLineColor = rSettings.GetActiveBorderColor(); - // set needed mapping mode at output device - aMapMode.SetOrigin( _aSelectedPrevwPage->aMapOffset ); - pOutputDev->SetMapMode( aMapMode ); - - // calculate page rectangle in pixel coordinates - SwRect aPageRect( _aSelectedPrevwPage->aLogicPos, - _aSelectedPrevwPage->aPageSize ); - // OD 19.02.2003 #107369# - use aligned page rectangle, as it is used for - // page border paint - see <SwPageFrm::PaintPageBorder(..)> - ::SwAlignRect( aPageRect, &mrParentViewShell); - Rectangle aPxPageRect = pOutputDev->LogicToPixel( aPageRect.SVRect() ); - - // draw two rectangles - // OD 19.02.2003 #107369# - adjust position of select mark rectangle - Rectangle aRect( aPxPageRect.Left(), aPxPageRect.Top(), - aPxPageRect.Right(), aPxPageRect.Bottom() ); - aRect = pOutputDev->PixelToLogic( aRect ); - pOutputDev->SetFillColor(); // OD 20.02.2003 #107369# - no fill color - pOutputDev->SetLineColor( aSelPgLineColor ); - pOutputDev->DrawRect( aRect ); - // OD 19.02.2003 #107369# - adjust position of select mark rectangle - aRect = Rectangle( aPxPageRect.Left()+1, aPxPageRect.Top()+1, - aPxPageRect.Right()-1, aPxPageRect.Bottom()-1 ); - aRect = pOutputDev->PixelToLogic( aRect ); - pOutputDev->DrawRect( aRect ); - - // reset fill and line color of output device - pOutputDev->SetFillColor( aFill ); - pOutputDev->SetLineColor( aLine ); - - // reset mapping mode of output device - pOutputDev->SetMapMode( aSavedMapMode ); + // set needed mapping mode at output device + aMapMode.SetOrigin( _aSelectedPrevwPage->aMapOffset ); + pOutputDev->SetMapMode( aMapMode ); + + // calculate page rectangle in pixel coordinates + SwRect aPageRect( _aSelectedPrevwPage->aLogicPos, + _aSelectedPrevwPage->aPageSize ); + // OD 19.02.2003 #107369# - use aligned page rectangle, as it is used for + // page border paint - see <SwPageFrm::PaintPageBorder(..)> + ::SwAlignRect( aPageRect, &mrParentViewShell); + Rectangle aPxPageRect = pOutputDev->LogicToPixel( aPageRect.SVRect() ); + + // draw two rectangles + // OD 19.02.2003 #107369# - adjust position of select mark rectangle + Rectangle aRect( aPxPageRect.Left(), aPxPageRect.Top(), + aPxPageRect.Right(), aPxPageRect.Bottom() ); + aRect = pOutputDev->PixelToLogic( aRect ); + pOutputDev->SetFillColor(); // OD 20.02.2003 #107369# - no fill color + pOutputDev->SetLineColor( aSelPgLineColor ); + pOutputDev->DrawRect( aRect ); + // OD 19.02.2003 #107369# - adjust position of select mark rectangle + aRect = Rectangle( aPxPageRect.Left()+1, aPxPageRect.Top()+1, + aPxPageRect.Right()-1, aPxPageRect.Bottom()-1 ); + aRect = pOutputDev->PixelToLogic( aRect ); + pOutputDev->DrawRect( aRect ); + + // reset fill and line color of output device + pOutputDev->SetFillColor( aFill ); + pOutputDev->SetLineColor( aLine ); + + // reset mapping mode of output device + pOutputDev->SetMapMode( aSavedMapMode ); } /** paint to mark new selected page - OD 17.12.2002 #103492# - Perform paint for current selected page in order to unmark it. - Set new selected page and perform paint to mark this page. + OD 17.12.2002 #103492# + Perform paint for current selected page in order to unmark it. + Set new selected page and perform paint to mark this page. - @author OD, _nSelectedPage, mnSelectedPage are absolute + @author OD, _nSelectedPage, mnSelectedPage are absolute */ void SwPagePreviewLayout::MarkNewSelectedPage( const sal_uInt16 _nSelectedPage ) { - sal_uInt16 nOldSelectedPageNum = mnSelectedPageNum; - mnSelectedPageNum = _nSelectedPage; - - // re-paint for current selected page in order to unmark it. - const PrevwPage* pOldSelectedPrevwPage = _GetPrevwPageByPageNum( nOldSelectedPageNum ); - if ( pOldSelectedPrevwPage && pOldSelectedPrevwPage->bVisible ) - { - // OD 20.02.2003 #107369# - invalidate only areas of selection mark. - SwRect aPageRect( pOldSelectedPrevwPage->aPrevwWinPos, - pOldSelectedPrevwPage->aPageSize ); - ::SwAlignRect( aPageRect, &mrParentViewShell); - OutputDevice* pOutputDev = mrParentViewShell.GetOut(); - Rectangle aPxPageRect = pOutputDev->LogicToPixel( aPageRect.SVRect() ); - // invalidate top mark line - Rectangle aInvalPxRect( aPxPageRect.Left(), aPxPageRect.Top(), - aPxPageRect.Right(), aPxPageRect.Top()+1 ); - mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); - // invalidate right mark line - aInvalPxRect = Rectangle( aPxPageRect.Right()-1, aPxPageRect.Top(), - aPxPageRect.Right(), aPxPageRect.Bottom() ); - mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); - // invalidate bottom mark line - aInvalPxRect = Rectangle( aPxPageRect.Left(), aPxPageRect.Bottom()-1, - aPxPageRect.Right(), aPxPageRect.Bottom() ); - mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); - // invalidate left mark line - aInvalPxRect = Rectangle( aPxPageRect.Left(), aPxPageRect.Top(), - aPxPageRect.Left()+1, aPxPageRect.Bottom() ); - mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); - } - - // re-paint for new selected page in order to mark it. - const PrevwPage* pNewSelectedPrevwPage = _GetPrevwPageByPageNum( _nSelectedPage ); - if ( pNewSelectedPrevwPage && pNewSelectedPrevwPage->bVisible ) - _PaintSelectMarkAtPage( pNewSelectedPrevwPage ); + sal_uInt16 nOldSelectedPageNum = mnSelectedPageNum; + mnSelectedPageNum = _nSelectedPage; + + // re-paint for current selected page in order to unmark it. + const PrevwPage* pOldSelectedPrevwPage = _GetPrevwPageByPageNum( nOldSelectedPageNum ); + if ( pOldSelectedPrevwPage && pOldSelectedPrevwPage->bVisible ) + { + // OD 20.02.2003 #107369# - invalidate only areas of selection mark. + SwRect aPageRect( pOldSelectedPrevwPage->aPrevwWinPos, + pOldSelectedPrevwPage->aPageSize ); + ::SwAlignRect( aPageRect, &mrParentViewShell); + OutputDevice* pOutputDev = mrParentViewShell.GetOut(); + Rectangle aPxPageRect = pOutputDev->LogicToPixel( aPageRect.SVRect() ); + // invalidate top mark line + Rectangle aInvalPxRect( aPxPageRect.Left(), aPxPageRect.Top(), + aPxPageRect.Right(), aPxPageRect.Top()+1 ); + mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); + // invalidate right mark line + aInvalPxRect = Rectangle( aPxPageRect.Right()-1, aPxPageRect.Top(), + aPxPageRect.Right(), aPxPageRect.Bottom() ); + mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); + // invalidate bottom mark line + aInvalPxRect = Rectangle( aPxPageRect.Left(), aPxPageRect.Bottom()-1, + aPxPageRect.Right(), aPxPageRect.Bottom() ); + mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); + // invalidate left mark line + aInvalPxRect = Rectangle( aPxPageRect.Left(), aPxPageRect.Top(), + aPxPageRect.Left()+1, aPxPageRect.Bottom() ); + mrParentViewShell.GetWin()->Invalidate( pOutputDev->PixelToLogic( aInvalPxRect ) ); + } + + // re-paint for new selected page in order to mark it. + const PrevwPage* pNewSelectedPrevwPage = _GetPrevwPageByPageNum( _nSelectedPage ); + if ( pNewSelectedPrevwPage && pNewSelectedPrevwPage->bVisible ) + _PaintSelectMarkAtPage( pNewSelectedPrevwPage ); } @@ -1365,175 +1362,175 @@ void SwPagePreviewLayout::MarkNewSelectedPage( const sal_uInt16 _nSelectedPage ) // ============================================================================= /** get preview page by physical page number - OD 17.12.2002 #103492# + OD 17.12.2002 #103492# - @author OD + @author OD */ struct EqualsPageNumPred { - const sal_uInt16 mnPageNum; - EqualsPageNumPred( const sal_uInt16 _nPageNum ) : mnPageNum( _nPageNum ) {}; - bool operator() ( const PrevwPage* _pPrevwPage ) - { - return _pPrevwPage->pPage->GetPhyPageNum() == mnPageNum; - } + const sal_uInt16 mnPageNum; + EqualsPageNumPred( const sal_uInt16 _nPageNum ) : mnPageNum( _nPageNum ) {}; + bool operator() ( const PrevwPage* _pPrevwPage ) + { + return _pPrevwPage->pPage->GetPhyPageNum() == mnPageNum; + } }; const PrevwPage* SwPagePreviewLayout::_GetPrevwPageByPageNum( const sal_uInt16 _nPageNum ) const { - std::vector<PrevwPage*>::const_iterator aFoundPrevwPageIter = - std::find_if( maPrevwPages.begin(), maPrevwPages.end(), - EqualsPageNumPred( _nPageNum ) ); - - if ( aFoundPrevwPageIter == maPrevwPages.end() ) - return 0; - else - return (*aFoundPrevwPageIter); + std::vector<PrevwPage*>::const_iterator aFoundPrevwPageIter = + std::find_if( maPrevwPages.begin(), maPrevwPages.end(), + EqualsPageNumPred( _nPageNum ) ); + + if ( aFoundPrevwPageIter == maPrevwPages.end() ) + return 0; + else + return (*aFoundPrevwPageIter); } /** determine row the page with the given number is in - OD 17.01.2003 #103492# + OD 17.01.2003 #103492# - @author OD, _nPageNum is relative + @author OD, _nPageNum is relative */ sal_uInt16 SwPagePreviewLayout::GetRowOfPage( sal_uInt16 _nPageNum ) const { - // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled - // by <mbBookPreview>. - if ( mbBookPreview ) - { - // Note: increase given physical page number by one, because left-top-corner - // in the preview layout is left blank. - ++_nPageNum; - } - - sal_uInt16 nRow = (_nPageNum) / mnCols; - if ( ( (_nPageNum) % mnCols ) > 0 ) - ++nRow; - - return nRow; + // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled + // by <mbBookPreview>. + if ( mbBookPreview ) + { + // Note: increase given physical page number by one, because left-top-corner + // in the preview layout is left blank. + ++_nPageNum; + } + + sal_uInt16 nRow = (_nPageNum) / mnCols; + if ( ( (_nPageNum) % mnCols ) > 0 ) + ++nRow; + + return nRow; } /** determine column the page with the given number is in - OD 17.01.2003 #103492# + OD 17.01.2003 #103492# - @author OD, _nPageNum is relative + @author OD, _nPageNum is relative */ sal_uInt16 SwPagePreviewLayout::GetColOfPage( sal_uInt16 _nPageNum ) const { - // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled - // by <mbBookPreview>. - if ( mbBookPreview ) - { - // Note: increase given physical page number by one, because left-top-corner - // in the preview layout is left blank. - ++_nPageNum; - } - - sal_uInt16 nCol = (_nPageNum) % mnCols; - if ( nCol == 0 ) - nCol = mnCols; - - return nCol; + // OD 19.02.2003 #107369# - leaving left-top-corner blank is controlled + // by <mbBookPreview>. + if ( mbBookPreview ) + { + // Note: increase given physical page number by one, because left-top-corner + // in the preview layout is left blank. + ++_nPageNum; + } + + sal_uInt16 nCol = (_nPageNum) % mnCols; + if ( nCol == 0 ) + nCol = mnCols; + + return nCol; } Size SwPagePreviewLayout::GetPrevwDocSize() const { - ASSERT( PreviewLayoutValid(), "PagePreviewLayout not valid" ); - return maPreviewDocRect.GetSize(); + ASSERT( PreviewLayoutValid(), "PagePreviewLayout not valid" ); + return maPreviewDocRect.GetSize(); } /** get size of a preview page by its physical page number - OD 15.01.2003 #103492# + OD 15.01.2003 #103492# - @author OD + @author OD */ Size SwPagePreviewLayout::GetPrevwPageSizeByPageNum( sal_uInt16 _nPageNum ) const { - const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); - if ( pPrevwPage ) - { - return pPrevwPage->aPageSize; - } - else - { - return Size( 0, 0 ); - } + const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); + if ( pPrevwPage ) + { + return pPrevwPage->aPageSize; + } + else + { + return Size( 0, 0 ); + } } /** get virtual page number by its physical page number - OD 21.03.2003 #108282# + OD 21.03.2003 #108282# - @author OD + @author OD */ sal_uInt16 SwPagePreviewLayout::GetVirtPageNumByPageNum( sal_uInt16 _nPageNum ) const { - const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); - if ( pPrevwPage ) - { - return pPrevwPage->pPage->GetVirtPageNum(); - } - else - { - return 0; - } + const PrevwPage* pPrevwPage = _GetPrevwPageByPageNum( _nPageNum ); + if ( pPrevwPage ) + { + return pPrevwPage->pPage->GetVirtPageNum(); + } + else + { + return 0; + } } /** Convert absolute to relative page numbers (see PrintEmptyPages) - @author FME + @author FME */ sal_uInt16 SwPagePreviewLayout::ConvertAbsoluteToRelativePageNum( sal_uInt16 _nAbsPageNum ) const { - if ( mbBookPreview || mbPrintEmptyPages || !_nAbsPageNum ) - { - return _nAbsPageNum; - } + if ( mbBookPreview || mbPrintEmptyPages || !_nAbsPageNum ) + { + return _nAbsPageNum; + } - const SwPageFrm* pTmpPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); + const SwPageFrm* pTmpPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); - sal_uInt16 nRet = 1; + sal_uInt16 nRet = 1; - while ( pTmpPage && pTmpPage->GetPhyPageNum() != _nAbsPageNum ) - { - if ( !pTmpPage->IsEmptyPage() ) - ++nRet; + while ( pTmpPage && pTmpPage->GetPhyPageNum() != _nAbsPageNum ) + { + if ( !pTmpPage->IsEmptyPage() ) + ++nRet; - pTmpPage = static_cast<const SwPageFrm*>( pTmpPage->GetNext() ); - } + pTmpPage = static_cast<const SwPageFrm*>( pTmpPage->GetNext() ); + } - return nRet; + return nRet; } /** Convert relative to absolute page numbers (see PrintEmptyPages) - @author FME + @author FME */ sal_uInt16 SwPagePreviewLayout::ConvertRelativeToAbsolutePageNum( sal_uInt16 _nRelPageNum ) const { - if ( mbBookPreview || mbPrintEmptyPages || !_nRelPageNum ) - { - return _nRelPageNum; - } + if ( mbBookPreview || mbPrintEmptyPages || !_nRelPageNum ) + { + return _nRelPageNum; + } - const SwPageFrm* pTmpPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); - const SwPageFrm* pRet = 0; + const SwPageFrm* pTmpPage = static_cast<const SwPageFrm*>(mrLayoutRootFrm.Lower()); + const SwPageFrm* pRet = 0; - sal_uInt16 i = 0; - while( pTmpPage && i != _nRelPageNum ) - { - if ( !pTmpPage->IsEmptyPage() ) - ++i; + sal_uInt16 i = 0; + while( pTmpPage && i != _nRelPageNum ) + { + if ( !pTmpPage->IsEmptyPage() ) + ++i; - pRet = pTmpPage; - pTmpPage = static_cast<const SwPageFrm*>( pTmpPage->GetNext() ); - } + pRet = pTmpPage; + pTmpPage = static_cast<const SwPageFrm*>( pTmpPage->GetNext() ); + } - return pRet->GetPhyPageNum(); + return pRet->GetPhyPageNum(); } /* vim: set noet sw=4 ts=4: */ diff --git a/main/sw/source/core/view/vdraw.cxx b/main/sw/source/core/view/vdraw.cxx index 0683dbfdba..6870fc0e6e 100644 --- a/main/sw/source/core/view/vdraw.cxx +++ b/main/sw/source/core/view/vdraw.cxx @@ -19,8 +19,6 @@ * *************************************************************/ - - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" @@ -160,75 +158,75 @@ void SwViewImp::UnlockPaint() // outliner of the draw view for painting layers <hell> and <heaven>. // OD 25.06.2003 #108784# - correct type of 1st parameter void SwViewImp::PaintLayer( const SdrLayerID _nLayerID, - SwPrintData const*const pPrintData, - const SwRect& , - const Color* _pPageBackgrdColor, - const bool _bIsPageRightToLeft, - sdr::contact::ViewObjectContactRedirector* pRedirector ) const + SwPrintData const*const pPrintData, + const SwRect& , + const Color* _pPageBackgrdColor, + const bool _bIsPageRightToLeft, + sdr::contact::ViewObjectContactRedirector* pRedirector ) const { - if ( HasDrawView() ) + if ( HasDrawView() ) { - //change the draw mode in high contrast mode - OutputDevice* pOutDev = GetShell()->GetOut(); - sal_uLong nOldDrawMode = pOutDev->GetDrawMode(); - if( GetShell()->GetWin() && - Application::GetSettings().GetStyleSettings().GetHighContrastMode() && - (!GetShell()->IsPreView()||SW_MOD()->GetAccessibilityOptions().GetIsForPagePreviews())) - { - pOutDev->SetDrawMode( nOldDrawMode | DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | - DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT ); - } - - // OD 29.08.2002 #102450# - // For correct handling of accessibility, high contrast, the page background - // color is set as the background color at the outliner of the draw view. - // Only necessary for the layers hell and heaven - Color aOldOutlinerBackgrdColor; - // OD 09.12.2002 #103045# - set default horizontal text direction on - // painting <hell> or <heaven>. - EEHorizontalTextDirection aOldEEHoriTextDir = EE_HTEXTDIR_L2R; - const IDocumentDrawModelAccess* pIDDMA = GetShell()->getIDocumentDrawModelAccess(); - if ( (_nLayerID == pIDDMA->GetHellId()) || - (_nLayerID == pIDDMA->GetHeavenId()) ) - { - ASSERT( _pPageBackgrdColor, - "incorrect usage of SwViewImp::PaintLayer: pPageBackgrdColor have to be set for painting layer <hell> or <heaven>"); - if ( _pPageBackgrdColor ) - { - aOldOutlinerBackgrdColor = - GetDrawView()->GetModel()->GetDrawOutliner().GetBackgroundColor(); - GetDrawView()->GetModel()->GetDrawOutliner().SetBackgroundColor( *_pPageBackgrdColor ); - } - - aOldEEHoriTextDir = - GetDrawView()->GetModel()->GetDrawOutliner().GetDefaultHorizontalTextDirection(); - EEHorizontalTextDirection aEEHoriTextDirOfPage = - _bIsPageRightToLeft ? EE_HTEXTDIR_R2L : EE_HTEXTDIR_L2R; - GetDrawView()->GetModel()->GetDrawOutliner().SetDefaultHorizontalTextDirection( aEEHoriTextDirOfPage ); - } + // change the draw mode in high contrast mode + OutputDevice* pOutDev = GetShell()->GetOut(); + sal_uLong nOldDrawMode = pOutDev->GetDrawMode(); + if( GetShell()->GetWin() && + Application::GetSettings().GetStyleSettings().GetHighContrastMode() && + (!GetShell()->IsPreView()||SW_MOD()->GetAccessibilityOptions().GetIsForPagePreviews())) + { + pOutDev->SetDrawMode( nOldDrawMode | DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | + DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT ); + } + + // OD 29.08.2002 #102450# + // For correct handling of accessibility, high contrast, the page background + // color is set as the background color at the outliner of the draw view. + // Only necessary for the layers hell and heaven + Color aOldOutlinerBackgrdColor; + // OD 09.12.2002 #103045# - set default horizontal text direction on + // painting <hell> or <heaven>. + EEHorizontalTextDirection aOldEEHoriTextDir = EE_HTEXTDIR_L2R; + const IDocumentDrawModelAccess* pIDDMA = GetShell()->getIDocumentDrawModelAccess(); + if ( (_nLayerID == pIDDMA->GetHellId()) || + (_nLayerID == pIDDMA->GetHeavenId()) ) + { + ASSERT( _pPageBackgrdColor, + "incorrect usage of SwViewImp::PaintLayer: pPageBackgrdColor have to be set for painting layer <hell> or <heaven>"); + if ( _pPageBackgrdColor ) + { + aOldOutlinerBackgrdColor = + GetDrawView()->GetModel()->GetDrawOutliner().GetBackgroundColor(); + GetDrawView()->GetModel()->GetDrawOutliner().SetBackgroundColor( *_pPageBackgrdColor ); + } + + aOldEEHoriTextDir = + GetDrawView()->GetModel()->GetDrawOutliner().GetDefaultHorizontalTextDirection(); + EEHorizontalTextDirection aEEHoriTextDirOfPage = + _bIsPageRightToLeft ? EE_HTEXTDIR_R2L : EE_HTEXTDIR_L2R; + GetDrawView()->GetModel()->GetDrawOutliner().SetDefaultHorizontalTextDirection( aEEHoriTextDirOfPage ); + } pOutDev->Push( PUSH_LINECOLOR ); // #114231# - if (pPrintData) - { - // hide drawings but not form controls (form controls are handled elsewhere) - SdrView &rSdrView = const_cast< SdrView & >(GetPageView()->GetView()); - rSdrView.setHideDraw( !pPrintData->IsPrintDraw() ); - } - GetPageView()->DrawLayer( _nLayerID, pOutDev, pRedirector ); + if (pPrintData) + { + // hide drawings but not form controls (form controls are handled elsewhere) + SdrView &rSdrView = const_cast< SdrView & >(GetPageView()->GetView()); + rSdrView.setHideDraw( !pPrintData->IsPrintDraw() ); + } + GetPageView()->DrawLayer( _nLayerID, pOutDev, pRedirector ); pOutDev->Pop(); - // OD 29.08.2002 #102450# - // reset background color of the outliner - // OD 09.12.2002 #103045# - reset default horizontal text direction - if ( (_nLayerID == pIDDMA->GetHellId()) || - (_nLayerID == pIDDMA->GetHeavenId()) ) - { - GetDrawView()->GetModel()->GetDrawOutliner().SetBackgroundColor( aOldOutlinerBackgrdColor ); - GetDrawView()->GetModel()->GetDrawOutliner().SetDefaultHorizontalTextDirection( aOldEEHoriTextDir ); - } - - pOutDev->SetDrawMode( nOldDrawMode ); - } + // OD 29.08.2002 #102450# + // reset background color of the outliner + // OD 09.12.2002 #103045# - reset default horizontal text direction + if ( (_nLayerID == pIDDMA->GetHellId()) || + (_nLayerID == pIDDMA->GetHeavenId()) ) + { + GetDrawView()->GetModel()->GetDrawOutliner().SetBackgroundColor( aOldOutlinerBackgrdColor ); + GetDrawView()->GetModel()->GetDrawOutliner().SetDefaultHorizontalTextDirection( aOldEEHoriTextDir ); + } + + pOutDev->SetDrawMode( nOldDrawMode ); + } } /************************************************************************* @@ -261,9 +259,9 @@ sal_Bool SwViewImp::IsDragPossible( const Point &rPoint ) else aRect = GetShell()->GetLayout()->Frm(); - aRect.Top( aRect.Top() - WIEDUWILLST ); + aRect.Top( aRect.Top() - WIEDUWILLST ); aRect.Bottom( aRect.Bottom() + WIEDUWILLST ); - aRect.Left( aRect.Left() - WIEDUWILLST ); + aRect.Left( aRect.Left() - WIEDUWILLST ); aRect.Right( aRect.Right() + WIEDUWILLST ); return aRect.IsInside( rPoint ); } @@ -306,27 +304,27 @@ void SwViewImp::NotifySizeChg( const Size &rNewSz ) { //Teilfix(26793): Objekte, die in Rahmen verankert sind, brauchen //nicht angepasst werden. - const SwContact *pCont = (SwContact*)GetUserCall(pObj); + const SwContact *pCont = (SwContact*)GetUserCall(pObj); //JP - 16.3.00 Bug 73920: this function might be called by the // InsertDocument, when a PageDesc-Attribute is // set on a node. Then the SdrObject must not have // an UserCall. - if( !pCont || !pCont->ISA(SwDrawContact) ) + if( !pCont || !pCont->ISA(SwDrawContact) ) continue; - const SwFrm *pAnchor = ((SwDrawContact*)pCont)->GetAnchorFrm(); + const SwFrm *pAnchor = ((SwDrawContact*)pCont)->GetAnchorFrm(); if ( !pAnchor || pAnchor->IsInFly() || !pAnchor->IsValid() || - !pAnchor->GetUpper() || !pAnchor->FindPageFrm() || - (FLY_AS_CHAR == pCont->GetFmt()->GetAnchor().GetAnchorId()) ) - { + !pAnchor->GetUpper() || !pAnchor->FindPageFrm() || + (FLY_AS_CHAR == pCont->GetFmt()->GetAnchor().GetAnchorId()) ) + { continue; - } + } - // OD 19.06.2003 #108784# - no move for drawing objects in header/footer - if ( pAnchor->FindFooterOrHeader() ) - { - continue; - } + // OD 19.06.2003 #108784# - no move for drawing objects in header/footer + if ( pAnchor->FindFooterOrHeader() ) + { + continue; + } const Rectangle aBound( pObj->GetCurrentBoundRect() ); if ( !aRect.IsInside( aBound ) ) @@ -351,3 +349,5 @@ void SwViewImp::NotifySizeChg( const Size &rNewSz ) } } } + +/* vim: set noet sw=4 ts=4: */ diff --git a/main/sw/source/core/view/viewpg.cxx b/main/sw/source/core/view/viewpg.cxx index 3bf558b9b6..d08044ee5d 100644 --- a/main/sw/source/core/view/viewpg.cxx +++ b/main/sw/source/core/view/viewpg.cxx @@ -19,8 +19,6 @@ * *************************************************************/ - - // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" @@ -57,195 +55,197 @@ using namespace ::com::sun::star; // OD 12.12.2002 #103492# SwPagePreviewLayout* ViewShell::PagePreviewLayout() { - return Imp()->PagePreviewLayout(); + return Imp()->PagePreviewLayout(); } void ViewShell::ShowPreViewSelection( sal_uInt16 nSelPage ) { - Imp()->InvalidateAccessiblePreViewSelection( nSelPage ); + Imp()->InvalidateAccessiblePreViewSelection( nSelPage ); } /** adjust view options for page preview - OD 09.01.2003 #i6467# + OD 09.01.2003 #i6467# */ void ViewShell::AdjustOptionsForPagePreview(SwPrintData const& rPrintOptions) { - if ( !IsPreView() ) - { - ASSERT( false, "view shell doesn't belong to a page preview - no adjustment of its view options"); - return; - } + if ( !IsPreView() ) + { + ASSERT( false, "view shell doesn't belong to a page preview - no adjustment of its view options"); + return; + } - PrepareForPrint( rPrintOptions ); + PrepareForPrint( rPrintOptions ); - return; + return; } // print brochure // OD 05.05.2003 #i14016# - consider empty pages on calculation of the scaling // for a page to be printed. void ViewShell::PrintProspect( - OutputDevice *pOutDev, - const SwPrintData &rPrintData, - sal_Int32 nRenderer // the index in the vector of prospect pages to be printed - ) + OutputDevice *pOutDev, + const SwPrintData &rPrintData, + sal_Int32 nRenderer // the index in the vector of prospect pages to be printed + ) { - const sal_Int32 nMaxRenderer = rPrintData.GetRenderData().GetPagePairsForProspectPrinting().size() - 1; + const sal_Int32 nMaxRenderer = rPrintData.GetRenderData().GetPagePairsForProspectPrinting().size() - 1; #if OSL_DEBUG_LEVEL > 1 - DBG_ASSERT( 0 <= nRenderer && nRenderer <= nMaxRenderer, "nRenderer out of bounds"); + DBG_ASSERT( 0 <= nRenderer && nRenderer <= nMaxRenderer, "nRenderer out of bounds"); #endif - Printer *pPrinter = dynamic_cast< Printer * >(pOutDev); - if (!pPrinter || nMaxRenderer < 0 || nRenderer < 0 || nRenderer > nMaxRenderer) + Printer *pPrinter = dynamic_cast< Printer * >(pOutDev); + if (!pPrinter || nMaxRenderer < 0 || nRenderer < 0 || nRenderer > nMaxRenderer) return; - // save settings of OutputDevice (should be done always since the - // output device is now provided by a call from outside the Writer) - pPrinter->Push(); + // save settings of OutputDevice (should be done always since the + // output device is now provided by a call from outside the Writer) + pPrinter->Push(); - std::pair< sal_Int32, sal_Int32 > rPagesToPrint = - rPrintData.GetRenderData().GetPagePairsForProspectPrinting()[ nRenderer ]; + std::pair< sal_Int32, sal_Int32 > rPagesToPrint = + rPrintData.GetRenderData().GetPagePairsForProspectPrinting()[ nRenderer ]; // const sal_uInt16 nPageMax = static_cast< sal_uInt16 >(rPagesToPrint.first > rPagesToPrint.second ? -// rPagesToPrint.first : rPagesToPrint.second); +// rPagesToPrint.first : rPagesToPrint.second); #if OSL_DEBUG_LEVEL > 1 - DBG_ASSERT( rPagesToPrint.first == -1 || rPrintData.GetRenderData().GetValidPagesSet().count( rPagesToPrint.first ) == 1, "first Page not valid" ); - DBG_ASSERT( rPagesToPrint.second == -1 || rPrintData.GetRenderData().GetValidPagesSet().count( rPagesToPrint.second ) == 1, "second Page not valid" ); + DBG_ASSERT( rPagesToPrint.first == -1 || rPrintData.GetRenderData().GetValidPagesSet().count( rPagesToPrint.first ) == 1, "first Page not valid" ); + DBG_ASSERT( rPagesToPrint.second == -1 || rPrintData.GetRenderData().GetValidPagesSet().count( rPagesToPrint.second ) == 1, "second Page not valid" ); #endif // create new shell for printer - ViewShell aShell( *this, 0, pPrinter ); - - SET_CURR_SHELL( &aShell ); - - aShell.PrepareForPrint( rPrintData ); - - //!! applying view options and formatting the document should now only be done in getRendererCount! - - MapMode aMapMode( MAP_TWIP ); - Size aPrtSize( pPrinter->PixelToLogic( pPrinter->GetPaperSizePixel(), aMapMode ) ); - - SwTwips nMaxRowSz, nMaxColSz; - - const SwPageFrm *pStPage = 0; - const SwPageFrm *pNxtPage = 0; - const SwRenderData::ValidStartFramesMap_t &rFrms = rPrintData.GetRenderData().GetValidStartFrames(); - if (rPagesToPrint.first > 0) - { - SwRenderData::ValidStartFramesMap_t::const_iterator aIt( rFrms.find( rPagesToPrint.first ) ); - DBG_ASSERT( aIt != rFrms.end(), "failed to find start frame" ); - pStPage = aIt->second; - } - if (rPagesToPrint.second > 0) - { - SwRenderData::ValidStartFramesMap_t::const_iterator aIt( rFrms.find( rPagesToPrint.second ) ); - DBG_ASSERT( aIt != rFrms.end(), "failed to find start frame" ); - pNxtPage = aIt->second; - } - - // OD 05.05.2003 #i14016# - consider empty pages on calculation - // of page size, used for calculation of scaling. - Size aSttPageSize; - if ( pStPage ) - { - if ( pStPage->IsEmptyPage() ) - { - if ( pStPage->GetPhyPageNum() % 2 == 0 ) - aSttPageSize = pStPage->GetPrev()->Frm().SSize(); - else - aSttPageSize = pStPage->GetNext()->Frm().SSize(); - } - else - { - aSttPageSize = pStPage->Frm().SSize(); - } - } - Size aNxtPageSize; - if ( pNxtPage ) - { - if ( pNxtPage->IsEmptyPage() ) - { - if ( pNxtPage->GetPhyPageNum() % 2 == 0 ) - aNxtPageSize = pNxtPage->GetPrev()->Frm().SSize(); - else - aNxtPageSize = pNxtPage->GetNext()->Frm().SSize(); - } - else - { - aNxtPageSize = pNxtPage->Frm().SSize(); - } - } - - if( !pStPage ) - { - nMaxColSz = 2 * aNxtPageSize.Width(); - nMaxRowSz = aNxtPageSize.Height(); - } - else if( !pNxtPage ) - { - nMaxColSz = 2 * aSttPageSize.Width(); - nMaxRowSz = aSttPageSize.Height(); - } - else - { - nMaxColSz = aNxtPageSize.Width() + aSttPageSize.Width(); - nMaxRowSz = Max( aNxtPageSize.Height(), aSttPageSize.Height() ); - } - - // den MapMode einstellen - aMapMode.SetOrigin( Point() ); - { - Fraction aScX( aPrtSize.Width(), nMaxColSz ); - Fraction aScY( aPrtSize.Height(), nMaxRowSz ); - if( aScX < aScY ) - aScY = aScX; - - { - // fuer Drawing, damit diese ihre Objekte vernuenftig Painten - // koennen, auf "glatte" Prozentwerte setzen - aScY *= Fraction( 1000, 1 ); - long nTmp = (long)aScY; - if( 1 < nTmp ) - --nTmp; - else - nTmp = 1; - aScY = Fraction( nTmp, 1000 ); - } - - aMapMode.SetScaleY( aScY ); - aMapMode.SetScaleX( aScY ); - } - - Size aTmpPrtSize( pPrinter->PixelToLogic( pPrinter->GetPaperSizePixel(), aMapMode ) ); - - // calculate start point for equal border on all sides - Point aSttPt( (aTmpPrtSize.Width() - nMaxColSz) / 2, - (aTmpPrtSize.Height() - nMaxRowSz) / 2 ); - for( int nC = 0; nC < 2; ++nC ) - { - if( pStPage ) - { - aShell.Imp()->SetFirstVisPageInvalid(); - aShell.aVisArea = pStPage->Frm(); - - Point aPos( aSttPt ); - aPos -= aShell.aVisArea.Pos(); -// aPos -= aPrtOff; - aMapMode.SetOrigin( aPos ); - pPrinter->SetMapMode( aMapMode ); - pStPage->GetUpper()->Paint( pStPage->Frm() ); - } - - pStPage = pNxtPage; - aSttPt.X() += aTmpPrtSize.Width() / 2; - } - - SwPaintQueue::Repaint(); - - //!! applying/modifying view options and formatting the document should now only be done in getRendererCount! - - pFntCache->Flush(); - - // restore settings of OutputDevice (should be done always now since the - // output device is now provided by a call from outside the Writer) - pPrinter->Pop(); + ViewShell aShell( *this, 0, pPrinter ); + + SET_CURR_SHELL( &aShell ); + + aShell.PrepareForPrint( rPrintData ); + + //!! applying view options and formatting the document should now only be done in getRendererCount! + + MapMode aMapMode( MAP_TWIP ); + Size aPrtSize( pPrinter->PixelToLogic( pPrinter->GetPaperSizePixel(), aMapMode ) ); + + SwTwips nMaxRowSz, nMaxColSz; + + const SwPageFrm *pStPage = 0; + const SwPageFrm *pNxtPage = 0; + const SwRenderData::ValidStartFramesMap_t &rFrms = rPrintData.GetRenderData().GetValidStartFrames(); + if (rPagesToPrint.first > 0) + { + SwRenderData::ValidStartFramesMap_t::const_iterator aIt( rFrms.find( rPagesToPrint.first ) ); + DBG_ASSERT( aIt != rFrms.end(), "failed to find start frame" ); + pStPage = aIt->second; + } + if (rPagesToPrint.second > 0) + { + SwRenderData::ValidStartFramesMap_t::const_iterator aIt( rFrms.find( rPagesToPrint.second ) ); + DBG_ASSERT( aIt != rFrms.end(), "failed to find start frame" ); + pNxtPage = aIt->second; + } + + // OD 05.05.2003 #i14016# - consider empty pages on calculation + // of page size, used for calculation of scaling. + Size aSttPageSize; + if ( pStPage ) + { + if ( pStPage->IsEmptyPage() ) + { + if ( pStPage->GetPhyPageNum() % 2 == 0 ) + aSttPageSize = pStPage->GetPrev()->Frm().SSize(); + else + aSttPageSize = pStPage->GetNext()->Frm().SSize(); + } + else + { + aSttPageSize = pStPage->Frm().SSize(); + } + } + Size aNxtPageSize; + if ( pNxtPage ) + { + if ( pNxtPage->IsEmptyPage() ) + { + if ( pNxtPage->GetPhyPageNum() % 2 == 0 ) + aNxtPageSize = pNxtPage->GetPrev()->Frm().SSize(); + else + aNxtPageSize = pNxtPage->GetNext()->Frm().SSize(); + } + else + { + aNxtPageSize = pNxtPage->Frm().SSize(); + } + } + + if( !pStPage ) + { + nMaxColSz = 2 * aNxtPageSize.Width(); + nMaxRowSz = aNxtPageSize.Height(); + } + else if( !pNxtPage ) + { + nMaxColSz = 2 * aSttPageSize.Width(); + nMaxRowSz = aSttPageSize.Height(); + } + else + { + nMaxColSz = aNxtPageSize.Width() + aSttPageSize.Width(); + nMaxRowSz = Max( aNxtPageSize.Height(), aSttPageSize.Height() ); + } + + // den MapMode einstellen + aMapMode.SetOrigin( Point() ); + { + Fraction aScX( aPrtSize.Width(), nMaxColSz ); + Fraction aScY( aPrtSize.Height(), nMaxRowSz ); + if( aScX < aScY ) + aScY = aScX; + + { + // für Drawing, damit diese ihre Objekte vernünftig Painten + // können, auf "glatte" Prozentwerte setzen + aScY *= Fraction( 1000, 1 ); + long nTmp = (long)aScY; + if( 1 < nTmp ) + --nTmp; + else + nTmp = 1; + aScY = Fraction( nTmp, 1000 ); + } + + aMapMode.SetScaleY( aScY ); + aMapMode.SetScaleX( aScY ); + } + + Size aTmpPrtSize( pPrinter->PixelToLogic( pPrinter->GetPaperSizePixel(), aMapMode ) ); + + // calculate start point for equal border on all sides + Point aSttPt( (aTmpPrtSize.Width() - nMaxColSz) / 2, + (aTmpPrtSize.Height() - nMaxRowSz) / 2 ); + for( int nC = 0; nC < 2; ++nC ) + { + if( pStPage ) + { + aShell.Imp()->SetFirstVisPageInvalid(); + aShell.aVisArea = pStPage->Frm(); + + Point aPos( aSttPt ); + aPos -= aShell.aVisArea.Pos(); +// aPos -= aPrtOff; + aMapMode.SetOrigin( aPos ); + pPrinter->SetMapMode( aMapMode ); + pStPage->GetUpper()->Paint( pStPage->Frm() ); + } + + pStPage = pNxtPage; + aSttPt.X() += aTmpPrtSize.Width() / 2; + } + + SwPaintQueue::Repaint(); + + //!! applying/modifying view options and formatting the document should now only be done in getRendererCount! + + pFntCache->Flush(); + + // restore settings of OutputDevice (should be done always now since the + // output device is now provided by a call from outside the Writer) + pPrinter->Pop(); } + +/* vim: set noet sw=4 ts=4: */