diff options
author | Radek Doulik <rodo@novell.com> | 2013-03-15 16:07:53 +0100 |
---|---|---|
committer | Radek Doulik <rodo@novell.com> | 2013-03-15 16:08:20 +0100 |
commit | f2d9db4ef951d04c63733b08dd8746c196dd5f05 (patch) | |
tree | 6d1607476207ec5902620f678b0b354d88b187d3 /cppcanvas | |
parent | fcbd9a5c4b9ea2bcbb08dd86d164f0d075d6befb (diff) |
implemented EmfPlusRecordTypeSetClipRect record
Change-Id: I0778cf44a1f4e920e723c17c34f6de4f8eed2342
Diffstat (limited to 'cppcanvas')
-rw-r--r-- | cppcanvas/source/mtfrenderer/emfplus.cxx | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx index 7389e2336ffa..011a204a1b33 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -72,6 +72,7 @@ #define EmfPlusRecordTypeResetWorldTransform 16427 #define EmfPlusRecordTypeMultiplyWorldTransform 16428 #define EmfPlusRecordTypeSetPageTransform 16432 +#define EmfPlusRecordTypeSetClipRect 16434 #define EmfPlusRecordTypeSetClipPath 16435 #define EmfPlusRecordTypeSetClipRegion 16436 #define EmfPlusRecordTypeDrawDriverString 16438 @@ -1701,27 +1702,55 @@ namespace cppcanvas aWorldTransform.eDx, aWorldTransform.eDy)); break; } + case EmfPlusRecordTypeSetClipRect: + { + int combineMode = (flags >> 8) & 0xf; + + EMFP_DEBUG (printf ("EMF+ SetClipRect combine mode: %d\n", combineMode)); + EMFP_DEBUG (if ( combineMode > 1 ) printf ("EMF+ TODO combine mode > 1\n")); + + float dx, dy, dw, dh; + + ReadRectangle (rMF, dx, dy, dw, dh, false); + + EMFP_DEBUG (printf ("EMF+ RectData: %f,%f %fx%f\n", dx, dy, dw, dh)); + + B2DPoint mappedPoint (Map (dx, dy)); + B2DSize mappedSize( MapSize (dw, dh)); + + ::basegfx::B2DPolyPolygon polyPolygon( ::basegfx::B2DPolygon( ::basegfx::tools::createPolygonFromRect( ::basegfx::B2DRectangle( mappedPoint.getX(), mappedPoint.getY(), + mappedPoint.getX() + mappedSize.getX(), + mappedPoint.getY() + mappedSize.getY() ) ) ) ); + + updateClipping (polyPolygon, rFactoryParms, combineMode == 1); + + break; + } case EmfPlusRecordTypeSetClipPath: { - EMFP_DEBUG (printf ("EMF+ SetClipPath\n")); + int combineMode = (flags >> 8) & 0xf; + + EMFP_DEBUG (printf ("EMF+ SetClipPath combine mode: %d\n", combineMode)); EMFP_DEBUG (printf ("EMF+\tpath in slot: %d\n", flags & 0xff)); EMFPPath& path = *(EMFPPath*) aObjects [flags & 0xff]; ::basegfx::B2DPolyPolygon& clipPoly (path.GetPolygon (*this)); clipPoly.transform (rState.mapModeTransform); - updateClipping (clipPoly, rFactoryParms, false); + updateClipping (clipPoly, rFactoryParms, combineMode == 1); break; } case EmfPlusRecordTypeSetClipRegion: { + int combineMode = (flags >> 8) & 0xf; + EMFP_DEBUG (printf ("EMF+ SetClipRegion\n")); - EMFP_DEBUG (printf ("EMF+\tregion in slot: %d combine mode: %d\n", flags & 0xff, (flags & 0xff00) >> 8)); + EMFP_DEBUG (printf ("EMF+\tregion in slot: %d combine mode: %d\n", flags & 0xff, combineMode)); EMFPRegion *region = (EMFPRegion*)aObjects [flags & 0xff]; // reset clip if (region && region->parts == 0 && region->initialState == EmfPlusRegionInitialStateInfinite) { - updateClipping (::basegfx::B2DPolyPolygon (), rFactoryParms, false); + updateClipping (::basegfx::B2DPolyPolygon (), rFactoryParms, combineMode == 1); } else { EMFP_DEBUG (printf ("EMF+\tTODO\n")); } |