summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2014-05-15 12:38:10 +0100
committerCaolán McNamara <caolanm@redhat.com>2014-05-15 12:40:04 +0100
commitc1cad9bbc3d2721304e7ac592b5d7396ad1a7c98 (patch)
treec17ba8841ac75bff16daab37260b6875cf671fc2
parentc008e4a4129f71b2d7ea5960534d90be21342bc0 (diff)
Resolves: fdo#78204 adjust note icons on comments-in-margins case
the page has been scaled by 75% and vertically centered so the page positions need to be also adjusted. Change-Id: I7ab6b4956933ba444441c857e78aee8e5c1cf97a
-rw-r--r--sw/inc/EnhancedPDFExportHelper.hxx11
-rw-r--r--sw/source/core/text/EnhancedPDFExportHelper.cxx108
-rw-r--r--sw/source/core/uibase/uno/unotxdoc.cxx9
3 files changed, 106 insertions, 22 deletions
diff --git a/sw/inc/EnhancedPDFExportHelper.hxx b/sw/inc/EnhancedPDFExportHelper.hxx
index d8c4ef45b4be..d2363177dadb 100644
--- a/sw/inc/EnhancedPDFExportHelper.hxx
+++ b/sw/inc/EnhancedPDFExportHelper.hxx
@@ -36,6 +36,8 @@ namespace vcl
class OutputDevice;
class SwFrm;
class SwLinePortion;
+class SwPageFrm;
+class SwPrintData;
class SwTxtPainter;
class SwEditShell;
class StringRangeEnumerator;
@@ -207,6 +209,8 @@ class SwEnhancedPDFExportHelper
bool mbSkipEmptyPages;
bool mbEditEngineOnly;
+ const SwPrintData& mrPrintData;
+
static TableColumnsMap aTableColumnsMap;
static LinkIdMap aLinkIdMap;
static NumListIdMap aNumListIdMap;
@@ -229,7 +233,8 @@ class SwEnhancedPDFExportHelper
OutputDevice& rOut,
const OUString& rPageRange,
bool bSkipEmptyPages,
- bool bEditEngineOnly );
+ bool bEditEngineOnly,
+ const SwPrintData& rPrintData );
~SwEnhancedPDFExportHelper();
@@ -240,6 +245,10 @@ class SwEnhancedPDFExportHelper
static FrmTagIdMap& GetFrmTagIdMap() { return aFrmTagIdMap; }
static LanguageType GetDefaultLanguage() {return eLanguageDefault; }
+
+ //scale and position rRectangle if we're scaling due to notes in margins.
+ Rectangle SwRectToPDFRect(const SwPageFrm* pCurrPage,
+ const Rectangle& rRectangle) const;
};
#endif
diff --git a/sw/source/core/text/EnhancedPDFExportHelper.cxx b/sw/source/core/text/EnhancedPDFExportHelper.cxx
index f310c5f4ef21..6afa51d3fdc7 100644
--- a/sw/source/core/text/EnhancedPDFExportHelper.cxx
+++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx
@@ -69,6 +69,7 @@
#include <itrpaint.hxx>
#include <i18nlangtag/languagetag.hxx>
#include <IMark.hxx>
+#include <printdata.hxx>
#include <SwNodeNum.hxx>
#include <switerator.hxx>
#include <stack>
@@ -677,7 +678,9 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType )
( pFrm->IsTabFrm() &&
!static_cast<const SwTabFrm*>(pFrm)->IsFollow() &&
!static_cast<const SwTabFrm*>(pFrm)->HasFollow() ) )
- mpPDFExtOutDevData->SetStructureBoundingBox( pFrm->Frm().SVRect() );
+ {
+ mpPDFExtOutDevData->SetStructureBoundingBox(pFrm->Frm().SVRect());
+ }
}
if ( bRowSpan )
@@ -1447,12 +1450,14 @@ SwEnhancedPDFExportHelper::SwEnhancedPDFExportHelper( SwEditShell& rSh,
OutputDevice& rOut,
const OUString& rPageRange,
bool bSkipEmptyPages,
- bool bEditEngineOnly )
+ bool bEditEngineOnly,
+ const SwPrintData& rPrintData )
: mrSh( rSh ),
mrOut( rOut ),
mpRangeEnum( 0 ),
mbSkipEmptyPages( bSkipEmptyPages ),
- mbEditEngineOnly( bEditEngineOnly )
+ mbEditEngineOnly( bEditEngineOnly ),
+ mrPrintData( rPrintData )
{
if ( !rPageRange.isEmpty() )
mpRangeEnum = new StringRangeEnumerator( rPageRange, 0, mrSh.GetPageCount()-1 );
@@ -1502,6 +1507,29 @@ SwEnhancedPDFExportHelper::~SwEnhancedPDFExportHelper()
delete mpRangeEnum;
}
+Rectangle SwEnhancedPDFExportHelper::SwRectToPDFRect(const SwPageFrm* pCurrPage,
+ const Rectangle& rRectangle) const
+{
+ sal_Int16 nPostItMode = mrPrintData.GetPrintPostIts();
+ if (nPostItMode != POSTITS_INMARGINS)
+ return rRectangle;
+ //the page has been scaled by 75% and vertically centered, so adjust these
+ //rectangles equivalently
+ Rectangle aRect(rRectangle);
+ Size aRectSize(aRect.GetSize());
+ double fScale = 0.75;
+ aRectSize.Width() = (aRectSize.Width() * fScale);
+ aRectSize.Height() = (aRectSize.Height() * fScale);
+ long nOrigHeight = pCurrPage->Frm().Height();
+ long nNewHeight = nOrigHeight*fScale;
+ long nShiftY = (nOrigHeight-nNewHeight)/2;
+ aRect.Left() = (aRect.Left() * fScale);
+ aRect.Top() = (aRect.Top() * fScale);
+ aRect.Move(0, nShiftY);
+ aRect.SetSize(aRectSize);
+ return aRect;
+}
+
void SwEnhancedPDFExportHelper::EnhancedPDFExport()
{
vcl::PDFExtOutDevData* pPDFExtOutDevData =
@@ -1555,6 +1583,8 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
{
// Link Rectangle
const SwRect& rNoteRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
// Link PageNums
std::vector<sal_Int32> aNotePageNums = CalcOutputPageNums( rNoteRect );
@@ -1580,7 +1610,8 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
aNote.Contents = pField->GetTxt();
// Link Export
- pPDFExtOutDevData->CreateNote( rNoteRect.SVRect(), aNote, aNotePageNums[nNumIdx] );
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rNoteRect.SVRect()));
+ pPDFExtOutDevData->CreateNote(aRect, aNote, aNotePageNums[nNumIdx]);
}
}
}
@@ -1632,6 +1663,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
aTmp.insert( aTmp.begin(), mrSh.SwCrsrShell::_GetCrsr()->begin(), mrSh.SwCrsrShell::_GetCrsr()->end() );
OSL_ENSURE( !aTmp.empty(), "Enhanced pdf export - rectangles are missing" );
+ const SwPageFrm* pSelectionPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Create the destination for internal links:
sal_Int32 nDestId = -1;
if ( bIntern )
@@ -1643,12 +1677,18 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Destination Rectangle
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
// Destination Export
if ( -1 != nDestPageNum )
- nDestId = pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ {
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
+ nDestId = pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
+ }
}
if ( !bIntern || -1 != nDestId )
@@ -1670,8 +1710,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
for ( size_t nNumIdx = 0; nNumIdx < aLinkPageNums.size(); ++nNumIdx )
{
// Link Export
+ Rectangle aRect(SwRectToPDFRect(pSelectionPage, rLinkRect.SVRect()));
const sal_Int32 nLinkId =
- pPDFExtOutDevData->CreateLink( rLinkRect.SVRect(), aLinkPageNums[nNumIdx] );
+ pPDFExtOutDevData->CreateLink(aRect, aLinkPageNums[nNumIdx]);
// Store link info for tagged pdf output:
const IdMapEntry aLinkEntry( rLinkRect, nLinkId );
@@ -1705,6 +1746,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
if ( RES_DRAWFRMFMT != pFrmFmt->Which() &&
SFX_ITEM_SET == pFrmFmt->GetAttrSet().GetItemState( RES_URL, true, &pItem ) )
{
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
OUString aURL( static_cast<const SwFmtURL*>(pItem)->GetURL() );
const bool bIntern = '#' == aURL[0];
@@ -1719,12 +1763,17 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Destination Rectangle
const SwRect& rDestRect = mrSh.GetCharRect();
+ pCurrPage = static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
// Destination Export
if ( -1 != nDestPageNum )
- nDestId = pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ {
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
+ nDestId = pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
+ }
}
if ( !bIntern || -1 != nDestId )
@@ -1738,8 +1787,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Link Export
for ( size_t nNumIdx = 0; nNumIdx < aLinkPageNums.size(); ++nNumIdx )
{
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, aLinkRect.SVRect()));
const sal_Int32 nLinkId =
- pPDFExtOutDevData->CreateLink( aLinkRect.SVRect(), aLinkPageNums[nNumIdx] );
+ pPDFExtOutDevData->CreateLink(aRect, aLinkPageNums[nNumIdx]);
// Connect Link and Destination:
if ( bIntern )
@@ -1801,13 +1851,16 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
mrSh.GotoRefMark( rRefName, pField->GetSubType(), pField->GetSeqNo() );
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage = static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
if ( -1 != nDestPageNum )
{
// Destination Export
- const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
+ const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
// #i44368# Links in Header/Footer
const SwPosition aPos( *pTNd );
@@ -1826,8 +1879,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
for ( size_t nNumIdx = 0; nNumIdx < aLinkPageNums.size(); ++nNumIdx )
{
// Link Export
+ aRect = SwRectToPDFRect(pCurrPage, rLinkRect.SVRect());
const sal_Int32 nLinkId =
- pPDFExtOutDevData->CreateLink( rLinkRect.SVRect(), aLinkPageNums[nNumIdx] );
+ pPDFExtOutDevData->CreateLink(aRect, aLinkPageNums[nNumIdx]);
// Store link info for tagged pdf output:
const IdMapEntry aLinkEntry( rLinkRect, nLinkId );
@@ -1893,14 +1947,18 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Destination Rectangle
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
for ( size_t nNumIdx = 0; nNumIdx < aLinkPageNums.size(); ++nNumIdx )
{
// Link Export
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, aLinkRect.SVRect()));
const sal_Int32 nLinkId =
- pPDFExtOutDevData->CreateLink( aLinkRect.SVRect(), aLinkPageNums[nNumIdx] );
+ pPDFExtOutDevData->CreateLink(aRect, aLinkPageNums[nNumIdx]);
// Store link info for tagged pdf output:
const IdMapEntry aLinkEntry( aLinkRect, nLinkId );
@@ -1908,8 +1966,9 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
if ( -1 != nDestPageNum )
{
+ aRect = SwRectToPDFRect(pCurrPage, rDestRect.SVRect());
// Destination Export
- const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest(rDestRect.SVRect(), nDestPageNum);
// Connect Link and Destination:
pPDFExtOutDevData->SetLinkDest( nLinkId, nDestId );
@@ -1954,14 +2013,18 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
mrSh.GotoOutline(i);
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
if ( -1 != nDestPageNum )
{
// Destination Export
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
const sal_Int32 nDestId =
- pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
// Outline entry text
const OUString& rEntry = mrSh.getIDocumentOutlineNodesAccess()->getOutlineText( i, true, false, false );
@@ -1999,12 +2062,18 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Destination Rectangle
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
// Destination Export
if ( -1 != nDestPageNum )
- pPDFExtOutDevData->CreateNamedDest( sBkName, rDestRect.SVRect(), nDestPageNum );
+ {
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
+ pPDFExtOutDevData->CreateNamedDest(sBkName, aRect, nDestPageNum);
+ }
}
mrSh.SwCrsrShell::ClearMark();
//<--- i56629
@@ -2030,22 +2099,26 @@ void SwEnhancedPDFExportHelper::EnhancedPDFExport()
// Destination Rectangle
const SwRect& rDestRect = mrSh.GetCharRect();
+ const SwPageFrm* pCurrPage =
+ static_cast<const SwPageFrm*>( mrSh.GetLayout()->Lower() );
+
// Destination PageNum
const sal_Int32 nDestPageNum = CalcOutputPageNum( rDestRect );
if ( -1 != nDestPageNum )
{
+ Rectangle aRect(SwRectToPDFRect(pCurrPage, rDestRect.SVRect()));
if ( aIBeg->nLinkId != -1 )
{
// Destination Export
- const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest( rDestRect.SVRect(), nDestPageNum );
+ const sal_Int32 nDestId = pPDFExtOutDevData->CreateDest(aRect, nDestPageNum);
// Connect Link and Destination:
pPDFExtOutDevData->SetLinkDest( aIBeg->nLinkId, nDestId );
}
else
{
- pPDFExtOutDevData->DescribeRegisteredDest( aIBeg->nDestId, rDestRect.SVRect(), nDestPageNum );
+ pPDFExtOutDevData->DescribeRegisteredDest(aIBeg->nDestId, aRect, nDestPageNum);
}
}
}
@@ -2161,8 +2234,9 @@ void SwEnhancedPDFExportHelper::MakeHeaderFooterLinks( vcl::PDFExtOutDevData& rP
for ( size_t nNumIdx = 0; nNumIdx < aHFLinkPageNums.size(); ++nNumIdx )
{
// Link Export
+ Rectangle aRect(SwRectToPDFRect(pPageFrm, aHFLinkRect.SVRect()));
const sal_Int32 nHFLinkId =
- rPDFExtOutDevData.CreateLink( aHFLinkRect.SVRect(), aHFLinkPageNums[nNumIdx] );
+ rPDFExtOutDevData.CreateLink(aRect, aHFLinkPageNums[nNumIdx]);
// Connect Link and Destination:
if ( bIntern )
diff --git a/sw/source/core/uibase/uno/unotxdoc.cxx b/sw/source/core/uibase/uno/unotxdoc.cxx
index e535fce7dc70..7b29743200c6 100644
--- a/sw/source/core/uibase/uno/unotxdoc.cxx
+++ b/sw/source/core/uibase/uno/unotxdoc.cxx
@@ -3012,13 +3012,14 @@ void SAL_CALL SwXTextDocument::render(
((SwView*)pView)->GetWrtShellPtr() :
0;
+ SwPrintData const& rSwPrtOptions =
+ *m_pRenderData->GetSwPrtOptions();
+
if (bIsPDFExport && bFirstPage && pWrtShell)
{
- SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, false );
+ SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, false, rSwPrtOptions );
}
- SwPrintData const& rSwPrtOptions =
- *m_pRenderData->GetSwPrtOptions();
if (bPrintProspect)
pVwSh->PrintProspect( pOut, rSwPrtOptions, nRenderer );
else // normal printing and PDF export
@@ -3032,7 +3033,7 @@ void SAL_CALL SwXTextDocument::render(
if (bIsPDFExport && bLastPage && pWrtShell)
{
- SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, true );
+ SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, true, rSwPrtOptions );
}
pVwSh->SetPDFExportOption( false );