From 10a5df7de19c86b362976b4bd8cee32da4413547 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 7 Jul 2020 20:27:51 +0100 Subject: improve weld::Widget::draw rendering a widget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1f49e3e7829f41d7eb4ffc137a9b0ab5c47d2cce Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98375 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- vcl/source/app/salvtables.cxx | 3 +++ vcl/unx/gtk3/gtk3gtkinst.cxx | 11 ++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 81c2e38085c3..4121165b37a5 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1137,7 +1137,10 @@ void SalInstanceWidget::draw(OutputDevice& rOutput, const tools::Rectangle& rRec { Size aOrigSize(m_xWidget->GetSizePixel()); m_xWidget->SetSizePixel(rRect.GetSize()); + rOutput.Push(PushFlags::CLIPREGION); + rOutput.IntersectClipRegion(rRect); m_xWidget->Draw(&rOutput, rRect.TopLeft(), DrawFlags::NONE); + rOutput.Pop(); m_xWidget->SetSizePixel(aOrigSize); } diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index cba5c662baff..5ba41f9e028a 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3047,10 +3047,10 @@ public: // has to be mapped for draw to work bool bAlreadyMapped = gtk_widget_get_mapped(m_pWidget); - if (!bAlreadyVisible) - gtk_widget_show(m_pWidget); if (!bAlreadyRealized) gtk_widget_realize(m_pWidget); + if (!bAlreadyVisible) + gtk_widget_show(m_pWidget); if (!bAlreadyMapped) gtk_widget_map(m_pWidget); @@ -3065,7 +3065,7 @@ public: aOrigAllocation.y, static_cast(aSize.Width()), static_cast(aSize.Height()) }; - gtk_widget_set_allocation(m_pWidget, &aNewAllocation); + gtk_widget_size_allocate(m_pWidget, &aNewAllocation); if (GTK_IS_CONTAINER(m_pWidget)) gtk_container_resize_children(GTK_CONTAINER(m_pWidget)); @@ -3080,13 +3080,14 @@ public: cairo_destroy(cr); gtk_widget_set_allocation(m_pWidget, &aOrigAllocation); + gtk_widget_size_allocate(m_pWidget, &aOrigAllocation); rOutput.DrawOutDev(rRect.TopLeft(), aSize, Point(), aSize, *xOutput); - if (!bAlreadyVisible) - gtk_widget_hide(m_pWidget); if (!bAlreadyMapped) gtk_widget_unmap(m_pWidget); + if (!bAlreadyVisible) + gtk_widget_hide(m_pWidget); if (!bAlreadyRealized) gtk_widget_unrealize(m_pWidget); } -- cgit v1.2.3