INTEGRATION: CWS canvas05 (1.1.2); FILE ADDED
2008/06/09 12:51:47 thb 1.1.2.5: #i88081# Join from CWS impress144 (fixing the dxcanvas crash), extended for the other canvas impls 2008/05/23 22:03:43 thb 1.1.2.4: Moving all remaining new files to LGPL 3 2008/04/04 22:08:33 thb 1.1.2.3: Fixed output of bezier polygons for cairo; fixed missing surfaces here and there; removed useless refcounted SurfaceProvider arguments (that lead to premature canvas death, as called during ctor) 2008/04/02 22:56:26 thb 1.1.2.2: Reworked Surface class to abstract interface; changed all manual refcount handling to RAII 2008/03/28 23:38:45 thb 1.1.2.1: Backbuffer-less canvas implementation on top of cairo
This commit is contained in:
165
canvas/source/cairo/cairo_canvas.hxx
Normal file
165
canvas/source/cairo/cairo_canvas.hxx
Normal file
@@ -0,0 +1,165 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* Copyright 2008 by Sun Microsystems, Inc.
|
||||
*
|
||||
* OpenOffice.org - a multi-platform office productivity suite
|
||||
*
|
||||
* $RCSfile: cairo_canvas.hxx,v $
|
||||
* $Revision: 1.2 $
|
||||
*
|
||||
* This file is part of OpenOffice.org.
|
||||
*
|
||||
* OpenOffice.org is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenOffice.org is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenOffice.org. If not, see
|
||||
* <http://www.openoffice.org/license.html>
|
||||
* for a copy of the LGPLv3 License.
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#ifndef _CAIROCANVAS_CANVAS_HXX_
|
||||
#define _CAIROCANVAS_CANVAS_HXX_
|
||||
|
||||
#include <rtl/ref.hxx>
|
||||
|
||||
#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
#include <com/sun/star/beans/XPropertySet.hpp>
|
||||
#include <com/sun/star/lang/XInitialization.hpp>
|
||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||
#include <com/sun/star/lang/XServiceName.hpp>
|
||||
#include <com/sun/star/awt/XWindowListener.hpp>
|
||||
#include <com/sun/star/util/XUpdatable.hpp>
|
||||
#include <com/sun/star/rendering/XSpriteCanvas.hpp>
|
||||
#include <com/sun/star/rendering/XIntegerBitmap.hpp>
|
||||
#include <com/sun/star/rendering/XGraphicDevice.hpp>
|
||||
#include <com/sun/star/rendering/XBufferController.hpp>
|
||||
#include <com/sun/star/rendering/XParametricPolyPolygon2DFactory.hpp>
|
||||
|
||||
#include <cppuhelper/compbase7.hxx>
|
||||
#include <comphelper/uno3.hxx>
|
||||
|
||||
#include <canvas/base/spritecanvasbase.hxx>
|
||||
#include <canvas/base/basemutexhelper.hxx>
|
||||
#include <canvas/base/bufferedgraphicdevicebase.hxx>
|
||||
|
||||
#include <basegfx/vector/b2isize.hxx>
|
||||
|
||||
#include "cairo_devicehelper.hxx"
|
||||
#include "cairo_repainttarget.hxx"
|
||||
#include "cairo_surfaceprovider.hxx"
|
||||
#include "cairo_spritecanvashelper.hxx"
|
||||
|
||||
#define CANVAS_SERVICE_NAME "com.sun.star.rendering.Canvas.Cairo"
|
||||
#define CANVAS_IMPLEMENTATION_NAME "com.sun.star.comp.rendering.Canvas.Cairo"
|
||||
|
||||
namespace cairocanvas
|
||||
{
|
||||
typedef ::cppu::WeakComponentImplHelper7< ::com::sun::star::rendering::XBitmapCanvas,
|
||||
::com::sun::star::rendering::XIntegerBitmap,
|
||||
::com::sun::star::rendering::XGraphicDevice,
|
||||
::com::sun::star::rendering::XParametricPolyPolygon2DFactory,
|
||||
::com::sun::star::util::XUpdatable,
|
||||
::com::sun::star::beans::XPropertySet,
|
||||
::com::sun::star::lang::XServiceName > GraphicDeviceBase_Base;
|
||||
typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase_Base >,
|
||||
DeviceHelper,
|
||||
::osl::MutexGuard,
|
||||
::cppu::OWeakObject > CanvasBase_Base;
|
||||
|
||||
/** Mixin SurfaceProvider
|
||||
|
||||
Have to mixin the SurfaceProvider before deriving from
|
||||
::canvas::CanvasBase, 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 WeakComponentImplHelperN
|
||||
template args, and furthermore, don't want to derive
|
||||
::canvas::CanvasBase directly from
|
||||
SurfaceProvider (because derivees of
|
||||
::canvas::CanvasBase have to explicitely forward the
|
||||
XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS)
|
||||
anyway).
|
||||
*/
|
||||
class CanvasBaseSurfaceProvider_Base : public CanvasBase_Base,
|
||||
public SurfaceProvider
|
||||
{
|
||||
};
|
||||
|
||||
typedef ::canvas::IntegerBitmapBase< CanvasBaseSurfaceProvider_Base,
|
||||
CanvasHelper,
|
||||
::osl::MutexGuard,
|
||||
::cppu::OWeakObject > CanvasBaseT;
|
||||
|
||||
/** Product of this component's factory.
|
||||
|
||||
The Canvas object combines the actual Window canvas with
|
||||
the XGraphicDevice interface. This is because there's a
|
||||
one-to-one relation between them, anyway, since each window
|
||||
can have exactly one canvas and one associated
|
||||
XGraphicDevice. And to avoid messing around with circular
|
||||
references, this is implemented as one single object.
|
||||
*/
|
||||
class Canvas : public CanvasBaseT,
|
||||
public RepaintTarget
|
||||
{
|
||||
public:
|
||||
Canvas( const ::com::sun::star::uno::Sequence<
|
||||
::com::sun::star::uno::Any >& aArguments,
|
||||
const ::com::sun::star::uno::Reference<
|
||||
::com::sun::star::uno::XComponentContext >& rxContext );
|
||||
|
||||
void initialize();
|
||||
|
||||
/// For resource tracking
|
||||
~Canvas();
|
||||
|
||||
#if defined __SUNPRO_CC
|
||||
using CanvasBaseT::disposing;
|
||||
#endif
|
||||
|
||||
/// Dispose all internal references
|
||||
virtual void SAL_CALL disposing();
|
||||
|
||||
// Forwarding the XComponent implementation to the
|
||||
// cppu::ImplHelper templated base
|
||||
// Classname Base doing refcounting Base implementing the XComponent interface
|
||||
// | | |
|
||||
// V V V
|
||||
DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( Canvas, GraphicDeviceBase_Base, ::cppu::WeakComponentImplHelperBase );
|
||||
|
||||
// XServiceName
|
||||
virtual ::rtl::OUString SAL_CALL getServiceName( ) throw (::com::sun::star::uno::RuntimeException);
|
||||
|
||||
// RepaintTarget
|
||||
virtual bool repaint( const ::cairo::SurfaceSharedPtr& pSurface,
|
||||
const ::com::sun::star::rendering::ViewState& viewState,
|
||||
const ::com::sun::star::rendering::RenderState& renderState );
|
||||
|
||||
// SurfaceProvider
|
||||
virtual SurfaceSharedPtr getSurface();
|
||||
virtual SurfaceSharedPtr createSurface( const ::basegfx::B2ISize& rSize, Content aContent = CAIRO_CONTENT_COLOR_ALPHA );
|
||||
virtual SurfaceSharedPtr createSurface( ::Bitmap& rBitmap );
|
||||
virtual SurfaceSharedPtr changeSurface( bool bHasAlpha, bool bCopyContent );
|
||||
virtual OutputDevice* getOutputDevice();
|
||||
|
||||
private:
|
||||
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > maArguments;
|
||||
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxComponentContext;
|
||||
};
|
||||
|
||||
typedef ::rtl::Reference< Canvas > CanvasRef;
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user