summaryrefslogtreecommitdiff
path: root/canvas/source/tools/bitmap.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'canvas/source/tools/bitmap.cxx')
-rw-r--r--canvas/source/tools/bitmap.cxx838
1 files changed, 838 insertions, 0 deletions
diff --git a/canvas/source/tools/bitmap.cxx b/canvas/source/tools/bitmap.cxx
new file mode 100644
index 000000000000..eb7732b9a8f6
--- /dev/null
+++ b/canvas/source/tools/bitmap.cxx
@@ -0,0 +1,838 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_canvas.hxx"
+
+#include <canvas/debug.hxx>
+#include <tools/diagnose_ex.h>
+#include <canvas/rendering/bitmap.hxx>
+#include <canvas/rendering/isurfaceproxy.hxx>
+#include <basegfx/vector/b2isize.hxx>
+#include "image.hxx"
+#include <algorithm>
+#include <iterator>
+
+
+using namespace ::com::sun::star;
+
+namespace canvas
+{
+ class ImplBitmap
+ {
+ public:
+ ImplBitmap( const ::basegfx::B2IVector& rSize,
+ const ISurfaceProxyManagerSharedPtr& rMgr,
+ bool bWithAlpha ) :
+ mpImage(),
+ mpSurfaceProxy(),
+ mbIsSurfaceDirty( true )
+ {
+ ENSURE_OR_THROW( rMgr,
+ "Bitmap::Bitmap(): Invalid surface proxy manager" );
+
+ Image::Description desc;
+
+ desc.eFormat = bWithAlpha ? Image::FMT_A8R8G8B8 : Image::FMT_R8G8B8;
+ desc.nWidth = rSize.getX();
+ desc.nHeight = rSize.getY();
+ desc.nStride = 0;
+ desc.pBuffer = NULL;
+
+ mpImage.reset( new Image(desc) );
+
+ // clear the surface [fill with opaque black]
+ mpImage->clear(0,255,255,255);
+
+ // create a (possibly hardware accelerated) mirror surface.
+ mpSurfaceProxy = rMgr->createSurfaceProxy( mpImage );
+ }
+
+ bool hasAlpha() const
+ {
+ if( !mpImage )
+ return false;
+
+ return (mpImage->getDescription().eFormat == Image::FMT_A8R8G8B8);
+ }
+
+ ::basegfx::B2IVector getSize() const
+ {
+ return ::basegfx::B2IVector( mpImage->getWidth(),
+ mpImage->getHeight() );
+ }
+
+ ::com::sun::star::uno::Sequence< sal_Int8 > getData( ::com::sun::star::rendering::IntegerBitmapLayout& /*bitmapLayout*/,
+ const ::com::sun::star::geometry::IntegerRectangle2D& rect )
+ {
+ const IColorBuffer::Format format = mpImage->getFormat();
+ const sal_uInt32 dwNumBytesPerPixel = getNumBytes(format);
+ const sal_uInt32 dwPitch = mpImage->getWidth()*dwNumBytesPerPixel;
+
+ if(!(dwNumBytesPerPixel))
+ return uno::Sequence< sal_Int8 >();
+
+ const sal_uInt32 dwWidth = rect.X2-rect.X1;
+ const sal_uInt32 dwHeight = rect.Y2-rect.Y1;
+
+ uno::Sequence< sal_Int8 > aRes(dwWidth*dwHeight*4);
+ sal_uInt8 *pDst = reinterpret_cast<sal_uInt8 *>(aRes.getArray());
+
+ const sal_uInt8 *pSrc = mpImage->lock()+(rect.Y1*dwPitch)+(rect.X1*dwNumBytesPerPixel);
+ const sal_uInt32 dwSpanSizeInBytes = dwNumBytesPerPixel*dwWidth;
+ for(sal_uInt32 y=0; y<dwHeight; ++y)
+ {
+ rtl_copyMemory(pDst,pSrc,dwSpanSizeInBytes);
+ pDst += dwSpanSizeInBytes;
+ pSrc += dwPitch;
+ }
+ mpImage->unlock();
+
+ return aRes;
+ }
+
+ void setData( const ::com::sun::star::uno::Sequence< sal_Int8 >& data,
+ const ::com::sun::star::rendering::IntegerBitmapLayout& /*bitmapLayout*/,
+ const ::com::sun::star::geometry::IntegerRectangle2D& rect )
+ {
+ const IColorBuffer::Format format = mpImage->getFormat();
+ const sal_uInt32 dwNumBytesPerPixel = getNumBytes(format);
+ const sal_uInt32 dwPitch = mpImage->getWidth()*dwNumBytesPerPixel;
+
+ if(!(dwNumBytesPerPixel))
+ return;
+
+ const sal_uInt32 dwWidth = rect.X2-rect.X1;
+ const sal_uInt32 dwHeight = rect.Y2-rect.Y1;
+ const sal_uInt8 *pSrc = reinterpret_cast<const sal_uInt8 *>(data.getConstArray());
+
+ sal_uInt8 *pDst = mpImage->lock()+(rect.Y1*dwPitch)+(rect.X1*dwNumBytesPerPixel);
+ const sal_uInt32 dwSpanSizeInBytes = dwNumBytesPerPixel*dwWidth;
+ for(sal_uInt32 y=0; y<dwHeight; ++y)
+ {
+ rtl_copyMemory(pDst,pSrc,dwSpanSizeInBytes);
+ pSrc += dwSpanSizeInBytes;
+ pDst += dwPitch;
+ }
+ mpImage->unlock();
+ }
+
+ void setPixel( const ::com::sun::star::uno::Sequence< sal_Int8 >& color,
+ const ::com::sun::star::rendering::IntegerBitmapLayout& /*bitmapLayout*/,
+ const ::com::sun::star::geometry::IntegerPoint2D& pos )
+ {
+ struct ARGBColor
+ {
+ sal_uInt8 a;
+ sal_uInt8 r;
+ sal_uInt8 g;
+ sal_uInt8 b;
+ };
+
+ union ARGB
+ {
+ ARGBColor Color;
+ sal_uInt32 color;
+
+ inline ARGB( sal_uInt32 _color ) : color(_color) {}
+ };
+
+ ARGB argb(0xFFFFFFFF);
+
+ if(color.getLength() > 2)
+ {
+ argb.Color.r = static_cast<sal_uInt8>(color[0]);
+ argb.Color.g = static_cast<sal_uInt8>(color[1]);
+ argb.Color.b = static_cast<sal_uInt8>(color[2]);
+ if(color.getLength() > 3)
+ argb.Color.a = static_cast<sal_uInt8>(255.0f*color[3]);
+ }
+
+ const IColorBuffer::Format format = mpImage->getFormat();
+ const sal_uInt32 dwNumBytesPerPixel = getNumBytes(format);
+ const sal_uInt32 dwPitch = mpImage->getWidth()*dwNumBytesPerPixel;
+
+ if(!(dwNumBytesPerPixel))
+ return;
+
+ sal_uInt8 *pDst = mpImage->lock()+(pos.Y*dwPitch)+(pos.X*dwNumBytesPerPixel);
+
+ switch(format)
+ {
+ case IColorBuffer::FMT_R8G8B8:
+ pDst[0] = argb.Color.r;
+ pDst[1] = argb.Color.g;
+ pDst[2] = argb.Color.b;
+ break;
+ case IColorBuffer::FMT_A8R8G8B8:
+ case IColorBuffer::FMT_X8R8G8B8:
+ pDst[0] = argb.Color.a;
+ pDst[1] = argb.Color.r;
+ pDst[2] = argb.Color.g;
+ pDst[3] = argb.Color.b;
+ break;
+ default:
+ break;
+ }
+
+ mpImage->unlock();
+ }
+
+ uno::Sequence< sal_Int8 > getPixel( ::com::sun::star::rendering::IntegerBitmapLayout& /*bitmapLayout*/,
+ const ::com::sun::star::geometry::IntegerPoint2D& pos )
+ {
+ const IColorBuffer::Format format = mpImage->getFormat();
+ const sal_uInt32 dwNumBytesPerPixel = getNumBytes(format);
+ const sal_uInt32 dwPitch = mpImage->getWidth()*dwNumBytesPerPixel;
+
+ if(!(dwNumBytesPerPixel))
+ return uno::Sequence< sal_Int8 >();
+
+ uno::Sequence< sal_Int8 > aRet(dwNumBytesPerPixel);
+ const sal_uInt8 *pSrc = mpImage->lock()+(pos.Y*dwPitch)+(pos.X*dwNumBytesPerPixel);
+
+ switch(format)
+ {
+ case IColorBuffer::FMT_R8G8B8:
+ aRet[0] = pSrc[0];
+ aRet[1] = pSrc[1];
+ aRet[2] = pSrc[2];
+ break;
+ case IColorBuffer::FMT_A8R8G8B8:
+ case IColorBuffer::FMT_X8R8G8B8:
+ aRet[0] = pSrc[1];
+ aRet[1] = pSrc[2];
+ aRet[2] = pSrc[3];
+ aRet[3] = pSrc[0];
+ break;
+ default:
+ break;
+ }
+
+ mpImage->unlock();
+
+ return aRet;
+ }
+
+ // the IColorBuffer interface
+ // ==========================
+
+ bool draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ if( mbIsSurfaceDirty )
+ {
+ mpSurfaceProxy->setColorBufferDirty();
+ mbIsSurfaceDirty = false;
+ }
+
+ return mpSurfaceProxy->draw( fAlpha, rPos, rTransform );
+ }
+
+ bool draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DRange& rArea,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ if( mbIsSurfaceDirty )
+ {
+ mpSurfaceProxy->setColorBufferDirty();
+ mbIsSurfaceDirty = false;
+ }
+
+ return mpSurfaceProxy->draw( fAlpha, rPos, rArea, rTransform );
+ }
+
+
+ bool draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DPolyPolygon& rClipPoly,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ if( mbIsSurfaceDirty )
+ {
+ mpSurfaceProxy->setColorBufferDirty();
+ mbIsSurfaceDirty = false;
+ }
+
+ return mpSurfaceProxy->draw( fAlpha, rPos, rClipPoly, rTransform );
+ }
+
+ void clear( const uno::Sequence< double >& color )
+ {
+ if(color.getLength() > 2)
+ {
+ mbIsSurfaceDirty = true;
+
+ if(color.getLength() > 3)
+ {
+ mpImage->clear( static_cast<sal_uInt8>(255.0f*color[0]),
+ static_cast<sal_uInt8>(255.0f*color[1]),
+ static_cast<sal_uInt8>(255.0f*color[2]),
+ static_cast<sal_uInt8>(255.0f*color[3]) );
+ }
+ else
+ {
+ mpImage->clear( static_cast<sal_uInt8>(255.0f*color[0]),
+ static_cast<sal_uInt8>(255.0f*color[1]),
+ static_cast<sal_uInt8>(255.0f*color[2]),
+ 255 );
+ }
+ }
+ }
+
+ void fillB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ mpImage->fillB2DPolyPolygon( rPolyPolygon,
+ viewState,
+ renderState );
+ }
+
+
+ // the XCanvas-render interface
+ // ============================
+
+ void drawPoint( const geometry::RealPoint2D& aPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ mpImage->drawPoint( aPoint, viewState, renderState );
+ }
+
+ void drawLine( const geometry::RealPoint2D& aStartPoint,
+ const geometry::RealPoint2D& aEndPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ mpImage->drawLine( aStartPoint, aEndPoint, viewState, renderState );
+ }
+
+ void drawBezier( const geometry::RealBezierSegment2D& aBezierSegment,
+ const geometry::RealPoint2D& aEndPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ mpImage->drawBezier( aBezierSegment, aEndPoint, viewState, renderState );
+ }
+
+ ICachedPrimitiveSharedPtr drawPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->drawPolyPolygon( xPolyPolygon, viewState, renderState ) );
+ }
+
+ ICachedPrimitiveSharedPtr strokePolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->strokePolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ strokeAttributes ) );
+ }
+
+ ICachedPrimitiveSharedPtr strokeTexturedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ mbIsSurfaceDirty = true;
+
+ ::std::vector< ImageSharedPtr > aTextureAnnotations;
+ convertTextureAnnotations( aTextureAnnotations,
+ textureAnnotations );
+
+ return setupCachedPrimitive(
+ mpImage->strokeTexturedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ aTextureAnnotations,
+ strokeAttributes ) );
+ }
+
+ ICachedPrimitiveSharedPtr strokeTextureMappedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const uno::Reference< geometry::XMapping2D >& xMapping,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ mbIsSurfaceDirty = true;
+
+ ::std::vector< ImageSharedPtr > aTextureAnnotations;
+ convertTextureAnnotations( aTextureAnnotations,
+ textureAnnotations );
+
+ return setupCachedPrimitive(
+ mpImage->strokeTextureMappedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ aTextureAnnotations,
+ xMapping,
+ strokeAttributes ) );
+ }
+
+
+ ICachedPrimitiveSharedPtr fillPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->fillPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState ) );
+ }
+
+ ICachedPrimitiveSharedPtr fillTexturedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations )
+ {
+ mbIsSurfaceDirty = true;
+
+ ::std::vector< ImageSharedPtr > aTextureAnnotations;
+ convertTextureAnnotations( aTextureAnnotations,
+ textureAnnotations );
+
+ return setupCachedPrimitive(
+ mpImage->fillTexturedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ aTextureAnnotations ) );
+ }
+
+
+ ICachedPrimitiveSharedPtr fillTextureMappedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const uno::Reference< geometry::XMapping2D >& xMapping )
+ {
+ mbIsSurfaceDirty = true;
+
+ ::std::vector< ImageSharedPtr > aTextureAnnotations;
+ convertTextureAnnotations( aTextureAnnotations,
+ textureAnnotations );
+
+ return setupCachedPrimitive(
+ mpImage->fillTextureMappedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ aTextureAnnotations,
+ xMapping ) );
+ }
+
+ ICachedPrimitiveSharedPtr drawBitmap(
+ const uno::Reference< rendering::XBitmap >& xBitmap,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->drawBitmap( xBitmap,
+ viewState,
+ renderState ) );
+ }
+
+ ICachedPrimitiveSharedPtr drawBitmap(
+ const ::boost::shared_ptr<Bitmap>& rImage,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->drawBitmap( rImage->mpImpl->mpImage,
+ viewState,
+ renderState ) );
+ }
+
+ ICachedPrimitiveSharedPtr drawBitmapModulated(
+ const uno::Reference< rendering::XBitmap >& xBitmap,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->drawBitmapModulated( xBitmap,
+ viewState,
+ renderState ) );
+ }
+
+
+ ICachedPrimitiveSharedPtr drawBitmapModulated(
+ const ::boost::shared_ptr<Bitmap>& rImage,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mbIsSurfaceDirty = true;
+
+ return setupCachedPrimitive(
+ mpImage->drawBitmapModulated( rImage->mpImpl->mpImage,
+ viewState,
+ renderState ) );
+ }
+
+ private:
+ ICachedPrimitiveSharedPtr setupCachedPrimitive(
+ const ImageCachedPrimitiveSharedPtr& rCachedPrimitive ) const
+ {
+ if( rCachedPrimitive )
+ rCachedPrimitive->setImage( mpImage );
+
+ return rCachedPrimitive;
+ }
+
+ void convertTextureAnnotations( ::std::vector< ImageSharedPtr >& o_rTextureAnnotations,
+ const ::std::vector< BitmapSharedPtr >& textureAnnotations )
+ {
+ ::std::vector< BitmapSharedPtr >::const_iterator aCurr( textureAnnotations.begin() );
+ const ::std::vector< BitmapSharedPtr >::const_iterator aEnd( textureAnnotations.end() );
+ while( aCurr != aEnd )
+ {
+ if( aCurr->get() != NULL )
+ o_rTextureAnnotations.push_back( (*aCurr)->mpImpl->mpImage );
+ else
+ o_rTextureAnnotations.push_back( ImageSharedPtr() );
+
+ ++aCurr;
+ }
+ }
+
+ sal_uInt32 getNumBytes( IColorBuffer::Format format )
+ {
+ switch(format)
+ {
+ case IColorBuffer::FMT_R8G8B8:
+ return 3;
+ case IColorBuffer::FMT_A8R8G8B8:
+ case IColorBuffer::FMT_X8R8G8B8:
+ return 4;
+ default:
+ return 0;
+ }
+ }
+
+ ImageSharedPtr mpImage;
+ ISurfaceProxySharedPtr mpSurfaceProxy;
+ bool mbIsSurfaceDirty;
+ };
+
+
+ /////////////////////////////////////////////////////////////////
+ // Actual Bitmap pimpl forwarding functions
+ /////////////////////////////////////////////////////////////////
+
+ Bitmap::Bitmap( const ::basegfx::B2IVector& rSize,
+ const ISurfaceProxyManagerSharedPtr& rMgr,
+ bool bWithAlpha ) :
+ mpImpl( new ImplBitmap( rSize,
+ rMgr,
+ bWithAlpha ) )
+ {
+ }
+
+ Bitmap::~Bitmap()
+ {
+ // outline destructor is _necessary_, because ImplBitmap is an
+ // incomplete type outside this file.
+ }
+
+ // forward all methods to ImplBitmap
+ // ==================================================
+
+ bool Bitmap::hasAlpha() const
+ {
+ return mpImpl->hasAlpha();
+ }
+
+ ::basegfx::B2IVector Bitmap::getSize() const
+ {
+ return mpImpl->getSize();
+ }
+
+ ::com::sun::star::uno::Sequence< sal_Int8 > Bitmap::getData(
+ ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
+ const ::com::sun::star::geometry::IntegerRectangle2D& rect )
+ {
+ return mpImpl->getData(bitmapLayout,rect);
+ }
+
+ void Bitmap::setData(
+ const ::com::sun::star::uno::Sequence< sal_Int8 >& data,
+ const ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
+ const ::com::sun::star::geometry::IntegerRectangle2D& rect )
+ {
+ mpImpl->setData(data,bitmapLayout,rect);
+ }
+
+ void Bitmap::setPixel(
+ const ::com::sun::star::uno::Sequence< sal_Int8 >& color,
+ const ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
+ const ::com::sun::star::geometry::IntegerPoint2D& pos )
+ {
+ mpImpl->setPixel(color,bitmapLayout,pos);
+ }
+
+ uno::Sequence< sal_Int8 > Bitmap::getPixel(
+ ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
+ const ::com::sun::star::geometry::IntegerPoint2D& pos )
+ {
+ return mpImpl->getPixel(bitmapLayout,pos);
+ }
+
+ bool Bitmap::draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ return mpImpl->draw( fAlpha, rPos, rTransform );
+ }
+
+ bool Bitmap::draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DRange& rArea,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ return mpImpl->draw( fAlpha, rPos, rArea, rTransform );
+ }
+
+
+ bool Bitmap::draw( double fAlpha,
+ const ::basegfx::B2DPoint& rPos,
+ const ::basegfx::B2DPolyPolygon& rClipPoly,
+ const ::basegfx::B2DHomMatrix& rTransform )
+ {
+ return mpImpl->draw( fAlpha, rPos, rClipPoly, rTransform );
+ }
+
+ void Bitmap::clear( const uno::Sequence< double >& color )
+ {
+ mpImpl->clear( color );
+ }
+
+ void Bitmap::fillB2DPolyPolygon(
+ const ::basegfx::B2DPolyPolygon& rPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ mpImpl->fillB2DPolyPolygon( rPolyPolygon, viewState, renderState );
+ }
+
+ void Bitmap::drawPoint( const geometry::RealPoint2D& aPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawPoint( aPoint, viewState, renderState );
+ }
+
+ void Bitmap::drawLine( const geometry::RealPoint2D& aStartPoint,
+ const geometry::RealPoint2D& aEndPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawLine( aStartPoint, aEndPoint, viewState, renderState );
+ }
+
+ void Bitmap::drawBezier( const geometry::RealBezierSegment2D& aBezierSegment,
+ const geometry::RealPoint2D& aEndPoint,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawBezier( aBezierSegment, aEndPoint, viewState, renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::drawPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawPolyPolygon( xPolyPolygon, viewState, renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::strokePolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ return mpImpl->strokePolyPolygon( xPolyPolygon, viewState, renderState, strokeAttributes );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::strokeTexturedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ return mpImpl->strokeTexturedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ textureAnnotations,
+ strokeAttributes );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::strokeTextureMappedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const uno::Reference< geometry::XMapping2D >& xMapping,
+ const rendering::StrokeAttributes& strokeAttributes )
+ {
+ return mpImpl->strokeTextureMappedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ textureAnnotations,
+ xMapping,
+ strokeAttributes );
+ }
+
+
+ ICachedPrimitiveSharedPtr Bitmap::fillPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->fillPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::fillTexturedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations )
+ {
+ return mpImpl->fillTexturedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ textureAnnotations );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::fillTextureMappedPolyPolygon(
+ const uno::Reference< rendering::XPolyPolygon2D >& xPolyPolygon,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState,
+ const uno::Sequence< rendering::Texture >& textures,
+ const ::std::vector< ::boost::shared_ptr<Bitmap> >& textureAnnotations,
+ const uno::Reference< geometry::XMapping2D >& xMapping )
+ {
+ return mpImpl->fillTextureMappedPolyPolygon( xPolyPolygon,
+ viewState,
+ renderState,
+ textures,
+ textureAnnotations,
+ xMapping );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::drawBitmap(
+ const uno::Reference< rendering::XBitmap >& xBitmap,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawBitmap( xBitmap,
+ viewState,
+ renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::drawBitmap(
+ const ::boost::shared_ptr<Bitmap>& rImage,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawBitmap( rImage,
+ viewState,
+ renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::drawBitmapModulated(
+ const uno::Reference< rendering::XBitmap >& xBitmap,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawBitmapModulated( xBitmap,
+ viewState,
+ renderState );
+ }
+
+ ICachedPrimitiveSharedPtr Bitmap::drawBitmapModulated(
+ const ::boost::shared_ptr<Bitmap>& rImage,
+ const rendering::ViewState& viewState,
+ const rendering::RenderState& renderState )
+ {
+ return mpImpl->drawBitmapModulated( rImage,
+ viewState,
+ renderState );
+ }
+}