1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _CAIROCANVAS_SPRITECANVASHELPER_HXX_ 25*b1cdbd2cSJim Jagielski #define _CAIROCANVAS_SPRITECANVASHELPER_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/XSpriteCanvas.hpp> 28*b1cdbd2cSJim Jagielski #include <com/sun/star/rendering/XIntegerBitmap.hpp> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <canvas/spriteredrawmanager.hxx> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski #include "cairo_cairo.hxx" 33*b1cdbd2cSJim Jagielski #include "cairo_canvashelper.hxx" 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski namespace basegfx 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski class B2IRange; 38*b1cdbd2cSJim Jagielski } 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski namespace cairocanvas 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski class SpriteCanvas; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski class SpriteCanvasHelper : public CanvasHelper 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski public: 47*b1cdbd2cSJim Jagielski SpriteCanvasHelper(); 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski void init( ::canvas::SpriteRedrawManager& rManager, 50*b1cdbd2cSJim Jagielski SpriteCanvas& rOwningSpriteCanvas, 51*b1cdbd2cSJim Jagielski const ::basegfx::B2ISize& rSize ); 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski /// Dispose all internal references 54*b1cdbd2cSJim Jagielski void disposing(); 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski // XSpriteCanvas 57*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 58*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XAnimatedSprite > createSpriteFromAnimation( 59*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XAnimation >& animation ); 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 62*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XAnimatedSprite > createSpriteFromBitmaps( 63*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Sequence< 64*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 65*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XBitmap > >& animationBitmaps, 66*b1cdbd2cSJim Jagielski sal_Int8 interpolationMode ); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 69*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XCustomSprite > createCustomSprite( 70*b1cdbd2cSJim Jagielski const ::com::sun::star::geometry::RealSize2D& spriteSize ); 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< 73*b1cdbd2cSJim Jagielski ::com::sun::star::rendering::XSprite > createClonedSprite( 74*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XSprite >& original ); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski /** Actually perform the screen update 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski @param rCurrArea 79*b1cdbd2cSJim Jagielski Current window area in absolute screen coordinates 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski @param bUpdateAll 82*b1cdbd2cSJim Jagielski sal_True, if everything must be updated, not only changed 83*b1cdbd2cSJim Jagielski sprites 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski @param io_bSurfaceDirty 86*b1cdbd2cSJim Jagielski In/out parameter, whether backbuffer surface is dirty (if 87*b1cdbd2cSJim Jagielski yes, we're performing a full update, anyway) 88*b1cdbd2cSJim Jagielski */ 89*b1cdbd2cSJim Jagielski sal_Bool updateScreen( const ::basegfx::B2IRange& rCurrArea, 90*b1cdbd2cSJim Jagielski sal_Bool bUpdateAll, 91*b1cdbd2cSJim Jagielski bool& io_bSurfaceDirty ); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski // SpriteRedrawManager functor calls 95*b1cdbd2cSJim Jagielski // ------------------------------------------------- 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski /** Gets called for simple background repaints 98*b1cdbd2cSJim Jagielski */ 99*b1cdbd2cSJim Jagielski void backgroundPaint( const ::basegfx::B2DRange& rUpdateRect ); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /** Gets called when area can be handled by scrolling. 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski Called method must copy screen content from rMoveStart to 104*b1cdbd2cSJim Jagielski rMoveEnd, and restore the background in the uncovered 105*b1cdbd2cSJim Jagielski areas. 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski @param rMoveStart 108*b1cdbd2cSJim Jagielski Source rect of the scroll 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski @param rMoveEnd 111*b1cdbd2cSJim Jagielski Dest rect of the scroll 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski @param rUpdateArea 114*b1cdbd2cSJim Jagielski All info necessary, should rMoveStart be partially or 115*b1cdbd2cSJim Jagielski fully outside the outdev 116*b1cdbd2cSJim Jagielski */ 117*b1cdbd2cSJim Jagielski void scrollUpdate( const ::basegfx::B2DRange& rMoveStart, 118*b1cdbd2cSJim Jagielski const ::basegfx::B2DRange& rMoveEnd, 119*b1cdbd2cSJim Jagielski const ::canvas::SpriteRedrawManager::UpdateArea& rUpdateArea ); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski void opaqueUpdate( const ::basegfx::B2DRange& rTotalArea, 122*b1cdbd2cSJim Jagielski const ::std::vector< ::canvas::Sprite::Reference >& rSortedUpdateSprites ); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski void genericUpdate( const ::basegfx::B2DRange& rTotalArea, 125*b1cdbd2cSJim Jagielski const ::std::vector< ::canvas::Sprite::Reference >& rSortedUpdateSprites ); 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski private: 128*b1cdbd2cSJim Jagielski ::cairo::SurfaceSharedPtr getCompositingSurface( const ::basegfx::B2ISize& rNeededSize ); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski /// Set from the SpriteCanvas: instance coordinating sprite redraw 131*b1cdbd2cSJim Jagielski ::canvas::SpriteRedrawManager* mpRedrawManager; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski /// Set from the init method. used to generate sprites 134*b1cdbd2cSJim Jagielski SpriteCanvas* mpOwningSpriteCanvas; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski /// a temporary surface used to composite the frontbuffer image 137*b1cdbd2cSJim Jagielski ::cairo::SurfaceSharedPtr mpCompositingSurface; 138*b1cdbd2cSJim Jagielski ::basegfx::B2ISize maCompositingSurfaceSize; 139*b1cdbd2cSJim Jagielski }; 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski #endif /* _CAIROCANVAS_SPRITECANVASHELPER_HXX_ */ 143*b1cdbd2cSJim Jagielski 144