[Libreoffice-commits] core.git: include/vcl vcl/source

Jan-Marek Glogowski (via logerrit) logerrit at kemper.freedesktop.org
Tue Nov 26 19:52:23 UTC 2019


 include/vcl/texteng.hxx      |    3 -
 include/vcl/vclmedit.hxx     |    5 --
 vcl/source/edit/texteng.cxx  |    7 +---
 vcl/source/edit/vclmedit.cxx |   74 ++++++++++++++++++++++++++++++-------------
 4 files changed, 58 insertions(+), 31 deletions(-)

New commits:
commit b1e73fd49661e07e6085310f3f6ecc6ade2a3762
Author:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Tue Nov 26 14:39:30 2019 +0000
Commit:     Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Tue Nov 26 20:51:04 2019 +0100

    tdf#127403 Revert "VCL keep / return the original set TextEngine font"
    
    This reverts commit cc223fa12a61ba0e580b884386a7f5d7efd0541f.
    
    All the other attenps to fix this seem to cause timeouts in the
    Jenkins clang_dbgutil build. I don't have one around and no time
    to investigate further, so let's see, if the revert passes.
    
    Change-Id: Ib915185eaf79073523351705baf28df3c62906f1
    Reviewed-on: https://gerrit.libreoffice.org/83654
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>

diff --git a/include/vcl/texteng.hxx b/include/vcl/texteng.hxx
index f265ec1f05e7..60aa359e3fd6 100644
--- a/include/vcl/texteng.hxx
+++ b/include/vcl/texteng.hxx
@@ -106,7 +106,6 @@ class VCL_DLLPUBLIC TextEngine : public SfxBroadcaster
     std::unique_ptr<LocaleDataWrapper> mpLocaleDataWrapper;
 
     vcl::Font           maFont;
-    vcl::Font           maOrigFont;  // original font from SetFont
     Color               maTextColor;
 
     sal_Int32           mnMaxTextLen;
@@ -221,7 +220,7 @@ public:
     sal_Int32           GetTextLen( const TextSelection& rSel ) const;
 
     void                SetFont( const vcl::Font& rFont );
-    const vcl::Font&    GetFont() const { return maOrigFont; }
+    const vcl::Font&    GetFont() const { return maFont; }
 
     void                SetLeftMargin( sal_uInt16 n );
 
diff --git a/include/vcl/vclmedit.hxx b/include/vcl/vclmedit.hxx
index 1cb3b8114149..61367af5893e 100644
--- a/include/vcl/vclmedit.hxx
+++ b/include/vcl/vclmedit.hxx
@@ -97,10 +97,7 @@ protected:
     TextView*       GetTextView() const;
     ExtTextEngine*  GetTextEngine() const;
 
-    void ApplySettings(vcl::RenderContext&) override;
-    void ApplyBackgroundSettings(vcl::RenderContext&, const StyleSettings&);
-    void ApplyFontSettings(vcl::RenderContext&, const StyleSettings&);
-
+    virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
 public:
                     VclMultiLineEdit( vcl::Window* pParent,
                                       WinBits nWinStyle );
diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index 8f1b27cfa940..397a1de8a23a 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -167,9 +167,8 @@ void TextEngine::SetActiveView( TextView* pTextView )
 
 void TextEngine::SetFont( const vcl::Font& rFont )
 {
-    if (rFont == maOrigFont)
+    if ( rFont == maFont )
         return;
-    maOrigFont = rFont;
 
     maFont = rFont;
     // #i40221# As the font's color now defaults to transparent (since i35764)
@@ -204,9 +203,9 @@ void TextEngine::SetFont( const vcl::Font& rFont )
     for ( auto nView = mpViews->size(); nView; )
     {
         TextView* pView = (*mpViews)[ --nView ];
-        pView->GetWindow()->SetInputContext(InputContext(maFont, !pView->IsReadOnly()
-            ? InputContextFlags::Text|InputContextFlags::ExtText : InputContextFlags::NONE));
+        pView->GetWindow()->SetInputContext( InputContext( GetFont(), !pView->IsReadOnly() ? InputContextFlags::Text|InputContextFlags::ExtText : InputContextFlags::NONE ) );
     }
+
 }
 
 void TextEngine::SetMaxTextLen( sal_Int32 nLen )
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index cc2b52e658b7..0225f79d487e 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -914,8 +914,36 @@ WinBits VclMultiLineEdit::ImplInitStyle( WinBits nStyle )
     return nStyle;
 }
 
-void VclMultiLineEdit::ApplyBackgroundSettings(vcl::RenderContext& rRenderContext, const StyleSettings& rStyleSettings)
+void VclMultiLineEdit::ApplySettings(vcl::RenderContext& rRenderContext)
 {
+    const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
+
+    // The Font has to be adjusted, as the TextEngine does not take care of
+    // TextColor/Background
+
+    Color aTextColor = rStyleSettings.GetFieldTextColor();
+    if (IsControlForeground())
+        aTextColor = GetControlForeground();
+
+    if (!IsEnabled())
+        aTextColor = rStyleSettings.GetDisableColor();
+
+    vcl::Font aFont = rStyleSettings.GetFieldFont();
+    aFont.SetTransparent(IsPaintTransparent());
+    ApplyControlFont(rRenderContext, aFont);
+
+    vcl::Font theFont = rRenderContext.GetFont();
+    theFont.SetColor(aTextColor);
+    if (IsPaintTransparent())
+        theFont.SetFillColor(COL_TRANSPARENT);
+    else
+        theFont.SetFillColor(IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor());
+
+    pImpVclMEdit->GetTextWindow()->SetFont(theFont);
+    // FIXME: next call causes infinite invalidation loop, rethink how to properly fix this situation
+    // pImpVclMEdit->GetTextWindow()->GetTextEngine()->SetFont(theFont);
+    pImpVclMEdit->GetTextWindow()->SetTextColor(aTextColor);
+
     if (IsPaintTransparent())
     {
         pImpVclMEdit->GetTextWindow()->SetPaintTransparent(true);
@@ -935,8 +963,10 @@ void VclMultiLineEdit::ApplyBackgroundSettings(vcl::RenderContext& rRenderContex
     }
 }
 
-void VclMultiLineEdit::ApplyFontSettings(vcl::RenderContext& rRenderContext, const StyleSettings& rStyleSettings)
+void VclMultiLineEdit::ImplInitSettings(bool bBackground)
 {
+    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
+
     // The Font has to be adjusted, as the TextEngine does not take care of
     // TextColor/Background
 
@@ -948,36 +978,38 @@ void VclMultiLineEdit::ApplyFontSettings(vcl::RenderContext& rRenderContext, con
 
     vcl::Font aFont = rStyleSettings.GetFieldFont();
     aFont.SetTransparent(IsPaintTransparent());
-    ApplyControlFont(rRenderContext, aFont);
+    ApplyControlFont(*this, aFont);
 
-    vcl::Font TheFont = rRenderContext.GetFont();
+    vcl::Font TheFont = GetFont();
     TheFont.SetColor(aTextColor);
     if (IsPaintTransparent())
         TheFont.SetFillColor(COL_TRANSPARENT);
     else
         TheFont.SetFillColor(IsControlBackground() ? GetControlBackground() : rStyleSettings.GetFieldColor());
-
     pImpVclMEdit->GetTextWindow()->SetFont(TheFont);
     pImpVclMEdit->GetTextWindow()->GetTextEngine()->SetFont(TheFont);
     pImpVclMEdit->GetTextWindow()->SetTextColor(aTextColor);
-}
-
-void VclMultiLineEdit::ApplySettings(vcl::RenderContext& rRenderContext)
-{
-    const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
-
-    ApplyFontSettings(rRenderContext, rStyleSettings);
-    ApplyBackgroundSettings(rRenderContext, rStyleSettings);
-}
-
-void VclMultiLineEdit::ImplInitSettings(bool bBackground)
-{
-    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-
-    ApplyFontSettings(*this, rStyleSettings);
 
     if (bBackground)
-        ApplyBackgroundSettings(*this, rStyleSettings);
+    {
+        if (IsPaintTransparent())
+        {
+            pImpVclMEdit->GetTextWindow()->SetPaintTransparent(true);
+            pImpVclMEdit->GetTextWindow()->SetBackground();
+            pImpVclMEdit->GetTextWindow()->SetControlBackground();
+            SetBackground();
+            SetControlBackground();
+        }
+        else
+        {
+            if (IsControlBackground())
+                pImpVclMEdit->GetTextWindow()->SetBackground(GetControlBackground());
+            else
+                pImpVclMEdit->GetTextWindow()->SetBackground(rStyleSettings.GetFieldColor());
+            // also adjust for VclMultiLineEdit as the TextComponent might hide Scrollbars
+            SetBackground(pImpVclMEdit->GetTextWindow()->GetBackground());
+        }
+    }
 }
 
 void VclMultiLineEdit::Modify()


More information about the Libreoffice-commits mailing list