summaryrefslogtreecommitdiff
path: root/canvas
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2018-01-30 20:40:19 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-02-06 07:39:11 +0100
commit3e0efdb50cd9bcf1749993607330ea1567eb33a2 (patch)
treec740dfc9b598480d5168282154045bbc938f6862 /canvas
parentf38e35338e3010f137d7b35fa3150792fabfa825 (diff)
convert SetPixel->SetPixelOnData
by extracting out the Y scanline computation from the innermost loop. Inspired by commit 078d01c1b6cb9bbd80aeadc49a71cc817413164c. Change-Id: Ic3c1827c01ed3aec629975749a551c7a68ae4a5e Reviewed-on: https://gerrit.libreoffice.org/48926 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'canvas')
-rw-r--r--canvas/source/vcl/canvasbitmaphelper.cxx11
-rw-r--r--canvas/source/vcl/canvashelper.cxx4
-rw-r--r--canvas/source/vcl/impltools.cxx16
3 files changed, 21 insertions, 10 deletions
diff --git a/canvas/source/vcl/canvasbitmaphelper.cxx b/canvas/source/vcl/canvasbitmaphelper.cxx
index f3f3995a889b..bdb4444016fd 100644
--- a/canvas/source/vcl/canvasbitmaphelper.cxx
+++ b/canvas/source/vcl/canvasbitmaphelper.cxx
@@ -308,17 +308,20 @@ namespace vclcanvas
default:
{
+ Scanline pScan = pWriteAccess->GetScanline( y );
+ Scanline pAScan = pAlphaWriteAccess->GetScanline( y );
+
for( long x=rect.X1;
x<aBmpSize.Width() && x<rect.X2;
++x )
{
- pWriteAccess->SetPixel( y, x, BitmapColor( data[ nCurrPos ],
+ pWriteAccess->SetPixelOnData( pScan, x, BitmapColor( data[ nCurrPos ],
data[ nCurrPos+1 ],
data[ nCurrPos+2 ] ) );
nCurrPos += 3;
// cast to unsigned byte, for correct subtraction result
- pAlphaWriteAccess->SetPixel( y, x,
+ pAlphaWriteAccess->SetPixelOnData( pAScan, x,
BitmapColor(
static_cast<sal_uInt8>(255 -
static_cast<sal_uInt8>(data[ nCurrPos++ ])) ) );
@@ -387,11 +390,13 @@ namespace vclcanvas
default:
{
+ Scanline pScan = pWriteAccess->GetScanline( y );
+
for( long x=rect.X1;
x<aBmpSize.Width() && x<rect.X2;
++x )
{
- pWriteAccess->SetPixel( y, x, BitmapColor( data[ nCurrPos ],
+ pWriteAccess->SetPixelOnData( pScan, x, BitmapColor( data[ nCurrPos ],
data[ nCurrPos+1 ],
data[ nCurrPos+2 ] ) );
nCurrPos += 4; // skip three colors, _plus_ alpha
diff --git a/canvas/source/vcl/canvashelper.cxx b/canvas/source/vcl/canvashelper.cxx
index f75f6344c575..761a2fdc22b1 100644
--- a/canvas/source/vcl/canvashelper.cxx
+++ b/canvas/source/vcl/canvashelper.cxx
@@ -1094,9 +1094,11 @@ namespace vclcanvas
default:
{
+ Scanline pScan = pWriteAccess->GetScanline( y );
+
for( x=0; x<nWidth; ++x )
{
- pWriteAccess->SetPixel( y, x, BitmapColor( data[ nCurrPos ],
+ pWriteAccess->SetPixelOnData( pScan, x, BitmapColor( data[ nCurrPos ],
data[ nCurrPos+1 ],
data[ nCurrPos+2 ] ) );
nCurrPos += 4;
diff --git a/canvas/source/vcl/impltools.cxx b/canvas/source/vcl/impltools.cxx
index 3abc76f8f7c7..055eb061930e 100644
--- a/canvas/source/vcl/impltools.cxx
+++ b/canvas/source/vcl/impltools.cxx
@@ -322,6 +322,8 @@ namespace vclcanvas
// vs. multi-level transparency)
if( rBitmap.IsTransparent() )
{
+ Scanline pScan = pWriteAccess->GetScanline( y );
+ Scanline pScanAlpha = pAlphaWriteAccess->GetScanline( y );
// Handling alpha and mask just the same...
for( long x=0; x<aDestBmpSize.Width(); ++x )
{
@@ -333,18 +335,20 @@ namespace vclcanvas
if( nSrcX < 0 || nSrcX >= aBmpSize.Width() ||
nSrcY < 0 || nSrcY >= aBmpSize.Height() )
{
- pAlphaWriteAccess->SetPixelIndex( y, x, 255 );
+ pAlphaWriteAccess->SetPixelOnData( pScanAlpha, x, BitmapColor(255) );
}
else
{
const sal_uInt8 cAlphaIdx = pAlphaReadAccess->GetPixelIndex( nSrcY, nSrcX );
- pAlphaWriteAccess->SetPixelIndex( y, x, aAlphaMap[ cAlphaIdx ] );
- pWriteAccess->SetPixel( y, x, pReadAccess->GetPixel( nSrcY, nSrcX ) );
+ pAlphaWriteAccess->SetPixelOnData( pScanAlpha, x, BitmapColor(aAlphaMap[ cAlphaIdx ]) );
+ pWriteAccess->SetPixelOnData( pScan, x, pReadAccess->GetPixel( nSrcY, nSrcX ) );
}
}
}
else
{
+ Scanline pScan = pWriteAccess->GetScanline( y );
+ Scanline pScanAlpha = pAlphaWriteAccess->GetScanline( y );
for( long x=0; x<aDestBmpSize.Width(); ++x )
{
::basegfx::B2DPoint aPoint(x,y);
@@ -355,12 +359,12 @@ namespace vclcanvas
if( nSrcX < 0 || nSrcX >= aBmpSize.Width() ||
nSrcY < 0 || nSrcY >= aBmpSize.Height() )
{
- pAlphaWriteAccess->SetPixel( y, x, BitmapColor(255) );
+ pAlphaWriteAccess->SetPixelOnData( pScanAlpha, x, BitmapColor(255) );
}
else
{
- pAlphaWriteAccess->SetPixel( y, x, BitmapColor(0) );
- pWriteAccess->SetPixel( y, x, pReadAccess->GetPixel( nSrcY,
+ pAlphaWriteAccess->SetPixelOnData( pScanAlpha, x, BitmapColor(0) );
+ pWriteAccess->SetPixelOnData( pScan, x, pReadAccess->GetPixel( nSrcY,
nSrcX ) );
}
}