eigsol_gpu/src/os/os_gfx.h
2024-10-09 09:23:43 +02:00

95 lines
2.2 KiB
C

#ifndef OS_GFX_H
#define OS_GFX_H
typedef U32 OS_Window_Flags;
typedef struct OS_InitGfxReceipt OS_InitGfxReceipt;
struct OS_InitGfxReceipt
{
U64 u64[1];
};
#include "os_gfx_meta.h"
////////////////////////////////
//~ Cursor Types
typedef enum OS_Cursor
{
OS_Cursor_Pointer,
OS_Cursor_IBar,
OS_Cursor_LeftRight,
OS_Cursor_UpDown,
OS_Cursor_DownRight,
OS_Cursor_UpRight,
OS_Cursor_UpDownLeftRight,
OS_Cursor_HandPoint,
OS_Cursor_Disabled,
OS_Cursor_COUNT,
}
OS_Cursor;
////////////////////////////////
//~ Events
typedef enum OS_EventKind
{
OS_EventKind_Null,
OS_EventKind_Press,
OS_EventKind_Release,
OS_EventKind_MouseMove,
OS_EventKind_Text,
OS_EventKind_Scroll,
OS_EventKind_WindowLoseFocus,
OS_EventKind_WindowClose,
OS_EventKind_FileDrop,
OS_EventKind_Wakeup,
OS_EventKind_COUNT
}
OS_EventKind;
typedef struct OS_Event OS_Event;
struct OS_Event
{
OS_Event *next;
OS_Event *prev;
OS_Handle window;
OS_EventKind kind;
//OS_Modifiers modifiers;
OS_Key key;
U32 character;
Vec2_F32 position;
Vec2_F32 scroll;
String8 path;
};
typedef struct OS_EventList OS_EventList;
struct OS_EventList
{
OS_Event *first;
OS_Event *last;
U64 count;
};
////////////////////////////////
//~ Event Helpers
root_function U64 OS_character_from_key(OS_Key key);
root_function String8 OS_string_from_event(Arena *arena, OS_Event *event);
root_function B32 OS_key_press(OS_EventList *events, OS_Handle window, OS_Key key);
root_function B32 OS_key_release(OS_EventList *events, OS_Handle window);
root_function B32 OS_text_codepoint(OS_EventList *events, OS_Handle window, U32 codepoint);
root_function Vec2_F32 OS_mouse_from_window(OS_Handle handle);
////////////////////////////////
//~ @os_per_backend Init and windowing
root_function OS_InitGfxReceipt OS_gfx_init(OS_InitReceipt os_init_receipt);
root_function OS_Handle OS_window_open(OS_Window_Flags flags, Vec2_S64 size, String8 title);
root_function Rng2_F32 OS_client_rect_from_window(OS_Handle window_handle);
////////////////////////////////
//~ @os_per_backend Events
root_function OS_EventList OS_get_events(Arena *arena);
root_function void OS_consume_event(OS_EventList *events, OS_Event *event);
#endif /* OS_GFX_H */