Cemu/src/gui/wxgui/wxHelper.h

40 lines
1.3 KiB
C++

#pragma once
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/mstream.h>
namespace wxHelper
{
inline fs::path MakeFSPath(const wxString& str)
{
auto tmpUtf8 = str.ToUTF8();
auto sv = std::basic_string_view<char8_t>((const char8_t*)tmpUtf8.data(), tmpUtf8.length());
return fs::path(sv);
}
inline wxString FromPath(const fs::path& path)
{
std::string str = _pathToUtf8(path);
return wxString::FromUTF8(str);
}
inline wxColour CalculateAccentColour(const wxColour& bgColour)
{
const uint32 bgLightness = (bgColour.GetRed() + bgColour.GetGreen() + bgColour.GetBlue()) / 3;
const bool isDarkTheme = bgLightness < 128;
wxColour bgColourSecondary = bgColour.ChangeLightness(isDarkTheme ? 110 : 90); // color for even rows
// for very light themes we'll use a blue tint to match the older Windows Cemu look
if (bgLightness > 250)
bgColourSecondary = wxColour(bgColour.Red() - 13, bgColour.Green() - 6, bgColour.Blue() - 2);
return bgColourSecondary;
}
static wxBitmap LoadThemedBitmapFromPNG(const uint8* data, size_t size, const wxColour& tint)
{
wxMemoryInputStream strm(data, size);
wxImage img(strm, wxBITMAP_TYPE_PNG);
img.Replace(0x00, 0x00, 0x00, tint.Red(), tint.Green(), tint.Blue());
return wxBitmap(img);
}
};