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() );