diff options
-rw-r--r-- | canvas/CppunitTest_canvas_test.mk | 46 | ||||
-rw-r--r-- | canvas/Module_canvas.mk | 4 | ||||
-rw-r--r-- | canvas/qa/cppunit/README | 11 | ||||
-rw-r--r-- | canvas/qa/cppunit/canvastest.cxx | 109 | ||||
-rw-r--r-- | canvas/source/vcl/canvas.cxx | 27 | ||||
-rw-r--r-- | canvas/source/vcl/outdevholder.hxx | 51 | ||||
-rw-r--r-- | canvas/source/vcl/spritecanvas.cxx | 21 | ||||
-rw-r--r-- | include/vcl/outdev.hxx | 16 | ||||
-rw-r--r-- | include/vcl/window.hxx | 12 | ||||
-rw-r--r-- | vcl/inc/window.h | 8 | ||||
-rw-r--r-- | vcl/source/outdev/outdev.cxx | 80 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 29 | ||||
-rw-r--r-- | vcl/source/window/wrkwin.cxx | 8 |
13 files changed, 343 insertions, 79 deletions
diff --git a/canvas/CppunitTest_canvas_test.mk b/canvas/CppunitTest_canvas_test.mk new file mode 100644 index 000000000000..740e7e11db48 --- /dev/null +++ b/canvas/CppunitTest_canvas_test.mk @@ -0,0 +1,46 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +#************************************************************************* +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +#************************************************************************* + +$(eval $(call gb_CppunitTest_CppunitTest,canvas_test)) + +$(eval $(call gb_CppunitTest_add_exception_objects,canvas_test, \ + canvas/qa/cppunit/canvastest \ +)) + +$(eval $(call gb_CppunitTest_use_external,canvas_test,boost_headers)) + +$(eval $(call gb_CppunitTest_use_libraries,canvas_test, \ + basegfx \ + comphelper \ + cppu \ + cppuhelper \ + sal \ + test \ + tl \ + unotest \ + vcl \ +)) + +$(eval $(call gb_CppunitTest_use_sdk_api,canvas_test)) + +$(eval $(call gb_CppunitTest_use_ure,canvas_test)) +$(eval $(call gb_CppunitTest_use_vcl,canvas_test)) + +$(eval $(call gb_CppunitTest_use_components,canvas_test,\ + canvas/source/vcl/vclcanvas \ + canvas/source/factory/canvasfactory \ + configmgr/source/configmgr \ + i18npool/util/i18npool \ +)) + +$(eval $(call gb_CppunitTest_use_configuration,canvas_test)) + +# vim: set noet sw=4 ts=4: diff --git a/canvas/Module_canvas.mk b/canvas/Module_canvas.mk index f62d7ef46299..0ca3c4c9bfe0 100644 --- a/canvas/Module_canvas.mk +++ b/canvas/Module_canvas.mk @@ -49,4 +49,8 @@ $(eval $(call gb_Module_add_targets,canvas,\ )) endif +$(eval $(call gb_Module_add_check_targets,canvas,\ + CppunitTest_canvas_test \ +)) + # vim: set noet sw=4 ts=4: diff --git a/canvas/qa/cppunit/README b/canvas/qa/cppunit/README new file mode 100644 index 000000000000..f4fc2f2e0467 --- /dev/null +++ b/canvas/qa/cppunit/README @@ -0,0 +1,11 @@ +How to write a canvas test: +=========================== + +The easiest (relatively speaking) way is to copy&paste from somewhere. Use existing tests +as the base, or canvas/workben/canvasdemo.cxx should be a good source too. If that doesn't +help, then you'll need to find the right UNO interfaces (see canvas/README). Have "fun". + + +Currently only the vclcanvas implementation is tested, because it's the only one +capable of working with offscreen surfaces. Other implementations would need to +be fixed, and then added to the gb_CppunitTest_use_components list in the makefile. diff --git a/canvas/qa/cppunit/canvastest.cxx b/canvas/qa/cppunit/canvastest.cxx new file mode 100644 index 000000000000..414b85b2f51c --- /dev/null +++ b/canvas/qa/cppunit/canvastest.cxx @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + */ + +#include <test/bootstrapfixture.hxx> + +#include <vcl/virdev.hxx> +#include <vcl/BitmapReadAccess.hxx> +#include <vcl/canvastools.hxx> +#include <vcl/graphicfilter.hxx> +#include <tools/stream.hxx> + +#include <com/sun/star/rendering/XBitmap.hpp> +#include <com/sun/star/rendering/XCanvas.hpp> +#include <com/sun/star/rendering/XBitmapCanvas.hpp> +#include <com/sun/star/rendering/CompositeOperation.hpp> + +using namespace ::com::sun::star; + +class CanvasTest : public test::BootstrapFixture +{ + VclPtr<VirtualDevice> mVclDevice; + uno::Reference<rendering::XCanvas> mCanvas; + rendering::ViewState mViewState; + rendering::RenderState mRenderState; + uno::Sequence<double> mColorBlack; + + // if enabled - check the result images with: + // "xdg-open ./workdir/CppunitTest/canvas_test.test.core/" + static constexpr const bool mbExportBitmap = false; + + void exportDevice(const OUString& filename, const VclPtr<VirtualDevice>& device) + { + if (mbExportBitmap) + { + BitmapEx aBitmapEx(device->GetBitmapEx(Point(0, 0), device->GetOutputSizePixel())); + SvFileStream aStream(filename, StreamMode::WRITE | StreamMode::TRUNC); + GraphicFilter::GetGraphicFilter().compressAsPNG(aBitmapEx, aStream); + } + } + +public: + CanvasTest() + : BootstrapFixture(true, false) + { + } + + virtual void setUp() override + { + BootstrapFixture::setUp(); + mColorBlack = vcl::unotools::colorToStdColorSpaceSequence(COL_BLACK); + // Geometry init + geometry::AffineMatrix2D aUnit(1, 0, 0, 0, 1, 0); + mViewState.AffineTransform = aUnit; + mRenderState.AffineTransform = aUnit; + mRenderState.DeviceColor = mColorBlack; + mRenderState.CompositeOperation = rendering::CompositeOperation::OVER; + } + + virtual void tearDown() override + { + mVclDevice.clear(); + mCanvas = uno::Reference<rendering::XCanvas>(); + BootstrapFixture::tearDown(); + } + + void setupCanvas(const Size& size, Color backgroundColor = COL_WHITE, bool alpha = false) + { + mVclDevice + = alpha ? VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT, DeviceFormat::DEFAULT) + : VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT); + mVclDevice->SetOutputSizePixel(size); + mVclDevice->SetBackground(Wallpaper(backgroundColor)); + mVclDevice->Erase(); + mCanvas = mVclDevice->GetCanvas(); + CPPUNIT_ASSERT(mCanvas.is()); + } + + void testDrawLine() + { + setupCanvas(Size(10, 10)); + mCanvas->drawLine(geometry::RealPoint2D(1, 1), geometry::RealPoint2D(9, 1), mViewState, + mRenderState); + exportDevice("test-draw-line.png", mVclDevice); + Bitmap bitmap = mVclDevice->GetBitmap(Point(), Size(10, 10)); + Bitmap::ScopedReadAccess access(bitmap); + // Canvas uses AA, which blurs the line, and it cannot be turned off, + // so do not check the end points. + CPPUNIT_ASSERT_EQUAL(BitmapColor(COL_WHITE), access->GetPixel(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(COL_BLACK), access->GetPixel(1, 2)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(COL_BLACK), access->GetPixel(1, 8)); + } + + CPPUNIT_TEST_SUITE(CanvasTest); + CPPUNIT_TEST(testDrawLine); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(CanvasTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/vcl/canvas.cxx b/canvas/source/vcl/canvas.cxx index 467da51f37ed..e9ebf85b3b3a 100644 --- a/canvas/source/vcl/canvas.cxx +++ b/canvas/source/vcl/canvas.cxx @@ -19,40 +19,19 @@ #include <sal/config.h> +#include "canvas.hxx" + #include <com/sun/star/lang/NoSupportException.hpp> #include <sal/log.hxx> #include <tools/diagnose_ex.h> #include <vcl/outdev.hxx> -#include "canvas.hxx" +#include "outdevholder.hxx" using namespace ::com::sun::star; namespace vclcanvas { - namespace - { - class OutDevHolder : public OutDevProvider - { - public: - OutDevHolder(const OutDevHolder&) = delete; - const OutDevHolder& operator=(const OutDevHolder&) = delete; - - explicit OutDevHolder( OutputDevice& rOutDev ) : - mrOutDev(rOutDev) - {} - - private: - virtual OutputDevice& getOutDev() override { return mrOutDev; } - virtual const OutputDevice& getOutDev() const override { return mrOutDev; } - - // TODO(Q2): Lifetime issue. This _only_ works reliably, - // if disposing the Canvas correctly disposes all - // entities which hold this pointer. - OutputDevice& mrOutDev; - }; - } - Canvas::Canvas( const uno::Sequence< uno::Any >& aArguments, const uno::Reference< uno::XComponentContext >& /*rxContext*/ ) : maArguments(aArguments) diff --git a/canvas/source/vcl/outdevholder.hxx b/canvas/source/vcl/outdevholder.hxx new file mode 100644 index 000000000000..78f3badf8bb6 --- /dev/null +++ b/canvas/source/vcl/outdevholder.hxx @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <com/sun/star/uno/Reference.hxx> +#include <vcl/outdev.hxx> + +#include "outdevprovider.hxx" + +namespace vclcanvas +{ +class OutDevHolder : public OutDevProvider +{ +public: + OutDevHolder(const OutDevHolder&) = delete; + const OutDevHolder& operator=(const OutDevHolder&) = delete; + + explicit OutDevHolder(OutputDevice& rOutDev) + : mrOutDev(rOutDev) + { + } + +private: + virtual OutputDevice& getOutDev() override { return mrOutDev; } + virtual const OutputDevice& getOutDev() const override { return mrOutDev; } + + // TODO(Q2): Lifetime issue. This _only_ works reliably, + // if disposing the Canvas correctly disposes all + // entities which hold this pointer. + OutputDevice& mrOutDev; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/vcl/spritecanvas.cxx b/canvas/source/vcl/spritecanvas.cxx index 2238a79127f0..60c65fbd7bce 100644 --- a/canvas/source/vcl/spritecanvas.cxx +++ b/canvas/source/vcl/spritecanvas.cxx @@ -21,10 +21,12 @@ #include <sal/log.hxx> #include <com/sun/star/awt/XTopWindow.hpp> +#include <com/sun/star/lang/NoSupportException.hpp> #include <cppuhelper/supportsservice.hxx> #include <tools/diagnose_ex.h> #include "spritecanvas.hxx" +#include "outdevholder.hxx" #include "windowoutdevholder.hxx" @@ -75,14 +77,27 @@ namespace vclcanvas maArguments[3].getValueTypeClass() == uno::TypeClass_INTERFACE, "VCLSpriteCanvas::initialize: wrong number of arguments, or wrong types" ); + sal_Int64 nPtr = 0; + maArguments[0] >>= nPtr; + + OutputDevice* pOutDev = reinterpret_cast<OutputDevice*>(nPtr); + if( !pOutDev ) + throw lang::NoSupportException("Passed OutDev invalid!", nullptr); + uno::Reference< awt::XWindow > xParentWindow; maArguments[3] >>= xParentWindow; - OutDevProviderSharedPtr pOutDev = std::make_shared<WindowOutDevHolder>(xParentWindow); + OutDevProviderSharedPtr pOutDevProvider; + if( xParentWindow.is()) + pOutDevProvider = std::make_shared<WindowOutDevHolder>(xParentWindow); + else + pOutDevProvider = std::make_shared<OutDevHolder>(*pOutDev); // setup helper - maDeviceHelper.init( pOutDev ); - setWindow(uno::Reference<awt::XWindow2>(xParentWindow, uno::UNO_QUERY_THROW)); + maDeviceHelper.init( pOutDevProvider ); + setWindow( xParentWindow.is() + ? uno::Reference<awt::XWindow2>(xParentWindow, uno::UNO_QUERY_THROW) + : uno::Reference<awt::XWindow2>()); maCanvasHelper.init( maDeviceHelper.getBackBuffer(), *this, maRedrawManager, diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index fee759107d5f..f395dddf287a 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -45,6 +45,7 @@ #include <basegfx/polygon/b2dpolypolygon.hxx> #include <unotools/fontdefs.hxx> +#include <cppuhelper/weakref.hxx> #include <com/sun/star/drawing/LineCap.hpp> #include <com/sun/star/uno/Reference.h> @@ -110,6 +111,11 @@ namespace com::sun::star::awt { class XGraphics; } +namespace com::sun::star::rendering { + class XCanvas; + class XSpriteCanvas; +} + #if defined UNX #define GLYPH_FONT_HEIGHT 128 #else @@ -304,6 +310,8 @@ private: std::unique_ptr<ImplOutDevData> mpOutDevData; std::vector< VCLXGraphics* >* mpUnoGraphicsList; vcl::ExtOutDevData* mpExtOutDevData; + // The canvas interface for this output device. Is persistent after the first GetCanvas() call + mutable css::uno::WeakReference< css::rendering::XCanvas > mxCanvas; // TEMP TEMP TEMP VclPtr<VirtualDevice> mpAlphaVDev; @@ -440,6 +448,11 @@ public: virtual size_t GetSyncCount() const { return 0xffffffff; } + /// request XCanvas render interface + css::uno::Reference< css::rendering::XCanvas > GetCanvas() const; + /// request XSpriteCanvas render interface + css::uno::Reference< css::rendering::XSpriteCanvas > GetSpriteCanvas() const; + protected: /** Acquire a graphics device that the output device uses to draw on. @@ -557,6 +570,9 @@ protected: SAL_DLLPRIVATE bool is_double_buffered_window() const; + virtual css::uno::Reference< css::rendering::XCanvas > ImplGetCanvas( bool bSpriteCanvas ) const; + SAL_DLLPRIVATE void ImplDisposeCanvas(); + private: // not implemented; to detect misuses of DrawOutDev(...OutputDevice&); diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index ce93f06598a6..17fbf4d876ed 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -595,6 +595,8 @@ protected: SAL_DLLPRIVATE void PushPaintHelper(PaintHelper* pHelper, vcl::RenderContext& rRenderContext); SAL_DLLPRIVATE void PopPaintHelper(PaintHelper const * pHelper); + virtual css::uno::Reference< css::rendering::XCanvas > ImplGetCanvas( bool bSpriteCanvas ) const override; + private: SAL_DLLPRIVATE void ImplSetFrameParent( const vcl::Window* pParent ); @@ -706,9 +708,6 @@ private: virtual void ImplPaintToDevice( ::OutputDevice* pTargetOutDev, const Point& rPos ); - SAL_DLLPRIVATE css::uno::Reference< css::rendering::XCanvas > - ImplGetCanvas( bool bSpriteCanvas ) const; - public: virtual vcl::Region GetActiveClipRegion() const override; virtual vcl::Region GetOutputBoundsClipRegion() const override; @@ -1252,13 +1251,6 @@ private: */ Size get_ungrouped_preferred_size() const; public: - /// request XCanvas render interface for this window - css::uno::Reference< css::rendering::XCanvas > - GetCanvas() const; - /// request XSpriteCanvas render interface for this window - css::uno::Reference< css::rendering::XSpriteCanvas > - GetSpriteCanvas() const; - /* records all DrawText operations within the passed rectangle; * a synchronous paint is sent to achieve this */ diff --git a/vcl/inc/window.h b/vcl/inc/window.h index 2411d2f7c663..b4a53a580a5c 100644 --- a/vcl/inc/window.h +++ b/vcl/inc/window.h @@ -29,7 +29,6 @@ #include <vcl/window.hxx> #include <vcl/settings.hxx> #include <o3tl/typed_flags_set.hxx> -#include <cppuhelper/weakref.hxx> #include <optional> #include <list> @@ -61,10 +60,6 @@ namespace com::sun::star { class XAccessibleEditableText; } - namespace rendering { - class XCanvas; - } - namespace awt { class XWindowPeer; class XWindow; @@ -249,9 +244,6 @@ public: Link<vcl::Window&, bool> maMnemonicActivateHdl; Link<tools::JsonWriter&, void> maDumpAsPropertyTreeHdl; - // The canvas interface for this VCL window. Is persistent after the first GetCanvas() call - css::uno::WeakReference< css::rendering::XCanvas > mxCanvas; - vcl::Cursor* mpCursor; PointerStyle maPointer; Fraction maZoom; diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index f2618c285b36..70ec9616ace7 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -29,12 +29,17 @@ #include <vcl/toolkit/unowrap.hxx> #include <vcl/svapp.hxx> #include <vcl/sysdata.hxx> +#include <vcl/lazydelete.hxx> +#include <comphelper/processfactory.hxx> #include <salgdi.hxx> #include <window.h> #include <outdev.h> #include <com/sun/star/awt/DeviceCapability.hpp> +#include <com/sun/star/awt/XWindow.hpp> +#include <com/sun/star/rendering/CanvasFactory.hpp> +#include <com/sun/star/rendering/XSpriteCanvas.hpp> #ifdef DISABLE_DYNLOADING // Linking all needed LO code into one .so/executable, these already @@ -46,6 +51,8 @@ namespace { } #endif +using namespace ::com::sun::star::uno; + // Begin initializer and accessor public functions OutputDevice::OutputDevice(OutDevType eOutDevType) : @@ -738,4 +745,77 @@ css::awt::DeviceInfo OutputDevice::GetDeviceInfo() const return aInfo; } +Reference< css::rendering::XCanvas > OutputDevice::GetCanvas() const +{ + // try to retrieve hard reference from weak member + Reference< css::rendering::XCanvas > xCanvas( mxCanvas ); + // canvas still valid? Then we're done. + if( xCanvas.is() ) + return xCanvas; + xCanvas = ImplGetCanvas( false ); + mxCanvas = xCanvas; + return xCanvas; +} + +Reference< css::rendering::XSpriteCanvas > OutputDevice::GetSpriteCanvas() const +{ + Reference< css::rendering::XCanvas > xCanvas( mxCanvas ); + Reference< css::rendering::XSpriteCanvas > xSpriteCanvas( xCanvas, UNO_QUERY ); + if( xSpriteCanvas.is() ) + return xSpriteCanvas; + xCanvas = ImplGetCanvas( true ); + mxCanvas = xCanvas; + return Reference< css::rendering::XSpriteCanvas >( xCanvas, UNO_QUERY ); +} + +// Generic implementation, Window will override. +com::sun::star::uno::Reference< css::rendering::XCanvas > OutputDevice::ImplGetCanvas( bool bSpriteCanvas ) const +{ + /* Arguments: + 0: ptr to creating instance (Window or VirtualDevice) + 1: current bounds of creating instance + 2: bool, denoting always on top state for Window (always false for VirtualDevice) + 3: XWindow for creating Window (or empty for VirtualDevice) + 4: SystemGraphicsData as a streamed Any + */ + Sequence< Any > aArg(5); + aArg[ 0 ] <<= reinterpret_cast<sal_Int64>(this); + aArg[ 1 ] <<= css::awt::Rectangle( mnOutOffX, mnOutOffY, mnOutWidth, mnOutHeight ); + aArg[ 2 ] <<= false; + aArg[ 3 ] <<= Reference< css::awt::XWindow >(); + aArg[ 4 ] = GetSystemGfxDataAny(); + + Reference< XComponentContext > xContext = comphelper::getProcessComponentContext(); + + static vcl::DeleteUnoReferenceOnDeinit<css::lang::XMultiComponentFactory> xStaticCanvasFactory( + css::rendering::CanvasFactory::create( xContext ) ); + Reference<css::lang::XMultiComponentFactory> xCanvasFactory(xStaticCanvasFactory.get()); + Reference< css::rendering::XCanvas > xCanvas; + + if(xCanvasFactory.is()) + { + xCanvas.set( xCanvasFactory->createInstanceWithArgumentsAndContext( + bSpriteCanvas ? + OUString( "com.sun.star.rendering.SpriteCanvas" ) : + OUString( "com.sun.star.rendering.Canvas" ), + aArg, + xContext ), + UNO_QUERY ); + } + + // no factory??? Empty reference, then. + return xCanvas; +} + +void OutputDevice::ImplDisposeCanvas() +{ + css::uno::Reference< css::rendering::XCanvas > xCanvas( mxCanvas ); + if( xCanvas.is() ) + { + css::uno::Reference< css::lang::XComponent > xCanvasComponent( xCanvas, css::uno::UNO_QUERY ); + if( xCanvasComponent.is() ) + xCanvasComponent->dispose(); + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 94c8cc2df391..44f5438e3864 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -154,13 +154,7 @@ void Window::dispose() // Dispose of the canvas implementation (which, currently, has an // own wrapper window as a child to this one. - Reference< css::rendering::XCanvas > xCanvas( mpWindowImpl->mxCanvas ); - if( xCanvas.is() ) - { - Reference < XComponent > xCanvasComponent( xCanvas, UNO_QUERY ); - if( xCanvasComponent.is() ) - xCanvasComponent->dispose(); - } + ImplDisposeCanvas(); mpWindowImpl->mbInDispose = true; @@ -3680,13 +3674,6 @@ bool Window::IsNativeWidgetEnabled() const Reference< css::rendering::XCanvas > Window::ImplGetCanvas( bool bSpriteCanvas ) const { - // try to retrieve hard reference from weak member - Reference< css::rendering::XCanvas > xCanvas( mpWindowImpl->mxCanvas ); - - // canvas still valid? Then we're done. - if( xCanvas.is() ) - return xCanvas; - Sequence< Any > aArg(5); // Feed any with operating system's window handle @@ -3707,6 +3694,7 @@ Reference< css::rendering::XCanvas > Window::ImplGetCanvas( bool bSpriteCanvas ) static vcl::DeleteUnoReferenceOnDeinit<XMultiComponentFactory> xStaticCanvasFactory( css::rendering::CanvasFactory::create( xContext ) ); Reference<XMultiComponentFactory> xCanvasFactory(xStaticCanvasFactory.get()); + Reference< css::rendering::XCanvas > xCanvas; if(xCanvasFactory.is()) { @@ -3740,25 +3728,12 @@ Reference< css::rendering::XCanvas > Window::ImplGetCanvas( bool bSpriteCanvas ) UNO_QUERY ); } - mpWindowImpl->mxCanvas = xCanvas; } // no factory??? Empty reference, then. return xCanvas; } -Reference< css::rendering::XCanvas > Window::GetCanvas() const -{ - return ImplGetCanvas( false ); -} - -Reference< css::rendering::XSpriteCanvas > Window::GetSpriteCanvas() const -{ - Reference< css::rendering::XSpriteCanvas > xSpriteCanvas( - ImplGetCanvas( true ), UNO_QUERY ); - return xSpriteCanvas; -} - OUString Window::GetSurroundingText() const { return OUString(); diff --git a/vcl/source/window/wrkwin.cxx b/vcl/source/window/wrkwin.cxx index 9f90025a74aa..beaa1d48dbd8 100644 --- a/vcl/source/window/wrkwin.cxx +++ b/vcl/source/window/wrkwin.cxx @@ -145,13 +145,7 @@ void WorkWindow::ShowFullScreenMode( bool bFullScreenMode, sal_Int32 nDisplayScr // Dispose of the canvas implementation, which might rely on // screen-specific system data. - css::uno::Reference< css::rendering::XCanvas > xCanvas( mpWindowImpl->mxCanvas ); - if( xCanvas.is() ) - { - css::uno::Reference< css::lang::XComponent > xCanvasComponent( xCanvas, css::uno::UNO_QUERY ); - if( xCanvasComponent.is() ) - xCanvasComponent->dispose(); - } + ImplDisposeCanvas(); mpWindowImpl->mpFrameWindow->mpWindowImpl->mbWaitSystemResize = true; ImplGetFrame()->ShowFullScreen( bFullScreenMode, nDisplayScreen ); |