handle windows dark mode theme and some color changes in editor

This commit is contained in:
Turánszki János
2025-06-12 06:54:41 +02:00
committed by GitHub
parent 334e5dbc3a
commit 997ec4fca5
7 changed files with 44 additions and 24 deletions
+4 -3
View File
@@ -10,7 +10,7 @@
extern ApplicationExeCustomization exe_customization = {
"Wicked Editor ",
wi::Color(130, 210, 220, 255),
wi::Color::Black()
wi::Color(17, 30, 43, 255)
};
using namespace wi::graphics;
@@ -301,7 +301,8 @@ void Editor::Initialize()
wi::font::AddFontStyle(config.GetText("font"));
}
wi::backlog::setFontColor(exe_customization.backlog_color);
wi::backlog::setFontColor(exe_customization.font_color);
wi::backlog::setBackgroundColor(exe_customization.background_color);
XMFLOAT4 clearcol = exe_customization.background_color;
swapChain.desc.clear_color[0] = clearcol.x;
swapChain.desc.clear_color[1] = clearcol.y;
@@ -434,7 +435,7 @@ void EditorComponent::ResizeLayout()
contentBrowserWnd.SetSize(XMFLOAT2(screenW / 1.6f, screenH / 1.2f));
contentBrowserWnd.SetPos(XMFLOAT2(screenW / 2.0f - contentBrowserWnd.scale.x / 2.0f, screenH / 2.0f - contentBrowserWnd.scale.y / 2.0f));
projectCreatorWnd.SetSize(XMFLOAT2(projectCreatorWnd.backgroundColorPicker.GetSize().x * 2 + 4 * 3, 780));
projectCreatorWnd.SetSize(XMFLOAT2(projectCreatorWnd.backgroundColorPicker.GetSize().x * 2 + 4 * 3, std::min(780.0f, screenH * 0.8f)));
projectCreatorWnd.SetPos(XMFLOAT2(screenW / 2.0f - projectCreatorWnd.scale.x / 2.0f, screenH / 2.0f - projectCreatorWnd.scale.y / 2.0f));
}
+3 -3
View File
@@ -294,8 +294,8 @@ static_assert(arraysize(EditorLocalizationStrings) == size_t(EditorLocalization:
struct ApplicationExeCustomization
{
char name_256padded[256] = {};
wi::Color backlog_color = wi::Color(130, 210, 220, 255); // color of backlog font (startup text)
wi::Color background_color = wi::Color(114, 170, 229); // color of startup background behind startup text
char name_256padded[256];
wi::Color font_color; // color of backlog font (startup text)
wi::Color background_color; // color of startup background behind startup text
};
extern ApplicationExeCustomization exe_customization;
+8 -8
View File
@@ -166,10 +166,10 @@ void ProjectCreatorWindow::Create(EditorComponent* _editor)
});
AddWidget(&cursorButton);
backlogColorPicker.Create("backlog color", wi::gui::Window::WindowControls::NONE);
backlogColorPicker.SetSize(XMFLOAT2(256, 256));
backlogColorPicker.SetPickColor(exe_customization.backlog_color);
AddWidget(&backlogColorPicker);
fontColorPicker.Create("font color", wi::gui::Window::WindowControls::NONE);
fontColorPicker.SetSize(XMFLOAT2(256, 256));
fontColorPicker.SetPickColor(exe_customization.font_color);
AddWidget(&fontColorPicker);
backgroundColorPicker.Create("background color", wi::gui::Window::WindowControls::NONE);
backgroundColorPicker.SetSize(XMFLOAT2(256, 256));
@@ -180,7 +180,7 @@ void ProjectCreatorWindow::Create(EditorComponent* _editor)
colorPreviewButton.SetText("Preview: these colors will be used by the application when showing the initialization screen and backlog text. [Click here to reset colors]");
colorPreviewButton.SetSize(XMFLOAT2(256, 64));
colorPreviewButton.OnClick([this](wi::gui::EventArgs args) {
backlogColorPicker.SetPickColor(exe_customization.backlog_color);
fontColorPicker.SetPickColor(exe_customization.font_color);
backgroundColorPicker.SetPickColor(exe_customization.background_color);
});
AddWidget(&colorPreviewButton);
@@ -329,7 +329,7 @@ end)
wi::vector<uint8_t> replacement(sizeof(ApplicationExeCustomization));
ApplicationExeCustomization& customization = *(ApplicationExeCustomization*)replacement.data();
std::memcpy(customization.name_256padded, name.c_str(), name.length());
customization.backlog_color = backlogColorPicker.GetPickColor();
customization.font_color = fontColorPicker.GetPickColor();
customization.background_color = backgroundColorPicker.GetPickColor();
std::copy(replacement.begin(), replacement.end(), it);
wilog("\tOverwritten ApplicationExeCustomization structure");
@@ -477,7 +477,7 @@ void ProjectCreatorWindow::ResizeLayout()
layout.jump();
layout.add_fullwidth(colorPreviewButton);
layout.add(backlogColorPicker, backgroundColorPicker);
layout.add(fontColorPicker, backgroundColorPicker);
layout.jump();
@@ -486,7 +486,7 @@ void ProjectCreatorWindow::ResizeLayout()
createButton.SetSize(XMFLOAT2(createButton.GetSize().x, std::max(30.0f, layout.height - createButton.GetPos().y - layout.padding * 2)));
colorPreviewButton.SetColor(backgroundColorPicker.GetPickColor());
colorPreviewButton.font.params.color = backlogColorPicker.GetPickColor();
colorPreviewButton.font.params.color = fontColorPicker.GetPickColor();
colorPreviewButton.font.params.v_align = wi::font::WIFALIGN_TOP;
colorPreviewButton.font.params.h_align = wi::font::WIFALIGN_LEFT;
colorPreviewButton.font.params.h_wrap = colorPreviewButton.GetSize().x;
+1 -1
View File
@@ -17,7 +17,7 @@ public:
wi::gui::Label cursorLabel;
wi::gui::Button cursorButton;
wi::gui::ColorPicker backlogColorPicker;
wi::gui::ColorPicker fontColorPicker;
wi::gui::ColorPicker backgroundColorPicker;
wi::gui::Button colorPreviewButton;
+19
View File
@@ -2,6 +2,9 @@
#include <fstream>
#include <shellapi.h> // drag n drop
#include <dwmapi.h> // DwmSetWindowAttribute
#pragma comment(lib, "dwmapi.lib")
Editor editor;
@@ -103,6 +106,21 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
break;
}
break;
case WM_SETTINGCHANGE:
{
// Change window theme dark mode based on system setting:
HKEY hKey;
DWORD value = 1; // Default to light mode (1 = light, 0 = dark)
DWORD dataSize = sizeof(value);
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
RegQueryValueEx(hKey, L"AppsUseLightTheme", NULL, NULL, (LPBYTE)&value, &dataSize);
RegCloseKey(hKey);
}
BOOL darkmode = value == 0;
DwmSetWindowAttribute(hWnd, DWMWA_USE_IMMERSIVE_DARK_MODE, &darkmode, sizeof(darkmode));
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
@@ -195,6 +213,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
height = info.rcMonitor.bottom - info.rcMonitor.top;
MoveWindow(hWnd, 0, 0, width, height, FALSE);
}
SendMessage(hWnd, WM_SETTINGCHANGE, 0, 0); // trigger dark mode theme detection
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
DragAcceptFiles(hWnd, TRUE);
+8 -9
View File
@@ -29,6 +29,7 @@ namespace wi::backlog
float scroll = 0;
int historyPos = 0;
wi::font::Params font_params;
wi::Color backgroundColor = wi::Color(17, 30, 43, 255);
Texture backgroundTex;
bool refitscroll = false;
wi::gui::TextInputField inputField;
@@ -222,21 +223,15 @@ namespace wi::backlog
GraphicsDevice* device = GetDevice();
device->EventBegin("Backlog", cmd);
if (!backgroundTex.IsValid())
{
const uint8_t colorData[] = { 0, 0, 43, 200, 43, 31, 141, 223 };
wi::texturehelper::CreateTexture(backgroundTex, colorData, 1, 2);
device->SetName(&backgroundTex, "wi::backlog::backgroundTex");
}
wi::image::Params fx = wi::image::Params((float)canvas.GetLogicalWidth(), (float)canvas.GetLogicalHeight());
fx.pos = XMFLOAT3(0, pos, 0);
fx.opacity = wi::math::Lerp(1, 0, -pos / canvas.GetLogicalHeight());
fx.opacity = wi::math::Lerp(0.9f, 0, saturate(-pos / canvas.GetLogicalHeight()));
if (colorspace != ColorSpace::SRGB)
{
fx.enableLinearOutputMapping(9);
}
wi::image::Draw(&backgroundTex, fx, cmd);
fx.color = backgroundColor;
wi::image::Draw(backgroundTex.IsValid() ? &backgroundTex : nullptr, fx, cmd);
wi::image::Params inputbg;
inputbg.color = wi::Color(80, 140, 180, 200);
@@ -452,6 +447,10 @@ namespace wi::backlog
{
backgroundTex = *texture;
}
void setBackgroundColor(wi::Color color)
{
backgroundColor = color;
}
void setFontSize(int value)
{
font_params.size = value;
+1
View File
@@ -50,6 +50,7 @@ namespace wi::backlog
bool isActive();
void setBackground(wi::graphics::Texture* texture);
void setBackgroundColor(wi::Color color);
void setFontSize(int value);
void setFontRowspacing(float value);
void setFontColor(wi::Color color);