[FancyZones] HEX to RGB util (#6275)

This commit is contained in:
Seraphima Zykova
2020-09-02 18:34:17 +03:00
committed by GitHub
parent 0349383d08
commit ce43b10b5b
5 changed files with 58 additions and 29 deletions

View File

@@ -135,35 +135,17 @@ public:
IFACEMETHODIMP_(COLORREF)
GetZoneColor() noexcept
{
// Skip the leading # and convert to long
const auto color = m_settings->GetSettings()->zoneColor;
const auto tmp = std::stol(color.substr(1), nullptr, 16);
const auto nR = (tmp & 0xFF0000) >> 16;
const auto nG = (tmp & 0xFF00) >> 8;
const auto nB = (tmp & 0xFF);
return RGB(nR, nG, nB);
return (FancyZonesUtils::HexToRGB(m_settings->GetSettings()->zoneColor));
}
IFACEMETHODIMP_(COLORREF)
GetZoneBorderColor() noexcept
{
// Skip the leading # and convert to long
const auto color = m_settings->GetSettings()->zoneBorderColor;
const auto tmp = std::stol(color.substr(1), nullptr, 16);
const auto nR = (tmp & 0xFF0000) >> 16;
const auto nG = (tmp & 0xFF00) >> 8;
const auto nB = (tmp & 0xFF);
return RGB(nR, nG, nB);
return (FancyZonesUtils::HexToRGB(m_settings->GetSettings()->zoneBorderColor));
}
IFACEMETHODIMP_(COLORREF)
GetZoneHighlightColor() noexcept
{
// Skip the leading # and convert to long
const auto color = m_settings->GetSettings()->zoneHighlightColor;
const auto tmp = std::stol(color.substr(1), nullptr, 16);
const auto nR = (tmp & 0xFF0000) >> 16;
const auto nG = (tmp & 0xFF00) >> 8;
const auto nB = (tmp & 0xFF);
return RGB(nR, nG, nB);
return (FancyZonesUtils::HexToRGB(m_settings->GetSettings()->zoneHighlightColor));
}
IFACEMETHODIMP_(int)
GetZoneHighlightOpacity() noexcept

View File

@@ -1,6 +1,7 @@
#pragma once
#include "gdiplus.h"
#include <common/string_utils.h>
namespace FancyZonesUtils
{
@@ -96,6 +97,24 @@ namespace FancyZonesUtils
SRCCOPY);
}
inline COLORREF HexToRGB(std::wstring_view hex, const COLORREF fallbackColor = RGB(255, 255, 255))
{
hex = left_trim<wchar_t>(trim<wchar_t>(hex), L"#");
try
{
const long long tmp = std::stoll(hex.data(), nullptr, 16);
const BYTE nR = (tmp & 0xFF0000) >> 16;
const BYTE nG = (tmp & 0xFF00) >> 8;
const BYTE nB = (tmp & 0xFF);
return RGB(nR, nG, nB);
}
catch (const std::exception&)
{
return fallbackColor;
}
}
inline void ParseDeviceId(PCWSTR deviceId, PWSTR parsedId, size_t size)
{
// We're interested in the unique part between the first and last #'s

View File

@@ -232,6 +232,27 @@ namespace FancyZonesUnitTests
CustomAssert::AreEqual(firstTime, monitorInfoCopy);
} while (next_permutation(monitorInfoPermutation.begin(), monitorInfoPermutation.end(), [](auto x, auto y) { return x.first < y.first; }));
}
TEST_METHOD(TestHexToRGB_rgb)
{
const auto expected = RGB(163, 246, 255);
const auto actual = HexToRGB(L"#A3F6FF");
Assert::AreEqual(expected, actual);
}
TEST_METHOD (TestHexToRGB_argb)
{
const auto expected = RGB(163, 246, 255);
const auto actual = HexToRGB(L"#FFA3F6FF");
Assert::AreEqual(expected, actual);
}
TEST_METHOD (TestHexToRGB_invalid)
{
const auto expected = RGB(255, 255, 255);
const auto actual = HexToRGB(L"zzz");
Assert::AreEqual(expected, actual);
}
};
}