From 71654aed66ef425467118b69bc6d5879b4b0e717 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Thu, 23 Jul 2020 18:12:02 +0300 Subject: tdf#135078: let vclcanvas::SpriteCanvas implement css::lang::XServiceInfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In Skia mode, OGLTransitionerImpl::initWindowFromSlideShowView obtains vclcanvas::SpriteCanvas from passed xView; it's passed to getDeviceInfo, which needs a css::lang::XServiceInfo to fill the device params sequence. vclcanvas::SpriteCanvas did not implement it, the sequence stayed empty, and dereferencing its elements later crashed. When Skia is disabled (VCL:win), xView provides a dxcanvas::SpriteCanvas instead, which implements css::lang::XServiceInfo. This makes vclcanvas::SpriteCanvas implement css::lang::XServiceInfo. I don't know if it's better to find out why vclcanvas::SpriteCanvas is used in Skia mode, and not dxcanvas::SpriteCanvas. Change-Id: Ic0ab1323772161052a23946cfcc91e656ba6685c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99330 Reviewed-by: Luboš Luňák Tested-by: Jenkins --- canvas/source/vcl/spritecanvas.cxx | 15 +++++++++++++++ canvas/source/vcl/spritecanvas.hxx | 9 ++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'canvas') diff --git a/canvas/source/vcl/spritecanvas.cxx b/canvas/source/vcl/spritecanvas.cxx index a82bf0d4db18..bc3b2d9f290a 100644 --- a/canvas/source/vcl/spritecanvas.cxx +++ b/canvas/source/vcl/spritecanvas.cxx @@ -21,6 +21,7 @@ #include #include +#include #include #include "spritecanvas.hxx" @@ -131,6 +132,20 @@ namespace vclcanvas return "com.sun.star.rendering.SpriteCanvas.VCL"; } + // XServiceInfo + css::uno::Sequence SpriteCanvas::getSupportedServiceNames() + { + return { SpriteCanvas::getServiceName() }; + } + OUString SpriteCanvas::getImplementationName() + { + return "com.sun.star.comp.rendering.SpriteCanvas.VCL"; + } + sal_Bool SpriteCanvas::supportsService(const OUString& sServiceName) + { + return cppu::supportsService(this, sServiceName); + } + bool SpriteCanvas::repaint( const GraphicObjectSharedPtr& rGrf, const rendering::ViewState& viewState, const rendering::RenderState& renderState, diff --git a/canvas/source/vcl/spritecanvas.hxx b/canvas/source/vcl/spritecanvas.hxx index 06c70faca2c3..05897741d9ab 100644 --- a/canvas/source/vcl/spritecanvas.hxx +++ b/canvas/source/vcl/spritecanvas.hxx @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -56,7 +57,8 @@ namespace vclcanvas css::awt::XWindowListener, css::util::XUpdatable, css::beans::XPropertySet, - css::lang::XServiceName > WindowGraphicDeviceBase_Base; + css::lang::XServiceName, + css::lang::XServiceInfo > WindowGraphicDeviceBase_Base; typedef ::canvas::BufferedGraphicDeviceBase< ::canvas::DisambiguationHelper< WindowGraphicDeviceBase_Base >, SpriteDeviceHelper, tools::LocalGuard, @@ -132,6 +134,11 @@ namespace vclcanvas // XServiceName virtual OUString SAL_CALL getServiceName( ) override; + // XServiceInfo + virtual css::uno::Sequence SAL_CALL getSupportedServiceNames() override; + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService(const OUString&) override; + // RepaintTarget virtual bool repaint( const GraphicObjectSharedPtr& rGrf, const css::rendering::ViewState& viewState, -- cgit