Start implementing OS window helpers on Windows, flesh out Utf routines

This commit is contained in:
2026-08-26 09:21:24 +10:00
parent b39afa94ff
commit e9c25bae9c
5 changed files with 473 additions and 185 deletions
+47
View File
@@ -1274,6 +1274,53 @@ DN_API void DN_OS_ConditionVariableBroadcast(DN_OSConditionVariable *cv)
}
}
DN_API DN_OSWindowMinimise DN_OS_WindowIsMinimised(DN_OSWindow *window)
{
(void)window;
DN_AssertInvalidCodePath;
return DN_OSWindowMinimise_No;
}
DN_API DN_OSWindowMaximise DN_OS_WindowIsMaximised(DN_OSWindow *window)
{
(void)window;
DN_AssertInvalidCodePath;
return DN_OSWindowMaximise_No;
}
DN_API void DN_OS_WindowSetTitle(DN_OSWindow *window, DN_Str8 title)
{
(void)window;
(void)title;
DN_AssertInvalidCodePath;
}
DN_API void DN_OS_WindowShow(DN_OSWindow *window, DN_OSWindowShow show)
{
(void)window;
(void)show;
DN_AssertInvalidCodePath;
}
DN_API void DN_OS_WindowBringToFront(DN_OSWindow *window)
{
(void)window;
DN_AssertInvalidCodePath;
}
DN_API void DN_OS_WindowFocus(DN_OSWindow *window)
{
(void)window;
DN_AssertInvalidCodePath;
}
DN_API bool DN_OS_WindowIsFocused(DN_OSWindow *window)
{
(void)window;
DN_AssertInvalidCodePath;
return false;
}
// NOTE: DN_OSThread
static void *DN_OS_ThreadFunc_(void *user_context)
{
+65
View File
@@ -2,6 +2,7 @@
#define DN_WITH_OS 1
#include "../dn.h"
#include "dn_os_w32.h"
#include <windows.h>
#endif
// NOTE: DN_Mem
@@ -1287,6 +1288,70 @@ DN_API void DN_OS_ConditionVariableBroadcast(DN_OSConditionVariable *cv)
}
}
DN_API DN_OSWindowMinimise DN_OS_WindowIsMinimised(DN_OSWindow *window)
{
HWND hwnd = window ? DN_Cast(HWND) window->handle : nullptr;
DN_OSWindowMinimise result = DN_OSWindowMinimise_No;
if (hwnd && IsIconic(hwnd) != 0)
result = DN_OSWindowMinimise_Yes;
return result;
}
DN_API DN_OSWindowMaximise DN_OS_WindowIsMaximised(DN_OSWindow *window)
{
HWND hwnd = window ? DN_Cast(HWND) window->handle : nullptr;
DN_OSWindowMaximise result = DN_OSWindowMaximise_No;
if (hwnd && IsZoomed(hwnd) != 0)
result = DN_OSWindowMaximise_Yes;
return result;
}
DN_API void DN_OS_WindowSetTitle(DN_OSWindow *window, DN_Str8 title)
{
HWND hwnd = window ? DN_Cast(HWND) window->handle : nullptr;
if (hwnd) {
DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0);
DN_Str16 title16 = DN_OS_W32Str8ToStr16(&scratch.arena, title);
SetWindowTextW(hwnd, (WCHAR *)title16.data);
DN_TcScratchEnd(&scratch);
}
}
DN_API void DN_OS_WindowShow(DN_OSWindow *window, DN_OSWindowShow show)
{
switch (show) {
case DN_OSWindowShow_Nil: break;
case DN_OSWindowShow_Restore: ShowWindow(DN_Cast(HWND)window->handle, SW_RESTORE); break;
case DN_OSWindowShow_Minimise: ShowWindow(DN_Cast(HWND)window->handle, SW_MINIMIZE); break;
case DN_OSWindowShow_Maximise: ShowWindow(DN_Cast(HWND)window->handle, SW_MAXIMIZE); break;
}
}
DN_API void DN_OS_WindowBringToFront(DN_OSWindow *window)
{
HWND hwnd = window ? DN_Cast(HWND)window->handle : nullptr;
if (hwnd)
BringWindowToTop(hwnd);
}
DN_API void DN_OS_WindowFocus(DN_OSWindow *window)
{
HWND hwnd = window ? DN_Cast(HWND)window->handle : nullptr;
if (hwnd) {
SetForegroundWindow(hwnd);
SetFocus(hwnd);
}
}
DN_API bool DN_OS_WindowIsFocused(DN_OSWindow *window)
{
bool result = false;
HWND hwnd = window ? DN_Cast(HWND) window->handle : nullptr;
if (hwnd)
result = hwnd == GetForegroundWindow();
return result;
}
static DWORD __stdcall DN_OS_ThreadFunc_(void *user_context)
{
DN_OS_ThreadExecute_(user_context);
+8 -2
View File
@@ -674,9 +674,11 @@
#define SW_HIDE 0
#define SW_NORMAL 1
#define SW_SHOWNORMAL 1
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_RESTORE 9
#define SW_FORCEMINIMIZE 11
extern "C"
@@ -686,7 +688,12 @@
__declspec(dllimport) UINT __stdcall GetWindowModuleFileNameA(HWND hwnd, LPSTR pszFileName, UINT cchFileNameMax);
__declspec(dllimport) BOOL __stdcall ShowWindow (HWND hWnd, int nCmdShow);
__declspec(dllimport) BOOL __stdcall GetWindowPlacement (HWND hWnd, WINDOWPLACEMENT *lpwndpl);
__declspec(dllimport) BOOL __stdcall IsIconic (HWND hWnd);
__declspec(dllimport) BOOL __stdcall BringWindowToTop (HWND hWnd);
__declspec(dllimport) BOOL __stdcall SetForegroundWindow (HWND hWnd);
__declspec(dllimport) HWND __stdcall SetFocus (HWND hWnd);
__declspec(dllimport) HWND __stdcall GetForegroundWindow ();
__declspec(dllimport) BOOL __stdcall SetWindowTextW (HWND hWnd, LPCWSTR lpString);
}
// NOTE: um/wininet.h //////////////////////////////////////////////////////////////////////////
@@ -1188,7 +1195,6 @@
// NOTE: um/shellapi.h /////////////////////////////////////////////////////////////////////////
extern "C"
{
__declspec(dllimport) HINSTANCE __stdcall ShellExecuteA(HWND hwnd, CHAR const *lpOperation, CHAR const *lpFile, CHAR const *lpParameters, CHAR const *lpDirectory, INT nShowCmd);
__declspec(dllimport) HINSTANCE __stdcall ShellExecuteW(HWND hwnd, WCHAR const *lpOperation, WCHAR const *lpFile, WCHAR const *lpParameters, WCHAR const *lpDirectory, INT nShowCmd);
}