summaryrefslogtreecommitdiff
path: root/cppcanvas
diff options
context:
space:
mode:
authorRadek Doulik <rodo@novell.com>2013-01-10 15:58:30 +0100
committerRadek Doulik <rodo@novell.com>2013-01-10 16:01:19 +0100
commitda09115cffeca384ab91ffe4d7af4d8eab6cee82 (patch)
tree43fd221fedeeafe9f34970338a7327410ee81ff7 /cppcanvas
parent2c403c7f36561410418ebb9f86664e46a8c1c968 (diff)
implemented EmfPlusRecordTypeFillPie record
Change-Id: I15e7464a6a295bb4c1313c0a65ee33b6443c61c8
Diffstat (limited to 'cppcanvas')
-rw-r--r--cppcanvas/source/mtfrenderer/emfplus.cxx45
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;