diff options
author | Radek Doulik <rodo@novell.com> | 2013-01-10 15:58:30 +0100 |
---|---|---|
committer | Radek Doulik <rodo@novell.com> | 2013-01-10 16:01:19 +0100 |
commit | da09115cffeca384ab91ffe4d7af4d8eab6cee82 (patch) | |
tree | 43fd221fedeeafe9f34970338a7327410ee81ff7 /cppcanvas | |
parent | 2c403c7f36561410418ebb9f86664e46a8c1c968 (diff) |
implemented EmfPlusRecordTypeFillPie record
Change-Id: I15e7464a6a295bb4c1313c0a65ee33b6443c61c8
Diffstat (limited to 'cppcanvas')
-rw-r--r-- | cppcanvas/source/mtfrenderer/emfplus.cxx | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx index 3c791d4d2318..f1b0eff12282 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -29,6 +29,7 @@ #include <basegfx/range/b2drange.hxx> #include <basegfx/range/b2drectangle.hxx> #include <basegfx/polygon/b2dpolygon.hxx> +#include <basegfx/polygon/b2dpolygontools.hxx> #include <basegfx/polygon/b2dpolypolygon.hxx> #include <basegfx/polygon/b2dpolypolygontools.hxx> #include <vcl/canvastools.hxx> @@ -52,6 +53,7 @@ #define EmfPlusRecordTypeFillRects 16394 #define EmfPlusRecordTypeFillPolygon 16396 #define EmfPlusRecordTypeDrawLines 16397 +#define EmfPlusRecordTypeFillPie 16400 #define EmfPlusRecordTypeFillPath 16404 #define EmfPlusRecordTypeDrawPath 16405 #define EmfPlusRecordTypeDrawImage 16410 @@ -93,6 +95,7 @@ #endif using namespace ::com::sun::star; +using namespace ::basegfx; namespace cppcanvas { @@ -1234,6 +1237,48 @@ namespace cppcanvas case EmfPlusRecordTypeObject: processObjectRecord (rMF, flags); break; + case EmfPlusRecordTypeFillPie: + { + sal_uInt32 brushIndexOrColor; + float startAngle, sweepAngle; + + rMF >> brushIndexOrColor >> startAngle >> sweepAngle; + + EMFP_DEBUG (printf ("EMF+ FillPie colorOrIndex: %x startAngle: %f sweepAngle: %f\n", (unsigned int)brushIndexOrColor, startAngle, sweepAngle)); + + float dx, dy, dw, dh; + + ReadRectangle (rMF, dx, dy, dw, dh, flags & 0x4000); + + EMFP_DEBUG (printf ("EMF+ RectData: %f,%f %fx%f\n", dx, dy, dw, dh)); + + startAngle = 2*M_PI*startAngle/360; + sweepAngle = 2*M_PI*sweepAngle/360; + + B2DPoint mappedCenter (Map (dx + dw/2, dy + dh/2)); + B2DSize mappedSize( MapSize (dw/2, dh/2)); + + double endAngle = startAngle + sweepAngle; + if (endAngle < 0) + endAngle += M_PI*2; + endAngle = fmod (endAngle, M_PI*2); + + if (sweepAngle < 0) { + double tmp = startAngle; + startAngle = endAngle; + endAngle = tmp; + } + + EMFP_DEBUG (printf ("EMF+ angles: %f,%f ---> %f,%f\n", startAngle, sweepAngle, startAngle, endAngle)); + + B2DPolygon polygon = 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); + } + break; case EmfPlusRecordTypeFillPath: { sal_uInt32 index = flags & 0xff; |