Kernel/Terminal: Fix 24 bit ANSI SGR color parsing

This commit is contained in:
Bananymous 2025-06-05 02:38:07 +03:00
parent bf41b448d6
commit 8de19aff3c
2 changed files with 12 additions and 12 deletions

View File

@ -171,12 +171,12 @@ namespace Kernel
BAN::Optional<TerminalDriver::Color> VirtualTTY::get_24bit_color()
{
ASSERT(m_ansi_state.nums[1] == 2);
if (m_ansi_state.nums[2] < 1) return {};
if (m_ansi_state.nums[3] < 1) return {};
if (m_ansi_state.nums[4] < 1) return {};
const uint8_t r = BAN::Math::min(m_ansi_state.nums[2], 256) - 1;
const uint8_t g = BAN::Math::min(m_ansi_state.nums[3], 256) - 1;
const uint8_t b = BAN::Math::min(m_ansi_state.nums[4], 256) - 1;
if (m_ansi_state.nums[2] < 0) return {};
if (m_ansi_state.nums[3] < 0) return {};
if (m_ansi_state.nums[4] < 0) return {};
const uint8_t r = BAN::Math::min(m_ansi_state.nums[2], 255);
const uint8_t g = BAN::Math::min(m_ansi_state.nums[3], 255);
const uint8_t b = BAN::Math::min(m_ansi_state.nums[4], 255);
return TerminalDriver::Color(r, g, b);
}

View File

@ -403,12 +403,12 @@ BAN::Optional<uint32_t> Terminal::get_8bit_color()
BAN::Optional<uint32_t> Terminal::get_24bit_color()
{
ASSERT(m_csi_info.fields[1] == 2);
if (m_csi_info.fields[2] < 1) return {};
if (m_csi_info.fields[3] < 1) return {};
if (m_csi_info.fields[4] < 1) return {};
const uint8_t r = BAN::Math::min(m_csi_info.fields[2], 256) - 1;
const uint8_t g = BAN::Math::min(m_csi_info.fields[3], 256) - 1;
const uint8_t b = BAN::Math::min(m_csi_info.fields[4], 256) - 1;
if (m_csi_info.fields[2] < 0) return {};
if (m_csi_info.fields[3] < 0) return {};
if (m_csi_info.fields[4] < 0) return {};
const uint8_t r = BAN::Math::min(m_csi_info.fields[2], 255);
const uint8_t g = BAN::Math::min(m_csi_info.fields[3], 255);
const uint8_t b = BAN::Math::min(m_csi_info.fields[4], 255);
return b | (g << 8) | (r << 16) | (0xCC << 24);
}