diff --git a/DEADJOE b/DEADJOE new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/host/settings.cpp b/src/host/settings.cpp index 27b4190599..413809ecb4 100644 --- a/src/host/settings.cpp +++ b/src/host/settings.cpp @@ -81,8 +81,8 @@ Settings::Settings() : _CursorColor = Cursor::s_InvertCursorColor; _CursorType = CursorType::Legacy; - gsl::span tableView = { _ColorTable, gsl::narrow(COLOR_TABLE_SIZE) }; - gsl::span xtermTableView = { _XtermColorTable, gsl::narrow(XTERM_COLOR_TABLE_SIZE) }; + gsl::span tableView = { _256ColorTable, gsl::narrow(COLOR_TABLE_SIZE) }; + gsl::span xtermTableView = { _256ColorTable, gsl::narrow(XTERM_COLOR_TABLE_SIZE) }; ::Microsoft::Console::Utils::Initialize256ColorTable(xtermTableView); ::Microsoft::Console::Utils::InitializeCampbellColorTableForConhost(tableView); } @@ -123,8 +123,9 @@ void Settings::ApplyDesktopSpecificDefaults() _uNumberOfHistoryBuffers = 4; _bHistoryNoDup = FALSE; - gsl::span tableView = { _ColorTable, gsl::narrow(COLOR_TABLE_SIZE) }; + gsl::span tableView = { _256ColorTable, gsl::narrow(COLOR_TABLE_SIZE) }; ::Microsoft::Console::Utils::InitializeCampbellColorTableForConhost(tableView); + // We don't need to worry about the 256 colors, because they're always set in the ctor. _fTrimLeadingZeros = false; _fEnableColorSelection = false; @@ -221,7 +222,7 @@ void Settings::InitFromStateInfo(_In_ PCONSOLE_STATE_INFO pStateInfo) _bHistoryNoDup = pStateInfo->HistoryNoDup; _uHistoryBufferSize = pStateInfo->HistoryBufferSize; _uNumberOfHistoryBuffers = pStateInfo->NumberOfHistoryBuffers; - memmove(_ColorTable, pStateInfo->ColorTable, sizeof(_ColorTable)); + memmove(_256ColorTable, pStateInfo->ColorTable, COLOR_TABLE_SIZE * sizeof(COLORREF)); _uCodePage = pStateInfo->CodePage; _bWrapText = !!pStateInfo->fWrapText; _fFilterOnPaste = pStateInfo->fFilterOnPaste; @@ -263,7 +264,8 @@ CONSOLE_STATE_INFO Settings::CreateConsoleStateInfo() const csi.HistoryNoDup = _bHistoryNoDup; csi.HistoryBufferSize = _uHistoryBufferSize; csi.NumberOfHistoryBuffers = _uNumberOfHistoryBuffers; - memmove(csi.ColorTable, _ColorTable, sizeof(_ColorTable)); + // memmove(csi.ColorTable, _ColorTable, sizeof(_ColorTable)); + memmove(csi.ColorTable, _256ColorTable, COLOR_TABLE_SIZE * sizeof(COLORREF)); csi.CodePage = _uCodePage; csi.fWrapText = !!_bWrapText; csi.fFilterOnPaste = _fFilterOnPaste; @@ -691,24 +693,36 @@ void Settings::SetHistoryNoDup(const bool bHistoryNoDup) const COLORREF* const Settings::GetColorTable() const { - return _ColorTable; + return _256ColorTable; } + +// Method Description: +// - Sets cSize entries of the colortable, by copying the values from +// pColorTable into our color table. Copies at most COLOR_TABLE_SIZE (16) +// entries. +// Arguments: +// - pColorTable: The array of COLORREFs to copy from +// - cSize the number of entries in pColorTable +// Return Value: +// - void Settings::SetColorTable(_In_reads_(cSize) const COLORREF* const pColorTable, const size_t cSize) { size_t cSizeWritten = std::min(cSize, static_cast(COLOR_TABLE_SIZE)); - memmove(_ColorTable, pColorTable, cSizeWritten * sizeof(COLORREF)); + // memmove(_ColorTable, pColorTable, cSizeWritten * sizeof(COLORREF)); + memmove(_256ColorTable, pColorTable, cSizeWritten * sizeof(COLORREF)); } void Settings::SetColorTableEntry(const size_t index, const COLORREF ColorValue) { - if (index < ARRAYSIZE(_ColorTable)) - { - _ColorTable[index] = ColorValue; - } - else - { - _XtermColorTable[index] = ColorValue; - } + _256ColorTable[index] = ColorValue; + // if (index < ARRAYSIZE(_ColorTable)) + // { + // _ColorTable[index] = ColorValue; + // } + // else + // { + // _XtermColorTable[index] = ColorValue; + // } } bool Settings::IsStartupTitleIsLinkNameSet() const @@ -728,19 +742,21 @@ void Settings::UnsetStartupFlag(const DWORD dwFlagToUnset) const size_t Settings::GetColorTableSize() const { - return ARRAYSIZE(_ColorTable); + return COLOR_TABLE_SIZE; + // return ARRAYSIZE(_ColorTable); } COLORREF Settings::GetColorTableEntry(const size_t index) const { - if (index < ARRAYSIZE(_ColorTable)) - { - return _ColorTable[index]; - } - else - { - return _XtermColorTable[index]; - } + return _256ColorTable[index]; + // if (index < ARRAYSIZE(_ColorTable)) + // { + // return _ColorTable[index]; + // } + // else + // { + // return _XtermColorTable[index]; + // } } // Routine Description: @@ -797,7 +813,8 @@ WORD Settings::GenerateLegacyAttributes(const TextAttribute attributes) const // The index in ColorTable of the nearest match to Color. WORD Settings::FindNearestTableIndex(const COLORREF Color) const { - return ::FindNearestTableIndex(Color, _ColorTable, ARRAYSIZE(_ColorTable)); + // return ::FindNearestTableIndex(Color, _ColorTable, ARRAYSIZE(_ColorTable)); + return ::FindNearestTableIndex(Color, GetColorTable(), COLOR_TABLE_SIZE); } COLORREF Settings::GetCursorColor() const noexcept diff --git a/src/host/settings.hpp b/src/host/settings.hpp index 9a0c91e97a..620f939a96 100644 --- a/src/host/settings.hpp +++ b/src/host/settings.hpp @@ -214,7 +214,8 @@ private: UINT _uHistoryBufferSize; UINT _uNumberOfHistoryBuffers; BOOL _bHistoryNoDup; - COLORREF _ColorTable[COLOR_TABLE_SIZE]; + // The memcpy will end after COLOR_TABLE_SIZE entries in _256ColorTable. + COLORREF _256ColorTable[XTERM_COLOR_TABLE_SIZE]; // END - memcpy UINT _uCodePage; UINT _uScrollScale; @@ -234,7 +235,7 @@ private: bool _fUseDx; bool _fCopyColor; - COLORREF _XtermColorTable[XTERM_COLOR_TABLE_SIZE]; + // COLORREF _XtermColorTable[XTERM_COLOR_TABLE_SIZE]; // this is used for the special STARTF_USESIZE mode. bool _fUseWindowSizePixels;