| /************************************************************** |
| * |
| * 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 _CPPCANVAS_IMPLRENDERER_HXX |
| #define _CPPCANVAS_IMPLRENDERER_HXX |
| |
| #include <sal/types.h> |
| |
| #ifndef BOOST_SHARED_PTR_HPP_INCLUDED |
| #include <boost/shared_ptr.hpp> |
| #endif |
| #include <cppcanvas/renderer.hxx> |
| #include <cppcanvas/canvas.hxx> |
| |
| #include <canvasgraphichelper.hxx> |
| #include <action.hxx> |
| |
| #include <vector> |
| |
| class GDIMetaFile; |
| class VirtualDevice; |
| class Gradient; |
| class BitmapEx; |
| class MapMode; |
| class Size; |
| |
| namespace basegfx { |
| class B2DPolyPolygon; |
| class B2DPolygon; |
| } |
| |
| namespace cppcanvas |
| { |
| |
| namespace internal |
| { |
| struct OutDevState; |
| struct ActionFactoryParameters; |
| |
| // state stack of OutputDevice, to correctly handle |
| // push/pop actions |
| typedef ::std::vector< OutDevState > VectorOfOutDevStates; |
| |
| class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper |
| { |
| public: |
| ImplRenderer( const CanvasSharedPtr& rCanvas, |
| const GDIMetaFile& rMtf, |
| const Parameters& rParms ); |
| ImplRenderer( const CanvasSharedPtr& rCanvas, |
| const BitmapEx& rBmpEx, |
| const Parameters& rParms ); |
| |
| virtual ~ImplRenderer(); |
| |
| virtual bool draw() const; |
| virtual bool drawSubset( sal_Int32 nStartIndex, |
| sal_Int32 nEndIndex ) const; |
| virtual ::basegfx::B2DRange getSubsetArea( sal_Int32 nStartIndex, |
| sal_Int32 nEndIndex ) const; |
| |
| |
| // element of the Renderer's action vector. Need to be |
| // public, since some functors need it, too. |
| struct MtfAction |
| { |
| MtfAction( const ActionSharedPtr& rAction, |
| sal_Int32 nOrigIndex ) : |
| mpAction( rAction ), |
| mnOrigIndex( nOrigIndex ) |
| { |
| } |
| |
| ActionSharedPtr mpAction; |
| sal_Int32 mnOrigIndex; |
| }; |
| |
| // prefetched and prepared canvas actions |
| // (externally not visible) |
| typedef ::std::vector< MtfAction > ActionVector; |
| |
| |
| private: |
| // default: disabled copy/assignment |
| ImplRenderer(const ImplRenderer&); |
| ImplRenderer& operator=( const ImplRenderer& ); |
| |
| void updateClipping( const ::basegfx::B2DPolyPolygon& rClipPoly, |
| const ActionFactoryParameters& rParms, |
| bool bIntersect ); |
| |
| void updateClipping( const ::Rectangle& rClipRect, |
| const ActionFactoryParameters& rParms, |
| bool bIntersect ); |
| |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XCanvasFont > createFont( double& o_rFontRotation, |
| const ::Font& rFont, |
| const ActionFactoryParameters& rParms ) const; |
| bool createActions( GDIMetaFile& rMtf, |
| const ActionFactoryParameters& rParms, |
| bool bSubsettableActions ); |
| bool createFillAndStroke( const ::basegfx::B2DPolyPolygon& rPolyPoly, |
| const ActionFactoryParameters& rParms ); |
| bool createFillAndStroke( const ::basegfx::B2DPolygon& rPoly, |
| const ActionFactoryParameters& rParms ); |
| void skipContent( GDIMetaFile& rMtf, |
| const char* pCommentString, |
| sal_Int32& io_rCurrActionIndex ) const; |
| |
| bool isActionContained( GDIMetaFile& rMtf, |
| const char* pCommentString, |
| sal_uInt16 nType ) const; |
| |
| void createGradientAction( const ::PolyPolygon& rPoly, |
| const ::Gradient& rGradient, |
| const ActionFactoryParameters& rParms, |
| bool bIsPolygonRectangle, |
| bool bSubsettableActions ); |
| |
| void createTextAction( const ::Point& rStartPoint, |
| const String rString, |
| int nIndex, |
| int nLength, |
| const sal_Int32* pCharWidths, |
| const ActionFactoryParameters& rParms, |
| bool bSubsettable ); |
| |
| bool getSubsetIndices( sal_Int32& io_rStartIndex, |
| sal_Int32& io_rEndIndex, |
| ActionVector::const_iterator& o_rRangeBegin, |
| ActionVector::const_iterator& o_rRangeEnd ) const; |
| |
| |
| ActionVector maActions; |
| }; |
| |
| |
| /// Common parameters when creating actions |
| struct ActionFactoryParameters |
| { |
| ActionFactoryParameters( VectorOfOutDevStates& rStates, |
| const CanvasSharedPtr& rCanvas, |
| ::VirtualDevice& rVDev, |
| const Renderer::Parameters& rParms, |
| sal_Int32& io_rCurrActionIndex ) : |
| mrStates(rStates), |
| mrCanvas(rCanvas), |
| mrVDev(rVDev), |
| mrParms(rParms), |
| mrCurrActionIndex(io_rCurrActionIndex) |
| {} |
| |
| VectorOfOutDevStates& mrStates; |
| const CanvasSharedPtr& mrCanvas; |
| ::VirtualDevice& mrVDev; |
| const Renderer::Parameters& mrParms; |
| sal_Int32& mrCurrActionIndex; |
| }; |
| } |
| } |
| |
| #endif /* _CPPCANVAS_IMPLRENDERER_HXX */ |