[Libreoffice-commits] core.git: canvas/source

Mike Kaganski (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 24 08:47:07 UTC 2020


 canvas/source/vcl/spritecanvas.cxx |   15 +++++++++++++++
 canvas/source/vcl/spritecanvas.hxx |    9 ++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

New commits:
commit 71654aed66ef425467118b69bc6d5879b4b0e717
Author:     Mike Kaganski <mike.kaganski at collabora.com>
AuthorDate: Thu Jul 23 18:12:02 2020 +0300
Commit:     Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Fri Jul 24 10:46:27 2020 +0200

    tdf#135078: let vclcanvas::SpriteCanvas implement css::lang::XServiceInfo
    
    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 <l.lunak at collabora.com>
    Tested-by: Jenkins

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 <sal/log.hxx>
 
 #include <com/sun/star/awt/XTopWindow.hpp>
+#include <cppuhelper/supportsservice.hxx>
 #include <tools/diagnose_ex.h>
 
 #include "spritecanvas.hxx"
@@ -131,6 +132,20 @@ namespace vclcanvas
         return "com.sun.star.rendering.SpriteCanvas.VCL";
     }
 
+    // XServiceInfo
+    css::uno::Sequence<OUString> 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 <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/lang/XServiceName.hpp>
 #include <com/sun/star/awt/XWindowListener.hpp>
 #include <com/sun/star/util/XUpdatable.hpp>
@@ -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<OUString> 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,


More information about the Libreoffice-commits mailing list