blob: 72c0fd1b55db1ab765a70de916ec4ee9350292a1 [file] [log] [blame]
/**************************************************************
*
* 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 INCLUDED_CANVAS_BITMAP_HXX
#define INCLUDED_CANVAS_BITMAP_HXX
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/rendering/XCanvas.hpp>
#include <com/sun/star/rendering/IntegerBitmapLayout.hpp>
#include <com/sun/star/geometry/IntegerRectangle2D.hpp>
#include <com/sun/star/geometry/IntegerPoint2D.hpp>
#include <canvas/rendering/icolorbuffer.hxx>
#include <canvas/rendering/icachedprimitive.hxx>
#include <canvas/rendering/isurfaceproxymanager.hxx>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include <vector>
namespace basegfx
{
class B2IVector;
class B2DPoint;
class B2DHomMatrix;
class B2DPolyPolygon;
}
namespace canvas
{
class ImplBitmap;
/** Bitmap class, with XCanvas-like render interface.
This class provides a bitmap, that can be rendered into,
with an interface compatible to XCanvas. Furthermore, the
bitmaps held here can optionally be backed by (possibly
hw-accelerated) textures.
*/
class Bitmap
{
public:
/** Create bitmap with given size
@param rSize
Size of the bitmap, in pixel
@param rMgr
SurfaceProxyManager, to use for HW acceleration
@param bWithAlpha
When true, the created bitmap will have an alpha channel,
false otherwise
*/
Bitmap( const ::basegfx::B2IVector& rSize,
const ISurfaceProxyManagerSharedPtr& rMgr,
bool bWithAlpha );
~Bitmap();
/// Query whether this bitmap contains alpha channel information
bool hasAlpha() const;
/// Query size of the bitmap in pixel
::basegfx::B2IVector getSize() const;
::com::sun::star::uno::Sequence< sal_Int8 > getData(
::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
const ::com::sun::star::geometry::IntegerRectangle2D& rect );
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 );
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 );
::com::sun::star::uno::Sequence< sal_Int8 > getPixel(
::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
const ::com::sun::star::geometry::IntegerPoint2D& pos );
/** Render the bitmap content to associated
SurfaceProxyManager's screen.
@param fAlpha
Overall alpha for content
@param rPos
Output position
@param rTransform
Output transformation (does not affect output position)
*/
bool draw( double fAlpha,
const ::basegfx::B2DPoint& rPos,
const ::basegfx::B2DHomMatrix& rTransform );
/** Render the bitmap content to associated
SurfaceProxyManager's screen.
@param fAlpha
Overall alpha for content
@param rPos
Output position
@param rArea
Subset of the surface to render. Coordinate system are
surface area pixel, given area will be clipped to the
surface bounds.
@param rTransform
Output transformation (does not affect output position)
*/
bool draw( double fAlpha,
const ::basegfx::B2DPoint& rPos,
const ::basegfx::B2DRange& rArea,
const ::basegfx::B2DHomMatrix& rTransform );
/** Render the bitmap content to associated
SurfaceProxyManager's screen.
@param fAlpha
Overall alpha for content
@param rPos
Output position
@param rClipPoly
Clip polygon for the surface. The clip polygon is also
subject to the output transformation.
@param rTransform
Output transformation (does not affect output position)
*/
bool draw( double fAlpha,
const ::basegfx::B2DPoint& rPos,
const ::basegfx::B2DPolyPolygon& rClipPoly,
const ::basegfx::B2DHomMatrix& rTransform );
/** Clear whole bitmap with given color.
This method sets every single pixel of the bitmap to the
specified color value.
*/
void clear( const ::com::sun::star::uno::Sequence< double >& color );
void fillB2DPolyPolygon(
const ::basegfx::B2DPolyPolygon& rPolyPolygon,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
// High-level drawing operations (from the XCanvas interface)
// ==========================================================
/// See 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 );
/// See XCanvas interface
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 );
/// See XCanvas interface
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 );
/// See XCanvas interface
ICachedPrimitiveSharedPtr 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 );
/// See XCanvas interface
ICachedPrimitiveSharedPtr 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 );
/** See XCanvas interface
@param textureAnnotations
Vector of shared pointers to bitmap textures,
<em>corresponding</em> in indices to the textures
sequence. This is to decouple this interface from the
client's XBitmap-implementation class.
*/
ICachedPrimitiveSharedPtr 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<Bitmap> >& textureAnnotations,
const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
/** See XCanvas interface
@param textureAnnotations
Vector of shared pointers to bitmap textures,
<em>corresponding</em> in indices to the textures
sequence. This is to decouple this interface from the
client's XBitmap-implementation class.
*/
ICachedPrimitiveSharedPtr 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<Bitmap> >& textureAnnotations,
const ::com::sun::star::uno::Reference<
::com::sun::star::geometry::XMapping2D >& xMapping,
const ::com::sun::star::rendering::StrokeAttributes& strokeAttributes );
/// See XCanvas interface
ICachedPrimitiveSharedPtr 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 );
/** See XCanvas interface
@param textureAnnotations
Vector of shared pointers to bitmap textures,
<em>corresponding</em> in indices to the textures
sequence. This is to decouple this interface from the
client's XBitmap-implementation class.
*/
ICachedPrimitiveSharedPtr 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<Bitmap> >& textureAnnotations );
/** See XCanvas interface
@param textureAnnotations
Vector of shared pointers to bitmap textures,
<em>corresponding</em> in indices to the textures
sequence. This is to decouple this interface from the
client's XBitmap-implementation class.
*/
ICachedPrimitiveSharedPtr 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<Bitmap> >& textureAnnotations,
const ::com::sun::star::uno::Reference<
::com::sun::star::geometry::XMapping2D >& xMapping );
/// See XCanvas interface
ICachedPrimitiveSharedPtr 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 );
/// See XCanvas interface
ICachedPrimitiveSharedPtr drawBitmap(
const ::boost::shared_ptr<Bitmap>& rImage,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
/// See XCanvas interface
ICachedPrimitiveSharedPtr 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 );
/// See XCanvas interface
ICachedPrimitiveSharedPtr drawBitmapModulated(
const ::boost::shared_ptr<Bitmap>& rImage,
const ::com::sun::star::rendering::ViewState& viewState,
const ::com::sun::star::rendering::RenderState& renderState );
private:
friend class ImplBitmap;
const ::boost::scoped_ptr< ImplBitmap > mpImpl;
};
typedef ::boost::shared_ptr< Bitmap > BitmapSharedPtr;
}
#endif /* INCLUDED_CANVAS_BITMAP_HXX */