From d552f67f5ee508ac6fbe03d16e6ba3ac429c3a48 Mon Sep 17 00:00:00 2001 From: Bartosz Kosiorek Date: Wed, 15 Nov 2017 23:04:53 +0100 Subject: tdf#113704 EMF+ Add support for EmfPlusRecordTypeFillRegion record Change-Id: I60366d4a27fdf5a3cc020ca54f4a2aa9b974db5e Reviewed-on: https://gerrit.libreoffice.org/44795 Tested-by: Jenkins Reviewed-by: Bartosz Kosiorek --- drawinglayer/source/tools/emfphelperdata.cxx | 39 ++++++++++++++++------------ drawinglayer/source/tools/emfphelperdata.hxx | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index 9d2c7db10008..d9accffe80af 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -63,6 +63,7 @@ namespace emfplushelper case EmfPlusRecordTypeFillPie: return "EmfPlusRecordTypeFillPie"; case EmfPlusRecordTypeDrawPie: return "EmfPlusRecordTypeDrawPie"; case EmfPlusRecordTypeDrawArc: return "EmfPlusRecordTypeDrawArc"; + case EmfPlusRecordTypeFillRegion: return "EmfPlusRecordTypeFillRegion"; case EmfPlusRecordTypeFillPath: return "EmfPlusRecordTypeFillPath"; case EmfPlusRecordTypeDrawPath: return "EmfPlusRecordTypeDrawPath"; case EmfPlusRecordTypeDrawBeziers: return "EmfPlusRecordTypeDrawBeziers"; @@ -179,17 +180,17 @@ namespace emfplushelper } case EmfPlusObjectTypeImageAttributes: { - SAL_INFO("drawinglayer", "EMF+\t Object type 'image attributes' not yet implemented"); + SAL_WARN("drawinglayer", "EMF+\t TODO Object type 'image attributes' not yet implemented"); break; } case EmfPlusObjectTypeCustomLineCap: { - SAL_INFO("drawinglayer", "EMF+\t Object type 'custom line cap' not yet implemented"); + SAL_WARN("drawinglayer", "EMF+\t TODO Object type 'custom line cap' not yet implemented"); break; } default: { - SAL_INFO("drawinglayer", "EMF+\tObject unhandled flags: 0x" << std::hex << (flags & 0xff00) << std::dec); + SAL_WARN("drawinglayer", "EMF+\t TODO Object unhandled flags: 0x" << std::hex << (flags & 0xff00) << std::dec); } } } @@ -459,9 +460,9 @@ namespace emfplushelper if (!polygon.count()) return; - SAL_INFO("drawinglayer", "EMF+\tfill polygon"); if (isColor) // use Color { + SAL_INFO("drawinglayer", "EMF+\t Fill polygon, ARGB color: 0x" << std::hex << brushIndexOrColor << std::dec); mrTargetHolders.Current().append( o3tl::make_unique( polygon, @@ -474,7 +475,7 @@ namespace emfplushelper else // use Brush { EMFPBrush* brush = static_cast( maEMFPObjects[brushIndexOrColor & 0xff].get() ); - SAL_INFO("drawinglayer", "EMF+\tbrush fill slot: " << brushIndexOrColor << " (type: " << (brush ? brush->GetType() : -1) << ")"); + SAL_INFO("drawinglayer", "EMF+\t Fill polygon, brush slot: " << brushIndexOrColor << " (brush type: " << (brush ? brush->GetType() : -1) << ")"); // give up in case something wrong happened if( !brush ) @@ -942,6 +943,16 @@ namespace emfplushelper EMFPPlusFillPolygon(static_cast(maEMFPObjects[index].get())->GetPolygon(*this), flags & 0x8000, brushIndexOrColor); } break; + case EmfPlusRecordTypeFillRegion: + { + sal_uInt32 index = flags & 0xff; + sal_uInt32 brushIndexOrColor; + rMS.ReadUInt32(brushIndexOrColor); + SAL_INFO("drawinglayer", "EMF+ FillRegion slot: " << index); + + EMFPPlusFillPolygon(static_cast(maEMFPObjects[flags & 0xff].get())->regionPolyPolygon, flags & 0x8000, brushIndexOrColor); + } + break; case EmfPlusRecordTypeDrawEllipse: case EmfPlusRecordTypeFillEllipse: { @@ -1301,38 +1312,32 @@ namespace emfplushelper case EmfPlusRecordTypeSetRenderingOrigin: { rMS.ReadInt32(mnOriginX).ReadInt32(mnOriginY); - SAL_INFO("drawinglayer", "EMF+ SetRenderingOrigin"); - SAL_INFO("drawinglayer", "EMF+\torigin [x,y]: " << mnOriginX << "," << mnOriginY); + SAL_INFO("drawinglayer", "EMF+ SetRenderingOrigin, [x,y]: " << mnOriginX << "," << mnOriginY); break; } case EmfPlusRecordTypeSetTextRenderingHint: { - SAL_INFO("drawinglayer", "EMF+ SetTextRenderingHint"); - SAL_INFO("drawinglayer", "EMF+\tTODO"); + SAL_INFO("drawinglayer", "TODO\t EMF+ SetTextRenderingHint"); break; } case EmfPlusRecordTypeSetAntiAliasMode: { - SAL_INFO("drawinglayer", "EMF+ SetAntiAliasMode"); - SAL_INFO("drawinglayer", "EMF+\tTODO"); + SAL_INFO("drawinglayer", "TODO\t EMF+ SetAntiAliasMode"); break; } case EmfPlusRecordTypeSetInterpolationMode: { - SAL_INFO("drawinglayer", "EMF+ InterpolationMode"); - SAL_INFO("drawinglayer", "EMF+\tTODO"); + SAL_INFO("drawinglayer", "TODO\t EMF+ InterpolationMode"); break; } case EmfPlusRecordTypeSetPixelOffsetMode: { - SAL_INFO("drawinglayer", "EMF+ SetPixelOffsetMode"); - SAL_INFO("drawinglayer", "EMF+\tTODO"); + SAL_INFO("drawinglayer", "TODO\t EMF+ SetPixelOffsetMode"); break; } case EmfPlusRecordTypeSetCompositingQuality: { - SAL_INFO("drawinglayer", "EMF+ SetCompositingQuality"); - SAL_INFO("drawinglayer", "EMF+\tTODO"); + SAL_INFO("drawinglayer", "TODO\t EMF+ SetCompositingQuality"); break; } case EmfPlusRecordTypeSave: diff --git a/drawinglayer/source/tools/emfphelperdata.hxx b/drawinglayer/source/tools/emfphelperdata.hxx index 98a90ab49b36..431e9b0a5c72 100644 --- a/drawinglayer/source/tools/emfphelperdata.hxx +++ b/drawinglayer/source/tools/emfphelperdata.hxx @@ -53,7 +53,7 @@ namespace emfplushelper #define EmfPlusRecordTypeFillPie 0x4010 #define EmfPlusRecordTypeDrawPie 0x4011 #define EmfPlusRecordTypeDrawArc 0x4012 - //TODO EmfPlusRecordTypeFillRegion 0x4013 + #define EmfPlusRecordTypeFillRegion 0x4013 #define EmfPlusRecordTypeFillPath 0x4014 #define EmfPlusRecordTypeDrawPath 0x4015 //TODO EmfPlusRecordTypeFillClosedCurve 0x4016 -- cgit v1.2.3