canvas/source/cairo/cairo_canvashelper.cxx |   20 ++++++++++++++++----
 canvas/source/vcl/canvasfont.cxx           |   10 ++++++++++
 canvas/source/vcl/canvasfont.hxx           |    7 ++++++-
 canvas/source/vcl/canvashelper.cxx         |    2 +-
 4 files changed, 33 insertions(+), 6 deletions(-)

New commits:
commit 40db42be1d8fd0f9c6c8c5ba3767ddb9ee2034c2
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Wed Dec 14 21:11:53 2022 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Fri Dec 23 14:21:11 2022 +0000

    loplugin:unocast (vclcanvas::CanvasFont)
    
    (See the upcoming commit introducing that loplugin:unocast on why such
    dynamic_casts from UNO types are dangerous.)
    
    Change-Id: Id92c7e4367aae8e22d77772986d85288cdb73f2a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144770
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/canvas/source/vcl/canvasfont.cxx b/canvas/source/vcl/canvasfont.cxx
index e7fab0492549..0f342de0785a 100644
--- a/canvas/source/vcl/canvasfont.cxx
+++ b/canvas/source/vcl/canvasfont.cxx
@@ -22,6 +22,7 @@
 #include <basegfx/numeric/ftools.hxx>
 #include <canvas/canvastools.hxx>
 #include <com/sun/star/rendering/PanoseProportion.hpp>
+#include <comphelper/servicehelper.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <i18nlangtag/languagetag.hxx>
 #include <rtl/math.hxx>
@@ -168,6 +169,15 @@ namespace vclcanvas
         return { "com.sun.star.rendering.CanvasFont" };
     }
 
+    sal_Int64 CanvasFont::getSomething(css::uno::Sequence<sal_Int8> const & 
aIdentifier) {
+        return comphelper::getSomethingImpl(aIdentifier, this);
+    }
+
+    css::uno::Sequence<sal_Int8> const & CanvasFont::getUnoTunnelId() {
+        static comphelper::UnoIdInit const id;
+        return id.getSeq();
+    }
+
     vcl::Font const & CanvasFont::getVCLFont() const
     {
         return *maFont;
diff --git a/canvas/source/vcl/canvasfont.hxx b/canvas/source/vcl/canvasfont.hxx
index fdfa870f5ed3..a4fd9fb0bc3e 100644
--- a/canvas/source/vcl/canvasfont.hxx
+++ b/canvas/source/vcl/canvasfont.hxx
@@ -23,6 +23,7 @@
 #include <cppuhelper/basemutex.hxx>
 
 #include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
 #include <com/sun/star/geometry/Matrix2D.hpp>
 #include <com/sun/star/rendering/FontRequest.hpp>
 #include <com/sun/star/rendering/XCanvasFont.hpp>
@@ -40,7 +41,8 @@
 namespace vclcanvas
 {
     typedef ::cppu::WeakComponentImplHelper< css::rendering::XCanvasFont,
-                                             css::lang::XServiceInfo > 
CanvasFont_Base;
+                                             css::lang::XServiceInfo,
+                                             css::lang::XUnoTunnel > 
CanvasFont_Base;
 
     class CanvasFont : public ::cppu::BaseMutex,
                        public CanvasFont_Base
@@ -73,6 +75,9 @@ namespace vclcanvas
         virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName 
) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames() override;
 
+        sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & 
aIdentifier) override;
+        static css::uno::Sequence<sal_Int8> const & getUnoTunnelId();
+
         vcl::Font const & getVCLFont() const;
 
     private:
diff --git a/canvas/source/vcl/canvashelper.cxx 
b/canvas/source/vcl/canvashelper.cxx
index cbbd18a376d9..60ab39d470a2 100644
--- a/canvas/source/vcl/canvashelper.cxx
+++ b/canvas/source/vcl/canvashelper.cxx
@@ -1111,7 +1111,7 @@ namespace vclcanvas
 
         setupOutDevState( viewState, renderState, TEXT_COLOR );
 
-        CanvasFont* pFont = dynamic_cast< CanvasFont* >( xFont.get() );
+        CanvasFont* pFont = comphelper::getFromUnoTunnel< CanvasFont >( xFont 
);
 
         ENSURE_ARG_OR_THROW( pFont,
                              "Font not compatible with this canvas" );
commit 2d1e7995eae29e2826449eb5179f5fae181794a5
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Thu Dec 15 12:00:33 2022 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Fri Dec 23 14:20:58 2022 +0000

    loplugin:unocast (CairoColorSpace)
    
    (See the upcoming commit introducing that loplugin:unocast on why such
    dynamic_casts from UNO types are dangerous.)
    
    Change-Id: Ie04db15daff4a44758019aab690ff8e822ddae45
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144771
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/canvas/source/cairo/cairo_canvashelper.cxx 
b/canvas/source/cairo/cairo_canvashelper.cxx
index 89a794bc6cd5..89a7ac65fd07 100644
--- a/canvas/source/cairo/cairo_canvashelper.cxx
+++ b/canvas/source/cairo/cairo_canvashelper.cxx
@@ -29,6 +29,7 @@
 #include <basegfx/utils/canvastools.hxx>
 #include <basegfx/utils/keystoplerp.hxx>
 #include <basegfx/utils/lerp.hxx>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
 #include <com/sun/star/rendering/ColorComponentTag.hpp>
 #include <com/sun/star/rendering/ColorSpaceType.hpp>
 #include <com/sun/star/rendering/CompositeOperation.hpp>
@@ -1341,7 +1342,7 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
 
     namespace
     {
-        class CairoColorSpace : public cppu::WeakImplHelper< 
css::rendering::XIntegerBitmapColorSpace >
+        class CairoColorSpace : public cppu::WeakImplHelper< 
css::rendering::XIntegerBitmapColorSpace, css::lang::XUnoTunnel >
         {
         private:
             uno::Sequence< sal_Int8 >  maComponentTags;
@@ -1499,7 +1500,7 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
             virtual uno::Sequence<double> SAL_CALL 
convertFromIntegerColorSpace( const uno::Sequence< ::sal_Int8 >& deviceColor,
                                                                                
  const uno::Reference< rendering::XColorSpace >& targetColorSpace ) override
             {
-                if( dynamic_cast<CairoColorSpace*>(targetColorSpace.get()) )
+                if( 
comphelper::getFromUnoTunnel<CairoColorSpace>(targetColorSpace) )
                 {
                     const sal_Int8* pIn( deviceColor.getConstArray() );
                     const std::size_t  nLen( deviceColor.getLength() );
@@ -1530,7 +1531,7 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
             virtual uno::Sequence< ::sal_Int8 > SAL_CALL 
convertToIntegerColorSpace( const uno::Sequence< ::sal_Int8 >& deviceColor,
                                                                                
      const uno::Reference< rendering::XIntegerBitmapColorSpace >& 
targetColorSpace ) override
             {
-                if( dynamic_cast<CairoColorSpace*>(targetColorSpace.get()) )
+                if( 
comphelper::getFromUnoTunnel<CairoColorSpace>(targetColorSpace) )
                 {
                     // it's us, so simply pass-through the data
                     return deviceColor;
@@ -1687,6 +1688,17 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
                     pBitCounts[2] =
                     pBitCounts[3] = 8;
             }
+
+            sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const 
& aIdentifier)
+                override
+            {
+                return comphelper::getSomethingImpl(aIdentifier, this);
+            }
+
+            static css::uno::Sequence<sal_Int8> const & getUnoTunnelId() {
+                static comphelper::UnoIdInit const id;
+                return id.getSeq();
+            }
         };
 
         class CairoNoAlphaColorSpace : public cppu::WeakImplHelper< 
css::rendering::XIntegerBitmapColorSpace >
@@ -1821,7 +1833,7 @@ constexpr OUStringLiteral 
PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::
             virtual uno::Sequence<double> SAL_CALL 
convertFromIntegerColorSpace( const uno::Sequence< ::sal_Int8 >& deviceColor,
                                                                                
  const uno::Reference< rendering::XColorSpace >& targetColorSpace ) override
             {
-                if( dynamic_cast<CairoColorSpace*>(targetColorSpace.get()) )
+                if( 
comphelper::getFromUnoTunnel<CairoColorSpace>(targetColorSpace) )
                 {
                     const sal_Int8* pIn( deviceColor.getConstArray() );
                     const std::size_t  nLen( deviceColor.getLength() );

Reply via email to