diff options
author | Michael Stahl <mstahl@redhat.com> | 2016-04-27 14:50:05 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-04-28 06:47:29 +0000 |
commit | b63c3d9bd9e616a7d38df6f12226cc3b5fd65c2d (patch) | |
tree | 2ee8e741aae6953539374b0eddab0b7dbbde7342 | |
parent | 79226e41fc4fa71b1f94bba0c6feaa318852d954 (diff) |
Originally in 2004 commit 0339e43208cd7b98d302e420b39ac32911acaa56 added a
"DBG_ASSERT( GetOutDevType() != OUTDEV_PRINTER, "DrawImage(): Images can't
be drawn on any mprinter" );"
Recently commit f749ffbdf4c007f1a42bcafc9c2723c47bac22d1 made the mistake
of trusting this assertion to be correct and added Printer::DrawImage()
overrides that do a hard "assert()" now and don't do any drawing.
Armin claims that the implementation of OutputDevice::DrawImage() should
actually work for Printer as well due to fall-backs and thus the
original DBG_ASSERT was misleading.
This matters when printing documents that contain form controls
such as ImageControl.
Additionally, Image::Draw() should not return early when
IsDeviceOutputNecessary() is false, because that is the case when
printing, where instead a meta-file is recorded.
The called OutputDevice::DrawBitmapEx() will check
IsDeviceOutputNecessary() internally anyway.
This check was actually always there, so i do not understand how this
should have worked in LO 4.2, as the bug reporters claim.
(cherry picked from commit ef52ce82bf55b37279e344ea5fef67b4277fb009)
Change-Id: I92ba19e7036197d1dde88c361f8e1cb59fae3a60
Reviewed-on: https://gerrit.libreoffice.org/24439
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r-- | include/vcl/print.hxx | 5 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 13 | ||||
-rw-r--r-- | vcl/source/image/Image.cxx | 3 |
3 files changed, 2 insertions, 19 deletions
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index 11a4974e5497..590e504d2ac1 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -379,11 +379,6 @@ public: const Point& rSrcPt, const Size& rSrcSize, bool bWindowInvalidate = false ) override; - virtual void DrawImage( const Point&, const Image&, DrawImageFlags ) override; - virtual void DrawImage( const Point&, const Size&, - const Image&, DrawImageFlags ) override; - - // These 3 together are more modular PrintJob(), allowing printing more documents as one print job // by repeated calls to ExecutePrintJob(). Used by mailmerge. static bool PreparePrintJob( std::shared_ptr<vcl::PrinterController> i_pController, diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index ebe19e95b327..dd9e6b38eee8 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -1820,19 +1820,6 @@ void Printer::SetFontOrientation( ImplFontEntry* const pFontEntry ) const pFontEntry->mnOrientation = pFontEntry->maMetric.mnOrientation; } -void Printer::DrawImage( const Point&, const Image&, DrawImageFlags ) -{ - SAL_WARN ("vcl.gdi", "DrawImage(): Images can't be drawn on any Printer instance"); - assert(false); -} - -void Printer::DrawImage( const Point&, const Size&, const Image&, DrawImageFlags ) -{ - SAL_WARN ("vcl.gdi", "DrawImage(): Images can't be drawn on any Printer instance"); - assert(false); -} - - Bitmap Printer::GetBitmap( const Point& rSrcPt, const Size& rSize ) const { SAL_WARN("vcl.gdi", "GetBitmap(): This should never be called on by a Printer instance"); diff --git a/vcl/source/image/Image.cxx b/vcl/source/image/Image.cxx index bc9c9441bca6..ef132ae4e8c5 100644 --- a/vcl/source/image/Image.cxx +++ b/vcl/source/image/Image.cxx @@ -229,7 +229,8 @@ bool Image::operator==(const Image& rImage) const void Image::Draw(OutputDevice* pOutDev, const Point& rPos, DrawImageFlags nStyle, const Size* pSize) { - if (mpImplData == nullptr || !mpImplData->mpBitmapEx || !pOutDev->IsDeviceOutputNecessary()) + if (mpImplData == nullptr || !mpImplData->mpBitmapEx || + (!pOutDev->IsDeviceOutputNecessary() && pOutDev->GetConnectMetaFile() == nullptr)) return; const Point aSrcPos(0, 0); |