summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2016-04-27 14:50:05 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-04-28 06:47:29 +0000
commitb63c3d9bd9e616a7d38df6f12226cc3b5fd65c2d (patch)
tree2ee8e741aae6953539374b0eddab0b7dbbde7342 /vcl
parent79226e41fc4fa71b1f94bba0c6feaa318852d954 (diff)
tdf#89866 tdf#96504 vcl: fix printing of form controls with images
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>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/gdi/print.cxx13
-rw-r--r--vcl/source/image/Image.cxx3
2 files changed, 2 insertions, 14 deletions
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);