1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_CANVAS_SOURCE_CAIRO_CAIRO_SPRITECANVAS_HXX
21 #define INCLUDED_CANVAS_SOURCE_CAIRO_CAIRO_SPRITECANVAS_HXX
23 #include <com/sun/star/uno/XComponentContext.hpp>
24 #include <com/sun/star/beans/XPropertySet.hpp>
25 #include <com/sun/star/lang/XInitialization.hpp>
26 #include <com/sun/star/lang/XServiceInfo.hpp>
27 #include <com/sun/star/lang/XServiceName.hpp>
28 #include <com/sun/star/awt/XWindowListener.hpp>
29 #include <com/sun/star/util/XUpdatable.hpp>
30 #include <com/sun/star/rendering/XSpriteCanvas.hpp>
31 #include <com/sun/star/rendering/XIntegerBitmap.hpp>
32 #include <com/sun/star/rendering/XGraphicDevice.hpp>
33 #include <com/sun/star/rendering/XBufferController.hpp>
35 #include <cppuhelper/compbase9.hxx>
36 #include <comphelper/uno3.hxx>
38 #include <canvas/base/spritecanvasbase.hxx>
39 #include <canvas/base/disambiguationhelper.hxx>
40 #include <canvas/base/bufferedgraphicdevicebase.hxx>
42 #include <basegfx/vector/b2isize.hxx>
44 #include "cairo_spritedevicehelper.hxx"
45 #include "cairo_repainttarget.hxx"
46 #include "cairo_surfaceprovider.hxx"
47 #include "cairo_spritecanvashelper.hxx"
49 #define SPRITECANVAS_SERVICE_NAME "com.sun.star.rendering.SpriteCanvas.Cairo"
50 #define SPRITECANVAS_IMPLEMENTATION_NAME "com.sun.star.comp.rendering.SpriteCanvas.Cairo"
54 typedef ::cppu::WeakComponentImplHelper9
< ::com::sun::star::rendering::XSpriteCanvas
,
55 ::com::sun::star::rendering::XIntegerBitmap
,
56 ::com::sun::star::rendering::XGraphicDevice
,
57 ::com::sun::star::lang::XMultiServiceFactory
,
58 ::com::sun::star::rendering::XBufferController
,
59 ::com::sun::star::awt::XWindowListener
,
60 ::com::sun::star::util::XUpdatable
,
61 ::com::sun::star::beans::XPropertySet
,
62 ::com::sun::star::lang::XServiceName
> WindowGraphicDeviceBase_Base
;
63 typedef ::canvas::BufferedGraphicDeviceBase
< ::canvas::DisambiguationHelper
< WindowGraphicDeviceBase_Base
>,
66 ::cppu::OWeakObject
> SpriteCanvasBase_Base
;
67 /** Mixin SpriteSurface
69 Have to mixin the SpriteSurface before deriving from
70 ::canvas::SpriteCanvasBase, as this template should already
71 implement some of those interface methods.
73 The reason why this appears kinda convoluted is the fact that
74 we cannot specify non-IDL types as WeakComponentImplHelperN
75 template args, and furthermore, don't want to derive
76 ::canvas::SpriteCanvasBase directly from
77 ::canvas::SpriteSurface (because derivees of
78 ::canvas::SpriteCanvasBase have to explicitly forward the
79 XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS)
80 anyway). Basically, ::canvas::CanvasCustomSpriteBase should
81 remain a base class that provides implementation, not to
82 enforce any specific interface on its derivees.
84 class SpriteCanvasBaseSpriteSurface_Base
: public SpriteCanvasBase_Base
,
85 public ::canvas::SpriteSurface
,
86 public SurfaceProvider
90 typedef ::canvas::SpriteCanvasBase
< SpriteCanvasBaseSpriteSurface_Base
,
93 ::cppu::OWeakObject
> SpriteCanvasBaseT
;
95 /** Product of this component's factory.
97 The SpriteCanvas object combines the actual Window canvas with
98 the XGraphicDevice interface. This is because there's a
99 one-to-one relation between them, anyway, since each window
100 can have exactly one canvas and one associated
101 XGraphicDevice. And to avoid messing around with circular
102 references, this is implemented as one single object.
104 class SpriteCanvas
: public SpriteCanvasBaseT
,
108 SpriteCanvas( const ::com::sun::star::uno::Sequence
<
109 ::com::sun::star::uno::Any
>& aArguments
,
110 const ::com::sun::star::uno::Reference
<
111 ::com::sun::star::uno::XComponentContext
>& rxContext
);
115 /// Dispose all internal references
116 virtual void disposeThis() SAL_OVERRIDE
;
118 // Forwarding the XComponent implementation to the
119 // cppu::ImplHelper templated base
120 // Classname Base doing refcounting Base implementing the XComponent interface
123 DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( SpriteCanvas
, WindowGraphicDeviceBase_Base
, ::cppu::WeakComponentImplHelperBase
)
125 // XBufferController (partial)
126 virtual sal_Bool SAL_CALL
showBuffer( sal_Bool bUpdateAll
) throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
127 virtual sal_Bool SAL_CALL
switchBuffer( sal_Bool bUpdateAll
) throw (::com::sun::star::uno::RuntimeException
) SAL_OVERRIDE
;
129 // XSpriteCanvas (partial)
130 virtual sal_Bool SAL_CALL
updateScreen( sal_Bool bUpdateAll
) throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
133 virtual OUString SAL_CALL
getServiceName( ) throw (::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
136 virtual ::cairo::SurfaceSharedPtr
getSurface() SAL_OVERRIDE
;
137 virtual ::cairo::SurfaceSharedPtr
createSurface( const ::basegfx::B2ISize
& rSize
, int aContent
= CAIRO_CONTENT_COLOR_ALPHA
) SAL_OVERRIDE
;
138 virtual ::cairo::SurfaceSharedPtr
createSurface( ::Bitmap
& rBitmap
) SAL_OVERRIDE
;
139 virtual ::cairo::SurfaceSharedPtr
changeSurface( bool bHasAlpha
, bool bCopyContent
) SAL_OVERRIDE
;
140 virtual OutputDevice
* getOutputDevice() SAL_OVERRIDE
;
143 virtual bool repaint( const ::cairo::SurfaceSharedPtr
& pSurface
,
144 const ::com::sun::star::rendering::ViewState
& viewState
,
145 const ::com::sun::star::rendering::RenderState
& renderState
) SAL_OVERRIDE
;
147 ::cairo::SurfaceSharedPtr
getWindowSurface();
148 ::cairo::SurfaceSharedPtr
getBufferSurface();
150 const ::basegfx::B2ISize
& getSizePixel();
151 void setSizePixel( const ::basegfx::B2ISize
& rSize
);
155 ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Any
> maArguments
;
156 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XComponentContext
> mxComponentContext
;
159 typedef ::rtl::Reference
< SpriteCanvas
> SpriteCanvasRef
;
164 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */