summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2013-10-10 16:20:50 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-10-11 08:43:33 +0100
commit483ea555bfdde46dc581deaae5e782405de81a2e (patch)
treee54a8ef3e179e4622b0b14220f2a07a1a5c17a53 /sc
parentb506fcdf2477f68c34344346267543ca6a31da6e (diff)
Resolves: #i123405# Allow to not limit size to PageSize...
when creating Metafile content (cherry picked from commit c4b76f0442c452693846a4c92970ba67f26f2226) Change-Id: I8536f4d55e422ad5550c1aaa311789ad31647611
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/app/transobj.cxx19
-rw-r--r--sc/source/ui/inc/transobj.hxx4
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,