Merge remote-tracking branch 'origin/main' into feature/llm
This commit is contained in:
commit
ef27d976ea
|
@ -891,6 +891,9 @@ void _stdcall TerminalSetTheme(void* terminal, TerminalTheme theme, LPCWSTR font
|
||||||
renderSettings.SetColorTableEntry(tableIndex, gsl::at(theme.ColorTable, tableIndex));
|
renderSettings.SetColorTableEntry(tableIndex, gsl::at(theme.ColorTable, tableIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save these values as the new default render settings.
|
||||||
|
renderSettings.SaveDefaultSettings();
|
||||||
|
|
||||||
publicTerminal->_terminal->SetCursorStyle(static_cast<Microsoft::Console::VirtualTerminal::DispatchTypes::CursorStyle>(theme.CursorStyle));
|
publicTerminal->_terminal->SetCursorStyle(static_cast<Microsoft::Console::VirtualTerminal::DispatchTypes::CursorStyle>(theme.CursorStyle));
|
||||||
|
|
||||||
publicTerminal->_desiredFont = { fontFamily, 0, DEFAULT_FONT_WEIGHT, static_cast<float>(fontSize), CP_UTF8 };
|
publicTerminal->_desiredFont = { fontFamily, 0, DEFAULT_FONT_WEIGHT, static_cast<float>(fontSize), CP_UTF8 };
|
||||||
|
|
|
@ -101,6 +101,9 @@ void Terminal::UpdateSettings(ICoreSettings settings)
|
||||||
GetRenderSettings().SetColorTableEntry(TextColor::FRAME_BACKGROUND, til::color{ settings.TabColor().Value() });
|
GetRenderSettings().SetColorTableEntry(TextColor::FRAME_BACKGROUND, til::color{ settings.TabColor().Value() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save the changes made above and in UpdateAppearance as the new default render settings.
|
||||||
|
GetRenderSettings().SaveDefaultSettings();
|
||||||
|
|
||||||
if (!_startingTabColor && settings.StartingTabColor())
|
if (!_startingTabColor && settings.StartingTabColor())
|
||||||
{
|
{
|
||||||
_startingTabColor = settings.StartingTabColor().Value();
|
_startingTabColor = settings.StartingTabColor().Value();
|
||||||
|
|
|
@ -349,6 +349,8 @@ void Settings::Validate()
|
||||||
TextAttribute::SetLegacyDefaultAttributes(_wFillAttribute);
|
TextAttribute::SetLegacyDefaultAttributes(_wFillAttribute);
|
||||||
// And calculate the position of the default colors in the color table.
|
// And calculate the position of the default colors in the color table.
|
||||||
CalculateDefaultColorIndices();
|
CalculateDefaultColorIndices();
|
||||||
|
// We can also then save these values as the default render settings.
|
||||||
|
SaveDefaultRenderSettings();
|
||||||
|
|
||||||
FAIL_FAST_IF(!(_dwWindowSize.X > 0));
|
FAIL_FAST_IF(!(_dwWindowSize.X > 0));
|
||||||
FAIL_FAST_IF(!(_dwWindowSize.Y > 0));
|
FAIL_FAST_IF(!(_dwWindowSize.Y > 0));
|
||||||
|
@ -755,6 +757,11 @@ void Settings::CalculateDefaultColorIndices() noexcept
|
||||||
_renderSettings.SetColorAliasIndex(ColorAlias::DefaultBackground, backgroundAlias);
|
_renderSettings.SetColorAliasIndex(ColorAlias::DefaultBackground, backgroundAlias);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::SaveDefaultRenderSettings() noexcept
|
||||||
|
{
|
||||||
|
_renderSettings.SaveDefaultSettings();
|
||||||
|
}
|
||||||
|
|
||||||
bool Settings::IsTerminalScrolling() const noexcept
|
bool Settings::IsTerminalScrolling() const noexcept
|
||||||
{
|
{
|
||||||
return _TerminalScrolling;
|
return _TerminalScrolling;
|
||||||
|
|
|
@ -172,6 +172,7 @@ public:
|
||||||
void SetInterceptCopyPaste(const bool interceptCopyPaste) noexcept;
|
void SetInterceptCopyPaste(const bool interceptCopyPaste) noexcept;
|
||||||
|
|
||||||
void CalculateDefaultColorIndices() noexcept;
|
void CalculateDefaultColorIndices() noexcept;
|
||||||
|
void SaveDefaultRenderSettings() noexcept;
|
||||||
|
|
||||||
bool IsTerminalScrolling() const noexcept;
|
bool IsTerminalScrolling() const noexcept;
|
||||||
void SetTerminalScrolling(const bool terminalScrollingEnabled) noexcept;
|
void SetTerminalScrolling(const bool terminalScrollingEnabled) noexcept;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include "../interactivity/inc/ServiceLocator.hpp"
|
#include "../interactivity/inc/ServiceLocator.hpp"
|
||||||
#include "../../inc/conattrs.hpp"
|
#include "../../inc/conattrs.hpp"
|
||||||
|
#include "../../types/inc/colorTable.hpp"
|
||||||
#include "../../types/inc/Viewport.hpp"
|
#include "../../types/inc/Viewport.hpp"
|
||||||
|
|
||||||
#include "../../inc/TestUtils.h"
|
#include "../../inc/TestUtils.h"
|
||||||
|
@ -2070,6 +2071,15 @@ void ScreenBufferTests::VtRestoreColorTableReport()
|
||||||
// Blue component is clamped at 100%, so 150% interpreted as 100%
|
// Blue component is clamped at 100%, so 150% interpreted as 100%
|
||||||
stateMachine.ProcessString(L"\033P2$p14;2;0;0;150\033\\");
|
stateMachine.ProcessString(L"\033P2$p14;2;0;0;150\033\\");
|
||||||
VERIFY_ARE_EQUAL(RGB(0, 0, 255), gci.GetColorTableEntry(14));
|
VERIFY_ARE_EQUAL(RGB(0, 0, 255), gci.GetColorTableEntry(14));
|
||||||
|
|
||||||
|
Log::Comment(L"RIS restores initial Campbell color scheme");
|
||||||
|
|
||||||
|
stateMachine.ProcessString(L"\033c");
|
||||||
|
for (auto i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
const COLORREF expectedColor = Microsoft::Console::Utils::CampbellColorTable()[i];
|
||||||
|
VERIFY_ARE_EQUAL(expectedColor, gci.GetColorTableEntry(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenBufferTests::ResizeTraditionalDoesNotDoubleFreeAttrRows()
|
void ScreenBufferTests::ResizeTraditionalDoesNotDoubleFreeAttrRows()
|
||||||
|
@ -3352,6 +3362,13 @@ void ScreenBufferTests::AssignColorAliases()
|
||||||
stateMachine.ProcessString(L"\033[2;34;56,|");
|
stateMachine.ProcessString(L"\033[2;34;56,|");
|
||||||
VERIFY_ARE_EQUAL(34u, renderSettings.GetColorAliasIndex(ColorAlias::FrameForeground));
|
VERIFY_ARE_EQUAL(34u, renderSettings.GetColorAliasIndex(ColorAlias::FrameForeground));
|
||||||
VERIFY_ARE_EQUAL(56u, renderSettings.GetColorAliasIndex(ColorAlias::FrameBackground));
|
VERIFY_ARE_EQUAL(56u, renderSettings.GetColorAliasIndex(ColorAlias::FrameBackground));
|
||||||
|
|
||||||
|
Log::Comment(L"Test RIS restores initial color assignments");
|
||||||
|
stateMachine.ProcessString(L"\033c");
|
||||||
|
VERIFY_ARE_EQUAL(defaultFg, renderSettings.GetColorAliasIndex(ColorAlias::DefaultForeground));
|
||||||
|
VERIFY_ARE_EQUAL(defaultBg, renderSettings.GetColorAliasIndex(ColorAlias::DefaultBackground));
|
||||||
|
VERIFY_ARE_EQUAL(frameFg, renderSettings.GetColorAliasIndex(ColorAlias::FrameForeground));
|
||||||
|
VERIFY_ARE_EQUAL(frameBg, renderSettings.GetColorAliasIndex(ColorAlias::FrameBackground));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenBufferTests::DeleteCharsNearEndOfLine()
|
void ScreenBufferTests::DeleteCharsNearEndOfLine()
|
||||||
|
|
|
@ -576,6 +576,8 @@ void Menu::s_PropertiesUpdate(PCONSOLE_STATE_INFO pStateInfo)
|
||||||
TextAttribute::SetLegacyDefaultAttributes(pStateInfo->ScreenAttributes);
|
TextAttribute::SetLegacyDefaultAttributes(pStateInfo->ScreenAttributes);
|
||||||
// And recalculate the position of the default colors in the color table.
|
// And recalculate the position of the default colors in the color table.
|
||||||
gci.CalculateDefaultColorIndices();
|
gci.CalculateDefaultColorIndices();
|
||||||
|
// Then save these values as the new default render settings.
|
||||||
|
gci.SaveDefaultRenderSettings();
|
||||||
|
|
||||||
// Set the screen info's default text attributes to defaults -
|
// Set the screen info's default text attributes to defaults -
|
||||||
ScreenInfo.SetDefaultAttributes({}, TextAttribute{ gci.GetPopupFillAttribute() });
|
ScreenInfo.SetDefaultAttributes({}, TextAttribute{ gci.GetPopupFillAttribute() });
|
||||||
|
|
|
@ -26,6 +26,29 @@ RenderSettings::RenderSettings() noexcept
|
||||||
SetColorAliasIndex(ColorAlias::DefaultBackground, TextColor::DARK_BLACK);
|
SetColorAliasIndex(ColorAlias::DefaultBackground, TextColor::DARK_BLACK);
|
||||||
SetColorAliasIndex(ColorAlias::FrameForeground, TextColor::FRAME_FOREGROUND);
|
SetColorAliasIndex(ColorAlias::FrameForeground, TextColor::FRAME_FOREGROUND);
|
||||||
SetColorAliasIndex(ColorAlias::FrameBackground, TextColor::FRAME_BACKGROUND);
|
SetColorAliasIndex(ColorAlias::FrameBackground, TextColor::FRAME_BACKGROUND);
|
||||||
|
|
||||||
|
SaveDefaultSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Routine Description:
|
||||||
|
// - Saves the current color table and color aliases as the default values, so
|
||||||
|
// we can later restore them when a hard reset (RIS) is requested.
|
||||||
|
void RenderSettings::SaveDefaultSettings() noexcept
|
||||||
|
{
|
||||||
|
_defaultColorTable = _colorTable;
|
||||||
|
_defaultColorAliasIndices = _colorAliasIndices;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Routine Description:
|
||||||
|
// - Resets the render settings to their default values. which is typically
|
||||||
|
// what they were set to at startup.
|
||||||
|
void RenderSettings::RestoreDefaultSettings() noexcept
|
||||||
|
{
|
||||||
|
_colorTable = _defaultColorTable;
|
||||||
|
_colorAliasIndices = _defaultColorAliasIndices;
|
||||||
|
// For now, DECSCNM is the only render mode we need to reset. The others are
|
||||||
|
// all user preferences that can't be changed programmatically.
|
||||||
|
_renderMode.reset(Mode::ScreenReversed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Routine Description:
|
// Routine Description:
|
||||||
|
|
|
@ -29,6 +29,8 @@ namespace Microsoft::Console::Render
|
||||||
};
|
};
|
||||||
|
|
||||||
RenderSettings() noexcept;
|
RenderSettings() noexcept;
|
||||||
|
void SaveDefaultSettings() noexcept;
|
||||||
|
void RestoreDefaultSettings() noexcept;
|
||||||
void SetRenderMode(const Mode mode, const bool enabled) noexcept;
|
void SetRenderMode(const Mode mode, const bool enabled) noexcept;
|
||||||
bool GetRenderMode(const Mode mode) const noexcept;
|
bool GetRenderMode(const Mode mode) const noexcept;
|
||||||
const std::array<COLORREF, TextColor::TABLE_SIZE>& GetColorTable() const noexcept;
|
const std::array<COLORREF, TextColor::TABLE_SIZE>& GetColorTable() const noexcept;
|
||||||
|
@ -48,6 +50,8 @@ namespace Microsoft::Console::Render
|
||||||
til::enumset<Mode> _renderMode{ Mode::BlinkAllowed, Mode::IntenseIsBright };
|
til::enumset<Mode> _renderMode{ Mode::BlinkAllowed, Mode::IntenseIsBright };
|
||||||
std::array<COLORREF, TextColor::TABLE_SIZE> _colorTable;
|
std::array<COLORREF, TextColor::TABLE_SIZE> _colorTable;
|
||||||
std::array<size_t, static_cast<size_t>(ColorAlias::ENUM_COUNT)> _colorAliasIndices;
|
std::array<size_t, static_cast<size_t>(ColorAlias::ENUM_COUNT)> _colorAliasIndices;
|
||||||
|
std::array<COLORREF, TextColor::TABLE_SIZE> _defaultColorTable;
|
||||||
|
std::array<size_t, static_cast<size_t>(ColorAlias::ENUM_COUNT)> _defaultColorAliasIndices;
|
||||||
size_t _blinkCycle = 0;
|
size_t _blinkCycle = 0;
|
||||||
mutable bool _blinkIsInUse = false;
|
mutable bool _blinkIsInUse = false;
|
||||||
bool _blinkShouldBeFaint = false;
|
bool _blinkShouldBeFaint = false;
|
||||||
|
|
|
@ -3019,8 +3019,13 @@ void AdaptDispatch::HardReset()
|
||||||
EraseInDisplay(DispatchTypes::EraseType::All);
|
EraseInDisplay(DispatchTypes::EraseType::All);
|
||||||
EraseInDisplay(DispatchTypes::EraseType::Scrollback);
|
EraseInDisplay(DispatchTypes::EraseType::Scrollback);
|
||||||
|
|
||||||
// Set the DECSCNM screen mode back to normal.
|
// Set the color table and render modes back to their initial startup values.
|
||||||
_renderSettings.SetRenderMode(RenderSettings::Mode::ScreenReversed, false);
|
_renderSettings.RestoreDefaultSettings();
|
||||||
|
// Let the renderer know that the background and frame colors may have changed.
|
||||||
|
if (_renderer)
|
||||||
|
{
|
||||||
|
_renderer->TriggerRedrawAll(true, true);
|
||||||
|
}
|
||||||
|
|
||||||
// Cursor to 1,1 - the Soft Reset guarantees this is absolute
|
// Cursor to 1,1 - the Soft Reset guarantees this is absolute
|
||||||
CursorPosition(1, 1);
|
CursorPosition(1, 1);
|
||||||
|
|
Loading…
Reference in New Issue