summaryrefslogtreecommitdiff
path: root/cppcanvas
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@cib.de>2016-02-26 16:37:32 +0100
committerAndras Timar <andras.timar@collabora.com>2016-03-10 19:36:52 +0100
commit67abbe5d9a3df037c67adf29db065293d8898d16 (patch)
treeda513e81994c5e5215407c79f4261c5aeaa2c85e /cppcanvas
parent53d9f28b70bc1a51a9c8a8bd5e111c67ba42de60 (diff)
tdf#95709 adapt clip polygon for transparence groups
For presentation transparence groups are rendered by the canvas using VirtualDevices and Bitmaps. To adapt for then painting the Bitnmap to the canvas the RenderState needs to be adapted to e.g. reflect the already applied scaling. Missing was to adapt a set clip polyPolygon to be synchronized with the new RenderState transformation. Change-Id: If760a8076e016a6dcf306db71971f1fd2fef7017 Reviewed-on: https://gerrit.libreoffice.org/22720 Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> (cherry picked from commit 1c85800345239754d5c4ec71c2aad526d0439eea) Reviewed-on: https://gerrit.libreoffice.org/22890 Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit dd37ff21753afe37dc7185fddf34adf33dc9291f)
Diffstat (limited to 'cppcanvas')
-rw-r--r--cppcanvas/source/mtfrenderer/transparencygroupaction.cxx10
1 files changed, 10 insertions, 0 deletions
diff --git a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
index cd274b333207..4dc23f2a659b 100644
--- a/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
+++ b/cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
@@ -48,6 +48,7 @@
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/tuple/b2dtuple.hxx>
#include <basegfx/tools/canvastools.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <boost/utility.hpp>
@@ -383,6 +384,15 @@ namespace cppcanvas
rendering::RenderState aLocalState( maState );
::canvas::tools::setRenderStateTransform(aLocalState, aTransform);
+ if(aLocalState.Clip.is())
+ {
+ // tdf#95709
+ // Adjust renderstate clip to modified scale from above
+ ::basegfx::B2DPolyPolygon aClip = ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(aLocalState.Clip);
+ aClip.transform(basegfx::tools::createScaleB2DHomMatrix(aScale));
+ aLocalState.Clip = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mpCanvas->getUNOCanvas()->getDevice(), aClip);
+ }
+
#if OSL_DEBUG_LEVEL > 2
aLocalState.Clip.clear();
aLocalState.DeviceColor =