diff options
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/gdi/jobset.cxx | 293 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 189 | ||||
-rw-r--r-- | vcl/source/gdi/print3.cxx | 4 | ||||
-rw-r--r-- | vcl/source/window/printdlg.cxx | 2 |
4 files changed, 251 insertions, 237 deletions
diff --git a/vcl/source/gdi/jobset.cxx b/vcl/source/gdi/jobset.cxx index 2b795e51aa99..11137c191b69 100644 --- a/vcl/source/gdi/jobset.cxx +++ b/vcl/source/gdi/jobset.cxx @@ -22,9 +22,9 @@ #include <tools/debug.hxx> #include <tools/stream.hxx> #include <vcl/jobset.hxx> - #include <jobset.h> #include <memory> +#include <rtl/instance.hxx> #define JOBSET_FILE364_SYSTEM ((sal_uInt16)0xFFFF) #define JOBSET_FILE605_SYSTEM ((sal_uInt16)0xFFFE) @@ -51,7 +51,6 @@ struct Impl364JobSetupData ImplJobSetup::ImplJobSetup() { - mnRefCount = 1; mnSystem = 0; meOrientation = ORIENTATION_PORTRAIT; meDuplexMode = DUPLEX_UNKNOWN; @@ -65,27 +64,26 @@ ImplJobSetup::ImplJobSetup() } ImplJobSetup::ImplJobSetup( const ImplJobSetup& rJobSetup ) : - maPrinterName( rJobSetup.maPrinterName ), - maDriver( rJobSetup.maDriver ) -{ - mnRefCount = 1; - mnSystem = rJobSetup.mnSystem; - meOrientation = rJobSetup.meOrientation; - meDuplexMode = rJobSetup.meDuplexMode; - mnPaperBin = rJobSetup.mnPaperBin; - mePaperFormat = rJobSetup.mePaperFormat; - mnPaperWidth = rJobSetup.mnPaperWidth; - mnPaperHeight = rJobSetup.mnPaperHeight; - mnDriverDataLen = rJobSetup.mnDriverDataLen; - if ( rJobSetup.mpDriverData ) + mnSystem( rJobSetup.GetSystem() ), + maPrinterName( rJobSetup.GetPrinterName() ), + maDriver( rJobSetup.GetDriver() ), + meOrientation( rJobSetup.GetOrientation() ), + meDuplexMode( rJobSetup.GetDuplexMode() ), + mnPaperBin( rJobSetup.GetPaperBin() ), + mePaperFormat( rJobSetup.GetPaperFormat() ), + mnPaperWidth( rJobSetup.GetPaperWidth() ), + mnPaperHeight( rJobSetup.GetPaperHeight() ), + mnDriverDataLen( rJobSetup.GetDriverDataLen() ), + mbPapersizeFromSetup( rJobSetup.GetPapersizeFromSetup() ), + maValueMap( rJobSetup.GetValueMap() ) + { + if ( rJobSetup.GetDriverData() ) { mpDriverData = static_cast<sal_uInt8*>(rtl_allocateMemory( mnDriverDataLen )); - memcpy( mpDriverData, rJobSetup.mpDriverData, mnDriverDataLen ); + memcpy( mpDriverData, rJobSetup.GetDriverData(), mnDriverDataLen ); } else mpDriverData = nullptr; - mbPapersizeFromSetup = rJobSetup.mbPapersizeFromSetup; - maValueMap = rJobSetup.maValueMap; } ImplJobSetup::~ImplJobSetup() @@ -93,131 +91,140 @@ ImplJobSetup::~ImplJobSetup() rtl_freeMemory( mpDriverData ); } -ImplJobSetup* JobSetup::ImplGetData() +void ImplJobSetup::SetSystem(sal_uInt16 nSystem) { - if ( !mpData ) - mpData = new ImplJobSetup; - else if ( mpData->mnRefCount != 1 ) - { - mpData->mnRefCount--; - mpData = new ImplJobSetup( *mpData ); - } + mnSystem = nSystem; +} - return mpData; +void ImplJobSetup::SetPrinterName(const OUString& rPrinterName) +{ + maPrinterName = rPrinterName; } -ImplJobSetup* JobSetup::ImplGetConstData() +void ImplJobSetup::SetDriver(const OUString& rDriver) { - if ( !mpData ) - mpData = new ImplJobSetup; - return mpData; + maDriver = rDriver; } -const ImplJobSetup* JobSetup::ImplGetConstData() const +void ImplJobSetup::SetOrientation(Orientation eOrientation) { - if ( !mpData ) - const_cast<JobSetup*>(this)->mpData = new ImplJobSetup; - return mpData; + meOrientation = eOrientation; } -JobSetup::JobSetup() +void ImplJobSetup::SetDuplexMode(DuplexMode eDuplexMode) { + meDuplexMode = eDuplexMode; +} - mpData = nullptr; +void ImplJobSetup::SetPaperBin(sal_uInt16 nPaperBin) +{ + mnPaperBin = nPaperBin; } -JobSetup::JobSetup( const JobSetup& rJobSetup ) +void ImplJobSetup::SetPaperFormat(Paper ePaperFormat) { - SAL_WARN_IF( rJobSetup.mpData && (rJobSetup.mpData->mnRefCount >= 0xFFFE), "vcl", "JobSetup: RefCount overflow" ); + mePaperFormat = ePaperFormat; +} - mpData = rJobSetup.mpData; - if ( mpData ) - mpData->mnRefCount++; +void ImplJobSetup::SetPaperWidth(long nPaperWidth) +{ + mnPaperWidth = nPaperWidth; } -JobSetup::~JobSetup() +void ImplJobSetup::SetPaperHeight(long nPaperHeight) { + mnPaperHeight = nPaperHeight; +} - if ( mpData ) - { - if ( mpData->mnRefCount == 1 ) - delete mpData; - else - mpData->mnRefCount--; - } +void ImplJobSetup::SetDriverDataLen(sal_uInt32 nDriverDataLen) +{ + mnDriverDataLen = nDriverDataLen; } -OUString JobSetup::GetPrinterName() const +void ImplJobSetup::SetDriverData(sal_uInt8* pDriverData) { - if ( mpData ) - return mpData->maPrinterName; - else - return OUString(); + mpDriverData = pDriverData; } -OUString JobSetup::GetDriverName() const +void ImplJobSetup::SetPapersizeFromSetup(bool bPapersizeFromSetup) { - if ( mpData ) - return mpData->maDriver; - else - return OUString(); + mbPapersizeFromSetup = bPapersizeFromSetup; +} + +void ImplJobSetup::SetValueMap( const OUString& rKey, const OUString& rValue ) +{ + maValueMap [ rKey ] = rValue; } JobSetup& JobSetup::operator=( const JobSetup& rJobSetup ) { - SAL_WARN_IF( rJobSetup.mpData && (rJobSetup.mpData->mnRefCount) >= 0xFFFE, "vcl", "JobSetup: RefCount overflow" ); + mpData = rJobSetup.mpData; + return *this; +} - // Increment refcount first, so that we can assign to ourselves - if ( rJobSetup.mpData ) - rJobSetup.mpData->mnRefCount++; +bool ImplJobSetup::operator==( const ImplJobSetup& rImplJobSetup ) const +{ + if ( mnSystem == rImplJobSetup.mnSystem && + maPrinterName == rImplJobSetup.maPrinterName && + maDriver == rImplJobSetup.maDriver && + meOrientation == rImplJobSetup.meOrientation && + meDuplexMode == rImplJobSetup.meDuplexMode && + mnPaperBin == rImplJobSetup.mnPaperBin && + mePaperFormat == rImplJobSetup.mePaperFormat && + mnPaperWidth == rImplJobSetup.mnPaperWidth && + mnPaperHeight == rImplJobSetup.mnPaperHeight && + mnDriverDataLen == rImplJobSetup.mnDriverDataLen && + maValueMap == rImplJobSetup.maValueMap && + memcmp( mpDriverData, rImplJobSetup.mpDriverData, mnDriverDataLen ) == 0) + return true; + return false; +} - // If it's not static ImpData and the last reference, delete it, else - // decrement refcount - if ( mpData ) - { - if ( mpData->mnRefCount == 1 ) - delete mpData; - else - mpData->mnRefCount--; - } +namespace +{ + struct theGlobalDefault : + public rtl::Static< JobSetup::ImplType, theGlobalDefault > {}; +} - mpData = rJobSetup.mpData; +JobSetup::JobSetup() : mpData(theGlobalDefault::get()) +{ +} - return *this; +JobSetup::JobSetup( const JobSetup& rJobSetup ) : mpData(rJobSetup.mpData) +{ +} + +JobSetup::~JobSetup() +{ } bool JobSetup::operator==( const JobSetup& rJobSetup ) const { + return mpData == rJobSetup.mpData; +} - if ( mpData == rJobSetup.mpData ) - return true; +const ImplJobSetup& JobSetup::ImplGetConstData() const +{ + return *mpData; +} - if ( !mpData || !rJobSetup.mpData ) - return false; - - ImplJobSetup* pData1 = mpData; - ImplJobSetup* pData2 = rJobSetup.mpData; - if ( (pData1->mnSystem == pData2->mnSystem) && - (pData1->maPrinterName == pData2->maPrinterName) && - (pData1->maDriver == pData2->maDriver) && - (pData1->meOrientation == pData2->meOrientation) && - (pData1->meDuplexMode == pData2->meDuplexMode) && - (pData1->mnPaperBin == pData2->mnPaperBin) && - (pData1->mePaperFormat == pData2->mePaperFormat) && - (pData1->mnPaperWidth == pData2->mnPaperWidth) && - (pData1->mnPaperHeight == pData2->mnPaperHeight) && - (pData1->mnDriverDataLen == pData2->mnDriverDataLen) && - (memcmp( pData1->mpDriverData, pData2->mpDriverData, pData1->mnDriverDataLen ) == 0) && - (pData1->maValueMap == pData2->maValueMap) - ) - return true; +ImplJobSetup& JobSetup::ImplGetData() +{ + return *mpData; +} - return false; +OUString JobSetup::GetPrinterName() const +{ + return mpData->GetPrinterName(); } -SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) +bool JobSetup::IsDefault() const { + return mpData.same_object(theGlobalDefault::get()); +} +SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) +{ { sal_uInt16 nLen = 0; rIStream.ReadUInt16( nLen ); @@ -239,22 +246,15 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) if (nRead >= sizeof(ImplOldJobSetupData)) { ImplOldJobSetupData* pData = reinterpret_cast<ImplOldJobSetupData*>(pTempBuf.get()); - if ( rJobSetup.mpData ) - { - if ( rJobSetup.mpData->mnRefCount == 1 ) - delete rJobSetup.mpData; - else - rJobSetup.mpData->mnRefCount--; - } rtl_TextEncoding aStreamEncoding = RTL_TEXTENCODING_UTF8; if( nSystem == JOBSET_FILE364_SYSTEM ) aStreamEncoding = rIStream.GetStreamCharSet(); - rJobSetup.mpData = new ImplJobSetup; - ImplJobSetup* pJobData = rJobSetup.mpData; - pJobData->maPrinterName = OStringToOUString(pData->cPrinterName, aStreamEncoding); - pJobData->maDriver = OStringToOUString(pData->cDriverName, aStreamEncoding); + ImplJobSetup& rJobData = rJobSetup.ImplGetData(); + + rJobData.SetPrinterName( OStringToOUString(pData->cPrinterName, aStreamEncoding) ); + rJobData.SetDriver( OStringToOUString(pData->cDriverName, aStreamEncoding) ); // Are these our new JobSetup files? if ( nSystem == JOBSET_FILE364_SYSTEM || @@ -262,23 +262,26 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) { Impl364JobSetupData* pOldJobData = reinterpret_cast<Impl364JobSetupData*>(pTempBuf.get() + sizeof( ImplOldJobSetupData )); sal_uInt16 nOldJobDataSize = SVBT16ToShort( pOldJobData->nSize ); - pJobData->mnSystem = SVBT16ToShort( pOldJobData->nSystem ); - pJobData->mnDriverDataLen = SVBT32ToUInt32( pOldJobData->nDriverDataLen ); - pJobData->meOrientation = (Orientation)SVBT16ToShort( pOldJobData->nOrientation ); - pJobData->meDuplexMode = DUPLEX_UNKNOWN; - pJobData->mnPaperBin = SVBT16ToShort( pOldJobData->nPaperBin ); - pJobData->mePaperFormat = (Paper)SVBT16ToShort( pOldJobData->nPaperFormat ); - pJobData->mnPaperWidth = (long)SVBT32ToUInt32( pOldJobData->nPaperWidth ); - pJobData->mnPaperHeight = (long)SVBT32ToUInt32( pOldJobData->nPaperHeight ); - if ( pJobData->mnDriverDataLen ) + rJobData.SetSystem( SVBT16ToShort( pOldJobData->nSystem ) ); + rJobData.SetDriverDataLen( SVBT32ToUInt32( pOldJobData->nDriverDataLen ) ); + rJobData.SetOrientation( (Orientation)SVBT16ToShort( pOldJobData->nOrientation ) ); + rJobData.SetDuplexMode( DUPLEX_UNKNOWN ); + rJobData.SetPaperBin( SVBT16ToShort( pOldJobData->nPaperBin ) ); + rJobData.SetPaperFormat( (Paper)SVBT16ToShort( pOldJobData->nPaperFormat ) ); + rJobData.SetPaperWidth( (long)SVBT32ToUInt32( pOldJobData->nPaperWidth ) ); + rJobData.SetPaperHeight( (long)SVBT32ToUInt32( pOldJobData->nPaperHeight ) ); + if ( rJobData.GetDriverDataLen() ) { - sal_uInt8* pDriverData = reinterpret_cast<sal_uInt8*>(pOldJobData) + nOldJobDataSize; - pJobData->mpDriverData = static_cast<sal_uInt8*>(rtl_allocateMemory( pJobData->mnDriverDataLen )); - memcpy( pJobData->mpDriverData, pDriverData, pJobData->mnDriverDataLen ); + const sal_uInt8* pDriverData = reinterpret_cast<sal_uInt8*>(pOldJobData) + nOldJobDataSize; + sal_uInt8* pNewDriverData = static_cast<sal_uInt8*>( + rtl_allocateMemory( rJobData.GetDriverDataLen() )); + memcpy( pNewDriverData, pDriverData, rJobData.GetDriverDataLen() ); + rJobData.SetDriverData( pNewDriverData ); } if( nSystem == JOBSET_FILE605_SYSTEM ) { - rIStream.Seek( nFirstPos + sizeof( ImplOldJobSetupData ) + sizeof( Impl364JobSetupData ) + pJobData->mnDriverDataLen ); + rIStream.Seek( nFirstPos + sizeof( ImplOldJobSetupData ) + + sizeof( Impl364JobSetupData ) + rJobData.GetDriverDataLen() ); while( rIStream.Tell() < nFirstPos + nRead ) { OUString aKey = read_uInt16_lenPrefixed_uInt8s_ToOUString(rIStream, RTL_TEXTENCODING_UTF8); @@ -286,16 +289,16 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) if( aKey == "COMPAT_DUPLEX_MODE" ) { if( aValue == "DUPLEX_UNKNOWN" ) - pJobData->meDuplexMode = DUPLEX_UNKNOWN; + rJobData.SetDuplexMode( DUPLEX_UNKNOWN ); else if( aValue == "DUPLEX_OFF" ) - pJobData->meDuplexMode = DUPLEX_OFF; + rJobData.SetDuplexMode( DUPLEX_OFF ); else if( aValue == "DUPLEX_SHORTEDGE" ) - pJobData->meDuplexMode = DUPLEX_SHORTEDGE; + rJobData.SetDuplexMode( DUPLEX_SHORTEDGE ); else if( aValue == "DUPLEX_LONGEDGE" ) - pJobData->meDuplexMode = DUPLEX_LONGEDGE; + rJobData.SetDuplexMode( DUPLEX_LONGEDGE ); } else - pJobData->maValueMap[ aKey ] = aValue; + rJobData.SetValueMap(aKey, aValue); } SAL_WARN_IF( rIStream.Tell() != nFirstPos+nRead, "vcl", "corrupted job setup" ); // ensure correct stream position @@ -310,48 +313,50 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup ) SvStream& WriteJobSetup( SvStream& rOStream, const JobSetup& rJobSetup ) { - { sal_uInt16 nLen = 0; - if ( !rJobSetup.mpData ) + if ( rJobSetup.IsDefault() ) rOStream.WriteUInt16( nLen ); else { sal_uInt16 nSystem = JOBSET_FILE605_SYSTEM; - const ImplJobSetup* pJobData = rJobSetup.ImplGetConstData(); + const ImplJobSetup& rJobData = rJobSetup.ImplGetConstData(); Impl364JobSetupData aOldJobData; sal_uInt16 nOldJobDataSize = sizeof( aOldJobData ); ShortToSVBT16( nOldJobDataSize, aOldJobData.nSize ); - ShortToSVBT16( pJobData->mnSystem, aOldJobData.nSystem ); - UInt32ToSVBT32( pJobData->mnDriverDataLen, aOldJobData.nDriverDataLen ); - ShortToSVBT16( (sal_uInt16)(pJobData->meOrientation), aOldJobData.nOrientation ); - ShortToSVBT16( pJobData->mnPaperBin, aOldJobData.nPaperBin ); - ShortToSVBT16( (sal_uInt16)(pJobData->mePaperFormat), aOldJobData.nPaperFormat ); - UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperWidth), aOldJobData.nPaperWidth ); - UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperHeight), aOldJobData.nPaperHeight ); + ShortToSVBT16( rJobData.GetSystem(), aOldJobData.nSystem ); + UInt32ToSVBT32( rJobData.GetDriverDataLen(), aOldJobData.nDriverDataLen ); + ShortToSVBT16( (sal_uInt16)(rJobData.GetOrientation()), aOldJobData.nOrientation ); + ShortToSVBT16( rJobData.GetPaperBin(), aOldJobData.nPaperBin ); + ShortToSVBT16( (sal_uInt16)(rJobData.GetPaperFormat()), aOldJobData.nPaperFormat ); + UInt32ToSVBT32( (sal_uLong)(rJobData.GetPaperWidth()), aOldJobData.nPaperWidth ); + UInt32ToSVBT32( (sal_uLong)(rJobData.GetPaperHeight()), aOldJobData.nPaperHeight ); ImplOldJobSetupData aOldData; memset( &aOldData, 0, sizeof( aOldData ) ); - OString aPrnByteName(OUStringToOString(rJobSetup.GetPrinterName(), RTL_TEXTENCODING_UTF8)); + OString aPrnByteName(OUStringToOString(rJobData.GetPrinterName(), RTL_TEXTENCODING_UTF8)); strncpy( aOldData.cPrinterName, aPrnByteName.getStr(), 63 ); - OString aDriverByteName(OUStringToOString(rJobSetup.GetDriverName(), RTL_TEXTENCODING_UTF8)); + OString aDriverByteName(OUStringToOString(rJobData.GetDriver(), RTL_TEXTENCODING_UTF8)); strncpy( aOldData.cDriverName, aDriverByteName.getStr(), 31 ); -// nLen = sizeof( aOldData ) + 4 + nOldJobDataSize + pJobData->mnDriverDataLen; int nPos = rOStream.Tell(); - rOStream.WriteUInt16( nLen ); + rOStream.WriteUInt16( 0 ); rOStream.WriteUInt16( nSystem ); rOStream.WriteBytes( &aOldData, sizeof( aOldData ) ); rOStream.WriteBytes( &aOldJobData, nOldJobDataSize ); - rOStream.WriteBytes( pJobData->mpDriverData, pJobData->mnDriverDataLen ); + rOStream.WriteBytes( rJobData.GetDriverData(), rJobData.GetDriverDataLen() ); + std::unordered_map< OUString, OUString, OUStringHash >::const_iterator it; - for( it = pJobData->maValueMap.begin(); it != pJobData->maValueMap.end(); ++it ) + const std::unordered_map< OUString, OUString, OUStringHash >& rValueMap( + rJobData.GetValueMap()); + + for( it = rValueMap.begin(); it != rValueMap.end(); ++it ) { write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStream, it->first, RTL_TEXTENCODING_UTF8); write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStream, it->second, RTL_TEXTENCODING_UTF8); } write_uInt16_lenPrefixed_uInt8s_FromOString(rOStream, "COMPAT_DUPLEX_MODE"); - switch( pJobData->meDuplexMode ) + switch( rJobData.GetDuplexMode() ) { case DUPLEX_UNKNOWN: write_uInt16_lenPrefixed_uInt8s_FromOString(rOStream, "DUPLEX_UNKNOWN"); diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index 23c93681df66..43bc44b3e244 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -65,23 +65,24 @@ namespace void ImplUpdateJobSetupPaper( JobSetup& rJobSetup ) { - const ImplJobSetup* pConstData = rJobSetup.ImplGetConstData(); + const ImplJobSetup& rConstData = rJobSetup.ImplGetConstData(); - if ( !pConstData->mnPaperWidth || !pConstData->mnPaperHeight ) + if ( !rConstData.GetPaperWidth() || !rConstData.GetPaperHeight() ) { - if ( pConstData->mePaperFormat != PAPER_USER ) + if ( rConstData.GetPaperFormat() != PAPER_USER ) { - ImplJobSetup* pData = rJobSetup.ImplGetData(); - PaperInfo aInfo(pConstData->mePaperFormat); - pData->mnPaperWidth = aInfo.getWidth(); - pData->mnPaperHeight = aInfo.getHeight(); + PaperInfo aInfo(rConstData.GetPaperFormat()); + + ImplJobSetup& rData = rJobSetup.ImplGetData(); + rData.SetPaperWidth( aInfo.getWidth() ); + rData.SetPaperHeight( aInfo.getHeight() ); } } - else if ( pConstData->mePaperFormat == PAPER_USER ) + else if ( rConstData.GetPaperFormat() == PAPER_USER ) { - Paper ePaper = ImplGetPaperFormat( pConstData->mnPaperWidth, pConstData->mnPaperHeight ); + Paper ePaper = ImplGetPaperFormat( rConstData.GetPaperWidth(), rConstData.GetPaperHeight() ); if ( ePaper != PAPER_USER ) - rJobSetup.ImplGetData()->mePaperFormat = ePaper; + rJobSetup.ImplGetData().SetPaperFormat(ePaper); } } @@ -683,16 +684,15 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo ) pSVData->mpDefInst->GetPrinterQueueState( pInfo ); // Test whether the driver actually matches the JobSetup - ImplJobSetup* pJobSetup = maJobSetup.ImplGetData(); - - if ( pJobSetup->mpDriverData ) + ImplJobSetup& rData = maJobSetup.ImplGetData(); + if ( rData.GetDriverData() ) { - if ( (pJobSetup->maPrinterName != pInfo->maPrinterName) || - (pJobSetup->maDriver != pInfo->maDriver) ) + if ( rData.GetPrinterName() != pInfo->maPrinterName || + rData.GetDriver() != pInfo->maDriver ) { - rtl_freeMemory( pJobSetup->mpDriverData ); - pJobSetup->mpDriverData = nullptr; - pJobSetup->mnDriverDataLen = 0; + rtl_freeMemory( const_cast<sal_uInt8*>(rData.GetDriverData()) ); + rData.SetDriverData(nullptr); + rData.SetDriverDataLen(0); } } @@ -701,10 +701,10 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo ) maDriver = pInfo->maDriver; // Add printer name to JobSetup - pJobSetup->maPrinterName = maPrinterName; - pJobSetup->maDriver = maDriver; + rData.SetPrinterName( maPrinterName ); + rData.SetDriver( maDriver ); - mpInfoPrinter = pSVData->mpDefInst->CreateInfoPrinter( pInfo, pJobSetup ); + mpInfoPrinter = pSVData->mpDefInst->CreateInfoPrinter( pInfo, &rData ); mpPrinter = nullptr; mpJobGraphics = nullptr; ImplUpdateJobSetupPaper( maJobSetup ); @@ -884,7 +884,7 @@ void Printer::ImplUpdatePageData() return; mpGraphics->GetResolution( mnDPIX, mnDPIY ); - mpInfoPrinter->GetPageInfo( maJobSetup.ImplGetConstData(), + mpInfoPrinter->GetPageInfo( &maJobSetup.ImplGetConstData(), mnOutWidth, mnOutHeight, maPageOffset.X(), maPageOffset.Y(), maPaperSize.Width(), maPaperSize.Height() ); @@ -921,8 +921,10 @@ Printer::Printer( const JobSetup& rJobSetup ) : maJobSetup( rJobSetup ) { ImplInitData(); - SalPrinterQueueInfo* pInfo = ImplGetQueueInfo( rJobSetup.mpData->maPrinterName, - &rJobSetup.mpData->maDriver ); + const ImplJobSetup& rConstData = rJobSetup.ImplGetConstData(); + OUString aDriver = rConstData.GetDriver(); + SalPrinterQueueInfo* pInfo = ImplGetQueueInfo( rConstData.GetPrinterName(), + &aDriver ); if ( pInfo ) { ImplInit( pInfo ); @@ -1021,7 +1023,7 @@ sal_uInt32 Printer::GetCapabilities( PrinterCapType nType ) const return 0; if( mpInfoPrinter ) - return mpInfoPrinter->GetCapabilities( maJobSetup.ImplGetConstData(), nType ); + return mpInfoPrinter->GetCapabilities( &maJobSetup.ImplGetConstData(), nType ); else return 0; } @@ -1061,7 +1063,7 @@ bool Printer::SetJobSetup( const JobSetup& rSetup ) JobSetup aJobSetup = rSetup; ReleaseGraphics(); - if ( mpInfoPrinter->SetPrinterData( aJobSetup.ImplGetData() ) ) + if ( mpInfoPrinter->SetPrinterData( &aJobSetup.ImplGetData() ) ) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1083,8 +1085,8 @@ bool Printer::Setup( vcl::Window* pWindow, bool bPapersizeFromSetup ) return false; JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pData = aJobSetup.ImplGetData(); - pData->mbPapersizeFromSetup = bPapersizeFromSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + rData.SetPapersizeFromSetup( bPapersizeFromSetup ); SalFrame* pFrame; if ( !pWindow ) pWindow = ImplGetDefaultWindow(); @@ -1096,7 +1098,7 @@ bool Printer::Setup( vcl::Window* pWindow, bool bPapersizeFromSetup ) ImplSVData* pSVData = ImplGetSVData(); pSVData->maAppData.mnModalMode++; nImplSysDialog++; - bool bSetup = mpInfoPrinter->Setup( pFrame, pData ); + bool bSetup = mpInfoPrinter->Setup( pFrame, &rData ); pSVData->maAppData.mnModalMode--; nImplSysDialog--; if ( bSetup ) @@ -1222,11 +1224,12 @@ bool Printer::SetOrientation( Orientation eOrientation ) if ( mbInPrintPage ) return false; - if ( maJobSetup.ImplGetConstData()->meOrientation != eOrientation ) + if ( maJobSetup.ImplGetConstData().GetOrientation() != eOrientation ) { - JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); - pSetupData->meOrientation = eOrientation; + JobSetup aJobSetup = maJobSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + + rData.SetOrientation(eOrientation); if ( IsDisplayPrinter() ) { @@ -1236,7 +1239,7 @@ bool Printer::SetOrientation( Orientation eOrientation ) } ReleaseGraphics(); - if ( mpInfoPrinter->SetData( JobSetFlags::ORIENTATION, pSetupData ) ) + if ( mpInfoPrinter->SetData( JobSetFlags::ORIENTATION, &rData ) ) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1254,7 +1257,7 @@ bool Printer::SetOrientation( Orientation eOrientation ) Orientation Printer::GetOrientation() const { - return maJobSetup.ImplGetConstData()->meOrientation; + return maJobSetup.ImplGetConstData().GetOrientation(); } bool Printer::SetPaperBin( sal_uInt16 nPaperBin ) @@ -1262,12 +1265,12 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin ) if ( mbInPrintPage ) return false; - if ( (maJobSetup.ImplGetConstData()->mnPaperBin != nPaperBin) && - (nPaperBin < GetPaperBinCount()) ) + if ( maJobSetup.ImplGetConstData().GetPaperBin() != nPaperBin && + nPaperBin < GetPaperBinCount() ) { - JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); - pSetupData->mnPaperBin = nPaperBin; + JobSetup aJobSetup = maJobSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + rData.SetPaperBin(nPaperBin); if ( IsDisplayPrinter() ) { @@ -1277,7 +1280,7 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin ) } ReleaseGraphics(); - if ( mpInfoPrinter->SetData( JobSetFlags::PAPERBIN, pSetupData ) ) + if ( mpInfoPrinter->SetData( JobSetFlags::PAPERBIN, &rData ) ) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1295,19 +1298,19 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin ) sal_uInt16 Printer::GetPaperBin() const { - return maJobSetup.ImplGetConstData()->mnPaperBin; + return maJobSetup.ImplGetConstData().GetPaperBin(); } // Map user paper format to a available printer paper formats void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNearest ) { - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); + ImplJobSetup& rData = aJobSetup.ImplGetData(); int nLandscapeAngle = GetLandscapeAngle(); int nPaperCount = GetPaperInfoCount(); bool bFound = false; - PaperInfo aInfo(pSetupData->mnPaperWidth, pSetupData->mnPaperHeight); + PaperInfo aInfo(rData.GetPaperWidth(), rData.GetPaperHeight()); // Compare all paper formats and get the appropriate one for ( int i = 0; i < nPaperCount; i++ ) @@ -1316,9 +1319,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe if ( aInfo.sloppyEqual(rPaperInfo) ) { - pSetupData->mePaperFormat = ImplGetPaperFormat( rPaperInfo.getWidth(), - rPaperInfo.getHeight() ); - pSetupData->meOrientation = ORIENTATION_PORTRAIT; + rData.SetPaperFormat( + ImplGetPaperFormat( rPaperInfo.getWidth(), + rPaperInfo.getHeight() )); + rData.SetOrientation( ORIENTATION_PORTRAIT ); bFound = true; break; } @@ -1327,12 +1331,12 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe // If the printer supports landscape orientation, check paper sizes again // with landscape orientation. This is necessary as a printer driver provides // all paper sizes with portrait orientation only!! - if ( pSetupData->mePaperFormat == PAPER_USER && + if ( rData.GetPaperFormat() == PAPER_USER && nLandscapeAngle != 0 && HasSupport( PrinterSupport::SetOrientation )) { - const long nRotatedWidth = pSetupData->mnPaperHeight; - const long nRotatedHeight = pSetupData->mnPaperWidth; + const long nRotatedWidth = rData.GetPaperHeight(); + const long nRotatedHeight = rData.GetPaperWidth(); PaperInfo aRotatedInfo(nRotatedWidth, nRotatedHeight); for ( int i = 0; i < nPaperCount; i++ ) @@ -1341,9 +1345,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe if ( aRotatedInfo.sloppyEqual( rPaperInfo ) ) { - pSetupData->mePaperFormat = ImplGetPaperFormat( rPaperInfo.getWidth(), - rPaperInfo.getHeight() ); - pSetupData->meOrientation = ORIENTATION_LANDSCAPE; + rData.SetPaperFormat( + ImplGetPaperFormat( rPaperInfo.getWidth(), + rPaperInfo.getHeight() )); + rData.SetOrientation( ORIENTATION_LANDSCAPE ); bFound = true; break; } @@ -1360,8 +1365,8 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe const PaperInfo& rPaperInfo = GetPaperInfo( i ); // check portrait match - sal_Int64 nDX = pSetupData->mnPaperWidth - rPaperInfo.getWidth(); - sal_Int64 nDY = pSetupData->mnPaperHeight - rPaperInfo.getHeight(); + sal_Int64 nDX = rData.GetPaperWidth() - rPaperInfo.getWidth(); + sal_Int64 nDY = rData.GetPaperHeight() - rPaperInfo.getHeight(); sal_Int64 nMatch = nDX*nDX + nDY*nDY; if( nMatch < nBestMatch ) { @@ -1371,8 +1376,8 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe } // check landscape match - nDX = pSetupData->mnPaperWidth - rPaperInfo.getHeight(); - nDY = pSetupData->mnPaperHeight - rPaperInfo.getWidth(); + nDX = rData.GetPaperWidth() - rPaperInfo.getHeight(); + nDY = rData.GetPaperHeight() - rPaperInfo.getWidth(); nMatch = nDX*nDX + nDY*nDY; if( nMatch < nBestMatch ) { @@ -1382,9 +1387,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe } } const PaperInfo& rBestInfo = GetPaperInfo( nBestIndex ); - pSetupData->mePaperFormat = ImplGetPaperFormat( rBestInfo.getWidth(), - rBestInfo.getHeight() ); - pSetupData->meOrientation = eBestOrientation; + rData.SetPaperFormat( + ImplGetPaperFormat( rBestInfo.getWidth(), + rBestInfo.getHeight() )); + rData.SetOrientation(eBestOrientation); } } @@ -1393,16 +1399,17 @@ bool Printer::SetPaper( Paper ePaper ) if ( mbInPrintPage ) return false; - if ( maJobSetup.ImplGetConstData()->mePaperFormat != ePaper ) + if ( maJobSetup.ImplGetConstData().GetPaperFormat() != ePaper ) { - JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); - pSetupData->mePaperFormat = ePaper; + JobSetup aJobSetup = maJobSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + + rData.SetPaperFormat( ePaper ); if ( ePaper != PAPER_USER ) { PaperInfo aInfo(ePaper); - pSetupData->mnPaperWidth = aInfo.getWidth(); - pSetupData->mnPaperHeight = aInfo.getHeight(); + rData.SetPaperWidth( aInfo.getWidth() ); + rData.SetPaperHeight( aInfo.getHeight() ); } if ( IsDisplayPrinter() ) @@ -1415,7 +1422,7 @@ bool Printer::SetPaper( Paper ePaper ) ReleaseGraphics(); if ( ePaper == PAPER_USER ) ImplFindPaperFormatForUserSize( aJobSetup, false ); - if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, pSetupData ) ) + if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, &rData )) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1443,29 +1450,29 @@ bool Printer::SetPaperSizeUser( const Size& rSize, bool bMatchNearest ) 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()); + bool bNeedToChange(maJobSetup.ImplGetConstData().GetPaperWidth() != aPageSize.Width() || + maJobSetup.ImplGetConstData().GetPaperHeight() != 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 + // and will replace maJobSetup.ImplGetConstData()->GetPaperFormat(). 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; + bNeedToChange = maJobSetup.ImplGetConstData().GetPaperFormat() != PAPER_USER && + maJobSetup.ImplGetConstData().GetPaperFormat() != aPaper; } if(bNeedToChange) { - JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); - pSetupData->mePaperFormat = PAPER_USER; - pSetupData->mnPaperWidth = aPageSize.Width(); - pSetupData->mnPaperHeight = aPageSize.Height(); + JobSetup aJobSetup = maJobSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + rData.SetPaperFormat( PAPER_USER ); + rData.SetPaperWidth( aPageSize.Width() ); + rData.SetPaperHeight( aPageSize.Height() ); if ( IsDisplayPrinter() ) { @@ -1478,7 +1485,7 @@ bool Printer::SetPaperSizeUser( const Size& rSize, bool bMatchNearest ) ImplFindPaperFormatForUserSize( aJobSetup, bMatchNearest ); // Changing the paper size can also change the orientation! - if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, pSetupData ) ) + if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, &rData )) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1499,7 +1506,7 @@ int Printer::GetPaperInfoCount() const if( ! mpInfoPrinter ) return 0; if( ! mpInfoPrinter->m_bPapersInit ) - mpInfoPrinter->InitPaperFormats( maJobSetup.ImplGetConstData() ); + mpInfoPrinter->InitPaperFormats( &maJobSetup.ImplGetConstData() ); return mpInfoPrinter->m_aPaperFormats.size(); } @@ -1547,7 +1554,7 @@ const PaperInfo& Printer::GetPaperInfo( int nPaper ) const if( ! mpInfoPrinter ) return ImplGetEmptyPaper(); if( ! mpInfoPrinter->m_bPapersInit ) - mpInfoPrinter->InitPaperFormats( maJobSetup.ImplGetConstData() ); + mpInfoPrinter->InitPaperFormats( &maJobSetup.ImplGetConstData() ); if( mpInfoPrinter->m_aPaperFormats.empty() || nPaper < 0 || nPaper >= int(mpInfoPrinter->m_aPaperFormats.size()) ) return ImplGetEmptyPaper(); return mpInfoPrinter->m_aPaperFormats[nPaper]; @@ -1558,11 +1565,12 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex ) if ( mbInPrintPage ) return false; - if ( maJobSetup.ImplGetConstData()->meDuplexMode != eDuplex ) + if ( maJobSetup.ImplGetConstData().GetDuplexMode() != eDuplex ) { - JobSetup aJobSetup = maJobSetup; - ImplJobSetup* pSetupData = aJobSetup.ImplGetData(); - pSetupData->meDuplexMode = eDuplex; + JobSetup aJobSetup = maJobSetup; + ImplJobSetup& rData = aJobSetup.ImplGetData(); + + rData.SetDuplexMode( eDuplex ); if ( IsDisplayPrinter() ) { @@ -1572,7 +1580,7 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex ) } ReleaseGraphics(); - if ( mpInfoPrinter->SetData( JobSetFlags::DUPLEXMODE, pSetupData ) ) + if ( mpInfoPrinter->SetData( JobSetFlags::DUPLEXMODE, &rData ) ) { ImplUpdateJobSetupPaper( aJobSetup ); mbNewJobSetup = true; @@ -1590,12 +1598,12 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex ) int Printer::GetLandscapeAngle() const { - return mpInfoPrinter ? mpInfoPrinter->GetLandscapeAngle( maJobSetup.ImplGetConstData() ) : 900; + return mpInfoPrinter ? mpInfoPrinter->GetLandscapeAngle( &maJobSetup.ImplGetConstData() ) : 900; } Paper Printer::GetPaper() const { - return maJobSetup.ImplGetConstData()->mePaperFormat; + return maJobSetup.ImplGetConstData().GetPaperFormat(); } sal_uInt16 Printer::GetPaperBinCount() const @@ -1603,7 +1611,7 @@ sal_uInt16 Printer::GetPaperBinCount() const if ( IsDisplayPrinter() ) return 0; - return (sal_uInt16)mpInfoPrinter->GetPaperBinCount( maJobSetup.ImplGetConstData() ); + return (sal_uInt16)mpInfoPrinter->GetPaperBinCount( &maJobSetup.ImplGetConstData() ); } OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin ) const @@ -1612,7 +1620,7 @@ OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin ) const return OUString(); if ( nPaperBin < GetPaperBinCount() ) - return mpInfoPrinter->GetPaperBinName( maJobSetup.ImplGetConstData(), nPaperBin ); + return mpInfoPrinter->GetPaperBinName( &maJobSetup.ImplGetConstData(), nPaperBin ); else return OUString(); } @@ -1682,7 +1690,8 @@ void Printer::ImplStartPage() if ( mpPrinter ) { - SalGraphics* pGraphics = mpPrinter->StartPage( maJobSetup.ImplGetConstData(), mbNewJobSetup ); + SalGraphics* pGraphics = mpPrinter->StartPage( &maJobSetup.ImplGetData(), + mbNewJobSetup ); if ( pGraphics ) { ReleaseGraphics(); diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx index 3bc2fccad964..f1f24aca4eaa 100644 --- a/vcl/source/gdi/print3.cxx +++ b/vcl/source/gdi/print3.cxx @@ -603,7 +603,7 @@ bool Printer::StartJob( const OUString& i_rJobName, std::shared_ptr<vcl::Printer if( mpPrinter->StartJob( pPrintFile, i_rJobName, Application::GetDisplayName(), - maJobSetup.ImplGetConstData(), + &maJobSetup.ImplGetData(), *i_xController) ) { EndJob(); @@ -660,7 +660,7 @@ bool Printer::StartJob( const OUString& i_rJobName, std::shared_ptr<vcl::Printer nCopies, bCollateCopy, i_xController->isDirectPrint(), - maJobSetup.ImplGetConstData() ) ) + &maJobSetup.ImplGetData() ) ) { bool bAborted = false; mbJobActive = true; diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx index 9699a1705734..e61d164a5e43 100644 --- a/vcl/source/window/printdlg.cxx +++ b/vcl/source/window/printdlg.cxx @@ -20,7 +20,6 @@ #include "printdlg.hxx" #include "svdata.hxx" #include "svids.hrc" -#include "jobset.h" #include <vcl/print.hxx> #include <vcl/dialog.hxx> @@ -35,6 +34,7 @@ #include <vcl/unohelp.hxx> #include <vcl/settings.hxx> #include <vcl/builderfactory.hxx> +#include "jobset.h" #include "unotools/localedatawrapper.hxx" |