diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-09-28 12:10:33 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-09-28 16:42:18 +0200 |
commit | a0f6d3865dd113f38fd3aa673075e9fecd06f3cd (patch) | |
tree | 79fb1fd66867583f4c92549cad316195bb3435e8 | |
parent | e5d086c31e6765430f8c366196fb4a2b0c25924d (diff) |
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@redhat.com>
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 36ea3f96fa27..7782205fde56 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -4358,7 +4358,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); @@ -4376,7 +4388,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); |