diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-07-20 14:09:36 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-07-20 15:46:48 +0200 |
commit | 76b43425d764fbc9bf4dac52054b1d94344f26b0 (patch) | |
tree | 08fc2fd50745b7aeb658ab22283df80cd116df06 /canvas | |
parent | 7f697ec27b1175ed94228155935d9ccd3cd5606c (diff) |
tdf#118107 canvas opengl: avoid assertion failure with negative widths
In case an Impress shape has a "Fade in and Swivel" animation attached,
canvas calls OutputDevice::DrawBitmapEx() with a negative width. This
results in a call to OutputDevice::DrawDeviceAlphaBitmap(), which
asserts that the height/width is not negative.
Fix the problem by transforming the bitmap before calling
OutputDevice::DrawBitmapEx() in the GL case, similarly to how "complex"
transformations are handled already.
Change-Id: I65ccc8a984132c5921d6096bfe9c7a8fcfacd8dd
Reviewed-on: https://gerrit.libreoffice.org/57774
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins
Diffstat (limited to 'canvas')
-rw-r--r-- | canvas/Library_vclcanvas.mk | 5 | ||||
-rw-r--r-- | canvas/source/vcl/spritehelper.cxx | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/canvas/Library_vclcanvas.mk b/canvas/Library_vclcanvas.mk index 805cefc43c77..6ff19eba6130 100644 --- a/canvas/Library_vclcanvas.mk +++ b/canvas/Library_vclcanvas.mk @@ -21,7 +21,10 @@ $(eval $(call gb_Library_Library,vclcanvas)) $(eval $(call gb_Library_set_componentfile,vclcanvas,canvas/source/vcl/vclcanvas)) -$(eval $(call gb_Library_use_external,vclcanvas,boost_headers)) +$(eval $(call gb_Library_use_externals,vclcanvas,\ + boost_headers \ + epoxy \ +)) $(eval $(call gb_Library_use_sdk_api,vclcanvas)) diff --git a/canvas/source/vcl/spritehelper.cxx b/canvas/source/vcl/spritehelper.cxx index 0dc26bf448cc..d8a45d422653 100644 --- a/canvas/source/vcl/spritehelper.cxx +++ b/canvas/source/vcl/spritehelper.cxx @@ -38,6 +38,7 @@ #include <vcl/canvastools.hxx> #include <vcl/outdev.hxx> #include <vcl/BitmapMonochromeFilter.hxx> +#include <vcl/opengl/OpenGLHelper.hxx> #include <canvas/canvastools.hxx> @@ -183,8 +184,11 @@ namespace vclcanvas if( !bIdentityTransform ) { + // Avoid the trick with the negative width in the OpenGL case, + // OutputDevice::DrawDeviceAlphaBitmap() doesn't like it. if( !::basegfx::fTools::equalZero( aTransform.get(0,1) ) || - !::basegfx::fTools::equalZero( aTransform.get(1,0) ) ) + !::basegfx::fTools::equalZero( aTransform.get(1,0) ) || + OpenGLHelper::isVCLOpenGLEnabled()) { // "complex" transformation, employ affine // transformator |