diff options
author | Noel Grandin <noel@peralex.com> | 2020-07-14 14:35:49 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-07-14 21:03:05 +0200 |
commit | 7ef6dee499e6a705e022fc8159789599f9cbc1c0 (patch) | |
tree | 1c2d4da759359461e88bea02d154b6753d9e0257 /canvas/source/directx | |
parent | 8e6c5635bed20790dcf10da99766c92d4589845e (diff) |
canvas/gdiplus: create instances with uno constructors
See tdf#74608 for motivation.
Change-Id: Ie1f1736ceda372a53e1065d4829f019338f5b7bf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98730
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'canvas/source/directx')
-rw-r--r-- | canvas/source/directx/dx_canvas.cxx | 89 | ||||
-rw-r--r-- | canvas/source/directx/dx_canvas.hxx | 16 | ||||
-rw-r--r-- | canvas/source/directx/gdipluscanvas.component | 8 |
3 files changed, 65 insertions, 48 deletions
diff --git a/canvas/source/directx/dx_canvas.cxx b/canvas/source/directx/dx_canvas.cxx index 1f4f1218beb9..cb7a3199e126 100644 --- a/canvas/source/directx/dx_canvas.cxx +++ b/canvas/source/directx/dx_canvas.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +// /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * @@ -33,9 +33,7 @@ #include <com/sun/star/lang/XSingleServiceFactory.hpp> #include <com/sun/star/registry/XRegistryKey.hpp> #include <com/sun/star/uno/XComponentContext.hpp> -#include <comphelper/servicedecl.hxx> -#include <cppuhelper/factory.hxx> -#include <cppuhelper/implementationentry.hxx> +#include <cppuhelper/supportsservice.hxx> #include <osl/mutex.hxx> #include <tools/diagnose_ex.h> #include <vcl/sysdata.hxx> @@ -48,16 +46,8 @@ #include "dx_graphicsprovider.hxx" #include "dx_winstuff.hxx" -#define CANVAS_SERVICE_NAME "com.sun.star.rendering.Canvas.GDI+" -#define CANVAS_IMPLEMENTATION_NAME "com.sun.star.comp.rendering.Canvas.GDI+" -#define BITMAPCANVAS_SERVICE_NAME "com.sun.star.rendering.BitmapCanvas.GDI+" -#define BITMAPCANVAS_IMPLEMENTATION_NAME "com.sun.star.comp.rendering.BitmapCanvas.GDI+" - - using namespace ::com::sun::star; -namespace sdecl = comphelper::service_decl; - namespace dxcanvas { namespace { @@ -133,7 +123,21 @@ namespace dxcanvas OUString SAL_CALL Canvas::getServiceName( ) { - return CANVAS_SERVICE_NAME; + return "com.sun.star.rendering.Canvas.GDI+"; + } + + // XServiceInfo + css::uno::Sequence<OUString> Canvas::getSupportedServiceNames( ) + { + return { "com.sun.star.rendering.Canvas.GDI+" }; + } + OUString Canvas::getImplementationName( ) + { + return "com.sun.star.comp.rendering.Canvas.GDI+"; + } + sal_Bool Canvas::supportsService( const OUString& sServiceName ) + { + return cppu::supportsService(this, sServiceName); } BitmapCanvas::BitmapCanvas( const uno::Sequence< uno::Any >& aArguments, @@ -209,7 +213,21 @@ namespace dxcanvas OUString SAL_CALL BitmapCanvas::getServiceName( ) { - return BITMAPCANVAS_SERVICE_NAME; + return "com.sun.star.rendering.BitmapCanvas.GDI+"; + } + + // XServiceInfo + css::uno::Sequence<OUString> BitmapCanvas::getSupportedServiceNames( ) + { + return { "com.sun.star.rendering.BitmapCanvas.GDI+" }; + } + OUString BitmapCanvas::getImplementationName( ) + { + return "com.sun.star.comp.rendering.BitmapCanvas.GDI+"; + } + sal_Bool BitmapCanvas::supportsService( const OUString& sServiceName ) + { + return cppu::supportsService(this, sServiceName); } IBitmapSharedPtr BitmapCanvas::getBitmap() const @@ -217,40 +235,25 @@ namespace dxcanvas return mpTarget; } - static uno::Reference<uno::XInterface> initCanvas( Canvas* pCanvas ) + extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* + canvas_gdiplus_Canvas_get_implementation( + css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const& args) { - uno::Reference<uno::XInterface> xRet(static_cast<cppu::OWeakObject*>(pCanvas)); - pCanvas->initialize(); - return xRet; + rtl::Reference<Canvas> xCanvas(new Canvas(args, context)); + xCanvas->initialize(); + xCanvas->acquire(); + return static_cast<cppu::OWeakObject*>(xCanvas.get()); } - sdecl::class_<Canvas, sdecl::with_args<true> > const serviceImpl1(&initCanvas); - const sdecl::ServiceDecl dxCanvasDecl( - serviceImpl1, - CANVAS_IMPLEMENTATION_NAME, - CANVAS_SERVICE_NAME ); - - static uno::Reference<uno::XInterface> initBitmapCanvas( BitmapCanvas* pCanvas ) + extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* + canvas_gdiplus_BitmapCanvas_get_implementation( + css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const& args) { - uno::Reference<uno::XInterface> xRet(static_cast<cppu::OWeakObject*>(pCanvas)); - pCanvas->initialize(); - return xRet; + rtl::Reference<BitmapCanvas> xCanvas(new BitmapCanvas(args, context)); + xCanvas->initialize(); + xCanvas->acquire(); + return static_cast<cppu::OWeakObject*>(xCanvas.get()); } - - namespace sdecl = comphelper::service_decl; - sdecl::class_<BitmapCanvas, sdecl::with_args<true> > const serviceImpl2(&initBitmapCanvas); - const sdecl::ServiceDecl dxBitmapCanvasDecl( - serviceImpl2, - BITMAPCANVAS_IMPLEMENTATION_NAME, - BITMAPCANVAS_SERVICE_NAME ); -} - -// The C shared lib entry points -extern "C" -SAL_DLLPUBLIC_EXPORT void* gdipluscanvas_component_getFactory( char const* pImplName, - void*, void* ) -{ - return sdecl::component_getFactoryHelper( pImplName, {&dxcanvas::dxCanvasDecl, &dxcanvas::dxBitmapCanvasDecl} ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/directx/dx_canvas.hxx b/canvas/source/directx/dx_canvas.hxx index 4db2b16a5d25..acea85c762c5 100644 --- a/canvas/source/directx/dx_canvas.hxx +++ b/canvas/source/directx/dx_canvas.hxx @@ -54,7 +54,8 @@ namespace dxcanvas css::lang::XMultiServiceFactory, css::util::XUpdatable, css::beans::XPropertySet, - css::lang::XServiceName > GraphicDeviceBase1_Base; + css::lang::XServiceName, + css::lang::XServiceInfo> GraphicDeviceBase1_Base; typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase1_Base >, DeviceHelper, ::osl::MutexGuard, @@ -96,6 +97,11 @@ namespace dxcanvas // XServiceName virtual OUString SAL_CALL getServiceName( ) override; + // XServiceInfo + virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames( ) override; + virtual OUString SAL_CALL getImplementationName( ) override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ) override; + private: css::uno::Sequence< css::uno::Any > maArguments; css::uno::Reference< css::uno::XComponentContext > mxComponentContext; @@ -107,7 +113,8 @@ namespace dxcanvas css::lang::XMultiServiceFactory, css::util::XUpdatable, css::beans::XPropertySet, - css::lang::XServiceName > GraphicDeviceBase2_Base; + css::lang::XServiceName, + css::lang::XServiceInfo > GraphicDeviceBase2_Base; typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase2_Base >, DeviceHelper, ::osl::MutexGuard, @@ -149,6 +156,11 @@ namespace dxcanvas // XServiceName virtual OUString SAL_CALL getServiceName( ) override; + // XServiceInfo + virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames( ) override; + virtual OUString SAL_CALL getImplementationName( ) override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ) override; + // BitmapProvider virtual IBitmapSharedPtr getBitmap() const override; diff --git a/canvas/source/directx/gdipluscanvas.component b/canvas/source/directx/gdipluscanvas.component index 701c888830bd..0ee68a1ad7c4 100644 --- a/canvas/source/directx/gdipluscanvas.component +++ b/canvas/source/directx/gdipluscanvas.component @@ -18,11 +18,13 @@ --> <component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@" - prefix="gdipluscanvas" xmlns="http://openoffice.org/2010/uno-components"> - <implementation name="com.sun.star.comp.rendering.BitmapCanvas.GDI+"> + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.rendering.BitmapCanvas.GDI+" + constructor="canvas_gdiplus_BitmapCanvas_get_implementation"> <service name="com.sun.star.rendering.BitmapCanvas.GDI+"/> </implementation> - <implementation name="com.sun.star.comp.rendering.Canvas.GDI+"> + <implementation name="com.sun.star.comp.rendering.Canvas.GDI+" + constructor="canvas_gdiplus_Canvas_get_implementation"> <service name="com.sun.star.rendering.Canvas.GDI+"/> </implementation> </component> |