[Libreoffice-commits] core.git: Branch 'libreoffice-7-2' - vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed Sep 29 10:22:30 UTC 2021


 vcl/source/app/salvtables.cxx |   28 ++++++++++++++++++++++++++--
 vcl/unx/gtk3/gtkinst.cxx      |   26 ++++++++++++++++++++++++--
 2 files changed, 50 insertions(+), 4 deletions(-)

New commits:
commit 39a6ea1fea4c0a624d19b4a5f0bcfd0e4cad0a20
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Sep 28 12:10:33 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Sep 29 12:21:54 2021 +0200

    tdf#144139 don't crash when OutputDevice is a printer
    
    Change-Id: Ia3843966949b8164b01cecd762ea2b5c5bf0339b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122777
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit a0f6d3865dd113f38fd3aa673075e9fecd06f3cd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122791
    Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>

diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index a66e95158aa4..ad46c0035e95 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1285,7 +1285,19 @@ void SalInstanceWidget::DoRecursivePaint(vcl::Window* pWindow, const Point& rRen
     Size aTempLogicSize(xOutput->PixelToLogic(aChildSizePixel));
     Size aRenderLogicSize(rOutput.PixelToLogic(aChildSizePixel));
 
-    xOutput->DrawOutDev(Point(), aTempLogicSize, rRenderLogicPos, aRenderLogicSize, rOutput);
+    switch (rOutput.GetOutDevType())
+    {
+        case OUTDEV_WINDOW:
+        case OUTDEV_VIRDEV:
+            xOutput->DrawOutDev(Point(), aTempLogicSize, rRenderLogicPos, aRenderLogicSize,
+                                rOutput);
+            break;
+        case OUTDEV_PRINTER:
+        case OUTDEV_PDF:
+            xOutput->SetBackground(rOutput.GetBackground());
+            xOutput->Erase();
+            break;
+    }
 
     //set ReallyVisible to match Visible, we restore the original state after Paint
     WindowImpl* pImpl = pWindow->ImplGetWindowImpl();
@@ -1297,7 +1309,19 @@ void SalInstanceWidget::DoRecursivePaint(vcl::Window* pWindow, const Point& rRen
 
     pImpl->mbReallyVisible = bRVisible;
 
-    rOutput.DrawOutDev(rRenderLogicPos, aRenderLogicSize, Point(), aTempLogicSize, *xOutput);
+    switch (rOutput.GetOutDevType())
+    {
+        case OUTDEV_WINDOW:
+        case OUTDEV_VIRDEV:
+            rOutput.DrawOutDev(rRenderLogicPos, aRenderLogicSize, Point(), aTempLogicSize,
+                               *xOutput);
+            break;
+        case OUTDEV_PRINTER:
+        case OUTDEV_PDF:
+            rOutput.DrawBitmapEx(rRenderLogicPos, aRenderLogicSize,
+                                 xOutput->GetBitmapEx(Point(), aTempLogicSize));
+            break;
+    }
 
     xOutput.disposeAndClear();
 
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 38205154be22..213ccfb8624c 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -4210,7 +4210,19 @@ public:
 
         VclPtr<VirtualDevice> xOutput(VclPtr<VirtualDevice>::Create(DeviceFormat::DEFAULT));
         xOutput->SetOutputSizePixel(aSize);
-        xOutput->DrawOutDev(Point(), aSize, rPos, aSize, rOutput);
+
+        switch (rOutput.GetOutDevType())
+        {
+            case OUTDEV_WINDOW:
+            case OUTDEV_VIRDEV:
+                xOutput->DrawOutDev(Point(), aSize, rPos, aSize, rOutput);
+                break;
+            case OUTDEV_PRINTER:
+            case OUTDEV_PDF:
+                xOutput->SetBackground(rOutput.GetBackground());
+                xOutput->Erase();
+                break;
+        }
 
         cairo_surface_t* pSurface = get_underlying_cairo_surface(*xOutput);
         cairo_t* cr = cairo_create(pSurface);
@@ -4228,7 +4240,17 @@ public:
         gtk_widget_size_allocate(m_pWidget, &aOrigAllocation, 0);
 #endif
 
-        rOutput.DrawOutDev(rPos, aSize, Point(), aSize, *xOutput);
+        switch (rOutput.GetOutDevType())
+        {
+            case OUTDEV_WINDOW:
+            case OUTDEV_VIRDEV:
+                rOutput.DrawOutDev(rPos, aSize, Point(), aSize, *xOutput);
+                break;
+            case OUTDEV_PRINTER:
+            case OUTDEV_PDF:
+                rOutput.DrawBitmapEx(rPos, xOutput->GetBitmapEx(Point(), aSize));
+                break;
+        }
 
         if (bAnimations)
             g_object_set(pSettings, "gtk-enable-animations", true, nullptr);


More information about the Libreoffice-commits mailing list