[Libreoffice-commits] core.git: filter/source vcl/source
Armin Le Grand
alg at apache.org
Wed Mar 19 13:27:40 PDT 2014
filter/source/graphicfilter/itiff/ccidecom.cxx | 8 +++++++-
filter/source/graphicfilter/itiff/ccidecom.hxx | 2 +-
filter/source/graphicfilter/itiff/itiff.cxx | 2 +-
vcl/source/gdi/print.cxx | 24 +++++++++++++++++++-----
4 files changed, 28 insertions(+), 8 deletions(-)
New commits:
commit 674a8a084bff6aa089d073b2710cd6a8b6662546
Author: Armin Le Grand <alg at apache.org>
Date: Wed Mar 19 12:34:44 2014 +0000
Resolves: #i122984# Avoid too many Print JobSetups...
be more tolerant with last line TIFF imports
(cherry picked from commit 0ab284f5064f66a11741fa4aa2e2774c1d7e5f14)
Change-Id: I75c86422bfbf2f83e1027bbc1bd83260de39b3ca
diff --git a/filter/source/graphicfilter/itiff/ccidecom.cxx b/filter/source/graphicfilter/itiff/ccidecom.cxx
index ce70811..1d105b2 100644
--- a/filter/source/graphicfilter/itiff/ccidecom.cxx
+++ b/filter/source/graphicfilter/itiff/ccidecom.cxx
@@ -621,7 +621,7 @@ void CCIDecompressor::StartDecompression( SvStream & rIStream )
}
-sal_Bool CCIDecompressor::DecompressScanline( sal_uInt8 * pTarget, sal_uLong nTargetBits )
+sal_Bool CCIDecompressor::DecompressScanline( sal_uInt8 * pTarget, sal_uLong nTargetBits, bool bLastLine )
{
sal_uInt16 i;
sal_uInt8 * pDst;
@@ -706,6 +706,12 @@ sal_Bool CCIDecompressor::DecompressScanline( sal_uInt8 * pTarget, sal_uLong nTa
for ( i = 0; i < nLastLineSize; i++ ) *(pDst++)=*(pSrc++);
}
+ // #i122984#
+ if( !bStatus && bLastLine )
+ {
+ bStatus = sal_True;
+ }
+
if ( pIStream->GetError() )
bStatus = sal_False;
diff --git a/filter/source/graphicfilter/itiff/ccidecom.hxx b/filter/source/graphicfilter/itiff/ccidecom.hxx
index db5295a..e018dcf 100644
--- a/filter/source/graphicfilter/itiff/ccidecom.hxx
+++ b/filter/source/graphicfilter/itiff/ccidecom.hxx
@@ -53,7 +53,7 @@ public:
void StartDecompression( SvStream & rIStream );
- sal_Bool DecompressScanline(sal_uInt8 * pTarget, sal_uLong nTargetBits );
+ sal_Bool DecompressScanline(sal_uInt8 * pTarget, sal_uLong nTargetBits, bool bLastLine );
private:
diff --git a/filter/source/graphicfilter/itiff/itiff.cxx b/filter/source/graphicfilter/itiff/itiff.cxx
index 4c2e1fb..dc27652 100644
--- a/filter/source/graphicfilter/itiff/itiff.cxx
+++ b/filter/source/graphicfilter/itiff/itiff.cxx
@@ -559,7 +559,7 @@ sal_Bool TIFFReader::ReadMap( sal_uLong nMinPercent, sal_uLong nMaxPercent )
pTIFF->Seek( pStripOffsets[ nStrip ] );
aCCIDecom.StartDecompression( *pTIFF );
}
- if ( aCCIDecom.DecompressScanline( pMap[ np ], nImageWidth * nBitsPerSample * nSamplesPerPixel / nPlanes ) == sal_False )
+ if ( aCCIDecom.DecompressScanline( pMap[ np ], nImageWidth * nBitsPerSample * nSamplesPerPixel / nPlanes, np + 1 == nPlanes ) == sal_False )
return sal_False;
if ( pTIFF->GetError() )
return sal_False;
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 8e97d4b..ba69c1c 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -1213,11 +1213,25 @@ bool Printer::SetPaperSizeUser( const Size& rSize, bool bMatchNearest )
if ( mbInPrintPage )
return false;
- Size aPixSize = LogicToPixel( rSize );
- Size aPageSize = PixelToLogic( aPixSize, MAP_100TH_MM );
- if ( (maJobSetup.ImplGetConstData()->mePaperFormat != PAPER_USER) ||
- (maJobSetup.ImplGetConstData()->mnPaperWidth != aPageSize.Width()) ||
- (maJobSetup.ImplGetConstData()->mnPaperHeight != aPageSize.Height()) )
+ const Size aPixSize = LogicToPixel( rSize );
+ const Size aPageSize = PixelToLogic( aPixSize, MAP_100TH_MM );
+ bool bNeedToChange(maJobSetup.ImplGetConstData()->mnPaperWidth != aPageSize.Width() ||
+ maJobSetup.ImplGetConstData()->mnPaperHeight != aPageSize.Height());
+
+ if(!bNeedToChange)
+ {
+ // #i122984# only need to change when Paper is different from PAPER_USER and
+ // the mapped Paper which will created below in the call to ImplFindPaperFormatForUserSize
+ // and will replace maJobSetup.ImplGetConstData()->mePaperFormat. This leads to
+ // unnecessary JobSetups, e.g. when printing a multi-page fax, but also with
+ // normal print
+ const Paper aPaper = ImplGetPaperFormat(aPageSize.Width(), aPageSize.Height());
+
+ bNeedToChange = maJobSetup.ImplGetConstData()->mePaperFormat != PAPER_USER &&
+ maJobSetup.ImplGetConstData()->mePaperFormat != aPaper;
+ }
+
+ if(bNeedToChange)
{
JobSetup aJobSetup = maJobSetup;
ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
More information about the Libreoffice-commits
mailing list