summaryrefslogtreecommitdiff
path: root/basebmp/source/bitmapdevice.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basebmp/source/bitmapdevice.cxx')
-rw-r--r--basebmp/source/bitmapdevice.cxx684
1 files changed, 1 insertions, 683 deletions
diff --git a/basebmp/source/bitmapdevice.cxx b/basebmp/source/bitmapdevice.cxx
index ed5937dfba15..3ab26529e5ee 100644
--- a/basebmp/source/bitmapdevice.cxx
+++ b/basebmp/source/bitmapdevice.cxx
@@ -44,8 +44,6 @@
#include <basebmp/scanlineformats.hxx>
#include <fillimage.hxx>
#include <scaleimage.hxx>
-#include <clippedlinerenderer.hxx>
-#include <polypolygonrenderer.hxx>
#include <genericcolorimageaccessor.hxx>
#include <tools.hxx>
@@ -198,15 +196,6 @@ namespace
typename raw_accessor_type::value_type>::to to_uint32_functor;
-
- typedef typename raw_accessor_traits::xor_accessor raw_xor_accessor_type;
- typedef AccessorTraits<raw_xor_accessor_type> raw_xor_accessor_traits;
- typedef typename accessor_selector::template wrap_accessor<
- raw_xor_accessor_type >::type xor_accessor_type;
- typedef AccessorTraits<xor_accessor_type> xor_accessor_traits;
-
-
-
typedef typename raw_accessor_traits::template masked_accessor<
mask_rawaccessor_type,
dest_iterator_type,
@@ -214,52 +203,6 @@ namespace
Masks::clipmask_polarity>::type raw_maskedaccessor_type;
typedef typename accessor_selector::template wrap_accessor<
raw_maskedaccessor_type >::type masked_accessor_type;
- typedef typename AccessorTraits<
- raw_maskedaccessor_type>::xor_accessor raw_maskedxor_accessor_type;
- typedef typename accessor_selector::template wrap_accessor<
- raw_maskedxor_accessor_type >::type masked_xoraccessor_type;
-
-
-
- // ((iter,mask),mask) special case (e.g. for clipped
- // drawMaskedColor())
- typedef AccessorTraits< raw_maskedaccessor_type > raw_maskedaccessor_traits;
- typedef typename raw_maskedaccessor_traits::template masked_accessor<
- mask_rawaccessor_type,
- composite_iterator_type,
- mask_iterator_type,
- Masks::clipmask_polarity>::type raw_maskedmask_accessor_type;
-
- typedef CompositeIterator2D<
- composite_iterator_type,
- mask_iterator_type> composite_composite_mask_iterator_type;
-
-
-
- typedef ConstantColorBlendSetterAccessorAdapter<
- dest_accessor_type,
- typename alphamask_rawaccessor_type::value_type,
- Masks::alphamask_polarity> colorblend_accessor_type;
- typedef AccessorTraits<colorblend_accessor_type> colorblend_accessor_traits;
- typedef typename colorblend_accessor_traits::template masked_accessor<
- mask_rawaccessor_type,
- dest_iterator_type,
- mask_iterator_type,
- Masks::clipmask_polarity>::type masked_colorblend_accessor_type;
-
-
-
- typedef ConstantColorBlendSetterAccessorAdapter<
- dest_accessor_type,
- Color,
- Masks::alphamask_polarity> colorblend_generic_accessor_type;
- typedef AccessorTraits<colorblend_generic_accessor_type> colorblend_generic_accessor_traits;
- typedef typename colorblend_generic_accessor_traits::template masked_accessor<
- mask_rawaccessor_type,
- dest_iterator_type,
- mask_iterator_type,
- Masks::clipmask_polarity>::type masked_colorblend_generic_accessor_type;
-
typedef JoinImageAccessorAdapter< dest_accessor_type,
@@ -273,14 +216,9 @@ namespace
typename accessor_traits::color_lookup maColorLookup;
to_uint32_functor maToUInt32Converter;
dest_accessor_type maAccessor;
- colorblend_accessor_type maColorBlendAccessor;
- colorblend_generic_accessor_type maGenericColorBlendAccessor;
raw_accessor_type maRawAccessor;
masked_accessor_type maMaskedAccessor;
- masked_colorblend_accessor_type maMaskedColorBlendAccessor;
- masked_colorblend_generic_accessor_type maGenericMaskedColorBlendAccessor;
raw_maskedaccessor_type maRawMaskedAccessor;
- raw_maskedmask_accessor_type maRawMaskedMaskAccessor;
@@ -301,14 +239,9 @@ namespace
maColorLookup(),
maToUInt32Converter(),
maAccessor( accessor ),
- maColorBlendAccessor( accessor ),
- maGenericColorBlendAccessor( accessor ),
maRawAccessor( rawAccessor ),
maMaskedAccessor( accessor ),
- maMaskedColorBlendAccessor( maColorBlendAccessor ),
- maGenericMaskedColorBlendAccessor( maGenericColorBlendAccessor ),
- maRawMaskedAccessor( rawAccessor ),
- maRawMaskedMaskAccessor( rawAccessor )
+ maRawMaskedAccessor( rawAccessor )
{}
private:
@@ -404,44 +337,6 @@ namespace
return maToUInt32Converter(maRawAccessor(pixel));
}
- template< typename Iterator, typename Accessor, typename RawAcc >
- void implRenderLine( const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- const basegfx::B2IBox& rBounds,
- Color col,
- const Iterator& begin,
- const Accessor& acc,
- const RawAcc& rawAcc )
- {
- renderClippedLine( rPt1,rPt2,rBounds,
- maColorLookup( acc,
- col ),
- begin,
- rawAcc );
- }
-
- template< typename Iterator, typename RawAcc >
- void implDrawLine( const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- const basegfx::B2IBox& rBounds,
- Color col,
- const Iterator& begin,
- const RawAcc& rawAcc )
- {
- implRenderLine( rPt1, rPt2, rBounds, col,
- begin, maAccessor, rawAcc );
- }
-
- virtual void drawLine_i(const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- const basegfx::B2IBox& rBounds,
- Color lineColor ) override
- {
- implDrawLine(rPt1,rPt2,rBounds,lineColor,
- maBegin,
- maRawAccessor);
- }
-
composite_iterator_type getMaskedIter( const BitmapDeviceSharedPtr& rClip ) const
{
std::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rClip) );
@@ -451,109 +346,6 @@ namespace
pMask->maBegin );
}
- virtual void drawLine_i(const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- const basegfx::B2IBox& rBounds,
- Color lineColor,
- const BitmapDeviceSharedPtr& rClip ) override
- {
- implDrawLine(rPt1,rPt2,rBounds,lineColor,
- getMaskedIter(rClip),
- maRawMaskedAccessor);
- }
-
- template< typename Iterator, typename RawAcc >
- void implDrawPolygon( const basegfx::B2DPolygon& rPoly,
- const basegfx::B2IBox& rBounds,
- Color col,
- const Iterator& begin,
- const RawAcc& acc )
- {
- basegfx::B2DPolygon aPoly( rPoly );
- if( rPoly.areControlPointsUsed() )
- aPoly = basegfx::tools::adaptiveSubdivideByCount( rPoly );
-
- const typename dest_iterator_type::value_type colorIndex( maColorLookup(
- maAccessor,
- col));
- const sal_uInt32 nVertices( aPoly.count() );
- for( sal_uInt32 i=1; i<nVertices; ++i )
- renderClippedLine( basegfx::fround(aPoly.getB2DPoint(i-1)),
- basegfx::fround(aPoly.getB2DPoint(i)),
- rBounds,
- colorIndex,
- begin,
- acc );
-
- if( nVertices > 1 && aPoly.isClosed() )
- renderClippedLine( basegfx::fround(aPoly.getB2DPoint(nVertices-1)),
- basegfx::fround(aPoly.getB2DPoint(0)),
- rBounds,
- colorIndex,
- begin,
- acc );
- }
-
- virtual void drawPolygon_i(const basegfx::B2DPolygon& rPoly,
- const basegfx::B2IBox& rBounds,
- Color lineColor ) override
- {
- implDrawPolygon( rPoly, rBounds, lineColor,
- maBegin,
- maRawAccessor );
- }
-
- virtual void drawPolygon_i(const basegfx::B2DPolygon& rPoly,
- const basegfx::B2IBox& rBounds,
- Color lineColor,
- const BitmapDeviceSharedPtr& rClip ) override
- {
- implDrawPolygon( rPoly, rBounds, lineColor,
- getMaskedIter(rClip),
- maRawMaskedAccessor );
- }
-
- template< typename Iterator, typename RawAcc >
- void implFillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
- Color col,
- const Iterator& begin,
- const RawAcc& acc,
- const basegfx::B2IBox& rBounds )
- {
- basegfx::B2DPolyPolygon aPoly( rPoly );
- if( rPoly.areControlPointsUsed() )
- aPoly = basegfx::tools::adaptiveSubdivideByCount( rPoly );
-
- renderClippedPolyPolygon( begin,
- acc,
- maColorLookup( maAccessor,
- col),
- rBounds,
- aPoly,
- basegfx::FillRule::EvenOdd );
- }
-
- virtual void fillPolyPolygon_i(const basegfx::B2DPolyPolygon& rPoly,
- Color fillColor,
- const basegfx::B2IBox& rBounds ) override
- {
- implFillPolyPolygon( rPoly, fillColor,
- maBegin,
- maRawAccessor,
- rBounds );
- }
-
- virtual void fillPolyPolygon_i(const basegfx::B2DPolyPolygon& rPoly,
- Color fillColor,
- const basegfx::B2IBox& rBounds,
- const BitmapDeviceSharedPtr& rClip ) override
- {
- implFillPolyPolygon( rPoly, fillColor,
- getMaskedIter(rClip),
- maRawMaskedAccessor,
- rBounds );
- }
-
template< typename Iterator, typename RawAcc >
void implDrawBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
const basegfx::B2IBox& rSrcRect,
@@ -685,116 +477,6 @@ namespace
}
}
- virtual void drawMaskedColor_i(Color aSrcColor,
- const BitmapDeviceSharedPtr& rAlphaMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IPoint& rDstPoint ) override
- {
- std::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rAlphaMask) );
- std::shared_ptr<alphamask_bitmap_type> pAlpha( getCompatibleAlphaMask(rAlphaMask) );
-
- if( pAlpha )
- {
- maColorBlendAccessor.setColor( aSrcColor );
-
- vigra::copyImage( srcIterRange(pAlpha->maBegin,
- pAlpha->maRawAccessor,
- rSrcRect),
- destIter(maBegin,
- maColorBlendAccessor,
- rDstPoint) );
- }
- else if( pMask )
- {
- const composite_iterator_type aBegin(
- maBegin + vigra::Diff2D(rDstPoint.getX(),
- rDstPoint.getY()),
- pMask->maBegin + topLeft(rSrcRect) );
-
- fillImage(aBegin,
- aBegin + vigra::Diff2D(rSrcRect.getWidth(),
- rSrcRect.getHeight()),
- maRawMaskedAccessor,
- maColorLookup(
- maAccessor,
- aSrcColor) );
- }
- else
- {
- GenericColorImageAccessor aSrcAcc( rAlphaMask );
- maGenericColorBlendAccessor.setColor( aSrcColor );
-
- vigra::copyImage( srcIterRange(vigra::Diff2D(),
- aSrcAcc,
- rSrcRect),
- destIter(maBegin,
- maGenericColorBlendAccessor,
- rDstPoint) );
- }
- }
-
- virtual void drawMaskedColor_i(Color aSrcColor,
- const BitmapDeviceSharedPtr& rAlphaMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IPoint& rDstPoint,
- const BitmapDeviceSharedPtr& rClip ) override
- {
- std::shared_ptr<mask_bitmap_type> pMask( getCompatibleClipMask(rAlphaMask) );
- std::shared_ptr<alphamask_bitmap_type> pAlpha( getCompatibleAlphaMask(rAlphaMask) );
-
- if( pAlpha )
- {
- const composite_iterator_type aBegin( getMaskedIter(rClip) );
- maMaskedColorBlendAccessor.get1stWrappedAccessor().setColor(
- aSrcColor );
-
- vigra::copyImage( srcIterRange(pAlpha->maBegin,
- pAlpha->maRawAccessor,
- rSrcRect),
- destIter(aBegin,
- maMaskedColorBlendAccessor,
- rDstPoint) );
- }
- else if( pMask )
- {
- std::shared_ptr<mask_bitmap_type> pClipMask( getCompatibleClipMask(rClip) );
- OSL_ASSERT( pClipMask );
-
- // setup a ((iter,mask),clipMask) composite composite
- // iterator, to pass both masks (clip and alpha mask)
- // to the algorithm
- const composite_composite_mask_iterator_type aBegin(
- composite_iterator_type(
- maBegin + vigra::Diff2D(rDstPoint.getX(),
- rDstPoint.getY()),
- pMask->maBegin + topLeft(rSrcRect)),
- pClipMask->maBegin + vigra::Diff2D(rDstPoint.getX(),
- rDstPoint.getY()) );
-
- fillImage(aBegin,
- aBegin + vigra::Diff2D(rSrcRect.getWidth(),
- rSrcRect.getHeight()),
- maRawMaskedMaskAccessor,
- maColorLookup(
- maAccessor,
- aSrcColor) );
- }
- else
- {
- GenericColorImageAccessor aSrcAcc( rAlphaMask );
- const composite_iterator_type aBegin( getMaskedIter(rClip) );
- maGenericMaskedColorBlendAccessor.get1stWrappedAccessor().setColor(
- aSrcColor );
-
- vigra::copyImage( srcIterRange(vigra::Diff2D(),
- aSrcAcc,
- rSrcRect),
- destIter(aBegin,
- maGenericMaskedColorBlendAccessor,
- rDstPoint) );
- }
- }
-
template< typename Iterator, typename Acc >
void implDrawMaskedBitmap(const BitmapDeviceSharedPtr& rSrcBitmap,
const BitmapDeviceSharedPtr& rMask,
@@ -858,50 +540,6 @@ namespace
rDstRect));
}
- virtual void drawMaskedBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
- const BitmapDeviceSharedPtr& rMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IBox& rDstRect ) override
- {
- if( isCompatibleClipMask(rMask) &&
- isCompatibleBitmap(rSrcBitmap) )
- {
- implDrawMaskedBitmap(rSrcBitmap, rMask,
- rSrcRect, rDstRect,
- maBegin,
- maAccessor);
- }
- else
- {
- implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
- rSrcRect, rDstRect,
- maBegin,
- maAccessor);
- }
- }
-
- virtual void drawMaskedBitmap_i(const BitmapDeviceSharedPtr& rSrcBitmap,
- const BitmapDeviceSharedPtr& rMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IBox& rDstRect,
- const BitmapDeviceSharedPtr& rClip ) override
- {
- if( isCompatibleClipMask(rMask) &&
- isCompatibleBitmap(rSrcBitmap) )
- {
- implDrawMaskedBitmap(rSrcBitmap, rMask,
- rSrcRect, rDstRect,
- getMaskedIter(rClip),
- maMaskedAccessor);
- }
- else
- {
- implDrawMaskedBitmapGeneric(rSrcBitmap, rMask,
- rSrcRect, rDstRect,
- getMaskedIter(rClip),
- maMaskedAccessor);
- }
- }
};
} // namespace
@@ -1069,104 +707,8 @@ sal_uInt32 BitmapDevice::getPixelData( const basegfx::B2IPoint& rPt )
return 0;
}
-void BitmapDevice::drawLine( const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- Color lineColor )
-{
- drawLine_i( rPt1,
- rPt2,
- mpImpl->maBounds,
- lineColor );
-}
-
-void BitmapDevice::drawLine( const basegfx::B2IPoint& rPt1,
- const basegfx::B2IPoint& rPt2,
- Color lineColor,
- const BitmapDeviceSharedPtr& rClip )
-{
- if( !rClip )
- {
- drawLine(rPt1,rPt2,lineColor);
- return;
- }
-
- if( isCompatibleClipMask( rClip ) )
- drawLine_i( rPt1,
- rPt2,
- mpImpl->maBounds,
- lineColor,
- rClip );
- else
- getGenericRenderer()->drawLine( rPt1, rPt2, lineColor,
- rClip );
-}
-
-void BitmapDevice::drawPolygon( const basegfx::B2DPolygon& rPoly,
- Color lineColor )
-{
- const sal_uInt32 numVertices( rPoly.count() );
- if( numVertices )
- drawPolygon_i( rPoly,
- mpImpl->maBounds,
- lineColor );
-}
-
-void BitmapDevice::drawPolygon( const basegfx::B2DPolygon& rPoly,
- Color lineColor,
- const BitmapDeviceSharedPtr& rClip )
-{
- if( !rClip )
- {
- drawPolygon(rPoly,lineColor);
- return;
- }
-
- const sal_uInt32 numVertices( rPoly.count() );
- if( numVertices )
- {
- if( isCompatibleClipMask( rClip ) )
- drawPolygon_i( rPoly,
- mpImpl->maBounds,
- lineColor, rClip );
- else
- getGenericRenderer()->drawPolygon( rPoly, lineColor,
- rClip );
- }
-}
-
-void BitmapDevice::fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
- Color fillColor )
-{
- fillPolyPolygon_i( rPoly, fillColor, mpImpl->maBounds );
-}
-
-void BitmapDevice::fillPolyPolygon( const basegfx::B2DPolyPolygon& rPoly,
- Color fillColor,
- const BitmapDeviceSharedPtr& rClip )
-{
- if( !rClip )
- {
- fillPolyPolygon(rPoly,fillColor);
- return;
- }
-
- if( isCompatibleClipMask( rClip ) )
- fillPolyPolygon_i( rPoly, fillColor, mpImpl->maBounds, rClip );
- else
- getGenericRenderer()->fillPolyPolygon( rPoly, fillColor,
- rClip );
-}
-
-
namespace
{
- void assertImagePoint( const basegfx::B2IPoint& rPt,
- const basegfx::B2IBox& rPermittedRange )
- {
- (void)rPt; (void)rPermittedRange;
- OSL_ASSERT( rPermittedRange.isInside(rPt) );
- }
-
void assertImageRange( const basegfx::B2IBox& rRange,
const basegfx::B2IBox& rPermittedRange )
{
@@ -1182,54 +724,6 @@ namespace
// TODO(Q3): Move canvas/canvastools.hxx clipBlit() down
// to basegfx, and use here!
- bool clipAreaImpl( ::basegfx::B2IBox& io_rSourceArea,
- ::basegfx::B2IPoint& io_rDestPoint,
- const ::basegfx::B2IBox& rSourceBounds,
- const ::basegfx::B2IBox& rDestBounds )
- {
- const ::basegfx::B2IPoint aSourceTopLeft(
- io_rSourceArea.getMinimum() );
-
- ::basegfx::B2IBox aLocalSourceArea( io_rSourceArea );
-
- // clip source area (which must be inside rSourceBounds)
- aLocalSourceArea.intersect( rSourceBounds );
-
- if( aLocalSourceArea.isEmpty() )
- return false;
-
- // calc relative new source area points (relative to orig
- // source area)
- const ::basegfx::B2IVector aUpperLeftOffset(
- aLocalSourceArea.getMinimum()-aSourceTopLeft );
- const ::basegfx::B2IVector aLowerRightOffset(
- aLocalSourceArea.getMaximum()-aSourceTopLeft );
-
- ::basegfx::B2IBox aLocalDestArea( io_rDestPoint + aUpperLeftOffset,
- io_rDestPoint + aLowerRightOffset );
-
- // clip dest area (which must be inside rDestBounds)
- aLocalDestArea.intersect( rDestBounds );
-
- if( aLocalDestArea.isEmpty() )
- return false;
-
- // calc relative new dest area points (relative to orig
- // source area)
- const ::basegfx::B2IVector aDestUpperLeftOffset(
- aLocalDestArea.getMinimum()-io_rDestPoint );
- const ::basegfx::B2IVector aDestLowerRightOffset(
- aLocalDestArea.getMaximum()-io_rDestPoint );
-
- io_rSourceArea = ::basegfx::B2IBox( aSourceTopLeft + aDestUpperLeftOffset,
- aSourceTopLeft + aDestLowerRightOffset );
- io_rDestPoint = aLocalDestArea.getMinimum();
-
- return true;
- }
-
- // TODO(Q3): Move canvas/canvastools.hxx clipBlit() down
- // to basegfx, and use here!
bool clipAreaImpl( ::basegfx::B2IBox& io_rDestArea,
::basegfx::B2IBox& io_rSourceArea,
const ::basegfx::B2IBox& rDestBounds,
@@ -1360,170 +854,6 @@ void BitmapDevice::drawBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
}
}
-void BitmapDevice::drawMaskedColor( Color aSrcColor,
- const BitmapDeviceSharedPtr& rAlphaMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IPoint& rDstPoint )
-{
- const basegfx::B2IVector& rSrcSize( rAlphaMask->getSize() );
- const basegfx::B2IBox aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
- basegfx::B2IBox aSrcRange( rSrcRect );
- basegfx::B2IPoint aDestPoint( rDstPoint );
-
- if( clipAreaImpl( aSrcRange,
- aDestPoint,
- aSrcBounds,
- mpImpl->maBounds ))
- {
- assertImagePoint(aDestPoint,mpImpl->maBounds);
- assertImageRange(aSrcRange,aSrcBounds);
-
- if( isSharedBuffer(rAlphaMask) )
- {
- // src == dest, copy rAlphaMask beforehand
-
-
- const basegfx::B2ITuple aSize( aSrcRange.getWidth(),
- aSrcRange.getHeight() );
- BitmapDeviceSharedPtr pAlphaCopy(
- cloneBitmapDevice( aSize,
- shared_from_this()) );
- const basegfx::B2IBox aAlphaRange( basegfx::B2ITuple(),
- aSize );
- pAlphaCopy->drawBitmap(rAlphaMask,
- aSrcRange,
- aAlphaRange);
- drawMaskedColor_i( aSrcColor, pAlphaCopy, aAlphaRange, aDestPoint );
- }
- else
- {
- drawMaskedColor_i( aSrcColor, rAlphaMask, aSrcRange, aDestPoint );
- }
- }
-}
-
-void BitmapDevice::drawMaskedColor( Color aSrcColor,
- const BitmapDeviceSharedPtr& rAlphaMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IPoint& rDstPoint,
- const BitmapDeviceSharedPtr& rClip )
-{
- if( !rClip )
- {
- drawMaskedColor(aSrcColor,rAlphaMask,rSrcRect,rDstPoint);
- return;
- }
-
- const basegfx::B2IVector& rSrcSize( rAlphaMask->getSize() );
- const basegfx::B2IBox aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
- basegfx::B2IBox aSrcRange( rSrcRect );
- basegfx::B2IPoint aDestPoint( rDstPoint );
-
- if( clipAreaImpl( aSrcRange,
- aDestPoint,
- aSrcBounds,
- mpImpl->maBounds ))
- {
- assertImagePoint(aDestPoint,mpImpl->maBounds);
- assertImageRange(aSrcRange,aSrcBounds);
-
- if( isCompatibleClipMask( rClip ) )
- {
- if( isSharedBuffer(rAlphaMask) )
- {
- // src == dest, copy rAlphaMask beforehand
-
-
- const basegfx::B2ITuple aSize( aSrcRange.getWidth(),
- aSrcRange.getHeight() );
- BitmapDeviceSharedPtr pAlphaCopy(
- cloneBitmapDevice( aSize,
- shared_from_this()) );
- const basegfx::B2IBox aAlphaRange( basegfx::B2ITuple(),
- aSize );
- pAlphaCopy->drawBitmap(rAlphaMask,
- aSrcRange,
- aAlphaRange);
- drawMaskedColor_i( aSrcColor, pAlphaCopy, aAlphaRange, aDestPoint, rClip );
- }
- else
- {
- drawMaskedColor_i( aSrcColor, rAlphaMask, aSrcRange, aDestPoint, rClip );
- }
- }
- else
- {
- getGenericRenderer()->drawMaskedColor( aSrcColor, rAlphaMask,
- rSrcRect, rDstPoint, rClip );
- }
- }
-}
-
-void BitmapDevice::drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
- const BitmapDeviceSharedPtr& rMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IBox& rDstRect )
-{
- OSL_ASSERT( rMask->getSize() == rSrcBitmap->getSize() );
-
- const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
- const basegfx::B2IBox aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
- basegfx::B2IBox aSrcRange( rSrcRect );
- basegfx::B2IBox aDestRange( rDstRect );
-
- if( clipAreaImpl( aDestRange,
- aSrcRange,
- mpImpl->maBounds,
- aSrcBounds ))
- {
- assertImageRange(aDestRange,mpImpl->maBounds);
- assertImageRange(aSrcRange,aSrcBounds);
-
- drawMaskedBitmap_i( rSrcBitmap, rMask, aSrcRange, aDestRange );
- }
-}
-
-void BitmapDevice::drawMaskedBitmap( const BitmapDeviceSharedPtr& rSrcBitmap,
- const BitmapDeviceSharedPtr& rMask,
- const basegfx::B2IBox& rSrcRect,
- const basegfx::B2IBox& rDstRect,
- const BitmapDeviceSharedPtr& rClip )
-{
- if( !rClip )
- {
- drawMaskedBitmap(rSrcBitmap,rMask,rSrcRect,rDstRect);
- return;
- }
-
- OSL_ASSERT( rMask->getSize() == rSrcBitmap->getSize() );
-
- const basegfx::B2IVector& rSrcSize( rSrcBitmap->getSize() );
- const basegfx::B2IBox aSrcBounds( 0,0,rSrcSize.getX(),rSrcSize.getY() );
- basegfx::B2IBox aSrcRange( rSrcRect );
- basegfx::B2IBox aDestRange( rDstRect );
-
- if( clipAreaImpl( aDestRange,
- aSrcRange,
- mpImpl->maBounds,
- aSrcBounds ))
- {
- assertImageRange(aDestRange,mpImpl->maBounds);
- assertImageRange(aSrcRange,aSrcBounds);
-
- if( isCompatibleClipMask( rClip ) )
- {
- drawMaskedBitmap_i( rSrcBitmap, rMask, aSrcRange, aDestRange, rClip );
- }
- else
- {
- getGenericRenderer()->drawMaskedBitmap( rSrcBitmap, rMask, rSrcRect,
- rDstRect, rClip );
- }
- }
-}
-
-
-
/** Standard clip and alpha masks
*/
struct StdMasks
@@ -1910,18 +1240,6 @@ BitmapDeviceSharedPtr createBitmapDevice( const basegfx::B2IVector& rSize
nullptr );
}
-BitmapDeviceSharedPtr subsetBitmapDevice( const BitmapDeviceSharedPtr& rProto,
- const basegfx::B2IBox& rSubset )
-{
- SAL_INFO( "basebmp.bitmapdevice", "subsetBitmapDevice: proto=" << rProto.get() );
- return createBitmapDeviceImpl( rProto->getSize(),
- rProto->isTopDown(),
- rProto->getScanlineFormat(),
- rProto->getBuffer(),
- rProto->getPalette(),
- &rSubset );
-}
-
BitmapDeviceSharedPtr cloneBitmapDevice( const basegfx::B2IVector& rSize,
const BitmapDeviceSharedPtr& rProto )
{