Kaydet (Commit) ea191cf9 authored tarafından Jan-Marek Glogowski's avatar Jan-Marek Glogowski Kaydeden (comit) Tomaž Vajngerl

tdf#90297 use field colors for math's edit engine

This adds a maTextColor to the EditEngine, which will override
the default AutoColor.

There is also a NOCOLORS mode and I thought about using it
instead, but it defaults to COL_BLACK and overriding this seems
wrong.

Since the EditEngine does the whole drawing and now has the
explicit FieldColor() and FieldTextColor() for background and
text, my guess is we don't need an ApplySettings implementation.

Change-Id: I6c2ecc843a3e07de98f97c86fc00a3b83cb78d97
Reviewed-on: https://gerrit.libreoffice.org/72197
Tested-by: Jenkins
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst d14d1341
......@@ -183,6 +183,16 @@ Color const & EditEngine::GetBackgroundColor() const
return pImpEditEngine->GetBackgroundColor();
}
void EditEngine::SetTextColor( const Color& rColor )
{
pImpEditEngine->SetTextColor( rColor );
}
Color const & EditEngine::GetTextColor() const
{
return pImpEditEngine->GetTextColor();
}
Color EditEngine::GetAutoColor() const
{
return pImpEditEngine->GetAutoColor();
......
......@@ -463,6 +463,7 @@ private:
EditSelectionEngine aSelEngine;
Color maBackgroundColor;
Color maTextColor;
sal_uInt16 nStretchX;
sal_uInt16 nStretchY;
......@@ -678,6 +679,9 @@ private:
void SetBackgroundColor( const Color& rColor ) { maBackgroundColor = rColor; }
const Color& GetBackgroundColor() const { return maBackgroundColor; }
void SetTextColor( const Color& rColor ) { maTextColor = rColor; }
const Color& GetTextColor() const { return maTextColor; }
long CalcVertLineSpacing(Point& rStartPos) const;
Color GetAutoColor() const;
......
......@@ -124,6 +124,7 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) :
eDefLanguage = LANGUAGE_DONTKNOW;
maBackgroundColor = COL_AUTO;
maTextColor = COL_AUTO;
nAsianCompressionMode = CharCompressType::NONE;
......
......@@ -4418,7 +4418,9 @@ Reference < i18n::XExtendedInputSequenceChecker > const & ImpEditEngine::ImplGet
Color ImpEditEngine::GetAutoColor() const
{
Color aColor = GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor;
Color aColor = GetTextColor();
if ( aColor == COL_AUTO )
aColor = GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor;
if ( GetBackgroundColor() != COL_AUTO )
{
......
......@@ -216,6 +216,8 @@ public:
void SetBackgroundColor( const Color& rColor );
Color const & GetBackgroundColor() const;
void SetTextColor( const Color& rColor );
Color const & GetTextColor() const;
Color GetAutoColor() const;
void EnableAutoColor( bool b );
void ForceAutoColor( bool b );
......
......@@ -75,7 +75,6 @@ public:
OutputDevice* GetRefDev() { return pRefDev.get(); }
};
void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool, const SvtLinguOptions &rOpt);
class SM_DLLPUBLIC SmDocShell : public SfxObjectShell, public SfxListener
{
......@@ -215,6 +214,8 @@ public:
oox::drawingml::DocumentType documentType);
void writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding);
void readFormulaOoxml( oox::formulaimport::XmlStream& stream );
void UpdateEditEngineDefaultFonts();
};
#endif
......
......@@ -117,8 +117,6 @@ public:
void Flush();
void DeleteEditView();
void ApplyColorConfigValues(const svtools::ColorConfig& rColorCfg);
bool HandleWheelCommands(const CommandEvent& rCEvt);
bool IsInlineEditEnabled();
void StartCursorMove();
......
......@@ -275,8 +275,12 @@ void SmDocShell::ArrangeFormula()
maAccText.clear();
}
void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool, const SvtLinguOptions &rOpt)
void SmDocShell::UpdateEditEngineDefaultFonts()
{
assert(mpEditEngineItemPool);
if (!mpEditEngineItemPool)
return;
// set fonts to be used
struct FontDta {
LanguageType const nFallbackLang;
......@@ -295,9 +299,10 @@ void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool, const SvtLinguO
{ LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
DefaultFontType::CTL_TEXT, EE_CHAR_FONTINFO_CTL }
};
aTable[0].nLang = rOpt.nDefaultLanguage;
aTable[1].nLang = rOpt.nDefaultLanguage_CJK;
aTable[2].nLang = rOpt.nDefaultLanguage_CTL;
aTable[0].nLang = maLinguOptions.nDefaultLanguage;
aTable[1].nLang = maLinguOptions.nDefaultLanguage_CJK;
aTable[2].nLang = maLinguOptions.nDefaultLanguage_CTL;
for (FontDta & rFntDta : aTable)
{
......@@ -305,7 +310,7 @@ void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool, const SvtLinguO
rFntDta.nFallbackLang : rFntDta.nLang;
vcl::Font aFont = OutputDevice::GetDefaultFont(
rFntDta.nFontType, nLang, GetDefaultFontFlags::OnlyOne );
rEditEngineItemPool.SetPoolDefaultItem(
mpEditEngineItemPool->SetPoolDefaultItem(
SvxFontItem( aFont.GetFamilyType(), aFont.GetFamilyName(),
aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(),
rFntDta.nFontInfoId ) );
......@@ -316,11 +321,11 @@ void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool, const SvtLinguO
Application::GetDefaultDevice()->LogicToPixel(
Size( 0, 11 ), MapMode( MapUnit::MapPoint ) ).Height(), 100,
EE_CHAR_FONTHEIGHT );
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CJK );
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CTL );
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt );
}
EditEngine& SmDocShell::GetEditEngine()
......@@ -333,7 +338,7 @@ EditEngine& SmDocShell::GetEditEngine()
mpEditEngineItemPool = EditEngine::CreatePool();
SetEditEngineDefaultFonts(*mpEditEngineItemPool, maLinguOptions);
UpdateEditEngineDefaultFonts();
mpEditEngine.reset( new EditEngine( mpEditEngineItemPool ) );
......@@ -343,6 +348,10 @@ EditEngine& SmDocShell::GetEditEngine()
mpEditEngine->SetDefTab( sal_uInt16(
Application::GetDefaultDevice()->GetTextWidth("XXXX")) );
const StyleSettings& rStyleSettings = Application::GetDefaultDevice()->GetSettings().GetStyleSettings();
mpEditEngine->SetTextColor(rStyleSettings.GetFieldTextColor());
mpEditEngine->SetBackgroundColor(rStyleSettings.GetFieldColor());
mpEditEngine->SetControlWord(
(mpEditEngine->GetControlWord() | EEControlBits::AUTOINDENTING) &
EEControlBits(~EEControlBits::UNDOATTRIBS) &
......
......@@ -86,8 +86,6 @@ SmEditWindow::SmEditWindow( SmCmdBoxWindow &rMyCmdBoxWin ) :
// Even RTL languages don't use RTL for math
EnableRTL( false );
ApplyColorConfigValues( SM_MOD()->GetColorConfig() );
// compare DataChanged
SetBackground( GetSettings().GetStyleSettings().GetWindowColor() );
......@@ -190,25 +188,15 @@ EditEngine * SmEditWindow::GetEditEngine()
return pEditEng;
}
void SmEditWindow::ApplyColorConfigValues( const svtools::ColorConfig &rColorCfg )
{
// Note: SetBackground still done in SmEditWindow::DataChanged
SetTextColor( rColorCfg.GetColorValue(svtools::FONTCOLOR).nColor );
Invalidate();
}
void SmEditWindow::DataChanged( const DataChangedEvent& )
void SmEditWindow::DataChanged( const DataChangedEvent& rDCEvt )
{
const StyleSettings aSettings( GetSettings().GetStyleSettings() );
// FIXME RenderContext
Window::DataChanged( rDCEvt );
ApplyColorConfigValues( SM_MOD()->GetColorConfig() );
SetBackground( aSettings.GetWindowColor() );
// edit fields in other Applications use this font instead of
// the application font thus we use this one too
SetPointFont(*this, aSettings.GetFieldFont() /*aSettings.GetAppFont()*/);
if (!((rDCEvt.GetType() == DataChangedEventType::FONTS) ||
(rDCEvt.GetType() == DataChangedEventType::FONTSUBSTITUTION) ||
((rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
(rDCEvt.GetFlags() & AllSettingsFlags::STYLE))))
return;
EditEngine *pEditEngine = GetEditEngine();
SmDocShell *pDoc = GetDoc();
......@@ -218,10 +206,13 @@ void SmEditWindow::DataChanged( const DataChangedEvent& )
//!
//! see also SmDocShell::GetEditEngine() !
//!
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
pEditEngine->SetDefTab(sal_uInt16(GetTextWidth("XXXX")));
pDoc->UpdateEditEngineDefaultFonts();
SetEditEngineDefaultFonts(pDoc->GetEditEngineItemPool(), pDoc->GetLinguOptions());
pEditEngine->SetDefTab(sal_uInt16(GetTextWidth("XXXX")));
pEditEngine->SetTextColor(rStyleSettings.GetFieldTextColor());
pEditEngine->SetBackgroundColor(rStyleSettings.GetFieldColor());
// forces new settings to be used
// unfortunately this resets the whole edit engine
......@@ -229,10 +220,12 @@ void SmEditWindow::DataChanged( const DataChangedEvent& )
OUString aTxt( pEditEngine->GetText() );
pEditEngine->Clear(); //incorrect font size
pEditEngine->SetText( aTxt );
AdjustScrollBars();
Resize();
}
AdjustScrollBars();
Resize();
Invalidate();
}
IMPL_LINK_NOARG( SmEditWindow, ModifyTimerHdl, Timer *, void )
......@@ -349,7 +342,6 @@ void SmEditWindow::Command(const CommandEvent& rCEvt)
}
}
bool SmEditWindow::HandleWheelCommands( const CommandEvent &rCEvt )
{
bool bCommandHandled = false; // true if the CommandEvent needs not
......
......@@ -143,9 +143,6 @@ void SmModule::ApplyColorConfigValues( const svtools::ColorConfig &rColorCfg )
{
SmViewShell *pSmView = static_cast<SmViewShell *>(pViewShell);
pSmView->GetGraphicWindow().ApplyColorConfigValues( rColorCfg );
SmEditWindow *pEditWin = pSmView->GetEditWindow();
if (pEditWin)
pEditWin->ApplyColorConfigValues( rColorCfg );
}
pViewShell = SfxViewShell::GetNext( *pViewShell );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment