diff options
-rw-r--r-- | include/vcl/texteng.hxx | 3 | ||||
-rw-r--r-- | include/vcl/vclmedit.hxx | 5 | ||||
-rw-r--r-- | vcl/source/edit/texteng.cxx | 7 | ||||
-rw-r--r-- | vcl/source/edit/vclmedit.cxx | 74 |
4 files changed, 58 insertions, 31 deletions
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() |