| /************************************************************** |
| * |
| * 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 _DXCANVAS_CANVASHELPER_HXX_ |
| #define _DXCANVAS_CANVASHELPER_HXX_ |
| |
| #include <com/sun/star/rendering/XCanvas.hpp> |
| |
| #include <basegfx/vector/b2isize.hxx> |
| #include <basegfx/vector/b2dsize.hxx> |
| |
| #include "dx_graphicsprovider.hxx" |
| #include "dx_gdiplususer.hxx" |
| #include "dx_impltools.hxx" |
| |
| #include <boost/utility.hpp> |
| |
| |
| namespace dxcanvas |
| { |
| /** Helper class for basic canvas functionality. Also offers |
| optional backbuffer painting, when providing it with a second |
| HDC to render into. |
| */ |
| class CanvasHelper : private ::boost::noncopyable |
| { |
| public: |
| CanvasHelper(); |
| |
| /// Release all references |
| void disposing(); |
| |
| /** Initialize canvas helper |
| |
| This method late-initializes the canvas helper, providing |
| it with the necessary device and output objects. Note that |
| the CanvasHelper does <em>not</em> take ownership of the |
| passed rDevice reference, nor does it perform any |
| reference counting. Thus, to prevent the reference counted |
| SpriteCanvas object from deletion, the user of this class |
| is responsible for holding ref-counted references itself! |
| |
| @param rDevice |
| Reference device this canvas is associated with |
| |
| */ |
| void setDevice( com::sun::star::rendering::XGraphicDevice& rDevice ); |
| |
| /** Set the target for rendering operations |
| |
| @param rTarget |
| Render target |
| */ |
| void setTarget( const GraphicsProviderSharedPtr& rTarget ); |
| |
| /** Set the target for rendering operations |
| |
| @param rTarget |
| Render target |
| |
| @param rOutputOffset |
| Output offset in pixel |
| */ |
| void setTarget( const GraphicsProviderSharedPtr& rTarget, |
| const ::basegfx::B2ISize& rOutputOffset ); |
| |
| |
| // CanvasHelper functionality |
| // ========================== |
| |
| // XCanvas (only providing, not implementing the |
| // interface. Also note subtle method parameter differences) |
| void clear(); |
| void drawPoint( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::geometry::RealPoint2D& aPoint, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| void drawLine( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::geometry::RealPoint2D& aStartPoint, |
| const ::com::sun::star::geometry::RealPoint2D& aEndPoint, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| void drawBezier( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::geometry::RealBezierSegment2D& aBezierSegment, |
| const ::com::sun::star::geometry::RealPoint2D& aEndPoint, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| drawPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| strokePolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| strokeTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::rendering::Texture >& textures, |
| const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| strokeTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::rendering::Texture >& textures, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::geometry::XMapping2D >& xMapping, |
| const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D > |
| queryStrokeShapes( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| fillPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| fillTexturedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::rendering::Texture >& textures ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| fillTextureMappedPolyPolygon( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XPolyPolygon2D >& xPolyPolygon, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::rendering::Texture >& textures, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::geometry::XMapping2D >& xMapping ); |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont > SAL_CALL |
| createFont( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::rendering::FontRequest& fontRequest, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::beans::PropertyValue >& extraFontProperties, |
| const ::com::sun::star::geometry::Matrix2D& fontMatrix ); |
| |
| ::com::sun::star::uno::Sequence< ::com::sun::star::rendering::FontInfo > |
| queryAvailableFonts( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::rendering::FontInfo& aFilter, |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::beans::PropertyValue >& aFontProperties ); |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| drawText( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::rendering::StringContext& text, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XCanvasFont >& xFont, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState, |
| sal_Int8 textDirection ); |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| drawTextLayout( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::rendering::XTextLayout >& layoutetText, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| drawBitmap( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| 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 ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive > |
| drawBitmapModulated( const ::com::sun::star::rendering::XCanvas* pCanvas, |
| 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 ); |
| ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice > |
| getDevice(); |
| |
| // Flush drawing queue to screen |
| void flush() const; |
| |
| /** Called from XCanvas base classes, to notify that content |
| is _about_ to change |
| */ |
| void modifying() {} |
| |
| protected: |
| /// Refcounted global GDI+ state container |
| GDIPlusUserSharedPtr mpGdiPlusUser; |
| |
| /** Phyical output device |
| |
| Deliberately not a refcounted reference, because of |
| potential circular references for spritecanvas. |
| */ |
| com::sun::star::rendering::XGraphicDevice* mpDevice; |
| |
| /// Provides the Gdiplus::Graphics to render into |
| GraphicsProviderSharedPtr mpGraphicsProvider; |
| |
| bool needOutput() const { return mpGraphicsProvider.get() != NULL; }; |
| |
| // returns transparency of color |
| void setupGraphicsState( GraphicsSharedPtr& rGraphics, |
| const ::com::sun::star::rendering::ViewState& viewState, |
| const ::com::sun::star::rendering::RenderState& renderState ); |
| |
| Gdiplus::CompositingMode calcCompositingMode( sal_Int8 nMode ); |
| |
| /// Current (transformation-independent) output buffer offset |
| ::basegfx::B2ISize maOutputOffset; |
| }; |
| } |
| |
| #endif /* _DXCANVAS_CANVASHELPER_HXX_ */ |