Skip to content

Commit a2adcd3

Browse files
committed
PRE-MERGE microsoft#16479 Theme for settings
2 parents d14a984 + 2d7a9d8 commit a2adcd3

File tree

5 files changed

+37
-10
lines changed

5 files changed

+37
-10
lines changed

src/cascadia/TerminalSettingsEditor/MainPage.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -699,17 +699,23 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
699699
}
700700
}
701701

702-
if (!isMicaAvailable)
703-
{
704-
return;
705-
}
706-
707702
const auto& theme = _settingsSource.GlobalSettings().CurrentTheme();
708-
const auto& requestedTheme = _settingsSource.GlobalSettings().CurrentTheme().RequestedTheme();
703+
const bool hasThemeForSettings{ theme.Settings() != nullptr };
704+
const auto& appTheme = theme.RequestedTheme();
705+
const auto& requestedTheme = (hasThemeForSettings) ? theme.Settings().RequestedTheme() : appTheme;
709706

710707
RequestedTheme(requestedTheme);
711708

712-
const auto bgKey = (theme.Window() != nullptr && theme.Window().UseMica()) ?
709+
// Mica gets it's appearance from the app's theme, not necessarily the
710+
// Page's theme. In the case of dark app, light settings, mica will be a
711+
// dark color, and the text will also be dark, making the UI _very_ hard
712+
// to read. (and similarly in the inverse situation).
713+
//
714+
// To mitigate this, don't set the transparent background in the case
715+
// that our theme is different than the app's.
716+
const bool actuallyUseMica = isMicaAvailable && (appTheme == requestedTheme);
717+
718+
const auto bgKey = (theme.Window() != nullptr && theme.Window().UseMica()) && actuallyUseMica ?
713719
L"SettingsPageMicaBackground" :
714720
L"SettingsPageBackground";
715721

src/cascadia/TerminalSettingsModel/MTSMSettings.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,10 @@ Author(s):
136136
// * ForegroundKey, BackgroundKey, SelectionBackgroundKey, CursorColorKey: all optional colors
137137
// * Opacity: needs special parsing
138138

139-
#define MTSM_THEME_SETTINGS(X) \
140-
X(winrt::Microsoft::Terminal::Settings::Model::WindowTheme, Window, "window", nullptr) \
141-
X(winrt::Microsoft::Terminal::Settings::Model::TabRowTheme, TabRow, "tabRow", nullptr) \
139+
#define MTSM_THEME_SETTINGS(X) \
140+
X(winrt::Microsoft::Terminal::Settings::Model::WindowTheme, Window, "window", nullptr) \
141+
X(winrt::Microsoft::Terminal::Settings::Model::SettingsTheme, Settings, "settings", nullptr) \
142+
X(winrt::Microsoft::Terminal::Settings::Model::TabRowTheme, TabRow, "tabRow", nullptr) \
142143
X(winrt::Microsoft::Terminal::Settings::Model::TabTheme, Tab, "tab", nullptr)
143144

144145
#define MTSM_THEME_WINDOW_SETTINGS(X) \
@@ -148,6 +149,9 @@ Author(s):
148149
X(bool, RainbowFrame, "experimental.rainbowFrame", false) \
149150
X(bool, UseMica, "useMica", false)
150151

152+
#define MTSM_THEME_SETTINGS_SETTINGS(X) \
153+
X(winrt::Windows::UI::Xaml::ElementTheme, RequestedTheme, "theme", winrt::Windows::UI::Xaml::ElementTheme::Default)
154+
151155
#define MTSM_THEME_TABROW_SETTINGS(X) \
152156
X(winrt::Microsoft::Terminal::Settings::Model::ThemeColor, Background, "background", nullptr) \
153157
X(winrt::Microsoft::Terminal::Settings::Model::ThemeColor, UnfocusedBackground, "unfocusedBackground", nullptr)

src/cascadia/TerminalSettingsModel/Theme.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "JsonUtils.h"
1010
#include "TerminalSettingsSerializationHelpers.h"
1111

12+
#include "SettingsTheme.g.h"
1213
#include "ThemeColor.g.cpp"
1314
#include "WindowTheme.g.cpp"
1415
#include "TabRowTheme.g.cpp"
@@ -56,6 +57,7 @@ static constexpr wchar_t RegKeyAccentColor[] = L"AccentColor";
5657
}
5758

5859
THEME_OBJECT(WindowTheme, MTSM_THEME_WINDOW_SETTINGS);
60+
THEME_OBJECT(SettingsTheme, MTSM_THEME_SETTINGS_SETTINGS);
5961
THEME_OBJECT(TabRowTheme, MTSM_THEME_TABROW_SETTINGS);
6062
THEME_OBJECT(TabTheme, MTSM_THEME_TAB_SETTINGS);
6163

@@ -219,6 +221,7 @@ uint8_t ThemeColor::UnfocusedTabOpacity() const noexcept
219221
};
220222

221223
THEME_OBJECT_CONVERTER(winrt::Microsoft::Terminal::Settings::Model, WindowTheme, MTSM_THEME_WINDOW_SETTINGS);
224+
THEME_OBJECT_CONVERTER(winrt::Microsoft::Terminal::Settings::Model, SettingsTheme, MTSM_THEME_SETTINGS_SETTINGS);
222225
THEME_OBJECT_CONVERTER(winrt::Microsoft::Terminal::Settings::Model, TabRowTheme, MTSM_THEME_TABROW_SETTINGS);
223226
THEME_OBJECT_CONVERTER(winrt::Microsoft::Terminal::Settings::Model, TabTheme, MTSM_THEME_TAB_SETTINGS);
224227

@@ -251,6 +254,10 @@ winrt::com_ptr<Theme> Theme::Copy() const
251254
{
252255
theme->_Tab = *winrt::get_self<implementation::TabTheme>(_Tab)->Copy();
253256
}
257+
if (_Settings)
258+
{
259+
theme->_Settings = *winrt::get_self<implementation::SettingsTheme>(_Settings)->Copy();
260+
}
254261

255262
return theme;
256263
}

src/cascadia/TerminalSettingsModel/Theme.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Author(s):
1818

1919
#include "MTSMSettings.h"
2020

21+
#include "SettingsTheme.g.h"
2122
#include "ThemeColor.g.h"
2223
#include "WindowTheme.g.h"
2324
#include "TabRowTheme.g.h"
@@ -81,6 +82,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
8182
};
8283

8384
THEME_OBJECT(WindowTheme, MTSM_THEME_WINDOW_SETTINGS);
85+
THEME_OBJECT(SettingsTheme, MTSM_THEME_SETTINGS_SETTINGS);
8486
THEME_OBJECT(TabRowTheme, MTSM_THEME_TABROW_SETTINGS);
8587
THEME_OBJECT(TabTheme, MTSM_THEME_TAB_SETTINGS);
8688

src/cascadia/TerminalSettingsModel/Theme.idl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ namespace Microsoft.Terminal.Settings.Model
5353
UInt8 UnfocusedTabOpacity { get; };
5454
}
5555

56+
runtimeclass SettingsTheme
57+
{
58+
Windows.UI.Xaml.ElementTheme RequestedTheme { get; };
59+
}
60+
5661
runtimeclass WindowTheme {
5762
Windows.UI.Xaml.ElementTheme RequestedTheme { get; };
5863
Boolean UseMica { get; };
@@ -82,6 +87,9 @@ namespace Microsoft.Terminal.Settings.Model
8287
// window.* Namespace
8388
WindowTheme Window { get; };
8489

90+
// settings.* Namespace
91+
SettingsTheme Settings { get; };
92+
8593
// tabRow.* Namespace
8694
TabRowTheme TabRow { get; };
8795

0 commit comments

Comments
 (0)