diff options
author | Armin Le Grand <alg@apache.org> | 2013-10-10 16:20:50 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-10-11 08:43:33 +0100 |
commit | 483ea555bfdde46dc581deaae5e782405de81a2e (patch) | |
tree | e54a8ef3e179e4622b0b14220f2a07a1a5c17a53 | |
parent | b506fcdf2477f68c34344346267543ca6a31da6e (diff) |
Resolves: #i123405# Allow to not limit size to PageSize...
when creating Metafile content
(cherry picked from commit c4b76f0442c452693846a4c92970ba67f26f2226)
Change-Id: I8536f4d55e422ad5550c1aaa311789ad31647611
-rw-r--r-- | sc/source/ui/app/transobj.cxx | 19 | ||||
-rw-r--r-- | sc/source/ui/inc/transobj.hxx | 4 |
2 files changed, 16 insertions, 7 deletions
diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx index 0269e2a3fd04..a961cbe61c24 100644 --- a/sc/source/ui/app/transobj.cxx +++ b/sc/source/ui/app/transobj.cxx @@ -354,11 +354,15 @@ sal_Bool ScTransferObj::GetData( const datatransfer::DataFlavor& rFlavor ) } else if ( nFormat == SOT_FORMAT_GDIMETAFILE ) { - InitDocShell(); + // #i123405# Do not limit visual size calculation for metafile creation. + // It seems unlikely that removing the limitation causes problems since + // metafile creation means that no real pixel device in the needed size is + // created. + InitDocShell(false); + SfxObjectShell* pEmbObj = aDocShellRef; // like SvEmbeddedTransfer::GetData: - GDIMetaFile aMtf; VirtualDevice aVDev; MapMode aMapMode( pEmbObj->GetMapUnit() ); @@ -380,7 +384,8 @@ sal_Bool ScTransferObj::GetData( const datatransfer::DataFlavor& rFlavor ) else if ( nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE ) { //TODO/LATER: differentiate between formats?! - InitDocShell(); // set aDocShellRef + // #i123405# Do limit visual size calculation to PageSize + InitDocShell(true); // set aDocShellRef SfxObjectShell* pEmbObj = aDocShellRef; bOK = SetObject( pEmbObj, SCTRANS_TYPE_EMBOBJ, rFlavor ); @@ -582,8 +587,10 @@ ScMarkData ScTransferObj::GetSourceMarkData() // // initialize aDocShellRef with a live document from the ClipDoc // +// #i123405# added parameter to allow size calculation without limitation +// to PageSize, e.g. used for Metafile creation for clipboard. -void ScTransferObj::InitDocShell() +void ScTransferObj::InitDocShell(bool bLimitToPageSize) { if ( !aDocShellRef.Is() ) { @@ -700,14 +707,14 @@ void ScTransferObj::InitDocShell() for (nCol=nStartX; nCol<=nEndX; nCol++) { long nAdd = pDestDoc->GetColWidth( nCol, 0 ); - if ( nSizeX+nAdd > aPaperSize.Width() && nSizeX ) // above limit? + if ( bLimitToPageSize && nSizeX+nAdd > aPaperSize.Width() && nSizeX ) // above limit? break; nSizeX += nAdd; } for (SCROW nRow=nStartY; nRow<=nEndY; nRow++) { long nAdd = pDestDoc->GetRowHeight( nRow, 0 ); - if ( nSizeY+nAdd > aPaperSize.Height() && nSizeY ) // above limit? + if ( bLimitToPageSize && nSizeY+nAdd > aPaperSize.Height() && nSizeY ) // above limit? break; nSizeY += nAdd; } diff --git a/sc/source/ui/inc/transobj.hxx b/sc/source/ui/inc/transobj.hxx index 46446b000b2b..9bd0d12afa1d 100644 --- a/sc/source/ui/inc/transobj.hxx +++ b/sc/source/ui/inc/transobj.hxx @@ -56,7 +56,9 @@ private: bool bHasFiltered; // if has filtered rows bool bUseInApi; // to recognize clipboard content copied from API - void InitDocShell(); + // #i123405# added parameter to allow size calculation without limitation + // to PageSize, e.g. used for Metafile creation for clipboard. + void InitDocShell(bool bLimitToPageSize); static void StripRefs( ScDocument* pDoc, SCCOL nStartX, SCROW nStartY, SCCOL nEndX, SCROW nEndY, ScDocument* pDestDoc=0, |