From 9fd97266ce7dbeac33c93b6dace69d64c02d222c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Wed, 23 Apr 2014 15:22:13 +0100 Subject: [PATCH] Related: fdo#36815 center scaled comment page vertically so comments at the top of the page don't get clipped off the true printable area Change-Id: Icb796c901372437b276e7ce4e31c08e0bf2ec250 --- sw/source/core/view/vprint.cxx | 56 +++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx index b680e52..0022fff 100644 --- a/sw/source/core/view/vprint.cxx +++ b/sw/source/core/view/vprint.cxx @@ -455,26 +455,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( // output device is now provided by a call from outside the Writer) pOutDev->Push(); - // fdo#36815 for comments in margins print to a metafile - // and then scale that metafile down so that the comments - // will fit on the real page, and replay that scaled - // output to the real outputdevice - GDIMetaFile *pOrigRecorder(NULL); - GDIMetaFile *pMetaFile(NULL); - sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); - if (nPostItMode == POSTITS_INMARGINS) - { - //get and disable the existing recorder - pOrigRecorder = pOutDev->GetConnectMetaFile(); - pOutDev->SetConnectMetaFile(NULL); - // turn off output to the device - pOutDev->EnableOutput(false); - // just record the rendering commands to the metafile - // instead - pMetaFile = new GDIMetaFile; - pMetaFile->Record(pOutDev); - } - // Print/PDF export for (multi-)selection has already generated a // temporary document with the selected text. // (see XRenderable implementation in unotxdoc.cxx) @@ -490,6 +470,8 @@ sal_Bool SwViewShell::PrintOrPDFExport( pDrawView->SetBufferedOverlayAllowed( false ); } + sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); + { // additional scope so that the CurrShell is reset before destroying the shell SET_CURR_SHELL( pShell ); @@ -537,22 +519,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( pPostItManager->CalcRects(); pPostItManager->LayoutPostIts(); pPostItManager->DrawNotesForPage(pOutDev, nPage-1); - - //Now scale the recorded page down so the notes - //will fit in the final page - pMetaFile->Stop(); - pMetaFile->WindStart(); - double fScale = 0.75; - pMetaFile->Scale( fScale, fScale ); - pMetaFile->WindStart(); - - //Enable output the the device again - pOutDev->EnableOutput(true); - //Restore the original recorder - pOutDev->SetConnectMetaFile(pOrigRecorder); - //play back the scaled page - pMetaFile->Play(pOutDev); - delete pMetaFile; } } @@ -562,6 +528,24 @@ sal_Bool SwViewShell::PrintOrPDFExport( // output device is now provided by a call from outside the Writer) pOutDev->Pop(); + // fdo#36815 for comments in margins get the metafile we are printing to + // and then scale and vertically center that metafile down so that the + // comments will fit on the real page + GDIMetaFile *pRecorder = pOutDev->GetConnectMetaFile(); + if (nPostItMode == POSTITS_INMARGINS && pRecorder) + { + pRecorder->Stop(); + pRecorder->WindStart(); + double fScale = 0.75; + long nOrigHeight = pOutDev->GetOutputSize().Height(); + long nNewHeight = nOrigHeight*fScale; + long nShiftY = (nOrigHeight-nNewHeight)/2; + pRecorder->Scale(fScale, fScale); + pRecorder->WindStart(); + pRecorder->Move(0, nShiftY, pOutDev->ImplGetDPIX(), pOutDev->ImplGetDPIY()); + pRecorder->WindStart(); + } + return sal_True; } -- 1.9.0