Start implementing OS window helpers on Windows, flesh out Utf routines
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user