| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _VCLCANVAS_SPRITECANVASHELPER_HXX_ |
| #define _VCLCANVAS_SPRITECANVASHELPER_HXX_ |
| |
| #include <com/sun/star/rendering/XSpriteCanvas.hpp> |
| #include <com/sun/star/rendering/XIntegerBitmap.hpp> |
| |
| #include <vcl/virdev.hxx> |
| |
| #include <canvas/spriteredrawmanager.hxx> |
| #include <canvas/elapsedtime.hxx> |
| #include <canvas/vclwrapper.hxx> |
| #include "canvashelper.hxx" |
| #include "impltools.hxx" |
| |
| |
| namespace vclcanvas |
| { |
| class RedrawManager; |
| class SpriteCanvas; |
| |
| class SpriteCanvasHelper : public CanvasHelper |
| { |
| public: |
| SpriteCanvasHelper(); |
| |
| void init( const OutDevProviderSharedPtr& rOutDev, |
| SpriteCanvas& rOwningSpriteCanvas, |
| ::canvas::SpriteRedrawManager& rManager, |
| bool bProtect, |
| bool bHaveAlpha ); |
| |
| /// Dispose all internal references |
| void disposing(); |
| |
| // XSpriteCanvas |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XAnimatedSprite > createSpriteFromAnimation( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XAnimation >& animation ); |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XAnimatedSprite > createSpriteFromBitmaps( |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XBitmap > >& animationBitmaps, |
| sal_Int8 interpolationMode ); |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XCustomSprite > createCustomSprite( |
| const ::com::sun::star::geometry::RealSize2D& spriteSize ); |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XSprite > createClonedSprite( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XSprite >& original ); |
| |
| /** Actually perform the screen update |
| |
| @param bUpdateAll |
| sal_True, if everything must be updated, not only changed |
| sprites |
| |
| @param io_bSurfaceDirty |
| In/out parameter, whether backbuffer surface is dirty (if |
| yes, we're performing a full update, anyway) |
| */ |
| sal_Bool updateScreen( sal_Bool bUpdateAll, |
| bool& io_bSurfaceDirty ); |
| |
| // SpriteRedrawManager functor calls |
| // ------------------------------------------------- |
| |
| /** Gets called for simple background repaints |
| */ |
| void backgroundPaint( const ::basegfx::B2DRange& rUpdateRect ); |
| |
| /** Gets called when area can be handled by scrolling. |
| |
| Called method must copy screen content from rMoveStart to |
| rMoveEnd, and restore the background in the uncovered |
| areas. |
| |
| @param rMoveStart |
| Source rect of the scroll |
| |
| @param rMoveEnd |
| Dest rect of the scroll |
| |
| @param rUpdateArea |
| All info necessary, should rMoveStart be partially or |
| fully outside the outdev |
| */ |
| void scrollUpdate( const ::basegfx::B2DRange& rMoveStart, |
| const ::basegfx::B2DRange& rMoveEnd, |
| const ::canvas::SpriteRedrawManager::UpdateArea& rUpdateArea ); |
| |
| void opaqueUpdate( const ::basegfx::B2DRange& rTotalArea, |
| const ::std::vector< ::canvas::Sprite::Reference >& rSortedUpdateSprites ); |
| |
| void genericUpdate( const ::basegfx::B2DRange& rTotalArea, |
| const ::std::vector< ::canvas::Sprite::Reference >& rSortedUpdateSprites ); |
| |
| ::com::sun::star::uno::Any isUnsafeScrolling() const |
| { |
| return ::com::sun::star::uno::makeAny(mbIsUnsafeScrolling); |
| } |
| void enableUnsafeScrolling( const ::com::sun::star::uno::Any& rAny ) |
| { |
| mbIsUnsafeScrolling = rAny.get<bool>(); |
| } |
| |
| ::com::sun::star::uno::Any isSpriteBounds() const |
| { |
| return ::com::sun::star::uno::makeAny(mbShowSpriteBounds); |
| } |
| void enableSpriteBounds( const ::com::sun::star::uno::Any& rAny ) |
| { |
| mbShowSpriteBounds = rAny.get<bool>(); |
| } |
| |
| private: |
| void renderFrameCounter( OutputDevice& rOutDev ); |
| void renderSpriteCount( OutputDevice& rOutDev ); |
| void renderMemUsage( OutputDevice& rOutDev ); |
| |
| /// Set from the SpriteCanvas: instance coordinating sprite redraw |
| ::canvas::SpriteRedrawManager* mpRedrawManager; |
| |
| /// Set from the init method. used to generate sprites |
| SpriteCanvas* mpOwningSpriteCanvas; |
| |
| /** Background compositing surface. |
| |
| Typically, sprites will be composited in the background, |
| before pushing them to screen. This happens here. |
| */ |
| ::canvas::vcltools::VCLObject< VirtualDevice > maVDev; |
| |
| /// For the frame counter timings |
| ::canvas::tools::ElapsedTime maLastUpdate; |
| |
| /// When true, canvas displays debug info on each frame |
| bool mbShowFrameInfo; |
| |
| /// When true, canvas creates all new sprites with red lines in the corners |
| bool mbShowSpriteBounds; |
| |
| /// When true, canvas uses the scroll optimization (direct scrolls in front buffer) |
| bool mbIsUnsafeScrolling; |
| }; |
| } |
| |
| #endif /* _VCLCANVAS_SPRITECANVASHELPER_HXX_ */ |
| |