1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _DXCANVAS_CANVAS_HXX_ 29 #define _DXCANVAS_CANVAS_HXX_ 30 31 #include <rtl/ref.hxx> 32 33 #include <com/sun/star/uno/XComponentContext.hpp> 34 #include <com/sun/star/beans/XPropertySet.hpp> 35 #include <com/sun/star/lang/XServiceName.hpp> 36 #include <com/sun/star/util/XUpdatable.hpp> 37 #include <com/sun/star/rendering/XBitmapCanvas.hpp> 38 #include <com/sun/star/rendering/XIntegerBitmap.hpp> 39 #include <com/sun/star/rendering/XGraphicDevice.hpp> 40 #include <com/sun/star/rendering/XBufferController.hpp> 41 42 #include <cppuhelper/compbase7.hxx> 43 #include <cppuhelper/compbase6.hxx> 44 #include <comphelper/uno3.hxx> 45 46 #include <canvas/base/integerbitmapbase.hxx> 47 #include <canvas/base/basemutexhelper.hxx> 48 #include <canvas/base/graphicdevicebase.hxx> 49 50 #include "dx_bitmapprovider.hxx" 51 #include "dx_canvashelper.hxx" 52 #include "dx_bitmapcanvashelper.hxx" 53 #include "dx_impltools.hxx" 54 #include "dx_devicehelper.hxx" 55 56 57 namespace dxcanvas 58 { 59 typedef ::cppu::WeakComponentImplHelper6< ::com::sun::star::rendering::XCanvas, 60 ::com::sun::star::rendering::XGraphicDevice, 61 ::com::sun::star::lang::XMultiServiceFactory, 62 ::com::sun::star::util::XUpdatable, 63 ::com::sun::star::beans::XPropertySet, 64 ::com::sun::star::lang::XServiceName > GraphicDeviceBase1_Base; 65 typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase1_Base >, 66 DeviceHelper, 67 ::osl::MutexGuard, 68 ::cppu::OWeakObject > CanvasBase1_Base; 69 typedef ::canvas::CanvasBase< CanvasBase1_Base, 70 CanvasHelper, 71 ::osl::MutexGuard, 72 ::cppu::OWeakObject > CanvasBaseT; 73 74 /** Product of this component's factory. 75 76 The Canvas object combines the actual Window canvas with 77 the XGraphicDevice interface. This is because there's a 78 one-to-one relation between them, anyway, since each window 79 can have exactly one canvas and one associated 80 XGraphicDevice. And to avoid messing around with circular 81 references, this is implemented as one single object. 82 */ 83 class Canvas : public CanvasBaseT 84 { 85 public: 86 Canvas( const ::com::sun::star::uno::Sequence< 87 ::com::sun::star::uno::Any >& aArguments, 88 const ::com::sun::star::uno::Reference< 89 ::com::sun::star::uno::XComponentContext >& rxContext ); 90 91 void initialize(); 92 93 /// Dispose all internal references 94 virtual void SAL_CALL disposing(); 95 96 // Forwarding the XComponent implementation to the 97 // cppu::ImplHelper templated base 98 // Classname Base doing refcounting Base implementing the XComponent interface 99 // | | | 100 // V V V 101 DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( Canvas, GraphicDeviceBase1_Base, ::cppu::WeakComponentImplHelperBase ); 102 103 // XServiceName 104 virtual ::rtl::OUString SAL_CALL getServiceName( ) throw (::com::sun::star::uno::RuntimeException); 105 106 private: 107 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > maArguments; 108 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxComponentContext; 109 }; 110 111 typedef ::rtl::Reference< Canvas > CanvasRef; 112 113 ////////////////////////////////////////////////////////////////////////////////////////////////////// 114 115 typedef ::cppu::WeakComponentImplHelper7< ::com::sun::star::rendering::XBitmapCanvas, 116 ::com::sun::star::rendering::XIntegerBitmap, 117 ::com::sun::star::rendering::XGraphicDevice, 118 ::com::sun::star::lang::XMultiServiceFactory, 119 ::com::sun::star::util::XUpdatable, 120 ::com::sun::star::beans::XPropertySet, 121 ::com::sun::star::lang::XServiceName > GraphicDeviceBase2_Base; 122 typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase2_Base >, 123 DeviceHelper, 124 ::osl::MutexGuard, 125 ::cppu::OWeakObject > CanvasBase2_Base; 126 typedef ::canvas::IntegerBitmapBase< CanvasBase2_Base, 127 BitmapCanvasHelper, 128 ::osl::MutexGuard, 129 ::cppu::OWeakObject > BitmapCanvasBaseT; 130 131 /** Product of this component's factory. 132 133 The Canvas object combines the actual Window canvas with 134 the XGraphicDevice interface. This is because there's a 135 one-to-one relation between them, anyway, since each window 136 can have exactly one canvas and one associated 137 XGraphicDevice. And to avoid messing around with circular 138 references, this is implemented as one single object. 139 */ 140 class BitmapCanvas : public BitmapCanvasBaseT, public BitmapProvider 141 { 142 public: 143 BitmapCanvas( const ::com::sun::star::uno::Sequence< 144 ::com::sun::star::uno::Any >& aArguments, 145 const ::com::sun::star::uno::Reference< 146 ::com::sun::star::uno::XComponentContext >& rxContext ); 147 148 void initialize(); 149 150 /// Dispose all internal references 151 virtual void SAL_CALL disposing(); 152 153 // Forwarding the XComponent implementation to the 154 // cppu::ImplHelper templated base 155 // Classname Base doing refcounting Base implementing the XComponent interface 156 // | | | 157 // V V V 158 DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( BitmapCanvas, GraphicDeviceBase2_Base, ::cppu::WeakComponentImplHelperBase ); 159 160 // XServiceName 161 virtual ::rtl::OUString SAL_CALL getServiceName( ) throw (::com::sun::star::uno::RuntimeException); 162 163 // BitmapProvider 164 virtual IBitmapSharedPtr getBitmap() const; 165 166 private: 167 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > maArguments; 168 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxComponentContext; 169 IBitmapSharedPtr mpTarget; 170 }; 171 172 typedef ::rtl::Reference< BitmapCanvas > BitmapCanvasRef; 173 } 174 175 #endif 176