31 #include <com/sun/star/awt/XSystemDependentWindowPeer.hpp>
32 #include <com/sun/star/awt/XWindow.hpp>
33 #include <com/sun/star/lang/NoSupportException.hpp>
34 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
35 #include <com/sun/star/registry/XRegistryKey.hpp>
36 #include <com/sun/star/uno/XComponentContext.hpp>
38 #include <osl/mutex.hxx>
56 class GraphicsProviderImpl :
public GraphicsProvider
60 explicit GraphicsProviderImpl(
GraphicsSharedPtr && pGraphics ) : mpGraphics(
std::move(pGraphics) ) {}
67 const uno::Reference< uno::XComponentContext >& rxContext ) :
68 maArguments(aArguments),
73 void Canvas::initialize()
76 if( maArguments.getLength() == 0 )
81 SAL_INFO(
"canvas.directx",
"Canvas::initialize called" );
87 maArguments[4].getValueTypeClass() == uno::TypeClass_SEQUENCE,
88 "Canvas::initialize: wrong number of arguments, or wrong types" );
90 uno::Sequence<sal_Int8>
aSeq;
91 maArguments[4] >>= aSeq;
94 if( !pSysData || !pSysData->hDC )
95 throw lang::NoSupportException(
"Passed SystemGraphicsData or HDC invalid!");
98 maArguments[0] >>= nPtr;
103 maDeviceHelper.init( pSysData->hDC, pOutDev, *
this );
104 maCanvasHelper.setDevice( *
this );
105 maCanvasHelper.setTarget(
106 std::make_shared<GraphicsProviderImpl>(
109 maArguments.realloc(0);
112 void Canvas::disposeThis()
114 ::osl::MutexGuard aGuard(
m_aMutex );
119 CanvasBaseT::disposeThis();
122 OUString SAL_CALL Canvas::getServiceName( )
124 return "com.sun.star.rendering.Canvas.GDI+";
128 css::uno::Sequence<OUString> Canvas::getSupportedServiceNames( )
130 return {
"com.sun.star.rendering.Canvas.GDI+" };
132 OUString Canvas::getImplementationName( )
134 return "com.sun.star.comp.rendering.Canvas.GDI+";
136 sal_Bool Canvas::supportsService(
const OUString& sServiceName )
141 BitmapCanvas::BitmapCanvas(
const uno::Sequence< uno::Any >& aArguments,
142 const uno::Reference< uno::XComponentContext >& rxContext ) :
143 maArguments(aArguments),
155 SAL_INFO(
"canvas.directx",
"BitmapCanvas::initialize called" );
161 maArguments[4].getValueTypeClass() == uno::TypeClass_SEQUENCE,
162 "Canvas::initialize: wrong number of arguments, or wrong types" );
164 uno::Sequence<sal_Int8>
aSeq;
168 if( !pSysData || !pSysData->hDC )
169 throw lang::NoSupportException(
"Passed SystemGraphicsData or HDC invalid!");
177 maDeviceHelper.init( pSysData->hDC, pOutDev, *
this );
178 maCanvasHelper.setDevice( *
this );
184 hBmp=
static_cast<HBITMAP
>(GetCurrentObject(pSysData->hDC, OBJ_BITMAP));
185 if( !hBmp || GetObjectType(pSysData->hDC) != OBJ_MEMDC )
187 throw lang::NoSupportException(
"Passed HDC is no mem DC/has no bitmap selected!");
190 mpTarget = std::make_shared<DXBitmap>(
192 Gdiplus::Bitmap::FromHBITMAP(
196 maCanvasHelper.setTarget(
mpTarget );
203 ::osl::MutexGuard aGuard(
m_aMutex );
209 BitmapCanvasBaseT::disposeThis();
214 return "com.sun.star.rendering.BitmapCanvas.GDI+";
220 return {
"com.sun.star.rendering.BitmapCanvas.GDI+" };
224 return "com.sun.star.comp.rendering.BitmapCanvas.GDI+";
236 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
238 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const& args)
241 xCanvas->initialize();
246 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
248 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const& args)
251 xCanvas->initialize();
Canvas(const css::uno::Sequence< css::uno::Any > &aArguments, const css::uno::Reference< css::uno::XComponentContext > &rxContext)
std::shared_ptr< IBitmap > IBitmapSharedPtr
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * canvas_gdiplus_Canvas_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &args)
virtual void disposeThis() override
Dispose all internal references.
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
Product of this component's factory.
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * canvas_gdiplus_BitmapCanvas_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &args)
Product of this component's factory.
GraphicsSharedPtr mpGraphics
css::uno::Reference< css::uno::XComponentContext > mxComponentContext
IBitmapSharedPtr mpTarget
css::uno::Reference< css::uno::XComponentContext > mxComponentContext
#define ENSURE_ARG_OR_THROW(c, m)
std::shared_ptr< Gdiplus::Bitmap > BitmapSharedPtr
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
VCL_DLLPUBLIC bool isVCLSkiaEnabled()
virtual sal_Bool SAL_CALL supportsService(const OUString &) override
css::uno::Sequence< css::uno::Any > maArguments
virtual IBitmapSharedPtr getBitmap() const override
#define SAL_INFO(area, stream)
virtual OUString SAL_CALL getServiceName() override
Sequence< sal_Int8 > aSeq
virtual OUString SAL_CALL getImplementationName() override
std::shared_ptr< Gdiplus::Graphics > GraphicsSharedPtr