diff options
29 files changed, 98 insertions, 150 deletions
diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx index 0453a6ed48d3..57f245fe8db4 100644 --- a/chart2/source/controller/main/ChartWindow.cxx +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -90,8 +90,7 @@ void ChartWindow::PrePaint(vcl::RenderContext& ) void ChartWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) { - if (comphelper::LibreOfficeKit::isActive() - && rRenderContext.GetOutDevType() != OutDevType::OUTDEV_VIRDEV) + if (comphelper::LibreOfficeKit::isActive() && !rRenderContext.IsVirtual()) return; m_bInPaint = true; diff --git a/editeng/source/editeng/editobj2.hxx b/editeng/source/editeng/editobj2.hxx index 7da37fc2f31d..9ec7bb698108 100644 --- a/editeng/source/editeng/editobj2.hxx +++ b/editeng/source/editeng/editobj2.hxx @@ -112,10 +112,11 @@ public: OutputDevice* GetRefDevPtr() const { return nRefDevPtr; } sal_uLong GetPaperWidth() const { return nPaperWidth; } OutDevType GetRefDevType() const { return eRefDevType; } + bool RefDevIsVirtual() const + { return (eRefDevType == OUTDEV_VIRDEV) || (eRefDevType == OUTDEV_PDF); } const MapMode& GetRefMapMode() const { return aRefMapMode; } sal_uInt16 GetStretchX() const { return nStretchX; } sal_uInt16 GetStretchY() const { return nStretchY; } - }; class ContentInfo diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index c4938eb3f075..14e2510024aa 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -2831,7 +2831,7 @@ void ImpEditEngine::SeekCursor( ContentNode* pNode, sal_Int32 nPos, SvxFont& rFo { // #i75566# Do not use AutoColor when printing OR Pdf export const bool bPrinting(OUTDEV_PRINTER == pOut->GetOutDevType()); - const bool bPDFExporting(nullptr != pOut->GetPDFWriter()); + const bool bPDFExporting(OUTDEV_PDF == pOut->GetOutDevType()); if ( IsAutoColorEnabled() && !bPrinting && !bPDFExporting) { diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index 64bc7443014e..4be47ec63d4a 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -1178,9 +1178,8 @@ EditSelection ImpEditEngine::InsertTextObject( const EditTextObject& rTextObject && ( pPortionInfo->GetStretchX() == nStretchX ) && ( pPortionInfo->GetStretchY() == nStretchY ) ) { - if ( ( pPortionInfo->GetRefDevPtr() == GetRefDevice() ) || - ( ( pPortionInfo->GetRefDevType() == OUTDEV_VIRDEV ) && - ( GetRefDevice()->GetOutDevType() == OUTDEV_VIRDEV ) ) ) + if ( (pPortionInfo->GetRefDevPtr() == GetRefDevice()) || + (pPortionInfo->RefDevIsVirtual() && GetRefDevice()->IsVirtual()) ) bUsePortionInfo = true; } diff --git a/include/svx/sdrpaintwindow.hxx b/include/svx/sdrpaintwindow.hxx index 92d928da71d2..c99c578f0da3 100644 --- a/include/svx/sdrpaintwindow.hxx +++ b/include/svx/sdrpaintwindow.hxx @@ -115,7 +115,7 @@ public: bool OutputToWindow() const { return (OUTDEV_WINDOW == mpOutputDevice->GetOutDevType()); } // Is OutDev a VirtualDevice? - bool OutputToVirtualDevice() const { return (OUTDEV_VIRDEV == mpOutputDevice->GetOutDevType()); } + bool OutputIsVirtualDevice() const { return mpOutputDevice->IsVirtual(); } // Is OutDev a recording MetaFile? bool OutputToRecordingMetaFile() const; diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 4980757a4b1a..04bd178ed300 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -298,7 +298,7 @@ namespace o3tl template<> struct typed_flags<InvertFlags> : is_typed_flags<InvertFlags, 0x0007> {}; } -enum OutDevType { OUTDEV_WINDOW, OUTDEV_PRINTER, OUTDEV_VIRDEV }; +enum OutDevType { OUTDEV_WINDOW, OUTDEV_PRINTER, OUTDEV_VIRDEV, OUTDEV_PDF }; enum class OutDevViewType { DontKnow, PrintPreview, SlideShow }; @@ -346,7 +346,6 @@ private: std::unique_ptr<OutDevStateStack> mpOutDevStateStack; std::unique_ptr<ImplOutDevData> mpOutDevData; std::vector< VCLXGraphics* >* mpUnoGraphicsList; - VclPtr<OutputDevice> mpPDFWriter; vcl::ExtOutDevData* mpExtOutDevData; // TEMP TEMP TEMP @@ -542,6 +541,10 @@ public: } OutDevType GetOutDevType() const { return meOutDevType; } + bool IsVirtual() const + { + return (meOutDevType == OUTDEV_VIRDEV) || (meOutDevType == OUTDEV_PDF); + } /** Query an OutputDevice to see whether it supports a specific operation @@ -549,8 +552,6 @@ public: */ bool SupportsOperation( OutDevSupportType ) const; - vcl::PDFWriterImpl* GetPDFWriter() const; - void SetExtOutDevData( vcl::ExtOutDevData* pExtOutDevData ) { mpExtOutDevData = pExtOutDevData; } vcl::ExtOutDevData* GetExtOutDevData() const { return mpExtOutDevData; } @@ -1290,7 +1291,6 @@ protected: SAL_DLLPRIVATE const LogicalFontInstance* GetFontInstance() const; SAL_DLLPRIVATE long GetEmphasisAscent() const { return mnEmphasisAscent; } SAL_DLLPRIVATE long GetEmphasisDescent() const { return mnEmphasisDescent; } - SAL_DLLPRIVATE void SetPDFWriter(vcl::PDFWriterImpl* pPDFWriter); virtual void InitFont() const; virtual void SetFontOrientation( LogicalFontInstance* const pFontInstance ) const; diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index d5f4f6d86635..ae3c773cf934 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -44,11 +44,11 @@ struct SalPrinterQueueInfo; class SalPrinter; class VirtualDevice; enum class SalPrinterError; -namespace vcl { class Window; } namespace vcl { class PrinterController; class PrintDialog; + class Window; } namespace weld { class Window; } diff --git a/include/vcl/virdev.hxx b/include/vcl/virdev.hxx index f608b5797844..48bd4ff4c507 100644 --- a/include/vcl/virdev.hxx +++ b/include/vcl/virdev.hxx @@ -21,8 +21,8 @@ #define INCLUDED_VCL_VIRDEV_HXX #include <vcl/dllapi.h> -#include <vcl/salgtype.hxx> #include <vcl/outdev.hxx> +#include <vcl/salgtype.hxx> #include <memory> class SalVirtualDevice; @@ -89,8 +89,12 @@ protected: Device format of the generated virtual device. Use DeviceFormat::DEFAULT here, to indicate: take default screen depth. Only DeviceFormat::BITMASK is the other possibility to denote a binary mask. + + @param eOutDevType + This real virtual output device type. */ - explicit VirtualDevice(const OutputDevice* pCompDev, DeviceFormat eFormat, DeviceFormat eAlphaFormat); + explicit VirtualDevice(const OutputDevice* pCompDev, DeviceFormat eFormat, + DeviceFormat eAlphaFormat, OutDevType eOutDevType); public: @@ -102,7 +106,7 @@ public: is the other possibility to denote a binary mask. */ explicit VirtualDevice(DeviceFormat eFormat = DeviceFormat::DEFAULT) - : VirtualDevice(nullptr, eFormat, DeviceFormat::NONE) {} + : VirtualDevice(nullptr, eFormat, DeviceFormat::NONE, OUTDEV_VIRDEV) {} /** Create a virtual device of size 1x1 @@ -116,7 +120,7 @@ public: */ explicit VirtualDevice(const OutputDevice& rCompDev, DeviceFormat eFormat = DeviceFormat::DEFAULT) - : VirtualDevice(&rCompDev, eFormat, DeviceFormat::NONE) {} + : VirtualDevice(&rCompDev, eFormat, DeviceFormat::NONE, OUTDEV_VIRDEV) {} /** Create a virtual device of size 1x1 with alpha channel @@ -135,7 +139,7 @@ public: */ explicit VirtualDevice(const OutputDevice& rCompDev, DeviceFormat eFormat, DeviceFormat eAlphaFormat) - : VirtualDevice(&rCompDev, eFormat, eAlphaFormat) {} + : VirtualDevice(&rCompDev, eFormat, eAlphaFormat, OUTDEV_VIRDEV) {} /** Create a virtual device using an existing system dependent device or graphics context Any rendering will happen directly on the context and not on any intermediate bitmap. diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx index d3011c54caed..0d9e18bd2a00 100644 --- a/sc/source/ui/view/printfun.cxx +++ b/sc/source/ui/view/printfun.cxx @@ -575,7 +575,7 @@ void ScPrintFunc::DrawToDev( ScDocument* pDoc, OutputDevice* pDev, double /* nPr //! SetUseStyleColor ?? - if ( bMetaFile && pDev->GetOutDevType() == OUTDEV_VIRDEV ) + if ( bMetaFile && pDev->IsVirtual() ) aOutputData.SetSnapPixel(); Point aLogStart = pDev->PixelToLogic(Point(nScrX, nScrY), MapMode(MapUnit::Map100thMM)); @@ -1199,7 +1199,7 @@ static void lcl_DrawGraphic( const SvxBrushItem &rBrush, vcl::RenderContext *pOu GraphicObject aObject( *pGraphic ); - if( pOut->GetPDFWriter() && + if( pOut->GetOutDevType() == OUTDEV_PDF && (aObject.GetType() == GraphicType::Bitmap || aObject.GetType() == GraphicType::Default) ) { // For PDF export, every draw diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 6d47265791e3..bdd61533eb38 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -1961,19 +1961,13 @@ void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& r SdrOutliner& rOutl = mpDoc->GetDrawOutliner(); bool bScreenDisplay(true); - if(bScreenDisplay && pOut && OUTDEV_PRINTER == pOut->GetOutDevType()) - { - // #i75566# printing; suppress AutoColor BackgroundColor generation - // for visibility reasons by giving GetPageBackgroundColor() - // the needed hint - bScreenDisplay = false; - } - - if(bScreenDisplay && pOut && pOut->GetPDFWriter()) - { - // #i75566# PDF export; suppress AutoColor BackgroundColor generation (see above) + // #i75566# printing; suppress AutoColor BackgroundColor generation + // for visibility reasons by giving GetPageBackgroundColor() + // the needed hint + // #i75566# PDF export; suppress AutoColor BackgroundColor generation (see printing) + if (pOut && ((OUTDEV_PRINTER == pOut->GetOutDevType()) + || (OUTDEV_PDF == pOut->GetOutDevType()))) bScreenDisplay = false; - } // #i75566# Name change GetBackgroundColor -> GetPageBackgroundColor and // hint value if screen display. Only then the AutoColor mechanisms shall be applied diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx index 258d5d6d05ee..caee8aba20c0 100644 --- a/sd/source/ui/view/sdview.cxx +++ b/sd/source/ui/view/sdview.cxx @@ -470,19 +470,13 @@ void View::CompleteRedraw(OutputDevice* pOutDev, const vcl::Region& rReg, sdr::c SdrOutliner& rOutl = mrDoc.GetDrawOutliner(); bool bScreenDisplay(true); - if(bScreenDisplay && pOutDev && OUTDEV_PRINTER == pOutDev->GetOutDevType()) - { - // #i75566# printing; suppress AutoColor BackgroundColor generation - // for visibility reasons by giving GetPageBackgroundColor() - // the needed hint - bScreenDisplay = false; - } - - if(bScreenDisplay && pOutDev && pOutDev->GetPDFWriter()) - { - // #i75566# PDF export; suppress AutoColor BackgroundColor generation (see above) + // #i75566# printing; suppress AutoColor BackgroundColor generation + // for visibility reasons by giving GetPageBackgroundColor() + // the needed hint + // #i75566# PDF export; suppress AutoColor BackgroundColor generation (see printing) + if (pOutDev && ((OUTDEV_PRINTER == pOutDev->GetOutDevType()) + || (OUTDEV_PDF == pOutDev->GetOutDevType()))) bScreenDisplay = false; - } // #i75566# Name change GetBackgroundColor -> GetPageBackgroundColor and // hint value if screen display. Only then the AutoColor mechanisms shall be applied diff --git a/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx b/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx index 2e89227ff93d..cd1c49457bfe 100644 --- a/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx +++ b/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx @@ -138,7 +138,7 @@ bool ObjectContactOfObjListPainter::isOutputToRecordingMetaFile() const // pdf export? bool ObjectContactOfObjListPainter::isOutputToPDFFile() const { - return (nullptr != mrTargetOutputDevice.GetPDFWriter()); + return OUTDEV_PDF == mrTargetOutputDevice.GetOutDevType(); } OutputDevice* ObjectContactOfObjListPainter::TryToGetOutputDevice() const diff --git a/svx/source/sdr/contact/objectcontactofpageview.cxx b/svx/source/sdr/contact/objectcontactofpageview.cxx index e4b4b6ca1de9..6a2247bcd6c2 100644 --- a/svx/source/sdr/contact/objectcontactofpageview.cxx +++ b/svx/source/sdr/contact/objectcontactofpageview.cxx @@ -396,7 +396,7 @@ namespace sdr // pdf export? bool ObjectContactOfPageView::isOutputToPDFFile() const { - return (nullptr != mrPageWindow.GetPaintWindow().GetOutputDevice().GetPDFWriter()); + return OUTDEV_PDF == mrPageWindow.GetPaintWindow().GetOutputDevice().GetOutDevType(); } // gray display mode diff --git a/svx/source/svdraw/sdrpaintwindow.cxx b/svx/source/svdraw/sdrpaintwindow.cxx index 65dbfc8f156d..0eb8e5c0db29 100644 --- a/svx/source/svdraw/sdrpaintwindow.cxx +++ b/svx/source/svdraw/sdrpaintwindow.cxx @@ -284,7 +284,7 @@ void SdrPaintWindow::PreparePreRenderDevice() const bool bPrepareBufferedOutput( mrPaintView.IsBufferedOutputAllowed() && !OutputToPrinter() - && !OutputToVirtualDevice() + && !OutputIsVirtualDevice() && !OutputToRecordingMetaFile()); if(bPrepareBufferedOutput) diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx index 9b84ca53b1e1..308f8714ca3b 100644 --- a/sw/source/core/doc/notxtfrm.cxx +++ b/sw/source/core/doc/notxtfrm.cxx @@ -1108,8 +1108,7 @@ void SwNoTextFrame::PaintPicture( vcl::RenderContext* pOut, const SwRect &rGrfAr pVout = pOut; pOut = pShell->GetOut(); } - else if( pShell->GetWin() && - OUTDEV_VIRDEV == pOut->GetOutDevType() ) + else if( pShell->GetWin() && pOut->IsVirtual() ) { pVout = pOut; pOut = pShell->GetWin(); @@ -1117,7 +1116,7 @@ void SwNoTextFrame::PaintPicture( vcl::RenderContext* pOut, const SwRect &rGrfAr else pVout = nullptr; - OSL_ENSURE( OUTDEV_VIRDEV != pOut->GetOutDevType() || + OSL_ENSURE( !pOut->IsVirtual() || pShell->GetViewOptions()->IsPDFExport() || pShell->isOutputToWindow(), "pOut should not be a virtual device" ); diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index 9166965dfb7e..855af057bcec 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -870,7 +870,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) { OSL_ENSURE( bNoAdjust && !bUseScrFont, "Outdev Check failed" ); } - else if ( OUTDEV_VIRDEV == rRefDev.GetOutDevType() ) + else if ( rRefDev.IsVirtual() ) { OSL_ENSURE( !bNoAdjust && bUseScrFont, "Outdev Check failed" ); } @@ -879,14 +879,14 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) OSL_FAIL( "Outdev Check failed" ); } } - else if ( OUTDEV_VIRDEV == rInf.GetOut().GetOutDevType() && ! pWin ) + else if ( OUTDEV_PDF == rInf.GetOut().GetOutDevType() && ! pWin ) { // PDF export if ( OUTDEV_PRINTER == rRefDev.GetOutDevType() ) { OSL_ENSURE( !bNoAdjust && bUseScrFont, "Outdev Check failed" ); } - else if ( OUTDEV_VIRDEV == rRefDev.GetOutDevType() ) + else if ( rRefDev.IsVirtual() ) { OSL_ENSURE( !bNoAdjust && bUseScrFont, "Outdev Check failed" ); } @@ -903,7 +903,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) { OSL_ENSURE( !bNoAdjust && bUseScrFont, "Outdev Check failed" ); } - else if ( OUTDEV_VIRDEV == rRefDev.GetOutDevType() ) + else if ( rRefDev.IsVirtual() ) { OSL_ENSURE( !bNoAdjust && bUseScrFont, "Outdev Check failed" ); } diff --git a/sw/source/core/view/vnew.cxx b/sw/source/core/view/vnew.cxx index ba029c6c9f77..bef6f80521eb 100644 --- a/sw/source/core/view/vnew.cxx +++ b/sw/source/core/view/vnew.cxx @@ -85,7 +85,7 @@ void SwViewShell::Init( const SwViewOption *pNewOpt ) SAL_INFO( "sw.core", "View::Init - before InitPrt" ); OutputDevice* pPDFOut = nullptr; - if ( mpOut && mpOut->GetPDFWriter() ) + if (mpOut && (OUTDEV_PDF == mpOut->GetOutDevType())) pPDFOut = mpOut; // Only setup the printer if we need one: diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx index 19fac921d2fb..eb96cfa22a13 100644 --- a/vcl/inc/salgdi.hxx +++ b/vcl/inc/salgdi.hxx @@ -665,6 +665,7 @@ protected: /// flags which hold the SetAntialiasing() value from OutputDevice bool m_bAntiAliasB2DDraw : 1; + inline long GetDeviceWidth(const OutputDevice* pOutDev) const; }; #endif // INCLUDED_VCL_INC_SALGDI_HXX diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 5d430e2a560d..0148c11c40c4 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -1683,7 +1683,7 @@ void PDFWriterImpl::PDFPage::appendWaveLine( sal_Int32 nWidth, sal_Int32 nY, sal PDFWriterImpl::PDFWriterImpl( const PDFWriter::PDFWriterContext& rContext, const css::uno::Reference< css::beans::XMaterialHolder >& xEnc, PDFWriter& i_rOuterFace) - : VirtualDevice(DeviceFormat::DEFAULT), + : VirtualDevice(Application::GetDefaultDevice(), DeviceFormat::DEFAULT, DeviceFormat::NONE, OUTDEV_PDF), m_aMapMode( MapUnit::MapPoint, Point(), Fraction( 1, pointToPixel(1) ), Fraction( 1, pointToPixel(1) ) ), m_nCurrentStructElement( 0 ), m_bEmitStructure( true ), @@ -1810,7 +1810,6 @@ void PDFWriterImpl::PDFPage::appendWaveLine( sal_Int32 nWidth, sal_Int32 nY, sal SetOutputSizePixel( Size( 640, 480 ) ); SetMapMode(MapMode(MapUnit::MapMM)); - SetPDFWriter(this); } PDFWriterImpl::~PDFWriterImpl() diff --git a/vcl/source/gdi/print2.cxx b/vcl/source/gdi/print2.cxx index 0baf00099ac0..8390b97286ab 100644 --- a/vcl/source/gdi/print2.cxx +++ b/vcl/source/gdi/print2.cxx @@ -1096,13 +1096,13 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, Point aPageOffset; Size aTmpSize( GetOutputSizePixel() ); - if( GetPDFWriter() ) + if( meOutDevType == OUTDEV_PDF ) { - aTmpSize = GetPDFWriter()->getCurPageSize(); - aTmpSize = LogicToPixel( aTmpSize, MapMode( MapUnit::MapPoint ) ); + auto pPdfWriter = static_cast<vcl::PDFWriterImpl*>(this); + aTmpSize = LogicToPixel(pPdfWriter->getCurPageSize(), MapMode(MapUnit::MapPoint)); // also add error code to PDFWriter - GetPDFWriter()->insertError( vcl::PDFWriter::Warning_Transparency_Converted ); + pPdfWriter->insertError(vcl::PDFWriter::Warning_Transparency_Converted); } else if( meOutDevType == OUTDEV_PRINTER ) { diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx index d28c751f42a9..2bb5b47d3b80 100644 --- a/vcl/source/gdi/salgdilayout.cxx +++ b/vcl/source/gdi/salgdilayout.cxx @@ -118,14 +118,15 @@ long SalGraphics::mirror2( long x, const OutputDevice *pOutDev ) const return x; } -void SalGraphics::mirror( long& x, const OutputDevice *pOutDev ) const +inline long SalGraphics::GetDeviceWidth(const OutputDevice* pOutDev) const { - long w; - if( pOutDev && pOutDev->GetOutDevType() == OUTDEV_VIRDEV ) - w = pOutDev->GetOutputWidthPixel(); - else - w = GetGraphicsWidth(); + return (pOutDev && pOutDev->IsVirtual()) + ? pOutDev->GetOutputWidthPixel() : GetGraphicsWidth(); +} +void SalGraphics::mirror( long& x, const OutputDevice *pOutDev ) const +{ + const long w = GetDeviceWidth(pOutDev); if( w ) { if( pOutDev && pOutDev->ImplIsAntiparallel() ) @@ -150,12 +151,7 @@ void SalGraphics::mirror( long& x, const OutputDevice *pOutDev ) const void SalGraphics::mirror( long& x, long nWidth, const OutputDevice *pOutDev, bool bBack ) const { - long w; - if( pOutDev && pOutDev->GetOutDevType() == OUTDEV_VIRDEV ) - w = pOutDev->GetOutputWidthPixel(); - else - w = GetGraphicsWidth(); - + const long w = GetDeviceWidth(pOutDev); if( w ) { if( pOutDev && pOutDev->ImplIsAntiparallel() ) @@ -181,18 +177,12 @@ void SalGraphics::mirror( long& x, long nWidth, const OutputDevice *pOutDev, boo } else if( m_nLayout & SalLayoutFlags::BiDiRtl ) x = w-nWidth-x; - } } bool SalGraphics::mirror( sal_uInt32 nPoints, const SalPoint *pPtAry, SalPoint *pPtAry2, const OutputDevice *pOutDev ) const { - long w; - if( pOutDev && pOutDev->GetOutDevType() == OUTDEV_VIRDEV ) - w = pOutDev->GetOutputWidthPixel(); - else - w = GetGraphicsWidth(); - + const long w = GetDeviceWidth(pOutDev); if( w ) { sal_uInt32 i, j; @@ -315,9 +305,7 @@ basegfx::B2DPolyPolygon SalGraphics::mirror( const basegfx::B2DPolyPolygon& i_rP const basegfx::B2DHomMatrix& SalGraphics::getMirror( const OutputDevice* i_pOutDev ) const { // get mirroring transformation - const long w(nullptr != i_pOutDev && OUTDEV_VIRDEV == i_pOutDev->GetOutDevType() - ? i_pOutDev->GetOutputWidthPixel() - : GetGraphicsWidth()); + const long w = GetDeviceWidth(i_pOutDev); SAL_WARN_IF( !w, "vcl", "missing graphics width" ); if(w != m_aLastMirrorW) diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx index 284706c1a730..93b876577269 100644 --- a/vcl/source/gdi/virdev.cxx +++ b/vcl/source/gdi/virdev.cxx @@ -164,7 +164,7 @@ void VirtualDevice::ImplInitVirDev( const OutputDevice* pOutDev, if ( pOutDev->GetOutDevType() == OUTDEV_PRINTER ) mbScreenComp = false; - else if ( pOutDev->GetOutDevType() == OUTDEV_VIRDEV ) + else if ( pOutDev->IsVirtual() ) mbScreenComp = static_cast<const VirtualDevice*>(pOutDev)->mbScreenComp; mbDevOutput = true; @@ -198,13 +198,15 @@ void VirtualDevice::ImplInitVirDev( const OutputDevice* pOutDev, pSVData->maGDIData.mpFirstVirDev = this; } -VirtualDevice::VirtualDevice(const OutputDevice* pCompDev, DeviceFormat eFormat, DeviceFormat eAlphaFormat) - : OutputDevice(OUTDEV_VIRDEV) +VirtualDevice::VirtualDevice(const OutputDevice* pCompDev, DeviceFormat eFormat, + DeviceFormat eAlphaFormat, OutDevType eOutDevType) + : OutputDevice(eOutDevType) , meFormat(eFormat) , meAlphaFormat(eAlphaFormat) { - SAL_INFO( "vcl.virdev", - "VirtualDevice::VirtualDevice( " << static_cast<int>(eFormat) << ", " << static_cast<int>(eAlphaFormat) << " )" ); + SAL_INFO( "vcl.virdev", "VirtualDevice::VirtualDevice( " << static_cast<int>(eFormat) + << ", " << static_cast<int>(eAlphaFormat) + << ", " << static_cast<int>(eOutDevType) << " )" ); ImplInitVirDev(pCompDev ? pCompDev : Application::GetDefaultDevice(), 0, 0); } diff --git a/vcl/source/outdev/clipping.cxx b/vcl/source/outdev/clipping.cxx index e852d6ebd873..8f7fcbbc98f5 100644 --- a/vcl/source/outdev/clipping.cxx +++ b/vcl/source/outdev/clipping.cxx @@ -153,8 +153,8 @@ void OutputDevice::InitClipRegion() // #102532# Respect output offset also for clip region vcl::Region aRegion( ImplPixelToDevicePixel( maRegion ) ); - const bool bClipDeviceBounds( ! GetPDFWriter() - && GetOutDevType() != OUTDEV_PRINTER ); + const bool bClipDeviceBounds((OUTDEV_PDF != GetOutDevType()) + && (OUTDEV_PRINTER != GetOutDevType())); if( bClipDeviceBounds ) { // Perform actual rect clip against outdev diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index 981e087e8330..432aa87101c0 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -527,27 +527,20 @@ void OutputDevice::ImplClearFontData( const bool bNewFontLists ) mpGraphics->ReleaseFonts(); } -// if ( GetOutDevType() == OUTDEV_PRINTER || mpPDFWriter ) - { - ImplSVData* pSVData = ImplGetSVData(); + ImplSVData* pSVData = ImplGetSVData(); - if (mxFontCache && mxFontCache != pSVData->maGDIData.mxScreenFontCache) - mxFontCache->Invalidate(); + if (mxFontCache && mxFontCache != pSVData->maGDIData.mxScreenFontCache) + mxFontCache->Invalidate(); - if ( bNewFontLists ) - { - // we need a graphics - if ( AcquireGraphics() ) - { - if (mxFontCollection && mxFontCollection != pSVData->maGDIData.mxScreenFontList) - mxFontCollection->Clear(); + if (bNewFontLists && AcquireGraphics()) + { + if (mxFontCollection && mxFontCollection != pSVData->maGDIData.mxScreenFontList) + mxFontCollection->Clear(); - if( GetPDFWriter() ) - { - mxFontCollection.reset(); - mxFontCache.reset(); - } - } + if (GetOutDevType() == OUTDEV_PDF) + { + mxFontCollection.reset(); + mxFontCache.reset(); } } @@ -570,26 +563,17 @@ void OutputDevice::RefreshFontData( const bool bNewFontLists ) void OutputDevice::ImplRefreshFontData( const bool bNewFontLists ) { -// if ( GetOutDevType() == OUTDEV_PRINTER || mpPDFWriter ) - { - ImplSVData* pSVData = ImplGetSVData(); + ImplSVData* pSVData = ImplGetSVData(); - if ( bNewFontLists ) + if (bNewFontLists && AcquireGraphics()) + { + if (GetOutDevType() == OUTDEV_PDF) { - // we need a graphics - if ( AcquireGraphics() ) - { - if( GetPDFWriter() ) - { - mxFontCollection = pSVData->maGDIData.mxScreenFontList->Clone(); - mxFontCache.reset(new ImplFontCache); - } - else - { - mpGraphics->GetDevFontList( mxFontCollection.get() ); - } - } + mxFontCollection = pSVData->maGDIData.mxScreenFontList->Clone(); + mxFontCache.reset(new ImplFontCache); } + else + mpGraphics->GetDevFontList( mxFontCollection.get() ); } // also update child windows if needed @@ -1017,7 +1001,7 @@ bool OutputDevice::ImplNewFont() const DBG_TESTSOLARMUTEX(); // get correct font list on the PDF writer if necessary - if( GetPDFWriter() ) + if (GetOutDevType() == OUTDEV_PDF) { const ImplSVData* pSVData = ImplGetSVData(); if( mxFontCollection == pSVData->maGDIData.mxScreenFontList diff --git a/vcl/source/outdev/hatch.cxx b/vcl/source/outdev/hatch.cxx index 00ec13562d46..a5c4f355dcc8 100644 --- a/vcl/source/outdev/hatch.cxx +++ b/vcl/source/outdev/hatch.cxx @@ -401,10 +401,8 @@ void OutputDevice::DrawHatchLine( const tools::Line& rLine, const tools::PolyPol { for( long i = 0; i < nPCounter; i += 2 ) { - if( GetPDFWriter() ) - { - GetPDFWriter()->drawLine( pPtBuffer[ i ], pPtBuffer[ i+1 ] ); - } + if (GetOutDevType() == OUTDEV_PDF) + static_cast<vcl::PDFWriterImpl*>(this)->drawLine(pPtBuffer[ i ], pPtBuffer[ i+1 ]); else { const Point aPt1( ImplLogicToDevicePixel( pPtBuffer[ i ] ) ); diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx index b96dc63c13fe..740d54ecc86b 100644 --- a/vcl/source/outdev/nativecontrols.cxx +++ b/vcl/source/outdev/nativecontrols.cxx @@ -50,6 +50,8 @@ static bool EnableNativeWidget( const OutputDevice& i_rDevice ) } } + case OUTDEV_PDF: + SAL_FALLTHROUGH; case OUTDEV_VIRDEV: { const vcl::ExtOutDevData* pOutDevData( i_rDevice.GetExtOutDevData() ); diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index 98af9d0ba0ce..275f0c1845e5 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -34,8 +34,6 @@ #include <outdevstatestack.hxx> #include <PhysicalFontCollection.hxx> -#include "../gdi/pdfwriter_impl.hxx" - #ifdef DISABLE_DYNLOADING // Linking all needed LO code into one .so/executable, these already // exist in the tools library, so put them in the anonymous namespace @@ -64,7 +62,6 @@ OutputDevice::OutputDevice(OutDevType eOutDevType) : mpDeviceFontList = nullptr; mpDeviceFontSizeList = nullptr; mpOutDevStateStack.reset(new OutDevStateStack); - mpPDFWriter = nullptr; mpAlphaVDev = nullptr; mpExtOutDevData = nullptr; mnOutOffX = 0; @@ -144,8 +141,6 @@ OutputDevice::~OutputDevice() void OutputDevice::dispose() { - mpPDFWriter.disposeAndClear(); - if ( GetUnoGraphicsList() ) { UnoWrapperBase* pWrapper = UnoWrapperBase::GetUnoWrapper( false ); @@ -762,15 +757,4 @@ bool OutputDevice::DrawEPS( const Point& rPoint, const Size& rSize, return bDrawn; } -vcl::PDFWriterImpl* OutputDevice::GetPDFWriter() const -{ - return static_cast<vcl::PDFWriterImpl*>(mpPDFWriter.get()); -} - -void OutputDevice::SetPDFWriter(vcl::PDFWriterImpl* pPDFWriter) -{ - mpPDFWriter = pPDFWriter; - ImplUpdateFontData(); -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx index 3bc2ced9a3b5..d23c2137be35 100644 --- a/vcl/source/outdev/text.cxx +++ b/vcl/source/outdev/text.cxx @@ -274,7 +274,7 @@ void OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout, long nOldX = rSalLayout.DrawBase().X(); if( HasMirroredGraphics() ) { - long w = meOutDevType == OUTDEV_VIRDEV ? mnOutWidth : mpGraphics->GetGraphicsWidth(); + long w = IsVirtual() ? mnOutWidth : mpGraphics->GetGraphicsWidth(); long x = rSalLayout.DrawBase().X(); rSalLayout.DrawBase().setX( w - 1 - x ); if( !IsRTLEnabled() ) diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 0de4d5b0e129..d2b92d8623b8 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -540,7 +540,7 @@ cairo::SurfaceSharedPtr X11SalGraphics::CreateSurface( const OutputDevice& rRefD if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) return cairo::SurfaceSharedPtr(new cairo::X11Surface(getSysData(static_cast<const vcl::Window&>(rRefDevice)), x,y,width,height)); - if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + if( rRefDevice.IsVirtual() ) return cairo::SurfaceSharedPtr(new cairo::X11Surface(getSysData(static_cast<const VirtualDevice&>(rRefDevice)), x,y,width,height)); return cairo::SurfaceSharedPtr(); @@ -557,7 +557,7 @@ cairo::SurfaceSharedPtr X11SalGraphics::CreateBitmapSurface( const OutputDevice& { if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) return cairo::SurfaceSharedPtr(new cairo::X11Surface(getSysData(static_cast<const vcl::Window&>(rRefDevice)), rData )); - else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) + else if( rRefDevice.IsVirtual() ) return cairo::SurfaceSharedPtr(new cairo::X11Surface(getSysData(static_cast<const VirtualDevice&>(rRefDevice)), rData )); } |