orca/src/app/app_internal.h

94 lines
1.8 KiB
C

/************************************************************/ /**
*
* @file: app_internal.h
* @author: Martin Fouilleul
* @date: 23/12/2022
* @revision:
*
*****************************************************************/
#ifndef __APP_INTERNAL_H_
#define __APP_INTERNAL_H_
#include "app.h"
#include "platform/platform.h"
#include "platform/platform_io_internal.h"
#include "util/ringbuffer.h"
#if OC_PLATFORM_WINDOWS
#include "win32_app.h"
#elif OC_PLATFORM_MACOS
#include "osx_app.h"
#else
#error "platform not supported yet"
#endif
//---------------------------------------------------------------
// Window structure
//---------------------------------------------------------------
typedef struct oc_frame_stats
{
f64 start;
f64 workTime;
f64 remainingTime;
f64 targetFramePeriod;
} oc_frame_stats;
typedef struct oc_window_data
{
oc_list_elt freeListElt;
u32 generation;
oc_window_style style;
bool shouldClose; //TODO could be in status flags
bool hidden;
bool minimized;
OC_PLATFORM_WINDOW_DATA
} oc_window_data;
//---------------------------------------------------------------
// Global App State
//---------------------------------------------------------------
typedef struct oc_key_utf8
{
u8 labelLen;
char label[8];
} oc_key_utf8;
enum
{
OC_APP_MAX_WINDOWS = 128
};
typedef struct oc_app
{
bool init;
bool shouldQuit;
bool minimized;
oc_str8 pendingPathDrop;
oc_arena eventArena;
oc_ringbuffer eventQueue;
oc_frame_stats frameStats;
oc_window_data windowPool[OC_APP_MAX_WINDOWS];
oc_list windowFreeList;
oc_live_resize_callback liveResizeCallback;
void* liveResizeData;
oc_key_utf8 keyLabels[512];
int keyCodes[512];
int nativeKeys[OC_KEY_COUNT];
OC_PLATFORM_APP_DATA
} oc_app;
#endif // __APP_INTERNAL_H_