diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2022-12-13 14:10:42 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2022-12-14 08:54:15 +0000 |
commit | 276e3ccbdd3259ec3daf8a1a98fa7f406b14e21c (patch) | |
tree | 17e0d9934b8f85ffe6dd8b8b4bbf3ad859bb4126 | |
parent | cbb3f697245d7d57439cb5019e9f9834cb9cd35f (diff) |
loplugin:unocast (vclcanvas::RepaintTarget)
(The overall inheritance hierarchies of the classes deriving from RepaintTarget
are so over-engineered that it looks easier to make each of those classes derive
from css::uno::XUnoTunnel individually, rather than deriving RepaintTarget from
something like cppu::WeakImplHelper<css::uno::XUnoTunnel>. And see the upcoming
commit introducing that loplugin:unocast on why such dynamic_casts from UNO
types are dangerous.)
Change-Id: I4bcfad4049a2fb366768602a432c1282c2bf477e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144140
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | canvas/source/vcl/cachedbitmap.cxx | 3 | ||||
-rw-r--r-- | canvas/source/vcl/canvas.cxx | 5 | ||||
-rw-r--r-- | canvas/source/vcl/canvas.hxx | 7 | ||||
-rw-r--r-- | canvas/source/vcl/canvasbitmap.cxx | 5 | ||||
-rw-r--r-- | canvas/source/vcl/canvasbitmap.hxx | 7 | ||||
-rw-r--r-- | canvas/source/vcl/canvascustomsprite.cxx | 5 | ||||
-rw-r--r-- | canvas/source/vcl/canvascustomsprite.hxx | 7 | ||||
-rw-r--r-- | canvas/source/vcl/repainttarget.hxx | 11 | ||||
-rw-r--r-- | canvas/source/vcl/spritecanvas.cxx | 5 | ||||
-rw-r--r-- | canvas/source/vcl/spritecanvas.hxx | 7 |
10 files changed, 56 insertions, 6 deletions
diff --git a/canvas/source/vcl/cachedbitmap.cxx b/canvas/source/vcl/cachedbitmap.cxx index 60b5f7986c55..2364c073e1fa 100644 --- a/canvas/source/vcl/cachedbitmap.cxx +++ b/canvas/source/vcl/cachedbitmap.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/rendering/RepaintResult.hpp> #include <utility> #include <comphelper/diagnose_ex.hxx> +#include <comphelper/servicehelper.hxx> #include "cachedbitmap.hxx" #include "repainttarget.hxx" @@ -70,7 +71,7 @@ namespace vclcanvas if( rNewState.Clip != rOldState.Clip ) return rendering::RepaintResult::FAILED; - RepaintTarget* pTarget = dynamic_cast< RepaintTarget* >(rTargetCanvas.get()); + RepaintTarget* pTarget = comphelper::getFromUnoTunnel< RepaintTarget >(rTargetCanvas); ENSURE_OR_THROW( pTarget, "CachedBitmap::redraw(): cannot cast target to RepaintTarget" ); diff --git a/canvas/source/vcl/canvas.cxx b/canvas/source/vcl/canvas.cxx index 7e38276e06d3..5cbda63a50ab 100644 --- a/canvas/source/vcl/canvas.cxx +++ b/canvas/source/vcl/canvas.cxx @@ -24,6 +24,7 @@ #include <com/sun/star/lang/NoSupportException.hpp> #include <sal/log.hxx> #include <comphelper/diagnose_ex.hxx> +#include <comphelper/servicehelper.hxx> #include <vcl/outdev.hxx> #include "outdevholder.hxx" @@ -96,6 +97,10 @@ namespace vclcanvas return "com.sun.star.rendering.Canvas.VCL"; } + sal_Int64 Canvas::getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) { + return comphelper::getSomethingImpl(aIdentifier, static_cast<RepaintTarget *>(this)); + } + bool Canvas::repaint( const GraphicObjectSharedPtr& rGrf, const rendering::ViewState& viewState, const rendering::RenderState& renderState, diff --git a/canvas/source/vcl/canvas.hxx b/canvas/source/vcl/canvas.hxx index be7d7858e3ad..c01b8ccfcca4 100644 --- a/canvas/source/vcl/canvas.hxx +++ b/canvas/source/vcl/canvas.hxx @@ -22,6 +22,7 @@ #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/lang/XServiceName.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/util/XUpdatable.hpp> #include <com/sun/star/rendering/XBitmapCanvas.hpp> #include <com/sun/star/rendering/XIntegerBitmap.hpp> @@ -48,7 +49,8 @@ namespace vclcanvas css::lang::XMultiServiceFactory, css::util::XUpdatable, css::beans::XPropertySet, - css::lang::XServiceName > GraphicDeviceBase_Base; + css::lang::XServiceName, + css::lang::XUnoTunnel> GraphicDeviceBase_Base; typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase_Base >, DeviceHelper, tools::LocalGuard, @@ -96,6 +98,9 @@ namespace vclcanvas // XServiceName virtual OUString SAL_CALL getServiceName( ) override; + // XUnoTunnel + sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) override; + // RepaintTarget virtual bool repaint( const GraphicObjectSharedPtr& rGrf, const css::rendering::ViewState& viewState, diff --git a/canvas/source/vcl/canvasbitmap.cxx b/canvas/source/vcl/canvasbitmap.cxx index 9ae37c2c495a..38aababdf03b 100644 --- a/canvas/source/vcl/canvasbitmap.cxx +++ b/canvas/source/vcl/canvasbitmap.cxx @@ -19,6 +19,7 @@ #include <sal/config.h> +#include <comphelper/servicehelper.hxx> #include <cppuhelper/supportsservice.hxx> #include "canvasbitmap.hxx" @@ -84,6 +85,10 @@ namespace vclcanvas return { "com.sun.star.rendering.CanvasBitmap" }; } + sal_Int64 CanvasBitmap::getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) { + return comphelper::getSomethingImpl(aIdentifier, static_cast<RepaintTarget *>(this)); + } + BitmapEx CanvasBitmap::getBitmap() const { SolarMutexGuard aGuard; diff --git a/canvas/source/vcl/canvasbitmap.hxx b/canvas/source/vcl/canvasbitmap.hxx index 1a95ce8c632c..4e64c8b2b6c6 100644 --- a/canvas/source/vcl/canvasbitmap.hxx +++ b/canvas/source/vcl/canvasbitmap.hxx @@ -22,6 +22,7 @@ #include <cppuhelper/compbase.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/rendering/XBitmapCanvas.hpp> #include <com/sun/star/rendering/XIntegerBitmap.hpp> #include <com/sun/star/beans/XFastPropertySet.hpp> @@ -44,7 +45,8 @@ namespace vclcanvas typedef ::cppu::WeakComponentImplHelper< css::rendering::XBitmapCanvas, css::rendering::XIntegerBitmap, css::lang::XServiceInfo, - css::beans::XFastPropertySet > CanvasBitmapBase_Base; + css::beans::XFastPropertySet, + css::lang::XUnoTunnel> CanvasBitmapBase_Base; typedef ::canvas::IntegerBitmapBase< canvas::BitmapCanvasBase2< ::canvas::BaseMutexHelper< CanvasBitmapBase_Base >, @@ -82,6 +84,9 @@ namespace vclcanvas virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; + // XUnoTunnel + sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) override; + // RepaintTarget interface virtual bool repaint( const GraphicObjectSharedPtr& rGrf, const css::rendering::ViewState& viewState, diff --git a/canvas/source/vcl/canvascustomsprite.cxx b/canvas/source/vcl/canvascustomsprite.cxx index 02e9b47fb233..b13fad66b8c6 100644 --- a/canvas/source/vcl/canvascustomsprite.cxx +++ b/canvas/source/vcl/canvascustomsprite.cxx @@ -23,6 +23,7 @@ #include <basegfx/point/b2dpoint.hxx> #include <cppuhelper/supportsservice.hxx> #include <comphelper/diagnose_ex.hxx> +#include <comphelper/servicehelper.hxx> #include <vcl/outdev.hxx> #include "canvascustomsprite.hxx" @@ -116,6 +117,10 @@ namespace vclcanvas return { "com.sun.star.rendering.CanvasCustomSprite" }; } + sal_Int64 CanvasCustomSprite::getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) { + return comphelper::getSomethingImpl(aIdentifier, static_cast<RepaintTarget *>(this)); + } + // Sprite void CanvasCustomSprite::redraw( OutputDevice& rOutDev, bool bBufferedUpdate ) const diff --git a/canvas/source/vcl/canvascustomsprite.hxx b/canvas/source/vcl/canvascustomsprite.hxx index 1a7d3ccfb69e..6fca0800f0c1 100644 --- a/canvas/source/vcl/canvascustomsprite.hxx +++ b/canvas/source/vcl/canvascustomsprite.hxx @@ -23,6 +23,7 @@ #include <comphelper/uno3.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/rendering/XBitmapCanvas.hpp> #include <com/sun/star/rendering/XCustomSprite.hpp> #include <com/sun/star/rendering/XIntegerBitmap.hpp> @@ -43,7 +44,8 @@ namespace vclcanvas typedef ::cppu::WeakComponentImplHelper< css::rendering::XCustomSprite, css::rendering::XBitmapCanvas, css::rendering::XIntegerBitmap, - css::lang::XServiceInfo > CanvasCustomSpriteBase_Base; + css::lang::XServiceInfo, + css::lang::XUnoTunnel> CanvasCustomSpriteBase_Base; /** Mixin Sprite Have to mixin the Sprite interface before deriving from @@ -96,6 +98,9 @@ namespace vclcanvas virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + // XUnoTunnel + sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) override; + // Sprite virtual void redraw( OutputDevice& rOutDev, bool bBufferedUpdate ) const override; diff --git a/canvas/source/vcl/repainttarget.hxx b/canvas/source/vcl/repainttarget.hxx index b8bac4ab9210..57c45882a3cd 100644 --- a/canvas/source/vcl/repainttarget.hxx +++ b/canvas/source/vcl/repainttarget.hxx @@ -19,6 +19,10 @@ #pragma once +#include <com/sun/star/uno/Sequence.hxx> +#include <comphelper/servicehelper.hxx> +#include <sal/types.h> + #include "cachedbitmap.hxx" class Point; @@ -34,7 +38,7 @@ namespace vclcanvas This interface must be implemented on all canvas implementations that hand out XCachedPrimitives */ - class SAL_LOPLUGIN_ANNOTATE("crosscast") RepaintTarget + class RepaintTarget { public: virtual ~RepaintTarget() {} @@ -46,6 +50,11 @@ namespace vclcanvas const ::Point& rPt, const ::Size& rSz, const GraphicAttr& rAttr ) const = 0; + + static css::uno::Sequence<sal_Int8> const & getUnoTunnelId() { + static comphelper::UnoIdInit const id; + return id.getSeq(); + } }; } diff --git a/canvas/source/vcl/spritecanvas.cxx b/canvas/source/vcl/spritecanvas.cxx index f67783681417..a366b32a5c4c 100644 --- a/canvas/source/vcl/spritecanvas.cxx +++ b/canvas/source/vcl/spritecanvas.cxx @@ -24,6 +24,7 @@ #include <com/sun/star/lang/NoSupportException.hpp> #include <cppuhelper/supportsservice.hxx> #include <comphelper/diagnose_ex.hxx> +#include <comphelper/servicehelper.hxx> #include "spritecanvas.hxx" #include "outdevholder.hxx" @@ -161,6 +162,10 @@ namespace vclcanvas return cppu::supportsService(this, sServiceName); } + sal_Int64 SpriteCanvas::getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) { + return comphelper::getSomethingImpl(aIdentifier, static_cast<RepaintTarget *>(this)); + } + 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 8f7c76880f51..335d8dcce3e3 100644 --- a/canvas/source/vcl/spritecanvas.hxx +++ b/canvas/source/vcl/spritecanvas.hxx @@ -25,6 +25,7 @@ #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/lang/XUnoTunnel.hpp> #include <com/sun/star/awt/XWindowListener.hpp> #include <com/sun/star/util/XUpdatable.hpp> #include <com/sun/star/rendering/XSpriteCanvas.hpp> @@ -57,7 +58,8 @@ namespace vclcanvas css::util::XUpdatable, css::beans::XPropertySet, css::lang::XServiceName, - css::lang::XServiceInfo > WindowGraphicDeviceBase_Base; + css::lang::XServiceInfo, + css::lang::XUnoTunnel > WindowGraphicDeviceBase_Base; typedef ::canvas::BufferedGraphicDeviceBase< ::canvas::DisambiguationHelper< WindowGraphicDeviceBase_Base >, SpriteDeviceHelper, tools::LocalGuard, @@ -138,6 +140,9 @@ namespace vclcanvas virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService(const OUString&) override; + // XUnoTunnel + sal_Int64 SAL_CALL getSomething(css::uno::Sequence<sal_Int8> const & aIdentifier) override; + // RepaintTarget virtual bool repaint( const GraphicObjectSharedPtr& rGrf, const css::rendering::ViewState& viewState, |