tdf#161541 sd: fix the orientation of handouts on the printed page
Change-Id: I1896674ab317fcbcfe2ebbe9ea21dcc36c203328 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178274 Reviewed-by: Nagy Tibor <tibor.nagy.extern@allotropia.de> Tested-by: Jenkins
This commit is contained in:
@@ -348,7 +348,7 @@ public:
|
|||||||
::tools::Rectangle GetTitleRect() const;
|
::tools::Rectangle GetTitleRect() const;
|
||||||
::tools::Rectangle GetLayoutRect() const;
|
::tools::Rectangle GetLayoutRect() const;
|
||||||
|
|
||||||
static void CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< ::tools::Rectangle >& rAreas );
|
static void CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< ::tools::Rectangle >& rAreas, Orientation eOrient );
|
||||||
|
|
||||||
/** Set the "precious" flag to the given value.
|
/** Set the "precious" flag to the given value.
|
||||||
*/
|
*/
|
||||||
|
@@ -840,7 +840,9 @@ void SdPage::CreateTitleAndLayout(bool bInit, bool bCreate )
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector< ::tools::Rectangle > aAreas;
|
std::vector< ::tools::Rectangle > aAreas;
|
||||||
CalculateHandoutAreas( static_cast< SdDrawDocument& >(getSdrModelFromSdrPage()), pMasterPage->GetAutoLayout(), false, aAreas );
|
CalculateHandoutAreas(static_cast<SdDrawDocument&>(getSdrModelFromSdrPage()),
|
||||||
|
pMasterPage->GetAutoLayout(), false, aAreas,
|
||||||
|
pMasterPage->GetOrientation());
|
||||||
|
|
||||||
const bool bSkip = pMasterPage->GetAutoLayout() == AUTOLAYOUT_HANDOUT3;
|
const bool bSkip = pMasterPage->GetAutoLayout() == AUTOLAYOUT_HANDOUT3;
|
||||||
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
|
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
|
||||||
@@ -2917,7 +2919,8 @@ bool SdPage::RestoreDefaultText( SdrObject* pObj )
|
|||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SdPage::CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< ::tools::Rectangle >& rAreas )
|
void SdPage::CalculateHandoutAreas(SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal,
|
||||||
|
std::vector<::tools::Rectangle>& rAreas, Orientation eOrient)
|
||||||
{
|
{
|
||||||
SdPage& rHandoutMaster = *rModel.GetMasterSdPage( 0, PageKind::Handout );
|
SdPage& rHandoutMaster = *rModel.GetMasterSdPage( 0, PageKind::Handout );
|
||||||
|
|
||||||
@@ -2933,182 +2936,145 @@ void SdPage::CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout,
|
|||||||
const sal_uInt16* pOffsets = aOffsets[0];
|
const sal_uInt16* pOffsets = aOffsets[0];
|
||||||
|
|
||||||
Size aArea = rHandoutMaster.GetSize();
|
Size aArea = rHandoutMaster.GetSize();
|
||||||
const bool bLandscape = aArea.Width() > aArea.Height();
|
const bool bLandscape = aArea.Width() > aArea.Height() || eOrient == Orientation::Landscape;
|
||||||
|
|
||||||
if( eLayout == AUTOLAYOUT_NONE )
|
if ((eOrient == Orientation::Landscape && aArea.Width() < aArea.Height())
|
||||||
|
|| (eOrient == Orientation::Portrait && aArea.Width() > aArea.Height()))
|
||||||
{
|
{
|
||||||
// use layout from handout master
|
::tools::Long nTmp = aArea.Width();
|
||||||
SdrObjListIter aShapeIter(&rHandoutMaster);
|
aArea.setWidth(aArea.Height());
|
||||||
|
aArea.setHeight(nTmp);
|
||||||
std::vector< ::tools::Rectangle > vSlidesAreas;
|
|
||||||
while ( aShapeIter.IsMore() )
|
|
||||||
{
|
|
||||||
SdrPageObj* pPageObj = dynamic_cast<SdrPageObj*>( aShapeIter.Next() );
|
|
||||||
// get slide rectangles
|
|
||||||
if (pPageObj)
|
|
||||||
vSlidesAreas.push_back( pPageObj->GetCurrentBoundRect() );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !bHorizontal || vSlidesAreas.size() < 4 )
|
|
||||||
{ // top to bottom, then right
|
|
||||||
rAreas.swap( vSlidesAreas );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // left to right, then down
|
|
||||||
switch ( vSlidesAreas.size() )
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
pOffsets = aOffsets[2];
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
[[fallthrough]];
|
|
||||||
case 6:
|
|
||||||
pOffsets = aOffsets[ bLandscape ? 3 : 1 ];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
pOffsets = aOffsets[4];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
rAreas.resize( static_cast<size_t>(vSlidesAreas.size()) );
|
|
||||||
|
|
||||||
for( const ::tools::Rectangle& rRect : vSlidesAreas )
|
|
||||||
{
|
|
||||||
rAreas[*pOffsets++] = rRect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (eLayout == AUTOLAYOUT_NONE)
|
||||||
|
eLayout = rHandoutMaster.GetAutoLayout();
|
||||||
|
|
||||||
|
const ::tools::Long nGapW = 1000; // gap is 1cm
|
||||||
|
const ::tools::Long nGapH = 1000;
|
||||||
|
|
||||||
|
::tools::Long nLeftBorder = rHandoutMaster.GetLeftBorder();
|
||||||
|
::tools::Long nRightBorder = rHandoutMaster.GetRightBorder();
|
||||||
|
::tools::Long nTopBorder = rHandoutMaster.GetUpperBorder();
|
||||||
|
::tools::Long nBottomBorder = rHandoutMaster.GetLowerBorder();
|
||||||
|
|
||||||
|
const ::tools::Long nHeaderFooterHeight = static_cast< ::tools::Long >( (aArea.Height() - nTopBorder - nLeftBorder) * 0.05 );
|
||||||
|
|
||||||
|
nTopBorder += nHeaderFooterHeight;
|
||||||
|
nBottomBorder += nHeaderFooterHeight;
|
||||||
|
|
||||||
|
::tools::Long nX = nGapW + nLeftBorder;
|
||||||
|
::tools::Long nY = nGapH + nTopBorder;
|
||||||
|
|
||||||
|
aArea.AdjustWidth( -(nGapW * 2 + nLeftBorder + nRightBorder) );
|
||||||
|
aArea.AdjustHeight( -(nGapH * 2 + nTopBorder + nBottomBorder) );
|
||||||
|
|
||||||
|
sal_uInt16 nColCnt = 0, nRowCnt = 0;
|
||||||
|
switch ( eLayout )
|
||||||
{
|
{
|
||||||
const ::tools::Long nGapW = 1000; // gap is 1cm
|
case AUTOLAYOUT_HANDOUT1:
|
||||||
const ::tools::Long nGapH = 1000;
|
nColCnt = 1; nRowCnt = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
::tools::Long nLeftBorder = rHandoutMaster.GetLeftBorder();
|
case AUTOLAYOUT_HANDOUT2:
|
||||||
::tools::Long nRightBorder = rHandoutMaster.GetRightBorder();
|
if( bLandscape )
|
||||||
::tools::Long nTopBorder = rHandoutMaster.GetUpperBorder();
|
|
||||||
::tools::Long nBottomBorder = rHandoutMaster.GetLowerBorder();
|
|
||||||
|
|
||||||
const ::tools::Long nHeaderFooterHeight = static_cast< ::tools::Long >( (aArea.Height() - nTopBorder - nLeftBorder) * 0.05 );
|
|
||||||
|
|
||||||
nTopBorder += nHeaderFooterHeight;
|
|
||||||
nBottomBorder += nHeaderFooterHeight;
|
|
||||||
|
|
||||||
::tools::Long nX = nGapW + nLeftBorder;
|
|
||||||
::tools::Long nY = nGapH + nTopBorder;
|
|
||||||
|
|
||||||
aArea.AdjustWidth( -(nGapW * 2 + nLeftBorder + nRightBorder) );
|
|
||||||
aArea.AdjustHeight( -(nGapH * 2 + nTopBorder + nBottomBorder) );
|
|
||||||
|
|
||||||
sal_uInt16 nColCnt = 0, nRowCnt = 0;
|
|
||||||
switch ( eLayout )
|
|
||||||
{
|
|
||||||
case AUTOLAYOUT_HANDOUT1:
|
|
||||||
nColCnt = 1; nRowCnt = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AUTOLAYOUT_HANDOUT2:
|
|
||||||
if( bLandscape )
|
|
||||||
{
|
|
||||||
nColCnt = 2; nRowCnt = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nColCnt = 1; nRowCnt = 2;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AUTOLAYOUT_HANDOUT3:
|
|
||||||
if( bLandscape )
|
|
||||||
{
|
|
||||||
nColCnt = 3; nRowCnt = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nColCnt = 2; nRowCnt = 3;
|
|
||||||
}
|
|
||||||
pOffsets = aOffsets[ bLandscape ? 1 : 0 ];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AUTOLAYOUT_HANDOUT4:
|
|
||||||
nColCnt = 2; nRowCnt = 2;
|
|
||||||
pOffsets = aOffsets[ bHorizontal ? 0 : 2 ];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AUTOLAYOUT_HANDOUT6:
|
|
||||||
if( bLandscape )
|
|
||||||
{
|
|
||||||
nColCnt = 3; nRowCnt = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nColCnt = 2; nRowCnt = 3;
|
|
||||||
}
|
|
||||||
if( !bHorizontal )
|
|
||||||
pOffsets = aOffsets[ bLandscape ? 1 : 3 ];
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
case AUTOLAYOUT_HANDOUT9:
|
|
||||||
nColCnt = 3; nRowCnt = 3;
|
|
||||||
|
|
||||||
if( !bHorizontal )
|
|
||||||
pOffsets = aOffsets[4];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
rAreas.resize(static_cast<size_t>(nColCnt) * nRowCnt);
|
|
||||||
|
|
||||||
Size aPartArea, aSize;
|
|
||||||
aPartArea.setWidth( (aArea.Width() - ((nColCnt-1) * nGapW) ) / nColCnt );
|
|
||||||
aPartArea.setHeight( (aArea.Height() - ((nRowCnt-1) * nGapH) ) / nRowCnt );
|
|
||||||
|
|
||||||
SdrPage* pFirstPage = rModel.GetMasterSdPage(0, PageKind::Standard);
|
|
||||||
if (pFirstPage && pFirstPage->GetWidth() && pFirstPage->GetHeight())
|
|
||||||
{
|
|
||||||
// scale actual size into handout rect
|
|
||||||
double fScale = static_cast<double>(aPartArea.Width()) / static_cast<double>(pFirstPage->GetWidth());
|
|
||||||
|
|
||||||
aSize.setHeight( static_cast<::tools::Long>(fScale * pFirstPage->GetHeight() ) );
|
|
||||||
if( aSize.Height() > aPartArea.Height() )
|
|
||||||
{
|
{
|
||||||
fScale = static_cast<double>(aPartArea.Height()) / static_cast<double>(pFirstPage->GetHeight());
|
nColCnt = 2; nRowCnt = 1;
|
||||||
aSize.setHeight( aPartArea.Height() );
|
|
||||||
aSize.setWidth( static_cast<::tools::Long>(fScale * pFirstPage->GetWidth()) );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aSize.setWidth( aPartArea.Width() );
|
nColCnt = 1; nRowCnt = 2;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
nX += (aPartArea.Width() - aSize.Width()) / 2;
|
case AUTOLAYOUT_HANDOUT3:
|
||||||
nY += (aPartArea.Height()- aSize.Height())/ 2;
|
if( bLandscape )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
aSize = aPartArea;
|
|
||||||
}
|
|
||||||
|
|
||||||
Point aPos( nX, nY );
|
|
||||||
|
|
||||||
const bool bRTL = rModel.GetDefaultWritingMode() == css::text::WritingMode_RL_TB;
|
|
||||||
|
|
||||||
const ::tools::Long nOffsetX = (aPartArea.Width() + nGapW) * (bRTL ? -1 : 1);
|
|
||||||
const ::tools::Long nOffsetY = aPartArea.Height() + nGapH;
|
|
||||||
const ::tools::Long nStartX = bRTL ? nOffsetX*(1 - nColCnt) + nX : nX;
|
|
||||||
|
|
||||||
for(sal_uInt16 nRow = 0; nRow < nRowCnt; nRow++)
|
|
||||||
{
|
|
||||||
aPos.setX( nStartX );
|
|
||||||
for(sal_uInt16 nCol = 0; nCol < nColCnt; nCol++)
|
|
||||||
{
|
{
|
||||||
rAreas[*pOffsets++] = ::tools::Rectangle(aPos, aSize);
|
nColCnt = 3; nRowCnt = 2;
|
||||||
aPos.AdjustX(nOffsetX );
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nColCnt = 2; nRowCnt = 3;
|
||||||
|
}
|
||||||
|
pOffsets = aOffsets[ bLandscape ? 1 : 0 ];
|
||||||
|
break;
|
||||||
|
|
||||||
aPos.AdjustY(nOffsetY );
|
case AUTOLAYOUT_HANDOUT4:
|
||||||
|
nColCnt = 2; nRowCnt = 2;
|
||||||
|
pOffsets = aOffsets[ bHorizontal ? 0 : 2 ];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AUTOLAYOUT_HANDOUT6:
|
||||||
|
if( bLandscape )
|
||||||
|
{
|
||||||
|
nColCnt = 3; nRowCnt = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nColCnt = 2; nRowCnt = 3;
|
||||||
|
}
|
||||||
|
if( !bHorizontal )
|
||||||
|
pOffsets = aOffsets[ bLandscape ? 1 : 3 ];
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
case AUTOLAYOUT_HANDOUT9:
|
||||||
|
nColCnt = 3; nRowCnt = 3;
|
||||||
|
|
||||||
|
if( !bHorizontal )
|
||||||
|
pOffsets = aOffsets[4];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rAreas.resize(static_cast<size_t>(nColCnt) * nRowCnt);
|
||||||
|
|
||||||
|
Size aPartArea, aSize;
|
||||||
|
aPartArea.setWidth( (aArea.Width() - ((nColCnt-1) * nGapW) ) / nColCnt );
|
||||||
|
aPartArea.setHeight( (aArea.Height() - ((nRowCnt-1) * nGapH) ) / nRowCnt );
|
||||||
|
|
||||||
|
SdrPage* pFirstPage = rModel.GetMasterSdPage(0, PageKind::Standard);
|
||||||
|
if (pFirstPage && pFirstPage->GetWidth() && pFirstPage->GetHeight())
|
||||||
|
{
|
||||||
|
// scale actual size into handout rect
|
||||||
|
double fScale = static_cast<double>(aPartArea.Width()) / static_cast<double>(pFirstPage->GetWidth());
|
||||||
|
|
||||||
|
aSize.setHeight( static_cast<::tools::Long>(fScale * pFirstPage->GetHeight() ) );
|
||||||
|
if( aSize.Height() > aPartArea.Height() )
|
||||||
|
{
|
||||||
|
fScale = static_cast<double>(aPartArea.Height()) / static_cast<double>(pFirstPage->GetHeight());
|
||||||
|
aSize.setHeight( aPartArea.Height() );
|
||||||
|
aSize.setWidth( static_cast<::tools::Long>(fScale * pFirstPage->GetWidth()) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aSize.setWidth( aPartArea.Width() );
|
||||||
|
}
|
||||||
|
|
||||||
|
nX += (aPartArea.Width() - aSize.Width()) / 2;
|
||||||
|
nY += (aPartArea.Height()- aSize.Height())/ 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aSize = aPartArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point aPos( nX, nY );
|
||||||
|
|
||||||
|
const bool bRTL = rModel.GetDefaultWritingMode() == css::text::WritingMode_RL_TB;
|
||||||
|
|
||||||
|
const ::tools::Long nOffsetX = (aPartArea.Width() + nGapW) * (bRTL ? -1 : 1);
|
||||||
|
const ::tools::Long nOffsetY = aPartArea.Height() + nGapH;
|
||||||
|
const ::tools::Long nStartX = bRTL ? nOffsetX*(1 - nColCnt) + nX : nX;
|
||||||
|
|
||||||
|
for(sal_uInt16 nRow = 0; nRow < nRowCnt; nRow++)
|
||||||
|
{
|
||||||
|
aPos.setX( nStartX );
|
||||||
|
for(sal_uInt16 nCol = 0; nCol < nColCnt; nCol++)
|
||||||
|
{
|
||||||
|
rAreas[*pOffsets++] = ::tools::Rectangle(aPos, aSize);
|
||||||
|
aPos.AdjustX(nOffsetX );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aPos.AdjustY(nOffsetY );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1262,6 +1262,21 @@ namespace {
|
|||||||
{
|
{
|
||||||
SdPage& rHandoutPage (*rDocument.GetSdPage(0, PageKind::Handout));
|
SdPage& rHandoutPage (*rDocument.GetSdPage(0, PageKind::Handout));
|
||||||
|
|
||||||
|
Size aPageSize(rHandoutPage.GetSize());
|
||||||
|
Size aPrintPageSize = rPrinter.GetPrintPageSize();
|
||||||
|
|
||||||
|
if ((aPageSize.Width() < aPageSize.Height()
|
||||||
|
&& aPrintPageSize.Width() > aPrintPageSize.Height())
|
||||||
|
|| (aPageSize.Width() > aPageSize.Height()
|
||||||
|
&& aPrintPageSize.Width() < aPrintPageSize.Height()))
|
||||||
|
{
|
||||||
|
::tools::Long nTmp = aPageSize.Width();
|
||||||
|
aPageSize.setWidth(aPageSize.Height());
|
||||||
|
aPageSize.setHeight(nTmp);
|
||||||
|
|
||||||
|
rHandoutPage.SetSize(aPageSize);
|
||||||
|
}
|
||||||
|
|
||||||
Reference< css::beans::XPropertySet > xHandoutPage( rHandoutPage.getUnoPage(), UNO_QUERY );
|
Reference< css::beans::XPropertySet > xHandoutPage( rHandoutPage.getUnoPage(), UNO_QUERY );
|
||||||
static constexpr OUString sPageNumber( u"Number"_ustr );
|
static constexpr OUString sPageNumber( u"Number"_ustr );
|
||||||
|
|
||||||
@@ -1818,8 +1833,14 @@ private:
|
|||||||
|
|
||||||
const bool bDrawLines (eLayout == AUTOLAYOUT_HANDOUT3);
|
const bool bDrawLines (eLayout == AUTOLAYOUT_HANDOUT3);
|
||||||
|
|
||||||
|
Size aHandoutPageSize = pHandout->GetSize();
|
||||||
|
lcl_AdjustPageSize(aHandoutPageSize, mpPrinter->GetPrintPageSize());
|
||||||
|
Orientation eOrient = aHandoutPageSize.Width() > aHandoutPageSize.Height()
|
||||||
|
? Orientation::Landscape
|
||||||
|
: Orientation::Portrait;
|
||||||
|
|
||||||
std::vector< ::tools::Rectangle > aAreas;
|
std::vector< ::tools::Rectangle > aAreas;
|
||||||
SdPage::CalculateHandoutAreas( rModel, eLayout, bHandoutHorizontal, aAreas );
|
SdPage::CalculateHandoutAreas( rModel, eLayout, bHandoutHorizontal, aAreas, eOrient );
|
||||||
|
|
||||||
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
|
std::vector< ::tools::Rectangle >::iterator iter( aAreas.begin() );
|
||||||
while( iter != aAreas.end() )
|
while( iter != aAreas.end() )
|
||||||
@@ -2062,28 +2083,18 @@ private:
|
|||||||
SdPage& rMaster (dynamic_cast<SdPage&>(rHandoutPage.TRG_GetMasterPage()));
|
SdPage& rMaster (dynamic_cast<SdPage&>(rHandoutPage.TRG_GetMasterPage()));
|
||||||
rInfo.meOrientation = rMaster.GetOrientation();
|
rInfo.meOrientation = rMaster.GetOrientation();
|
||||||
|
|
||||||
const Size aPaperSize (rInfo.mpPrinter->GetPaperSize());
|
Size aPaperSize (rInfo.mpPrinter->GetPaperSize());
|
||||||
if( (rInfo.meOrientation == Orientation::Landscape &&
|
lcl_AdjustPageSize(aPaperSize, rInfo.mpPrinter->GetPrintPageSize());
|
||||||
(aPaperSize.Width() < aPaperSize.Height()))
|
maPrintSize = awt::Size(aPaperSize.Width(),aPaperSize.Height());
|
||||||
||
|
|
||||||
(rInfo.meOrientation == Orientation::Portrait &&
|
|
||||||
(aPaperSize.Width() > aPaperSize.Height()))
|
|
||||||
)
|
|
||||||
{
|
|
||||||
maPrintSize = awt::Size(aPaperSize.Height(), aPaperSize.Width());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
maPrintSize = awt::Size(aPaperSize.Width(), aPaperSize.Height());
|
|
||||||
}
|
|
||||||
|
|
||||||
MapMode aMap (rInfo.maMap);
|
MapMode aMap (rInfo.maMap);
|
||||||
const Point aPageOfs (rInfo.mpPrinter->GetPageOffset());
|
const Point aPageOfs (rInfo.mpPrinter->GetPageOffset());
|
||||||
|
|
||||||
if ( bScalePage )
|
if ( bScalePage )
|
||||||
{
|
{
|
||||||
const Size aPageSize (rHandoutPage.GetSize());
|
Size aPageSize (rHandoutPage.GetSize());
|
||||||
const Size aPrintSize (rInfo.mpPrinter->GetOutputSize());
|
Size aPrintSize (rInfo.mpPrinter->GetOutputSize());
|
||||||
|
lcl_AdjustPageSize(aPageSize, aPrintSize);
|
||||||
|
|
||||||
const double fHorz = static_cast<double>(aPrintSize.Width()) / aPageSize.Width();
|
const double fHorz = static_cast<double>(aPrintSize.Width()) / aPageSize.Width();
|
||||||
const double fVert = static_cast<double>(aPrintSize.Height()) / aPageSize.Height();
|
const double fVert = static_cast<double>(aPrintSize.Height()) / aPageSize.Height();
|
||||||
|
@@ -659,8 +659,6 @@ PrintDialog::PrintDialog(weld::Window* i_pWindow, std::shared_ptr<PrinterControl
|
|||||||
|
|
||||||
initFromMultiPageSetup( maPController->getMultipage() );
|
initFromMultiPageSetup( maPController->getMultipage() );
|
||||||
|
|
||||||
updatePageSize(mxOrientationBox->get_active());
|
|
||||||
|
|
||||||
// setup optional UI options set by application
|
// setup optional UI options set by application
|
||||||
setupOptionalUI();
|
setupOptionalUI();
|
||||||
|
|
||||||
@@ -1207,23 +1205,10 @@ void PrintDialog::updateNup( bool i_bMayUseCache )
|
|||||||
aMPS.aPaperSize = maNupPortraitSize;
|
aMPS.aPaperSize = maNupPortraitSize;
|
||||||
else // automatic mode
|
else // automatic mode
|
||||||
{
|
{
|
||||||
updatePageSize(mxOrientationBox->get_active());
|
|
||||||
Size aPrintPageSize = maPController->getPrinter()->GetPrintPageSize();
|
|
||||||
|
|
||||||
// get size of first real page to see if it is portrait or landscape
|
// get size of first real page to see if it is portrait or landscape
|
||||||
// we assume same page sizes for all the pages for this
|
// we assume same page sizes for all the pages for this
|
||||||
Size aPageSize = getJobPageSize();
|
Size aPageSize = getJobPageSize();
|
||||||
|
|
||||||
if ((aPageSize.Width() < aPageSize.Height()
|
|
||||||
&& aPrintPageSize.Width() > aPrintPageSize.Height())
|
|
||||||
|| (aPageSize.Width() > aPageSize.Height()
|
|
||||||
&& aPrintPageSize.Width() < aPrintPageSize.Height()))
|
|
||||||
{
|
|
||||||
tools::Long nTmp = aPageSize.Width();
|
|
||||||
aPageSize.setWidth(aPageSize.Height());
|
|
||||||
aPageSize.setHeight(nTmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
Size aMultiSize( aPageSize.Width() * nCols, aPageSize.Height() * nRows );
|
Size aMultiSize( aPageSize.Width() * nCols, aPageSize.Height() * nRows );
|
||||||
if( aMultiSize.Width() > aMultiSize.Height() ) // fits better on landscape
|
if( aMultiSize.Width() > aMultiSize.Height() ) // fits better on landscape
|
||||||
{
|
{
|
||||||
@@ -1936,6 +1921,7 @@ IMPL_LINK(PrintDialog, ToggleHdl, weld::Toggleable&, rButton, void)
|
|||||||
{
|
{
|
||||||
mxOrientationBox->set_sensitive( true );
|
mxOrientationBox->set_sensitive( true );
|
||||||
mxOrientationBox->set_active( ORIENTATION_AUTOMATIC );
|
mxOrientationBox->set_active( ORIENTATION_AUTOMATIC );
|
||||||
|
updatePageSize(mxOrientationBox->get_active());
|
||||||
enableNupControls( true );
|
enableNupControls( true );
|
||||||
updateNupFromPages();
|
updateNupFromPages();
|
||||||
}
|
}
|
||||||
@@ -2020,6 +2006,7 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void )
|
|||||||
maFirstPageSize = Size();
|
maFirstPageSize = Size();
|
||||||
|
|
||||||
updateOrientationBox();
|
updateOrientationBox();
|
||||||
|
updatePageSize(mxOrientationBox->get_active());
|
||||||
|
|
||||||
// update text fields
|
// update text fields
|
||||||
mxOKButton->set_label(maPrintText);
|
mxOKButton->set_label(maPrintText);
|
||||||
@@ -2037,10 +2024,10 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void )
|
|||||||
|
|
||||||
setPaperSizes();
|
setPaperSizes();
|
||||||
updateOrientationBox();
|
updateOrientationBox();
|
||||||
|
updatePageSize(mxOrientationBox->get_active());
|
||||||
maUpdatePreviewIdle.Start();
|
maUpdatePreviewIdle.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePageSize(mxOrientationBox->get_active());
|
|
||||||
setupPaperSidesBox();
|
setupPaperSidesBox();
|
||||||
}
|
}
|
||||||
else if ( &rBox == mxPaperSidesBox.get() )
|
else if ( &rBox == mxPaperSidesBox.get() )
|
||||||
@@ -2084,10 +2071,6 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void )
|
|||||||
|
|
||||||
updatePageSize(mxOrientationBox->get_active());
|
updatePageSize(mxOrientationBox->get_active());
|
||||||
|
|
||||||
int nOrientation = mxOrientationBox->get_active();
|
|
||||||
if (nOrientation != ORIENTATION_AUTOMATIC)
|
|
||||||
setPaperOrientation(static_cast<Orientation>(nOrientation - 1), true);
|
|
||||||
|
|
||||||
maUpdatePreviewNoCacheIdle.Start();
|
maUpdatePreviewNoCacheIdle.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2219,6 +2202,8 @@ IMPL_LINK( PrintDialog, UIOption_SelectHdl, weld::ComboBox&, i_rBox, void )
|
|||||||
|
|
||||||
checkOptionalControlDependencies();
|
checkOptionalControlDependencies();
|
||||||
|
|
||||||
|
updatePageSize(mxOrientationBox->get_active());
|
||||||
|
|
||||||
// update preview and page settings
|
// update preview and page settings
|
||||||
maUpdatePreviewNoCacheIdle.Start();
|
maUpdatePreviewNoCacheIdle.Start();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user