this builds at least

This commit is contained in:
Mike Griese 2021-10-19 11:27:26 -05:00
parent 1413d0145a
commit 31e799859f
16 changed files with 208 additions and 167 deletions

View file

@ -115,34 +115,34 @@ namespace winrt::TerminalApp::implementation
// Insert that new child as the parent of the control's settings // Insert that new child as the parent of the control's settings
controlSettings.SetParent(childStruct.DefaultSettings()); controlSettings.SetParent(childStruct.DefaultSettings());
control.UpdateSettings(); control.UpdateControlSettings(controlSettings);
// Take a copy of the inputs, since they are pointers anyways. // Take a copy of the inputs, since they are pointers anyways.
_restorePreviewFuncs.emplace_back([=]() { _restorePreviewFuncs.emplace_back([=]() {
// Get the runtime settings of the focused control //// Get the runtime settings of the focused control
const auto& controlSettings{ control.Settings().as<TerminalSettings>() }; //const auto& controlSettings{ control.Settings().as<TerminalSettings>() };
// Get the control's root settings, the ones that we actually //// Get the control's root settings, the ones that we actually
// assigned to it. //// assigned to it.
auto parentSettings{ controlSettings.GetParent() }; //auto parentSettings{ controlSettings.GetParent() };
while (parentSettings.GetParent() != nullptr) //while (parentSettings.GetParent() != nullptr)
{ //{
parentSettings = parentSettings.GetParent(); // parentSettings = parentSettings.GetParent();
} //}
// If the root settings are the same as the ones we stashed, //// If the root settings are the same as the ones we stashed,
// then reset the parent of the runtime settings to the stashed //// then reset the parent of the runtime settings to the stashed
// settings. This condition might be false if the settings //// settings. This condition might be false if the settings
// hot-reloaded while the palette was open. In that case, we //// hot-reloaded while the palette was open. In that case, we
// don't want to reset the settings to what they were _before_ //// don't want to reset the settings to what they were _before_
// the hot-reload. //// the hot-reload.
if (originalSettings == parentSettings) //if (originalSettings == parentSettings)
{ //{
// Set the original settings as the parent of the control's settings // // Set the original settings as the parent of the control's settings
control.Settings().as<TerminalSettings>().SetParent(originalSettings); // control.Settings().as<TerminalSettings>().SetParent(originalSettings);
} //}
control.UpdateSettings(); control.UpdateControlSettings(control.Settings());
}); });
}); });
} }

View file

@ -451,29 +451,35 @@ namespace winrt::TerminalApp::implementation
{ {
if (const auto scheme = _settings.GlobalSettings().ColorSchemes().TryLookup(realArgs.SchemeName())) if (const auto scheme = _settings.GlobalSettings().ColorSchemes().TryLookup(realArgs.SchemeName()))
{ {
const auto res = _ApplyToActiveControls([&](auto& control) { const auto res = _ApplyToActiveControls([&](auto& /*control*/) {
// Start by getting the current settings of the control //// Start by getting the current settings of the control
auto controlSettings = control.Settings().as<TerminalSettings>(); //auto controlSettings = control.Settings().as<TerminalSettings>();
auto parentSettings = controlSettings; //auto parentSettings = controlSettings;
// Those are the _runtime_ settings however. What we //// Those are the _runtime_ settings however. What we
// need to do is: //// need to do is:
// ////
// 1. Blow away any colors set in the runtime settings. //// 1. Blow away any colors set in the runtime settings.
// 2. Apply the color scheme to the parent settings. //// 2. Apply the color scheme to the parent settings.
// ////
// 1 is important to make sure that the effects of //// 1 is important to make sure that the effects of
// something like `colortool` are cleared when setting //// something like `colortool` are cleared when setting
// the scheme. //// the scheme.
if (controlSettings.GetParent() != nullptr) //if (controlSettings.GetParent() != nullptr)
{ //{
parentSettings = controlSettings.GetParent(); // parentSettings = controlSettings.GetParent();
} //}
// ApplyColorScheme(nullptr) will clear the old color scheme. //// ApplyColorScheme(nullptr) will clear the old color scheme.
controlSettings.ApplyColorScheme(nullptr); //controlSettings.ApplyColorScheme(nullptr);
parentSettings.ApplyColorScheme(scheme); //parentSettings.ApplyColorScheme(scheme);
control.UpdateSettings(); //control.UpdateControlSettings();
// TODO!
// We'll need a dedicated method for this. The Control's
// settings are hosted in the Core, which could be OOP.
// We'll need to manually tell the control to update its
// core's scheme.
}); });
args.Handled(res); args.Handled(res);
} }

View file

@ -1476,8 +1476,8 @@ void Pane::UpdateSettings(const TerminalSettingsCreateResult& settings, const Pr
// sure the unfocused settings inherit from that. // sure the unfocused settings inherit from that.
unfocusedSettings.SetParent(controlSettings); unfocusedSettings.SetParent(controlSettings);
} }
_control.UnfocusedAppearance(unfocusedSettings); // _control.UnfocusedAppearance(unfocusedSettings);
_control.UpdateSettings(); _control.UpdateControlSettings(controlSettings, unfocusedSettings);
} }
// Method Description: // Method Description:

View file

@ -2162,9 +2162,9 @@ namespace winrt::TerminalApp::implementation
// Give term control a child of the settings so that any overrides go in the child // Give term control a child of the settings so that any overrides go in the child
// This way, when we do a settings reload we just update the parent and the overrides remain // This way, when we do a settings reload we just update the parent and the overrides remain
const auto child = TerminalSettings::CreateWithParent(settings); const auto child = TerminalSettings::CreateWithParent(settings);
TermControl term{ child.DefaultSettings(), connection }; TermControl term{ child.DefaultSettings(), child.UnfocusedSettings(), connection };
term.UnfocusedAppearance(child.UnfocusedSettings()); // It is okay for the unfocused settings to be null // term.UnfocusedAppearance(child.UnfocusedSettings()); // It is okay for the unfocused settings to be null
return term; return term;
} }

View file

@ -54,15 +54,17 @@ namespace winrt::Microsoft::Terminal::Control::implementation
return initialized; return initialized;
} }
ControlCore::ControlCore(IControlSettings settings, ControlCore::ControlCore(Control::IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection) : TerminalConnection::ITerminalConnection connection) :
_connection{ connection }, _connection{ connection },
_settings{ settings },
_desiredFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8 }, _desiredFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8 },
_actualFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8, false } _actualFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8, false }
{ {
_EnsureStaticInitialization(); _EnsureStaticInitialization();
_settings = winrt::make_self<implementation::ControlSettings>(settings, unfocusedAppearance);
_terminal = std::make_unique<::Microsoft::Terminal::Core::Terminal>(); _terminal = std::make_unique<::Microsoft::Terminal::Core::Terminal>();
// Subscribe to the connection's disconnected event and call our connection closed handlers. // Subscribe to the connection's disconnected event and call our connection closed handlers.
@ -78,7 +80,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
}); });
// GH#8969: pre-seed working directory to prevent potential races // GH#8969: pre-seed working directory to prevent potential races
_terminal->SetWorkingDirectory(_settings.StartingDirectory()); _terminal->SetWorkingDirectory(_settings->StartingDirectory());
auto pfnCopyToClipboard = std::bind(&ControlCore::_terminalCopyToClipboard, this, std::placeholders::_1); auto pfnCopyToClipboard = std::bind(&ControlCore::_terminalCopyToClipboard, this, std::placeholders::_1);
_terminal->SetCopyToClipboardCallback(pfnCopyToClipboard); _terminal->SetCopyToClipboardCallback(pfnCopyToClipboard);
@ -185,7 +187,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
}); });
UpdateSettings(settings); // TODO! uh, this feels wrong aren't we just setting this above??
UpdateSettings(settings, unfocusedAppearance);
} }
ControlCore::~ControlCore() ControlCore::~ControlCore()
@ -242,7 +245,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
LOG_IF_FAILED(_renderEngine->SetWindowSize({ viewInPixels.Width(), viewInPixels.Height() })); LOG_IF_FAILED(_renderEngine->SetWindowSize({ viewInPixels.Width(), viewInPixels.Height() }));
// Update DxEngine's SelectionBackground // Update DxEngine's SelectionBackground
_renderEngine->SetSelectionBackground(til::color{ _settings.SelectionBackground() }); _renderEngine->SetSelectionBackground(til::color{ _settings->SelectionBackground() });
const auto vp = _renderEngine->GetViewportInCharacters(viewInPixels); const auto vp = _renderEngine->GetViewportInCharacters(viewInPixels);
const auto width = vp.Width(); const auto width = vp.Width();
@ -250,10 +253,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
_connection.Resize(height, width); _connection.Resize(height, width);
// Override the default width and height to match the size of the swapChainPanel // Override the default width and height to match the size of the swapChainPanel
_settings.InitialCols(width); _settings->InitialCols(width);
_settings.InitialRows(height); _settings->InitialRows(height);
_terminal->CreateFromSettings(_settings, *_renderer); _terminal->CreateFromSettings(*_settings, *_renderer);
// IMPORTANT! Set this callback up sooner than later. If we do it // IMPORTANT! Set this callback up sooner than later. If we do it
// after Enable, then it'll be possible to paint the frame once // after Enable, then it'll be possible to paint the frame once
@ -265,17 +268,17 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// We do this after we initially set the swapchain so as to avoid unnecessary callbacks (and locking problems) // We do this after we initially set the swapchain so as to avoid unnecessary callbacks (and locking problems)
_renderEngine->SetCallback(std::bind(&ControlCore::_renderEngineSwapChainChanged, this)); _renderEngine->SetCallback(std::bind(&ControlCore::_renderEngineSwapChainChanged, this));
_renderEngine->SetRetroTerminalEffect(_settings.RetroTerminalEffect()); _renderEngine->SetRetroTerminalEffect(_settings->RetroTerminalEffect());
_renderEngine->SetPixelShaderPath(_settings.PixelShaderPath()); _renderEngine->SetPixelShaderPath(_settings->PixelShaderPath());
_renderEngine->SetForceFullRepaintRendering(_settings.ForceFullRepaintRendering()); _renderEngine->SetForceFullRepaintRendering(_settings->ForceFullRepaintRendering());
_renderEngine->SetSoftwareRendering(_settings.SoftwareRendering()); _renderEngine->SetSoftwareRendering(_settings->SoftwareRendering());
_renderEngine->SetIntenseIsBold(_settings.IntenseIsBold()); _renderEngine->SetIntenseIsBold(_settings->IntenseIsBold());
_updateAntiAliasingMode(_renderEngine.get()); _updateAntiAliasingMode(_renderEngine.get());
// GH#5098: Inform the engine of the opacity of the default text background. // GH#5098: Inform the engine of the opacity of the default text background.
// GH#11315: Always do this, even if they don't have acrylic on. // GH#11315: Always do this, even if they don't have acrylic on.
_renderEngine->SetDefaultTextBackgroundOpacity(::base::saturated_cast<float>(_settings.Opacity())); _renderEngine->SetDefaultTextBackgroundOpacity(::base::saturated_cast<float>(_settings->Opacity()));
THROW_IF_FAILED(_renderEngine->Enable()); THROW_IF_FAILED(_renderEngine->Enable());
@ -450,7 +453,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// is what the Terminal did prior to 1.12. // is what the Terminal did prior to 1.12.
if (!IsVintageOpacityAvailable()) if (!IsVintageOpacityAvailable())
{ {
_settings.UseAcrylic(newOpacity < 1.0); _runtimeUseAcrylic = newOpacity < 1.0;
} }
auto eventArgs = winrt::make_self<TransparencyChangedEventArgs>(newOpacity); auto eventArgs = winrt::make_self<TransparencyChangedEventArgs>(newOpacity);
@ -465,7 +468,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// specify a custom pixel shader, manually enable the legacy retro // specify a custom pixel shader, manually enable the legacy retro
// effect first. This will ensure that a toggle off->on will still work, // effect first. This will ensure that a toggle off->on will still work,
// even if they currently have retro effect off. // even if they currently have retro effect off.
if (_settings.PixelShaderPath().empty() && !_renderEngine->GetRetroTerminalEffect()) if (_settings->PixelShaderPath().empty() && !_renderEngine->GetRetroTerminalEffect())
{ {
// SetRetroTerminalEffect to true will enable the effect. In this // SetRetroTerminalEffect to true will enable the effect. In this
// case, the shader effect will already be disabled (because neither // case, the shader effect will already be disabled (because neither
@ -575,11 +578,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Method Description: // Method Description:
// - Updates the settings of the current terminal. // - Updates the settings of the current terminal.
// - INVARIANT: This method can only be called if the caller DOES NOT HAVE writing lock on the terminal. // - INVARIANT: This method can only be called if the caller DOES NOT HAVE writing lock on the terminal.
void ControlCore::UpdateSettings(const IControlSettings& settings) void ControlCore::UpdateSettings(const IControlSettings& settings, const IControlAppearance& newAppearance)
{ {
auto lock = _terminal->LockForWriting(); _settings = winrt::make_self<implementation::ControlSettings>(settings, newAppearance);
_settings = settings; auto lock = _terminal->LockForWriting();
_runtimeOpacity = std::nullopt; _runtimeOpacity = std::nullopt;
_runtimeUseAcrylic = std::nullopt; _runtimeUseAcrylic = std::nullopt;
@ -587,15 +590,15 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// GH#11285 - If the user is on Windows 10, and they wanted opacity, but // GH#11285 - If the user is on Windows 10, and they wanted opacity, but
// didn't explicitly request acrylic, then opt them in to acrylic. // didn't explicitly request acrylic, then opt them in to acrylic.
// On Windows 11+, this isn't needed, because we can have vintage opacity. // On Windows 11+, this isn't needed, because we can have vintage opacity.
if (!IsVintageOpacityAvailable() && _settings.Opacity() < 1.0 && !_settings.UseAcrylic()) if (!IsVintageOpacityAvailable() && _settings->Opacity() < 1.0 && !_settings->UseAcrylic())
{ {
_runtimeUseAcrylic = true; _runtimeUseAcrylic = true;
} }
// Initialize our font information. // Initialize our font information.
const auto fontFace = _settings.FontFace(); const auto fontFace = _settings->FontFace();
const short fontHeight = ::base::saturated_cast<short>(_settings.FontSize()); const short fontHeight = ::base::saturated_cast<short>(_settings->FontSize());
const auto fontWeight = _settings.FontWeight(); const auto fontWeight = _settings->FontWeight();
// The font width doesn't terribly matter, we'll only be using the // The font width doesn't terribly matter, we'll only be using the
// height to look it up // height to look it up
// The other params here also largely don't matter. // The other params here also largely don't matter.
@ -606,7 +609,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
_desiredFont = { _actualFont }; _desiredFont = { _actualFont };
// Update the terminal core with its new Core settings // Update the terminal core with its new Core settings
_terminal->UpdateSettings(_settings); _terminal->UpdateSettings(*_settings);
if (!_initializedTerminal) if (!_initializedTerminal)
{ {
@ -615,8 +618,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
return; return;
} }
_renderEngine->SetForceFullRepaintRendering(_settings.ForceFullRepaintRendering()); _renderEngine->SetForceFullRepaintRendering(_settings->ForceFullRepaintRendering());
_renderEngine->SetSoftwareRendering(_settings.SoftwareRendering()); _renderEngine->SetSoftwareRendering(_settings->SoftwareRendering());
_updateAntiAliasingMode(_renderEngine.get()); _updateAntiAliasingMode(_renderEngine.get());
@ -633,29 +636,29 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Method Description: // Method Description:
// - Updates the appearance of the current terminal. // - Updates the appearance of the current terminal.
// - INVARIANT: This method can only be called if the caller DOES NOT HAVE writing lock on the terminal. // - INVARIANT: This method can only be called if the caller DOES NOT HAVE writing lock on the terminal.
void ControlCore::UpdateAppearance(const IControlAppearance& newAppearance) // void ControlCore::UpdateAppearance(const IControlAppearance& newAppearance)
{ // {
auto lock = _terminal->LockForWriting(); // auto lock = _terminal->LockForWriting();
// Update the terminal core with its new Core settings // // Update the terminal core with its new Core settings
_terminal->UpdateAppearance(newAppearance); // _terminal->UpdateAppearance(newAppearance);
// Update DxEngine settings under the lock // // Update DxEngine settings under the lock
if (_renderEngine) // if (_renderEngine)
{ // {
// Update DxEngine settings under the lock // // Update DxEngine settings under the lock
_renderEngine->SetSelectionBackground(til::color{ newAppearance.SelectionBackground() }); // _renderEngine->SetSelectionBackground(til::color{ newAppearance.SelectionBackground() });
_renderEngine->SetRetroTerminalEffect(newAppearance.RetroTerminalEffect()); // _renderEngine->SetRetroTerminalEffect(newAppearance.RetroTerminalEffect());
_renderEngine->SetPixelShaderPath(newAppearance.PixelShaderPath()); // _renderEngine->SetPixelShaderPath(newAppearance.PixelShaderPath());
_renderEngine->SetIntenseIsBold(_settings.IntenseIsBold()); // _renderEngine->SetIntenseIsBold(_settings->IntenseIsBold());
_renderer->TriggerRedrawAll(); // _renderer->TriggerRedrawAll();
} // }
} // }
void ControlCore::_updateAntiAliasingMode(::Microsoft::Console::Render::DxEngine* const dxEngine) void ControlCore::_updateAntiAliasingMode(::Microsoft::Console::Render::DxEngine* const dxEngine)
{ {
// Update DxEngine's AntialiasingMode // Update DxEngine's AntialiasingMode
switch (_settings.AntialiasingMode()) switch (_settings->AntialiasingMode())
{ {
case TextAntialiasingMode::Cleartype: case TextAntialiasingMode::Cleartype:
dxEngine->SetAntialiasingMode(D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE); dxEngine->SetAntialiasingMode(D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE);
@ -690,7 +693,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
if (_renderEngine) if (_renderEngine)
{ {
std::unordered_map<std::wstring_view, uint32_t> featureMap; std::unordered_map<std::wstring_view, uint32_t> featureMap;
if (const auto fontFeatures = _settings.FontFeatures()) if (const auto fontFeatures = _settings->FontFeatures())
{ {
featureMap.reserve(fontFeatures.Size()); featureMap.reserve(fontFeatures.Size());
@ -700,7 +703,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
} }
std::unordered_map<std::wstring_view, float> axesMap; std::unordered_map<std::wstring_view, float> axesMap;
if (const auto fontAxes = _settings.FontAxes()) if (const auto fontAxes = _settings->FontAxes())
{ {
axesMap.reserve(fontAxes.Size()); axesMap.reserve(fontAxes.Size());
@ -742,8 +745,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
{ {
// Make sure we have a non-zero font size // Make sure we have a non-zero font size
const auto newSize = std::max<short>(gsl::narrow_cast<short>(fontSize), 1); const auto newSize = std::max<short>(gsl::narrow_cast<short>(fontSize), 1);
const auto fontFace = _settings.FontFace(); const auto fontFace = _settings->FontFace();
const auto fontWeight = _settings.FontWeight(); const auto fontWeight = _settings->FontWeight();
_actualFont = { fontFace, 0, fontWeight.Weight, { 0, newSize }, CP_UTF8, false }; _actualFont = { fontFace, 0, fontWeight.Weight, { 0, newSize }, CP_UTF8, false };
_desiredFont = { _actualFont }; _desiredFont = { _actualFont };
@ -767,7 +770,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// - none // - none
void ControlCore::ResetFontSize() void ControlCore::ResetFontSize()
{ {
_setFontSize(_settings.FontSize()); _setFontSize(_settings->FontSize());
} }
// Method Description: // Method Description:
@ -979,7 +982,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
TextBuffer::GenHTML(bufferData, TextBuffer::GenHTML(bufferData,
_actualFont.GetUnscaledSize().Y, _actualFont.GetUnscaledSize().Y,
_actualFont.GetFaceName(), _actualFont.GetFaceName(),
til::color{ _settings.DefaultBackground() }) : til::color{ _settings->DefaultBackground() }) :
""; "";
// convert to RTF format // convert to RTF format
@ -987,10 +990,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
TextBuffer::GenRTF(bufferData, TextBuffer::GenRTF(bufferData,
_actualFont.GetUnscaledSize().Y, _actualFont.GetUnscaledSize().Y,
_actualFont.GetFaceName(), _actualFont.GetFaceName(),
til::color{ _settings.DefaultBackground() }) : til::color{ _settings->DefaultBackground() }) :
""; "";
if (!_settings.CopyOnSelect()) if (!_settings->CopyOnSelect())
{ {
_terminal->ClearSelection(); _terminal->ClearSelection();
_renderer->TriggerSelection(); _renderer->TriggerSelection();
@ -1231,7 +1234,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
bool ControlCore::CopyOnSelect() const bool ControlCore::CopyOnSelect() const
{ {
return _settings.CopyOnSelect(); return _settings->CopyOnSelect();
} }
Windows::Foundation::Collections::IVector<winrt::hstring> ControlCore::SelectedText(bool trimTrailingWhitespace) const Windows::Foundation::Collections::IVector<winrt::hstring> ControlCore::SelectedText(bool trimTrailingWhitespace) const

View file

@ -44,7 +44,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
struct ControlCore : ControlCoreT<ControlCore> struct ControlCore : ControlCoreT<ControlCore>
{ {
public: public:
ControlCore(IControlSettings settings, ControlCore(Control::IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection); TerminalConnection::ITerminalConnection connection);
~ControlCore(); ~ControlCore();
@ -53,8 +54,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation
const double compositionScale); const double compositionScale);
void EnablePainting(); void EnablePainting();
void UpdateSettings(const IControlSettings& settings); void UpdateSettings(const Control::IControlSettings& settings, const IControlAppearance& newAppearance);
void UpdateAppearance(const IControlAppearance& newAppearance); // void UpdateAppearance(const Control::IControlAppearance& newAppearance);
Control::IControlSettings Settings() const { return *_settings; };
Control::IControlAppearance FocusedAppearance() const { return *_settings->FocusedAppearance(); };
Control::IControlAppearance UnfocusedAppearance() const { return *_settings->UnfocusedAppearance(); };
void SizeChanged(const double width, const double height); void SizeChanged(const double width, const double height);
void ScaleChanged(const double scale); void ScaleChanged(const double scale);
uint64_t SwapChainHandle() const; uint64_t SwapChainHandle() const;
@ -160,8 +165,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
static bool IsVintageOpacityAvailable() noexcept; static bool IsVintageOpacityAvailable() noexcept;
RUNTIME_SETTING(double, Opacity, _settings.Opacity()); RUNTIME_SETTING(double, Opacity, _settings->Opacity());
RUNTIME_SETTING(bool, UseAcrylic, _settings.UseAcrylic()); RUNTIME_SETTING(bool, UseAcrylic, _settings->UseAcrylic());
// -------------------------------- WinRT Events --------------------------------- // -------------------------------- WinRT Events ---------------------------------
// clang-format off // clang-format off
@ -203,7 +208,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
std::unique_ptr<::Microsoft::Console::Render::DxEngine> _renderEngine{ nullptr }; std::unique_ptr<::Microsoft::Console::Render::DxEngine> _renderEngine{ nullptr };
std::unique_ptr<::Microsoft::Console::Render::Renderer> _renderer{ nullptr }; std::unique_ptr<::Microsoft::Console::Render::Renderer> _renderer{ nullptr };
IControlSettings _settings{ nullptr }; // IControlSettings _settings{ nullptr };
winrt::com_ptr<ControlSettings> _settings{ nullptr };
FontInfoDesired _desiredFont; FontInfoDesired _desiredFont;
FontInfo _actualFont; FontInfo _actualFont;

View file

@ -33,14 +33,18 @@ namespace Microsoft.Terminal.Control
[default_interface] runtimeclass ControlCore : ICoreState [default_interface] runtimeclass ControlCore : ICoreState
{ {
ControlCore(IControlSettings settings, ControlCore(IControlSettings settings,
IControlAppearance unfocusedAppearance,
Microsoft.Terminal.TerminalConnection.ITerminalConnection connection); Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
Boolean Initialize(Double actualWidth, Boolean Initialize(Double actualWidth,
Double actualHeight, Double actualHeight,
Double compositionScale); Double compositionScale);
void UpdateSettings(IControlSettings settings); void UpdateSettings(IControlSettings settings, IControlAppearance appearance);
void UpdateAppearance(IControlAppearance appearance); // void UpdateAppearance(IControlAppearance appearance);
IControlSettings Settings { get; };
IControlAppearance FocusedAppearance { get; };
IControlAppearance UnfocusedAppearance { get; };
UInt64 SwapChainHandle { get; }; UInt64 SwapChainHandle { get; };

View file

@ -39,13 +39,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
ControlInteractivity::ControlInteractivity(IControlSettings settings, ControlInteractivity::ControlInteractivity(IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection) : TerminalConnection::ITerminalConnection connection) :
_touchAnchor{ std::nullopt }, _touchAnchor{ std::nullopt },
_lastMouseClickTimestamp{}, _lastMouseClickTimestamp{},
_lastMouseClickPos{}, _lastMouseClickPos{},
_selectionNeedsToBeCopied{ false } _selectionNeedsToBeCopied{ false }
{ {
_core = winrt::make_self<ControlCore>(settings, connection); _core = winrt::make_self<ControlCore>(settings, unfocusedAppearance, connection);
} }
// Method Description: // Method Description:

View file

@ -35,6 +35,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
{ {
public: public:
ControlInteractivity(IControlSettings settings, ControlInteractivity(IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection); TerminalConnection::ITerminalConnection connection);
void GotFocus(); void GotFocus();

View file

@ -14,6 +14,7 @@ namespace Microsoft.Terminal.Control
[default_interface] runtimeclass ControlInteractivity [default_interface] runtimeclass ControlInteractivity
{ {
ControlInteractivity(IControlSettings settings, ControlInteractivity(IControlSettings settings,
IControlAppearance unfocusedAppearance,
Microsoft.Terminal.TerminalConnection.ITerminalConnection connection); Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
ControlCore Core { get; }; ControlCore Core { get; };

View file

@ -27,7 +27,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
winrt::com_ptr<ControlAppearance> _focusedAppearance{ nullptr }; winrt::com_ptr<ControlAppearance> _focusedAppearance{ nullptr };
public: public:
ControlSettings(Control::IControlSettings settings, Control::IControlAppearance unfocusedAppearance) ControlSettings(const Control::IControlSettings& settings,
const Control::IControlAppearance& unfocusedAppearance)
{ {
_focusedAppearance = winrt::make_self<implementation::ControlAppearance>(settings); _focusedAppearance = winrt::make_self<implementation::ControlAppearance>(settings);
_unfocusedAppearance = unfocusedAppearance ? _unfocusedAppearance = unfocusedAppearance ?

View file

@ -49,6 +49,7 @@ DEFINE_ENUM_FLAG_OPERATORS(winrt::Microsoft::Terminal::Control::MouseButtonState
namespace winrt::Microsoft::Terminal::Control::implementation namespace winrt::Microsoft::Terminal::Control::implementation
{ {
TermControl::TermControl(IControlSettings settings, TermControl::TermControl(IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection) : TerminalConnection::ITerminalConnection connection) :
_settings{ winrt::make_self<ControlSettings>(settings, nullptr) }, _settings{ winrt::make_self<ControlSettings>(settings, nullptr) },
_isInternalScrollBarUpdate{ false }, _isInternalScrollBarUpdate{ false },
@ -62,7 +63,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
{ {
InitializeComponent(); InitializeComponent();
_interactivity = winrt::make<implementation::ControlInteractivity>(settings, connection); _interactivity = winrt::make<implementation::ControlInteractivity>(settings, unfocusedAppearance, connection);
_core = _interactivity.Core(); _core = _interactivity.Core();
// These events might all be triggered by the connection, but that // These events might all be triggered by the connection, but that
@ -145,7 +146,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
_autoScrollTimer.Interval(AutoScrollUpdateInterval); _autoScrollTimer.Interval(AutoScrollUpdateInterval);
_autoScrollTimer.Tick({ this, &TermControl::_UpdateAutoScroll }); _autoScrollTimer.Tick({ this, &TermControl::_UpdateAutoScroll });
_ApplyUISettings(_settings); _ApplyUISettings();
} }
// Method Description: // Method Description:
@ -230,28 +231,36 @@ namespace winrt::Microsoft::Terminal::Control::implementation
this->Focus(FocusState::Programmatic); this->Focus(FocusState::Programmatic);
} }
winrt::fire_and_forget TermControl::UpdateControlSettings(IControlSettings settings)
{
return UpdateControlSettings(settings, _core.UnfocusedAppearance());
}
// Method Description: // Method Description:
// - Given Settings having been updated, applies the settings to the current terminal. // - Given Settings having been updated, applies the settings to the current terminal.
// Return Value: // Return Value:
// - <none> // - <none>
winrt::fire_and_forget TermControl::UpdateSettings() winrt::fire_and_forget TermControl::UpdateControlSettings(IControlSettings settings, IControlAppearance unfocusedAppearance)
{ {
auto weakThis{ get_weak() }; auto weakThis{ get_weak() };
co_await winrt::resume_background();
_core.UpdateSettings(settings, unfocusedAppearance);
// Dispatch a call to the UI thread to apply the new settings to the // Dispatch a call to the UI thread to apply the new settings to the
// terminal. // terminal.
co_await winrt::resume_foreground(Dispatcher()); co_await winrt::resume_foreground(Dispatcher());
_UpdateSettingsFromUIThread(_settings); _UpdateSettingsFromUIThread();
_UpdateAppearanceFromUIThread(_focused ? _settings->FocusedAppearance() : _settings->UnfocusedAppearance()); _UpdateAppearanceFromUIThread(_focused ? _core.FocusedAppearance() : _core.UnfocusedAppearance());
} }
// Method Description: // Method Description:
// - Dispatches a call to the UI thread and updates the appearance // - Dispatches a call to the UI thread and updates the appearance
// Arguments: // Arguments:
// - newAppearance: the new appearance to set // - newAppearance: the new appearance to set
winrt::fire_and_forget TermControl::UpdateAppearance(winrt::com_ptr<ControlAppearance> newAppearance) winrt::fire_and_forget TermControl::UpdateAppearance(IControlAppearance newAppearance)
{ {
// Dispatch a call to the UI thread // Dispatch a call to the UI thread
co_await winrt::resume_foreground(Dispatcher()); co_await winrt::resume_foreground(Dispatcher());
@ -267,17 +276,17 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// - INVARIANT: This method must be called from the UI thread. // - INVARIANT: This method must be called from the UI thread.
// Arguments: // Arguments:
// - newSettings: the new settings to set // - newSettings: the new settings to set
void TermControl::_UpdateSettingsFromUIThread(winrt::com_ptr<ControlSettings> newSettings) void TermControl::_UpdateSettingsFromUIThread()
{ {
if (_IsClosing()) if (_IsClosing())
{ {
return; return;
} }
_core.UpdateSettings(newSettings.try_as<IControlSettings>()); // TODO! // _core.UpdateSettings(settings); // TODO!
// Update our control settings // Update our control settings
_ApplyUISettings(newSettings); _ApplyUISettings();
} }
// Method Description: // Method Description:
@ -285,16 +294,16 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// - INVARIANT: This method must be called from the UI thread. // - INVARIANT: This method must be called from the UI thread.
// Arguments: // Arguments:
// - newAppearance: the new appearance to set // - newAppearance: the new appearance to set
void TermControl::_UpdateAppearanceFromUIThread(winrt::com_ptr<ControlAppearance> newAppearance) void TermControl::_UpdateAppearanceFromUIThread(Control::IControlAppearance newAppearance)
{ {
if (_IsClosing()) if (_IsClosing())
{ {
return; return;
} }
if (!newAppearance->BackgroundImage().empty()) if (!newAppearance.BackgroundImage().empty())
{ {
Windows::Foundation::Uri imageUri{ newAppearance->BackgroundImage() }; Windows::Foundation::Uri imageUri{ newAppearance.BackgroundImage() };
// Check if the image brush is already pointing to the image // Check if the image brush is already pointing to the image
// in the modified settings; if it isn't (or isn't there), // in the modified settings; if it isn't (or isn't there),
@ -314,10 +323,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
// Apply stretch, opacity and alignment settings // Apply stretch, opacity and alignment settings
BackgroundImage().Stretch(newAppearance->BackgroundImageStretchMode()); BackgroundImage().Stretch(newAppearance.BackgroundImageStretchMode());
BackgroundImage().Opacity(newAppearance->BackgroundImageOpacity()); BackgroundImage().Opacity(newAppearance.BackgroundImageOpacity());
BackgroundImage().HorizontalAlignment(newAppearance->BackgroundImageHorizontalAlignment()); BackgroundImage().HorizontalAlignment(newAppearance.BackgroundImageHorizontalAlignment());
BackgroundImage().VerticalAlignment(newAppearance->BackgroundImageVerticalAlignment()); BackgroundImage().VerticalAlignment(newAppearance.BackgroundImageVerticalAlignment());
} }
else else
{ {
@ -325,15 +334,16 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
// Update our control settings // Update our control settings
const auto bg = newAppearance->DefaultBackground(); const auto bg = newAppearance.DefaultBackground();
_changeBackgroundColor(bg); _changeBackgroundColor(bg);
// Set TSF Foreground // Set TSF Foreground
Media::SolidColorBrush foregroundBrush{}; Media::SolidColorBrush foregroundBrush{};
foregroundBrush.Color(static_cast<til::color>(newAppearance->DefaultForeground())); foregroundBrush.Color(static_cast<til::color>(newAppearance.DefaultForeground()));
TSFInputControl().Foreground(foregroundBrush); TSFInputControl().Foreground(foregroundBrush);
_core.UpdateAppearance(newAppearance.try_as<IControlAppearance>()); // TODO!
// _core.UpdateAppearance(newAppearance.try_as<IControlAppearance>());
} }
// Method Description: // Method Description:
@ -368,21 +378,23 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// - <none> // - <none>
// Return Value: // Return Value:
// - <none> // - <none>
void TermControl::_ApplyUISettings(const winrt::com_ptr<ControlSettings>& newSettings) void TermControl::_ApplyUISettings()
{ {
_InitializeBackgroundBrush(); _InitializeBackgroundBrush();
const auto bg = newSettings->FocusedAppearance()->DefaultBackground(); // settings might be out-of-proc in the future
auto settings{ _core.Settings() };
const auto bg = _core.FocusedAppearance().DefaultBackground();
_changeBackgroundColor(bg); _changeBackgroundColor(bg);
// Apply padding as swapChainPanel's margin // Apply padding as swapChainPanel's margin
const auto newMargin = ParseThicknessFromPadding(newSettings->Padding()); const auto newMargin = ParseThicknessFromPadding(settings.Padding());
SwapChainPanel().Margin(newMargin); SwapChainPanel().Margin(newMargin);
TSFInputControl().Margin(newMargin); TSFInputControl().Margin(newMargin);
// Apply settings for scrollbar // Apply settings for scrollbar
if (newSettings->ScrollState() == ScrollbarState::Hidden) if (settings.ScrollState() == ScrollbarState::Hidden)
{ {
// In the scenario where the user has turned off the OS setting to automatically hide scrollbars, the // In the scenario where the user has turned off the OS setting to automatically hide scrollbars, the
// Terminal scrollbar would still be visible; so, we need to set the control's visibility accordingly to // Terminal scrollbar would still be visible; so, we need to set the control's visibility accordingly to
@ -410,7 +422,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Method Description: // Method Description:
// - Set up each layer's brush used to display the control's background. // - Set up each layer's brush used to display the control's background.
// - Respects the settings for acrylic, background image and opacity from // - Respects the settings for acrylic, background image and opacity from
// _settings-> // _settings.
// * If acrylic is not enabled, setup a solid color background, otherwise // * If acrylic is not enabled, setup a solid color background, otherwise
// use bgcolor as acrylic's tint // use bgcolor as acrylic's tint
// - Avoids image flickering and acrylic brush redraw if settings are changed // - Avoids image flickering and acrylic brush redraw if settings are changed
@ -718,7 +730,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
} }
// Now that the renderer is set up, update the appearance for initialization // Now that the renderer is set up, update the appearance for initialization
_UpdateAppearanceFromUIThread(_settings->FocusedAppearance()); _UpdateAppearanceFromUIThread(_core.FocusedAppearance());
_initializedTerminal = true; _initializedTerminal = true;
@ -1507,7 +1519,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// appearances anyway so there's no need to switch back upon gaining focus // appearances anyway so there's no need to switch back upon gaining focus
if (_settings->UnfocusedAppearance()) if (_settings->UnfocusedAppearance())
{ {
UpdateAppearance(_settings->FocusedAppearance()); UpdateAppearance(_core.FocusedAppearance());
} }
} }
@ -1549,10 +1561,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// Check if there is an unfocused config we should set the appearance to // Check if there is an unfocused config we should set the appearance to
// upon losing focus // upon losing focus
if (_settings->UnfocusedAppearance()) // if (_settings->UnfocusedAppearance())
{ // {
UpdateAppearance(_settings->UnfocusedAppearance()); UpdateAppearance(_core.UnfocusedAppearance());
} // }
} }
// Method Description: // Method Description:
@ -2363,21 +2375,21 @@ namespace winrt::Microsoft::Terminal::Control::implementation
return _settings.try_as<IControlSettings>(); return _settings.try_as<IControlSettings>();
} }
void TermControl::Settings(IControlSettings newSettings) // void TermControl::Settings(IControlSettings newSettings)
{ // {
DebugBreak(); // DebugBreak();
_settings = winrt::make_self<ControlSettings>(newSettings, nullptr); // _settings = winrt::make_self<ControlSettings>(newSettings, nullptr);
} // }
IControlAppearance TermControl::UnfocusedAppearance() const IControlAppearance TermControl::UnfocusedAppearance() const
{ {
return *_settings->UnfocusedAppearance(); return *_settings->UnfocusedAppearance();
} }
void TermControl::UnfocusedAppearance(IControlAppearance newAppearance) // void TermControl::UnfocusedAppearance(IControlAppearance newAppearance)
{ // {
_settings = winrt::make_self<ControlSettings>(_settings.try_as<IControlSettings>(), newAppearance); // _settings = winrt::make_self<ControlSettings>(_settings.try_as<IControlSettings>(), newAppearance);
} // }
Windows::Foundation::IReference<winrt::Windows::UI::Color> TermControl::TabColor() noexcept Windows::Foundation::IReference<winrt::Windows::UI::Color> TermControl::TabColor() noexcept
{ {

View file

@ -26,9 +26,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation
{ {
struct TermControl : TermControlT<TermControl> struct TermControl : TermControlT<TermControl>
{ {
TermControl(IControlSettings settings, TerminalConnection::ITerminalConnection connection); TermControl(IControlSettings settings,
Control::IControlAppearance unfocusedAppearance,
TerminalConnection::ITerminalConnection connection);
winrt::fire_and_forget UpdateSettings(); winrt::fire_and_forget UpdateControlSettings(Control::IControlSettings settings);
winrt::fire_and_forget UpdateControlSettings(Control::IControlSettings settings, Control::IControlAppearance unfocusedAppearance);
hstring GetProfileName() const; hstring GetProfileName() const;
@ -89,9 +92,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
const Windows::UI::Xaml::Thickness GetPadding(); const Windows::UI::Xaml::Thickness GetPadding();
IControlSettings Settings() const; IControlSettings Settings() const;
void Settings(IControlSettings newSettings); // void Settings(IControlSettings newSettings);
IControlAppearance UnfocusedAppearance() const; IControlAppearance UnfocusedAppearance() const;
void UnfocusedAppearance(IControlAppearance newSettings); // void UnfocusedAppearance(IControlAppearance newSettings);
static Windows::Foundation::Size GetProposedDimensions(IControlSettings const& settings, const uint32_t dpi); static Windows::Foundation::Size GetProposedDimensions(IControlSettings const& settings, const uint32_t dpi);
static Windows::Foundation::Size GetProposedDimensions(const winrt::Windows::Foundation::Size& initialSizeInChars, static Windows::Foundation::Size GetProposedDimensions(const winrt::Windows::Foundation::Size& initialSizeInChars,
@ -199,10 +202,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
return _closing; return _closing;
} }
void _UpdateSettingsFromUIThread(winrt::com_ptr<ControlSettings> newSettings); void _UpdateSettingsFromUIThread();
void _UpdateAppearanceFromUIThread(winrt::com_ptr<ControlAppearance> newAppearance); void _UpdateAppearanceFromUIThread(Control::IControlAppearance newAppearance);
void _ApplyUISettings(const winrt::com_ptr<ControlSettings>& newSettings); void _ApplyUISettings();
winrt::fire_and_forget UpdateAppearance(winrt::com_ptr<ControlAppearance> newAppearance); winrt::fire_and_forget UpdateAppearance(Control::IControlAppearance newAppearance);
void _InitializeBackgroundBrush(); void _InitializeBackgroundBrush();
void _BackgroundColorChangedHandler(const IInspectable& sender, const IInspectable& args); void _BackgroundColorChangedHandler(const IInspectable& sender, const IInspectable& args);

View file

@ -17,14 +17,16 @@ namespace Microsoft.Terminal.Control
ICoreState ICoreState
{ {
TermControl(IControlSettings settings, TermControl(IControlSettings settings,
IControlAppearance unfocusedAppearance,
Microsoft.Terminal.TerminalConnection.ITerminalConnection connection); Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
static Windows.Foundation.Size GetProposedDimensions(IControlSettings settings, UInt32 dpi); static Windows.Foundation.Size GetProposedDimensions(IControlSettings settings, UInt32 dpi);
void UpdateSettings(); void UpdateControlSettings(IControlSettings settings);
void UpdateControlSettings(IControlSettings settings, IControlAppearance unfocusedAppearance);
Microsoft.Terminal.Control.IControlSettings Settings; Microsoft.Terminal.Control.IControlSettings Settings { get; };
Microsoft.Terminal.Control.IControlAppearance UnfocusedAppearance; Microsoft.Terminal.Control.IControlAppearance UnfocusedAppearance { get; };
event FontSizeChangedEventArgs FontSizeChanged; event FontSizeChangedEventArgs FontSizeChanged;
event Windows.Foundation.TypedEventHandler<Object, TitleChangedEventArgs> TitleChanged; event Windows.Foundation.TypedEventHandler<Object, TitleChangedEventArgs> TitleChanged;

View file

@ -349,7 +349,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
} }
Profiles::Profiles() : Profiles::Profiles() :
_previewControl{ Control::TermControl(Model::TerminalSettings{}, make<PreviewConnection>()) } _previewControl{ Control::TermControl(Model::TerminalSettings{}, nullptr, make<PreviewConnection>()) }
{ {
InitializeComponent(); InitializeComponent();
@ -404,26 +404,26 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
{ {
_PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentScrollState" }); _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentScrollState" });
} }
_previewControl.Settings(_State.Profile().TermSettings()); // _previewControl.Settings(_State.Profile().TermSettings());
_previewControl.UpdateSettings(); _previewControl.UpdateControlSettings(_State.Profile().TermSettings());
}); });
// The Appearances object handles updating the values in the settings UI, but // The Appearances object handles updating the values in the settings UI, but
// we still need to listen to the changes here just to update the preview control // we still need to listen to the changes here just to update the preview control
_AppearanceViewModelChangedRevoker = _State.Profile().DefaultAppearance().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& /*args*/) { _AppearanceViewModelChangedRevoker = _State.Profile().DefaultAppearance().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& /*args*/) {
_previewControl.Settings(_State.Profile().TermSettings()); // _previewControl.Settings(_State.Profile().TermSettings());
_previewControl.UpdateSettings(); _previewControl.UpdateControlSettings(_State.Profile().TermSettings());
}); });
// Navigate to the pivot in the provided navigation state // Navigate to the pivot in the provided navigation state
ProfilesPivot().SelectedIndex(static_cast<int>(_State.LastActivePivot())); ProfilesPivot().SelectedIndex(static_cast<int>(_State.LastActivePivot()));
_previewControl.Settings(_State.Profile().TermSettings()); // _previewControl.Settings(_State.Profile().TermSettings());
// There is a possibility that the control has not fully initialized yet, // There is a possibility that the control has not fully initialized yet,
// so wait for it to initialize before updating the settings (so we know // so wait for it to initialize before updating the settings (so we know
// that the renderer is set up) // that the renderer is set up)
_previewControl.Initialized([&](auto&& /*s*/, auto&& /*e*/) { _previewControl.Initialized([&](auto&& /*s*/, auto&& /*e*/) {
_previewControl.UpdateSettings(); _previewControl.UpdateControlSettings(_State.Profile().TermSettings());
}); });
} }

View file

@ -11,7 +11,8 @@
X(til::color, CursorColor, DEFAULT_CURSOR_COLOR) \ X(til::color, CursorColor, DEFAULT_CURSOR_COLOR) \
X(winrt::Microsoft::Terminal::Core::CursorStyle, CursorShape, winrt::Microsoft::Terminal::Core::CursorStyle::Vintage) \ X(winrt::Microsoft::Terminal::Core::CursorStyle, CursorShape, winrt::Microsoft::Terminal::Core::CursorStyle::Vintage) \
X(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT) \ X(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT) \
X(bool, IntenseIsBright, true) X(bool, IntenseIsBright, true) \
X(bool, AdjustIndistinguishableColors, true)
// --------------------------- Control Appearance --------------------------- // --------------------------- Control Appearance ---------------------------
// All of these settings are defined in IControlSettings. // All of these settings are defined in IControlSettings.