Files
libreoffice/canvas/source/tools/image.hxx
Rüdiger Timm 811c514868 INTEGRATION: CWS changefileheader (1.5.108); FILE MERGED
2008/04/01 15:03:06 thb 1.5.108.3: #i85898# Stripping all external header guards
2008/04/01 10:49:27 thb 1.5.108.2: #i85898# Stripping all external header guards
2008/03/28 16:35:12 rt 1.5.108.1: #i87441# Change license header to LPGL v3.
2008-04-11 08:36:22 +00:00

302 lines
15 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: image.hxx,v $
* $Revision: 1.6 $
*
* 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.
*
************************************************************************/
#ifndef INCLUDED_CANVAS_IMAGE_HXX
#define INCLUDED_CANVAS_IMAGE_HXX
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/rendering/XCanvas.hpp>
#include <canvas/rendering/icolorbuffer.hxx>
#include <canvas/parametricpolypolygon.hxx>
#include "imagecachedprimitive.hxx"
#include <canvas/elapsedtime.hxx>
#include "image_sysprereq.h"
struct BitmapSystemData;
class BitmapEx;
namespace canvas
{
class Image : public IColorBuffer
{
public:
/// The description of the image
struct Description
{
IColorBuffer::Format eFormat;
sal_uInt32 nWidth;
sal_uInt32 nHeight;
sal_uInt32 nStride;
sal_uInt8* pBuffer;
};
/** Create a new image with the attributes passed as argument.
*/
explicit Image( const Description& desc );
/** Create a new image from the XBitmap passed as argument
*/
explicit Image( const ::com::sun::star::uno::Reference<
::com::sun::star::rendering::XBitmap >& xBitmap );
virtual ~Image();
/** Retrieve desciption of image layout
*/
const Description& getDescription() const { return maDesc; }
/** Clear image with uniform color
*/
void clear( sal_uInt8 a,
sal_uInt8 r,
sal_uInt8 g,
sal_uInt8 b );
void fillB2DPolyPolygon(
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
// IColorBuffer interface implementation
// =====================================
virtual sal_uInt8* lock() const;
virtual void unlock() const;
virtual sal_uInt32 getWidth() const;
virtual sal_uInt32 getHeight() const;
virtual sal_uInt32 getStride() const;
virtual Format getFormat() const;
// High-level drawing operations (from the XCanvas interface)
// ==========================================================
void drawPoint( 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::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::geometry::RealBezierSegment2D& aBezierSegment,
const ::com::sun::star::geometry::RealPoint2D& aEndPoint,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
ImageCachedPrimitiveSharedPtr drawPolyPolygon(
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 );
ImageCachedPrimitiveSharedPtr strokePolyPolygon(
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 );
ImageCachedPrimitiveSharedPtr strokeTexturedPolyPolygon(
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 ::std::vector< ::boost::shared_ptr<Image> >& textureAnnotations,
const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
ImageCachedPrimitiveSharedPtr strokeTextureMappedPolyPolygon(
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 ::std::vector< ::boost::shared_ptr<Image> >& textureAnnotations,
const ::com::sun::star::uno::Reference<
::com::sun::star::geometry::XMapping2D >& xMapping,
const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
ImageCachedPrimitiveSharedPtr fillPolyPolygon(
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 );
ImageCachedPrimitiveSharedPtr fillTexturedPolyPolygon(
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 ::std::vector< ::boost::shared_ptr<Image> >& textureAnnotations );
ImageCachedPrimitiveSharedPtr fillTextureMappedPolyPolygon(
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 ::std::vector< ::boost::shared_ptr<Image> >& textureAnnotations,
const ::com::sun::star::uno::Reference<
::com::sun::star::geometry::XMapping2D >& xMapping );
ImageCachedPrimitiveSharedPtr drawBitmap(
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 );
ImageCachedPrimitiveSharedPtr drawBitmap(
const ::boost::shared_ptr<Image>& rImage,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
ImageCachedPrimitiveSharedPtr drawBitmapModulated(
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 );
ImageCachedPrimitiveSharedPtr drawBitmapModulated(
const ::boost::shared_ptr<Image>& rImage,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
private:
void drawLinePolyPolygon( const ::basegfx::B2DPolyPolygon& rPoly,
double fStrokeWidth,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
ImageCachedPrimitiveSharedPtr implDrawBitmap(
const Image& rBitmap,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
ImageCachedPrimitiveSharedPtr fillTexturedPolyPolygon(
const Image& rTexture,
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::basegfx::B2DHomMatrix& rOverallTransform,
const ::basegfx::B2DHomMatrix& rViewTransform,
const ::com::sun::star::rendering::Texture& texture );
void fillGradient( const ParametricPolyPolygon::Values& rValues,
const ::com::sun::star::uno::Sequence< double >& rColor1,
const ::com::sun::star::uno::Sequence< double >& rColor2,
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::basegfx::B2DHomMatrix& rOverallTransform,
const ::com::sun::star::rendering::Texture& texture );
bool fromVCLBitmap( ::BitmapEx& rBmpEx );
template<class pixel_format>
void drawLinePolyPolygonImpl( const ::basegfx::B2DPolyPolygon& rPoly,
double fStrokeWidth,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
template<class pixel_format,class span_gen_type>
ImageCachedPrimitiveSharedPtr fillTexturedPolyPolygonImpl(
const Image& rTexture,
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::basegfx::B2DHomMatrix& rOverallTransform,
const ::basegfx::B2DHomMatrix& rViewTransform,
const ::com::sun::star::rendering::Texture& texture );
template<class pixel_format>
void fillGradientImpl( const ParametricPolyPolygon::Values& rValues,
const ::com::sun::star::uno::Sequence< double >& rUnoColor1,
const ::com::sun::star::uno::Sequence< double >& rUnoColor2,
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::basegfx::B2DHomMatrix& rOverallTransform,
const ::com::sun::star::rendering::Texture& texture );
template<class pixel_format>
ImageCachedPrimitiveSharedPtr fillPolyPolygonImpl(
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
template<class pixel_format> void clearImpl( sal_uInt8 a,
sal_uInt8 r,
sal_uInt8 g,
sal_uInt8 b );
/** Image description
*/
Description maDesc;
/** the graphics buffer is a simple array
where each element points to the start
of a scanline in consecutive order.
*/
agg::rendering_buffer maRenderingBuffer;
/// Whether maRenderingBuffer is owned by the client of this object
bool mbBufferHasUserOwnership;
#if defined(PROFILER)
enum constant
{
TIMER_FILLTEXTUREDPOLYPOLYGON,
TIMER_FILLB2DPOLYPOLYGON,
TIMER_DRAWPOLYPOLYGON,
TIMER_FILLPOLYPOLYGON,
TIMER_DRAWBITMAP,
TIMER_MAX
};
double maElapsedTime[TIMER_MAX];
struct ScopeTimer
{
ScopeTimer( constant aConstant, Image *pImage ) :
maConstant(aConstant),mpImage(pImage)
{}
~ScopeTimer()
{
mpImage->maElapsedTime[maConstant] += maTimer.getElapsedTime();
}
constant maConstant;
Image* mpImage;
::canvas::tools::ElapsedTime maTimer;
};
#endif
};
typedef ::boost::shared_ptr< Image > ImageSharedPtr;
}
#endif /* INCLUDED_CANVAS_IMAGE_HXX */