diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.cpp b/src/cascadia/TerminalSettingsEditor/Appearances.cpp index 3fcbfb58a2c..3a9961e3588 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.cpp +++ b/src/cascadia/TerminalSettingsEditor/Appearances.cpp @@ -221,6 +221,26 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // box, prevent it from ever being changed again. _NotifyChanges(L"UseDesktopBGImage", L"BackgroundImageSettingsVisible"); } + else if (viewModelProperty == L"Foreground") + { + _NotifyChanges(L"ForegroundPreview"); + } + else if (viewModelProperty == L"Background") + { + _NotifyChanges(L"BackgroundPreview"); + } + else if (viewModelProperty == L"SelectionBackground") + { + _NotifyChanges(L"SelectionBackgroundPreview"); + } + else if (viewModelProperty == L"CursorColor") + { + _NotifyChanges(L"CursorColorPreview"); + } + else if (viewModelProperty == L"DarkColorSchemeName" || viewModelProperty == L"LightColorSchemeName") + { + _NotifyChanges(L"CurrentColorScheme"); + } }); // Cache the original BG image path. If the user clicks "Use desktop @@ -893,7 +913,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _NotifyChanges(L"CurrentColorScheme"); } - Editor::ColorSchemeViewModel AppearanceViewModel::CurrentColorScheme() + Editor::ColorSchemeViewModel AppearanceViewModel::CurrentColorScheme() const { const auto schemeName{ DarkColorSchemeName() }; const auto allSchemes{ SchemesList() }; @@ -915,6 +935,41 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation LightColorSchemeName(val.Name()); } +#define GET_COLOR_PREVIEW(appearanceVal, deducedVal) \ + if (const auto& modelVal = appearanceVal) \ + { \ + /* user defined an override value */ \ + return Windows::UI::Color{ \ + .A = 255, \ + .R = modelVal.Value().R, \ + .G = modelVal.Value().G, \ + .B = modelVal.Value().B \ + }; \ + } \ + /* set to null --> deduce value from color scheme */ \ + return deducedVal; + + Windows::UI::Color AppearanceViewModel::ForegroundPreview() const + { + GET_COLOR_PREVIEW(_appearance.Foreground(), CurrentColorScheme().ForegroundColor().Color()); + } + + Windows::UI::Color AppearanceViewModel::BackgroundPreview() const + { + GET_COLOR_PREVIEW(_appearance.Background(), CurrentColorScheme().BackgroundColor().Color()); + } + + Windows::UI::Color AppearanceViewModel::SelectionBackgroundPreview() const + { + GET_COLOR_PREVIEW(_appearance.SelectionBackground(), CurrentColorScheme().SelectionBackgroundColor().Color()); + } + + Windows::UI::Color AppearanceViewModel::CursorColorPreview() const + { + GET_COLOR_PREVIEW(_appearance.CursorColor(), CurrentColorScheme().CursorColor().Color()); + } +#undef GET_COLOR_PREVIEW + DependencyProperty Appearances::_AppearanceProperty{ nullptr }; Appearances::Appearances() diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.h b/src/cascadia/TerminalSettingsEditor/Appearances.h index 27a58073a8f..2e09ce53290 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.h +++ b/src/cascadia/TerminalSettingsEditor/Appearances.h @@ -121,9 +121,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void SetBackgroundImagePath(winrt::hstring path); void ClearColorScheme(); - Editor::ColorSchemeViewModel CurrentColorScheme(); + Editor::ColorSchemeViewModel CurrentColorScheme() const; void CurrentColorScheme(const Editor::ColorSchemeViewModel& val); + Windows::UI::Color ForegroundPreview() const; + Windows::UI::Color BackgroundPreview() const; + Windows::UI::Color SelectionBackgroundPreview() const; + Windows::UI::Color CursorColorPreview() const; + WINRT_PROPERTY(bool, IsDefault, false); // These settings are not defined in AppearanceConfig, so we grab them @@ -147,6 +152,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation OBSERVABLE_PROJECTED_SETTING(_appearance, BackgroundImageAlignment); OBSERVABLE_PROJECTED_SETTING(_appearance, IntenseTextStyle); OBSERVABLE_PROJECTED_SETTING(_appearance, AdjustIndistinguishableColors); + OBSERVABLE_PROJECTED_SETTING(_appearance, Foreground); + OBSERVABLE_PROJECTED_SETTING(_appearance, Background); + OBSERVABLE_PROJECTED_SETTING(_appearance, SelectionBackground); + OBSERVABLE_PROJECTED_SETTING(_appearance, CursorColor); WINRT_OBSERVABLE_PROPERTY(Windows::Foundation::Collections::IObservableVector, SchemesList, _propertyChangedHandlers, nullptr); private: diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.idl b/src/cascadia/TerminalSettingsEditor/Appearances.idl index 0907e5f8f3d..a53c8efe4f1 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.idl +++ b/src/cascadia/TerminalSettingsEditor/Appearances.idl @@ -45,6 +45,11 @@ namespace Microsoft.Terminal.Settings.Editor ColorSchemeViewModel CurrentColorScheme; IObservableVector SchemesList; + Windows.UI.Color ForegroundPreview { get; }; + Windows.UI.Color BackgroundPreview { get; }; + Windows.UI.Color SelectionBackgroundPreview { get; }; + Windows.UI.Color CursorColorPreview { get; }; + String MissingFontFaces { get; }; String ProportionalFontFaces { get; }; Boolean HasPowerlineCharacters { get; }; @@ -77,6 +82,11 @@ namespace Microsoft.Terminal.Settings.Editor OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Microsoft.Terminal.Settings.Model.ConvergedAlignment, BackgroundImageAlignment); OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Microsoft.Terminal.Settings.Model.IntenseStyle, IntenseTextStyle); OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Microsoft.Terminal.Core.AdjustTextMode, AdjustIndistinguishableColors); + + OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Windows.Foundation.IReference, Foreground); + OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Windows.Foundation.IReference, Background); + OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Windows.Foundation.IReference, SelectionBackground); + OBSERVABLE_PROJECTED_APPEARANCE_SETTING(Windows.Foundation.IReference, CursorColor); } [default_interface] runtimeclass Appearances : Windows.UI.Xaml.Controls.UserControl, Windows.UI.Xaml.Data.INotifyPropertyChanged diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.xaml b/src/cascadia/TerminalSettingsEditor/Appearances.xaml index a3f643c53c3..98318f4a543 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.xaml +++ b/src/cascadia/TerminalSettingsEditor/Appearances.xaml @@ -69,138 +69,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h index 12b26c160bf..45d3983f9ab 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h @@ -69,6 +69,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation return hstring{ fmt::format(FMT_COMPILE(L"{} RGB({}, {}, {})"), _Name, _Color.R, _Color.G, _Color.B) }; } + hstring NameWithHexCode() const + { + return hstring{ fmt::format(FMT_COMPILE(L"{} #{:02X}{:02X}{:02X}"), _Name, _Color.R, _Color.G, _Color.B) }; + } + til::property_changed_event PropertyChanged; WINRT_OBSERVABLE_PROPERTY(Windows::UI::Color, Color, PropertyChanged.raise); WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Name, PropertyChanged.raise); diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.idl b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.idl index bf36ef4146b..9ad129b2285 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.idl @@ -36,5 +36,6 @@ namespace Microsoft.Terminal.Settings.Editor IInspectable Tag; Windows.UI.Color Color; String AccessibleName { get; }; + String NameWithHexCode { get; }; } } diff --git a/src/cascadia/TerminalSettingsEditor/CommonResources.xaml b/src/cascadia/TerminalSettingsEditor/CommonResources.xaml index 509e1782c29..115dc0d0dc5 100644 --- a/src/cascadia/TerminalSettingsEditor/CommonResources.xaml +++ b/src/cascadia/TerminalSettingsEditor/CommonResources.xaml @@ -4,6 +4,8 @@ --> @@ -60,6 +62,9 @@ + + + Firebrick 14.0 @@ -68,6 +73,32 @@ 250 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +