summaryrefslogtreecommitdiff
path: root/emfio
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2021-06-11 15:48:32 +0200
committerLuboš Luňák <l.lunak@collabora.com>2021-06-11 23:59:32 +0200
commitb342a445cd8b115e76d261860088b012b74c0b0e (patch)
tree26f55d7507adfeee46b1fc4363b43dc8ab11395b /emfio
parent381bc9d9acd461415cf81eef71ec3dd935a07b62 (diff)
drop EMF+ also when converting WMF, not just EMF
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 <l.lunak@collabora.com>
Diffstat (limited to 'emfio')
-rw-r--r--emfio/inc/wmfreader.hxx5
-rw-r--r--emfio/source/emfuno/xemfparser.cxx5
-rw-r--r--emfio/source/reader/emfreader.cxx2
-rw-r--r--emfio/source/reader/wmfreader.cxx1
4 files changed, 11 insertions, 2 deletions
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<EmfReader> pEMFReader(std::make_unique<EmfReader>( *mpEMFStream, aMeta ));
+ pEMFReader->SetEnableEMFPlus(mbEnableEMFPlus);
bEMFAvailable = pEMFReader->ReadEnhWMF();
pEMFReader.reset(); // destroy first!!!