summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/texteng.hxx3
-rw-r--r--include/vcl/vclmedit.hxx5
-rw-r--r--vcl/source/edit/texteng.cxx7
-rw-r--r--vcl/source/edit/vclmedit.cxx74
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()