diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-02-20 21:18:04 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2018-02-21 15:06:17 +0100 |
commit | 7443c3c27bdc3b2eba1718351269e884f6c32ed7 (patch) | |
tree | dec93c505b7fb4087da15fe4fe79caa1ea3bf86a /vcl | |
parent | forcepoint #2 (diff) | |
download | core-7443c3c27bdc3b2eba1718351269e884f6c32ed7.tar.gz core-7443c3c27bdc3b2eba1718351269e884f6c32ed7.zip |
forcepoint #4
Thanks to Antti Levomäki and Christian Jalio from Forcepoint.
Change-Id: I569ca80267ad9b5a21da0029ba903d2a4c45a035
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/pdfwriter_impl2.cxx | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx index 1f40defbd425..c7fd2a4031df 100644 --- a/vcl/source/gdi/pdfwriter_impl2.cxx +++ b/vcl/source/gdi/pdfwriter_impl2.cxx @@ -1605,11 +1605,8 @@ inline bool isSet( const Scanline i_pLine, long i_nIndex ) return (i_pLine[ i_nIndex/8 ] & (0x80 >> (i_nIndex&7))) != 0; } -long findBitRun( const Scanline i_pLine, long i_nStartIndex, long i_nW, bool i_bSet ) +long findBitRunImpl( const Scanline i_pLine, long i_nStartIndex, long i_nW, bool i_bSet ) { - if( i_nStartIndex < 0 ) - return i_nW; - long nIndex = i_nStartIndex; if( nIndex < i_nW ) { @@ -1671,6 +1668,24 @@ long findBitRun( const Scanline i_pLine, long i_nStartIndex, long i_nW, bool i_b return nIndex < i_nW ? nIndex : i_nW; } +long findBitRun(const Scanline i_pLine, long i_nStartIndex, long i_nW, bool i_bSet) +{ + if (i_nStartIndex < 0) + return i_nW; + + return findBitRunImpl(i_pLine, i_nStartIndex, i_nW, i_bSet); +} + +long findBitRun(const Scanline i_pLine, long i_nStartIndex, long i_nW) +{ + if (i_nStartIndex < 0) + return i_nW; + + const bool bSet = i_nStartIndex < i_nW && isSet(i_pLine, i_nStartIndex); + + return findBitRunImpl(i_pLine, i_nStartIndex, i_nW, bSet); +} + struct BitStreamState { sal_uInt8 mnBuffer; @@ -1974,7 +1989,7 @@ void PDFWriterImpl::writeG4Stream( BitmapReadAccess* i_pBitmap ) long nRefIndex1 = bRefSet ? 0 : findBitRun( pRefLine, 0, nW, bRefSet ); for( ; nLineIndex < nW; ) { - long nRefIndex2 = findBitRun( pRefLine, nRefIndex1, nW, isSet( pRefLine, nRefIndex1 ) ); + long nRefIndex2 = findBitRun( pRefLine, nRefIndex1, nW ); if( nRefIndex2 >= nRunIndex1 ) { long nDiff = nRefIndex1 - nRunIndex1; @@ -2004,7 +2019,7 @@ void PDFWriterImpl::writeG4Stream( BitmapReadAccess* i_pBitmap ) { // difference too large, horizontal coding // emit horz code 001 putG4Bits( 3, 0x1, aBitState ); - long nRunIndex2 = findBitRun( pCurLine, nRunIndex1, nW, isSet( pCurLine, nRunIndex1 ) ); + long nRunIndex2 = findBitRun( pCurLine, nRunIndex1, nW ); bool bWhiteFirst = ( nLineIndex + nRunIndex1 == 0 || ! isSet( pCurLine, nLineIndex ) ); putG4Span( nRunIndex1 - nLineIndex, bWhiteFirst, aBitState ); putG4Span( nRunIndex2 - nRunIndex1, ! bWhiteFirst, aBitState ); |