vcl/source/edit/texteng.cxx       |    3 +++
 vcl/source/uitest/uiobject.cxx    |    5 +++++
 vcl/source/window/aboutdialog.cxx |    2 ++
 3 files changed, 10 insertions(+)

New commits:
commit 7eb37a422f2e66bc177d72404c53659a248661ca
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Mon Aug 12 11:35:51 2019 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Mon Aug 12 14:36:22 2019 +0200

    tdf#118856 vcl: avoid flicker in the about dialog
    
    There were two problems here:
    
    1) The flickering widget in question is VclMultiLineEdit, but it wasn't
    like its own painting caused a flicker, rather the calling
    vcl::Window::PushPaintHelper() already erased the widget and later the
    widget painted itself. So the easy way with vcl::BufferDevice is not
    enough here. VclMultiLineEdit seems to be working with double buffering
    just fine, so enable that in the vcl::AboutDialog ctor.
    
    2) Now that text did not flicker, its background was wrong. In case the
    NWF determines some gray background, the background was white for most
    text when there was no selection.
    
    When there was selection, then the after-selection area (in a single
    line) was fine, but nothing else.
    
    It seems TextEngine::ImpPaint() assumes that no need to set a default
    text fill color before drawing text, but the above shows that there is
    difference between the starting state and after clearing away a custom
    color with SetTextFillColor(). So fix this problem by always explicitly
    calling SetTextFillColor() before text paint: either setting the
    selection color or the default one.
    
    This brings improvement for the Windows GDI backend; Windows GL, Linux
    gen/gtk/gtk3 is unchanged in practice.
    
    Change-Id: Ie7ff3a7f36bedf73424ea579a00588bd8858d6c4
    Reviewed-on: https://gerrit.libreoffice.org/77219
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins

diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index 333a1a201e69..0b5303fcf9e4 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -1961,6 +1961,7 @@ void TextEngine::ImpPaint( OutputDevice* pOutDev, const 
Point& rStartPos, tools:
                                                 {
                                                     const sal_Int32 nL = 
pSelStart->GetIndex() - nTmpIndex;
                                                     pOutDev->SetFont( aFont);
+                                                    
pOutDev->SetTextFillColor();
                                                     aPos.setX( rStartPos.X() + 
ImpGetOutputOffset( nPara, &rLine, nTmpIndex, nTmpIndex+nL ) );
                                                     pOutDev->DrawText( aPos, 
pPortion->GetNode()->GetText(), nTmpIndex, nL );
                                                     nTmpIndex = nTmpIndex + nL;
@@ -1986,6 +1987,7 @@ void TextEngine::ImpPaint( OutputDevice* pOutDev, const 
Point& rStartPos, tools:
                                                 if ( nTmpIndex < nEnd )
                                                 {
                                                     nL = nEnd-nTmpIndex;
+                                                    
pOutDev->SetTextFillColor();
                                                     aPos.setX( rStartPos.X() + 
ImpGetOutputOffset( nPara, &rLine, nTmpIndex, nTmpIndex+nL ) );
                                                     pOutDev->DrawText( aPos, 
pPortion->GetNode()->GetText(), nTmpIndex, nEnd-nTmpIndex );
                                                 }
@@ -1994,6 +1996,7 @@ void TextEngine::ImpPaint( OutputDevice* pOutDev, const 
Point& rStartPos, tools:
                                         }
                                         if ( !bDone )
                                         {
+                                            pOutDev->SetTextFillColor();
                                             aPos.setX( rStartPos.X() + 
ImpGetOutputOffset( nPara, &rLine, nTmpIndex, nEnd ) );
                                             pOutDev->DrawText( aPos, 
pPortion->GetNode()->GetText(), nTmpIndex, nEnd-nTmpIndex );
                                         }
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index aa69bd0d60b6..66d5ed2d2f18 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -273,6 +273,11 @@ WindowUIObject::WindowUIObject(const VclPtr<vcl::Window>& 
xWindow):
 
 StringMap WindowUIObject::get_state()
 {
+    // Double-buffering is not interesting for uitesting, but can result in 
direct paint for a
+    // double-buffered widget, which is incorrect.
+    if (mxWindow->SupportsDoubleBuffering())
+        mxWindow->RequestDoubleBuffering(false);
+
     StringMap aMap;
     aMap["Visible"] = OUString::boolean(mxWindow->IsVisible());
     aMap["ReallyVisible"] = OUString::boolean(mxWindow->IsReallyVisible());
diff --git a/vcl/source/window/aboutdialog.cxx 
b/vcl/source/window/aboutdialog.cxx
index ba09f423ab05..10074a1a3eac 100644
--- a/vcl/source/window/aboutdialog.cxx
+++ b/vcl/source/window/aboutdialog.cxx
@@ -56,6 +56,8 @@ AboutDialog::AboutDialog(vcl::Window* pParent, WinBits 
nStyle, Dialog::InitFlag
     m_xBuilder->get(m_xDescriptionText, "description");
     m_xBuilder->get(m_xCopyrightText, "copyright");
     m_xBuilder->get(m_xBuildIdLink, "buildIdLink");
+
+    m_xVersion->RequestDoubleBuffering(true);
 }
 
 void AboutDialog::set_content_area(VclBox* pBox)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to