include/vcl/print.hxx      |    5 -----
 vcl/source/gdi/print.cxx   |   13 -------------
 vcl/source/image/Image.cxx |    3 ++-
 3 files changed, 2 insertions(+), 19 deletions(-)

New commits:
commit b63c3d9bd9e616a7d38df6f12226cc3b5fd65c2d
Author: Michael Stahl <mst...@redhat.com>
Date:   Wed Apr 27 14:50:05 2016 +0200

    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 <c...@libreoffice.org>
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>

diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx
index 11a4974..590e504 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 ebe19e9..dd9e6b3 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 bc9c944..ef132ae 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);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to