diff options
author | Bartosz Kosiorek <gang65@poczta.onet.pl> | 2017-04-08 01:10:05 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2017-05-04 12:48:28 +0200 |
commit | 4cdba1a2dabf28b5e86ec612bd1313944e1e24aa (patch) | |
tree | 15ff58f7816faaca50e3f6fcb1b36757a3527f25 /cppcanvas | |
parent | b0abef5fa73258953eeb1b682741cb1120a6d945 (diff) |
tdf#107034 EMF+ Add support for import EmfPlusDrawPie record
The EmfPlusDrawPie record specifies drawing a section of the interior of an ellipse.
Change-Id: Icd9d64117cc612d348c531932931f31e4d04e567
Reviewed-on: https://gerrit.libreoffice.org/36286
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
(cherry picked from commit 2e7c94f5054dec4ab19c44209136c886793f0acb)
Reviewed-on: https://gerrit.libreoffice.org/36530
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
(cherry picked from commit bafb6b59cf590f939753fc0009b8328c280837a9)
Diffstat (limited to 'cppcanvas')
-rw-r--r-- | cppcanvas/source/mtfrenderer/emfplus.cxx | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx index a03b02d2b8b3..888b40a30431 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -65,7 +65,7 @@ namespace #define EmfPlusRecordTypeFillEllipse 0x400E #define EmfPlusRecordTypeDrawEllipse 0x400F #define EmfPlusRecordTypeFillPie 0x4010 -//TODO EmfPlusRecordTypeDrawPie 0x4011 +#define EmfPlusRecordTypeDrawPie 0x4011 //TODO EmfPlusRecordTypeDrawArc 0x4012 //TODO EmfPlusRecordTypeFillRegion 0x4013 #define EmfPlusRecordTypeFillPath 0x4014 @@ -220,6 +220,7 @@ const char* emfTypeToName(sal_uInt16 type) case EmfPlusRecordTypeFillEllipse: return "EmfPlusRecordTypeFillEllipse"; case EmfPlusRecordTypeDrawEllipse: return "EmfPlusRecordTypeDrawEllipse"; case EmfPlusRecordTypeFillPie: return "EmfPlusRecordTypeFillPie"; + case EmfPlusRecordTypeDrawPie: return "EmfPlusRecordTypeDrawPie"; case EmfPlusRecordTypeFillPath: return "EmfPlusRecordTypeFillPath"; case EmfPlusRecordTypeDrawPath: return "EmfPlusRecordTypeDrawPath"; case EmfPlusRecordTypeDrawImage: return "EmfPlusRecordTypeDrawImage"; @@ -1898,19 +1899,29 @@ namespace cppcanvas processObjectRecord (rMF, flags, dataSize); break; case EmfPlusRecordTypeFillPie: + case EmfPlusRecordTypeDrawPie: { - sal_uInt32 brushIndexOrColor; float startAngle, sweepAngle; - rMF.ReadUInt32( brushIndexOrColor ).ReadFloat( startAngle ).ReadFloat( sweepAngle ); + // Silent MSVC warning C4701: potentially uninitialized local variable 'brushIndexOrColor' used + sal_uInt32 brushIndexOrColor = 999; - SAL_INFO("cppcanvas.emf", "EMF+ FillPie colorOrIndex: " << brushIndexOrColor << " startAngle: " << startAngle << " sweepAngle: " << sweepAngle); + if ( type == EmfPlusRecordTypeFillPie ) + { + rMF.ReadUInt32( brushIndexOrColor ); + SAL_INFO("cppcanvas.emf", "EMF+ FillPie colorOrIndex: " << brushIndexOrColor); + } + else + { + SAL_INFO("cppcanvas.emf", "EMF+ DrawPie"); + } + rMF.ReadFloat( startAngle ).ReadFloat( sweepAngle ); float dx, dy, dw, dh; ReadRectangle (rMF, dx, dy, dw, dh, bool(flags & 0x4000)); - SAL_INFO("cppcanvas.emf", "EMF+ RectData: " << dx << "," << dy << " " << dw << "x" << dh); + SAL_INFO("cppcanvas.emf", "EMF+\t RectData: " << dx << "," << dy << " " << dw << "x" << dh); startAngle = 2*M_PI*startAngle/360; sweepAngle = 2*M_PI*sweepAngle/360; @@ -1929,15 +1940,21 @@ namespace cppcanvas if (sweepAngle < 0) std::swap (endAngle, startAngle); - SAL_INFO("cppcanvas.emf", "EMF+ adjusted angles: start " << - (360.0*startAngle/M_PI) << ", end: " << (360.0*endAngle/M_PI)); + SAL_INFO("cppcanvas.emf", "EMF+\t adjusted angles: start " << + (360.0*startAngle/M_PI) << ", end: " << (360.0*endAngle/M_PI) << + " startAngle: " << startAngle << " sweepAngle: " << sweepAngle); B2DPolygon polygon = basegfx::tools::createPolygonFromEllipseSegment (mappedCenter, mappedSize.getX (), mappedSize.getY (), startAngle, endAngle); polygon.append (mappedCenter); polygon.setClosed (true); B2DPolyPolygon polyPolygon (polygon); - EMFPPlusFillPolygon (polyPolygon, rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor); + if ( type == EmfPlusRecordTypeFillPie ) + EMFPPlusFillPolygon( polyPolygon, + rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor ); + else + EMFPPlusDrawPolygon( polyPolygon, + rFactoryParms, rState, rCanvas, flags & 0xff ); } break; case EmfPlusRecordTypeFillPath: |