Kaydet (Commit) 76b43425 authored tarafından Miklos Vajna's avatar Miklos Vajna

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/57774Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins
üst 7f697ec2
......@@ -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))
......
......@@ -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
......
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