diff --git a/canvas/source/vcl/canvascustomsprite.hxx b/canvas/source/vcl/canvascustomsprite.hxx index d85bfd4ae046..79261e29fb13 100644 --- a/canvas/source/vcl/canvascustomsprite.hxx +++ b/canvas/source/vcl/canvascustomsprite.hxx @@ -4,9 +4,9 @@ * * $RCSfile: canvascustomsprite.hxx,v $ * - * $Revision: 1.8 $ + * $Revision: 1.9 $ * - * last change: $Author: rt $ $Date: 2005-09-07 23:18:42 $ + * last change: $Author: kz $ $Date: 2005-11-02 12:59:27 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -36,98 +36,82 @@ #ifndef _VCLCANVAS_CANVASCUSTOMSPRITE_HXX #define _VCLCANVAS_CANVASCUSTOMSPRITE_HXX -#ifndef _CPPUHELPER_COMPBASE3_HXX_ -#include -#endif - -#ifndef _COMPHELPER_UNO3_HXX +#include #include -#endif -#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ #include -#endif -#ifndef _COM_SUN_STAR_RENDERING_XCUSTOMSPRITE_HPP_ +#include #include -#endif -#ifndef _COM_SUN_STAR_RENDERING_XPOLYPOLYGON2D_HPP_ +#include #include -#endif -#ifndef _BGFX_POINT_B2DPOINT_HXX -#include -#endif -#ifndef _BGFX_MATRIX_B2DHOMMATRIX_HXX -#include -#endif - -#ifndef _SV_VIRDEV_HXX #include -#endif #include -#include +#include +#include +#include "sprite.hxx" #include "canvashelper.hxx" +#include "spritehelper.hxx" #include "backbuffer.hxx" #include "impltools.hxx" #include "spritecanvas.hxx" -#include "sprite.hxx" #include "repainttarget.hxx" -#define CANVASCUSTOMSPRITE_IMPLEMENTATION_NAME "VCLCanvas::CanvasCustomSprite" - namespace vclcanvas { - typedef ::cppu::WeakComponentImplHelper3< ::com::sun::star::rendering::XCustomSprite, + typedef ::cppu::WeakComponentImplHelper4< ::com::sun::star::rendering::XCustomSprite, ::com::sun::star::rendering::XBitmapCanvas, - ::com::sun::star::lang::XServiceInfo > CanvasCustomSpriteBase_Base; - typedef ::canvas::internal::BitmapCanvasBase< CanvasCustomSpriteBase_Base, CanvasHelper, tools::LocalGuard > CanvasCustomSprite_Base; + ::com::sun::star::rendering::XIntegerBitmap, + ::com::sun::star::lang::XServiceInfo > CanvasCustomSpriteBase_Base; + /** Mixin Sprite + + Have to mixin the Sprite interface before deriving from + ::canvas::CanvasCustomSpriteBase, 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::CanvasCustomSpriteBase directly from + ::canvas::Sprite (because derivees of + ::canvas::CanvasCustomSpriteBase have to explicitely forward + the XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS) + anyway). Basically, ::canvas::CanvasCustomSpriteBase should + remain a base class that provides implementation, not to + enforce any specific interface on its derivees. + */ + class CanvasCustomSpriteSpriteBase_Base : public ::canvas::BaseMutexHelper< CanvasCustomSpriteBase_Base >, + public Sprite + { + }; + + typedef ::canvas::CanvasCustomSpriteBase< CanvasCustomSpriteSpriteBase_Base, + SpriteHelper, + CanvasHelper, + tools::LocalGuard, + ::cppu::OWeakObject > CanvasCustomSpriteBaseT; /* Definition of CanvasCustomSprite class */ - class CanvasCustomSprite : public Sprite, - public CanvasCustomSprite_Base, + class CanvasCustomSprite : public CanvasCustomSpriteBaseT, public RepaintTarget { public: CanvasCustomSprite( const ::com::sun::star::geometry::RealSize2D& rSpriteSize, - const WindowGraphicDevice::ImplRef& rDevice, - const SpriteCanvas::ImplRef& rSpriteCanvas ); - - // XInterface - - // Need to employ this macro, because Sprite comes with an - // unimplemented version of XInterface. - - // Forwarding the XInterface implementation to the - // cppu::ImplHelper templated base, which does the refcounting and - // queryInterface for us: Classname Base doing refcount and handling queryInterface - // | | - // V V - DECLARE_UNO3_AGG_DEFAULTS( CanvasCustomSprite, CanvasCustomSpriteBase_Base ); + const SpriteCanvasRef& rSpriteCanvas, + bool bShowSpriteBounds ); virtual void SAL_CALL disposing(); - // XCanvas: selectively override base's method here, for opacity tracking - virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > SAL_CALL - drawBitmap( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >& xBitmap, - const ::com::sun::star::rendering::ViewState& viewState, - const ::com::sun::star::rendering::RenderState& renderState ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - - // XSprite - virtual void SAL_CALL setAlpha( double alpha ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL move( const ::com::sun::star::geometry::RealPoint2D& aNewPos, const ::com::sun::star::rendering::ViewState& viewState, const ::com::sun::star::rendering::RenderState& renderState ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL transform( const ::com::sun::star::geometry::AffineMatrix2D& aTransformation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL clip( const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& aClip ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPriority( double nPriority ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL show( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL hide( ) throw (::com::sun::star::uno::RuntimeException); - - // XCustomSprite - virtual ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvas > SAL_CALL - getContentCanvas( ) throw (::com::sun::star::uno::RuntimeException); + // Forwarding the XComponent implementation to the + // cppu::ImplHelper templated base + // Classname Base doing refcount Base implementing the XComponent interface + // | | | + // V V V + DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( CanvasCustomSprite, CanvasCustomSpriteBase_Base, ::cppu::WeakComponentImplHelperBase ); // XServiceInfo virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); @@ -135,12 +119,11 @@ namespace vclcanvas virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); // Sprite - virtual void redraw( OutputDevice& rTargetSurface ) const; - virtual void redraw( OutputDevice& rTargetSurface, - const Point& rOutputPos ) const; - virtual bool isAreaUpdateOpaque( const Rectangle& rUpdateArea ) const; - virtual ::basegfx::B2DPoint getSpritePos() const; - virtual ::basegfx::B2DSize getSpriteSize() const; + virtual void redraw( OutputDevice& rOutDev, + bool bBufferedUpdate ) const; + virtual void redraw( OutputDevice& rOutDev, + const ::basegfx::B2DPoint& rPos, + bool bBufferedUpdate ) const; // RepaintTarget virtual bool repaint( const GraphicObjectSharedPtr& rGrf, @@ -148,66 +131,11 @@ namespace vclcanvas const ::Size& rSz, const GraphicAttr& rAttr ) const; - protected: - ~CanvasCustomSprite(); // we're a ref-counted UNO class. _We_ destroy ourselves. - private: - // default: disabled copy/assignment - CanvasCustomSprite(const CanvasCustomSprite&); - CanvasCustomSprite& operator=( const CanvasCustomSprite& ); - - Rectangle getSpriteRect( const ::basegfx::B2DRectangle& rBounds ) const; - Rectangle getFullSpriteRect() const; - Rectangle getSpriteRect() const; - - // for the integrated bitmap canvas implementation - BackBufferSharedPtr mpBackBuffer; - BackBufferSharedPtr mpBackBufferMask; - - SpriteCanvas::ImplRef mpSpriteCanvas; - - mutable ::canvas::vcltools::VCLObject maContent; - - /** Currently active clip area. - - This member is either empty, denoting that the current - clip shows the full sprite content, or contains a - rectangular subarea of the sprite, outside of which - the sprite content is fully clipped. - - @see mbIsCurrClipRectangle - */ - ::basegfx::B2DRectangle maCurrClipBounds; - - // sprite state - ::basegfx::B2DPoint maPosition; - Size maSize; - ::basegfx::B2DHomMatrix maTransform; - ::com::sun::star::uno::Reference< - ::com::sun::star::rendering::XPolyPolygon2D > mxClipPoly; - double mfAlpha; - bool mbActive; - - /** If true, denotes that the current sprite clip is a true - rectangle, i.e. maCurrClipBounds exactly - describes the visible area of the sprite. - - @see maCurrClipBounds - */ - bool mbIsCurrClipRectangle; - - /** OutDev render speedup. - - When true, this flag denotes that the current - mpBackBufferMask content is fully opaque, thus, that blits - to the screen can use a plain Bitmap instead of the - BitmapEx. - */ - mutable bool mbIsContentFullyOpaque; - - /// True, iff maTransform has changed - mutable bool mbTransformDirty; - + /** MUST hold here, too, since CanvasHelper only contains a + raw pointer (without refcounting) + */ + SpriteCanvasRef mpSpriteCanvas; }; }