vcl/qt5/QtGraphics_Controls.cxx | 1 + 1 file changed, 1 insertion(+) New commits: commit 7a6cbff566122113b753fd31e7c73be8725f48f2 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 31 16:08:53 2023 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Thu Feb 2 11:27:30 2023 +0000
tdf#152073 qt: Draw background when drawing frame For native drawing of a frame (border), use the window background color as default color. As mentioned in commit f39f21d92ec83c3a5062f29dd26214fc83012c06 ("tdf#138010 (IV) VclScrolledWindow: Use actual border width"), the Qt/KDE Breeze style uses a frame width of 2, with the actual 1 pixel border being surrounded by a 1 pixel padding/margin. Transparent background did not ensure that the 1 pixel padding/margin is repainted and could thus result in artifacts from what was painted to that location previously (s. the Basic IDE editor example from tdf#152073). Use the window background for the default image color when drawing a frame to avoid this. The gtk3 VCL plugin also explicitly draws a background for the corresponding code path, using `gtk_render_background`. An alternative might be to explicitly draw the background further up the call stack, or pass an explicit background color from `DecorationView::DrawFrame` and only apply a default color in `QtGraphics_Controls::drawNativeControl` when a background color (other than `COL_DEFAULT`) is passed to that method. Sample bt for gtk3: 1 GtkSalGraphics::drawNativeControl salnativewidgets-gtk.cxx 1835 0x7fffe6271f92 2 SalGraphics::DrawNativeControl salgdilayout.cxx 807 0x7fffee887739 3 OutputDevice::DrawNativeControl nativecontrols.cxx 287 0x7fffee58906e 4 (anonymous namespace)::ImplDrawFrame decoview.cxx 600 0x7fffee1b2055 5 DecorationView::DrawFrame decoview.cxx 886 0x7fffee1b32c8 6 ImplSmallBorderWindowView::DrawWindow brdwin.cxx 742 0x7fffee0ea3ea 7 ImplBorderWindow::Paint brdwin.cxx 1630 0x7fffee0ee99a 8 PaintHelper::DoPaint paint.cxx 313 0x7fffee0c9f1c 9 vcl::Window::ImplCallPaint paint.cxx 617 0x7fffee0cb4b3 10 PaintHelper::~PaintHelper paint.cxx 552 0x7fffee0cae14 11 vcl::Window::ImplCallPaint paint.cxx 623 0x7fffee0cb513 Many thanks to Rafael Lima for the very helpful analysis in [1] and [2]. [1] https://bugs.documentfoundation.org/show_bug.cgi?id=152073#c2 [2] https://bugs.documentfoundation.org/show_bug.cgi?id=152073#c3 Change-Id: I08e6d05d0fc3d0e54952a65cd28dee92615df0a3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146419 Reviewed-by: Rafael Lima <rafael.palma.l...@gmail.com> Tested-by: Jenkins (cherry picked from commit 6f4b8b7cfe2907b7da46eec6951a0e09b836a6de) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146402 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/vcl/qt5/QtGraphics_Controls.cxx b/vcl/qt5/QtGraphics_Controls.cxx index e6e3d820da59..e08b84719e61 100644 --- a/vcl/qt5/QtGraphics_Controls.cxx +++ b/vcl/qt5/QtGraphics_Controls.cxx @@ -283,6 +283,7 @@ bool QtGraphics_Controls::drawNativeControl(ControlType type, ControlPart part, break; } [[fallthrough]]; // QPalette::Window + case ControlType::Frame: case ControlType::Menubar: case ControlType::WindowBackground: m_image->fill(QApplication::palette().color(QPalette::Window).rgb());