File size: 1,594 Bytes
9abace2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /*
* Sovereign IDE — Win32 Application Entry
* Owns the message loop, DPI awareness, and top-level window creation.
*/
#include "application.h"
#include "window.h"
#include "../../core/events.h"
#include "../../core/arena.h"
#include "../../core/strings.h"
#include <shellscalingapi.h>
static struct {
HINSTANCE hinstance;
bool running;
Arena frame_arena;
} g_app;
static void app_set_dpi_awareness(void) {
SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
}
void app_init(HINSTANCE hinstance) {
g_app.hinstance = hinstance;
g_app.running = true;
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
app_set_dpi_awareness();
arena_init_default(&g_app.frame_arena);
strings_init();
events_init();
}
int app_run(void) {
MSG msg = {0};
while (g_app.running) {
while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
g_app.running = false;
break;
}
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
arena_reset(&g_app.frame_arena);
}
return (int)msg.wParam;
}
void app_request_quit(void) {
PostQuitMessage(0);
g_app.running = false;
}
void app_shutdown(void) {
strings_shutdown();
arena_destroy(&g_app.frame_arena);
CoUninitialize();
}
HINSTANCE app_get_hinstance(void) {
return g_app.hinstance;
}
Arena *app_frame_arena(void) {
return &g_app.frame_arena;
}
|