From b342a445cd8b115e76d261860088b012b74c0b0e Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Fri, 11 Jun 2021 15:48:32 +0200 Subject: drop EMF+ also when converting WMF, not just EMF MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A WMF may have EMF with EMF+ actions embedded. When we read that, we drop drawing non-EMF+ actions if we use EMF+. But EMF+ actions are stored as MetaCommentAction in the metafile, and WMF writer (unlike EMF) writer simply ignores comments. So when writing WMF, make sure to read non-EMF actions so that something is written. This is an extension of 295626a0bd39540544b774094a63df23e5376839. Change-Id: I37355f694fe656b661abe54274ea203934e68151 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117062 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- emfio/inc/wmfreader.hxx | 5 +++++ emfio/source/emfuno/xemfparser.cxx | 5 ++++- emfio/source/reader/emfreader.cxx | 2 +- emfio/source/reader/wmfreader.cxx | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) (limited to 'emfio') diff --git a/emfio/inc/wmfreader.hxx b/emfio/inc/wmfreader.hxx index 279f3e4caeee..a7dff2b94d85 100644 --- a/emfio/inc/wmfreader.hxx +++ b/emfio/inc/wmfreader.hxx @@ -51,6 +51,8 @@ namespace emfio // eventually handed over external header const WmfExternal* mpExternalHeader; + bool mbEnableEMFPlus = true; + // reads header of the WMF-Datei bool ReadHeader(); @@ -68,6 +70,9 @@ namespace emfio // read WMF file from stream and fill the GDIMetaFile void ReadWMF(); + + // Allows disabling EMF+ if EMF is embedded in this WMF. + void SetEnableEMFPlus(bool bEnableEMFPlus) { mbEnableEMFPlus = bEnableEMFPlus; } }; } diff --git a/emfio/source/emfuno/xemfparser.cxx b/emfio/source/emfuno/xemfparser.cxx index 7788802c4e1c..e5d27056332d 100644 --- a/emfio/source/emfuno/xemfparser.cxx +++ b/emfio/source/emfuno/xemfparser.cxx @@ -130,7 +130,10 @@ namespace emfio::emfreader } else { - emfio::WmfReader(*pStream, aMtf, bExternalHeaderUsed ? &aExternalHeader : nullptr).ReadWMF(); + emfio::WmfReader aReader(*pStream, aMtf, bExternalHeaderUsed ? &aExternalHeader : nullptr); + if (!bEnableEMFPlus) + aReader.SetEnableEMFPlus(bEnableEMFPlus); + aReader.ReadWMF(); // Need to check for ErrCode at stream to not lose former work. // This may contain important information and will behave the diff --git a/emfio/source/reader/emfreader.cxx b/emfio/source/reader/emfreader.cxx index 04f591a7eb9a..4ad77dd3fb32 100644 --- a/emfio/source/reader/emfreader.cxx +++ b/emfio/source/reader/emfreader.cxx @@ -817,7 +817,7 @@ namespace emfio bEnableEMFPlus = mbEnableEMFPlus; } - SAL_INFO("emfio", "EMF_PLUS_DISABLE is " << (bEnableEMFPlus ? "enabled" : "disabled")); + SAL_INFO("emfio", "EMF+ reading is " << (bEnableEMFPlus ? "enabled" : "disabled")); while (bStatus && mnRecordCount-- && mpInputStream->good() && !mbReadOtherGraphicFormat) { diff --git a/emfio/source/reader/wmfreader.cxx b/emfio/source/reader/wmfreader.cxx index 93908503d9bf..9ddb674b7c05 100644 --- a/emfio/source/reader/wmfreader.cxx +++ b/emfio/source/reader/wmfreader.cxx @@ -1596,6 +1596,7 @@ namespace emfio GDIMetaFile aMeta; mpEMFStream->Seek( 0 ); std::unique_ptr pEMFReader(std::make_unique( *mpEMFStream, aMeta )); + pEMFReader->SetEnableEMFPlus(mbEnableEMFPlus); bEMFAvailable = pEMFReader->ReadEnhWMF(); pEMFReader.reset(); // destroy first!!! -- cgit