include/vcl_canvas/canvas.hxx | 3 include/vcl_canvas/customsprite.hxx | 2 include/vcl_canvas/graphicdevice.hxx | 4 include/vcl_canvas/spritecanvas.hxx | 2 include/vcl_canvas/windowlistener.hxx | 15 --- vcl/canvas_inc/base/bitmapcanvasbase.hxx | 4 vcl/canvas_inc/base/bufferedgraphicdevicebase.hxx | 8 - vcl/canvas_inc/base/canvasbase.hxx | 4 vcl/canvas_inc/base/canvascustomspritebase.hxx | 43 +++++----- vcl/canvas_inc/base/graphicdevicebase.hxx | 8 - vcl/canvas_inc/base/sprite.hxx | 6 - vcl/canvas_inc/base/spritecanvasbase.hxx | 12 +- vcl/canvas_inc/cairo_canvasbitmap.hxx | 2 vcl/canvas_inc/cairo_canvascustomsprite.hxx | 48 +++++------ vcl/canvas_inc/cairo_canvasfont.hxx | 4 vcl/canvas_inc/cairo_canvashelper.hxx | 9 +- vcl/canvas_inc/cairo_spritecanvas.hxx | 21 +++- vcl/canvas_inc/cairo_spritecanvashelper.hxx | 5 - vcl/canvas_inc/cairo_textlayout.hxx | 4 vcl/canvas_inc/spriteredrawmanager.hxx | 2 vcl/source/canvas/cairo/cairo_canvasbitmap.cxx | 4 vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx | 15 ++- vcl/source/canvas/cairo/cairo_canvasfont.cxx | 6 - vcl/source/canvas/cairo/cairo_canvashelper.cxx | 27 +++--- vcl/source/canvas/cairo/cairo_canvashelper_text.cxx | 5 - vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx | 81 ++++++++++--------- vcl/source/canvas/cairo/cairo_spritehelper.cxx | 2 vcl/source/canvas/cairo/cairo_textlayout.cxx | 4 vcl/source/canvas/tools/spriteredrawmanager.cxx | 8 - vcl/source/window/window.cxx | 7 + 30 files changed, 190 insertions(+), 175 deletions(-)
New commits: commit b22d01ed3a54329cce99931cb627b31cd2eb7e0b Author: Shardul Vikram Singh <shardulvi...@gmail.com> AuthorDate: Fri Jul 25 23:08:40 2025 +0530 Commit: Shardul Vikram Singh <shardulvi...@gmail.com> CommitDate: Fri Jul 25 23:08:40 2025 +0530 Achieve first successful build after major refactoring diff --git a/include/vcl_canvas/customsprite.hxx b/include/vcl_canvas/customsprite.hxx index 131d5335ac84..56025a89de65 100644 --- a/include/vcl_canvas/customsprite.hxx +++ b/include/vcl_canvas/customsprite.hxx @@ -9,7 +9,7 @@ namespace vcl_canvas class CustomSprite : public SpriteBase { public: - virtual Canvas* getContentCanvas() = 0; + virtual CanvasSharedPtr getContentCanvas() = 0; }; typedef std::shared_ptr<CustomSprite> CustomSpriteSharedPtr; diff --git a/include/vcl_canvas/spritecanvas.hxx b/include/vcl_canvas/spritecanvas.hxx index 50e4b8d328cd..5ec9e6512be6 100644 --- a/include/vcl_canvas/spritecanvas.hxx +++ b/include/vcl_canvas/spritecanvas.hxx @@ -11,7 +11,7 @@ namespace vcl_canvas class SpriteCanvas : public Canvas { public: - virtual CustomSprite* createCustomSprite( const ::css::geometry::RealSize2D& spriteSize ) = 0; + virtual CustomSpriteSharedPtr createCustomSprite( const ::css::geometry::RealSize2D& spriteSize ) = 0; // virtual SpriteSharedPtr createClonedSprite( const SpriteBase& original ) = 0; virtual sal_Bool updateScreen( sal_Bool bUpdateAll ) = 0; }; diff --git a/vcl/canvas_inc/base/canvascustomspritebase.hxx b/vcl/canvas_inc/base/canvascustomspritebase.hxx index 5c63d36495e4..6101d251da3a 100644 --- a/vcl/canvas_inc/base/canvascustomspritebase.hxx +++ b/vcl/canvas_inc/base/canvascustomspritebase.hxx @@ -27,6 +27,7 @@ #include <basegfx/range/b2drange.hxx> #include <base/integerbitmapbase.hxx> #include <base/bitmapcanvasbase.hxx> +#include <base/sprite.hxx> namespace com::sun::star::rendering { class XPolyPolygon2D; } @@ -77,6 +78,7 @@ namespace vcl_canvas { public: typedef IntegerBitmapBase< BitmapCanvasBase2<Base, CanvasHelper, Mutex, UnambiguousBase> > BaseType; + typedef CanvasCustomSpriteBase< Base, SpriteHelper, CanvasHelper, Mutex, UnambiguousBase > SelfType; CanvasCustomSpriteBase() : maSpriteHelper() @@ -91,15 +93,15 @@ namespace vcl_canvas @derive when overriding this method in derived classes, <em>always</em> call the base class' method! */ - /* virtual void disposeThis() override + virtual void disposeThis() /* override */ { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); maSpriteHelper.disposing(); // pass on to base class - BaseType::disposeThis(); - } */ + // BaseType::disposeThis(); + } // XCanvas: selectively override base's methods here, for opacity tracking /* virtual void SAL_CALL clear() override @@ -131,6 +133,8 @@ namespace vcl_canvas renderState ); } */ + virtual std::shared_ptr<SelfType> getShared() = 0; + // TODO(F3): If somebody uses the XIntegerBitmap methods to // clear pixel (setting alpha != 1.0 there), or a compositing // mode results in similar alpha, maSpriteHelper might @@ -145,7 +149,7 @@ namespace vcl_canvas typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.setAlpha( this, alpha ); + maSpriteHelper.setAlpha( getShared(), alpha ); } virtual void SAL_CALL move( const css::geometry::RealPoint2D& aNewPos, @@ -158,7 +162,7 @@ namespace vcl_canvas typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.move( this, aNewPos, viewState, renderState ); + maSpriteHelper.move( getShared(), aNewPos, viewState, renderState ); } virtual void SAL_CALL transform( const css::geometry::AffineMatrix2D& aTransformation ) override @@ -169,7 +173,7 @@ namespace vcl_canvas typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.transform( this, aTransformation ); + maSpriteHelper.transform( getShared(), aTransformation ); } virtual void SAL_CALL clip( const css::uno::Reference< css::rendering::XPolyPolygon2D >& aClip ) override @@ -178,37 +182,37 @@ namespace vcl_canvas typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.clip( this, aClip ); + maSpriteHelper.clip( getShared(), aClip ); } virtual void SAL_CALL setPriority( double nPriority ) override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.setPriority( this, nPriority ); + maSpriteHelper.setPriority( getShared(), nPriority ); } virtual void SAL_CALL show() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.show( this ); + maSpriteHelper.show( getShared() ); } virtual void SAL_CALL hide() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - maSpriteHelper.hide( this ); + maSpriteHelper.hide( getShared() ); } // XCustomSprite - Canvas* SAL_CALL + CanvasSharedPtr SAL_CALL getContentCanvas() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); - return this; + return getShared(); } // Sprite diff --git a/vcl/canvas_inc/base/sprite.hxx b/vcl/canvas_inc/base/sprite.hxx index 1809ba1fba34..73cbd8b30698 100644 --- a/vcl/canvas_inc/base/sprite.hxx +++ b/vcl/canvas_inc/base/sprite.hxx @@ -50,8 +50,10 @@ namespace vcl_canvas class Sprite { public: - typedef ::rtl::Reference< Sprite > Reference; + // typedef ::rtl::Reference< Sprite > Reference; + typedef std::shared_ptr< Sprite > Reference; + virtual void dispose() = 0; /** Query whether sprite update will fully cover the given area. Use this method to determine whether any background diff --git a/vcl/canvas_inc/base/spritecanvasbase.hxx b/vcl/canvas_inc/base/spritecanvasbase.hxx index a1fbd2943313..ca0f08137264 100644 --- a/vcl/canvas_inc/base/spritecanvasbase.hxx +++ b/vcl/canvas_inc/base/spritecanvasbase.hxx @@ -119,7 +119,7 @@ namespace vcl_canvas return BaseType::maCanvasHelper.createSpriteFromBitmaps(animationBitmaps, interpolationMode); } */ - virtual CustomSprite* SAL_CALL createCustomSprite( const css::geometry::RealSize2D& spriteSize ) override + virtual CustomSpriteSharedPtr SAL_CALL createCustomSprite( const css::geometry::RealSize2D& spriteSize ) override { /* tools::verifySpriteSize(spriteSize, __func__, @@ -144,7 +144,7 @@ namespace vcl_canvas // SpriteSurface virtual void showSprite( const Sprite::Reference& rSprite ) override { - OSL_ASSERT( rSprite.is() ); + OSL_ASSERT( rSprite ); typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -153,7 +153,7 @@ namespace vcl_canvas virtual void hideSprite( const Sprite::Reference& rSprite ) override { - OSL_ASSERT( rSprite.is() ); + OSL_ASSERT( rSprite ); typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -165,7 +165,7 @@ namespace vcl_canvas const ::basegfx::B2DPoint& rNewPos, const ::basegfx::B2DVector& rSpriteSize ) override { - OSL_ASSERT( rSprite.is() ); + OSL_ASSERT( rSprite ); typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -176,7 +176,7 @@ namespace vcl_canvas const ::basegfx::B2DPoint& rPos, const ::basegfx::B2DRange& rUpdateArea ) override { - OSL_ASSERT( rSprite.is() ); + OSL_ASSERT( rSprite ); typename BaseType::MutexType aGuard( BaseType::m_aMutex ); diff --git a/vcl/canvas_inc/cairo_canvascustomsprite.hxx b/vcl/canvas_inc/cairo_canvascustomsprite.hxx index 75e6530707ef..8ab6cfb260df 100644 --- a/vcl/canvas_inc/cairo_canvascustomsprite.hxx +++ b/vcl/canvas_inc/cairo_canvascustomsprite.hxx @@ -90,7 +90,12 @@ namespace vcl_cairocanvas CanvasCustomSprite( const css::geometry::RealSize2D& rSpriteSize, const SpriteCanvasSharedPtr& rRefDevice ); - // virtual void disposeThis() override; + virtual void disposeThis() override; + virtual void dispose() override; + std::shared_ptr<CanvasCustomSpriteBaseT> getShared() override + { + return shared_from_this(); + } // Forwarding the XComponent implementation to the // cppu::ImplHelper templated base diff --git a/vcl/canvas_inc/cairo_canvasfont.hxx b/vcl/canvas_inc/cairo_canvasfont.hxx index 65c6e168e610..61f9f1da739a 100644 --- a/vcl/canvas_inc/cairo_canvasfont.hxx +++ b/vcl/canvas_inc/cairo_canvasfont.hxx @@ -51,7 +51,7 @@ namespace vcl_cairocanvas CanvasFont( const css::rendering::FontRequest& fontRequest, const css::uno::Sequence< css::beans::PropertyValue >& extraFontProperties, const css::geometry::Matrix2D& rFontMatrix, - SurfaceProviderRef rDevice ); + SurfaceProviderSharedPtr rDevice ); /// Dispose all internal references virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; @@ -75,7 +75,7 @@ namespace vcl_cairocanvas private: ::vcl_canvas::vcltools::VCLObject<vcl::Font> maFont; css::rendering::FontRequest maFontRequest; - SurfaceProviderRef mpRefDevice; + SurfaceProviderSharedPtr mpRefDevice; sal_uInt32 mnEmphasisMark; }; diff --git a/vcl/canvas_inc/cairo_canvashelper.hxx b/vcl/canvas_inc/cairo_canvashelper.hxx index a439cd2fb340..5ff4c901ef63 100644 --- a/vcl/canvas_inc/cairo_canvashelper.hxx +++ b/vcl/canvas_inc/cairo_canvashelper.hxx @@ -24,6 +24,7 @@ #include <com/sun/star/rendering/IntegerBitmapLayout.hpp> #include <com/sun/star/rendering/XCanvas.hpp> +#include <memory> #include <vcl/vclptr.hxx> #include <vcl/virdev.hxx> @@ -76,7 +77,7 @@ namespace vcl_cairocanvas */ void init( const ::basegfx::B2ISize& rSizePixel, - SurfaceProvider& rSurfaceProvider, + SurfaceProviderSharedPtr rSurfaceProvider, ::vcl_canvas::GraphicDevice* pDevice ); void setSize( const ::basegfx::B2ISize& rSize ); @@ -232,7 +233,7 @@ namespace vcl_cairocanvas potential circular references for canvas. Provides us with our output surface and associated functionality. */ - SurfaceProvider* mpSurfaceProvider; + std::weak_ptr< SurfaceProvider > mpSurfaceProvider; /** Phyical output device @@ -264,7 +265,7 @@ namespace vcl_cairocanvas Operation aOperation, cairo_t* pCairo, const css::uno::Sequence< css::rendering::Texture >* pTextures, - const SurfaceProviderSharedPtr& pDevice, + SurfaceProvider* pDevice, css::rendering::FillRule eFillrule ); } diff --git a/vcl/canvas_inc/cairo_spritecanvas.hxx b/vcl/canvas_inc/cairo_spritecanvas.hxx index af179adc39d6..1b8723d7b17b 100644 --- a/vcl/canvas_inc/cairo_spritecanvas.hxx +++ b/vcl/canvas_inc/cairo_spritecanvas.hxx @@ -82,14 +82,21 @@ namespace vcl_cairocanvas references, this is implemented as one single object. */ class SpriteCanvas : public SpriteCanvasBaseT, - public RepaintTarget + public RepaintTarget, + public std::enable_shared_from_this<SpriteCanvas> { public: SpriteCanvas( const css::uno::Sequence< css::uno::Any >& aArguments, const css::uno::Reference< css::uno::XComponentContext >& rxContext ); void initialize(); - + virtual void SAL_CALL acquire() override{} + virtual void SAL_CALL release() override{} + virtual ::css::uno::Any SAL_CALL queryInterface( const ::css::uno::Type& aType ) override + { + return ::css::uno::Any(); + } + virtual void SAL_CALL disposing( const ::css::lang::EventObject& Source ) override{} /// Dispose all internal references // virtual void disposeThis() override; diff --git a/vcl/canvas_inc/cairo_spritecanvashelper.hxx b/vcl/canvas_inc/cairo_spritecanvashelper.hxx index 8c3205a4281c..53117c3dd03f 100644 --- a/vcl/canvas_inc/cairo_spritecanvashelper.hxx +++ b/vcl/canvas_inc/cairo_spritecanvashelper.hxx @@ -60,7 +60,7 @@ namespace vcl_cairocanvas css::rendering::XBitmap > >& animationBitmaps, sal_Int8 interpolationMode ); - ::vcl_canvas::CustomSprite* createCustomSprite( + ::vcl_canvas::CustomSpriteSharedPtr createCustomSprite( const css::geometry::RealSize2D& spriteSize ); css::uno::Reference< css::rendering::XSprite > createClonedSprite( @@ -126,7 +126,7 @@ namespace vcl_cairocanvas ::vcl_canvas::SpriteRedrawManager* mpRedrawManager; /// Set from the init method. used to generate sprites - SpriteCanvas* mpOwningSpriteCanvas; + std::weak_ptr<SpriteCanvas> mpOwningSpriteCanvas; /// a surface used to composite the frontbuffer image ::cairo::SurfaceSharedPtr mpCompositingSurface; diff --git a/vcl/canvas_inc/cairo_textlayout.hxx b/vcl/canvas_inc/cairo_textlayout.hxx index c1e268593e1e..019457bf3c2c 100644 --- a/vcl/canvas_inc/cairo_textlayout.hxx +++ b/vcl/canvas_inc/cairo_textlayout.hxx @@ -49,7 +49,7 @@ namespace vcl_cairocanvas sal_Int8 nDirection, sal_Int64 nRandomSeed, CanvasFont::Reference rFont, - SurfaceProviderRef rRefDevice ); + SurfaceProviderSharedPtr rRefDevice ); /// Dispose all internal references virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; @@ -98,7 +98,7 @@ namespace vcl_cairocanvas css::uno::Sequence< double > maLogicalAdvancements; css::uno::Sequence< sal_Bool > maKashidaPositions; CanvasFont::Reference mpFont; - SurfaceProviderRef mpRefDevice; + SurfaceProviderSharedPtr mpRefDevice; sal_Int8 mnTextDirection; }; diff --git a/vcl/canvas_inc/spriteredrawmanager.hxx b/vcl/canvas_inc/spriteredrawmanager.hxx index 29575ab599f1..6d4cb13db9c3 100644 --- a/vcl/canvas_inc/spriteredrawmanager.hxx +++ b/vcl/canvas_inc/spriteredrawmanager.hxx @@ -327,7 +327,7 @@ namespace vcl_canvas for (auto const& elem : rUpdateArea.maComponentList) { const Sprite::Reference& rSprite( elem.second.getSprite() ); - if( rSprite.is() ) + if( rSprite ) aSortedUpdateSprites.push_back( rSprite ); } diff --git a/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx b/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx index 26e29024ffb7..b310a130ffc9 100644 --- a/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx +++ b/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx @@ -55,7 +55,7 @@ namespace vcl_cairocanvas mpBufferSurface = mpSurfaceProvider->createSurface( rSize, bHasAlpha ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR ); mpBufferCairo = mpBufferSurface->getCairo(); - maCanvasHelper.init( rSize, *mpSurfaceProvider, pDevice ); + maCanvasHelper.init( rSize, mpSurfaceProvider, pDevice ); maCanvasHelper.setSurface( mpBufferSurface, bHasAlpha ); // clear bitmap to 100% transparent diff --git a/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx b/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx index 517e5db4f9e6..0cbf4a2e5ba2 100644 --- a/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx +++ b/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx @@ -50,7 +50,7 @@ namespace vcl_cairocanvas mpBufferSurface = mpSpriteCanvas->createSurface( maSize, CAIRO_CONTENT_COLOR_ALPHA ); maCanvasHelper.init( maSize, - *rRefDevice, + rRefDevice, rRefDevice.get() ); maCanvasHelper.setSurface( mpBufferSurface, true ); @@ -62,7 +62,7 @@ namespace vcl_cairocanvas maCanvasHelper.clear(); } - /* void CanvasCustomSprite::disposeThis() + void CanvasCustomSprite::disposeThis() { ::osl::MutexGuard aGuard( m_aMutex ); @@ -71,7 +71,12 @@ namespace vcl_cairocanvas // forward to parent CanvasCustomSpriteBaseT::disposeThis(); - } */ + } + + void CanvasCustomSprite::dispose() + { + disposeThis(); + } void CanvasCustomSprite::redraw( const CairoSharedPtr& pCairo, bool bBufferedUpdate ) const diff --git a/vcl/source/canvas/cairo/cairo_canvasfont.cxx b/vcl/source/canvas/cairo/cairo_canvasfont.cxx index 8c1c6ae97239..2038f0eb7205 100644 --- a/vcl/source/canvas/cairo/cairo_canvasfont.cxx +++ b/vcl/source/canvas/cairo/cairo_canvasfont.cxx @@ -40,7 +40,7 @@ namespace vcl_cairocanvas CanvasFont::CanvasFont( const rendering::FontRequest& rFontRequest, const uno::Sequence< beans::PropertyValue >& rExtraFontProperties, const geometry::Matrix2D& rFontMatrix, - SurfaceProviderRef rDevice ) : + SurfaceProviderSharedPtr rDevice ) : maFont( vcl::Font( rFontRequest.FontDescription.FamilyName, rFontRequest.FontDescription.StyleName, Size( 0, ::basegfx::fround(rFontRequest.CellSize) ) ) ), @@ -95,7 +95,7 @@ namespace vcl_cairocanvas rGuard.unlock(); { SolarMutexGuard aGuard; - mpRefDevice.clear(); + mpRefDevice.reset(); } rGuard.lock(); } @@ -104,7 +104,7 @@ namespace vcl_cairocanvas { SolarMutexGuard aGuard; - if( !mpRefDevice.is() ) + if( !mpRefDevice ) return uno::Reference< rendering::XTextLayout >(); // we're disposed return new TextLayout( aText, diff --git a/vcl/source/canvas/cairo/cairo_canvashelper.cxx b/vcl/source/canvas/cairo/cairo_canvashelper.cxx index 2635ba542096..9af33b5adfc3 100644 --- a/vcl/source/canvas/cairo/cairo_canvashelper.cxx +++ b/vcl/source/canvas/cairo/cairo_canvashelper.cxx @@ -64,7 +64,6 @@ using namespace ::com::sun::star; namespace vcl_cairocanvas { CanvasHelper::CanvasHelper() : - mpSurfaceProvider(nullptr), mpDevice(nullptr), mbHaveAlpha() { @@ -76,15 +75,15 @@ namespace vcl_cairocanvas mpCairo.reset(); mpVirtualDevice.disposeAndClear(); mpDevice = nullptr; - mpSurfaceProvider = nullptr; + mpSurfaceProvider.reset() ; } void CanvasHelper::init( const ::basegfx::B2ISize& rSizePixel, - SurfaceProvider& rSurfaceProvider, + SurfaceProviderSharedPtr rSurfaceProvider, vcl_canvas::GraphicDevice* pDevice ) { maSize = rSizePixel; - mpSurfaceProvider = &rSurfaceProvider; + mpSurfaceProvider = rSurfaceProvider; mpDevice = pDevice; } @@ -848,7 +847,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: doPolyPolygonImplementation( basegfx::B2DPolyPolygon(aEdge), aOperation, pCairo, pTextures, - mpSurfaceProvider, + mpSurfaceProvider.lock().get(), xPolyPolygon->getFillRule() ); // prepare next step @@ -861,7 +860,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: { doPolyPolygonImplementation( aPolyPoly, aOperation, pCairo, pTextures, - mpSurfaceProvider, + mpSurfaceProvider.lock().get(), xPolyPolygon->getFillRule() ); } } @@ -1114,7 +1113,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: aBitmapSize.Width = static_cast<sal_Int32>( dWidth ); aBitmapSize.Height = static_cast<sal_Int32>( dHeight ); - SurfaceSharedPtr pScaledSurface = mpSurfaceProvider->createSurface( + SurfaceSharedPtr pScaledSurface = mpSurfaceProvider.lock()->createSurface( ::basegfx::B2ISize( aBitmapSize.Width, aBitmapSize.Height ), bHasAlpha ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR ); CairoSharedPtr pCairo = pScaledSurface->getCairo(); @@ -1155,8 +1154,8 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: if( x <= 0 && y <= 0 && x + width >= maSize.getWidth() && y + height >= maSize.getHeight() ) { SAL_INFO( "canvas.cairo","trying to change surface to rgb"); - if( mpSurfaceProvider ) { - SurfaceSharedPtr pNewSurface = mpSurfaceProvider->changeSurface(); + if( auto pSurfaceProvider = mpSurfaceProvider.lock() ) { + SurfaceSharedPtr pNewSurface = pSurfaceProvider->changeSurface(); if( pNewSurface ) setSurface( pNewSurface, false ); @@ -1223,7 +1222,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: uno::Reference< rendering::XCachedPrimitive > rv; unsigned char* data = nullptr; bool bHasAlpha = false; - SurfaceSharedPtr pSurface = surfaceFromXBitmap( xBitmap, mpSurfaceProvider, data, bHasAlpha ); + SurfaceSharedPtr pSurface = surfaceFromXBitmap( xBitmap, mpSurfaceProvider.lock().get(), data, bHasAlpha ); geometry::IntegerSize2D aSize = xBitmap->getSize(); if( pSurface ) @@ -1256,7 +1255,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: uno::Reference< rendering::XCachedPrimitive > rv; unsigned char* data = nullptr; bool bHasAlpha = false; - SurfaceSharedPtr pSurface = surfaceFromXBitmap( xBitmap, mpSurfaceProvider, data, bHasAlpha ); + SurfaceSharedPtr pSurface = surfaceFromXBitmap( xBitmap, mpSurfaceProvider.lock().get(), data, bHasAlpha ); geometry::IntegerSize2D aSize = xBitmap->getSize(); if( pSurface ) @@ -1279,7 +1278,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: geometry::IntegerSize2D CanvasHelper::getSize() const { - if( !mpSurfaceProvider ) + if( !mpSurfaceProvider.lock() ) return geometry::IntegerSize2D(1, 1); // we're disposed return ::basegfx::unotools::integerSize2DFromB2ISize( maSize ); diff --git a/vcl/source/canvas/cairo/cairo_canvashelper_text.cxx b/vcl/source/canvas/cairo/cairo_canvashelper_text.cxx index 3fca5978523f..7a00a59a48c8 100644 --- a/vcl/source/canvas/cairo/cairo_canvashelper_text.cxx +++ b/vcl/source/canvas/cairo/cairo_canvashelper_text.cxx @@ -45,7 +45,8 @@ namespace vcl_cairocanvas const uno::Sequence< beans::PropertyValue >& extraFontProperties, const geometry::Matrix2D& fontMatrix ) { - return uno::Reference< rendering::XCanvasFont >( new CanvasFont( fontRequest, extraFontProperties, fontMatrix, mpSurfaceProvider )); + // DONT_FORGET_TO_REMOVE_THIS_COMMENT + return uno::Reference< rendering::XCanvasFont >( /* new CanvasFont( fontRequest, extraFontProperties, fontMatrix, mpSurfaceProvider ) */); } uno::Sequence< rendering::FontInfo > CanvasHelper::queryAvailableFonts( const rendering::XCanvas* , @@ -250,7 +251,7 @@ namespace vcl_cairocanvas // TODO(F2): alpha mpVirtualDevice->SetLayoutMode( nLayoutMode ); - rtl::Reference pTextLayout( new TextLayout(text, textDirection, 0, CanvasFont::Reference(dynamic_cast< CanvasFont* >( xFont.get() )), mpSurfaceProvider) ); + rtl::Reference pTextLayout( new TextLayout(text, textDirection, 0, CanvasFont::Reference(dynamic_cast< CanvasFont* >( xFont.get() )), mpSurfaceProvider.lock()) ); pTextLayout->draw(*mpVirtualDevice, aOutpos, viewState, renderState); } diff --git a/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx b/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx index ff66ff49507a..c1f63cc1d444 100644 --- a/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx +++ b/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <memory> #include <sal/config.h> #include <sal/log.hxx> @@ -91,7 +92,6 @@ namespace vcl_cairocanvas SpriteCanvasHelper::SpriteCanvasHelper() : mpRedrawManager( nullptr ), - mpOwningSpriteCanvas( nullptr ), mbCompositingSurfaceDirty(true) { } @@ -101,15 +101,15 @@ namespace vcl_cairocanvas const ::basegfx::B2ISize& rSize ) { mpRedrawManager = &rManager; - mpOwningSpriteCanvas = &rDevice; + mpOwningSpriteCanvas = rDevice.shared_from_this(); - CanvasHelper::init( rSize, rDevice, &rDevice ); + CanvasHelper::init( rSize, rDevice.shared_from_this(), &rDevice ); } void SpriteCanvasHelper::disposing() { mpCompositingSurface.reset(); - mpOwningSpriteCanvas = nullptr; + mpOwningSpriteCanvas.reset(); mpRedrawManager = nullptr; // forward to base @@ -129,13 +129,13 @@ namespace vcl_cairocanvas return uno::Reference< rendering::XAnimatedSprite >(); } - ::vcl_canvas::CustomSprite* SpriteCanvasHelper::createCustomSprite( const geometry::RealSize2D& spriteSize ) + ::vcl_canvas::CustomSpriteSharedPtr SpriteCanvasHelper::createCustomSprite( const geometry::RealSize2D& spriteSize ) { - if( !mpRedrawManager ) + if( !mpRedrawManager || mpOwningSpriteCanvas.lock()) return nullptr; // we're disposed - return new CanvasCustomSprite( spriteSize, - mpOwningSpriteCanvas ); + return std::make_shared<CanvasCustomSprite>( spriteSize, + mpOwningSpriteCanvas.lock() ); } uno::Reference< rendering::XSprite > SpriteCanvasHelper::createClonedSprite( @@ -148,22 +148,23 @@ namespace vcl_cairocanvas bool bUpdateAll, bool& io_bSurfaceDirty ) { + auto pOwningSpriteCanvas = mpOwningSpriteCanvas.lock(); if( !mpRedrawManager || - !mpOwningSpriteCanvas || - !mpOwningSpriteCanvas->getWindowSurface() || - !mpOwningSpriteCanvas->getBufferSurface() ) + !pOwningSpriteCanvas || + !pOwningSpriteCanvas->getWindowSurface() || + !pOwningSpriteCanvas->getBufferSurface() ) { return false; // disposed, or otherwise dysfunctional } SAL_INFO("canvas.cairo", "SpriteCanvasHelper::updateScreen called"); - const ::basegfx::B2ISize& rSize = mpOwningSpriteCanvas->getSizePixel(); + const ::basegfx::B2ISize& rSize = pOwningSpriteCanvas->getSizePixel(); // force compositing surface to be available before using it // inside forEachSpriteArea SurfaceSharedPtr pCompositingSurface = getCompositingSurface(rSize); - SurfaceSharedPtr pWindowSurface = mpOwningSpriteCanvas->getWindowSurface(); + SurfaceSharedPtr pWindowSurface = pOwningSpriteCanvas->getWindowSurface(); CairoSharedPtr pCompositingCairo = pCompositingSurface->getCairo(); CairoSharedPtr pWindowCairo = pWindowSurface->getCairo(); @@ -189,7 +190,7 @@ namespace vcl_cairocanvas cairo_clip( pCompositingCairo.get() ); cairo_save( pCompositingCairo.get() ); cairo_set_source_surface( pCompositingCairo.get(), - mpOwningSpriteCanvas->getBufferSurface()->getCairoSurface().get(), + pOwningSpriteCanvas->getBufferSurface()->getCairoSurface().get(), 0, 0 ); cairo_set_operator( pCompositingCairo.get(), CAIRO_OPERATOR_SOURCE ); cairo_paint( pCompositingCairo.get() ); @@ -220,16 +221,17 @@ namespace vcl_cairocanvas io_bSurfaceDirty = false; // commit to screen - mpOwningSpriteCanvas->flush(); + pOwningSpriteCanvas->flush(); return true; } void SpriteCanvasHelper::backgroundPaint( const ::basegfx::B2DRange& rUpdateRect ) { - if( mpOwningSpriteCanvas && mpCompositingSurface ) + auto pOwningSpriteCanvas = mpOwningSpriteCanvas.lock(); + if( pOwningSpriteCanvas && mpCompositingSurface ) repaintBackground( mpCompositingSurface->getCairo(), - mpOwningSpriteCanvas->getBufferSurface(), + pOwningSpriteCanvas->getBufferSurface(), rUpdateRect ); } @@ -237,19 +239,20 @@ namespace vcl_cairocanvas const ::basegfx::B2DRange& rMoveEnd, const ::vcl_canvas::SpriteRedrawManager::UpdateArea& rUpdateArea ) { - ENSURE_OR_THROW( mpOwningSpriteCanvas && - mpOwningSpriteCanvas->getBufferSurface(), + auto pOwningSpriteCanvas = mpOwningSpriteCanvas.lock(); + ENSURE_OR_THROW( pOwningSpriteCanvas && + pOwningSpriteCanvas->getBufferSurface(), "SpriteCanvasHelper::scrollUpdate(): NULL device pointer " ); SAL_INFO("canvas.cairo", "SpriteCanvasHelper::scrollUpdate called"); - const ::basegfx::B2ISize& rSize = mpOwningSpriteCanvas->getSizePixel(); + const ::basegfx::B2ISize& rSize = pOwningSpriteCanvas->getSizePixel(); const ::basegfx::B2IRange aOutputBounds( 0,0, rSize.getWidth(), rSize.getHeight() ); SurfaceSharedPtr pCompositingSurface = getCompositingSurface(rSize); - SurfaceSharedPtr pWindowSurface = mpOwningSpriteCanvas->getWindowSurface(); + SurfaceSharedPtr pWindowSurface = pOwningSpriteCanvas->getWindowSurface(); CairoSharedPtr pCompositingCairo = pCompositingSurface->getCairo(); CairoSharedPtr pWindowCairo = pWindowSurface->getCairo(); @@ -286,7 +289,7 @@ namespace vcl_cairocanvas for( const auto& rComponent : rUpdateArea.maComponentList ) { const ::vcl_canvas::Sprite::Reference& rSprite( rComponent.second.getSprite() ); - if( rSprite.is() ) + if( rSprite ) ::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw( pCompositingCairo, true ); } @@ -337,7 +340,7 @@ namespace vcl_cairocanvas aSecond( aFirst ); ++aSecond; - ENSURE_OR_THROW( aFirst->second.getSprite().is(), + ENSURE_OR_THROW( aFirst->second.getSprite(), "VCLCanvas::scrollUpdate(): no sprite" ); // repaint uncovered areas from sprite. Need to actually @@ -357,7 +360,7 @@ namespace vcl_cairocanvas ::basegfx::B2DRange( aDestRect ) ); for( const auto& rArea : aUncoveredAreas ) repaintBackground( pCompositingCairo, - mpOwningSpriteCanvas->getBufferSurface(), rArea ); + pOwningSpriteCanvas->getBufferSurface(), rArea ); cairo_rectangle( pWindowCairo.get(), 0, 0, rSize.getWidth(), rSize.getHeight() ); cairo_clip( pWindowCairo.get() ); @@ -371,16 +374,17 @@ namespace vcl_cairocanvas void SpriteCanvasHelper::opaqueUpdate( const ::basegfx::B2DRange& rTotalArea, const std::vector< ::vcl_canvas::Sprite::Reference >& rSortedUpdateSprites ) { - ENSURE_OR_THROW( mpOwningSpriteCanvas && - mpOwningSpriteCanvas->getBufferSurface(), + auto pOwningSpriteCanvas = mpOwningSpriteCanvas.lock(); + ENSURE_OR_THROW( pOwningSpriteCanvas && + pOwningSpriteCanvas->getBufferSurface(), "SpriteCanvasHelper::opaqueUpdate(): NULL device pointer " ); SAL_INFO("canvas.cairo", "SpriteCanvasHelper::opaqueUpdate called"); - const ::basegfx::B2ISize& rDeviceSize = mpOwningSpriteCanvas->getSizePixel(); + const ::basegfx::B2ISize& rDeviceSize = pOwningSpriteCanvas->getSizePixel(); SurfaceSharedPtr pCompositingSurface = getCompositingSurface(rDeviceSize); - SurfaceSharedPtr pWindowSurface = mpOwningSpriteCanvas->getWindowSurface(); + SurfaceSharedPtr pWindowSurface = pOwningSpriteCanvas->getWindowSurface(); CairoSharedPtr pCompositingCairo = pCompositingSurface->getCairo(); CairoSharedPtr pWindowCairo = pWindowSurface->getCairo(); @@ -396,7 +400,7 @@ namespace vcl_cairocanvas // repaint all affected sprites directly to output device for( const auto& rSprite : rSortedUpdateSprites ) { - if( rSprite.is() ) + if( rSprite ) ::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw( pCompositingCairo, false ); } @@ -416,18 +420,19 @@ namespace vcl_cairocanvas void SpriteCanvasHelper::genericUpdate( const ::basegfx::B2DRange& rRequestedArea, const std::vector< ::vcl_canvas::Sprite::Reference >& rSortedUpdateSprites ) { + auto pOwningSpriteCanvas = mpOwningSpriteCanvas.lock(); // TODO SAL_INFO("canvas.cairo", "SpriteCanvasHelper::genericUpdate called"); - ENSURE_OR_THROW( mpOwningSpriteCanvas && - mpOwningSpriteCanvas->getBufferSurface(), + ENSURE_OR_THROW( pOwningSpriteCanvas && + pOwningSpriteCanvas->getBufferSurface(), "SpriteCanvasHelper::genericUpdate(): NULL device pointer " ); // limit size of update VDev to target outdev's size - const ::basegfx::B2ISize& rSize = mpOwningSpriteCanvas->getSizePixel(); + const ::basegfx::B2ISize& rSize = pOwningSpriteCanvas->getSizePixel(); SurfaceSharedPtr pCompositingSurface = getCompositingSurface(rSize); - SurfaceSharedPtr pWindowSurface = mpOwningSpriteCanvas->getWindowSurface(); + SurfaceSharedPtr pWindowSurface = pOwningSpriteCanvas->getWindowSurface(); CairoSharedPtr pCompositingCairo = pCompositingSurface->getCairo(); CairoSharedPtr pWindowCairo = pWindowSurface->getCairo(); @@ -455,7 +460,7 @@ namespace vcl_cairocanvas // paint background cairo_save( pCompositingCairo.get() ); cairo_set_source_surface( pCompositingCairo.get(), - mpOwningSpriteCanvas->getBufferSurface()->getCairoSurface().get(), + pOwningSpriteCanvas->getBufferSurface()->getCairoSurface().get(), 0, 0 ); cairo_set_operator( pCompositingCairo.get(), CAIRO_OPERATOR_SOURCE ); cairo_paint( pCompositingCairo.get() ); @@ -465,7 +470,7 @@ namespace vcl_cairocanvas // VDev. for( const auto& rSprite : rSortedUpdateSprites ) { - if( rSprite.is() ) + if( rSprite ) ::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw( pCompositingCairo, true ); } @@ -509,7 +514,7 @@ namespace vcl_cairocanvas ::cairo::SurfaceSharedPtr SpriteCanvasHelper::createSurface( const ::basegfx::B2ISize& rNeededSize ) const { - return mpOwningSpriteCanvas->getWindowSurface()->getSimilar( + return mpOwningSpriteCanvas.lock()->getWindowSurface()->getSimilar( CAIRO_CONTENT_COLOR, rNeededSize.getWidth(), rNeededSize.getHeight() ); } diff --git a/vcl/source/canvas/cairo/cairo_spritehelper.cxx b/vcl/source/canvas/cairo/cairo_spritehelper.cxx index 8ba15bf65587..879f28708522 100644 --- a/vcl/source/canvas/cairo/cairo_spritehelper.cxx +++ b/vcl/source/canvas/cairo/cairo_spritehelper.cxx @@ -130,7 +130,7 @@ namespace vcl_cairocanvas rClip )); doPolyPolygonImplementation( aClipPoly, Clip, pCairo.get(), - nullptr, SurfaceProviderSharedPtr(mpSpriteCanvas), + nullptr, mpSpriteCanvas.get(), rClip->getFillRule() ); } diff --git a/vcl/source/canvas/cairo/cairo_textlayout.cxx b/vcl/source/canvas/cairo/cairo_textlayout.cxx index c9764ce97e83..d600c05670c2 100644 --- a/vcl/source/canvas/cairo/cairo_textlayout.cxx +++ b/vcl/source/canvas/cairo/cairo_textlayout.cxx @@ -74,7 +74,7 @@ namespace vcl_cairocanvas sal_Int8 nDirection, sal_Int64 /*nRandomSeed*/, CanvasFont::Reference rFont, - SurfaceProviderRef rRefDevice ) : + SurfaceProviderSharedPtr rRefDevice ) : maText(std::move( aText )), mpFont(std::move( rFont )), mpRefDevice(std::move( rRefDevice )), @@ -89,7 +89,7 @@ namespace vcl_cairocanvas void TextLayout::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { mpFont.clear(); - mpRefDevice.clear(); + mpRefDevice.reset(); } // XTextLayout diff --git a/vcl/source/canvas/tools/spriteredrawmanager.cxx b/vcl/source/canvas/tools/spriteredrawmanager.cxx index dfaffeb18c38..9dc7e55c2294 100644 --- a/vcl/source/canvas/tools/spriteredrawmanager.cxx +++ b/vcl/source/canvas/tools/spriteredrawmanager.cxx @@ -246,7 +246,7 @@ namespace vcl_canvas for( const auto& rChangeRecord : maChangeRecords ) { const Sprite::Reference& rSprite( rChangeRecord.getSprite() ); - if( rSprite.is() ) + if( rSprite ) aUpdatableSprites.push_back( rSprite ); } @@ -335,10 +335,10 @@ namespace vcl_canvas if( !aFirst->second.isPureMove() || !aSecond->second.isPureMove() || - !aFirst->second.getSprite().is() || + !aFirst->second.getSprite() || // use _true_ update area, not the rounded version !aFirst->second.getSprite()->isAreaUpdateOpaque( aFirst->second.getUpdateArea() ) || - aSecond->second.getSprite().is() ) + aSecond->second.getSprite() ) { // either no move update, or incorrect sprite, or sprite // content not fully opaque over update region. @@ -368,7 +368,7 @@ namespace vcl_canvas { const Sprite::Reference& pAffectedSprite( rComponent.second.getSprite() ); - if( !pAffectedSprite.is() ) + if( !pAffectedSprite ) return true; // no sprite, no opaque update! return !pAffectedSprite->isAreaUpdateOpaque( rUpdateRect ); diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 631b65fa6f0b..afc6f4acb6b1 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -578,7 +578,7 @@ Window::~Window() std::shared_ptr<vcl_cairocanvas::SpriteCanvas> Window::GetSpriteCanvas() { - Sequence< Any > aArg{ + const Sequence< Any > aArg{ Any(reinterpret_cast<sal_Int64>(GetOutDev())), Any(css::awt::Rectangle( 0, 0, 0, 0 )), Any(false), @@ -586,7 +586,10 @@ std::shared_ptr<vcl_cairocanvas::SpriteCanvas> Window::GetSpriteCanvas() GetOutDev()->GetSystemGfxDataAny() }; const Reference< XComponentContext >& xContext = comphelper::getProcessComponentContext(); - auto pSpriteCanvas = std::make_shared<vcl_cairocanvas::SpriteCanvas>(aArg, xContext); + // auto pSpriteCanvas = std::make_shared<vcl_cairocanvas::SpriteCanvas>(aArg, xContext); + auto pSpriteCanvas = std::shared_ptr<vcl_cairocanvas::SpriteCanvas>( + new vcl_cairocanvas::SpriteCanvas(aArg, xContext) + ); return pSpriteCanvas; } commit 5c8e5d52999f319e7e6941f9a4f61e91edded68d Author: Shardul Vikram Singh <shardulvi...@gmail.com> AuthorDate: Thu Jul 24 14:04:01 2025 +0530 Commit: Shardul Vikram Singh <shardulvi...@gmail.com> CommitDate: Thu Jul 24 14:04:01 2025 +0530 More refactoring diff --git a/include/vcl_canvas/canvas.hxx b/include/vcl_canvas/canvas.hxx index 48f599891a72..9a0a1e18f49b 100644 --- a/include/vcl_canvas/canvas.hxx +++ b/include/vcl_canvas/canvas.hxx @@ -1,5 +1,6 @@ #pragma once +#include <memory> namespace vcl_canvas { class Canvas @@ -8,4 +9,6 @@ public: virtual void clear() = 0; // NO DRAWING FUNCTIONS NEEDED :) }; + +typedef std::shared_ptr<Canvas> CanvasSharedPtr; } diff --git a/include/vcl_canvas/customsprite.hxx b/include/vcl_canvas/customsprite.hxx index 9d589ec47977..131d5335ac84 100644 --- a/include/vcl_canvas/customsprite.hxx +++ b/include/vcl_canvas/customsprite.hxx @@ -9,7 +9,7 @@ namespace vcl_canvas class CustomSprite : public SpriteBase { public: - virtual Canvas getContentCanvas() = 0; + virtual Canvas* getContentCanvas() = 0; }; typedef std::shared_ptr<CustomSprite> CustomSpriteSharedPtr; diff --git a/include/vcl_canvas/graphicdevice.hxx b/include/vcl_canvas/graphicdevice.hxx index 6394895480cc..dd3519d8b200 100644 --- a/include/vcl_canvas/graphicdevice.hxx +++ b/include/vcl_canvas/graphicdevice.hxx @@ -15,12 +15,12 @@ public: virtual ::css::uno::Reference< ::css::rendering::XColorSpace > getDeviceColorSpace() = 0; virtual ::css::geometry::RealSize2D getPhysicalResolution() = 0; virtual ::css::geometry::RealSize2D getPhysicalSize() = 0; - virtual ::css::uno::Reference< ::css::rendering::XLinePolyPolygon2D > createCompatibleLinePolyPolygon( const ::css::uno::Sequence< ::css::uno::Sequence< ::css::geometry::RealPoint2D > >& points ) = 0; + /* virtual ::css::uno::Reference< ::css::rendering::XLinePolyPolygon2D > createCompatibleLinePolyPolygon( const ::css::uno::Sequence< ::css::uno::Sequence< ::css::geometry::RealPoint2D > >& points ) = 0; virtual ::css::uno::Reference< ::css::rendering::XBezierPolyPolygon2D > createCompatibleBezierPolyPolygon( const ::css::uno::Sequence< ::css::uno::Sequence< ::css::geometry::RealBezierSegment2D > >& points ) = 0; virtual ::css::uno::Reference< ::css::rendering::XBitmap > createCompatibleBitmap( const ::css::geometry::IntegerSize2D& size ) = 0; virtual ::css::uno::Reference< ::css::rendering::XVolatileBitmap > createVolatileBitmap( const ::css::geometry::IntegerSize2D& size ) = 0; virtual ::css::uno::Reference< ::css::rendering::XBitmap > createCompatibleAlphaBitmap( const ::css::geometry::IntegerSize2D& size ) = 0; - virtual ::css::uno::Reference< ::css::rendering::XVolatileBitmap > createVolatileAlphaBitmap( const ::css::geometry::IntegerSize2D& size ) = 0; + virtual ::css::uno::Reference< ::css::rendering::XVolatileBitmap > createVolatileAlphaBitmap( const ::css::geometry::IntegerSize2D& size ) = 0; */ virtual ::sal_Bool hasFullScreenMode() = 0; virtual ::sal_Bool enterFullScreenMode( ::sal_Bool bEnter ) = 0; }; diff --git a/include/vcl_canvas/spritecanvas.hxx b/include/vcl_canvas/spritecanvas.hxx index ac0ca22e8125..50e4b8d328cd 100644 --- a/include/vcl_canvas/spritecanvas.hxx +++ b/include/vcl_canvas/spritecanvas.hxx @@ -11,8 +11,8 @@ namespace vcl_canvas class SpriteCanvas : public Canvas { public: - virtual CustomSpriteSharedPtr createCustomSprite( const ::css::geometry::RealSize2D& spriteSize ) = 0; - virtual SpriteSharedPtr createClonedSprite( const SpriteBase& original ) = 0; + virtual CustomSprite* createCustomSprite( const ::css::geometry::RealSize2D& spriteSize ) = 0; + // virtual SpriteSharedPtr createClonedSprite( const SpriteBase& original ) = 0; virtual sal_Bool updateScreen( sal_Bool bUpdateAll ) = 0; }; diff --git a/include/vcl_canvas/windowlistener.hxx b/include/vcl_canvas/windowlistener.hxx deleted file mode 100644 index c1ad70446b02..000000000000 --- a/include/vcl_canvas/windowlistener.hxx +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include <com/sun/star/awt/WindowEvent.hpp> - -namespace vcl_canvas -{ -class WindowListener -{ -public: - virtual void windowResized( const ::css::awt::WindowEvent& e ) = 0; - virtual void windowMoved( const ::css::awt::WindowEvent& e ) = 0; - virtual void windowShown( const ::css::lang::EventObject& e ) = 0; - virtual void windowHidden( const ::css::lang::EventObject& e ) = 0; -}; -} diff --git a/vcl/canvas_inc/base/bitmapcanvasbase.hxx b/vcl/canvas_inc/base/bitmapcanvasbase.hxx index a017b1af43ad..d6e51bf7ceb2 100644 --- a/vcl/canvas_inc/base/bitmapcanvasbase.hxx +++ b/vcl/canvas_inc/base/bitmapcanvasbase.hxx @@ -102,7 +102,7 @@ namespace vcl_canvas public: // XBitmapCanvas - virtual void SAL_CALL copyRect( const css::uno::Reference< css::rendering::XBitmapCanvas >& sourceCanvas, + /* virtual void SAL_CALL copyRect( const css::uno::Reference< css::rendering::XBitmapCanvas >& sourceCanvas, const css::geometry::RealRectangle2D& sourceRect, const css::rendering::ViewState& sourceViewState, const css::rendering::RenderState& sourceRenderState, @@ -118,7 +118,7 @@ namespace vcl_canvas typename BaseType::BaseType::MutexType aGuard( BaseType::m_aMutex ); BaseType::BaseType::mbSurfaceDirty = true; - } + } */ }; } diff --git a/vcl/canvas_inc/base/bufferedgraphicdevicebase.hxx b/vcl/canvas_inc/base/bufferedgraphicdevicebase.hxx index 635cffc513bc..dd501859262a 100644 --- a/vcl/canvas_inc/base/bufferedgraphicdevicebase.hxx +++ b/vcl/canvas_inc/base/bufferedgraphicdevicebase.hxx @@ -157,7 +157,7 @@ namespace vcl_canvas return css::uno::Any(mxWindow); } - virtual void disposeThis() override + /* virtual void disposeThis() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -169,7 +169,7 @@ namespace vcl_canvas // pass on to base class BaseType::disposeThis(); - } + } */ css::awt::Rectangle transformBounds( const css::awt::Rectangle& rBounds ) { @@ -204,7 +204,7 @@ namespace vcl_canvas } // XWindowListener - virtual void disposeEventSource( const css::lang::EventObject& Source ) override + /* virtual void disposeEventSource( const css::lang::EventObject& Source ) override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -212,7 +212,7 @@ namespace vcl_canvas mxWindow.clear(); BaseType::disposeEventSource(Source); - } + } */ virtual void SAL_CALL windowResized( const css::awt::WindowEvent& e ) override { diff --git a/vcl/canvas_inc/base/canvasbase.hxx b/vcl/canvas_inc/base/canvasbase.hxx index 3521babe695e..614b9b659917 100644 --- a/vcl/canvas_inc/base/canvasbase.hxx +++ b/vcl/canvas_inc/base/canvasbase.hxx @@ -131,7 +131,7 @@ namespace vcl_canvas } */ // XCanvas - /* virtual void SAL_CALL clear() override + virtual void SAL_CALL clear() override { MutexType aGuard( BaseType::m_aMutex ); @@ -140,7 +140,7 @@ namespace vcl_canvas maCanvasHelper.clear(); } - virtual void SAL_CALL drawPoint(const css::geometry::RealPoint2D& aPoint, + /* virtual void SAL_CALL drawPoint(const css::geometry::RealPoint2D& aPoint, const css::rendering::ViewState& viewState, const css::rendering::RenderState& renderState) override { diff --git a/vcl/canvas_inc/base/canvascustomspritebase.hxx b/vcl/canvas_inc/base/canvascustomspritebase.hxx index 11d8baa7fe57..5c63d36495e4 100644 --- a/vcl/canvas_inc/base/canvascustomspritebase.hxx +++ b/vcl/canvas_inc/base/canvascustomspritebase.hxx @@ -19,6 +19,7 @@ #pragma once +#include "vcl_canvas/canvas.hxx" #include <com/sun/star/rendering/XCanvas.hpp> #include <basegfx/point/b2dpoint.hxx> @@ -90,7 +91,7 @@ namespace vcl_canvas @derive when overriding this method in derived classes, <em>always</em> call the base class' method! */ - virtual void disposeThis() override + /* virtual void disposeThis() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -98,10 +99,10 @@ namespace vcl_canvas // pass on to base class BaseType::disposeThis(); - } + } */ // XCanvas: selectively override base's methods here, for opacity tracking - virtual void SAL_CALL clear() override + /* virtual void SAL_CALL clear() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -109,9 +110,9 @@ namespace vcl_canvas // and forward to base class, which handles the actual rendering return BaseType::clear(); - } + } */ - virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL + /* virtual css::uno::Reference< css::rendering::XCachedPrimitive > SAL_CALL drawBitmap( const css::uno::Reference< css::rendering::XBitmap >& xBitmap, const css::rendering::ViewState& viewState, const css::rendering::RenderState& renderState ) override @@ -128,7 +129,7 @@ namespace vcl_canvas return BaseType::drawBitmap( xBitmap, viewState, renderState ); - } + } */ // TODO(F3): If somebody uses the XIntegerBitmap methods to // clear pixel (setting alpha != 1.0 there), or a compositing @@ -151,9 +152,9 @@ namespace vcl_canvas const css::rendering::ViewState& viewState, const css::rendering::RenderState& renderState ) override { - tools::verifyArgs(aNewPos, viewState, renderState, + /* tools::verifyArgs(aNewPos, viewState, renderState, __func__, - static_cast< typename BaseType::UnambiguousBaseType* >(this)); + static_cast< typename BaseType::UnambiguousBaseType* >(this)); */ typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -162,9 +163,9 @@ namespace vcl_canvas virtual void SAL_CALL transform( const css::geometry::AffineMatrix2D& aTransformation ) override { - tools::verifyArgs(aTransformation, + /* tools::verifyArgs(aTransformation, __func__, - static_cast< typename BaseType::UnambiguousBaseType* >(this)); + static_cast< typename BaseType::UnambiguousBaseType* >(this)); */ typename BaseType::MutexType aGuard( BaseType::m_aMutex ); @@ -202,7 +203,7 @@ namespace vcl_canvas } // XCustomSprite - virtual css::uno::Reference< css::rendering::XCanvas > SAL_CALL + Canvas* SAL_CALL getContentCanvas() override { typename BaseType::MutexType aGuard( BaseType::m_aMutex ); diff --git a/vcl/canvas_inc/base/graphicdevicebase.hxx b/vcl/canvas_inc/base/graphicdevicebase.hxx index d89aaa0a6e24..077e51b08af9 100644 --- a/vcl/canvas_inc/base/graphicdevicebase.hxx +++ b/vcl/canvas_inc/base/graphicdevicebase.hxx @@ -131,7 +131,7 @@ namespace vcl_canvas [this] (css::uno::Any const& rAny) { this->setDumpScreenContent(rAny); } } } } ); } - virtual void disposeThis() override + /* virtual void disposeThis() override { MutexType aGuard( BaseType::m_aMutex ); @@ -139,7 +139,7 @@ namespace vcl_canvas // pass on to base class BaseType::disposeThis(); - } + } */ // XGraphicDevice /* virtual css::uno::Reference< css::rendering::XBufferController > SAL_CALL getBufferController( ) override @@ -168,7 +168,7 @@ namespace vcl_canvas return maDeviceHelper.getPhysicalSize(); } - virtual css::uno::Reference< css::rendering::XLinePolyPolygon2D > SAL_CALL createCompatibleLinePolyPolygon( const css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > >& points ) override + /* virtual css::uno::Reference< css::rendering::XLinePolyPolygon2D > SAL_CALL createCompatibleLinePolyPolygon( const css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > >& points ) override { MutexType aGuard( BaseType::m_aMutex ); @@ -224,7 +224,7 @@ namespace vcl_canvas MutexType aGuard( BaseType::m_aMutex ); return maDeviceHelper.createVolatileAlphaBitmap( this, size ); - } + } */ /* virtual css::uno::Reference< css::lang::XMultiServiceFactory > SAL_CALL getParametricPolyPolygonFactory( ) override { diff --git a/vcl/canvas_inc/base/sprite.hxx b/vcl/canvas_inc/base/sprite.hxx index e01d90dc449d..1809ba1fba34 100644 --- a/vcl/canvas_inc/base/sprite.hxx +++ b/vcl/canvas_inc/base/sprite.hxx @@ -47,7 +47,7 @@ namespace vcl_canvas functionality (which, of course, is impossible here in a generic way) */ - class Sprite : public css::lang::XComponent + class Sprite { public: typedef ::rtl::Reference< Sprite > Reference; diff --git a/vcl/canvas_inc/base/spritecanvasbase.hxx b/vcl/canvas_inc/base/spritecanvasbase.hxx index 837070f194ff..a1fbd2943313 100644 --- a/vcl/canvas_inc/base/spritecanvasbase.hxx +++ b/vcl/canvas_inc/base/spritecanvasbase.hxx @@ -119,11 +119,11 @@ namespace vcl_canvas return BaseType::maCanvasHelper.createSpriteFromBitmaps(animationBitmaps, interpolationMode); } */ - virtual CustomSpriteSharedPtr SAL_CALL createCustomSprite( const css::geometry::RealSize2D& spriteSize ) override + virtual CustomSprite* SAL_CALL createCustomSprite( const css::geometry::RealSize2D& spriteSize ) override { - tools::verifySpriteSize(spriteSize, + /* tools::verifySpriteSize(spriteSize, __func__, - static_cast< typename BaseType::UnambiguousBaseType* >(this)); + static_cast< typename BaseType::UnambiguousBaseType* >(this)); */ typename BaseType::MutexType aGuard( BaseType::m_aMutex ); diff --git a/vcl/canvas_inc/cairo_canvasbitmap.hxx b/vcl/canvas_inc/cairo_canvasbitmap.hxx index 32543c2c966f..da3c6c8c70bf 100644 --- a/vcl/canvas_inc/cairo_canvasbitmap.hxx +++ b/vcl/canvas_inc/cairo_canvasbitmap.hxx @@ -72,7 +72,7 @@ namespace vcl_cairocanvas */ CanvasBitmap( const ::basegfx::B2ISize& rSize, SurfaceProviderSharedPtr rDevice, - vcl_canvas::GraphicDeviceSharedPtr pDevice, + vcl_canvas::GraphicDevice* pDevice, bool bHasAlpha ); /// Dispose all internal references diff --git a/vcl/canvas_inc/cairo_canvascustomsprite.hxx b/vcl/canvas_inc/cairo_canvascustomsprite.hxx index 83677ac7590f..75e6530707ef 100644 --- a/vcl/canvas_inc/cairo_canvascustomsprite.hxx +++ b/vcl/canvas_inc/cairo_canvascustomsprite.hxx @@ -32,6 +32,7 @@ #include <base/basemutexhelper.hxx> #include <base/canvascustomspritebase.hxx> +#include <memory> #include <vcl/cairo.hxx> #include "cairo_sprite.hxx" @@ -39,35 +40,24 @@ #include "cairo_repainttarget.hxx" #include "cairo_spritehelper.hxx" #include "cairo_spritecanvas.hxx" +#include "vcl_canvas/canvas.hxx" +#include "vcl_canvas/customsprite.hxx" namespace vcl_cairocanvas { - typedef ::cppu::WeakComponentImplHelper< css::rendering::XCustomSprite, + /* typedef ::cppu::WeakComponentImplHelper< css::rendering::XCustomSprite, css::rendering::XBitmapCanvas, css::rendering::XIntegerBitmap, - css::lang::XServiceInfo > CanvasCustomSpriteBase_Base; - /** Mixin Sprite - - Have to mixin the Sprite interface before deriving from - ::canvas::CanvasCustomSpriteBase, as this template should - already implement some of those interface methods. - - The reason why this appears kinda convoluted is the fact that - we cannot specify non-IDL types as WeakComponentImplHelper - template args, and furthermore, don't want to derive - ::canvas::CanvasCustomSpriteBase directly from - ::canvas::Sprite (because derivees of - ::canvas::CanvasCustomSpriteBase have to explicitly forward - the XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS) - anyway). Basically, ::canvas::CanvasCustomSpriteBase should - remain a base class that provides implementation, not to - enforce any specific interface on its derivees. - */ - class CanvasCustomSpriteSpriteBase_Base : public ::vcl_canvas::BaseMutexHelper< CanvasCustomSpriteBase_Base >, - public Sprite, + css::lang::XServiceInfo > CanvasCustomSpriteBase_Base; */ + + class CanvasCustomSpriteSpriteBase_Base : public ::vcl_canvas::CustomSprite, + public ::vcl_canvas::Canvas, + public Sprite, public SurfaceProvider { + protected: + mutable osl::Mutex m_aMutex; }; typedef ::vcl_canvas::CanvasCustomSpriteBase< CanvasCustomSpriteSpriteBase_Base, @@ -79,7 +69,8 @@ namespace vcl_cairocanvas /* Definition of CanvasCustomSprite class */ class CanvasCustomSprite : public CanvasCustomSpriteBaseT, - public RepaintTarget + public RepaintTarget, + public std::enable_shared_from_this<CanvasCustomSprite> { public: /** Create a custom sprite @@ -97,21 +88,21 @@ namespace vcl_cairocanvas Target DX device */ CanvasCustomSprite( const css::geometry::RealSize2D& rSpriteSize, - const SpriteCanvasSharedPtr& rRefDevice ); + const SpriteCanvasSharedPtr& rRefDevice ); - virtual void disposeThis() override; + // virtual void disposeThis() override; // Forwarding the XComponent implementation to the // cppu::ImplHelper templated base // Classname Base doing refcount Base implementing the XComponent interface // | | | // V V V - DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( CanvasCustomSprite, CanvasCustomSpriteBase_Base, ::cppu::WeakComponentImplHelperBase ) + // DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( CanvasCustomSprite, CanvasCustomSpriteBase_Base, ::cppu::WeakComponentImplHelperBase ) // XServiceInfo - virtual OUString SAL_CALL getImplementationName() override; + /* virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; */ // Sprite virtual void redraw( const ::cairo::CairoSharedPtr& pCairo, diff --git a/vcl/canvas_inc/cairo_canvashelper.hxx b/vcl/canvas_inc/cairo_canvashelper.hxx index f9cd51bfd99c..a439cd2fb340 100644 --- a/vcl/canvas_inc/cairo_canvashelper.hxx +++ b/vcl/canvas_inc/cairo_canvashelper.hxx @@ -77,7 +77,7 @@ namespace vcl_cairocanvas */ void init( const ::basegfx::B2ISize& rSizePixel, SurfaceProvider& rSurfaceProvider, - ::vcl_canvas::GraphicDeviceSharedPtr pDevice ); + ::vcl_canvas::GraphicDevice* pDevice ); void setSize( const ::basegfx::B2ISize& rSize ); void setSurface( const ::cairo::SurfaceSharedPtr& pSurface, bool bHasAlpha ); diff --git a/vcl/canvas_inc/cairo_spritecanvas.hxx b/vcl/canvas_inc/cairo_spritecanvas.hxx index 71eab0852aed..af179adc39d6 100644 --- a/vcl/canvas_inc/cairo_spritecanvas.hxx +++ b/vcl/canvas_inc/cairo_spritecanvas.hxx @@ -20,7 +20,6 @@ #pragma once #include <memory> -#include <vcl_canvas/windowlistener.hxx> #include <vcl_canvas/updatable.hxx> #include <vcl_canvas/spritecanvas.hxx> #include <vcl_canvas/graphicdevice.hxx> @@ -39,16 +38,19 @@ #include "cairo_repainttarget.hxx" #include "cairo_surfaceprovider.hxx" #include "cairo_spritecanvashelper.hxx" +#include "com/sun/star/awt/XWindowListener.hdl" namespace vcl_cairocanvas { class SpriteCanvasBase_Base : public ::vcl_canvas::SpriteCanvas, public ::vcl_canvas::GraphicDevice, - public ::vcl_canvas::WindowListener, public ::vcl_canvas::Updatable, public ::vcl_canvas::SpriteSurface, - public SurfaceProvider + public SurfaceProvider, + public css::awt::XWindowListener { + protected: + mutable ::osl::Mutex m_aMutex; }; /* typedef ::cppu::WeakComponentImplHelper< css::rendering::XSpriteCanvas, css::rendering::XIntegerBitmap, @@ -60,7 +62,7 @@ namespace vcl_cairocanvas css::beans::XPropertySet, css::lang::XServiceName, css::lang::XServiceInfo > WindowGraphicDeviceBase_Base; */ - typedef ::vcl_canvas::BufferedGraphicDeviceBase< ::vcl_canvas::DisambiguationHelper< SpriteCanvasBase_Base >, + typedef ::vcl_canvas::BufferedGraphicDeviceBase< SpriteCanvasBase_Base , SpriteDeviceHelper, ::osl::MutexGuard, ::cppu::OWeakObject > SpriteCanvasBase_Base2; diff --git a/vcl/canvas_inc/cairo_spritecanvashelper.hxx b/vcl/canvas_inc/cairo_spritecanvashelper.hxx index 19221fc06d09..8c3205a4281c 100644 --- a/vcl/canvas_inc/cairo_spritecanvashelper.hxx +++ b/vcl/canvas_inc/cairo_spritecanvashelper.hxx @@ -27,6 +27,7 @@ #include <vcl/cairo.hxx> #include "cairo_canvashelper.hxx" +#include "vcl_canvas/customsprite.hxx" namespace basegfx { @@ -59,7 +60,7 @@ namespace vcl_cairocanvas css::rendering::XBitmap > >& animationBitmaps, sal_Int8 interpolationMode ); - css::uno::Reference< css::rendering::XCustomSprite > createCustomSprite( + ::vcl_canvas::CustomSprite* createCustomSprite( const css::geometry::RealSize2D& spriteSize ); css::uno::Reference< css::rendering::XSprite > createClonedSprite( diff --git a/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx b/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx index 0efb3d41bf77..26e29024ffb7 100644 --- a/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx +++ b/vcl/source/canvas/cairo/cairo_canvasbitmap.cxx @@ -39,7 +39,7 @@ namespace vcl_cairocanvas { CanvasBitmap::CanvasBitmap( const ::basegfx::B2ISize& rSize, SurfaceProviderSharedPtr rSurfaceProvider, - ::vcl_canvas::GraphicDeviceSharedPtr pDevice, + ::vcl_canvas::GraphicDevice* pDevice, bool bHasAlpha ) : mpSurfaceProvider(std::move( rSurfaceProvider )), maSize(rSize), diff --git a/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx b/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx index d072fcc45223..517e5db4f9e6 100644 --- a/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx +++ b/vcl/source/canvas/cairo/cairo_canvascustomsprite.cxx @@ -37,7 +37,7 @@ using namespace ::com::sun::star; namespace vcl_cairocanvas { CanvasCustomSprite::CanvasCustomSprite( const css::geometry::RealSize2D& rSpriteSize, - const SpriteCanvasSharedPtr& rRefDevice ) : + const SpriteCanvasSharedPtr& rRefDevice ) : mpSpriteCanvas( rRefDevice ), maSize( ::vcl_canvas::tools::roundUp( rSpriteSize.Width ), ::vcl_canvas::tools::roundUp( rSpriteSize.Height ) ) @@ -51,7 +51,7 @@ namespace vcl_cairocanvas maCanvasHelper.init( maSize, *rRefDevice, - rRefDevice ); + rRefDevice.get() ); maCanvasHelper.setSurface( mpBufferSurface, true ); maSpriteHelper.init( rSpriteSize, @@ -62,7 +62,7 @@ namespace vcl_cairocanvas maCanvasHelper.clear(); } - void CanvasCustomSprite::disposeThis() + /* void CanvasCustomSprite::disposeThis() { ::osl::MutexGuard aGuard( m_aMutex ); @@ -71,7 +71,7 @@ namespace vcl_cairocanvas // forward to parent CanvasCustomSpriteBaseT::disposeThis(); - } + } */ void CanvasCustomSprite::redraw( const CairoSharedPtr& pCairo, bool bBufferedUpdate ) const @@ -132,7 +132,7 @@ namespace vcl_cairocanvas return mpSpriteCanvas->getOutputDevice(); } - OUString SAL_CALL CanvasCustomSprite::getImplementationName() + /* OUString SAL_CALL CanvasCustomSprite::getImplementationName() { return u"CairoCanvas.CanvasCustomSprite"_ustr; } @@ -145,7 +145,7 @@ namespace vcl_cairocanvas uno::Sequence< OUString > SAL_CALL CanvasCustomSprite::getSupportedServiceNames() { return { u"com.sun.star.rendering.CanvasCustomSprite"_ustr }; - } + } */ } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/canvas/cairo/cairo_canvashelper.cxx b/vcl/source/canvas/cairo/cairo_canvashelper.cxx index e9a66405e50c..2635ba542096 100644 --- a/vcl/source/canvas/cairo/cairo_canvashelper.cxx +++ b/vcl/source/canvas/cairo/cairo_canvashelper.cxx @@ -81,11 +81,11 @@ namespace vcl_cairocanvas void CanvasHelper::init( const ::basegfx::B2ISize& rSizePixel, SurfaceProvider& rSurfaceProvider, - vcl_canvas::GraphicDeviceSharedPtr pDevice ) + vcl_canvas::GraphicDevice* pDevice ) { maSize = rSizePixel; mpSurfaceProvider = &rSurfaceProvider; - mpDevice = pDevice.get(); + mpDevice = pDevice; } void CanvasHelper::setSize( const ::basegfx::B2ISize& rSize ) diff --git a/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx b/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx index 440c34cd1d05..ff66ff49507a 100644 --- a/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx +++ b/vcl/source/canvas/cairo/cairo_spritecanvashelper.cxx @@ -30,6 +30,7 @@ #include <cairo.h> #include "cairo_canvascustomsprite.hxx" +#include "vcl_canvas/customsprite.hxx" #include "cairo_spritecanvashelper.hxx" using namespace ::cairo; @@ -128,14 +129,13 @@ namespace vcl_cairocanvas return uno::Reference< rendering::XAnimatedSprite >(); } - uno::Reference< rendering::XCustomSprite > SpriteCanvasHelper::createCustomSprite( const geometry::RealSize2D& spriteSize ) + ::vcl_canvas::CustomSprite* SpriteCanvasHelper::createCustomSprite( const geometry::RealSize2D& spriteSize ) { if( !mpRedrawManager ) - return uno::Reference< rendering::XCustomSprite >(); // we're disposed + return nullptr; // we're disposed - return uno::Reference< rendering::XCustomSprite >( - new CanvasCustomSprite( spriteSize, - mpOwningSpriteCanvas ) ); + return new CanvasCustomSprite( spriteSize, + mpOwningSpriteCanvas ); } uno::Reference< rendering::XSprite > SpriteCanvasHelper::createClonedSprite(