Kaydet (Commit) da09115c authored tarafından Radek Doulik's avatar Radek Doulik

implemented EmfPlusRecordTypeFillPie record

Change-Id: I15e7464a6a295bb4c1313c0a65ee33b6443c61c8
üst 2c403c7f
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment