vcl/qt5/QtGraphics_Controls.cxx | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 7a6cbff566122113b753fd31e7c73be8725f48f2
Author: Michael Weghorn <[email protected]>
AuthorDate: Tue Jan 31 16:08:53 2023 +0100
Commit: Michael Stahl <[email protected]>
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 <[email protected]>
Tested-by: Jenkins
(cherry picked from commit 6f4b8b7cfe2907b7da46eec6951a0e09b836a6de)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146402
Reviewed-by: Michael Weghorn <[email protected]>
Reviewed-by: Michael Stahl <[email protected]>
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());