diff options
author | Armin Le Grand <alg@apache.org> | 2013-10-10 16:20:50 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2013-10-10 16:20:50 +0000 |
commit | c4b76f0442c452693846a4c92970ba67f26f2226 (patch) | |
tree | 3e7a45375225240387a4fd013f4d94d3ee35380d /sc | |
parent | 225fe06a0370fe2d935b9258f0243fdb7f749fd4 (diff) |
i123405 Allow to not limit size to PageSize when creating Metafile content
Notes
Notes:
merged as: 483ea555bfdde46dc581deaae5e782405de81a2e
Diffstat (limited to 'sc')
-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 945091e27b63..a8764ff4231e 100644 --- a/sc/source/ui/app/transobj.cxx +++ b/sc/source/ui/app/transobj.cxx @@ -346,11 +346,15 @@ sal_Bool ScTransferObj::GetData( const datatransfer::DataFlavor& rFlavor ) } else if ( nFormat == SOT_FORMAT_GDIMETAFILE ) { - InitDocShell(); + // #123405# 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() ); @@ -372,7 +376,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 + // #123405# Do limit visual size calculation to PageSize + InitDocShell(true); // set aDocShellRef SfxObjectShell* pEmbObj = aDocShellRef; bOK = SetObject( pEmbObj, SCTRANS_TYPE_EMBOBJ, rFlavor ); @@ -574,8 +579,10 @@ ScMarkData ScTransferObj::GetSourceMarkData() // // initialize aDocShellRef with a live document from the ClipDoc // +// #123405# 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() ) { @@ -697,14 +704,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 d74bacc360b0..524614b2c93f 100644 --- a/sc/source/ui/inc/transobj.hxx +++ b/sc/source/ui/inc/transobj.hxx @@ -62,7 +62,9 @@ private: bool bHasFiltered; // if has filtered rows bool bUseInApi; // to recognize clipboard content copied from API - void InitDocShell(); + // #123405# 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, |