[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.1' - 2 commits - cppcanvas/source embeddedobj/Library_emboleobj.mk embeddedobj/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Apr 9 03:40:40 PDT 2014
cppcanvas/source/mtfrenderer/emfplus.cxx | 24 +++++++++++++++++++++++-
embeddedobj/Library_emboleobj.mk | 1 +
embeddedobj/source/msole/graphconvert.cxx | 12 ++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
New commits:
commit e4d7136a07419a18e0add48f97212931939e3fee
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Apr 9 10:47:25 2014 +0200
fdo#77229 EMF+ rendering: improve EmfPlusSetClipPath's CombineModeExclude case
This is still not perfect, but at least we now don't do the opposite of
what was asked.
Change-Id: I5e144c5ec2987902e65b2eb472259d9c39bbbd11
(cherry picked from commit c2af50eb6df396c957890a6b912b8f3185893551)
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
index 56fe1dc..49bc337 100644
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
@@ -115,6 +115,16 @@ const sal_uInt32 EmfPlusLineJoinTypeBevel = 0x00000001;
const sal_uInt32 EmfPlusLineJoinTypeRound = 0x00000002;
const sal_uInt32 EmfPlusLineJoinTypeMiterClipped = 0x00000003;
+enum EmfPlusCombineMode
+{
+ EmfPlusCombineModeReplace = 0x00000000,
+ EmfPlusCombineModeIntersect = 0x00000001,
+ EmfPlusCombineModeUnion = 0x00000002,
+ EmfPlusCombineModeXOR = 0x00000003,
+ EmfPlusCombineModeExclude = 0x00000004,
+ EmfPlusCombineModeComplement = 0x00000005
+};
+
using namespace ::com::sun::star;
using namespace ::basegfx;
@@ -2180,7 +2190,19 @@ namespace cppcanvas
::basegfx::B2DPolyPolygon& clipPoly (path.GetPolygon (*this));
clipPoly.transform (rState.mapModeTransform);
- updateClipping (clipPoly, rFactoryParms, combineMode == 1);
+ switch (combineMode)
+ {
+ case EmfPlusCombineModeReplace:
+ case EmfPlusCombineModeIntersect:
+ case EmfPlusCombineModeUnion: // Is this, EmfPlusCombineModeXOR and EmfPlusCombineModeComplement correct?
+ case EmfPlusCombineModeXOR:
+ case EmfPlusCombineModeComplement:
+ updateClipping (clipPoly, rFactoryParms, combineMode == 1);
+ break;
+ case EmfPlusCombineModeExclude:
+ // Not doing anything is better then including exactly what we wanted to exclude.
+ break;
+ }
break;
}
commit 1b8b89fba3792c1f3cf97acb104d368bd587787d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Apr 7 16:51:29 2014 +0200
fdo#77140 embeddedobj: avoid unneeded conversion in ConvertBufferToFormat()
The primary reason is not performance: on export currently we loose some
EMF+ properties. While it would be good to fix all those problems one by
one, this is a small fix to avoid all kind of roundtrip problems in this
situation.
Change-Id: If5e1c1eabd8290f36b538e374c9707ae17097786
(cherry picked from commit 2a7fdf2a7bb7345c49c988dfd1fcdb41cebb8a1e)
diff --git a/embeddedobj/Library_emboleobj.mk b/embeddedobj/Library_emboleobj.mk
index 3d415f4..8878045 100644
--- a/embeddedobj/Library_emboleobj.mk
+++ b/embeddedobj/Library_emboleobj.mk
@@ -28,6 +28,7 @@ $(eval $(call gb_Library_use_libraries,emboleobj,\
sal \
tl \
utl \
+ vcl \
$(gb_UWINAPI) \
))
diff --git a/embeddedobj/source/msole/graphconvert.cxx b/embeddedobj/source/msole/graphconvert.cxx
index e054f7a..b14d961 100644
--- a/embeddedobj/source/msole/graphconvert.cxx
+++ b/embeddedobj/source/msole/graphconvert.cxx
@@ -32,6 +32,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/seqstream.hxx>
#include <tools/stream.hxx>
+#include <vcl/graphicfilter.hxx>
#include "mtnotification.hxx"
#include "oleembobj.hxx"
@@ -48,6 +49,17 @@ sal_Bool ConvertBufferToFormat( void* pBuf,
// produces sequence with data in requested format and returns it in aResult
if ( pBuf )
{
+ // First, in case the buffer is already in the requested format, then avoid a conversion.
+ SvMemoryStream aMemoryStream(pBuf, nBufSize, STREAM_READ);
+ GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();
+ sal_uInt16 nRetFormat = 0;
+ if (rFilter.CanImportGraphic(OUString(), aMemoryStream, GRFILTER_FORMAT_DONTKNOW, &nRetFormat) == GRFILTER_OK &&
+ rFilter.GetImportFormatMediaType(nRetFormat) == aMimeType)
+ {
+ aResult <<= uno::Sequence< sal_Int8 >( reinterpret_cast< const sal_Int8* >( aMemoryStream.GetData() ), aMemoryStream.Seek( STREAM_SEEK_TO_END ) );
+ return sal_True;
+ }
+
uno::Sequence < sal_Int8 > aData( (sal_Int8*)pBuf, nBufSize );
uno::Reference < io::XInputStream > xIn = new comphelper::SequenceInputStream( aData );
try
More information about the Libreoffice-commits
mailing list