summaryrefslogtreecommitdiff
path: root/cppcanvas
diff options
context:
space:
mode:
authorRadek Doulik <rodo@novell.com>2010-09-15 11:34:17 +0200
committerRadek Doulik <rodo@novell.com>2010-09-15 17:54:14 +0200
commit590282f4f078142495858a8cb6385316da0a4a8f (patch)
treee49b3af98ebebb722d4e871b9f2739126568ba89 /cppcanvas
parentf59b7f548242b6079b9af303cc74b672d94e74db (diff)
emf+-embedded-mf-image.diff: emf+ import - support for embedded MF images
Diffstat (limited to 'cppcanvas')
-rw-r--r--cppcanvas/source/mtfrenderer/emfplus.cxx24
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx1
2 files changed, 21 insertions, 4 deletions
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
index 8d22704ee23f..a82aad0b9c3f 100644
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
@@ -659,12 +659,10 @@ namespace cppcanvas
Graphic graphic;
- void Read (SvStream &s)
+ void Read (SvMemoryStream &s)
{
sal_uInt32 header, unknown;
- EMFP_DEBUG (dumpWords(s, 16));
-
s >> header >> type;
EMFP_DEBUG (printf ("EMF+\timage\nEMF+\theader: 0x%08x type: 0x%08x\n", header, type));
@@ -679,6 +677,24 @@ namespace cppcanvas
EMFP_DEBUG (printf ("EMF+\tbitmap width: %d height: %d\n", graphic.GetBitmap ().GetSizePixel ().Width (), graphic.GetBitmap ().GetSizePixel ().Height ()));
}
+ } else if (type == 2) {
+ sal_Int32 mfType, mfSize;
+
+ s >> mfType >> mfSize;
+ EMFP_DEBUG (printf ("EMF+\tmetafile type: %d dataSize: %d\n", mfType, mfSize));
+
+ GraphicFilter filter;
+ SvMemoryStream mfStream (((char *)s.GetData()) + s.Tell(), mfSize, STREAM_READ);
+
+ filter.ImportGraphic (graphic, String (), mfStream);
+
+ // debug code - write the stream to debug file /tmp/emf-stream.emf
+ EMFP_DEBUG(mfStream.Seek(0);
+ SvFileStream file( UniString::CreateFromAscii( "/tmp/emf-embedded-stream.emf" ), STREAM_WRITE | STREAM_TRUNC );
+
+ mfStream >> file;
+ file.Flush();
+ file.Close());
}
}
};
@@ -1067,7 +1083,7 @@ namespace cppcanvas
mMFlags = flags;
mMStream.Seek(0);
}
- EMFP_DEBUG (dumpWords(rMF, 16));
+
// 1st 4 bytes are unknown
mMStream.Write (((const char *)rMF.GetData()) + rMF.Tell() + 4, dataSize - 4);
EMFP_DEBUG (printf ("EMF+ read next object part size: %d type: %04hx flags: %04hx data size: %d\n", size, type, flags, dataSize));
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 080c7d39740b..af1f20904560 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -1818,6 +1818,7 @@ namespace cppcanvas
char *env;
if (env = getenv ("EMF_PLUS_LIMIT")) {
limit = atoi (env);
+ EMFP_DEBUG (printf ("EMF+ records limit: %d\n", limit));
}
}
EMFP_DEBUG (printf ("EMF+ passed to canvas mtf renderer, size: %d\n", pAct->GetDataSize ()));