mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
os -> wm; *_w32_ -> w32_*_, *_lnx_ -> lnx_*_
This commit is contained in:
+1
-1
@@ -49,7 +49,7 @@ commands =
|
|||||||
// .f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
// .f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||||
// .f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg debug telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
// .f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg debug telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||||
// .f1 = { .win = "raddbg_stable --ipc kill_all && build radbin", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
// .f1 = { .win = "raddbg_stable --ipc kill_all && build radbin", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||||
.f1 = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
.f1 = { .win = "build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||||
|
|
||||||
//- rjf: [raddbg wsl]
|
//- rjf: [raddbg wsl]
|
||||||
// .f1 = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
// .f1 = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ arena_alloc_(ArenaParams *params)
|
|||||||
#if OS_FEATURE_GRAPHICAL
|
#if OS_FEATURE_GRAPHICAL
|
||||||
if(Unlikely(base == 0))
|
if(Unlikely(base == 0))
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
wm_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -212,7 +212,7 @@ arena_push(Arena *arena, U64 size, U64 align, B32 zero)
|
|||||||
#if OS_FEATURE_GRAPHICAL
|
#if OS_FEATURE_GRAPHICAL
|
||||||
if(Unlikely(result == 0))
|
if(Unlikely(result == 0))
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
wm_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ main_thread_base_entry_point(int arguments_count, char **arguments)
|
|||||||
#if defined(DBG_ENGINE_CORE_H) && !defined(D_INIT_MANUAL)
|
#if defined(DBG_ENGINE_CORE_H) && !defined(D_INIT_MANUAL)
|
||||||
d_init();
|
d_init();
|
||||||
#endif
|
#endif
|
||||||
#if defined(OS_GFX_H) && !defined(OS_GFX_INIT_MANUAL)
|
#if defined(WINDOW_MANAGER_H) && !defined(WM_INIT_MANUAL)
|
||||||
os_gfx_init();
|
wm_init();
|
||||||
#endif
|
#endif
|
||||||
#if defined(FONT_PROVIDER_H) && !defined(FP_INIT_MANUAL)
|
#if defined(FONT_PROVIDER_H) && !defined(FP_INIT_MANUAL)
|
||||||
fp_init();
|
fp_init();
|
||||||
|
|||||||
@@ -24,21 +24,21 @@ cfg_key_map_from_cfg(Arena *arena)
|
|||||||
for(CFG_Node *child = keybinding->first; child != &cfg_nil_node; child = child->next)
|
for(CFG_Node *child = keybinding->first; child != &cfg_nil_node; child = child->next)
|
||||||
{
|
{
|
||||||
if(0){}
|
if(0){}
|
||||||
else if(str8_match(child->string, str8_lit("ctrl"), 0)) { binding.modifiers |= OS_Modifier_Ctrl; }
|
else if(str8_match(child->string, str8_lit("ctrl"), 0)) { binding.modifiers |= WM_Modifier_Ctrl; }
|
||||||
else if(str8_match(child->string, str8_lit("alt"), 0)) { binding.modifiers |= OS_Modifier_Alt; }
|
else if(str8_match(child->string, str8_lit("alt"), 0)) { binding.modifiers |= WM_Modifier_Alt; }
|
||||||
else if(str8_match(child->string, str8_lit("shift"), 0)) { binding.modifiers |= OS_Modifier_Shift; }
|
else if(str8_match(child->string, str8_lit("shift"), 0)) { binding.modifiers |= WM_Modifier_Shift; }
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OS_Key key = OS_Key_Null;
|
WM_Key key = WM_Key_Null;
|
||||||
for EachEnumVal(OS_Key, k)
|
for EachEnumVal(WM_Key, k)
|
||||||
{
|
{
|
||||||
if(str8_match(child->string, os_g_key_cfg_string_table[k], StringMatchFlag_CaseInsensitive))
|
if(str8_match(child->string, wm_key_cfg_name_table[k], StringMatchFlag_CaseInsensitive))
|
||||||
{
|
{
|
||||||
key = k;
|
key = k;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(key != OS_Key_Null)
|
if(key != WM_Key_Null)
|
||||||
{
|
{
|
||||||
binding.key = key;
|
binding.key = key;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
typedef struct CFG_Binding CFG_Binding;
|
typedef struct CFG_Binding CFG_Binding;
|
||||||
struct CFG_Binding
|
struct CFG_Binding
|
||||||
{
|
{
|
||||||
OS_Key key;
|
WM_Key key;
|
||||||
OS_Modifiers modifiers;
|
WM_Modifiers modifiers;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct CFG_KeyMapNode CFG_KeyMapNode;
|
typedef struct CFG_KeyMapNode CFG_KeyMapNode;
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
#include "config_core.c"
|
#include "config_core.c"
|
||||||
#include "config_panels.c"
|
#include "config_panels.c"
|
||||||
#if defined(OS_GFX_H)
|
#if defined(WINDOW_MANAGER_H)
|
||||||
# include "config_bindings.c"
|
# include "config_bindings.c"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include "config_core.h"
|
#include "config_core.h"
|
||||||
#include "config_panels.h"
|
#include "config_panels.h"
|
||||||
#if defined(OS_GFX_H)
|
#if defined(WINDOW_MANAGER_H)
|
||||||
# include "config_bindings.h"
|
# include "config_bindings.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -226,7 +226,7 @@ dr_begin_frame(FNT_Tag icon_font)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
dr_submit_bucket(OS_Window os_window, R_Handle r_window, DR_Bucket *bucket)
|
dr_submit_bucket(WM_Window os_window, R_Handle r_window, DR_Bucket *bucket)
|
||||||
{
|
{
|
||||||
r_window_submit(os_window, r_window, &bucket->passes);
|
r_window_submit(os_window, r_window, &bucket->passes);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -134,7 +134,7 @@ internal Vec2F32 dr_dim_from_fstrs(F32 tab_size_px, DR_FStrList *fstrs);
|
|||||||
// (Frame boundaries & bucket submission)
|
// (Frame boundaries & bucket submission)
|
||||||
|
|
||||||
internal void dr_begin_frame(FNT_Tag icon_font);
|
internal void dr_begin_frame(FNT_Tag icon_font);
|
||||||
internal void dr_submit_bucket(OS_Window os_window, R_Handle r_window, DR_Bucket *bucket);
|
internal void dr_submit_bucket(WM_Window os_window, R_Handle r_window, DR_Bucket *bucket);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Bucket Construction & Selection API
|
//~ rjf: Bucket Construction & Selection API
|
||||||
|
|||||||
+33
-33
@@ -71,7 +71,7 @@ os_lnx_file_properties_from_stat(struct stat *s)
|
|||||||
internal void
|
internal void
|
||||||
os_lnx_safe_call_sig_handler(int x)
|
os_lnx_safe_call_sig_handler(int x)
|
||||||
{
|
{
|
||||||
OS_LNX_SafeCallChain *chain = os_lnx_safe_call_chain;
|
LNX_SafeCallChain *chain = os_lnx_safe_call_chain;
|
||||||
if(chain != 0 && chain->fail_handler != 0)
|
if(chain != 0 && chain->fail_handler != 0)
|
||||||
{
|
{
|
||||||
chain->fail_handler(chain->ptr);
|
chain->fail_handler(chain->ptr);
|
||||||
@@ -82,10 +82,10 @@ os_lnx_safe_call_sig_handler(int x)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entities
|
//~ rjf: Entities
|
||||||
|
|
||||||
internal OS_LNX_Entity *
|
internal LNX_Entity *
|
||||||
os_lnx_entity_alloc(OS_LNX_EntityKind kind)
|
os_lnx_entity_alloc(LNX_EntityKind kind)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = 0;
|
LNX_Entity *entity = 0;
|
||||||
DeferLoop(pthread_mutex_lock(&os_lnx_state.entity_mutex),
|
DeferLoop(pthread_mutex_lock(&os_lnx_state.entity_mutex),
|
||||||
pthread_mutex_unlock(&os_lnx_state.entity_mutex))
|
pthread_mutex_unlock(&os_lnx_state.entity_mutex))
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ os_lnx_entity_alloc(OS_LNX_EntityKind kind)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
entity = push_array_no_zero(os_lnx_state.entity_arena, OS_LNX_Entity, 1);
|
entity = push_array_no_zero(os_lnx_state.entity_arena, LNX_Entity, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MemoryZeroStruct(entity);
|
MemoryZeroStruct(entity);
|
||||||
@@ -105,7 +105,7 @@ os_lnx_entity_alloc(OS_LNX_EntityKind kind)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_lnx_entity_release(OS_LNX_Entity *entity)
|
os_lnx_entity_release(LNX_Entity *entity)
|
||||||
{
|
{
|
||||||
DeferLoop(pthread_mutex_lock(&os_lnx_state.entity_mutex),
|
DeferLoop(pthread_mutex_lock(&os_lnx_state.entity_mutex),
|
||||||
pthread_mutex_unlock(&os_lnx_state.entity_mutex))
|
pthread_mutex_unlock(&os_lnx_state.entity_mutex))
|
||||||
@@ -120,7 +120,7 @@ os_lnx_entity_release(OS_LNX_Entity *entity)
|
|||||||
internal void *
|
internal void *
|
||||||
os_lnx_thread_entry_point(void *ptr)
|
os_lnx_thread_entry_point(void *ptr)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)ptr;
|
LNX_Entity *entity = (LNX_Entity *)ptr;
|
||||||
ThreadEntryPointFunctionType *func = entity->thread.func;
|
ThreadEntryPointFunctionType *func = entity->thread.func;
|
||||||
void *thread_ptr = entity->thread.ptr;
|
void *thread_ptr = entity->thread.ptr;
|
||||||
supplement_thread_base_entry_point(func, thread_ptr);
|
supplement_thread_base_entry_point(func, thread_ptr);
|
||||||
@@ -353,7 +353,7 @@ set_platform_thread_name(String8 name)
|
|||||||
internal Thread
|
internal Thread
|
||||||
thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = os_lnx_entity_alloc(OS_LNX_EntityKind_Thread);
|
LNX_Entity *entity = os_lnx_entity_alloc(LNX_EntityKind_Thread);
|
||||||
entity->thread.func = f;
|
entity->thread.func = f;
|
||||||
entity->thread.ptr = p;
|
entity->thread.ptr = p;
|
||||||
{
|
{
|
||||||
@@ -372,7 +372,7 @@ internal B32
|
|||||||
thread_join(Thread thread, U64 endt_us)
|
thread_join(Thread thread, U64 endt_us)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&thread)) { return 0; }
|
if(MemoryIsZeroStruct(&thread)) { return 0; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)thread.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)thread.u64[0];
|
||||||
int join_result = pthread_join(entity->thread.handle, 0);
|
int join_result = pthread_join(entity->thread.handle, 0);
|
||||||
B32 result = (join_result == 0);
|
B32 result = (join_result == 0);
|
||||||
os_lnx_entity_release(entity);
|
os_lnx_entity_release(entity);
|
||||||
@@ -383,7 +383,7 @@ internal void
|
|||||||
thread_detach(Thread thread)
|
thread_detach(Thread thread)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&thread)) { return; }
|
if(MemoryIsZeroStruct(&thread)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)thread.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)thread.u64[0];
|
||||||
os_lnx_entity_release(entity);
|
os_lnx_entity_release(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ thread_detach(Thread thread)
|
|||||||
internal Mutex
|
internal Mutex
|
||||||
mutex_alloc(void)
|
mutex_alloc(void)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = os_lnx_entity_alloc(OS_LNX_EntityKind_Mutex);
|
LNX_Entity *entity = os_lnx_entity_alloc(LNX_EntityKind_Mutex);
|
||||||
int init_result = pthread_mutex_init(&entity->mutex_handle, 0);
|
int init_result = pthread_mutex_init(&entity->mutex_handle, 0);
|
||||||
if(init_result == -1)
|
if(init_result == -1)
|
||||||
{
|
{
|
||||||
@@ -410,7 +410,7 @@ internal void
|
|||||||
mutex_release(Mutex mutex)
|
mutex_release(Mutex mutex)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
pthread_mutex_destroy(&entity->mutex_handle);
|
pthread_mutex_destroy(&entity->mutex_handle);
|
||||||
os_lnx_entity_release(entity);
|
os_lnx_entity_release(entity);
|
||||||
}
|
}
|
||||||
@@ -419,7 +419,7 @@ internal void
|
|||||||
mutex_take(Mutex mutex)
|
mutex_take(Mutex mutex)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
pthread_mutex_lock(&entity->mutex_handle);
|
pthread_mutex_lock(&entity->mutex_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@ internal void
|
|||||||
mutex_drop(Mutex mutex)
|
mutex_drop(Mutex mutex)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
pthread_mutex_unlock(&entity->mutex_handle);
|
pthread_mutex_unlock(&entity->mutex_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,7 +436,7 @@ mutex_drop(Mutex mutex)
|
|||||||
internal RWMutex
|
internal RWMutex
|
||||||
rw_mutex_alloc(void)
|
rw_mutex_alloc(void)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = os_lnx_entity_alloc(OS_LNX_EntityKind_RWMutex);
|
LNX_Entity *entity = os_lnx_entity_alloc(LNX_EntityKind_RWMutex);
|
||||||
int init_result = pthread_rwlock_init(&entity->rwmutex_handle, 0);
|
int init_result = pthread_rwlock_init(&entity->rwmutex_handle, 0);
|
||||||
if(init_result == -1)
|
if(init_result == -1)
|
||||||
{
|
{
|
||||||
@@ -451,7 +451,7 @@ internal void
|
|||||||
rw_mutex_release(RWMutex mutex)
|
rw_mutex_release(RWMutex mutex)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
pthread_rwlock_destroy(&entity->rwmutex_handle);
|
pthread_rwlock_destroy(&entity->rwmutex_handle);
|
||||||
os_lnx_entity_release(entity);
|
os_lnx_entity_release(entity);
|
||||||
}
|
}
|
||||||
@@ -460,7 +460,7 @@ internal void
|
|||||||
rw_mutex_take(RWMutex mutex, B32 write_mode)
|
rw_mutex_take(RWMutex mutex, B32 write_mode)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
if(write_mode)
|
if(write_mode)
|
||||||
{
|
{
|
||||||
pthread_rwlock_wrlock(&entity->rwmutex_handle);
|
pthread_rwlock_wrlock(&entity->rwmutex_handle);
|
||||||
@@ -475,7 +475,7 @@ internal void
|
|||||||
rw_mutex_drop(RWMutex mutex, B32 write_mode)
|
rw_mutex_drop(RWMutex mutex, B32 write_mode)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return; }
|
if(MemoryIsZeroStruct(&mutex)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)mutex.u64[0];
|
||||||
pthread_rwlock_unlock(&entity->rwmutex_handle);
|
pthread_rwlock_unlock(&entity->rwmutex_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -484,7 +484,7 @@ rw_mutex_drop(RWMutex mutex, B32 write_mode)
|
|||||||
internal CondVar
|
internal CondVar
|
||||||
cond_var_alloc(void)
|
cond_var_alloc(void)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = os_lnx_entity_alloc(OS_LNX_EntityKind_ConditionVariable);
|
LNX_Entity *entity = os_lnx_entity_alloc(LNX_EntityKind_ConditionVariable);
|
||||||
int init_result = pthread_cond_init(&entity->cv.cond_handle, 0);
|
int init_result = pthread_cond_init(&entity->cv.cond_handle, 0);
|
||||||
if(init_result == -1)
|
if(init_result == -1)
|
||||||
{
|
{
|
||||||
@@ -510,7 +510,7 @@ internal void
|
|||||||
cond_var_release(CondVar cv)
|
cond_var_release(CondVar cv)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&cv)) { return; }
|
if(MemoryIsZeroStruct(&cv)) { return; }
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity *)cv.u64[0];
|
LNX_Entity *entity = (LNX_Entity *)cv.u64[0];
|
||||||
pthread_cond_destroy(&entity->cv.cond_handle);
|
pthread_cond_destroy(&entity->cv.cond_handle);
|
||||||
pthread_mutex_destroy(&entity->cv.rwlock_mutex_handle);
|
pthread_mutex_destroy(&entity->cv.rwlock_mutex_handle);
|
||||||
os_lnx_entity_release(entity);
|
os_lnx_entity_release(entity);
|
||||||
@@ -521,8 +521,8 @@ cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
|||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&cv)) { return 0; }
|
if(MemoryIsZeroStruct(&cv)) { return 0; }
|
||||||
if(MemoryIsZeroStruct(&mutex)) { return 0; }
|
if(MemoryIsZeroStruct(&mutex)) { return 0; }
|
||||||
OS_LNX_Entity *cv_entity = (OS_LNX_Entity *)cv.u64[0];
|
LNX_Entity *cv_entity = (LNX_Entity *)cv.u64[0];
|
||||||
OS_LNX_Entity *mutex_entity = (OS_LNX_Entity *)mutex.u64[0];
|
LNX_Entity *mutex_entity = (LNX_Entity *)mutex.u64[0];
|
||||||
struct timespec endt_timespec;
|
struct timespec endt_timespec;
|
||||||
endt_timespec.tv_sec = endt_us/Million(1);
|
endt_timespec.tv_sec = endt_us/Million(1);
|
||||||
endt_timespec.tv_nsec = Thousand(1) * (endt_us - (endt_us/Million(1))*Million(1));
|
endt_timespec.tv_nsec = Thousand(1) * (endt_us - (endt_us/Million(1))*Million(1));
|
||||||
@@ -540,8 +540,8 @@ cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
|||||||
//
|
//
|
||||||
if(MemoryIsZeroStruct(&cv)) { return 0; }
|
if(MemoryIsZeroStruct(&cv)) { return 0; }
|
||||||
if(MemoryIsZeroStruct(&mutex_rw)) { return 0; }
|
if(MemoryIsZeroStruct(&mutex_rw)) { return 0; }
|
||||||
OS_LNX_Entity *cv_entity = (OS_LNX_Entity *)cv.u64[0];
|
LNX_Entity *cv_entity = (LNX_Entity *)cv.u64[0];
|
||||||
OS_LNX_Entity *rw_mutex_entity = (OS_LNX_Entity *)mutex_rw.u64[0];
|
LNX_Entity *rw_mutex_entity = (LNX_Entity *)mutex_rw.u64[0];
|
||||||
struct timespec endt_timespec;
|
struct timespec endt_timespec;
|
||||||
endt_timespec.tv_sec = endt_us/Million(1);
|
endt_timespec.tv_sec = endt_us/Million(1);
|
||||||
endt_timespec.tv_nsec = Thousand(1) * (endt_us - (endt_us/Million(1))*Million(1));
|
endt_timespec.tv_nsec = Thousand(1) * (endt_us - (endt_us/Million(1))*Million(1));
|
||||||
@@ -585,7 +585,7 @@ internal void
|
|||||||
cond_var_signal(CondVar cv)
|
cond_var_signal(CondVar cv)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&cv)) { return; }
|
if(MemoryIsZeroStruct(&cv)) { return; }
|
||||||
OS_LNX_Entity *cv_entity = (OS_LNX_Entity *)cv.u64[0];
|
LNX_Entity *cv_entity = (LNX_Entity *)cv.u64[0];
|
||||||
pthread_cond_signal(&cv_entity->cv.cond_handle);
|
pthread_cond_signal(&cv_entity->cv.cond_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,7 +593,7 @@ internal void
|
|||||||
cond_var_broadcast(CondVar cv)
|
cond_var_broadcast(CondVar cv)
|
||||||
{
|
{
|
||||||
if(MemoryIsZeroStruct(&cv)) { return; }
|
if(MemoryIsZeroStruct(&cv)) { return; }
|
||||||
OS_LNX_Entity *cv_entity = (OS_LNX_Entity *)cv.u64[0];
|
LNX_Entity *cv_entity = (LNX_Entity *)cv.u64[0];
|
||||||
pthread_cond_broadcast(&cv_entity->cv.cond_handle);
|
pthread_cond_broadcast(&cv_entity->cv.cond_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -713,7 +713,7 @@ semaphore_drop(Semaphore semaphore)
|
|||||||
internal Barrier
|
internal Barrier
|
||||||
barrier_alloc(U64 count)
|
barrier_alloc(U64 count)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = os_lnx_entity_alloc(OS_LNX_EntityKind_Barrier);
|
LNX_Entity *entity = os_lnx_entity_alloc(LNX_EntityKind_Barrier);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
pthread_barrier_init(&entity->barrier, 0, count);
|
pthread_barrier_init(&entity->barrier, 0, count);
|
||||||
@@ -725,7 +725,7 @@ barrier_alloc(U64 count)
|
|||||||
internal void
|
internal void
|
||||||
barrier_release(Barrier barrier)
|
barrier_release(Barrier barrier)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity*)PtrFromInt(barrier.u64[0]);
|
LNX_Entity *entity = (LNX_Entity*)PtrFromInt(barrier.u64[0]);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
pthread_barrier_destroy(&entity->barrier);
|
pthread_barrier_destroy(&entity->barrier);
|
||||||
@@ -736,7 +736,7 @@ barrier_release(Barrier barrier)
|
|||||||
internal void
|
internal void
|
||||||
barrier_wait(Barrier barrier)
|
barrier_wait(Barrier barrier)
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *entity = (OS_LNX_Entity*)PtrFromInt(barrier.u64[0]);
|
LNX_Entity *entity = (LNX_Entity*)PtrFromInt(barrier.u64[0]);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
pthread_barrier_wait(&entity->barrier);
|
pthread_barrier_wait(&entity->barrier);
|
||||||
@@ -750,7 +750,7 @@ internal void
|
|||||||
safe_call(ThreadEntryPointFunctionType *func, ThreadEntryPointFunctionType *fail_handler, void *ptr)
|
safe_call(ThreadEntryPointFunctionType *func, ThreadEntryPointFunctionType *fail_handler, void *ptr)
|
||||||
{
|
{
|
||||||
// rjf: push handler to chain
|
// rjf: push handler to chain
|
||||||
OS_LNX_SafeCallChain chain = {0};
|
LNX_SafeCallChain chain = {0};
|
||||||
SLLStackPush(os_lnx_safe_call_chain, &chain);
|
SLLStackPush(os_lnx_safe_call_chain, &chain);
|
||||||
chain.fail_handler = fail_handler;
|
chain.fail_handler = fail_handler;
|
||||||
chain.ptr = ptr;
|
chain.ptr = ptr;
|
||||||
@@ -1088,7 +1088,7 @@ file_iter_begin(Arena *arena, String8 path, FileIterFlags flags)
|
|||||||
{
|
{
|
||||||
FileIter *base_iter = push_array(arena, FileIter, 1);
|
FileIter *base_iter = push_array(arena, FileIter, 1);
|
||||||
base_iter->flags = flags;
|
base_iter->flags = flags;
|
||||||
OS_LNX_FileIter *iter = (OS_LNX_FileIter *)base_iter->memory;
|
LNX_FileIter *iter = (LNX_FileIter *)base_iter->memory;
|
||||||
{
|
{
|
||||||
String8 path_copy = push_str8_copy(arena, path);
|
String8 path_copy = push_str8_copy(arena, path);
|
||||||
iter->dir = opendir((char *)path_copy.str);
|
iter->dir = opendir((char *)path_copy.str);
|
||||||
@@ -1101,7 +1101,7 @@ internal B32
|
|||||||
file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
||||||
{
|
{
|
||||||
B32 good = 0;
|
B32 good = 0;
|
||||||
OS_LNX_FileIter *lnx_iter = (OS_LNX_FileIter *)iter->memory;
|
LNX_FileIter *lnx_iter = (LNX_FileIter *)iter->memory;
|
||||||
for(;lnx_iter->dir != 0;)
|
for(;lnx_iter->dir != 0;)
|
||||||
{
|
{
|
||||||
// rjf: get next entry
|
// rjf: get next entry
|
||||||
@@ -1152,7 +1152,7 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
|||||||
internal void
|
internal void
|
||||||
file_iter_end(FileIter *iter)
|
file_iter_end(FileIter *iter)
|
||||||
{
|
{
|
||||||
OS_LNX_FileIter *lnx_iter = (OS_LNX_FileIter *)iter->memory;
|
LNX_FileIter *lnx_iter = (LNX_FileIter *)iter->memory;
|
||||||
closedir(lnx_iter->dir);
|
closedir(lnx_iter->dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+25
-25
@@ -41,7 +41,7 @@ typedef struct timespec timespec;
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Linux Call Interruption Retry Helper
|
//~ rjf: Linux Call Interruption Retry Helper
|
||||||
|
|
||||||
#define OS_LNX_RETRY_ON_EINTR(expr) \
|
#define LNX_RETRY_ON_EINTR(expr) \
|
||||||
(__extension__({ \
|
(__extension__({ \
|
||||||
__typeof__(expr) __ret; \
|
__typeof__(expr) __ret; \
|
||||||
do { \
|
do { \
|
||||||
@@ -54,22 +54,22 @@ __ret; \
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: File Iterator
|
//~ rjf: File Iterator
|
||||||
|
|
||||||
typedef struct OS_LNX_FileIter OS_LNX_FileIter;
|
typedef struct LNX_FileIter LNX_FileIter;
|
||||||
struct OS_LNX_FileIter
|
struct LNX_FileIter
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *dp;
|
struct dirent *dp;
|
||||||
String8 path;
|
String8 path;
|
||||||
};
|
};
|
||||||
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(OS_LNX_FileIter), os_lnx_file_iter_size_check);
|
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(LNX_FileIter), os_lnx_file_iter_size_check);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Safe Call Handler Chain
|
//~ rjf: Safe Call Handler Chain
|
||||||
|
|
||||||
typedef struct OS_LNX_SafeCallChain OS_LNX_SafeCallChain;
|
typedef struct LNX_SafeCallChain LNX_SafeCallChain;
|
||||||
struct OS_LNX_SafeCallChain
|
struct LNX_SafeCallChain
|
||||||
{
|
{
|
||||||
OS_LNX_SafeCallChain *next;
|
LNX_SafeCallChain *next;
|
||||||
ThreadEntryPointFunctionType *fail_handler;
|
ThreadEntryPointFunctionType *fail_handler;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
};
|
};
|
||||||
@@ -77,21 +77,21 @@ struct OS_LNX_SafeCallChain
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entities
|
//~ rjf: Entities
|
||||||
|
|
||||||
typedef enum OS_LNX_EntityKind
|
typedef enum LNX_EntityKind
|
||||||
{
|
{
|
||||||
OS_LNX_EntityKind_Thread,
|
LNX_EntityKind_Thread,
|
||||||
OS_LNX_EntityKind_Mutex,
|
LNX_EntityKind_Mutex,
|
||||||
OS_LNX_EntityKind_RWMutex,
|
LNX_EntityKind_RWMutex,
|
||||||
OS_LNX_EntityKind_ConditionVariable,
|
LNX_EntityKind_ConditionVariable,
|
||||||
OS_LNX_EntityKind_Barrier,
|
LNX_EntityKind_Barrier,
|
||||||
}
|
}
|
||||||
OS_LNX_EntityKind;
|
LNX_EntityKind;
|
||||||
|
|
||||||
typedef struct OS_LNX_Entity OS_LNX_Entity;
|
typedef struct LNX_Entity LNX_Entity;
|
||||||
struct OS_LNX_Entity
|
struct LNX_Entity
|
||||||
{
|
{
|
||||||
OS_LNX_Entity *next;
|
LNX_Entity *next;
|
||||||
OS_LNX_EntityKind kind;
|
LNX_EntityKind kind;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
@@ -114,15 +114,15 @@ struct OS_LNX_Entity
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: State
|
//~ rjf: State
|
||||||
|
|
||||||
typedef struct OS_LNX_State OS_LNX_State;
|
typedef struct LNX_State LNX_State;
|
||||||
struct OS_LNX_State
|
struct LNX_State
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
SystemInfo system_info;
|
SystemInfo system_info;
|
||||||
ProcessInfo process_info;
|
ProcessInfo process_info;
|
||||||
pthread_mutex_t entity_mutex;
|
pthread_mutex_t entity_mutex;
|
||||||
Arena *entity_arena;
|
Arena *entity_arena;
|
||||||
OS_LNX_Entity *entity_free;
|
LNX_Entity *entity_free;
|
||||||
U64 default_env_count;
|
U64 default_env_count;
|
||||||
char **default_env;
|
char **default_env;
|
||||||
};
|
};
|
||||||
@@ -130,8 +130,8 @@ struct OS_LNX_State
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals
|
//~ rjf: Globals
|
||||||
|
|
||||||
global OS_LNX_State os_lnx_state = {0};
|
global LNX_State os_lnx_state = {0};
|
||||||
thread_static OS_LNX_SafeCallChain *os_lnx_safe_call_chain = 0;
|
thread_static LNX_SafeCallChain *os_lnx_safe_call_chain = 0;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Helpers
|
//~ rjf: Helpers
|
||||||
@@ -146,8 +146,8 @@ internal void os_lnx_safe_call_sig_handler(int x);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entities
|
//~ rjf: Entities
|
||||||
|
|
||||||
internal OS_LNX_Entity *os_lnx_entity_alloc(OS_LNX_EntityKind kind);
|
internal LNX_Entity *os_lnx_entity_alloc(LNX_EntityKind kind);
|
||||||
internal void os_lnx_entity_release(OS_LNX_Entity *entity);
|
internal void os_lnx_entity_release(LNX_Entity *entity);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Thread Entry Point
|
//~ rjf: Thread Entry Point
|
||||||
|
|||||||
+509
-509
File diff suppressed because it is too large
Load Diff
+206
-207
@@ -1,16 +1,16 @@
|
|||||||
// Copyright (c) Epic Games Tools
|
// Copyright (c) Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
#ifndef DEMON_CORE_LINUX_H
|
#ifndef LINUX_DEMON_H
|
||||||
#define DEMON_CORE_LINUX_H
|
#define LINUX_DEMON_H
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Register Layouts
|
//~ rjf: Register Layouts
|
||||||
//
|
//
|
||||||
// These are defined in <sys/user.h>, but only for one architecture at a time
|
// These are defined in <sys/user.h>, but only for one architecture at a time
|
||||||
|
|
||||||
typedef struct OS_LNX_GprsX64 OS_LNX_GprsX64;
|
typedef struct LNX_DMN_GprsX64 LNX_DMN_GprsX64;
|
||||||
struct OS_LNX_GprsX64
|
struct LNX_DMN_GprsX64
|
||||||
{
|
{
|
||||||
U64 r15;
|
U64 r15;
|
||||||
U64 r14;
|
U64 r14;
|
||||||
@@ -41,10 +41,10 @@ struct OS_LNX_GprsX64
|
|||||||
U64 gs;
|
U64 gs;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_LNX_UserX64 OS_LNX_UserX64;
|
typedef struct LNX_DMN_UserX64 LNX_DMN_UserX64;
|
||||||
struct OS_LNX_UserX64
|
struct LNX_DMN_UserX64
|
||||||
{
|
{
|
||||||
OS_LNX_GprsX64 regs;
|
LNX_DMN_GprsX64 regs;
|
||||||
S32 u_fpvalid;
|
S32 u_fpvalid;
|
||||||
U32 _pad0;
|
U32 _pad0;
|
||||||
X64_FXSave i387;
|
X64_FXSave i387;
|
||||||
@@ -62,22 +62,22 @@ struct OS_LNX_UserX64
|
|||||||
U8 u_comm[32];
|
U8 u_comm[32];
|
||||||
U64 u_debugreg[8];
|
U64 u_debugreg[8];
|
||||||
};
|
};
|
||||||
StaticAssert(sizeof(OS_LNX_UserX64) == 912, g_os_lnx_user_x64_size_check);
|
StaticAssert(sizeof(LNX_DMN_UserX64) == 912, lnx_user_x64_size_check);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ TLS
|
//~ TLS
|
||||||
|
|
||||||
typedef struct DMN_LNX_DbDesc
|
typedef struct LNX_DMN_DbDesc
|
||||||
{
|
{
|
||||||
U32 bit_size;
|
U32 bit_size;
|
||||||
U32 count;
|
U32 count;
|
||||||
U32 offset;
|
U32 offset;
|
||||||
} DMN_LNX_DbDesc;
|
} LNX_DMN_DbDesc;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ SDT Probes
|
//~ SDT Probes
|
||||||
|
|
||||||
typedef struct DMN_LNX_Probe
|
typedef struct LNX_DMN_Probe
|
||||||
{
|
{
|
||||||
String8 provider;
|
String8 provider;
|
||||||
String8 name;
|
String8 name;
|
||||||
@@ -85,22 +85,22 @@ typedef struct DMN_LNX_Probe
|
|||||||
STAP_ArgArray args;
|
STAP_ArgArray args;
|
||||||
U64 pc;
|
U64 pc;
|
||||||
U64 semaphore;
|
U64 semaphore;
|
||||||
} DMN_LNX_Probe;
|
} LNX_DMN_Probe;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ProbeNode
|
typedef struct LNX_DMN_ProbeNode
|
||||||
{
|
{
|
||||||
DMN_LNX_Probe v;
|
LNX_DMN_Probe v;
|
||||||
struct DMN_LNX_ProbeNode *next;
|
struct LNX_DMN_ProbeNode *next;
|
||||||
} DMN_LNX_ProbeNode;
|
} LNX_DMN_ProbeNode;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ProbeList
|
typedef struct LNX_DMN_ProbeList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
DMN_LNX_ProbeNode *first;
|
LNX_DMN_ProbeNode *first;
|
||||||
DMN_LNX_ProbeNode *last;
|
LNX_DMN_ProbeNode *last;
|
||||||
} DMN_LNX_ProbeList;
|
} LNX_DMN_ProbeList;
|
||||||
|
|
||||||
#define DMN_LNX_Probe_XList \
|
#define LNX_DMN_Probe_XList \
|
||||||
X(InitStart, 2, "init_start") \
|
X(InitStart, 2, "init_start") \
|
||||||
X(InitComplete, 2, "init_complete") \
|
X(InitComplete, 2, "init_complete") \
|
||||||
X(RelocStart, 2, "reloc_start") \
|
X(RelocStart, 2, "reloc_start") \
|
||||||
@@ -115,17 +115,17 @@ X(SetJmp, 3, "setjmp")
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DMN_LNX_ProbeType_Null,
|
LNX_DMN_ProbeType_Null,
|
||||||
#define X(_N,...) DMN_LNX_ProbeType_##_N,
|
#define X(_N,...) LNX_DMN_ProbeType_##_N,
|
||||||
DMN_LNX_Probe_XList
|
LNX_DMN_Probe_XList
|
||||||
#undef X
|
#undef X
|
||||||
DMN_LNX_ProbeType_Count,
|
LNX_DMN_ProbeType_Count,
|
||||||
} DMN_LNX_ProbeType;
|
} LNX_DMN_ProbeType;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Process Info
|
//~ Process Info
|
||||||
|
|
||||||
typedef struct DMN_LNX_Auxv
|
typedef struct LNX_DMN_Auxv
|
||||||
{
|
{
|
||||||
U64 base;
|
U64 base;
|
||||||
U64 phnum;
|
U64 phnum;
|
||||||
@@ -133,9 +133,9 @@ typedef struct DMN_LNX_Auxv
|
|||||||
U64 phdr;
|
U64 phdr;
|
||||||
U64 execfn;
|
U64 execfn;
|
||||||
U64 pagesz;
|
U64 pagesz;
|
||||||
} DMN_LNX_Auxv;
|
} LNX_DMN_Auxv;
|
||||||
|
|
||||||
typedef struct DMN_LNX_DynamicInfo
|
typedef struct LNX_DMN_DynamicInfo
|
||||||
{
|
{
|
||||||
U64 hash_vaddr;
|
U64 hash_vaddr;
|
||||||
U64 gnu_hash_vaddr;
|
U64 gnu_hash_vaddr;
|
||||||
@@ -143,59 +143,59 @@ typedef struct DMN_LNX_DynamicInfo
|
|||||||
U64 strtab_size;
|
U64 strtab_size;
|
||||||
U64 symtab_vaddr;
|
U64 symtab_vaddr;
|
||||||
U64 symtab_entry_size;
|
U64 symtab_entry_size;
|
||||||
} DMN_LNX_DynamicInfo;
|
} LNX_DMN_DynamicInfo;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Entities
|
//~ Entities
|
||||||
|
|
||||||
typedef enum DMN_LNX_EntityKind
|
typedef enum LNX_DMN_EntityKind
|
||||||
{
|
{
|
||||||
DMN_LNX_EntityKind_Null,
|
LNX_DMN_EntityKind_Null,
|
||||||
DMN_LNX_EntityKind_Process,
|
LNX_DMN_EntityKind_Process,
|
||||||
DMN_LNX_EntityKind_ProcessCtx,
|
LNX_DMN_EntityKind_ProcessCtx,
|
||||||
DMN_LNX_EntityKind_Thread,
|
LNX_DMN_EntityKind_Thread,
|
||||||
DMN_LNX_EntityKind_Module,
|
LNX_DMN_EntityKind_Module,
|
||||||
} DMN_LNX_EntityKind;
|
} LNX_DMN_EntityKind;
|
||||||
|
|
||||||
typedef enum DMN_LNX_ThreadState
|
typedef enum LNX_DMN_ThreadState
|
||||||
{
|
{
|
||||||
DMN_LNX_ThreadState_Null,
|
LNX_DMN_ThreadState_Null,
|
||||||
DMN_LNX_ThreadState_Running,
|
LNX_DMN_ThreadState_Running,
|
||||||
DMN_LNX_ThreadState_Stopped,
|
LNX_DMN_ThreadState_Stopped,
|
||||||
DMN_LNX_ThreadState_Exited,
|
LNX_DMN_ThreadState_Exited,
|
||||||
DMN_LNX_ThreadState_PendingCreation,
|
LNX_DMN_ThreadState_PendingCreation,
|
||||||
} DMN_LNX_ThreadState;
|
} LNX_DMN_ThreadState;
|
||||||
|
|
||||||
typedef struct DMN_LNX_Thread
|
typedef struct LNX_DMN_Thread
|
||||||
{
|
{
|
||||||
pid_t tid;
|
pid_t tid;
|
||||||
DMN_LNX_ThreadState state;
|
LNX_DMN_ThreadState state;
|
||||||
struct DMN_LNX_Process *process;
|
struct LNX_DMN_Process *process;
|
||||||
void *reg_block;
|
void *reg_block;
|
||||||
B32 is_reg_block_dirty;
|
B32 is_reg_block_dirty;
|
||||||
B32 pass_through_signal;
|
B32 pass_through_signal;
|
||||||
U64 pass_through_signo;
|
U64 pass_through_signo;
|
||||||
U64 orig_rax;
|
U64 orig_rax;
|
||||||
|
|
||||||
struct DMN_LNX_Thread *next;
|
struct LNX_DMN_Thread *next;
|
||||||
struct DMN_LNX_Thread *prev;
|
struct LNX_DMN_Thread *prev;
|
||||||
} DMN_LNX_Thread;
|
} LNX_DMN_Thread;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ThreadPtrNode
|
typedef struct LNX_DMN_ThreadPtrNode
|
||||||
{
|
{
|
||||||
DMN_LNX_Thread *v;
|
LNX_DMN_Thread *v;
|
||||||
struct DMN_LNX_ThreadPtrNode *next;
|
struct LNX_DMN_ThreadPtrNode *next;
|
||||||
struct DMN_LNX_ThreadPtrNode *prev;
|
struct LNX_DMN_ThreadPtrNode *prev;
|
||||||
} DMN_LNX_ThreadPtrNode;
|
} LNX_DMN_ThreadPtrNode;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ThreadPtrList
|
typedef struct LNX_DMN_ThreadPtrList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
DMN_LNX_ThreadPtrNode *first;
|
LNX_DMN_ThreadPtrNode *first;
|
||||||
DMN_LNX_ThreadPtrNode *last;
|
LNX_DMN_ThreadPtrNode *last;
|
||||||
} DMN_LNX_ThreadPtrList;
|
} LNX_DMN_ThreadPtrList;
|
||||||
|
|
||||||
typedef struct DMN_LNX_Module
|
typedef struct LNX_DMN_Module
|
||||||
{
|
{
|
||||||
U64 name_vaddr;
|
U64 name_vaddr;
|
||||||
U64 base_vaddr;
|
U64 base_vaddr;
|
||||||
@@ -209,86 +209,86 @@ typedef struct DMN_LNX_Module
|
|||||||
B8 is_live;
|
B8 is_live;
|
||||||
B8 is_main;
|
B8 is_main;
|
||||||
|
|
||||||
struct DMN_LNX_Module *next;
|
struct LNX_DMN_Module *next;
|
||||||
struct DMN_LNX_Module *prev;
|
struct LNX_DMN_Module *prev;
|
||||||
} DMN_LNX_Module;
|
} LNX_DMN_Module;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ModulePtrNode
|
typedef struct LNX_DMN_ModulePtrNode
|
||||||
{
|
{
|
||||||
DMN_LNX_Module *v;
|
LNX_DMN_Module *v;
|
||||||
struct DMN_LNX_ModulePtrNode *next;
|
struct LNX_DMN_ModulePtrNode *next;
|
||||||
} DMN_LNX_ModulePtrNode;
|
} LNX_DMN_ModulePtrNode;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ModulePtrList
|
typedef struct LNX_DMN_ModulePtrList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
DMN_LNX_ModulePtrNode *first;
|
LNX_DMN_ModulePtrNode *first;
|
||||||
DMN_LNX_ModulePtrNode *last;
|
LNX_DMN_ModulePtrNode *last;
|
||||||
} DMN_LNX_ModulePtrList;
|
} LNX_DMN_ModulePtrList;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DMN_LNX_ProcessState_Null,
|
LNX_DMN_ProcessState_Null,
|
||||||
DMN_LNX_ProcessState_Launch,
|
LNX_DMN_ProcessState_Launch,
|
||||||
DMN_LNX_ProcessState_Attach,
|
LNX_DMN_ProcessState_Attach,
|
||||||
DMN_LNX_ProcessState_WaitForExec,
|
LNX_DMN_ProcessState_WaitForExec,
|
||||||
DMN_LNX_ProcessState_ExecFailedDoExit,
|
LNX_DMN_ProcessState_ExecFailedDoExit,
|
||||||
DMN_LNX_ProcessState_Normal,
|
LNX_DMN_ProcessState_Normal,
|
||||||
} DMN_LNX_ProcessState;
|
} LNX_DMN_ProcessState;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
DMN_LNX_CreateProcessFlag_DebugSubprocesses = (1 << 0),
|
LNX_DMN_CreateProcessFlag_DebugSubprocesses = (1 << 0),
|
||||||
DMN_LNX_CreateProcessFlag_Rebased = (1 << 1),
|
LNX_DMN_CreateProcessFlag_Rebased = (1 << 1),
|
||||||
DMN_LNX_CreateProcessFlag_Cow = (1 << 2),
|
LNX_DMN_CreateProcessFlag_Cow = (1 << 2),
|
||||||
DMN_LNX_CreateProcessFlag_ClonedMemory = (1 << 3),
|
LNX_DMN_CreateProcessFlag_ClonedMemory = (1 << 3),
|
||||||
} DMN_LNX_CreateProcessFlags;
|
} LNX_DMN_CreateProcessFlags;
|
||||||
|
|
||||||
typedef struct DMN_LNX_Process
|
typedef struct LNX_DMN_Process
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int fd;
|
int fd;
|
||||||
DMN_LNX_ProcessState state;
|
LNX_DMN_ProcessState state;
|
||||||
B32 debug_subprocesses;
|
B32 debug_subprocesses;
|
||||||
B32 is_cow;
|
B32 is_cow;
|
||||||
B32 vfork_with_spoof;
|
B32 vfork_with_spoof;
|
||||||
U64 thread_count;
|
U64 thread_count;
|
||||||
DMN_LNX_Thread *first_thread;
|
LNX_DMN_Thread *first_thread;
|
||||||
DMN_LNX_Thread *last_thread;
|
LNX_DMN_Thread *last_thread;
|
||||||
U64 main_thread_exit_code;
|
U64 main_thread_exit_code;
|
||||||
struct DMN_LNX_Process *parent_process;
|
struct LNX_DMN_Process *parent_process;
|
||||||
struct DMN_LNX_ProcessCtx *ctx;
|
struct LNX_DMN_ProcessCtx *ctx;
|
||||||
|
|
||||||
|
|
||||||
struct DMN_LNX_Process *next;
|
struct LNX_DMN_Process *next;
|
||||||
struct DMN_LNX_Process *prev;
|
struct LNX_DMN_Process *prev;
|
||||||
} DMN_LNX_Process;
|
} LNX_DMN_Process;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ProcessPtrNode
|
typedef struct LNX_DMN_ProcessPtrNode
|
||||||
{
|
{
|
||||||
DMN_LNX_Process *v;
|
LNX_DMN_Process *v;
|
||||||
struct DMN_LNX_ProcessPtrNode *next;
|
struct LNX_DMN_ProcessPtrNode *next;
|
||||||
} DMN_LNX_ProcessPtrNode;
|
} LNX_DMN_ProcessPtrNode;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ProcessPtrList
|
typedef struct LNX_DMN_ProcessPtrList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
DMN_LNX_ProcessPtrNode *first;
|
LNX_DMN_ProcessPtrNode *first;
|
||||||
DMN_LNX_ProcessPtrNode *last;
|
LNX_DMN_ProcessPtrNode *last;
|
||||||
} DMN_LNX_ProcessPtrList;
|
} LNX_DMN_ProcessPtrList;
|
||||||
|
|
||||||
typedef struct DMN_LNX_ProcessCtx
|
typedef struct LNX_DMN_ProcessCtx
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
Arch arch;
|
Arch arch;
|
||||||
U64 rdebug_vaddr;
|
U64 rdebug_vaddr;
|
||||||
ELF_Class dl_class;
|
ELF_Class dl_class;
|
||||||
HashTable *loaded_modules_ht;
|
HashTable *loaded_modules_ht;
|
||||||
DMN_LNX_Probe **probes;
|
LNX_DMN_Probe **probes;
|
||||||
DMN_ActiveTrap *first_probe_trap;
|
DMN_ActiveTrap *first_probe_trap;
|
||||||
DMN_ActiveTrap *last_probe_trap;
|
DMN_ActiveTrap *last_probe_trap;
|
||||||
DMN_LNX_Module *first_module;
|
LNX_DMN_Module *first_module;
|
||||||
DMN_LNX_Module *last_module;
|
LNX_DMN_Module *last_module;
|
||||||
U64 module_count;
|
U64 module_count;
|
||||||
U64 ref_count;
|
U64 ref_count;
|
||||||
|
|
||||||
@@ -299,42 +299,42 @@ typedef struct DMN_LNX_ProcessCtx
|
|||||||
U64 xcr0;
|
U64 xcr0;
|
||||||
U64 xsave_size;
|
U64 xsave_size;
|
||||||
X64_XSaveLayout xsave_layout;
|
X64_XSaveLayout xsave_layout;
|
||||||
} DMN_LNX_ProcessCtx;
|
} LNX_DMN_ProcessCtx;
|
||||||
|
|
||||||
typedef struct DMN_LNX_Entity
|
typedef struct LNX_DMN_Entity
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
DMN_LNX_Process process;
|
LNX_DMN_Process process;
|
||||||
DMN_LNX_ProcessCtx process_ctx;
|
LNX_DMN_ProcessCtx process_ctx;
|
||||||
DMN_LNX_Thread thread;
|
LNX_DMN_Thread thread;
|
||||||
DMN_LNX_Module module;
|
LNX_DMN_Module module;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
struct DMN_LNX_Entity *next;
|
struct LNX_DMN_Entity *next;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
U32 gen;
|
U32 gen;
|
||||||
DMN_LNX_EntityKind kind;
|
LNX_DMN_EntityKind kind;
|
||||||
} DMN_LNX_Entity;
|
} LNX_DMN_Entity;
|
||||||
|
|
||||||
typedef struct DMN_LNX_EntityNode
|
typedef struct LNX_DMN_EntityNode
|
||||||
{
|
{
|
||||||
DMN_LNX_Entity *v;
|
LNX_DMN_Entity *v;
|
||||||
struct DMN_LNX_EntityNode *next;
|
struct LNX_DMN_EntityNode *next;
|
||||||
} DMN_LNX_EntityNode;
|
} LNX_DMN_EntityNode;
|
||||||
|
|
||||||
typedef struct DMN_LNX_EntityList
|
typedef struct LNX_DMN_EntityList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
DMN_LNX_EntityNode *first;
|
LNX_DMN_EntityNode *first;
|
||||||
DMN_LNX_EntityNode *last;
|
LNX_DMN_EntityNode *last;
|
||||||
} DMN_LNX_EntityList;
|
} LNX_DMN_EntityList;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Global State
|
//~ Global State
|
||||||
|
|
||||||
typedef struct DMN_LNX_State
|
typedef struct LNX_DMN_State
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
|
|
||||||
@@ -344,8 +344,8 @@ typedef struct DMN_LNX_State
|
|||||||
|
|
||||||
// rjf: entity storage
|
// rjf: entity storage
|
||||||
Arena *entities_arena;
|
Arena *entities_arena;
|
||||||
DMN_LNX_Entity *entities_base;
|
LNX_DMN_Entity *entities_base;
|
||||||
DMN_LNX_Entity *free_entity;
|
LNX_DMN_Entity *free_entity;
|
||||||
U64 entities_count;
|
U64 entities_count;
|
||||||
|
|
||||||
HashTable *tid_ht; // thread id -> thread entity
|
HashTable *tid_ht; // thread id -> thread entity
|
||||||
@@ -353,8 +353,8 @@ typedef struct DMN_LNX_State
|
|||||||
|
|
||||||
// process tracking
|
// process tracking
|
||||||
U64 process_count;
|
U64 process_count;
|
||||||
DMN_LNX_Process *first_process;
|
LNX_DMN_Process *first_process;
|
||||||
DMN_LNX_Process *last_process;
|
LNX_DMN_Process *last_process;
|
||||||
|
|
||||||
// process/thread creation tracking
|
// process/thread creation tracking
|
||||||
U64 process_pending_creation;
|
U64 process_pending_creation;
|
||||||
@@ -369,134 +369,133 @@ typedef struct DMN_LNX_State
|
|||||||
|
|
||||||
// TLS
|
// TLS
|
||||||
B32 is_tls_detected;
|
B32 is_tls_detected;
|
||||||
DMN_LNX_DbDesc tls_modid_desc;
|
LNX_DMN_DbDesc tls_modid_desc;
|
||||||
DMN_LNX_DbDesc tls_offset_desc;
|
LNX_DMN_DbDesc tls_offset_desc;
|
||||||
} DMN_LNX_State;
|
} LNX_DMN_State;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Globals
|
//~ Globals
|
||||||
|
|
||||||
global B32 dmn_lnx_ctrl_thread;
|
global B32 lnx_dmn_ctrl_thread;
|
||||||
global DMN_LNX_State *dmn_lnx_state;
|
global LNX_DMN_State *lnx_dmn_state;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Memory R/W
|
//~ Memory R/W
|
||||||
|
|
||||||
internal U64 dmn_lnx_read(int memory_fd, Rng1U64 range, void *dst);
|
internal U64 lnx_dmn_read(int memory_fd, Rng1U64 range, void *dst);
|
||||||
internal B32 dmn_lnx_write(int memory_fd, Rng1U64 range, void *src);
|
internal B32 lnx_dmn_write(int memory_fd, Rng1U64 range, void *src);
|
||||||
internal String8 dmn_lnx_read_string_capped(Arena *arena, int memory_fd, U64 base_vaddr, U64 cap_size);
|
internal String8 lnx_dmn_read_string_capped(Arena *arena, int memory_fd, U64 base_vaddr, U64 cap_size);
|
||||||
internal String8 dmn_lnx_read_string(Arena *arena, int memory_fd, U64 base_vaddr);
|
internal String8 lnx_dmn_read_string(Arena *arena, int memory_fd, U64 base_vaddr);
|
||||||
#define dmn_lnx_read_struct(fd, vaddr, ptr) dmn_lnx_read((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
#define lnx_dmn_read_struct(fd, vaddr, ptr) lnx_dmn_read((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
||||||
#define dmn_lnx_write_struct(fd, vaddr, ptr) dmn_lnx_write((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
#define lnx_dmn_write_struct(fd, vaddr, ptr) lnx_dmn_write((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ ELF/GNU info
|
//~ ELF/GNU info
|
||||||
|
|
||||||
internal Rng1U64 dmn_lnx_compute_image_vrange(int memory_fd, ELF_Class elf_class, U64 rebase, U64 e_phaddr, U64 e_phentsize, U64 e_phnum);
|
internal Rng1U64 lnx_dmn_compute_image_vrange(int memory_fd, ELF_Class elf_class, U64 rebase, U64 e_phaddr, U64 e_phentsize, U64 e_phnum);
|
||||||
internal DMN_LNX_DynamicInfo dmn_lnx_dynamic_info_from_memory(int memory_fd, ELF_Class elf_Class, U64 rebase, U64 dynamic_vaddr);
|
internal LNX_DMN_DynamicInfo lnx_dmn_dynamic_info_from_memory(int memory_fd, ELF_Class elf_Class, U64 rebase, U64 dynamic_vaddr);
|
||||||
internal U64 dmn_lnx_rdebug_vaddr_from_memory(int memory_fd, U64 loader_vaddr, B32 is_rebased);
|
internal U64 lnx_dmn_rdebug_vaddr_from_memory(int memory_fd, U64 loader_vaddr, B32 is_rebased);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Process Info
|
//~ Process Info
|
||||||
|
|
||||||
internal String8 dmn_lnx_exe_path_from_pid(Arena *arena, pid_t pid);
|
internal String8 lnx_dmn_exe_path_from_pid(Arena *arena, pid_t pid);
|
||||||
internal String8 dmn_lnx_dl_path_from_pid(Arena *arena, pid_t pid, U64 auxv_base);
|
internal String8 lnx_dmn_dl_path_from_pid(Arena *arena, pid_t pid, U64 auxv_base);
|
||||||
internal ELF_Hdr64 dmn_lnx_ehdr_from_pid(pid_t pid);
|
internal ELF_Hdr64 lnx_dmn_ehdr_from_pid(pid_t pid);
|
||||||
internal DMN_LNX_Auxv dmn_lnx_auxv_from_pid(pid_t pid, ELF_Class elf_class);
|
internal LNX_DMN_Auxv lnx_dmn_auxv_from_pid(pid_t pid, ELF_Class elf_class);
|
||||||
internal DMN_LNX_Thread * dmn_lnx_thread_from_pid(pid_t pid);
|
internal LNX_DMN_Thread * lnx_dmn_thread_from_pid(pid_t pid);
|
||||||
internal DMN_LNX_Process * dmn_lnx_process_from_pid(pid_t pid);
|
internal LNX_DMN_Process * lnx_dmn_process_from_pid(pid_t pid);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Entity
|
//~ Entity
|
||||||
|
|
||||||
// alloc
|
// alloc
|
||||||
internal DMN_LNX_Entity * dmn_lnx_entity_alloc(DMN_LNX_EntityKind kind);
|
internal LNX_DMN_Entity * lnx_dmn_entity_alloc(LNX_DMN_EntityKind kind);
|
||||||
internal DMN_LNX_Process * dmn_lnx_process_alloc(pid_t pid, DMN_LNX_ProcessState state, DMN_LNX_Process *parent_process, B32 debug_subprocess, B32 is_cow);
|
internal LNX_DMN_Process * lnx_dmn_process_alloc(pid_t pid, LNX_DMN_ProcessState state, LNX_DMN_Process *parent_process, B32 debug_subprocess, B32 is_cow);
|
||||||
internal DMN_LNX_ProcessCtx * dmn_lnx_process_ctx_alloc(DMN_LNX_Process *process, B32 is_rebased);
|
internal LNX_DMN_ProcessCtx * lnx_dmn_process_ctx_alloc(LNX_DMN_Process *process, B32 is_rebased);
|
||||||
internal DMN_LNX_Thread * dmn_lnx_thread_alloc(DMN_LNX_Process *process, DMN_LNX_ThreadState thread_state, pid_t tid);
|
internal LNX_DMN_Thread * lnx_dmn_thread_alloc(LNX_DMN_Process *process, LNX_DMN_ThreadState thread_state, pid_t tid);
|
||||||
internal DMN_LNX_Module * dmn_lnx_module_alloc(DMN_LNX_ProcessCtx *ctx, int memory_fd, U64 base_vaddr, U64 name_vaddr, U64 name_space_id, B32 is_main);
|
internal LNX_DMN_Module * lnx_dmn_module_alloc(LNX_DMN_ProcessCtx *ctx, int memory_fd, U64 base_vaddr, U64 name_vaddr, U64 name_space_id, B32 is_main);
|
||||||
|
|
||||||
// release
|
// release
|
||||||
internal void dmn_lnx_entity_release(DMN_LNX_Entity *entity);
|
internal void lnx_dmn_entity_release(LNX_DMN_Entity *entity);
|
||||||
internal void dmn_lnx_process_release(DMN_LNX_Process *process);
|
internal void lnx_dmn_process_release(LNX_DMN_Process *process);
|
||||||
internal void dmn_lnx_process_ctx_release(DMN_LNX_ProcessCtx *process_ctx);
|
internal void lnx_dmn_process_ctx_release(LNX_DMN_ProcessCtx *process_ctx);
|
||||||
internal void dmn_lnx_thread_release(DMN_LNX_Thread *thread);
|
internal void lnx_dmn_thread_release(LNX_DMN_Thread *thread);
|
||||||
internal void dmn_lnx_module_release(DMN_LNX_ProcessCtx *ctx, DMN_LNX_Module *module);
|
internal void lnx_dmn_module_release(LNX_DMN_ProcessCtx *ctx, LNX_DMN_Module *module);
|
||||||
|
|
||||||
// clone
|
// clone
|
||||||
internal DMN_LNX_ProcessCtx * dmn_lnx_process_ctx_clone(DMN_LNX_Process *process, DMN_LNX_ProcessCtx *ctx);
|
internal LNX_DMN_ProcessCtx * lnx_dmn_process_ctx_clone(LNX_DMN_Process *process, LNX_DMN_ProcessCtx *ctx);
|
||||||
internal DMN_LNX_Module * dmn_lnx_module_clone(DMN_LNX_ProcessCtx *process_ctx, DMN_LNX_Module *module);
|
internal LNX_DMN_Module * lnx_dmn_module_clone(LNX_DMN_ProcessCtx *process_ctx, LNX_DMN_Module *module);
|
||||||
|
|
||||||
// entity -> handle
|
// entity -> handle
|
||||||
internal DMN_Handle dmn_lnx_handle_from_entity(DMN_LNX_Entity *entity);
|
internal DMN_Handle lnx_dmn_handle_from_entity(LNX_DMN_Entity *entity);
|
||||||
internal DMN_Handle dmn_lnx_handle_from_process(DMN_LNX_Process *process);
|
internal DMN_Handle lnx_dmn_handle_from_process(LNX_DMN_Process *process);
|
||||||
internal DMN_Handle dmn_lnx_handle_from_process_ctx(DMN_LNX_ProcessCtx *process_ctx);
|
internal DMN_Handle lnx_dmn_handle_from_process_ctx(LNX_DMN_ProcessCtx *process_ctx);
|
||||||
internal DMN_Handle dmn_lnx_handle_from_thread(DMN_LNX_Thread *thread);
|
internal DMN_Handle lnx_dmn_handle_from_thread(LNX_DMN_Thread *thread);
|
||||||
internal DMN_Handle dmn_lnx_handle_from_module(DMN_LNX_Module *module);
|
internal DMN_Handle lnx_dmn_handle_from_module(LNX_DMN_Module *module);
|
||||||
|
|
||||||
// handle -> entity
|
// handle -> entity
|
||||||
internal DMN_LNX_Entity * dmn_lnx_entity_from_handle(DMN_Handle handle, DMN_LNX_EntityKind expected_kind);
|
internal LNX_DMN_Entity * lnx_dmn_entity_from_handle(DMN_Handle handle, LNX_DMN_EntityKind expected_kind);
|
||||||
internal DMN_LNX_Process * dmn_lnx_process_from_handle(DMN_Handle process_handle);
|
internal LNX_DMN_Process * lnx_dmn_process_from_handle(DMN_Handle process_handle);
|
||||||
internal DMN_LNX_ProcessCtx * dmn_lnx_process_ctx_from_handle(DMN_Handle process_ctx_handle);
|
internal LNX_DMN_ProcessCtx * lnx_dmn_process_ctx_from_handle(DMN_Handle process_ctx_handle);
|
||||||
internal DMN_LNX_Thread * dmn_lnx_thread_from_handle(DMN_Handle thread_handle);
|
internal LNX_DMN_Thread * lnx_dmn_thread_from_handle(DMN_Handle thread_handle);
|
||||||
internal DMN_LNX_Module * dmn_lnx_module_from_handle(DMN_Handle module_handle);
|
internal LNX_DMN_Module * lnx_dmn_module_from_handle(DMN_Handle module_handle);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Process Helpers
|
//~ Process Helpers
|
||||||
|
|
||||||
internal void dmn_lnx_process_trap_probes(DMN_LNX_Process *process);
|
internal void lnx_dmn_process_trap_probes(LNX_DMN_Process *process);
|
||||||
internal void dmn_lnx_process_untrap_probes(DMN_LNX_Process *process);
|
internal void lnx_dmn_process_untrap_probes(LNX_DMN_Process *process);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Thread Helpers
|
//~ Thread Helpers
|
||||||
|
|
||||||
internal U64 dmn_lnx_thread_read_ip(DMN_LNX_Thread *thread);
|
internal U64 lnx_dmn_thread_read_ip(LNX_DMN_Thread *thread);
|
||||||
internal U64 dmn_lnx_thread_read_sp(DMN_LNX_Thread *thread);
|
internal U64 lnx_dmn_thread_read_sp(LNX_DMN_Thread *thread);
|
||||||
internal void dmn_lnx_thread_write_ip(DMN_LNX_Thread *thread, U64 ip);
|
internal void lnx_dmn_thread_write_ip(LNX_DMN_Thread *thread, U64 ip);
|
||||||
internal void dmn_lnx_thread_write_sp(DMN_LNX_Thread *thread, U64 sp);
|
internal void lnx_dmn_thread_write_sp(LNX_DMN_Thread *thread, U64 sp);
|
||||||
internal B32 dmn_lnx_thread_read_reg_block(DMN_LNX_Thread *thread);
|
internal B32 lnx_dmn_thread_read_reg_block(LNX_DMN_Thread *thread);
|
||||||
internal B32 dmn_lnx_thread_write_reg_block(DMN_LNX_Thread *thread);
|
internal B32 lnx_dmn_thread_write_reg_block(LNX_DMN_Thread *thread);
|
||||||
internal B32 dmn_lnx_set_single_step_flag(DMN_LNX_Thread *thread, B32 is_on);
|
internal B32 lnx_dmn_set_single_step_flag(LNX_DMN_Thread *thread, B32 is_on);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ List Helpers
|
//~ List Helpers
|
||||||
|
|
||||||
internal void dmn_lnx_thread_ptr_list_push_node(DMN_LNX_ThreadPtrList *list, DMN_LNX_ThreadPtrNode *n);
|
internal void lnx_dmn_thread_ptr_list_push_node(LNX_DMN_ThreadPtrList *list, LNX_DMN_ThreadPtrNode *n);
|
||||||
internal DMN_LNX_ThreadPtrNode * dmn_lnx_thread_ptr_list_push(Arena *arena, DMN_LNX_ThreadPtrList *list, DMN_LNX_Thread *v);
|
internal LNX_DMN_ThreadPtrNode * lnx_dmn_thread_ptr_list_push(Arena *arena, LNX_DMN_ThreadPtrList *list, LNX_DMN_Thread *v);
|
||||||
internal DMN_LNX_ModulePtrNode * dmn_lnx_module_ptr_list_push(Arena *arena, DMN_LNX_ModulePtrList *list, DMN_LNX_Module *v);
|
internal LNX_DMN_ModulePtrNode * lnx_dmn_module_ptr_list_push(Arena *arena, LNX_DMN_ModulePtrList *list, LNX_DMN_Module *v);
|
||||||
internal DMN_LNX_ProcessPtrNode * dmn_lnx_process_ptr_list_push(Arena *arena, DMN_LNX_ProcessPtrList *list, DMN_LNX_Process *v);
|
internal LNX_DMN_ProcessPtrNode * lnx_dmn_process_ptr_list_push(Arena *arena, LNX_DMN_ProcessPtrList *list, LNX_DMN_Process *v);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Debug Event Pushers
|
//~ Debug Event Pushers
|
||||||
|
|
||||||
internal void dmn_lnx_push_event_create_process(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process);
|
internal void lnx_dmn_push_event_create_process(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process);
|
||||||
internal void dmn_lnx_push_event_exit_process(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process);
|
internal void lnx_dmn_push_event_exit_process(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process);
|
||||||
internal void dmn_lnx_push_event_create_thread(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread);
|
internal void lnx_dmn_push_event_create_thread(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread);
|
||||||
internal void dmn_lnx_push_event_exit_thread(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread, U64 exit_code);
|
internal void lnx_dmn_push_event_exit_thread(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread, U64 exit_code);
|
||||||
internal void dmn_lnx_push_event_load_module(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread, DMN_LNX_Module *module);
|
internal void lnx_dmn_push_event_load_module(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread, LNX_DMN_Module *module);
|
||||||
internal void dmn_lnx_push_event_unload_module(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process, DMN_LNX_Module *module);
|
internal void lnx_dmn_push_event_unload_module(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process, LNX_DMN_Module *module);
|
||||||
internal void dmn_lnx_push_event_handshake_complete(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process);
|
internal void lnx_dmn_push_event_handshake_complete(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process);
|
||||||
internal void dmn_lnx_push_event_breakpoint(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread, U64 address);
|
internal void lnx_dmn_push_event_breakpoint(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread, U64 address);
|
||||||
internal void dmn_lnx_push_event_single_step(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread);
|
internal void lnx_dmn_push_event_single_step(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread);
|
||||||
internal void dmn_lnx_push_event_exception(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread, U64 signo);
|
internal void lnx_dmn_push_event_exception(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread, U64 signo);
|
||||||
internal void dmn_lnx_push_event_halt(Arena *arena, DMN_EventList *events);
|
internal void lnx_dmn_push_event_halt(Arena *arena, DMN_EventList *events);
|
||||||
internal void dmn_lnx_push_event_not_attached(Arena *arena, DMN_EventList *events);
|
internal void lnx_dmn_push_event_not_attached(Arena *arena, DMN_EventList *events);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Debug Event
|
//~ Debug Event
|
||||||
|
|
||||||
internal DMN_LNX_Thread * dmn_lnx_event_create_thread(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process, pid_t tid);
|
internal LNX_DMN_Thread * lnx_dmn_event_create_thread(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process, pid_t tid);
|
||||||
internal void dmn_lnx_event_exit_thread(Arena *arena, DMN_EventList *events, pid_t tid, U64 exit_code);
|
internal void lnx_dmn_event_exit_thread(Arena *arena, DMN_EventList *events, pid_t tid, U64 exit_code);
|
||||||
internal DMN_LNX_Process * dmn_lnx_event_create_process(Arena *arena, DMN_EventList *events, pid_t pid, DMN_LNX_Process *parent_process, DMN_LNX_CreateProcessFlags flags);
|
internal LNX_DMN_Process * lnx_dmn_event_create_process(Arena *arena, DMN_EventList *events, pid_t pid, LNX_DMN_Process *parent_process, LNX_DMN_CreateProcessFlags flags);
|
||||||
internal void dmn_lnx_event_exit_process(Arena *arena, DMN_EventList *events, pid_t pid);
|
internal void lnx_dmn_event_exit_process(Arena *arena, DMN_EventList *events, pid_t pid);
|
||||||
internal void dmn_lnx_event_load_module(Arena *arena, DMN_EventList *events, DMN_LNX_Thread *thread, U64 name_space_id, U64 new_link_map_vaddr);
|
internal void lnx_dmn_event_load_module(Arena *arena, DMN_EventList *events, LNX_DMN_Thread *thread, U64 name_space_id, U64 new_link_map_vaddr);
|
||||||
internal void dmn_lnx_event_unload_module(Arena *arena, DMN_EventList *events, DMN_LNX_Process *process, U64 rdebug_vaddr);
|
internal void lnx_dmn_event_unload_module(Arena *arena, DMN_EventList *events, LNX_DMN_Process *process, U64 rdebug_vaddr);
|
||||||
internal void dmn_lnx_event_breakpoint(Arena *arena, DMN_EventList *events, DMN_ActiveTrap *user_traps, pid_t tid);
|
internal void lnx_dmn_event_breakpoint(Arena *arena, DMN_EventList *events, DMN_ActiveTrap *user_traps, pid_t tid);
|
||||||
internal void dmn_lnx_event_data_breakpoint(Arena *arena, DMN_EventList *events, pid_t tid);
|
internal void lnx_dmn_event_data_breakpoint(Arena *arena, DMN_EventList *events, pid_t tid);
|
||||||
internal void dmn_lnx_event_halt(Arena *arena, DMN_EventList *events);
|
internal void lnx_dmn_event_halt(Arena *arena, DMN_EventList *events);
|
||||||
internal void dmn_lnx_event_single_step(Arena *arena, DMN_EventList *events, pid_t tid);
|
internal void lnx_dmn_event_single_step(Arena *arena, DMN_EventList *events, pid_t tid);
|
||||||
internal void dmn_lnx_event_exception(Arena *arena, DMN_EventList *events, pid_t tid, U64 signo);
|
internal void lnx_dmn_event_exception(Arena *arena, DMN_EventList *events, pid_t tid, U64 signo);
|
||||||
internal DMN_LNX_Process * dmn_lnx_event_attach(Arena *arena, DMN_EventList *events, pid_t pid);
|
internal LNX_DMN_Process * lnx_dmn_event_attach(Arena *arena, DMN_EventList *events, pid_t pid);
|
||||||
|
|
||||||
#endif // DEMON_CORE_LINUX_H
|
|
||||||
|
|
||||||
|
#endif // LINUX_DEMON_H
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Helpers
|
//~ rjf: Helpers
|
||||||
|
|
||||||
internal OS_LNX_Window *
|
internal LNX_WM_Window *
|
||||||
os_lnx_window_from_x11window(Window window)
|
os_lnx_window_from_x11window(Window window)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *result = 0;
|
LNX_WM_Window *result = 0;
|
||||||
for(OS_LNX_Window *w = os_lnx_gfx_state->first_window; w != 0; w = w->next)
|
for(LNX_WM_Window *w = os_lnx_gfx_state->first_window; w != 0; w = w->next)
|
||||||
{
|
{
|
||||||
if(w->window == window)
|
if(w->window == window)
|
||||||
{
|
{
|
||||||
@@ -23,11 +23,11 @@ os_lnx_window_from_x11window(Window window)
|
|||||||
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_gfx_init(void)
|
wm_init(void)
|
||||||
{
|
{
|
||||||
//- rjf: initialize basics
|
//- rjf: initialize basics
|
||||||
Arena *arena = arena_alloc();
|
Arena *arena = arena_alloc();
|
||||||
os_lnx_gfx_state = push_array(arena, OS_LNX_GfxState, 1);
|
os_lnx_gfx_state = push_array(arena, LNX_WM_GfxState, 1);
|
||||||
os_lnx_gfx_state->arena = arena;
|
os_lnx_gfx_state->arena = arena;
|
||||||
os_lnx_gfx_state->display = XOpenDisplay(0);
|
os_lnx_gfx_state->display = XOpenDisplay(0);
|
||||||
|
|
||||||
@@ -48,20 +48,20 @@ os_gfx_init(void)
|
|||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
OS_Cursor cursor;
|
WM_Cursor cursor;
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
}
|
}
|
||||||
map[] =
|
map[] =
|
||||||
{
|
{
|
||||||
{OS_Cursor_Pointer, XC_left_ptr},
|
{WM_Cursor_Pointer, XC_left_ptr},
|
||||||
{OS_Cursor_IBar, XC_xterm},
|
{WM_Cursor_IBar, XC_xterm},
|
||||||
{OS_Cursor_LeftRight, XC_sb_h_double_arrow},
|
{WM_Cursor_LeftRight, XC_sb_h_double_arrow},
|
||||||
{OS_Cursor_UpDown, XC_sb_v_double_arrow},
|
{WM_Cursor_UpDown, XC_sb_v_double_arrow},
|
||||||
{OS_Cursor_DownRight, XC_bottom_right_corner},
|
{WM_Cursor_DownRight, XC_bottom_right_corner},
|
||||||
{OS_Cursor_UpRight, XC_top_right_corner},
|
{WM_Cursor_UpRight, XC_top_right_corner},
|
||||||
{OS_Cursor_UpDownLeftRight, XC_fleur},
|
{WM_Cursor_UpDownLeftRight, XC_fleur},
|
||||||
{OS_Cursor_HandPoint, XC_hand1},
|
{WM_Cursor_HandPoint, XC_hand1},
|
||||||
{OS_Cursor_Disabled, XC_X_cursor},
|
{WM_Cursor_Disabled, XC_X_cursor},
|
||||||
};
|
};
|
||||||
for EachElement(idx, map)
|
for EachElement(idx, map)
|
||||||
{
|
{
|
||||||
@@ -73,8 +73,8 @@ os_gfx_init(void)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_GfxInfo *
|
internal WM_SystemInfo *
|
||||||
os_get_gfx_info(void)
|
wm_get_system_info(void)
|
||||||
{
|
{
|
||||||
return &os_lnx_gfx_state->gfx_info;
|
return &os_lnx_gfx_state->gfx_info;
|
||||||
}
|
}
|
||||||
@@ -83,13 +83,13 @@ os_get_gfx_info(void)
|
|||||||
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_set_clipboard_text(String8 string)
|
wm_set_clipboard_text(String8 string)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_get_clipboard_text(Arena *arena)
|
wm_get_clipboard_text(Arena *arena)
|
||||||
{
|
{
|
||||||
String8 result = {0};
|
String8 result = {0};
|
||||||
return result;
|
return result;
|
||||||
@@ -98,20 +98,20 @@ os_get_clipboard_text(Arena *arena)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Window
|
internal WM_Window
|
||||||
os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
wm_window_open(Rng2F32 rect, WM_WindowFlags flags, String8 title)
|
||||||
{
|
{
|
||||||
Vec2F32 resolution = dim_2f32(rect);
|
Vec2F32 resolution = dim_2f32(rect);
|
||||||
|
|
||||||
//- rjf: allocate window
|
//- rjf: allocate window
|
||||||
OS_LNX_Window *w = os_lnx_gfx_state->free_window;
|
LNX_WM_Window *w = os_lnx_gfx_state->free_window;
|
||||||
if(w)
|
if(w)
|
||||||
{
|
{
|
||||||
SLLStackPop(os_lnx_gfx_state->free_window);
|
SLLStackPop(os_lnx_gfx_state->free_window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
w = push_array_no_zero(os_lnx_gfx_state->arena, OS_LNX_Window, 1);
|
w = push_array_no_zero(os_lnx_gfx_state->arena, LNX_WM_Window, 1);
|
||||||
}
|
}
|
||||||
MemoryZeroStruct(w);
|
MemoryZeroStruct(w);
|
||||||
DLLPushBack(os_lnx_gfx_state->first_window, os_lnx_gfx_state->last_window, w);
|
DLLPushBack(os_lnx_gfx_state->first_window, os_lnx_gfx_state->last_window, w);
|
||||||
@@ -161,50 +161,50 @@ os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
|
|
||||||
//- rjf: convert to handle & return
|
//- rjf: convert to handle & return
|
||||||
OS_Window handle = {(U64)w};
|
WM_Window handle = {(U64)w};
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_close(OS_Window handle)
|
wm_window_close(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
XDestroyWindow(os_lnx_gfx_state->display, w->window);
|
XDestroyWindow(os_lnx_gfx_state->display, w->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_title(OS_Window handle, String8 title)
|
wm_window_set_title(WM_Window handle, String8 title)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
String8 title_copy = push_str8_copy(scratch.arena, title);
|
String8 title_copy = push_str8_copy(scratch.arena, title);
|
||||||
XStoreName(os_lnx_gfx_state->display, w->window, (char *)title_copy.str);
|
XStoreName(os_lnx_gfx_state->display, w->window, (char *)title_copy.str);
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_first_paint(OS_Window handle)
|
wm_window_first_paint(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
XMapWindow(os_lnx_gfx_state->display, w->window);
|
XMapWindow(os_lnx_gfx_state->display, w->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_focus(OS_Window handle)
|
wm_window_focus(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
XSetInputFocus(os_lnx_gfx_state->display, w->window, RevertToNone, CurrentTime);
|
XSetInputFocus(os_lnx_gfx_state->display, w->window, RevertToNone, CurrentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_focused(OS_Window handle)
|
wm_window_is_focused(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return 0;}
|
if(wm_window_match(handle, wm_window_zero())) {return 0;}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
Window focused_window = 0;
|
Window focused_window = 0;
|
||||||
int revert_to = 0;
|
int revert_to = 0;
|
||||||
XGetInputFocus(os_lnx_gfx_state->display, &focused_window, &revert_to);
|
XGetInputFocus(os_lnx_gfx_state->display, &focused_window, &revert_to);
|
||||||
@@ -213,97 +213,97 @@ os_window_is_focused(OS_Window handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_fullscreen(OS_Window handle)
|
wm_window_is_fullscreen(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return 0;}
|
if(wm_window_match(handle, wm_window_zero())) {return 0;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_fullscreen(OS_Window handle, B32 fullscreen)
|
wm_window_set_fullscreen(WM_Window handle, B32 fullscreen)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_maximized(OS_Window handle)
|
wm_window_is_maximized(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return 0;}
|
if(wm_window_match(handle, wm_window_zero())) {return 0;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_maximized(OS_Window handle, B32 maximized)
|
wm_window_set_maximized(WM_Window handle, B32 maximized)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_minimized(OS_Window handle)
|
wm_window_is_minimized(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return 0;}
|
if(wm_window_match(handle, wm_window_zero())) {return 0;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_minimized(OS_Window handle, B32 minimized)
|
wm_window_set_minimized(WM_Window handle, B32 minimized)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_bring_to_front(OS_Window handle)
|
wm_window_bring_to_front(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_monitor(OS_Window handle, OS_Monitor monitor)
|
wm_window_set_monitor(WM_Window handle, WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_clear_custom_border_data(OS_Window handle)
|
wm_window_clear_custom_border_data(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_title_bar(OS_Window handle, F32 thickness)
|
wm_window_push_custom_title_bar(WM_Window handle, F32 thickness)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_edges(OS_Window handle, F32 thickness)
|
wm_window_push_custom_edges(WM_Window handle, F32 thickness)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_title_bar_client_area(OS_Window handle, Rng2F32 rect)
|
wm_window_push_custom_title_bar_client_area(WM_Window handle, Rng2F32 rect)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return;}
|
if(wm_window_match(handle, wm_window_zero())) {return;}
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Rng2F32
|
internal Rng2F32
|
||||||
os_rect_from_window(OS_Window handle)
|
wm_rect_from_window(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return r2f32p(0, 0, 0, 0);}
|
if(wm_window_match(handle, wm_window_zero())) {return r2f32p(0, 0, 0, 0);}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
XWindowAttributes atts = {0};
|
XWindowAttributes atts = {0};
|
||||||
Status s = XGetWindowAttributes(os_lnx_gfx_state->display, w->window, &atts);
|
Status s = XGetWindowAttributes(os_lnx_gfx_state->display, w->window, &atts);
|
||||||
Rng2F32 result = r2f32p((F32)atts.x, (F32)atts.y, (F32)atts.x + (F32)atts.width, (F32)atts.y + (F32)atts.height);
|
Rng2F32 result = r2f32p((F32)atts.x, (F32)atts.y, (F32)atts.x + (F32)atts.width, (F32)atts.y + (F32)atts.height);
|
||||||
@@ -311,9 +311,9 @@ os_rect_from_window(OS_Window handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal Rng2F32
|
internal Rng2F32
|
||||||
os_client_rect_from_window(OS_Window handle)
|
wm_client_rect_from_window(WM_Window handle)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
XWindowAttributes atts = {0};
|
XWindowAttributes atts = {0};
|
||||||
Status s = XGetWindowAttributes(os_lnx_gfx_state->display, w->window, &atts);
|
Status s = XGetWindowAttributes(os_lnx_gfx_state->display, w->window, &atts);
|
||||||
Rng2F32 result = r2f32p(0, 0, (F32)atts.width, (F32)atts.height);
|
Rng2F32 result = r2f32p(0, 0, (F32)atts.width, (F32)atts.height);
|
||||||
@@ -321,7 +321,7 @@ os_client_rect_from_window(OS_Window handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal F32
|
internal F32
|
||||||
os_dpi_from_window(OS_Window handle)
|
wm_dpi_from_window(WM_Window handle)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 96.f;
|
return 96.f;
|
||||||
@@ -330,16 +330,16 @@ os_dpi_from_window(OS_Window handle)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_ExternalWindow
|
internal WM_ExtWindow
|
||||||
os_focused_external_window(void)
|
wm_focused_external_window(void)
|
||||||
{
|
{
|
||||||
OS_ExternalWindow result = {0};
|
WM_ExtWindow result = {0};
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_focus_external_window(OS_ExternalWindow handle)
|
wm_focus_external_window(WM_ExtWindow handle)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
@@ -347,46 +347,46 @@ os_focus_external_window(OS_ExternalWindow handle)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_MonitorArray
|
internal WM_MonitorArray
|
||||||
os_push_monitors_array(Arena *arena)
|
wm_push_monitors_array(Arena *arena)
|
||||||
{
|
{
|
||||||
OS_MonitorArray result = {0};
|
WM_MonitorArray result = {0};
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Monitor
|
internal WM_Monitor
|
||||||
os_primary_monitor(void)
|
wm_primary_monitor(void)
|
||||||
{
|
{
|
||||||
OS_Monitor result = {0};
|
WM_Monitor result = {0};
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Monitor
|
internal WM_Monitor
|
||||||
os_monitor_from_window(OS_Window window)
|
wm_monitor_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
OS_Monitor result = {0};
|
WM_Monitor result = {0};
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_name_from_monitor(Arena *arena, OS_Monitor monitor)
|
wm_name_from_monitor(Arena *arena, WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return str8_zero();
|
return str8_zero();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Vec2F32
|
internal Vec2F32
|
||||||
os_dim_from_monitor(OS_Monitor monitor)
|
wm_dim_from_monitor(WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return v2f32(0, 0);
|
return v2f32(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal F32
|
internal F32
|
||||||
os_dpi_from_monitor(OS_Monitor monitor)
|
wm_dpi_from_monitor(WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 96.f;
|
return 96.f;
|
||||||
@@ -396,15 +396,15 @@ os_dpi_from_monitor(OS_Monitor monitor)
|
|||||||
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_send_wakeup_event(void)
|
wm_send_wakeup_event(void)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_EventList
|
internal WM_EventList
|
||||||
os_get_events(Arena *arena, B32 wait)
|
wm_get_events(Arena *arena, B32 wait)
|
||||||
{
|
{
|
||||||
OS_EventList evts = {0};
|
WM_EventList evts = {0};
|
||||||
for(;XPending(os_lnx_gfx_state->display) > 0 || (wait && evts.count == 0);)
|
for(;XPending(os_lnx_gfx_state->display) > 0 || (wait && evts.count == 0);)
|
||||||
{
|
{
|
||||||
XEvent evt = {0};
|
XEvent evt = {0};
|
||||||
@@ -419,86 +419,86 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
{
|
{
|
||||||
// rjf: determine flags
|
// rjf: determine flags
|
||||||
OS_Modifiers modifiers = 0;
|
WM_Modifiers modifiers = 0;
|
||||||
if(evt.xkey.state & ShiftMask) { modifiers |= OS_Modifier_Shift; }
|
if(evt.xkey.state & ShiftMask) { modifiers |= WM_Modifier_Shift; }
|
||||||
if(evt.xkey.state & ControlMask) { modifiers |= OS_Modifier_Ctrl; }
|
if(evt.xkey.state & ControlMask) { modifiers |= WM_Modifier_Ctrl; }
|
||||||
if(evt.xkey.state & Mod1Mask) { modifiers |= OS_Modifier_Alt; }
|
if(evt.xkey.state & Mod1Mask) { modifiers |= WM_Modifier_Alt; }
|
||||||
|
|
||||||
// rjf: map keycode -> keysym & codepoint
|
// rjf: map keycode -> keysym & codepoint
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xkey.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xkey.window);
|
||||||
KeySym keysym = 0;
|
KeySym keysym = 0;
|
||||||
U8 text[256] = {0};
|
U8 text[256] = {0};
|
||||||
U64 text_size = Xutf8LookupString(window->xic, &evt.xkey, (char *)text, sizeof(text), &keysym, 0);
|
U64 text_size = Xutf8LookupString(window->xic, &evt.xkey, (char *)text, sizeof(text), &keysym, 0);
|
||||||
|
|
||||||
// rjf: map keysym -> OS_Key
|
// rjf: map keysym -> WM_Key
|
||||||
B32 is_right_sided = 0;
|
B32 is_right_sided = 0;
|
||||||
OS_Key key = OS_Key_Null;
|
WM_Key key = WM_Key_Null;
|
||||||
switch(keysym)
|
switch(keysym)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if(0){}
|
if(0){}
|
||||||
else if(XK_F1 <= keysym && keysym <= XK_F24) { key = (OS_Key)(OS_Key_F1 + (keysym - XK_F1)); }
|
else if(XK_F1 <= keysym && keysym <= XK_F24) { key = (WM_Key)(WM_Key_F1 + (keysym - XK_F1)); }
|
||||||
else if('0' <= keysym && keysym <= '9') { key = OS_Key_0 + (keysym-'0'); }
|
else if('0' <= keysym && keysym <= '9') { key = WM_Key_0 + (keysym-'0'); }
|
||||||
}break;
|
}break;
|
||||||
case XK_Escape:{key = OS_Key_Esc;};break;
|
case XK_Escape:{key = WM_Key_Esc;};break;
|
||||||
case XK_BackSpace:{key = OS_Key_Backspace;}break;
|
case XK_BackSpace:{key = WM_Key_Backspace;}break;
|
||||||
case XK_Delete:{key = OS_Key_Delete;}break;
|
case XK_Delete:{key = WM_Key_Delete;}break;
|
||||||
case XK_Return:{key = OS_Key_Return;}break;
|
case XK_Return:{key = WM_Key_Return;}break;
|
||||||
case XK_Pause:{key = OS_Key_Pause;}break;
|
case XK_Pause:{key = WM_Key_Pause;}break;
|
||||||
case XK_Tab:{key = OS_Key_Tab;}break;
|
case XK_Tab:{key = WM_Key_Tab;}break;
|
||||||
case XK_Left:{key = OS_Key_Left;}break;
|
case XK_Left:{key = WM_Key_Left;}break;
|
||||||
case XK_Right:{key = OS_Key_Right;}break;
|
case XK_Right:{key = WM_Key_Right;}break;
|
||||||
case XK_Up:{key = OS_Key_Up;}break;
|
case XK_Up:{key = WM_Key_Up;}break;
|
||||||
case XK_Down:{key = OS_Key_Down;}break;
|
case XK_Down:{key = WM_Key_Down;}break;
|
||||||
case XK_Home:{key = OS_Key_Home;}break;
|
case XK_Home:{key = WM_Key_Home;}break;
|
||||||
case XK_End:{key = OS_Key_End;}break;
|
case XK_End:{key = WM_Key_End;}break;
|
||||||
case XK_Page_Up:{key = OS_Key_PageUp;}break;
|
case XK_Page_Up:{key = WM_Key_PageUp;}break;
|
||||||
case XK_Page_Down:{key = OS_Key_PageDown;}break;
|
case XK_Page_Down:{key = WM_Key_PageDown;}break;
|
||||||
case XK_Alt_L:{ key = OS_Key_Alt; }break;
|
case XK_Alt_L:{ key = WM_Key_Alt; }break;
|
||||||
case XK_Alt_R:{ key = OS_Key_Alt; is_right_sided = 1;}break;
|
case XK_Alt_R:{ key = WM_Key_Alt; is_right_sided = 1;}break;
|
||||||
case XK_Shift_L:{ key = OS_Key_Shift; }break;
|
case XK_Shift_L:{ key = WM_Key_Shift; }break;
|
||||||
case XK_Shift_R:{ key = OS_Key_Shift; is_right_sided = 1;}break;
|
case XK_Shift_R:{ key = WM_Key_Shift; is_right_sided = 1;}break;
|
||||||
case XK_Control_L:{ key = OS_Key_Ctrl; }break;
|
case XK_Control_L:{ key = WM_Key_Ctrl; }break;
|
||||||
case XK_Control_R:{ key = OS_Key_Ctrl; is_right_sided = 1;}break;
|
case XK_Control_R:{ key = WM_Key_Ctrl; is_right_sided = 1;}break;
|
||||||
case '-':{key = OS_Key_Minus;}break;
|
case '-':{key = WM_Key_Minus;}break;
|
||||||
case '=':{key = OS_Key_Equal;}break;
|
case '=':{key = WM_Key_Equal;}break;
|
||||||
case '[':{key = OS_Key_LeftBracket;}break;
|
case '[':{key = WM_Key_LeftBracket;}break;
|
||||||
case ']':{key = OS_Key_RightBracket;}break;
|
case ']':{key = WM_Key_RightBracket;}break;
|
||||||
case ';':{key = OS_Key_Semicolon;}break;
|
case ';':{key = WM_Key_Semicolon;}break;
|
||||||
case '\'':{key = OS_Key_Quote;}break;
|
case '\'':{key = WM_Key_Quote;}break;
|
||||||
case '.':{key = OS_Key_Period;}break;
|
case '.':{key = WM_Key_Period;}break;
|
||||||
case ',':{key = OS_Key_Comma;}break;
|
case ',':{key = WM_Key_Comma;}break;
|
||||||
case '/':{key = OS_Key_Slash;}break;
|
case '/':{key = WM_Key_Slash;}break;
|
||||||
case '\\':{key = OS_Key_BackSlash;}break;
|
case '\\':{key = WM_Key_BackSlash;}break;
|
||||||
case '\t':{key = OS_Key_Tab;}break;
|
case '\t':{key = WM_Key_Tab;}break;
|
||||||
case 'a':case 'A':{key = OS_Key_A;}break;
|
case 'a':case 'A':{key = WM_Key_A;}break;
|
||||||
case 'b':case 'B':{key = OS_Key_B;}break;
|
case 'b':case 'B':{key = WM_Key_B;}break;
|
||||||
case 'c':case 'C':{key = OS_Key_C;}break;
|
case 'c':case 'C':{key = WM_Key_C;}break;
|
||||||
case 'd':case 'D':{key = OS_Key_D;}break;
|
case 'd':case 'D':{key = WM_Key_D;}break;
|
||||||
case 'e':case 'E':{key = OS_Key_E;}break;
|
case 'e':case 'E':{key = WM_Key_E;}break;
|
||||||
case 'f':case 'F':{key = OS_Key_F;}break;
|
case 'f':case 'F':{key = WM_Key_F;}break;
|
||||||
case 'g':case 'G':{key = OS_Key_G;}break;
|
case 'g':case 'G':{key = WM_Key_G;}break;
|
||||||
case 'h':case 'H':{key = OS_Key_H;}break;
|
case 'h':case 'H':{key = WM_Key_H;}break;
|
||||||
case 'i':case 'I':{key = OS_Key_I;}break;
|
case 'i':case 'I':{key = WM_Key_I;}break;
|
||||||
case 'j':case 'J':{key = OS_Key_J;}break;
|
case 'j':case 'J':{key = WM_Key_J;}break;
|
||||||
case 'k':case 'K':{key = OS_Key_K;}break;
|
case 'k':case 'K':{key = WM_Key_K;}break;
|
||||||
case 'l':case 'L':{key = OS_Key_L;}break;
|
case 'l':case 'L':{key = WM_Key_L;}break;
|
||||||
case 'm':case 'M':{key = OS_Key_M;}break;
|
case 'm':case 'M':{key = WM_Key_M;}break;
|
||||||
case 'n':case 'N':{key = OS_Key_N;}break;
|
case 'n':case 'N':{key = WM_Key_N;}break;
|
||||||
case 'o':case 'O':{key = OS_Key_O;}break;
|
case 'o':case 'O':{key = WM_Key_O;}break;
|
||||||
case 'p':case 'P':{key = OS_Key_P;}break;
|
case 'p':case 'P':{key = WM_Key_P;}break;
|
||||||
case 'q':case 'Q':{key = OS_Key_Q;}break;
|
case 'q':case 'Q':{key = WM_Key_Q;}break;
|
||||||
case 'r':case 'R':{key = OS_Key_R;}break;
|
case 'r':case 'R':{key = WM_Key_R;}break;
|
||||||
case 's':case 'S':{key = OS_Key_S;}break;
|
case 's':case 'S':{key = WM_Key_S;}break;
|
||||||
case 't':case 'T':{key = OS_Key_T;}break;
|
case 't':case 'T':{key = WM_Key_T;}break;
|
||||||
case 'u':case 'U':{key = OS_Key_U;}break;
|
case 'u':case 'U':{key = WM_Key_U;}break;
|
||||||
case 'v':case 'V':{key = OS_Key_V;}break;
|
case 'v':case 'V':{key = WM_Key_V;}break;
|
||||||
case 'w':case 'W':{key = OS_Key_W;}break;
|
case 'w':case 'W':{key = WM_Key_W;}break;
|
||||||
case 'x':case 'X':{key = OS_Key_X;}break;
|
case 'x':case 'X':{key = WM_Key_X;}break;
|
||||||
case 'y':case 'Y':{key = OS_Key_Y;}break;
|
case 'y':case 'Y':{key = WM_Key_Y;}break;
|
||||||
case 'z':case 'Z':{key = OS_Key_Z;}break;
|
case 'z':case 'Z':{key = WM_Key_Z;}break;
|
||||||
case ' ':{key = OS_Key_Space;}break;
|
case ' ':{key = WM_Key_Space;}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: push text event
|
// rjf: push text event
|
||||||
@@ -509,7 +509,7 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
UnicodeDecode decode = utf8_decode(text+off, text_size-off);
|
UnicodeDecode decode = utf8_decode(text+off, text_size-off);
|
||||||
if(decode.codepoint != 0 && (decode.codepoint >= 32 || decode.codepoint == '\t'))
|
if(decode.codepoint != 0 && (decode.codepoint >= 32 || decode.codepoint == '\t'))
|
||||||
{
|
{
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_Text);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, WM_EventKind_Text);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->character = decode.codepoint;
|
e->character = decode.codepoint;
|
||||||
}
|
}
|
||||||
@@ -523,7 +523,7 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
|
|
||||||
// rjf: push key event
|
// rjf: push key event
|
||||||
{
|
{
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == KeyPress ? OS_EventKind_Press : OS_EventKind_Release);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, evt.type == KeyPress ? WM_EventKind_Press : WM_EventKind_Release);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->modifiers = modifiers;
|
e->modifiers = modifiers;
|
||||||
e->key = key;
|
e->key = key;
|
||||||
@@ -536,26 +536,26 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
{
|
{
|
||||||
// rjf: determine flags
|
// rjf: determine flags
|
||||||
OS_Modifiers modifiers = 0;
|
WM_Modifiers modifiers = 0;
|
||||||
if(evt.xbutton.state & ShiftMask) { modifiers |= OS_Modifier_Shift; }
|
if(evt.xbutton.state & ShiftMask) { modifiers |= WM_Modifier_Shift; }
|
||||||
if(evt.xbutton.state & ControlMask) { modifiers |= OS_Modifier_Ctrl; }
|
if(evt.xbutton.state & ControlMask) { modifiers |= WM_Modifier_Ctrl; }
|
||||||
if(evt.xbutton.state & Mod1Mask) { modifiers |= OS_Modifier_Alt; }
|
if(evt.xbutton.state & Mod1Mask) { modifiers |= WM_Modifier_Alt; }
|
||||||
|
|
||||||
// rjf: map button -> OS_Key
|
// rjf: map button -> WM_Key
|
||||||
OS_Key key = OS_Key_Null;
|
WM_Key key = WM_Key_Null;
|
||||||
switch(evt.xbutton.button)
|
switch(evt.xbutton.button)
|
||||||
{
|
{
|
||||||
default:{}break;
|
default:{}break;
|
||||||
case Button1:{key = OS_Key_LeftMouseButton;}break;
|
case Button1:{key = WM_Key_LeftMouseButton;}break;
|
||||||
case Button2:{key = OS_Key_MiddleMouseButton;}break;
|
case Button2:{key = WM_Key_MiddleMouseButton;}break;
|
||||||
case Button3:{key = OS_Key_RightMouseButton;}break;
|
case Button3:{key = WM_Key_RightMouseButton;}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: push event
|
// rjf: push event
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xbutton.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xbutton.window);
|
||||||
if(key != OS_Key_Null)
|
if(key != WM_Key_Null)
|
||||||
{
|
{
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == ButtonPress ? OS_EventKind_Press : OS_EventKind_Release);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, evt.type == ButtonPress ? WM_EventKind_Press : WM_EventKind_Release);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->modifiers = modifiers;
|
e->modifiers = modifiers;
|
||||||
e->key = key;
|
e->key = key;
|
||||||
@@ -564,7 +564,7 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
else if(evt.xbutton.button == Button4 ||
|
else if(evt.xbutton.button == Button4 ||
|
||||||
evt.xbutton.button == Button5)
|
evt.xbutton.button == Button5)
|
||||||
{
|
{
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_Scroll);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, WM_EventKind_Scroll);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->modifiers = modifiers;
|
e->modifiers = modifiers;
|
||||||
e->delta = v2f32(0, evt.xbutton.button == Button4 ? -1.f : +1.f);
|
e->delta = v2f32(0, evt.xbutton.button == Button4 ? -1.f : +1.f);
|
||||||
@@ -575,8 +575,8 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
//- rjf: mouse motion
|
//- rjf: mouse motion
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
{
|
{
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_MouseMove);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, WM_EventKind_MouseMove);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->pos.x = (F32)evt.xmotion.x;
|
e->pos.x = (F32)evt.xmotion.x;
|
||||||
e->pos.y = (F32)evt.xmotion.y;
|
e->pos.y = (F32)evt.xmotion.y;
|
||||||
@@ -589,8 +589,8 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
}break;
|
}break;
|
||||||
case FocusOut:
|
case FocusOut:
|
||||||
{
|
{
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xfocus.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xfocus.window);
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_WindowLoseFocus);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, WM_EventKind_WindowLoseFocus);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
@@ -599,13 +599,13 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
{
|
{
|
||||||
if((Atom)evt.xclient.data.l[0] == os_lnx_gfx_state->wm_delete_window_atom)
|
if((Atom)evt.xclient.data.l[0] == os_lnx_gfx_state->wm_delete_window_atom)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_WindowClose);
|
WM_Event *e = wm_event_list_push_new(arena, &evts, WM_EventKind_WindowClose);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
}
|
}
|
||||||
else if((Atom)evt.xclient.data.l[0] == os_lnx_gfx_state->wm_sync_request_atom)
|
else if((Atom)evt.xclient.data.l[0] == os_lnx_gfx_state->wm_sync_request_atom)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
LNX_WM_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
||||||
if(window != 0)
|
if(window != 0)
|
||||||
{
|
{
|
||||||
window->counter_value = 0;
|
window->counter_value = 0;
|
||||||
@@ -637,25 +637,25 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
return evts;
|
return evts;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Modifiers
|
internal WM_Modifiers
|
||||||
os_get_modifiers(void)
|
wm_get_modifiers(void)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_key_is_down(OS_Key key)
|
wm_key_is_down(WM_Key key)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Vec2F32
|
internal Vec2F32
|
||||||
os_mouse_from_window(OS_Window handle)
|
wm_mouse_from_window(WM_Window handle)
|
||||||
{
|
{
|
||||||
if(os_window_match(handle, os_window_zero())) {return v2f32(0, 0);}
|
if(wm_window_match(handle, wm_window_zero())) {return v2f32(0, 0);}
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)handle.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)handle.u64[0];
|
||||||
Vec2F32 result = {0};
|
Vec2F32 result = {0};
|
||||||
{
|
{
|
||||||
Window root_window = 0;
|
Window root_window = 0;
|
||||||
@@ -678,7 +678,7 @@ os_mouse_from_window(OS_Window handle)
|
|||||||
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_set_cursor(OS_Cursor cursor)
|
wm_set_cursor(WM_Cursor cursor)
|
||||||
{
|
{
|
||||||
os_lnx_gfx_state->last_set_cursor = cursor;
|
os_lnx_gfx_state->last_set_cursor = cursor;
|
||||||
}
|
}
|
||||||
@@ -687,7 +687,7 @@ os_set_cursor(OS_Cursor cursor)
|
|||||||
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_graphical_message(B32 error, String8 title, String8 message)
|
wm_graphical_message(B32 error, String8 title, String8 message)
|
||||||
{
|
{
|
||||||
if(error)
|
if(error)
|
||||||
{
|
{
|
||||||
@@ -698,7 +698,7 @@ os_graphical_message(B32 error, String8 title, String8 message)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_graphical_pick_file(Arena *arena, String8 initial_path)
|
wm_graphical_pick_file(Arena *arena, String8 initial_path)
|
||||||
{
|
{
|
||||||
return str8_zero();
|
return str8_zero();
|
||||||
}
|
}
|
||||||
@@ -707,13 +707,13 @@ os_graphical_pick_file(Arena *arena, String8 initial_path)
|
|||||||
//~ rjf: @os_hooks Shell Operations
|
//~ rjf: @os_hooks Shell Operations
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_show_in_filesystem_ui(String8 path)
|
wm_show_in_filesystem_ui(String8 path)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_open_in_browser(String8 url)
|
wm_open_in_browser(String8 url)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Window State
|
//~ rjf: Window State
|
||||||
|
|
||||||
typedef struct OS_LNX_Window OS_LNX_Window;
|
typedef struct LNX_WM_Window LNX_WM_Window;
|
||||||
struct OS_LNX_Window
|
struct LNX_WM_Window
|
||||||
{
|
{
|
||||||
OS_LNX_Window *next;
|
LNX_WM_Window *next;
|
||||||
OS_LNX_Window *prev;
|
LNX_WM_Window *prev;
|
||||||
Window window;
|
Window window;
|
||||||
XIC xic;
|
XIC xic;
|
||||||
XID counter_xid;
|
XID counter_xid;
|
||||||
@@ -31,31 +31,31 @@ struct OS_LNX_Window
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: State Bundle
|
//~ rjf: State Bundle
|
||||||
|
|
||||||
typedef struct OS_LNX_GfxState OS_LNX_GfxState;
|
typedef struct LNX_WM_GfxState LNX_WM_GfxState;
|
||||||
struct OS_LNX_GfxState
|
struct LNX_WM_GfxState
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
Display *display;
|
Display *display;
|
||||||
XIM xim;
|
XIM xim;
|
||||||
OS_LNX_Window *first_window;
|
LNX_WM_Window *first_window;
|
||||||
OS_LNX_Window *last_window;
|
LNX_WM_Window *last_window;
|
||||||
OS_LNX_Window *free_window;
|
LNX_WM_Window *free_window;
|
||||||
Atom wm_delete_window_atom;
|
Atom wm_delete_window_atom;
|
||||||
Atom wm_sync_request_atom;
|
Atom wm_sync_request_atom;
|
||||||
Atom wm_sync_request_counter_atom;
|
Atom wm_sync_request_counter_atom;
|
||||||
Cursor cursors[OS_Cursor_COUNT];
|
Cursor cursors[WM_Cursor_COUNT];
|
||||||
OS_Cursor last_set_cursor;
|
WM_Cursor last_set_cursor;
|
||||||
OS_GfxInfo gfx_info;
|
WM_SystemInfo gfx_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals
|
//~ rjf: Globals
|
||||||
|
|
||||||
global OS_LNX_GfxState *os_lnx_gfx_state = 0;
|
global LNX_WM_GfxState *os_lnx_gfx_state = 0;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Helpers
|
//~ rjf: Helpers
|
||||||
|
|
||||||
internal OS_LNX_Window *os_lnx_window_from_x11window(Window window);
|
internal LNX_WM_Window *os_lnx_window_from_x11window(Window window);
|
||||||
|
|
||||||
#endif // OS_GFX_LINUX_H
|
#endif // OS_GFX_LINUX_H
|
||||||
|
|||||||
+122
-122
@@ -212,7 +212,7 @@ RD_VocabInfo rd_vocab_info_table[360] =
|
|||||||
{str8_lit_comp("open_palette"), str8_lit_comp(""), str8_lit_comp("Open Palette"), str8_lit_comp(""), RD_IconKind_List},
|
{str8_lit_comp("open_palette"), str8_lit_comp(""), str8_lit_comp("Open Palette"), str8_lit_comp(""), RD_IconKind_List},
|
||||||
{str8_lit_comp("run_command"), str8_lit_comp(""), str8_lit_comp("Run Command"), str8_lit_comp(""), RD_IconKind_Null},
|
{str8_lit_comp("run_command"), str8_lit_comp(""), str8_lit_comp("Run Command"), str8_lit_comp(""), RD_IconKind_Null},
|
||||||
{str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp("Run External Driver Text Command"), str8_lit_comp(""), RD_IconKind_Null},
|
{str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp("Run External Driver Text Command"), str8_lit_comp(""), RD_IconKind_Null},
|
||||||
{str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp("OS Event"), str8_lit_comp(""), RD_IconKind_Null},
|
{str8_lit_comp("wm_event"), str8_lit_comp(""), str8_lit_comp("OS Event"), str8_lit_comp(""), RD_IconKind_Null},
|
||||||
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Thread},
|
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Thread},
|
||||||
{str8_lit_comp("select_unwind"), str8_lit_comp(""), str8_lit_comp("Select Unwind"), str8_lit_comp(""), RD_IconKind_Null},
|
{str8_lit_comp("select_unwind"), str8_lit_comp(""), str8_lit_comp("Select Unwind"), str8_lit_comp(""), RD_IconKind_Null},
|
||||||
{str8_lit_comp("up_one_frame"), str8_lit_comp(""), str8_lit_comp("Up One Frame"), str8_lit_comp(""), RD_IconKind_UpArrow},
|
{str8_lit_comp("up_one_frame"), str8_lit_comp(""), str8_lit_comp("Up One Frame"), str8_lit_comp(""), RD_IconKind_UpArrow},
|
||||||
@@ -520,7 +520,7 @@ str8_lit_comp("activate_with_single_click"),
|
|||||||
str8_lit_comp("dir2"),
|
str8_lit_comp("dir2"),
|
||||||
str8_lit_comp("string"),
|
str8_lit_comp("string"),
|
||||||
str8_lit_comp("cmd_name"),
|
str8_lit_comp("cmd_name"),
|
||||||
str8_lit_comp("os_event"),
|
str8_lit_comp("wm_event"),
|
||||||
};
|
};
|
||||||
|
|
||||||
Rng1U64 rd_reg_slot_range_table[49] =
|
Rng1U64 rd_reg_slot_range_table[49] =
|
||||||
@@ -573,7 +573,7 @@ Rng1U64 rd_reg_slot_range_table[49] =
|
|||||||
{OffsetOf(RD_Regs, dir2), OffsetOf(RD_Regs, dir2) + sizeof(Dir2)},
|
{OffsetOf(RD_Regs, dir2), OffsetOf(RD_Regs, dir2) + sizeof(Dir2)},
|
||||||
{OffsetOf(RD_Regs, string), OffsetOf(RD_Regs, string) + sizeof(String8)},
|
{OffsetOf(RD_Regs, string), OffsetOf(RD_Regs, string) + sizeof(String8)},
|
||||||
{OffsetOf(RD_Regs, cmd_name), OffsetOf(RD_Regs, cmd_name) + sizeof(String8)},
|
{OffsetOf(RD_Regs, cmd_name), OffsetOf(RD_Regs, cmd_name) + sizeof(String8)},
|
||||||
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
|
{OffsetOf(RD_Regs, wm_event), OffsetOf(RD_Regs, wm_event) + sizeof(WM_Event *)},
|
||||||
};
|
};
|
||||||
|
|
||||||
RD_CmdKindInfo rd_cmd_kind_info_table[249] =
|
RD_CmdKindInfo rd_cmd_kind_info_table[249] =
|
||||||
@@ -615,7 +615,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[249] =
|
|||||||
{ str8_lit_comp("open_palette"), str8_lit_comp("Opens the palette."), str8_lit_comp("help,cmd,lister"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
{ str8_lit_comp("open_palette"), str8_lit_comp("Opens the palette."), str8_lit_comp("help,cmd,lister"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
||||||
{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), D_EntityKind_Null}},
|
{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), D_EntityKind_Null}},
|
||||||
{ str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
{ str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
||||||
{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
{ str8_lit_comp("wm_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
||||||
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}},
|
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}},
|
||||||
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), D_EntityKind_Null}},
|
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), D_EntityKind_Null}},
|
||||||
{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the call stack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the call stack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}},
|
||||||
@@ -831,124 +831,124 @@ RD_CmdKindInfo rd_cmd_kind_info_table[249] =
|
|||||||
|
|
||||||
struct {String8 string; CFG_Binding binding;} rd_default_binding_table[118] =
|
struct {String8 string; CFG_Binding binding;} rd_default_binding_table[118] =
|
||||||
{
|
{
|
||||||
{str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("kill_all"), {WM_Key_F5, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("step_into_inst"), {OS_Key_F11, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("step_into_inst"), {WM_Key_F11, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("step_over_inst"), {OS_Key_F10, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("step_over_inst"), {WM_Key_F10, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("step_out"), {OS_Key_F11, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("step_out"), {WM_Key_F11, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("halt"), {OS_Key_X, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("halt"), {WM_Key_X, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("halt"), {OS_Key_Pause, 0 }},
|
{str8_lit_comp("halt"), {WM_Key_Pause, 0 }},
|
||||||
{str8_lit_comp("run"), {OS_Key_F5, 0 }},
|
{str8_lit_comp("run"), {WM_Key_F5, 0 }},
|
||||||
{str8_lit_comp("restart"), {OS_Key_F5, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("restart"), {WM_Key_F5, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("step_into"), {OS_Key_F11, 0 }},
|
{str8_lit_comp("step_into"), {WM_Key_F11, 0 }},
|
||||||
{str8_lit_comp("step_over"), {OS_Key_F10, 0 }},
|
{str8_lit_comp("step_over"), {WM_Key_F10, 0 }},
|
||||||
{str8_lit_comp("run_to_line"), {OS_Key_F10, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("run_to_line"), {WM_Key_F10, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("set_next_statement"), {OS_Key_F10, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("set_next_statement"), {WM_Key_F10, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("inc_window_font_size"), {OS_Key_Equal, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("inc_window_font_size"), {WM_Key_Equal, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("dec_window_font_size"), {OS_Key_Minus, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("dec_window_font_size"), {WM_Key_Minus, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("window"), {OS_Key_N, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("window"), {WM_Key_N, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("toggle_fullscreen"), {OS_Key_Return, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("toggle_fullscreen"), {WM_Key_Return, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("new_panel_right"), {OS_Key_P, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("new_panel_right"), {WM_Key_P, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("new_panel_down"), {OS_Key_Minus, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("new_panel_down"), {WM_Key_Minus, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("rotate_panel_columns"), {OS_Key_2, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("rotate_panel_columns"), {WM_Key_2, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("next_panel"), {OS_Key_Comma, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("next_panel"), {WM_Key_Comma, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("prev_panel"), {OS_Key_Comma, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("prev_panel"), {WM_Key_Comma, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("focus_panel_right"), {OS_Key_Right, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("focus_panel_right"), {WM_Key_Right, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("focus_panel_left"), {OS_Key_Left, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("focus_panel_left"), {WM_Key_Left, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("focus_panel_up"), {OS_Key_Up, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("focus_panel_up"), {WM_Key_Up, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("focus_panel_down"), {OS_Key_Down, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("focus_panel_down"), {WM_Key_Down, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("undo"), {OS_Key_Z, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("undo"), {WM_Key_Z, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("redo"), {OS_Key_Y, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("redo"), {WM_Key_Y, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("go_back"), {OS_Key_Left, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("go_back"), {WM_Key_Left, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("go_forward"), {OS_Key_Right, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("go_forward"), {WM_Key_Right, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("close_panel"), {OS_Key_P, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("close_panel"), {WM_Key_P, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("next_tab"), {OS_Key_PageDown, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("next_tab"), {WM_Key_PageDown, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("prev_tab"), {OS_Key_PageUp, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("prev_tab"), {WM_Key_PageUp, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("next_tab"), {OS_Key_Tab, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("next_tab"), {WM_Key_Tab, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("prev_tab"), {OS_Key_Tab, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("prev_tab"), {WM_Key_Tab, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_tab_right"), {OS_Key_PageDown, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_tab_right"), {WM_Key_PageDown, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_tab_left"), {OS_Key_PageUp, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_tab_left"), {WM_Key_PageUp, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("close_tab"), {OS_Key_W, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("close_tab"), {WM_Key_W, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("tab_bar_top"), {OS_Key_Up, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("tab_bar_top"), {WM_Key_Up, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("tab_bar_bottom"), {OS_Key_Down, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("tab_bar_bottom"), {WM_Key_Down, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open_tab"), {OS_Key_T, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("open_tab"), {WM_Key_T, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("tab_settings"), {OS_Key_T, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("tab_settings"), {WM_Key_T, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open"), {OS_Key_O, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("open"), {WM_Key_O, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("switch"), {OS_Key_I, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("switch"), {WM_Key_I, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("switch_to_partner_file"), {OS_Key_O, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("switch_to_partner_file"), {WM_Key_O, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open_user"), {OS_Key_N, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("open_user"), {WM_Key_N, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open_project"), {OS_Key_N, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("open_project"), {WM_Key_N, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open_user"), {OS_Key_O, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("open_user"), {WM_Key_O, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("open_project"), {OS_Key_O, 0 |OS_Modifier_Ctrl |OS_Modifier_Alt}},
|
{str8_lit_comp("open_project"), {WM_Key_O, 0 |WM_Modifier_Ctrl |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("save_user"), {OS_Key_S, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("save_user"), {WM_Key_S, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("save_project"), {OS_Key_S, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("save_project"), {WM_Key_S, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("edit"), {OS_Key_F2, 0 }},
|
{str8_lit_comp("edit"), {WM_Key_F2, 0 }},
|
||||||
{str8_lit_comp("accept"), {OS_Key_Return, 0 }},
|
{str8_lit_comp("accept"), {WM_Key_Return, 0 }},
|
||||||
{str8_lit_comp("accept"), {OS_Key_Space, 0 }},
|
{str8_lit_comp("accept"), {WM_Key_Space, 0 }},
|
||||||
{str8_lit_comp("cancel"), {OS_Key_Esc, 0 }},
|
{str8_lit_comp("cancel"), {WM_Key_Esc, 0 }},
|
||||||
{str8_lit_comp("focus_menu"), {OS_Key_D, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("focus_menu"), {WM_Key_D, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("move_left"), {OS_Key_Left, 0 }},
|
{str8_lit_comp("move_left"), {WM_Key_Left, 0 }},
|
||||||
{str8_lit_comp("move_right"), {OS_Key_Right, 0 }},
|
{str8_lit_comp("move_right"), {WM_Key_Right, 0 }},
|
||||||
{str8_lit_comp("move_up"), {OS_Key_Up, 0 }},
|
{str8_lit_comp("move_up"), {WM_Key_Up, 0 }},
|
||||||
{str8_lit_comp("move_down"), {OS_Key_Down, 0 }},
|
{str8_lit_comp("move_down"), {WM_Key_Down, 0 }},
|
||||||
{str8_lit_comp("move_left_select"), {OS_Key_Left, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_left_select"), {WM_Key_Left, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_right_select"), {OS_Key_Right, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_right_select"), {WM_Key_Right, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_up_select"), {OS_Key_Up, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_up_select"), {WM_Key_Up, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_down_select"), {OS_Key_Down, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_down_select"), {WM_Key_Down, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_left_chunk"), {OS_Key_Left, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_left_chunk"), {WM_Key_Left, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_right_chunk"), {OS_Key_Right, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_right_chunk"), {WM_Key_Right, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_up_chunk"), {OS_Key_Up, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_up_chunk"), {WM_Key_Up, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_down_chunk"), {OS_Key_Down, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_down_chunk"), {WM_Key_Down, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_up_page"), {OS_Key_PageUp, 0 }},
|
{str8_lit_comp("move_up_page"), {WM_Key_PageUp, 0 }},
|
||||||
{str8_lit_comp("move_down_page"), {OS_Key_PageDown, 0 }},
|
{str8_lit_comp("move_down_page"), {WM_Key_PageDown, 0 }},
|
||||||
{str8_lit_comp("move_up_whole"), {OS_Key_Home, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_up_whole"), {WM_Key_Home, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_down_whole"), {OS_Key_End, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("move_down_whole"), {WM_Key_End, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("move_left_chunk_select"), {OS_Key_Left, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_left_chunk_select"), {WM_Key_Left, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_right_chunk_select"), {OS_Key_Right, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_right_chunk_select"), {WM_Key_Right, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_up_chunk_select"), {OS_Key_Up, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_up_chunk_select"), {WM_Key_Up, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_down_chunk_select"), {OS_Key_Down, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_down_chunk_select"), {WM_Key_Down, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_up_page_select"), {OS_Key_PageUp, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_up_page_select"), {WM_Key_PageUp, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_down_page_select"), {OS_Key_PageDown, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_down_page_select"), {WM_Key_PageDown, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_up_whole_select"), {OS_Key_Home, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_up_whole_select"), {WM_Key_Home, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_down_whole_select"), {OS_Key_End, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("move_down_whole_select"), {WM_Key_End, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_up_reorder"), {OS_Key_Up, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("move_up_reorder"), {WM_Key_Up, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("move_down_reorder"), {OS_Key_Down, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("move_down_reorder"), {WM_Key_Down, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("move_home"), {OS_Key_Home, 0 }},
|
{str8_lit_comp("move_home"), {WM_Key_Home, 0 }},
|
||||||
{str8_lit_comp("move_end"), {OS_Key_End, 0 }},
|
{str8_lit_comp("move_end"), {WM_Key_End, 0 }},
|
||||||
{str8_lit_comp("move_home_select"), {OS_Key_Home, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_home_select"), {WM_Key_Home, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("move_end_select"), {OS_Key_End, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_end_select"), {WM_Key_End, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("select_all"), {OS_Key_A, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("select_all"), {WM_Key_A, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("delete_single"), {OS_Key_Delete, 0 }},
|
{str8_lit_comp("delete_single"), {WM_Key_Delete, 0 }},
|
||||||
{str8_lit_comp("delete_chunk"), {OS_Key_Delete, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("delete_chunk"), {WM_Key_Delete, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("backspace_single"), {OS_Key_Backspace, 0 }},
|
{str8_lit_comp("backspace_single"), {WM_Key_Backspace, 0 }},
|
||||||
{str8_lit_comp("backspace_chunk"), {OS_Key_Backspace, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("backspace_chunk"), {WM_Key_Backspace, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("copy"), {OS_Key_C, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("copy"), {WM_Key_C, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("copy"), {OS_Key_Insert, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("copy"), {WM_Key_Insert, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("cut"), {OS_Key_X, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("cut"), {WM_Key_X, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("paste"), {OS_Key_V, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("paste"), {WM_Key_V, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("paste"), {OS_Key_Insert, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("paste"), {WM_Key_Insert, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("insert_text"), {OS_Key_Null, 0 }},
|
{str8_lit_comp("insert_text"), {WM_Key_Null, 0 }},
|
||||||
{str8_lit_comp("move_next"), {OS_Key_Tab, 0 }},
|
{str8_lit_comp("move_next"), {WM_Key_Tab, 0 }},
|
||||||
{str8_lit_comp("move_prev"), {OS_Key_Tab, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("move_prev"), {WM_Key_Tab, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("goto_line"), {OS_Key_G, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("goto_line"), {WM_Key_G, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("goto_address"), {OS_Key_G, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("goto_address"), {WM_Key_G, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("search"), {OS_Key_F, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("search"), {WM_Key_F, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("search_backwards"), {OS_Key_R, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("search_backwards"), {WM_Key_R, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("find_next"), {OS_Key_F3, 0 }},
|
{str8_lit_comp("find_next"), {WM_Key_F3, 0 }},
|
||||||
{str8_lit_comp("find_prev"), {OS_Key_F3, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("find_prev"), {WM_Key_F3, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("find_selected_thread"), {OS_Key_F4, 0 }},
|
{str8_lit_comp("find_selected_thread"), {WM_Key_F4, 0 }},
|
||||||
{str8_lit_comp("goto_name"), {OS_Key_J, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("goto_name"), {WM_Key_J, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("goto_name_at_cursor"), {OS_Key_F12, 0 }},
|
{str8_lit_comp("goto_name_at_cursor"), {WM_Key_F12, 0 }},
|
||||||
{str8_lit_comp("toggle_watch_expr_at_cursor"), {OS_Key_W, 0 |OS_Modifier_Alt}},
|
{str8_lit_comp("toggle_watch_expr_at_cursor"), {WM_Key_W, 0 |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("toggle_watch_expr_at_mouse"), {OS_Key_D, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("toggle_watch_expr_at_mouse"), {WM_Key_D, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("toggle_watch_pin"), {OS_Key_F9, 0 |OS_Modifier_Ctrl }},
|
{str8_lit_comp("toggle_watch_pin"), {WM_Key_F9, 0 |WM_Modifier_Ctrl }},
|
||||||
{str8_lit_comp("toggle_breakpoint"), {OS_Key_F9, 0 }},
|
{str8_lit_comp("toggle_breakpoint"), {WM_Key_F9, 0 }},
|
||||||
{str8_lit_comp("add_address_breakpoint"), {OS_Key_F9, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("add_address_breakpoint"), {WM_Key_F9, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("add_function_breakpoint"), {OS_Key_F9, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("add_function_breakpoint"), {WM_Key_F9, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("attach"), {OS_Key_F6, 0 |OS_Modifier_Shift }},
|
{str8_lit_comp("attach"), {WM_Key_F6, 0 |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("open_palette"), {OS_Key_F1, 0 }},
|
{str8_lit_comp("open_palette"), {WM_Key_F1, 0 }},
|
||||||
{str8_lit_comp("open_palette"), {OS_Key_P, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
{str8_lit_comp("open_palette"), {WM_Key_P, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift }},
|
||||||
{str8_lit_comp("log_marker"), {OS_Key_M, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("log_marker"), {WM_Key_M, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
{str8_lit_comp("toggle_dev_menu"), {OS_Key_D, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
|
{str8_lit_comp("toggle_dev_menu"), {WM_Key_D, 0 |WM_Modifier_Ctrl |WM_Modifier_Shift |WM_Modifier_Alt}},
|
||||||
};
|
};
|
||||||
|
|
||||||
String8 rd_binding_version_remap_old_name_table[8] =
|
String8 rd_binding_version_remap_old_name_table[8] =
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ RD_RegSlot_ActivateWithSingleClick,
|
|||||||
RD_RegSlot_Dir2,
|
RD_RegSlot_Dir2,
|
||||||
RD_RegSlot_String,
|
RD_RegSlot_String,
|
||||||
RD_RegSlot_CmdName,
|
RD_RegSlot_CmdName,
|
||||||
RD_RegSlot_OSEvent,
|
RD_RegSlot_WMEvent,
|
||||||
RD_RegSlot_COUNT,
|
RD_RegSlot_COUNT,
|
||||||
} RD_RegSlot;
|
} RD_RegSlot;
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ RD_CmdKind_Exit,
|
|||||||
RD_CmdKind_OpenPalette,
|
RD_CmdKind_OpenPalette,
|
||||||
RD_CmdKind_RunCommand,
|
RD_CmdKind_RunCommand,
|
||||||
RD_CmdKind_RunExternalDriverTextCommand,
|
RD_CmdKind_RunExternalDriverTextCommand,
|
||||||
RD_CmdKind_OSEvent,
|
RD_CmdKind_WMEvent,
|
||||||
RD_CmdKind_SelectThread,
|
RD_CmdKind_SelectThread,
|
||||||
RD_CmdKind_SelectUnwind,
|
RD_CmdKind_SelectUnwind,
|
||||||
RD_CmdKind_UpOneFrame,
|
RD_CmdKind_UpOneFrame,
|
||||||
@@ -498,7 +498,7 @@ B32 activate_with_single_click;
|
|||||||
Dir2 dir2;
|
Dir2 dir2;
|
||||||
String8 string;
|
String8 string;
|
||||||
String8 cmd_name;
|
String8 cmd_name;
|
||||||
OS_Event * os_event;
|
WM_Event * wm_event;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct RD_Query RD_Query;
|
typedef struct RD_Query RD_Query;
|
||||||
@@ -598,7 +598,7 @@ Z(getting_started)\
|
|||||||
.dir2 = rd_regs()->dir2,\
|
.dir2 = rd_regs()->dir2,\
|
||||||
.string = rd_regs()->string,\
|
.string = rd_regs()->string,\
|
||||||
.cmd_name = rd_regs()->cmd_name,\
|
.cmd_name = rd_regs()->cmd_name,\
|
||||||
.os_event = rd_regs()->os_event,\
|
.wm_event = rd_regs()->wm_event,\
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
extern String8 rd_tab_fast_path_view_name_table[25];
|
extern String8 rd_tab_fast_path_view_name_table[25];
|
||||||
|
|||||||
@@ -882,7 +882,7 @@ RD_RegTable:
|
|||||||
{B32 force_focus ForceFocus }
|
{B32 force_focus ForceFocus }
|
||||||
{B32 prefer_disasm PreferDisasm }
|
{B32 prefer_disasm PreferDisasm }
|
||||||
{B32 no_rich_tooltip NoRichTooltip }
|
{B32 no_rich_tooltip NoRichTooltip }
|
||||||
{B32 do_implicit_root DoImplicitRoot}
|
{B32 do_implicit_root DoImplicitRoot }
|
||||||
{B32 do_lister DoLister }
|
{B32 do_lister DoLister }
|
||||||
{B32 do_big_rows DoBigRows }
|
{B32 do_big_rows DoBigRows }
|
||||||
{B32 all_windows AllWindows }
|
{B32 all_windows AllWindows }
|
||||||
@@ -892,7 +892,7 @@ RD_RegTable:
|
|||||||
{Dir2 dir2 Dir2 }
|
{Dir2 dir2 Dir2 }
|
||||||
{String8 string String }
|
{String8 string String }
|
||||||
{String8 cmd_name CmdName }
|
{String8 cmd_name CmdName }
|
||||||
{`OS_Event *` os_event OSEvent }
|
{`WM_Event *` wm_event WMEvent }
|
||||||
}
|
}
|
||||||
|
|
||||||
@enum RD_RegSlot:
|
@enum RD_RegSlot:
|
||||||
@@ -945,7 +945,7 @@ RD_CmdTable: // | | | |
|
|||||||
{RunExternalDriverTextCommand 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 1 1 Null "run_ext_driver_text_command" "Run External Driver Text Command" "" "" "" }
|
{RunExternalDriverTextCommand 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 1 1 Null "run_ext_driver_text_command" "Run External Driver Text Command" "" "" "" }
|
||||||
|
|
||||||
//- rjf: os event passthrough
|
//- rjf: os event passthrough
|
||||||
{OSEvent 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "os_event" "OS Event" "" "" "" }
|
{WMEvent 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "wm_event" "OS Event" "" "" "" }
|
||||||
|
|
||||||
//- rjf: thread/frame selection
|
//- rjf: thread/frame selection
|
||||||
{SelectThread 1 1 0 0 "query:threads" Thread null Nil Thread 0 0 0 0 0 1 1 Thread "select_thread" "Select Thread" "Selects a thread." "" "" }
|
{SelectThread 1 1 0 0 "query:threads" Thread null Nil Thread 0 0 0 0 0 1 1 Thread "select_thread" "Select Thread" "Selects a thread." "" "" }
|
||||||
@@ -1437,7 +1437,7 @@ RD_DefaultBindingTable:
|
|||||||
|
|
||||||
@data(`struct {String8 string; CFG_Binding binding;}`) @c_file rd_default_binding_table:
|
@data(`struct {String8 string; CFG_Binding binding;}`) @c_file rd_default_binding_table:
|
||||||
{
|
{
|
||||||
@expand(RD_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {OS_Key_$(a.key), 0 $(a.ctrl != 0 -> `|OS_Modifier_Ctrl`) $(a.shift != 0 -> `|OS_Modifier_Shift`) $(a.alt != 0 -> `|OS_Modifier_Alt`)}}```;
|
@expand(RD_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {WM_Key_$(a.key), 0 $(a.ctrl != 0 -> `|WM_Modifier_Ctrl`) $(a.shift != 0 -> `|WM_Modifier_Shift`) $(a.alt != 0 -> `|WM_Modifier_Alt`)}}```;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|||||||
+146
-146
@@ -2625,7 +2625,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
// rjf: copy
|
// rjf: copy
|
||||||
if(op.flags & UI_TxtOpFlag_Copy && selection_tbl.min.x == selection_tbl.max.x && selection_tbl.min.y == selection_tbl.max.y)
|
if(op.flags & UI_TxtOpFlag_Copy && selection_tbl.min.x == selection_tbl.max.x && selection_tbl.min.y == selection_tbl.max.y)
|
||||||
{
|
{
|
||||||
os_set_clipboard_text(op.copy);
|
wm_set_clipboard_text(op.copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: any valid *additive* op & autocomplete hint? -> perform autocomplete first, then re-compute op
|
// rjf: any valid *additive* op & autocomplete hint? -> perform autocomplete first, then re-compute op
|
||||||
@@ -2776,7 +2776,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
String8 string = str8_list_join(scratch.arena, &strs, 0);
|
String8 string = str8_list_join(scratch.arena, &strs, 0);
|
||||||
os_set_clipboard_text(string);
|
wm_set_clipboard_text(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
@@ -3221,7 +3221,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
boundary_start_idx*row_height_px,
|
boundary_start_idx*row_height_px,
|
||||||
next_cell_x_px + ui_top_font_size()*0.4f,
|
next_cell_x_px + ui_top_font_size()*0.4f,
|
||||||
idx*row_height_px);
|
idx*row_height_px);
|
||||||
UI_Rect(rect) UI_HoverCursor(OS_Cursor_LeftRight)
|
UI_Rect(rect) UI_HoverCursor(WM_Cursor_LeftRight)
|
||||||
{
|
{
|
||||||
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_Floating, "boundary_%I64x_%I64x", row_hash, cell_id);
|
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_Floating, "boundary_%I64x_%I64x", row_hash, cell_id);
|
||||||
UI_Signal sig = ui_signal_from_box(box);
|
UI_Signal sig = ui_signal_from_box(box);
|
||||||
@@ -4381,7 +4381,7 @@ rd_view_ui(Rng2F32 rect)
|
|||||||
U64 value = e_value_from_string(loc.expr).u64;
|
U64 value = e_value_from_string(loc.expr).u64;
|
||||||
rd_cmd(RD_CmdKind_FindCodeLocation, .vaddr = value);
|
rd_cmd(RD_CmdKind_FindCodeLocation, .vaddr = value);
|
||||||
}
|
}
|
||||||
else if(str8_match(cfg->string, str8_lit("target"), 0) && sig.event_flags & OS_Modifier_Ctrl)
|
else if(str8_match(cfg->string, str8_lit("target"), 0) && sig.event_flags & WM_Modifier_Ctrl)
|
||||||
{
|
{
|
||||||
rd_cmd(RD_CmdKind_EnableCfg, .cfg = cfg->id);
|
rd_cmd(RD_CmdKind_EnableCfg, .cfg = cfg->id);
|
||||||
}
|
}
|
||||||
@@ -4937,7 +4937,7 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
|||||||
B32 has_pos = 0;
|
B32 has_pos = 0;
|
||||||
Vec2F32 pos = {0};
|
Vec2F32 pos = {0};
|
||||||
Vec2F32 size = {0};
|
Vec2F32 size = {0};
|
||||||
OS_Monitor preferred_monitor = {0};
|
WM_Monitor preferred_monitor = {0};
|
||||||
{
|
{
|
||||||
CFG_Node *pos_cfg = cfg_node_child_from_string(window_cfg, str8_lit("pos"));
|
CFG_Node *pos_cfg = cfg_node_child_from_string(window_cfg, str8_lit("pos"));
|
||||||
has_pos = (pos_cfg != &cfg_nil_node);
|
has_pos = (pos_cfg != &cfg_nil_node);
|
||||||
@@ -4947,10 +4947,10 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
|||||||
pos.y = (F32)f64_from_str8(pos_cfg->first->next->string);
|
pos.y = (F32)f64_from_str8(pos_cfg->first->next->string);
|
||||||
size.x = (F32)f64_from_str8(size_cfg->first->string);
|
size.x = (F32)f64_from_str8(size_cfg->first->string);
|
||||||
size.y = (F32)f64_from_str8(size_cfg->first->next->string);
|
size.y = (F32)f64_from_str8(size_cfg->first->next->string);
|
||||||
OS_MonitorArray monitors = os_push_monitors_array(scratch.arena);
|
WM_MonitorArray monitors = wm_push_monitors_array(scratch.arena);
|
||||||
for EachIndex(idx, monitors.count)
|
for EachIndex(idx, monitors.count)
|
||||||
{
|
{
|
||||||
String8 monitor_name = os_name_from_monitor(scratch.arena, monitors.v[idx]);
|
String8 monitor_name = wm_name_from_monitor(scratch.arena, monitors.v[idx]);
|
||||||
if(str8_match(monitor_name, monitor_cfg->first->string, StringMatchFlag_CaseInsensitive))
|
if(str8_match(monitor_name, monitor_cfg->first->string, StringMatchFlag_CaseInsensitive))
|
||||||
{
|
{
|
||||||
preferred_monitor = monitors.v[idx];
|
preferred_monitor = monitors.v[idx];
|
||||||
@@ -4976,7 +4976,7 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
|||||||
ws->arena = arena_alloc();
|
ws->arena = arena_alloc();
|
||||||
{
|
{
|
||||||
String8 title = rd_push_window_title(scratch.arena);
|
String8 title = rd_push_window_title(scratch.arena);
|
||||||
ws->os = os_window_open(r2f32p(pos.x, pos.y, pos.x+size.x, pos.y+size.y), (!has_pos*OS_WindowFlag_UseDefaultPosition)|OS_WindowFlag_CustomBorder, title);
|
ws->os = wm_window_open(r2f32p(pos.x, pos.y, pos.x+size.x, pos.y+size.y), (!has_pos*WM_WindowFlag_UseDefaultPosition)|WM_WindowFlag_CustomBorder, title);
|
||||||
}
|
}
|
||||||
ws->r = r_window_equip(ws->os);
|
ws->r = r_window_equip(ws->os);
|
||||||
ws->ui = ui_state_alloc();
|
ws->ui = ui_state_alloc();
|
||||||
@@ -4984,19 +4984,19 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
|||||||
ws->query_arena = arena_alloc();
|
ws->query_arena = arena_alloc();
|
||||||
ws->hover_eval_arena = arena_alloc();
|
ws->hover_eval_arena = arena_alloc();
|
||||||
ws->autocomp_arena = arena_alloc();
|
ws->autocomp_arena = arena_alloc();
|
||||||
ws->last_dpi = os_dpi_from_window(ws->os);
|
ws->last_dpi = wm_dpi_from_window(ws->os);
|
||||||
OS_Monitor zero_monitor = {0};
|
WM_Monitor zero_monitor = {0};
|
||||||
if(!os_monitor_match(zero_monitor, preferred_monitor))
|
if(!wm_monitor_match(zero_monitor, preferred_monitor))
|
||||||
{
|
{
|
||||||
os_window_set_monitor(ws->os, preferred_monitor);
|
wm_window_set_monitor(ws->os, preferred_monitor);
|
||||||
}
|
}
|
||||||
if(cfg_node_child_from_string(window_cfg, str8_lit("fullscreen")) != &cfg_nil_node)
|
if(cfg_node_child_from_string(window_cfg, str8_lit("fullscreen")) != &cfg_nil_node)
|
||||||
{
|
{
|
||||||
os_window_set_fullscreen(ws->os, 1);
|
wm_window_set_fullscreen(ws->os, 1);
|
||||||
}
|
}
|
||||||
if(cfg_node_child_from_string(window_cfg, str8_lit("maximized")) != &cfg_nil_node)
|
if(cfg_node_child_from_string(window_cfg, str8_lit("maximized")) != &cfg_nil_node)
|
||||||
{
|
{
|
||||||
os_window_set_maximized(ws->os, 1);
|
wm_window_set_maximized(ws->os, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: hook up window links
|
// rjf: hook up window links
|
||||||
@@ -5021,7 +5021,7 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal RD_WindowState *
|
internal RD_WindowState *
|
||||||
rd_window_state_from_os_handle(OS_Window os)
|
rd_window_state_from_os_handle(WM_Window os)
|
||||||
{
|
{
|
||||||
RD_WindowState *ws = &rd_nil_window_state;
|
RD_WindowState *ws = &rd_nil_window_state;
|
||||||
{
|
{
|
||||||
@@ -5029,7 +5029,7 @@ rd_window_state_from_os_handle(OS_Window os)
|
|||||||
w != &rd_nil_window_state;
|
w != &rd_nil_window_state;
|
||||||
w = w->order_next)
|
w = w->order_next)
|
||||||
{
|
{
|
||||||
if(os_window_match(w->os, os))
|
if(wm_window_match(w->os, os))
|
||||||
{
|
{
|
||||||
ws = w;
|
ws = w;
|
||||||
break;
|
break;
|
||||||
@@ -5055,7 +5055,7 @@ rd_window_frame(void)
|
|||||||
CFG_Node *window = cfg_node_from_id(rd_regs()->window);
|
CFG_Node *window = cfg_node_from_id(rd_regs()->window);
|
||||||
RD_WindowState *ws = rd_window_state_from_cfg(cfg_node_from_id(rd_regs()->window));
|
RD_WindowState *ws = rd_window_state_from_cfg(cfg_node_from_id(rd_regs()->window));
|
||||||
CFG_PanelTree panel_tree = cfg_panel_tree_from_cfg(scratch.arena, window);
|
CFG_PanelTree panel_tree = cfg_panel_tree_from_cfg(scratch.arena, window);
|
||||||
B32 window_is_focused = (os_window_is_focused(ws->os) || ws->window_temporarily_focused_ipc);
|
B32 window_is_focused = (wm_window_is_focused(ws->os) || ws->window_temporarily_focused_ipc);
|
||||||
B32 popup_is_open = (rd_state->popup_active);
|
B32 popup_is_open = (rd_state->popup_active);
|
||||||
B32 query_is_open = (ws->query_is_active);
|
B32 query_is_open = (ws->query_is_active);
|
||||||
U64 hover_eval_open_delay_us = 400000;
|
U64 hover_eval_open_delay_us = 400000;
|
||||||
@@ -5258,9 +5258,9 @@ rd_window_frame(void)
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
B32 is_fullscreen = os_window_is_fullscreen(ws->os);
|
B32 is_fullscreen = wm_window_is_fullscreen(ws->os);
|
||||||
B32 is_maximized = os_window_is_maximized(ws->os);
|
B32 is_maximized = wm_window_is_maximized(ws->os);
|
||||||
B32 is_minimized = os_window_is_minimized(ws->os);
|
B32 is_minimized = wm_window_is_minimized(ws->os);
|
||||||
if(is_fullscreen)
|
if(is_fullscreen)
|
||||||
{
|
{
|
||||||
cfg_node_child_from_string_or_alloc(rd_state->cfg, window, str8_lit("fullscreen"));
|
cfg_node_child_from_string_or_alloc(rd_state->cfg, window, str8_lit("fullscreen"));
|
||||||
@@ -5279,7 +5279,7 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: DPI changes -> xform font size / window size
|
//- rjf: DPI changes -> xform font size / window size
|
||||||
F32 dpi = os_dpi_from_window(ws->os);
|
F32 dpi = wm_dpi_from_window(ws->os);
|
||||||
if(dpi != ws->last_dpi)
|
if(dpi != ws->last_dpi)
|
||||||
{
|
{
|
||||||
fnt_reset();
|
fnt_reset();
|
||||||
@@ -5292,7 +5292,7 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: commit position
|
//- rjf: commit position
|
||||||
Rng2F32 window_rect = os_rect_from_window(ws->os);
|
Rng2F32 window_rect = wm_rect_from_window(ws->os);
|
||||||
if(!is_fullscreen && !is_maximized && !is_minimized)
|
if(!is_fullscreen && !is_maximized && !is_minimized)
|
||||||
{
|
{
|
||||||
Vec2F32 pos = window_rect.p0;
|
Vec2F32 pos = window_rect.p0;
|
||||||
@@ -5345,8 +5345,8 @@ rd_window_frame(void)
|
|||||||
//- rjf: commit monitor
|
//- rjf: commit monitor
|
||||||
if(!is_minimized)
|
if(!is_minimized)
|
||||||
{
|
{
|
||||||
OS_Monitor monitor = os_monitor_from_window(ws->os);
|
WM_Monitor monitor = wm_monitor_from_window(ws->os);
|
||||||
String8 monitor_name = os_name_from_monitor(scratch.arena, monitor);
|
String8 monitor_name = wm_name_from_monitor(scratch.arena, monitor);
|
||||||
CFG_Node *monitor_root = cfg_node_child_from_string_or_alloc(rd_state->cfg, window, str8_lit("monitor"));
|
CFG_Node *monitor_root = cfg_node_child_from_string_or_alloc(rd_state->cfg, window, str8_lit("monitor"));
|
||||||
if(!str8_match(monitor_root->first->string, monitor_name, 0))
|
if(!str8_match(monitor_root->first->string, monitor_name, 0))
|
||||||
{
|
{
|
||||||
@@ -5422,13 +5422,13 @@ rd_window_frame(void)
|
|||||||
////////////////////////////
|
////////////////////////////
|
||||||
//- rjf: @window_ui_part calculate top-level rectangles/sizes
|
//- rjf: @window_ui_part calculate top-level rectangles/sizes
|
||||||
//
|
//
|
||||||
Rng2F32 window_rect = os_client_rect_from_window(ws->os);
|
Rng2F32 window_rect = wm_client_rect_from_window(ws->os);
|
||||||
Vec2F32 window_rect_dim = dim_2f32(window_rect);
|
Vec2F32 window_rect_dim = dim_2f32(window_rect);
|
||||||
F32 top_bar_dim_px = floor_f32(ui_top_font_size()*3.f);
|
F32 top_bar_dim_px = floor_f32(ui_top_font_size()*3.f);
|
||||||
Rng2F32 top_bar_rect = r2f32p(window_rect.x0, window_rect.y0, window_rect.x0+window_rect_dim.x+1, window_rect.y0+top_bar_dim_px);
|
Rng2F32 top_bar_rect = r2f32p(window_rect.x0, window_rect.y0, window_rect.x0+window_rect_dim.x+1, window_rect.y0+top_bar_dim_px);
|
||||||
Rng2F32 bottom_bar_rect = r2f32p(window_rect.x0, window_rect_dim.y - top_bar_dim_px, window_rect.x0+window_rect_dim.x, window_rect.y0+window_rect_dim.y);
|
Rng2F32 bottom_bar_rect = r2f32p(window_rect.x0, window_rect_dim.y - top_bar_dim_px, window_rect.x0+window_rect_dim.x, window_rect.y0+window_rect_dim.y);
|
||||||
Rng2F32 content_rect = r2f32p(window_rect.x0, top_bar_rect.y1, window_rect.x0+window_rect_dim.x, bottom_bar_rect.y0);
|
Rng2F32 content_rect = r2f32p(window_rect.x0, top_bar_rect.y1, window_rect.x0+window_rect_dim.x, bottom_bar_rect.y0);
|
||||||
F32 window_edge_px = os_dpi_from_window(ws->os)*0.035f;
|
F32 window_edge_px = wm_dpi_from_window(ws->os)*0.035f;
|
||||||
content_rect = pad_2f32(content_rect, -window_edge_px);
|
content_rect = pad_2f32(content_rect, -window_edge_px);
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
@@ -6436,7 +6436,7 @@ rd_window_frame(void)
|
|||||||
if(t->force_inside_window_x || t->force_inside_window_y)
|
if(t->force_inside_window_x || t->force_inside_window_y)
|
||||||
{
|
{
|
||||||
B32 axis_mask[] = {t->force_inside_window_x, t->force_inside_window_y};
|
B32 axis_mask[] = {t->force_inside_window_x, t->force_inside_window_y};
|
||||||
Rng2F32 window_rect = os_client_rect_from_window(ws->os);
|
Rng2F32 window_rect = wm_client_rect_from_window(ws->os);
|
||||||
for EachEnumVal(Axis2, axis)
|
for EachEnumVal(Axis2, axis)
|
||||||
{
|
{
|
||||||
if(!axis_mask[axis]) { continue; }
|
if(!axis_mask[axis]) { continue; }
|
||||||
@@ -6497,7 +6497,7 @@ rd_window_frame(void)
|
|||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
{
|
{
|
||||||
if(evt->kind == UI_EventKind_Press &&
|
if(evt->kind == UI_EventKind_Press &&
|
||||||
evt->key == OS_Key_LeftMouseButton)
|
evt->key == WM_Key_LeftMouseButton)
|
||||||
{
|
{
|
||||||
if(contains_2f32(container->rect, evt->pos))
|
if(contains_2f32(container->rect, evt->pos))
|
||||||
{
|
{
|
||||||
@@ -6645,9 +6645,9 @@ rd_window_frame(void)
|
|||||||
//
|
//
|
||||||
ProfScope("build top bar")
|
ProfScope("build top bar")
|
||||||
{
|
{
|
||||||
os_window_clear_custom_border_data(ws->os);
|
wm_window_clear_custom_border_data(ws->os);
|
||||||
os_window_push_custom_edges(ws->os, window_edge_px);
|
wm_window_push_custom_edges(ws->os, window_edge_px);
|
||||||
os_window_push_custom_title_bar(ws->os, dim_2f32(top_bar_rect).y);
|
wm_window_push_custom_title_bar(ws->os, dim_2f32(top_bar_rect).y);
|
||||||
ui_set_next_flags(UI_BoxFlag_DefaultFocusNav|UI_BoxFlag_DisableFocusOverlay);
|
ui_set_next_flags(UI_BoxFlag_DefaultFocusNav|UI_BoxFlag_DisableFocusOverlay);
|
||||||
UI_Focus((ws->menu_bar_focused && window_is_focused && !ui_any_ctx_menu_is_open()) ? UI_FocusKind_On : UI_FocusKind_Null)
|
UI_Focus((ws->menu_bar_focused && window_is_focused && !ui_any_ctx_menu_is_open()) ? UI_FocusKind_On : UI_FocusKind_Null)
|
||||||
UI_TagF("menu_bar")
|
UI_TagF("menu_bar")
|
||||||
@@ -6911,7 +6911,7 @@ rd_window_frame(void)
|
|||||||
if(key_map_nodes.first != 0)
|
if(key_map_nodes.first != 0)
|
||||||
{
|
{
|
||||||
binding = key_map_nodes.first->v->binding;
|
binding = key_map_nodes.first->v->binding;
|
||||||
binding_str = os_string_from_modifiers_key(scratch.arena, binding.modifiers, binding.key);
|
binding_str = wm_string_from_modifiers_key(scratch.arena, binding.modifiers, binding.key);
|
||||||
}
|
}
|
||||||
UI_TagF(".")
|
UI_TagF(".")
|
||||||
UI_Row
|
UI_Row
|
||||||
@@ -6945,7 +6945,7 @@ rd_window_frame(void)
|
|||||||
UI_Signal sig = ui_button(str8_lit("Submit request, issue, or bug report"));
|
UI_Signal sig = ui_button(str8_lit("Submit request, issue, or bug report"));
|
||||||
if(ui_clicked(sig))
|
if(ui_clicked(sig))
|
||||||
{
|
{
|
||||||
os_open_in_browser(url);
|
wm_open_in_browser(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui_spacer(ui_em(0.5f, 1.f));
|
ui_spacer(ui_em(0.5f, 1.f));
|
||||||
@@ -6959,18 +6959,18 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
String8 name;
|
String8 name;
|
||||||
U32 codepoint;
|
U32 codepoint;
|
||||||
OS_Key key;
|
WM_Key key;
|
||||||
UI_Key menu_key;
|
UI_Key menu_key;
|
||||||
}
|
}
|
||||||
items[] =
|
items[] =
|
||||||
{
|
{
|
||||||
{str8_lit("File"), 'f', OS_Key_F, file_menu_key},
|
{str8_lit("File"), 'f', WM_Key_F, file_menu_key},
|
||||||
{str8_lit("Window"), 'w', OS_Key_W, window_menu_key},
|
{str8_lit("Window"), 'w', WM_Key_W, window_menu_key},
|
||||||
{str8_lit("Panel"), 'p', OS_Key_P, panel_menu_key},
|
{str8_lit("Panel"), 'p', WM_Key_P, panel_menu_key},
|
||||||
{str8_lit("Tab"), 'b', OS_Key_V, tab_menu_key},
|
{str8_lit("Tab"), 'b', WM_Key_V, tab_menu_key},
|
||||||
{str8_lit("Targets"), 't', OS_Key_T, targets_menu_key},
|
{str8_lit("Targets"), 't', WM_Key_T, targets_menu_key},
|
||||||
{str8_lit("Control"), 'c', OS_Key_C, ctrl_menu_key},
|
{str8_lit("Control"), 'c', WM_Key_C, ctrl_menu_key},
|
||||||
{str8_lit("Help"), 'h', OS_Key_H, help_menu_key},
|
{str8_lit("Help"), 'h', WM_Key_H, help_menu_key},
|
||||||
};
|
};
|
||||||
|
|
||||||
// rjf: determine if one of the menus is already open
|
// rjf: determine if one of the menus is already open
|
||||||
@@ -7016,7 +7016,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
ui_set_next_fastpath_codepoint(items[idx].codepoint);
|
ui_set_next_fastpath_codepoint(items[idx].codepoint);
|
||||||
B32 alt_fastpath_key = 0;
|
B32 alt_fastpath_key = 0;
|
||||||
if(rd_setting_b32_from_name(str8_lit("focus_menu_bar_with_alt")) && ui_key_press(OS_Modifier_Alt, items[idx].key))
|
if(rd_setting_b32_from_name(str8_lit("focus_menu_bar_with_alt")) && ui_key_press(WM_Modifier_Alt, items[idx].key))
|
||||||
{
|
{
|
||||||
alt_fastpath_key = 1;
|
alt_fastpath_key = 1;
|
||||||
}
|
}
|
||||||
@@ -7025,7 +7025,7 @@ rd_window_frame(void)
|
|||||||
ui_set_next_flags(UI_BoxFlag_DrawTextFastpathCodepoint);
|
ui_set_next_flags(UI_BoxFlag_DrawTextFastpathCodepoint);
|
||||||
}
|
}
|
||||||
UI_Signal sig = rd_menu_bar_button(items[idx].name);
|
UI_Signal sig = rd_menu_bar_button(items[idx].name);
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, sig.box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, sig.box->rect);
|
||||||
if(menu_open)
|
if(menu_open)
|
||||||
{
|
{
|
||||||
if((ui_hovering(sig) && !ui_ctx_menu_is_open(items[idx].menu_key)) || (open_menu_idx_prime == idx && open_menu_idx_prime != open_menu_idx))
|
if((ui_hovering(sig) && !ui_ctx_menu_is_open(items[idx].menu_key)) || (open_menu_idx_prime == idx && open_menu_idx_prime != open_menu_idx))
|
||||||
@@ -7086,7 +7086,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
String8 cmd_name = center_button_tasks[idx].cmd_name;
|
String8 cmd_name = center_button_tasks[idx].cmd_name;
|
||||||
UI_Signal sig = ui_button(rd_icon_kind_text_table[rd_icon_kind_from_code_name(cmd_name)]);
|
UI_Signal sig = ui_button(rd_icon_kind_text_table[rd_icon_kind_from_code_name(cmd_name)]);
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, sig.box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, sig.box->rect);
|
||||||
if(ui_hovering(sig))
|
if(ui_hovering(sig))
|
||||||
{
|
{
|
||||||
RD_RegsScope(.cmd_name = cmd_name, .ui_key = sig.box->key) rd_set_hover_regs(RD_RegSlot_CmdName);
|
RD_RegsScope(.cmd_name = cmd_name, .ui_key = sig.box->key) rd_set_hover_regs(RD_RegSlot_CmdName);
|
||||||
@@ -7119,7 +7119,7 @@ rd_window_frame(void)
|
|||||||
UI_BoxFlag_DrawHotEffects|
|
UI_BoxFlag_DrawHotEffects|
|
||||||
UI_BoxFlag_DrawActiveEffects,
|
UI_BoxFlag_DrawActiveEffects,
|
||||||
"###loaded_user_button");
|
"###loaded_user_button");
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, user_box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, user_box->rect);
|
||||||
UI_Parent(user_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center)
|
UI_Parent(user_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center)
|
||||||
{
|
{
|
||||||
String8 user_path = rd_state->user_path;
|
String8 user_path = rd_state->user_path;
|
||||||
@@ -7153,7 +7153,7 @@ rd_window_frame(void)
|
|||||||
UI_BoxFlag_DrawHotEffects|
|
UI_BoxFlag_DrawHotEffects|
|
||||||
UI_BoxFlag_DrawActiveEffects,
|
UI_BoxFlag_DrawActiveEffects,
|
||||||
"###loaded_project_button");
|
"###loaded_project_button");
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, prof_box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, prof_box->rect);
|
||||||
UI_Parent(prof_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center) UI_Padding(ui_em(0.5f, 1.f))
|
UI_Parent(prof_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center) UI_Padding(ui_em(0.5f, 1.f))
|
||||||
{
|
{
|
||||||
CFG_Node *root = cfg_node_root();
|
CFG_Node *root = cfg_node_root();
|
||||||
@@ -7207,7 +7207,7 @@ rd_window_frame(void)
|
|||||||
UI_FontSize(ui_top_font_size()*0.75f)
|
UI_FontSize(ui_top_font_size()*0.75f)
|
||||||
{
|
{
|
||||||
min_sig = rd_icon_buttonf(RD_IconKind_WindowMinimize, 0, "##minimize");
|
min_sig = rd_icon_buttonf(RD_IconKind_WindowMinimize, 0, "##minimize");
|
||||||
max_sig = rd_icon_buttonf(os_window_is_maximized(ws->os) ? RD_IconKind_WindowRestore : RD_IconKind_Window, 0, "##maximize");
|
max_sig = rd_icon_buttonf(wm_window_is_maximized(ws->os) ? RD_IconKind_WindowRestore : RD_IconKind_Window, 0, "##maximize");
|
||||||
}
|
}
|
||||||
UI_PrefWidth(ui_px(button_dim, 1.f))
|
UI_PrefWidth(ui_px(button_dim, 1.f))
|
||||||
UI_TagF("bad_pop")
|
UI_TagF("bad_pop")
|
||||||
@@ -7216,11 +7216,11 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
if(ui_clicked(min_sig))
|
if(ui_clicked(min_sig))
|
||||||
{
|
{
|
||||||
os_window_set_minimized(ws->os, 1);
|
wm_window_set_minimized(ws->os, 1);
|
||||||
}
|
}
|
||||||
if(ui_clicked(max_sig))
|
if(ui_clicked(max_sig))
|
||||||
{
|
{
|
||||||
os_window_set_maximized(ws->os, !os_window_is_maximized(ws->os));
|
wm_window_set_maximized(ws->os, !wm_window_is_maximized(ws->os));
|
||||||
}
|
}
|
||||||
if(ui_clicked(cls_sig))
|
if(ui_clicked(cls_sig))
|
||||||
{
|
{
|
||||||
@@ -7234,9 +7234,9 @@ rd_window_frame(void)
|
|||||||
rd_cmd(RD_CmdKind_Exit);
|
rd_cmd(RD_CmdKind_Exit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, min_sig.box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, min_sig.box->rect);
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, max_sig.box->rect);
|
wm_window_push_custom_title_bar_client_area(ws->os, max_sig.box->rect);
|
||||||
os_window_push_custom_title_bar_client_area(ws->os, pad_2f32(cls_sig.box->rect, 2.f));
|
wm_window_push_custom_title_bar_client_area(ws->os, pad_2f32(cls_sig.box->rect, 2.f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7629,7 +7629,7 @@ rd_window_frame(void)
|
|||||||
|
|
||||||
UI_Rect(boundary_rect)
|
UI_Rect(boundary_rect)
|
||||||
{
|
{
|
||||||
ui_set_next_hover_cursor(split_axis == Axis2_X ? OS_Cursor_LeftRight : OS_Cursor_UpDown);
|
ui_set_next_hover_cursor(split_axis == Axis2_X ? WM_Cursor_LeftRight : WM_Cursor_UpDown);
|
||||||
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###%p_%p", min_child->cfg, max_child->cfg);
|
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###%p_%p", min_child->cfg, max_child->cfg);
|
||||||
UI_Signal sig = ui_signal_from_box(box);
|
UI_Signal sig = ui_signal_from_box(box);
|
||||||
if(ui_double_clicked(sig))
|
if(ui_double_clicked(sig))
|
||||||
@@ -8569,7 +8569,7 @@ rd_window_frame(void)
|
|||||||
//
|
//
|
||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
{
|
{
|
||||||
if(evt->kind == UI_EventKind_Scroll && evt->modifiers == OS_Modifier_Ctrl)
|
if(evt->kind == UI_EventKind_Scroll && evt->modifiers == WM_Modifier_Ctrl)
|
||||||
{
|
{
|
||||||
ui_eat_event(evt);
|
ui_eat_event(evt);
|
||||||
if(evt->delta_2f32.y < 0)
|
if(evt->delta_2f32.y < 0)
|
||||||
@@ -8614,7 +8614,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
F32 box_squish_epsilon = 0.001f;
|
F32 box_squish_epsilon = 0.001f;
|
||||||
Rng2F32 window_rect = os_client_rect_from_window(ws->os);
|
Rng2F32 window_rect = wm_client_rect_from_window(ws->os);
|
||||||
|
|
||||||
//- rjf: unpack settings
|
//- rjf: unpack settings
|
||||||
F32 rounded_corner_amount = rd_setting_f32_from_name(str8_lit("rounded_corner_amount"));
|
F32 rounded_corner_amount = rd_setting_f32_from_name(str8_lit("rounded_corner_amount"));
|
||||||
@@ -8634,7 +8634,7 @@ rd_window_frame(void)
|
|||||||
U64 heatmap_bucket_count = 0;
|
U64 heatmap_bucket_count = 0;
|
||||||
if(DEV_draw_ui_box_heatmap)
|
if(DEV_draw_ui_box_heatmap)
|
||||||
{
|
{
|
||||||
Rng2F32 rect = os_client_rect_from_window(ws->os);
|
Rng2F32 rect = wm_client_rect_from_window(ws->os);
|
||||||
Vec2F32 size = dim_2f32(rect);
|
Vec2F32 size = dim_2f32(rect);
|
||||||
Vec2S32 buckets_dim = {(S32)(size.x/heatmap_bucket_size), (S32)(size.y/heatmap_bucket_size)};
|
Vec2S32 buckets_dim = {(S32)(size.x/heatmap_bucket_size), (S32)(size.y/heatmap_bucket_size)};
|
||||||
heatmap_bucket_pitch = buckets_dim.x;
|
heatmap_bucket_pitch = buckets_dim.x;
|
||||||
@@ -8644,12 +8644,12 @@ rd_window_frame(void)
|
|||||||
|
|
||||||
//- rjf: draw background color
|
//- rjf: draw background color
|
||||||
{
|
{
|
||||||
dr_rect(os_client_rect_from_window(ws->os), base_background_color, 0, 0, 0);
|
dr_rect(wm_client_rect_from_window(ws->os), base_background_color, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: draw window border
|
//- rjf: draw window border
|
||||||
{
|
{
|
||||||
dr_rect(os_client_rect_from_window(ws->os), base_border_color, 0, 1.f, border_softness*0.5f);
|
dr_rect(wm_client_rect_from_window(ws->os), base_border_color, 0, 1.f, border_softness*0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: recurse & draw
|
//- rjf: recurse & draw
|
||||||
@@ -9117,7 +9117,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
Vec4F32 color = ui_color_from_name(str8_lit("text"));
|
Vec4F32 color = ui_color_from_name(str8_lit("text"));
|
||||||
color.w *= ws->error_t;
|
color.w *= ws->error_t;
|
||||||
Rng2F32 rect = os_client_rect_from_window(ws->os);
|
Rng2F32 rect = wm_client_rect_from_window(ws->os);
|
||||||
dr_rect(pad_2f32(rect, 24.f), color, 0, 16.f, 12.f);
|
dr_rect(pad_2f32(rect, 24.f), color, 0, 16.f, 12.f);
|
||||||
dr_rect(rect, v4f32(color.x, color.y, color.z, color.w*0.025f), 0, 0, 0);
|
dr_rect(rect, v4f32(color.x, color.y, color.z, color.w*0.025f), 0, 0, 0);
|
||||||
}
|
}
|
||||||
@@ -9126,7 +9126,7 @@ rd_window_frame(void)
|
|||||||
if(rd_state->bind_change_active) UI_TagF("pop")
|
if(rd_state->bind_change_active) UI_TagF("pop")
|
||||||
{
|
{
|
||||||
Vec4F32 color = ui_color_from_name(str8_lit("background"));
|
Vec4F32 color = ui_color_from_name(str8_lit("background"));
|
||||||
Rng2F32 rect = os_client_rect_from_window(ws->os);
|
Rng2F32 rect = wm_client_rect_from_window(ws->os);
|
||||||
dr_rect(pad_2f32(rect, 24.f), color, 0, 16.f, 12.f);
|
dr_rect(pad_2f32(rect, 24.f), color, 0, 16.f, 12.f);
|
||||||
dr_rect(rect, v4f32(color.x, color.y, color.z, color.w*0.025f), 0, 0, 0);
|
dr_rect(rect, v4f32(color.x, color.y, color.z, color.w*0.025f), 0, 0, 0);
|
||||||
}
|
}
|
||||||
@@ -9138,7 +9138,7 @@ rd_window_frame(void)
|
|||||||
//- rjf: @window_frame_part update per-window frame counters/info
|
//- rjf: @window_frame_part update per-window frame counters/info
|
||||||
//
|
//
|
||||||
ws->frames_alive += 1;
|
ws->frames_alive += 1;
|
||||||
ws->last_window_rect = os_client_rect_from_window(ws->os);
|
ws->last_window_rect = wm_client_rect_from_window(ws->os);
|
||||||
|
|
||||||
ProfEnd();
|
ProfEnd();
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
@@ -10707,7 +10707,7 @@ rd_frame(void)
|
|||||||
B32 any_window_is_focused = 0;
|
B32 any_window_is_focused = 0;
|
||||||
for(RD_WindowState *w = rd_state->first_window_state; w != &rd_nil_window_state; w = w->order_next)
|
for(RD_WindowState *w = rd_state->first_window_state; w != &rd_nil_window_state; w = w->order_next)
|
||||||
{
|
{
|
||||||
if(os_window_is_focused(w->os))
|
if(wm_window_is_focused(w->os))
|
||||||
{
|
{
|
||||||
any_window_is_focused = 1;
|
any_window_is_focused = 1;
|
||||||
break;
|
break;
|
||||||
@@ -10757,10 +10757,10 @@ rd_frame(void)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: get events from the OS
|
//- rjf: get events from the OS
|
||||||
//
|
//
|
||||||
OS_EventList events = {0};
|
WM_EventList events = {0};
|
||||||
if(rd_state->frame_depth == 1)
|
if(rd_state->frame_depth == 1)
|
||||||
{
|
{
|
||||||
events = os_get_events(scratch.arena, rd_state->num_frames_requested == 0 && !DEV_always_refresh);
|
events = wm_get_events(scratch.arena, rd_state->num_frames_requested == 0 && !DEV_always_refresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@@ -10794,7 +10794,7 @@ rd_frame(void)
|
|||||||
//
|
//
|
||||||
// TODO(rjf): maximize target, given all windows and their monitors
|
// TODO(rjf): maximize target, given all windows and their monitors
|
||||||
//
|
//
|
||||||
F32 target_hz = os_get_gfx_info()->default_refresh_rate;
|
F32 target_hz = wm_get_system_info()->default_refresh_rate;
|
||||||
if(rd_state->frame_index > 32)
|
if(rd_state->frame_index > 32)
|
||||||
{
|
{
|
||||||
F32 possible_alternate_hz_targets[] = {target_hz, 60.f, 75.f, 120.f, 144.f, 165.f, 240.f, 360.f};
|
F32 possible_alternate_hz_targets[] = {target_hz, 60.f, 75.f, 120.f, 144.f, 165.f, 240.f, 360.f};
|
||||||
@@ -10847,30 +10847,30 @@ rd_frame(void)
|
|||||||
//
|
//
|
||||||
if(!rd_state->popup_active && rd_state->bind_change_active)
|
if(!rd_state->popup_active && rd_state->bind_change_active)
|
||||||
{
|
{
|
||||||
if(os_key_press(&events, os_window_zero(), 0, OS_Key_Esc))
|
if(wm_key_press(&events, wm_window_zero(), 0, WM_Key_Esc))
|
||||||
{
|
{
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
rd_state->bind_change_active = 0;
|
rd_state->bind_change_active = 0;
|
||||||
}
|
}
|
||||||
if(os_key_press(&events, os_window_zero(), 0, OS_Key_Delete))
|
if(wm_key_press(&events, wm_window_zero(), 0, WM_Key_Delete))
|
||||||
{
|
{
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
cfg_node_release(rd_state->cfg, cfg_node_from_id(rd_state->bind_change_binding_id));
|
cfg_node_release(rd_state->cfg, cfg_node_from_id(rd_state->bind_change_binding_id));
|
||||||
rd_state->bind_change_active = 0;
|
rd_state->bind_change_active = 0;
|
||||||
}
|
}
|
||||||
for(OS_Event *event = events.first, *next = 0; event != 0; event = next)
|
for(WM_Event *event = events.first, *next = 0; event != 0; event = next)
|
||||||
{
|
{
|
||||||
if(event->kind == OS_EventKind_Press &&
|
if(event->kind == WM_EventKind_Press &&
|
||||||
event->key != OS_Key_Esc &&
|
event->key != WM_Key_Esc &&
|
||||||
event->key != OS_Key_Return &&
|
event->key != WM_Key_Return &&
|
||||||
event->key != OS_Key_Backspace &&
|
event->key != WM_Key_Backspace &&
|
||||||
event->key != OS_Key_Delete &&
|
event->key != WM_Key_Delete &&
|
||||||
event->key != OS_Key_LeftMouseButton &&
|
event->key != WM_Key_LeftMouseButton &&
|
||||||
event->key != OS_Key_RightMouseButton &&
|
event->key != WM_Key_RightMouseButton &&
|
||||||
event->key != OS_Key_MiddleMouseButton &&
|
event->key != WM_Key_MiddleMouseButton &&
|
||||||
event->key != OS_Key_Ctrl &&
|
event->key != WM_Key_Ctrl &&
|
||||||
event->key != OS_Key_Alt &&
|
event->key != WM_Key_Alt &&
|
||||||
event->key != OS_Key_Shift)
|
event->key != WM_Key_Shift)
|
||||||
{
|
{
|
||||||
rd_state->bind_change_active = 0;
|
rd_state->bind_change_active = 0;
|
||||||
CFG_Node *binding = cfg_node_from_id(rd_state->bind_change_binding_id);
|
CFG_Node *binding = cfg_node_from_id(rd_state->bind_change_binding_id);
|
||||||
@@ -10882,13 +10882,13 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
cfg_node_release_all_children(rd_state->cfg, binding);
|
cfg_node_release_all_children(rd_state->cfg, binding);
|
||||||
cfg_node_new(rd_state->cfg, binding, rd_state->bind_change_cmd_name);
|
cfg_node_new(rd_state->cfg, binding, rd_state->bind_change_cmd_name);
|
||||||
cfg_node_new(rd_state->cfg, binding, os_g_key_cfg_string_table[event->key]);
|
cfg_node_new(rd_state->cfg, binding, wm_key_cfg_name_table[event->key]);
|
||||||
if(event->modifiers & OS_Modifier_Ctrl) { cfg_node_new(rd_state->cfg, binding, str8_lit("ctrl")); }
|
if(event->modifiers & WM_Modifier_Ctrl) { cfg_node_new(rd_state->cfg, binding, str8_lit("ctrl")); }
|
||||||
if(event->modifiers & OS_Modifier_Shift) { cfg_node_new(rd_state->cfg, binding, str8_lit("shift")); }
|
if(event->modifiers & WM_Modifier_Shift) { cfg_node_new(rd_state->cfg, binding, str8_lit("shift")); }
|
||||||
if(event->modifiers & OS_Modifier_Alt) { cfg_node_new(rd_state->cfg, binding, str8_lit("alt")); }
|
if(event->modifiers & WM_Modifier_Alt) { cfg_node_new(rd_state->cfg, binding, str8_lit("alt")); }
|
||||||
U32 codepoint = os_codepoint_from_modifiers_and_key(event->modifiers, event->key);
|
U32 codepoint = wm_codepoint_from_modifiers_and_key(event->modifiers, event->key);
|
||||||
os_text(&events, event->window, codepoint);
|
wm_text(&events, event->window, codepoint);
|
||||||
os_eat_event(&events, event);
|
wm_eat_event(&events, event);
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -10928,7 +10928,7 @@ rd_frame(void)
|
|||||||
//
|
//
|
||||||
ProfScope("consume events")
|
ProfScope("consume events")
|
||||||
{
|
{
|
||||||
for(OS_Event *event = events.first, *next = 0;
|
for(WM_Event *event = events.first, *next = 0;
|
||||||
event != 0;
|
event != 0;
|
||||||
event = next)
|
event = next)
|
||||||
RD_RegsScope()
|
RD_RegsScope()
|
||||||
@@ -10948,13 +10948,13 @@ rd_frame(void)
|
|||||||
B32 take = 0;
|
B32 take = 0;
|
||||||
|
|
||||||
//- rjf: try drag/drop drop-kickoff
|
//- rjf: try drag/drop drop-kickoff
|
||||||
if(rd_drag_is_active() && event->kind == OS_EventKind_Release && event->key == OS_Key_LeftMouseButton)
|
if(rd_drag_is_active() && event->kind == WM_EventKind_Release && event->key == WM_Key_LeftMouseButton)
|
||||||
{
|
{
|
||||||
rd_state->drag_drop_state = RD_DragDropState_Dropping;
|
rd_state->drag_drop_state = RD_DragDropState_Dropping;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: try window close
|
//- rjf: try window close
|
||||||
if(!take && event->kind == OS_EventKind_WindowClose && ws != 0)
|
if(!take && event->kind == WM_EventKind_WindowClose && ws != 0)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_cmd(RD_CmdKind_Exit);
|
rd_cmd(RD_CmdKind_Exit);
|
||||||
@@ -10963,7 +10963,7 @@ rd_frame(void)
|
|||||||
//- rjf: try menu bar operations
|
//- rjf: try menu bar operations
|
||||||
if(rd_state->alt_menu_bar_enabled)
|
if(rd_state->alt_menu_bar_enabled)
|
||||||
{
|
{
|
||||||
if(!take && event->kind == OS_EventKind_Press && event->key == OS_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
if(!take && event->kind == WM_EventKind_Press && event->key == WM_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
@@ -10971,26 +10971,26 @@ rd_frame(void)
|
|||||||
ws->menu_bar_key_held = 1;
|
ws->menu_bar_key_held = 1;
|
||||||
ws->menu_bar_focus_press_started = 1;
|
ws->menu_bar_focus_press_started = 1;
|
||||||
}
|
}
|
||||||
if(!take && event->kind == OS_EventKind_Release && event->key == OS_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
if(!take && event->kind == WM_EventKind_Release && event->key == WM_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
ws->menu_bar_key_held = 0;
|
ws->menu_bar_key_held = 0;
|
||||||
}
|
}
|
||||||
if(ws->menu_bar_focused && event->kind == OS_EventKind_Press && event->key == OS_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
if(ws->menu_bar_focused && event->kind == WM_EventKind_Press && event->key == WM_Key_Alt && event->modifiers == 0 && event->is_repeat == 0)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
ws->menu_bar_focused = 0;
|
ws->menu_bar_focused = 0;
|
||||||
}
|
}
|
||||||
else if(ws->menu_bar_focus_press_started && !ws->menu_bar_focused && event->kind == OS_EventKind_Release && event->modifiers == 0 && event->key == OS_Key_Alt && event->is_repeat == 0)
|
else if(ws->menu_bar_focus_press_started && !ws->menu_bar_focused && event->kind == WM_EventKind_Release && event->modifiers == 0 && event->key == WM_Key_Alt && event->is_repeat == 0)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
ws->menu_bar_focused = !ws->menu_bar_focused_on_press;
|
ws->menu_bar_focused = !ws->menu_bar_focused_on_press;
|
||||||
ws->menu_bar_focus_press_started = 0;
|
ws->menu_bar_focus_press_started = 0;
|
||||||
}
|
}
|
||||||
else if(event->kind == OS_EventKind_Press && event->key == OS_Key_Esc && ws->menu_bar_focused && !ui_any_ctx_menu_is_open())
|
else if(event->kind == WM_EventKind_Press && event->key == WM_Key_Esc && ws->menu_bar_focused && !ui_any_ctx_menu_is_open())
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
@@ -10999,13 +10999,13 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: try hotkey presses
|
//- rjf: try hotkey presses
|
||||||
if(!take && event->kind == OS_EventKind_Press)
|
if(!take && event->kind == WM_EventKind_Press)
|
||||||
{
|
{
|
||||||
CFG_Binding binding = {event->key, event->modifiers};
|
CFG_Binding binding = {event->key, event->modifiers};
|
||||||
CFG_KeyMapNodePtrList key_map_nodes = cfg_key_map_node_ptr_list_from_binding(scratch.arena, rd_state->key_map, binding);
|
CFG_KeyMapNodePtrList key_map_nodes = cfg_key_map_node_ptr_list_from_binding(scratch.arena, rd_state->key_map, binding);
|
||||||
if(key_map_nodes.first != 0)
|
if(key_map_nodes.first != 0)
|
||||||
{
|
{
|
||||||
U32 hit_char = os_codepoint_from_modifiers_and_key(event->modifiers, event->key);
|
U32 hit_char = wm_codepoint_from_modifiers_and_key(event->modifiers, event->key);
|
||||||
if(hit_char == 0 || allow_text_hotkeys)
|
if(hit_char == 0 || allow_text_hotkeys)
|
||||||
{
|
{
|
||||||
String8 cmd_name = key_map_nodes.first->v->name;
|
String8 cmd_name = key_map_nodes.first->v->name;
|
||||||
@@ -11019,17 +11019,17 @@ rd_frame(void)
|
|||||||
rd_cmd(RD_CmdKind_RunCommand, .cmd_name = cmd_name);
|
rd_cmd(RD_CmdKind_RunCommand, .cmd_name = cmd_name);
|
||||||
if(allow_text_hotkeys)
|
if(allow_text_hotkeys)
|
||||||
{
|
{
|
||||||
os_text(&events, event->window, hit_char);
|
wm_text(&events, event->window, hit_char);
|
||||||
next = event->next;
|
next = event->next;
|
||||||
}
|
}
|
||||||
take = 1;
|
take = 1;
|
||||||
if(event->modifiers & OS_Modifier_Alt)
|
if(event->modifiers & WM_Modifier_Alt)
|
||||||
{
|
{
|
||||||
ws->menu_bar_focus_press_started = 0;
|
ws->menu_bar_focus_press_started = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(OS_Key_F1 <= event->key && event->key <= OS_Key_F19)
|
else if(WM_Key_F1 <= event->key && event->key <= WM_Key_F19)
|
||||||
{
|
{
|
||||||
ws->menu_bar_focus_press_started = 0;
|
ws->menu_bar_focus_press_started = 0;
|
||||||
}
|
}
|
||||||
@@ -11037,14 +11037,14 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: try text events
|
//- rjf: try text events
|
||||||
if(!take && event->kind == OS_EventKind_Text)
|
if(!take && event->kind == WM_EventKind_Text)
|
||||||
{
|
{
|
||||||
String32 insertion32 = str32(&event->character, 1);
|
String32 insertion32 = str32(&event->character, 1);
|
||||||
String8 insertion8 = str8_from_32(scratch.arena, insertion32);
|
String8 insertion8 = str8_from_32(scratch.arena, insertion32);
|
||||||
rd_cmd(RD_CmdKind_InsertText, .string = insertion8);
|
rd_cmd(RD_CmdKind_InsertText, .string = insertion8);
|
||||||
rd_request_frame();
|
rd_request_frame();
|
||||||
take = 1;
|
take = 1;
|
||||||
if(event->modifiers & OS_Modifier_Alt)
|
if(event->modifiers & WM_Modifier_Alt)
|
||||||
{
|
{
|
||||||
ws->menu_bar_focus_press_started = 0;
|
ws->menu_bar_focus_press_started = 0;
|
||||||
}
|
}
|
||||||
@@ -11054,13 +11054,13 @@ rd_frame(void)
|
|||||||
if(!take)
|
if(!take)
|
||||||
{
|
{
|
||||||
take = 1;
|
take = 1;
|
||||||
rd_cmd(RD_CmdKind_OSEvent, .os_event = event);
|
rd_cmd(RD_CmdKind_WMEvent, .wm_event = event);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: take
|
//- rjf: take
|
||||||
if(take)
|
if(take)
|
||||||
{
|
{
|
||||||
os_eat_event(&events, event);
|
wm_eat_event(&events, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12146,7 +12146,7 @@ rd_frame(void)
|
|||||||
// rjf: run -> refocus pre-stop focused window
|
// rjf: run -> refocus pre-stop focused window
|
||||||
if(kind == RD_CmdKind_Run)
|
if(kind == RD_CmdKind_Run)
|
||||||
{
|
{
|
||||||
os_focus_external_window(rd_state->prestop_focused_window);
|
wm_focus_external_window(rd_state->prestop_focused_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: run -> no active targets, no processes, but we only have one target? -> just launch it, then select it
|
// rjf: run -> no active targets, no processes, but we only have one target? -> just launch it, then select it
|
||||||
@@ -12278,7 +12278,7 @@ rd_frame(void)
|
|||||||
{
|
{
|
||||||
current_path_string = path_normalized_from_string(scratch.arena, get_current_path(scratch.arena));
|
current_path_string = path_normalized_from_string(scratch.arena, get_current_path(scratch.arena));
|
||||||
}
|
}
|
||||||
String8 file_path = os_graphical_pick_file(scratch.arena, current_path_string);
|
String8 file_path = wm_graphical_pick_file(scratch.arena, current_path_string);
|
||||||
file_path = path_normalized_from_string(scratch.arena, file_path);
|
file_path = path_normalized_from_string(scratch.arena, file_path);
|
||||||
if(file_path.size != 0)
|
if(file_path.size != 0)
|
||||||
{
|
{
|
||||||
@@ -12418,7 +12418,7 @@ rd_frame(void)
|
|||||||
RD_WindowState *ws = rd_window_state_from_cfg(wcfg);
|
RD_WindowState *ws = rd_window_state_from_cfg(wcfg);
|
||||||
if(ws != &rd_nil_window_state)
|
if(ws != &rd_nil_window_state)
|
||||||
{
|
{
|
||||||
os_window_set_fullscreen(ws->os, !os_window_is_fullscreen(ws->os));
|
wm_window_set_fullscreen(ws->os, !wm_window_is_fullscreen(ws->os));
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_BringToFront:
|
case RD_CmdKind_BringToFront:
|
||||||
@@ -12431,8 +12431,8 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
if(last_focused_ws != &rd_nil_window_state)
|
if(last_focused_ws != &rd_nil_window_state)
|
||||||
{
|
{
|
||||||
os_window_set_minimized(last_focused_ws->os, 0);
|
wm_window_set_minimized(last_focused_ws->os, 0);
|
||||||
os_window_focus(last_focused_ws->os);
|
wm_window_focus(last_focused_ws->os);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
@@ -12468,10 +12468,10 @@ rd_frame(void)
|
|||||||
CFG_Binding binding = rd_default_binding_table[idx].binding;
|
CFG_Binding binding = rd_default_binding_table[idx].binding;
|
||||||
CFG_Node *binding_root = cfg_node_new(rd_state->cfg, keybindings, str8_zero());
|
CFG_Node *binding_root = cfg_node_new(rd_state->cfg, keybindings, str8_zero());
|
||||||
cfg_node_new(rd_state->cfg, binding_root, name);
|
cfg_node_new(rd_state->cfg, binding_root, name);
|
||||||
cfg_node_new(rd_state->cfg, binding_root, os_g_key_cfg_string_table[binding.key]);
|
cfg_node_new(rd_state->cfg, binding_root, wm_key_cfg_name_table[binding.key]);
|
||||||
if(binding.modifiers & OS_Modifier_Ctrl) {cfg_node_newf(rd_state->cfg, binding_root, "ctrl");}
|
if(binding.modifiers & WM_Modifier_Ctrl) {cfg_node_newf(rd_state->cfg, binding_root, "ctrl");}
|
||||||
if(binding.modifiers & OS_Modifier_Shift) {cfg_node_newf(rd_state->cfg, binding_root, "shift");}
|
if(binding.modifiers & WM_Modifier_Shift) {cfg_node_newf(rd_state->cfg, binding_root, "shift");}
|
||||||
if(binding.modifiers & OS_Modifier_Alt) {cfg_node_newf(rd_state->cfg, binding_root, "alt");}
|
if(binding.modifiers & WM_Modifier_Alt) {cfg_node_newf(rd_state->cfg, binding_root, "alt");}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
@@ -12583,10 +12583,10 @@ rd_frame(void)
|
|||||||
CFG_NodePtrList all_user_windows = cfg_node_child_list_from_string(scratch.arena, file_root, str8_lit("window"));
|
CFG_NodePtrList all_user_windows = cfg_node_child_list_from_string(scratch.arena, file_root, str8_lit("window"));
|
||||||
if(all_user_windows.count == 0)
|
if(all_user_windows.count == 0)
|
||||||
{
|
{
|
||||||
OS_Monitor monitor = os_primary_monitor();
|
WM_Monitor monitor = wm_primary_monitor();
|
||||||
String8 monitor_name = os_name_from_monitor(scratch.arena, monitor);
|
String8 monitor_name = wm_name_from_monitor(scratch.arena, monitor);
|
||||||
Vec2F32 monitor_dim = os_dim_from_monitor(monitor);
|
Vec2F32 monitor_dim = wm_dim_from_monitor(monitor);
|
||||||
F32 monitor_dpi = os_dpi_from_monitor(monitor);
|
F32 monitor_dpi = wm_dpi_from_monitor(monitor);
|
||||||
Vec2F32 window_dim = v2f32(monitor_dim.x*4/5, monitor_dim.y*4/5);
|
Vec2F32 window_dim = v2f32(monitor_dim.x*4/5, monitor_dim.y*4/5);
|
||||||
if(window_dim.x == 0 || window_dim.y == 0)
|
if(window_dim.x == 0 || window_dim.y == 0)
|
||||||
{
|
{
|
||||||
@@ -13546,7 +13546,7 @@ rd_frame(void)
|
|||||||
CFG_Node *tab = cfg_node_from_id(rd_regs()->tab);
|
CFG_Node *tab = cfg_node_from_id(rd_regs()->tab);
|
||||||
String8 expr = rd_expr_from_cfg(tab);
|
String8 expr = rd_expr_from_cfg(tab);
|
||||||
String8 full_path = rd_file_path_from_eval_string(scratch.arena, expr);
|
String8 full_path = rd_file_path_from_eval_string(scratch.arena, expr);
|
||||||
os_set_clipboard_text(full_path);
|
wm_set_clipboard_text(full_path);
|
||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_CloseTab:
|
case RD_CmdKind_CloseTab:
|
||||||
{
|
{
|
||||||
@@ -13720,7 +13720,7 @@ rd_frame(void)
|
|||||||
if(rd_regs()->file_path.size != 0)
|
if(rd_regs()->file_path.size != 0)
|
||||||
{
|
{
|
||||||
String8 full_path = rd_regs()->file_path;
|
String8 full_path = rd_regs()->file_path;
|
||||||
os_show_in_filesystem_ui(full_path);
|
wm_show_in_filesystem_ui(full_path);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: source <-> disasm
|
//- rjf: source <-> disasm
|
||||||
@@ -15580,34 +15580,34 @@ rd_frame(void)
|
|||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: os event passthrough
|
//- rjf: os event passthrough
|
||||||
case RD_CmdKind_OSEvent:
|
case RD_CmdKind_WMEvent:
|
||||||
{
|
{
|
||||||
OS_Event *os_event = rd_regs()->os_event;
|
WM_Event *wm_event = rd_regs()->wm_event;
|
||||||
RD_WindowState *ws = rd_window_state_from_os_handle(os_event->window);
|
RD_WindowState *ws = rd_window_state_from_os_handle(wm_event->window);
|
||||||
if(os_event != 0 && ws != &rd_nil_window_state)
|
if(wm_event != 0 && ws != &rd_nil_window_state)
|
||||||
{
|
{
|
||||||
UI_Event ui_event = zero_struct;
|
UI_Event ui_event = zero_struct;
|
||||||
UI_EventKind kind = UI_EventKind_Null;
|
UI_EventKind kind = UI_EventKind_Null;
|
||||||
{
|
{
|
||||||
switch(os_event->kind)
|
switch(wm_event->kind)
|
||||||
{
|
{
|
||||||
default:{}break;
|
default:{}break;
|
||||||
case OS_EventKind_Press: {kind = UI_EventKind_Press;}break;
|
case WM_EventKind_Press: {kind = UI_EventKind_Press;}break;
|
||||||
case OS_EventKind_Release: {kind = UI_EventKind_Release;}break;
|
case WM_EventKind_Release: {kind = UI_EventKind_Release;}break;
|
||||||
case OS_EventKind_MouseMove: {kind = UI_EventKind_MouseMove;}break;
|
case WM_EventKind_MouseMove: {kind = UI_EventKind_MouseMove;}break;
|
||||||
case OS_EventKind_Text: {kind = UI_EventKind_Text;}break;
|
case WM_EventKind_Text: {kind = UI_EventKind_Text;}break;
|
||||||
case OS_EventKind_Scroll: {kind = UI_EventKind_Scroll;}break;
|
case WM_EventKind_Scroll: {kind = UI_EventKind_Scroll;}break;
|
||||||
case OS_EventKind_FileDrop: {kind = UI_EventKind_FileDrop;}break;
|
case WM_EventKind_FileDrop: {kind = UI_EventKind_FileDrop;}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui_event.kind = kind;
|
ui_event.kind = kind;
|
||||||
ui_event.key = os_event->key;
|
ui_event.key = wm_event->key;
|
||||||
ui_event.modifiers = os_event->modifiers;
|
ui_event.modifiers = wm_event->modifiers;
|
||||||
ui_event.string = os_event->character ? str8_from_32(ui_build_arena(), str32(&os_event->character, 1)) : str8_zero();
|
ui_event.string = wm_event->character ? str8_from_32(ui_build_arena(), str32(&wm_event->character, 1)) : str8_zero();
|
||||||
ui_event.paths = str8_list_copy(ui_build_arena(), &os_event->strings);
|
ui_event.paths = str8_list_copy(ui_build_arena(), &wm_event->strings);
|
||||||
ui_event.pos = os_event->pos;
|
ui_event.pos = wm_event->pos;
|
||||||
ui_event.delta_2f32 = os_event->delta;
|
ui_event.delta_2f32 = wm_event->delta;
|
||||||
ui_event.timestamp_us = os_event->timestamp_us;
|
ui_event.timestamp_us = wm_event->timestamp_us;
|
||||||
ui_event_list_push(scratch.arena, &ws->ui_events, &ui_event);
|
ui_event_list_push(scratch.arena, &ws->ui_events, &ui_event);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@@ -16138,7 +16138,7 @@ rd_frame(void)
|
|||||||
UI_Event evt = zero_struct;
|
UI_Event evt = zero_struct;
|
||||||
evt.kind = UI_EventKind_Text;
|
evt.kind = UI_EventKind_Text;
|
||||||
evt.flags = UI_EventFlag_Paste;
|
evt.flags = UI_EventFlag_Paste;
|
||||||
evt.string = os_get_clipboard_text(scratch.arena);
|
evt.string = wm_get_clipboard_text(scratch.arena);
|
||||||
ui_event_list_push(scratch.arena, &ws->ui_events, &evt);
|
ui_event_list_push(scratch.arena, &ws->ui_events, &evt);
|
||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_InsertText:
|
case RD_CmdKind_InsertText:
|
||||||
@@ -16483,7 +16483,7 @@ rd_frame(void)
|
|||||||
B32 any_window_is_focused = 0;
|
B32 any_window_is_focused = 0;
|
||||||
for(RD_WindowState *ws = rd_state->first_window_state; ws != &rd_nil_window_state; ws = ws->order_next)
|
for(RD_WindowState *ws = rd_state->first_window_state; ws != &rd_nil_window_state; ws = ws->order_next)
|
||||||
{
|
{
|
||||||
if(os_window_is_focused(ws->os))
|
if(wm_window_is_focused(ws->os))
|
||||||
{
|
{
|
||||||
any_window_is_focused = 1;
|
any_window_is_focused = 1;
|
||||||
break;
|
break;
|
||||||
@@ -16499,10 +16499,10 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
if(ws != &rd_nil_window_state)
|
if(ws != &rd_nil_window_state)
|
||||||
{
|
{
|
||||||
rd_state->prestop_focused_window = os_focused_external_window();
|
rd_state->prestop_focused_window = wm_focused_external_window();
|
||||||
os_window_set_minimized(ws->os, 0);
|
wm_window_set_minimized(ws->os, 0);
|
||||||
os_window_bring_to_front(ws->os);
|
wm_window_bring_to_front(ws->os);
|
||||||
os_window_focus(ws->os);
|
wm_window_focus(ws->os);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16538,7 +16538,7 @@ rd_frame(void)
|
|||||||
{
|
{
|
||||||
for(RD_WindowState *ws = rd_state->first_window_state; ws != &rd_nil_window_state; ws = ws->order_next)
|
for(RD_WindowState *ws = rd_state->first_window_state; ws != &rd_nil_window_state; ws = ws->order_next)
|
||||||
{
|
{
|
||||||
os_window_set_title(ws->os, window_title);
|
wm_window_set_title(ws->os, window_title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rd_state->last_window_title = str8_copy(rd_frame_arena(), window_title);
|
rd_state->last_window_title = str8_copy(rd_frame_arena(), window_title);
|
||||||
@@ -16689,7 +16689,7 @@ rd_frame(void)
|
|||||||
{
|
{
|
||||||
CFG_Node *window = n->v;
|
CFG_Node *window = n->v;
|
||||||
RD_WindowState *w = rd_window_state_from_cfg(window);
|
RD_WindowState *w = rd_window_state_from_cfg(window);
|
||||||
B32 window_is_focused = os_window_is_focused(w->os);
|
B32 window_is_focused = wm_window_is_focused(w->os);
|
||||||
if(window_is_focused)
|
if(window_is_focused)
|
||||||
{
|
{
|
||||||
rd_state->last_focused_window = w->cfg_id;
|
rd_state->last_focused_window = w->cfg_id;
|
||||||
@@ -16720,7 +16720,7 @@ rd_frame(void)
|
|||||||
{
|
{
|
||||||
ui_state_release(ws->ui);
|
ui_state_release(ws->ui);
|
||||||
r_window_unequip(ws->os, ws->r);
|
r_window_unequip(ws->os, ws->r);
|
||||||
os_window_close(ws->os);
|
wm_window_close(ws->os);
|
||||||
arena_release(ws->drop_completion_arena);
|
arena_release(ws->drop_completion_arena);
|
||||||
arena_release(ws->query_arena);
|
arena_release(ws->query_arena);
|
||||||
arena_release(ws->hover_eval_arena);
|
arena_release(ws->hover_eval_arena);
|
||||||
@@ -16800,7 +16800,7 @@ rd_frame(void)
|
|||||||
{
|
{
|
||||||
CFG_Node *window = cfg_node_from_id(n->v);
|
CFG_Node *window = cfg_node_from_id(n->v);
|
||||||
RD_WindowState *ws = rd_window_state_from_cfg(window);
|
RD_WindowState *ws = rd_window_state_from_cfg(window);
|
||||||
os_window_first_paint(ws->os);
|
wm_window_first_paint(ws->os);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ struct RD_WindowState
|
|||||||
|
|
||||||
// rjf: top-level info & handles
|
// rjf: top-level info & handles
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
OS_Window os;
|
WM_Window os;
|
||||||
R_Handle r;
|
R_Handle r;
|
||||||
UI_State *ui;
|
UI_State *ui;
|
||||||
F32 last_dpi;
|
F32 last_dpi;
|
||||||
@@ -543,7 +543,7 @@ struct RD_State
|
|||||||
String8 bind_change_cmd_name;
|
String8 bind_change_cmd_name;
|
||||||
|
|
||||||
// rjf: pre-stop focused window
|
// rjf: pre-stop focused window
|
||||||
OS_ExternalWindow prestop_focused_window;
|
WM_ExtWindow prestop_focused_window;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -730,7 +730,7 @@ internal void rd_store_view_paramf(String8 key, char *fmt, ...);
|
|||||||
internal String8 rd_push_window_title(Arena *arena);
|
internal String8 rd_push_window_title(Arena *arena);
|
||||||
internal CFG_Node *rd_window_from_cfg(CFG_Node *cfg);
|
internal CFG_Node *rd_window_from_cfg(CFG_Node *cfg);
|
||||||
internal RD_WindowState *rd_window_state_from_cfg(CFG_Node *cfg);
|
internal RD_WindowState *rd_window_state_from_cfg(CFG_Node *cfg);
|
||||||
internal RD_WindowState *rd_window_state_from_os_handle(OS_Window os);
|
internal RD_WindowState *rd_window_state_from_os_handle(WM_Window os);
|
||||||
internal void rd_window_frame(void);
|
internal void rd_window_frame(void);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(commands)
|
|||||||
CFG_KeyMapNodePtrList bindings = cfg_key_map_node_ptr_list_from_name(scratch.arena, rd_state->key_map, code_name);
|
CFG_KeyMapNodePtrList bindings = cfg_key_map_node_ptr_list_from_name(scratch.arena, rd_state->key_map, code_name);
|
||||||
for(CFG_KeyMapNodePtr *n = bindings.first; n != 0; n = n->next)
|
for(CFG_KeyMapNodePtr *n = bindings.first; n != 0; n = n->next)
|
||||||
{
|
{
|
||||||
String8 binding_text = os_string_from_modifiers_key(scratch.arena, n->v->binding.modifiers, n->v->binding.key);
|
String8 binding_text = wm_string_from_modifiers_key(scratch.arena, n->v->binding.modifiers, n->v->binding.key);
|
||||||
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, binding_text);
|
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, binding_text);
|
||||||
if(matches.count == matches.needle_part_count)
|
if(matches.count == matches.needle_part_count)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -250,7 +250,7 @@
|
|||||||
|
|
||||||
#define DMN_INIT_MANUAL 1
|
#define DMN_INIT_MANUAL 1
|
||||||
#define D_INIT_MANUAL 1
|
#define D_INIT_MANUAL 1
|
||||||
#define OS_GFX_INIT_MANUAL 1
|
#define WM_INIT_MANUAL 1
|
||||||
#define FP_INIT_MANUAL 1
|
#define FP_INIT_MANUAL 1
|
||||||
#define R_INIT_MANUAL 1
|
#define R_INIT_MANUAL 1
|
||||||
#define FNT_INIT_MANUAL 1
|
#define FNT_INIT_MANUAL 1
|
||||||
@@ -430,7 +430,7 @@ ipc_signaler_thread__entry_point(void *p)
|
|||||||
cond_var_wait(ipc_s2m_ring_cv, ipc_s2m_ring_mutex, max_U64);
|
cond_var_wait(ipc_s2m_ring_cv, ipc_s2m_ring_mutex, max_U64);
|
||||||
}
|
}
|
||||||
cond_var_broadcast(ipc_s2m_ring_cv);
|
cond_var_broadcast(ipc_s2m_ring_cv);
|
||||||
os_send_wakeup_event();
|
wm_send_wakeup_event();
|
||||||
ipc_info->msg_size = 0;
|
ipc_info->msg_size = 0;
|
||||||
semaphore_drop(ipc_sender2main_lock_semaphore);
|
semaphore_drop(ipc_sender2main_lock_semaphore);
|
||||||
}
|
}
|
||||||
@@ -443,7 +443,7 @@ ipc_signaler_thread__entry_point(void *p)
|
|||||||
|
|
||||||
internal D_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl)
|
internal D_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl)
|
||||||
{
|
{
|
||||||
os_send_wakeup_event();
|
wm_send_wakeup_event();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -544,7 +544,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
{
|
{
|
||||||
dmn_init();
|
dmn_init();
|
||||||
d_init();
|
d_init();
|
||||||
os_gfx_init();
|
wm_init();
|
||||||
fp_init();
|
fp_init();
|
||||||
r_init(cmd_line);
|
r_init(cmd_line);
|
||||||
fnt_init();
|
fnt_init();
|
||||||
@@ -621,7 +621,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
RD_WindowState *dst_ws = rd_state->first_window_state;
|
RD_WindowState *dst_ws = rd_state->first_window_state;
|
||||||
for(RD_WindowState *ws = dst_ws; ws != &rd_nil_window_state; ws = ws->order_next)
|
for(RD_WindowState *ws = dst_ws; ws != &rd_nil_window_state; ws = ws->order_next)
|
||||||
{
|
{
|
||||||
if(os_window_is_focused(ws->os))
|
if(wm_window_is_focused(ws->os))
|
||||||
{
|
{
|
||||||
dst_ws = ws;
|
dst_ws = ws;
|
||||||
break;
|
break;
|
||||||
@@ -810,7 +810,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
//- rjf: help message box
|
//- rjf: help message box
|
||||||
case ExecMode_Help:
|
case ExecMode_Help:
|
||||||
{
|
{
|
||||||
os_graphical_message(0,
|
wm_graphical_message(0,
|
||||||
str8_lit("The RAD Debugger - Help"),
|
str8_lit("The RAD Debugger - Help"),
|
||||||
str8_lit("The following options may be used when starting the RAD Debugger from the command line:\n\n"
|
str8_lit("The following options may be used when starting the RAD Debugger from the command line:\n\n"
|
||||||
"--user:<path>\n"
|
"--user:<path>\n"
|
||||||
|
|||||||
@@ -641,7 +641,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: ctrl+pressed? -> go to name
|
//- rjf: ctrl+pressed? -> go to name
|
||||||
if(ui_pressed(sig.base) && sig.base.event_flags & OS_Modifier_Ctrl)
|
if(ui_pressed(sig.base) && sig.base.event_flags & WM_Modifier_Ctrl)
|
||||||
{
|
{
|
||||||
ui_kill_action();
|
ui_kill_action();
|
||||||
rd_cmd(RD_CmdKind_GoToName, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng));
|
rd_cmd(RD_CmdKind_GoToName, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng));
|
||||||
@@ -792,7 +792,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
|||||||
{
|
{
|
||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
{
|
{
|
||||||
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & OS_Modifier_Ctrl && evt->modifiers & OS_Modifier_Shift)
|
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & WM_Modifier_Ctrl && evt->modifiers & WM_Modifier_Shift)
|
||||||
{
|
{
|
||||||
ui_eat_event(evt);
|
ui_eat_event(evt);
|
||||||
if(evt->delta_2f32.y < 0)
|
if(evt->delta_2f32.y < 0)
|
||||||
@@ -2888,7 +2888,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
String8 data_textified = str8_list_join(scratch.arena, &data_textified_parts, 0);
|
String8 data_textified = str8_list_join(scratch.arena, &data_textified_parts, 0);
|
||||||
os_set_clipboard_text(data_textified);
|
wm_set_clipboard_text(data_textified);
|
||||||
}
|
}
|
||||||
good_action = 1;
|
good_action = 1;
|
||||||
}
|
}
|
||||||
@@ -4089,7 +4089,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
|||||||
{
|
{
|
||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
{
|
{
|
||||||
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & OS_Modifier_Ctrl)
|
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & WM_Modifier_Ctrl)
|
||||||
{
|
{
|
||||||
ui_eat_event(evt);
|
ui_eat_event(evt);
|
||||||
if(evt->delta_2f32.y < 0)
|
if(evt->delta_2f32.y < 0)
|
||||||
|
|||||||
+15
-15
@@ -783,9 +783,9 @@ rd_cmd_binding_buttons(String8 name, String8 filter, B32 add_new)
|
|||||||
//- rjf: form binding string
|
//- rjf: form binding string
|
||||||
String8 keybinding_str = {0};
|
String8 keybinding_str = {0};
|
||||||
{
|
{
|
||||||
if(binding.key != OS_Key_Null)
|
if(binding.key != WM_Key_Null)
|
||||||
{
|
{
|
||||||
keybinding_str = os_string_from_modifiers_key(scratch.arena, binding.modifiers, binding.key);
|
keybinding_str = wm_string_from_modifiers_key(scratch.arena, binding.modifiers, binding.key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -820,7 +820,7 @@ rd_cmd_binding_buttons(String8 name, String8 filter, B32 add_new)
|
|||||||
// rjf: click => toggle activity
|
// rjf: click => toggle activity
|
||||||
if(!rd_state->bind_change_active && ui_clicked(sig))
|
if(!rd_state->bind_change_active && ui_clicked(sig))
|
||||||
{
|
{
|
||||||
if((binding.key == OS_Key_Esc || binding.key == OS_Key_Delete) && binding.modifiers == 0)
|
if((binding.key == WM_Key_Esc || binding.key == WM_Key_Delete) && binding.modifiers == 0)
|
||||||
{
|
{
|
||||||
log_user_error(str8_lit("Cannot rebind; this command uses a reserved keybinding."));
|
log_user_error(str8_lit("Cannot rebind; this command uses a reserved keybinding."));
|
||||||
}
|
}
|
||||||
@@ -1262,7 +1262,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
D_Event stop_event = d_ctrl_last_stop_event();
|
D_Event stop_event = d_ctrl_last_stop_event();
|
||||||
D_Entity *stopper_thread = d_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity);
|
D_Entity *stopper_thread = d_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity);
|
||||||
B32 is_focused = ui_is_focus_active();
|
B32 is_focused = ui_is_focus_active();
|
||||||
B32 ctrlified = (os_get_modifiers() & OS_Modifier_Ctrl);
|
B32 ctrlified = (wm_get_modifiers() & WM_Modifier_Ctrl);
|
||||||
Vec4F32 code_line_bgs[] =
|
Vec4F32 code_line_bgs[] =
|
||||||
{
|
{
|
||||||
ui_color_from_name(str8_lit("line_info_0")),
|
ui_color_from_name(str8_lit("line_info_0")),
|
||||||
@@ -1406,7 +1406,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
line_num += 1, line_idx += 1)
|
line_num += 1, line_idx += 1)
|
||||||
{
|
{
|
||||||
D_EntityList line_ips = params->line_ips[line_idx];
|
D_EntityList line_ips = params->line_ips[line_idx];
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num);
|
UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num);
|
||||||
UI_Parent(line_margin_box)
|
UI_Parent(line_margin_box)
|
||||||
{
|
{
|
||||||
@@ -1455,7 +1455,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: build thread box
|
// rjf: build thread box
|
||||||
ui_set_next_hover_cursor(OS_Cursor_UpDownLeftRight);
|
ui_set_next_hover_cursor(WM_Cursor_UpDownLeftRight);
|
||||||
ui_set_next_font(rd_font_from_slot(RD_FontSlot_Icons));
|
ui_set_next_font(rd_font_from_slot(RD_FontSlot_Icons));
|
||||||
ui_set_next_font_size(params->font_size);
|
ui_set_next_font_size(params->font_size);
|
||||||
ui_set_next_text_raster_flags(FNT_RasterFlag_Smooth);
|
ui_set_next_text_raster_flags(FNT_RasterFlag_Smooth);
|
||||||
@@ -1561,7 +1561,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
D_EntityList line_ips = params->line_ips[line_idx];
|
D_EntityList line_ips = params->line_ips[line_idx];
|
||||||
CFG_NodePtrList line_bps = params->line_bps[line_idx];
|
CFG_NodePtrList line_bps = params->line_bps[line_idx];
|
||||||
CFG_NodePtrList line_pins = params->line_pins[line_idx];
|
CFG_NodePtrList line_pins = params->line_pins[line_idx];
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
ui_set_next_background_color(v4f32(0, 0, 0, 0));
|
ui_set_next_background_color(v4f32(0, 0, 0, 0));
|
||||||
UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num);
|
UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num);
|
||||||
UI_Parent(line_margin_box)
|
UI_Parent(line_margin_box)
|
||||||
@@ -1611,7 +1611,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: build thread box
|
// rjf: build thread box
|
||||||
ui_set_next_hover_cursor(OS_Cursor_UpDownLeftRight);
|
ui_set_next_hover_cursor(WM_Cursor_UpDownLeftRight);
|
||||||
ui_set_next_font(rd_font_from_slot(RD_FontSlot_Icons));
|
ui_set_next_font(rd_font_from_slot(RD_FontSlot_Icons));
|
||||||
ui_set_next_font_size(params->font_size);
|
ui_set_next_font_size(params->font_size);
|
||||||
ui_set_next_text_raster_flags(FNT_RasterFlag_Smooth);
|
ui_set_next_text_raster_flags(FNT_RasterFlag_Smooth);
|
||||||
@@ -1760,7 +1760,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: shift+click => enable breakpoint
|
// rjf: shift+click => enable breakpoint
|
||||||
if(ui_clicked(bp_sig) && bp_sig.event_flags & OS_Modifier_Shift)
|
if(ui_clicked(bp_sig) && bp_sig.event_flags & WM_Modifier_Shift)
|
||||||
{
|
{
|
||||||
rd_cmd(bp_is_disabled ? RD_CmdKind_EnableCfg : RD_CmdKind_DisableCfg, .cfg = bp->id);
|
rd_cmd(bp_is_disabled ? RD_CmdKind_EnableCfg : RD_CmdKind_DisableCfg, .cfg = bp->id);
|
||||||
}
|
}
|
||||||
@@ -1914,7 +1914,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
UI_Box *text_container_box = &ui_nil_box;
|
UI_Box *text_container_box = &ui_nil_box;
|
||||||
UI_Parent(top_container_box) UI_Focus(UI_FocusKind_Off)
|
UI_Parent(top_container_box) UI_Focus(UI_FocusKind_Off)
|
||||||
{
|
{
|
||||||
ui_set_next_hover_cursor(ctrlified ? OS_Cursor_HandPoint : OS_Cursor_IBar);
|
ui_set_next_hover_cursor(ctrlified ? WM_Cursor_HandPoint : WM_Cursor_IBar);
|
||||||
ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f));
|
ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f));
|
||||||
text_container_box = ui_build_box_from_string(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable), str8_lit("text_container"));
|
text_container_box = ui_build_box_from_string(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable), str8_lit("text_container"));
|
||||||
}
|
}
|
||||||
@@ -3049,7 +3049,7 @@ rd_do_txt_controls(TXT_TextInfo *info, String8 data, U64 line_count_per_page, Tx
|
|||||||
if(evt->flags & UI_EventFlag_Copy)
|
if(evt->flags & UI_EventFlag_Copy)
|
||||||
{
|
{
|
||||||
String8 text = txt_string_from_info_data_txt_rng(info, data, txt_rng(*cursor, *mark));
|
String8 text = txt_string_from_info_data_txt_rng(info, data, txt_rng(*cursor, *mark));
|
||||||
os_set_clipboard_text(text);
|
wm_set_clipboard_text(text);
|
||||||
taken = 1;
|
taken = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3447,7 +3447,7 @@ rd_cell(RD_CellParams *params, String8 string)
|
|||||||
//
|
//
|
||||||
if(is_focus_active || is_focus_active_disabled)
|
if(is_focus_active || is_focus_active_disabled)
|
||||||
{
|
{
|
||||||
ui_set_next_hover_cursor(OS_Cursor_IBar);
|
ui_set_next_hover_cursor(WM_Cursor_IBar);
|
||||||
}
|
}
|
||||||
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_MouseClickable|
|
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_MouseClickable|
|
||||||
(!!build_lhs_name_desc*UI_BoxFlag_DisableFocusBorder)|
|
(!!build_lhs_name_desc*UI_BoxFlag_DisableFocusBorder)|
|
||||||
@@ -3807,7 +3807,7 @@ rd_cell(RD_CellParams *params, String8 string)
|
|||||||
{
|
{
|
||||||
F32 extratoggler_padding_px = floor_f32(ui_top_font_size()*0.35f);
|
F32 extratoggler_padding_px = floor_f32(ui_top_font_size()*0.35f);
|
||||||
F32 toggler_size_px = ceil_f32(height_px - extratoggler_padding_px*2.f) - 1.f;
|
F32 toggler_size_px = ceil_f32(height_px - extratoggler_padding_px*2.f) - 1.f;
|
||||||
ui_set_next_hover_cursor(OS_Cursor_LeftRight);
|
ui_set_next_hover_cursor(WM_Cursor_LeftRight);
|
||||||
UI_Box *slider_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackground|UI_BoxFlag_Clickable, "slider");
|
UI_Box *slider_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackground|UI_BoxFlag_Clickable, "slider");
|
||||||
UI_Parent(slider_box) UI_TagF("pop")
|
UI_Parent(slider_box) UI_TagF("pop")
|
||||||
{
|
{
|
||||||
@@ -3883,7 +3883,7 @@ rd_cell(RD_CellParams *params, String8 string)
|
|||||||
{
|
{
|
||||||
if(evt->flags & UI_EventFlag_Copy)
|
if(evt->flags & UI_EventFlag_Copy)
|
||||||
{
|
{
|
||||||
os_set_clipboard_text(params->pre_edit_value);
|
wm_set_clipboard_text(params->pre_edit_value);
|
||||||
}
|
}
|
||||||
if(evt->flags & UI_EventFlag_Delete)
|
if(evt->flags & UI_EventFlag_Delete)
|
||||||
{
|
{
|
||||||
@@ -4003,7 +4003,7 @@ rd_cell(RD_CellParams *params, String8 string)
|
|||||||
// rjf: perform copy
|
// rjf: perform copy
|
||||||
if(op.flags & UI_TxtOpFlag_Copy)
|
if(op.flags & UI_TxtOpFlag_Copy)
|
||||||
{
|
{
|
||||||
os_set_clipboard_text(op.copy);
|
wm_set_clipboard_text(op.copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: commit op's changed cursor & mark to caller-provided state
|
// rjf: commit op's changed cursor & mark to caller-provided state
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ r_init(CmdLine *cmdln)
|
|||||||
{
|
{
|
||||||
char buffer[256] = {0};
|
char buffer[256] = {0};
|
||||||
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 device creation failure (%lx). The process is terminating.", error);
|
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 device creation failure (%lx). The process is terminating.", error);
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
ProfEnd();
|
ProfEnd();
|
||||||
@@ -370,7 +370,7 @@ r_init(CmdLine *cmdln)
|
|||||||
{
|
{
|
||||||
errors = str8((U8 *)vshad_source_errors->lpVtbl->GetBufferPointer(vshad_source_errors),
|
errors = str8((U8 *)vshad_source_errors->lpVtbl->GetBufferPointer(vshad_source_errors),
|
||||||
(U64)vshad_source_errors->lpVtbl->GetBufferSize(vshad_source_errors));
|
(U64)vshad_source_errors->lpVtbl->GetBufferSize(vshad_source_errors));
|
||||||
os_graphical_message(1, str8_lit("Vertex Shader Compilation Failure"), errors);
|
wm_graphical_message(1, str8_lit("Vertex Shader Compilation Failure"), errors);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -425,7 +425,7 @@ r_init(CmdLine *cmdln)
|
|||||||
{
|
{
|
||||||
errors = str8((U8 *)pshad_source_errors->lpVtbl->GetBufferPointer(pshad_source_errors),
|
errors = str8((U8 *)pshad_source_errors->lpVtbl->GetBufferPointer(pshad_source_errors),
|
||||||
(U64)pshad_source_errors->lpVtbl->GetBufferSize(pshad_source_errors));
|
(U64)pshad_source_errors->lpVtbl->GetBufferSize(pshad_source_errors));
|
||||||
os_graphical_message(1, str8_lit("Pixel Shader Compilation Failure"), errors);
|
wm_graphical_message(1, str8_lit("Pixel Shader Compilation Failure"), errors);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -483,7 +483,7 @@ r_init(CmdLine *cmdln)
|
|||||||
//- rjf: window setup/teardown
|
//- rjf: window setup/teardown
|
||||||
|
|
||||||
r_hook R_Handle
|
r_hook R_Handle
|
||||||
r_window_equip(OS_Window handle)
|
r_window_equip(WM_Window handle)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
R_Handle result = {0};
|
R_Handle result = {0};
|
||||||
@@ -509,8 +509,8 @@ r_window_equip(OS_Window handle)
|
|||||||
//- rjf: map os window handle -> hwnd
|
//- rjf: map os window handle -> hwnd
|
||||||
HWND hwnd = {0};
|
HWND hwnd = {0};
|
||||||
{
|
{
|
||||||
OS_W32_Window *w32_layer_window = os_w32_window_from_handle(handle);
|
W32_WM_Window *w32_layer_window = w32_wm_window_from_handle(handle);
|
||||||
hwnd = os_w32_hwnd_from_window(w32_layer_window);
|
hwnd = w32_wm_hwnd_from_window(w32_layer_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: create swapchain
|
//- rjf: create swapchain
|
||||||
@@ -534,7 +534,7 @@ r_window_equip(OS_Window handle)
|
|||||||
{
|
{
|
||||||
char buffer[256] = {0};
|
char buffer[256] = {0};
|
||||||
raddbg_snprintf(buffer, sizeof(buffer), "DXGI swap chain creation failure (%lx). The process is terminating.", error);
|
raddbg_snprintf(buffer, sizeof(buffer), "DXGI swap chain creation failure (%lx). The process is terminating.", error);
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,7 +556,7 @@ r_window_equip(OS_Window handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_unequip(OS_Window handle, R_Handle equip_handle)
|
r_window_unequip(WM_Window handle, R_Handle equip_handle)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
||||||
@@ -861,7 +861,7 @@ r_end_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_begin_frame(OS_Window window, R_Handle window_equip)
|
r_window_begin_frame(WM_Window window, R_Handle window_equip)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
||||||
@@ -870,7 +870,7 @@ r_window_begin_frame(OS_Window window, R_Handle window_equip)
|
|||||||
ID3D11DeviceContext1 *d_ctx = r_d3d11_state->device_ctx;
|
ID3D11DeviceContext1 *d_ctx = r_d3d11_state->device_ctx;
|
||||||
|
|
||||||
//- rjf: get resolution
|
//- rjf: get resolution
|
||||||
Rng2F32 client_rect = os_client_rect_from_window(window);
|
Rng2F32 client_rect = wm_client_rect_from_window(window);
|
||||||
Vec2S32 resolution = {(S32)(client_rect.x1 - client_rect.x0), (S32)(client_rect.y1 - client_rect.y0)};
|
Vec2S32 resolution = {(S32)(client_rect.x1 - client_rect.x0), (S32)(client_rect.y1 - client_rect.y0)};
|
||||||
|
|
||||||
//- rjf: resolution change
|
//- rjf: resolution change
|
||||||
@@ -993,7 +993,7 @@ r_window_begin_frame(OS_Window window, R_Handle window_equip)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_end_frame(OS_Window window, R_Handle window_equip)
|
r_window_end_frame(WM_Window window, R_Handle window_equip)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
||||||
@@ -1052,7 +1052,7 @@ r_window_end_frame(OS_Window window, R_Handle window_equip)
|
|||||||
{
|
{
|
||||||
char buffer[256] = {0};
|
char buffer[256] = {0};
|
||||||
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 present failure (%lx). The process is terminating.", error);
|
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 present failure (%lx). The process is terminating.", error);
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
d_ctx->lpVtbl->ClearState(d_ctx);
|
d_ctx->lpVtbl->ClearState(d_ctx);
|
||||||
@@ -1063,7 +1063,7 @@ r_window_end_frame(OS_Window window, R_Handle window_equip)
|
|||||||
//- rjf: render pass submission
|
//- rjf: render pass submission
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_submit(OS_Window window, R_Handle window_equip, R_PassList *passes)
|
r_window_submit(WM_Window window, R_Handle window_equip, R_PassList *passes)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
MutexScopeW(r_d3d11_state->device_rw_mutex)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
r_ogl_lnx_state->display = eglGetDisplay((EGLNativeDisplayType)os_lnx_gfx_state->display);
|
r_ogl_lnx_state->display = eglGetDisplay((EGLNativeDisplayType)os_lnx_gfx_state->display);
|
||||||
if(r_ogl_lnx_state->display == EGL_NO_DISPLAY)
|
if(r_ogl_lnx_state->display == EGL_NO_DISPLAY)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Failed to get EGL display."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Failed to get EGL display."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,14 +33,14 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
EGLint egl_version_minor = 0;
|
EGLint egl_version_minor = 0;
|
||||||
if(!eglInitialize(r_ogl_lnx_state->display, &egl_version_major, &egl_version_minor))
|
if(!eglInitialize(r_ogl_lnx_state->display, &egl_version_major, &egl_version_minor))
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL display."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL display."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
if(egl_version_major < 1 || (egl_version_major == 1 && egl_version_minor < 5))
|
if(egl_version_major < 1 || (egl_version_major == 1 && egl_version_minor < 5))
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
String8 message = push_str8f(scratch.arena, "Unsupported EGL version (%i.%i, need at least 1.5)", egl_version_major, egl_version_minor);
|
String8 message = push_str8f(scratch.arena, "Unsupported EGL version (%i.%i, need at least 1.5)", egl_version_major, egl_version_minor);
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), message);
|
wm_graphical_message(1, str8_lit("Fatal Error"), message);
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
//- rjf: pick GL API
|
//- rjf: pick GL API
|
||||||
if(!eglBindAPI(EGL_OPENGL_API))
|
if(!eglBindAPI(EGL_OPENGL_API))
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL API to OpenGL."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL API to OpenGL."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
r_ogl_lnx_state->context = eglCreateContext(r_ogl_lnx_state->display, 0, EGL_NO_CONTEXT, options);
|
r_ogl_lnx_state->context = eglCreateContext(r_ogl_lnx_state->display, 0, EGL_NO_CONTEXT, options);
|
||||||
if(r_ogl_lnx_state->context == EGL_NO_CONTEXT)
|
if(r_ogl_lnx_state->context == EGL_NO_CONTEXT)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create OpenGL context with EGL."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create OpenGL context with EGL."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,9 +79,9 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal R_Handle
|
internal R_Handle
|
||||||
r_ogl_os_window_equip(OS_Window window)
|
r_ogl_os_window_equip(WM_Window window)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *window_os = (OS_LNX_Window *)window.u64[0];
|
LNX_WM_Window *window_os = (LNX_WM_Window *)window.u64[0];
|
||||||
R_OGL_LNX_Window *w = r_ogl_lnx_state->free_window;
|
R_OGL_LNX_Window *w = r_ogl_lnx_state->free_window;
|
||||||
if(w != 0)
|
if(w != 0)
|
||||||
{
|
{
|
||||||
@@ -120,7 +120,7 @@ r_ogl_os_window_equip(OS_Window window)
|
|||||||
};
|
};
|
||||||
if(!eglChooseConfig(r_ogl_lnx_state->display, options, configs, ArrayCount(configs), &configs_count) || configs_count == 0)
|
if(!eglChooseConfig(r_ogl_lnx_state->display, options, configs, ArrayCount(configs), &configs_count) || configs_count == 0)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't choose EGL configuration."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't choose EGL configuration."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,7 @@ r_ogl_os_window_equip(OS_Window window)
|
|||||||
}
|
}
|
||||||
if(r_ogl_lnx_state->config == 0)
|
if(r_ogl_lnx_state->config == 0)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't find a suitable EGL configuration."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't find a suitable EGL configuration."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ r_ogl_os_window_equip(OS_Window window)
|
|||||||
}
|
}
|
||||||
if(w->surface == EGL_NO_SURFACE)
|
if(w->surface == EGL_NO_SURFACE)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create EGL surface."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create EGL surface."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,7 +163,7 @@ r_ogl_os_window_equip(OS_Window window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_unequip(OS_Window os, R_Handle r)
|
r_ogl_os_window_unequip(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
R_OGL_LNX_Window *w = (R_OGL_LNX_Window *)r.u64[0];
|
R_OGL_LNX_Window *w = (R_OGL_LNX_Window *)r.u64[0];
|
||||||
{
|
{
|
||||||
@@ -173,17 +173,17 @@ r_ogl_os_window_unequip(OS_Window os, R_Handle r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_select_window(OS_Window os, R_Handle r)
|
r_ogl_os_select_window(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)os.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)os.u64[0];
|
||||||
R_OGL_LNX_Window *w_r = (R_OGL_LNX_Window *)r.u64[0];
|
R_OGL_LNX_Window *w_r = (R_OGL_LNX_Window *)r.u64[0];
|
||||||
eglMakeCurrent(r_ogl_lnx_state->display, w_r->surface, w_r->surface, r_ogl_lnx_state->context);
|
eglMakeCurrent(r_ogl_lnx_state->display, w_r->surface, w_r->surface, r_ogl_lnx_state->context);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_swap(OS_Window os, R_Handle r)
|
r_ogl_os_window_swap(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)os.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)os.u64[0];
|
||||||
R_OGL_LNX_Window *w_r = (R_OGL_LNX_Window *)r.u64[0];
|
R_OGL_LNX_Window *w_r = (R_OGL_LNX_Window *)r.u64[0];
|
||||||
eglSwapBuffers(r_ogl_lnx_state->display, w_r->surface);
|
eglSwapBuffers(r_ogl_lnx_state->display, w_r->surface);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
String8 message = push_str8f(scratch.arena, "Unsupported GLX version (%i.%i, need at least 1.3)", glx_version_major, glx_version_minor);
|
String8 message = push_str8f(scratch.arena, "Unsupported GLX version (%i.%i, need at least 1.3)", glx_version_major, glx_version_minor);
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), message);
|
wm_graphical_message(1, str8_lit("Fatal Error"), message);
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
GLXFBConfig *framebuffer_configs = glXChooseFBConfig(os_lnx_gfx_state->display, DefaultScreen(os_lnx_gfx_state->display), framebuffer_config_options, &framebuffer_configs_count);
|
GLXFBConfig *framebuffer_configs = glXChooseFBConfig(os_lnx_gfx_state->display, DefaultScreen(os_lnx_gfx_state->display), framebuffer_config_options, &framebuffer_configs_count);
|
||||||
if(framebuffer_configs == 0)
|
if(framebuffer_configs == 0)
|
||||||
{
|
{
|
||||||
os_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Could not find a suitable framebuffer configuration."));
|
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Could not find a suitable framebuffer configuration."));
|
||||||
abort_self(1);
|
abort_self(1);
|
||||||
}
|
}
|
||||||
GLXFBConfig framebuffer_config = framebuffer_configs[0];
|
GLXFBConfig framebuffer_config = framebuffer_configs[0];
|
||||||
@@ -79,28 +79,28 @@ r_ogl_os_init(CmdLine *cmdln)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal R_Handle
|
internal R_Handle
|
||||||
r_ogl_os_window_equip(OS_Window window)
|
r_ogl_os_window_equip(WM_Window window)
|
||||||
{
|
{
|
||||||
R_Handle result = {0};
|
R_Handle result = {0};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_unequip(OS_Window os, R_Handle r)
|
r_ogl_os_window_unequip(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_select_window(OS_Window os, R_Handle r)
|
r_ogl_os_select_window(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)os.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)os.u64[0];
|
||||||
glXMakeCurrent(os_lnx_gfx_state->display, w->window, r_ogl_lnx_ctx);
|
glXMakeCurrent(os_lnx_gfx_state->display, w->window, r_ogl_lnx_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_swap(OS_Window os, R_Handle r)
|
r_ogl_os_window_swap(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_LNX_Window *w = (OS_LNX_Window *)os.u64[0];
|
LNX_WM_Window *w = (LNX_WM_Window *)os.u64[0];
|
||||||
glXSwapBuffers(os_lnx_gfx_state->display, w->window);
|
glXSwapBuffers(os_lnx_gfx_state->display, w->window);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,14 +201,14 @@ r_init(CmdLine *cmdln)
|
|||||||
//- rjf: window setup/teardown
|
//- rjf: window setup/teardown
|
||||||
|
|
||||||
r_hook R_Handle
|
r_hook R_Handle
|
||||||
r_window_equip(OS_Window window)
|
r_window_equip(WM_Window window)
|
||||||
{
|
{
|
||||||
R_Handle result = r_ogl_os_window_equip(window);
|
R_Handle result = r_ogl_os_window_equip(window);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_unequip(OS_Window window, R_Handle window_equip)
|
r_window_unequip(WM_Window window, R_Handle window_equip)
|
||||||
{
|
{
|
||||||
r_ogl_os_window_unequip(window, window_equip);
|
r_ogl_os_window_unequip(window, window_equip);
|
||||||
}
|
}
|
||||||
@@ -341,12 +341,12 @@ r_end_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_begin_frame(OS_Window os, R_Handle r)
|
r_window_begin_frame(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
r_ogl_os_select_window(os, r);
|
r_ogl_os_select_window(os, r);
|
||||||
|
|
||||||
//- rjf: unpack window viewport info
|
//- rjf: unpack window viewport info
|
||||||
Rng2F32 client_rect = os_client_rect_from_window(os);
|
Rng2F32 client_rect = wm_client_rect_from_window(os);
|
||||||
Vec2F32 client_rect_dim = dim_2f32(client_rect);
|
Vec2F32 client_rect_dim = dim_2f32(client_rect);
|
||||||
|
|
||||||
//- rjf: clear and reset state
|
//- rjf: clear and reset state
|
||||||
@@ -358,7 +358,7 @@ r_window_begin_frame(OS_Window os, R_Handle r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_end_frame(OS_Window os, R_Handle r)
|
r_window_end_frame(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
for(R_OGL_FlushBuffer *flush_buffer = r_ogl_state->first_buffer_to_flush; flush_buffer != 0; flush_buffer = flush_buffer->next)
|
for(R_OGL_FlushBuffer *flush_buffer = r_ogl_state->first_buffer_to_flush; flush_buffer != 0; flush_buffer = flush_buffer->next)
|
||||||
{
|
{
|
||||||
@@ -372,9 +372,9 @@ r_window_end_frame(OS_Window os, R_Handle r)
|
|||||||
//- rjf: render pass submission
|
//- rjf: render pass submission
|
||||||
|
|
||||||
r_hook void
|
r_hook void
|
||||||
r_window_submit(OS_Window window, R_Handle window_equip, R_PassList *passes)
|
r_window_submit(WM_Window window, R_Handle window_equip, R_PassList *passes)
|
||||||
{
|
{
|
||||||
Rng2F32 viewport_rect = os_client_rect_from_window(window);
|
Rng2F32 viewport_rect = wm_client_rect_from_window(window);
|
||||||
Vec2F32 viewport_dim = dim_2f32(viewport_rect);
|
Vec2F32 viewport_dim = dim_2f32(viewport_rect);
|
||||||
for(R_PassNode *pass_n = passes->first; pass_n != 0; pass_n = pass_n->next)
|
for(R_PassNode *pass_n = passes->first; pass_n != 0; pass_n = pass_n->next)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -224,9 +224,9 @@ internal void r_ogl_debug_message_callback(GLenum source, GLenum type, GLuint id
|
|||||||
|
|
||||||
internal VoidProc *r_ogl_os_load_procedure(char *name);
|
internal VoidProc *r_ogl_os_load_procedure(char *name);
|
||||||
internal void r_ogl_os_init(CmdLine *cmdln);
|
internal void r_ogl_os_init(CmdLine *cmdln);
|
||||||
internal R_Handle r_ogl_os_window_equip(OS_Window window);
|
internal R_Handle r_ogl_os_window_equip(WM_Window window);
|
||||||
internal void r_ogl_os_window_unequip(OS_Window os, R_Handle r);
|
internal void r_ogl_os_window_unequip(WM_Window os, R_Handle r);
|
||||||
internal void r_ogl_os_select_window(OS_Window os, R_Handle r);
|
internal void r_ogl_os_select_window(WM_Window os, R_Handle r);
|
||||||
internal void r_ogl_os_window_swap(OS_Window os, R_Handle r);
|
internal void r_ogl_os_window_swap(WM_Window os, R_Handle r);
|
||||||
|
|
||||||
#endif // RENDER_OPENGL_H
|
#endif // RENDER_OPENGL_H
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ r_ogl_os_init(CmdLine *cmdline)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal R_Handle
|
internal R_Handle
|
||||||
r_ogl_os_window_equip(OS_Window window)
|
r_ogl_os_window_equip(WM_Window window)
|
||||||
{
|
{
|
||||||
//- rjf: unpack window
|
//- rjf: unpack window
|
||||||
OS_W32_Window *w = os_w32_window_from_handle(window);
|
W32_WM_Window *w = w32_wm_window_from_handle(window);
|
||||||
HWND hwnd = w->hwnd;
|
HWND hwnd = w->hwnd;
|
||||||
HDC hdc = w->hdc;
|
HDC hdc = w->hdc;
|
||||||
|
|
||||||
@@ -155,14 +155,14 @@ r_ogl_os_window_equip(OS_Window window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_unequip(OS_Window os, R_Handle r)
|
r_ogl_os_window_unequip(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_select_window(OS_Window os, R_Handle r)
|
r_ogl_os_select_window(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_W32_Window *w = os_w32_window_from_handle(os);
|
W32_WM_Window *w = w32_wm_window_from_handle(os);
|
||||||
if(w != 0)
|
if(w != 0)
|
||||||
{
|
{
|
||||||
HWND hwnd = w->hwnd;
|
HWND hwnd = w->hwnd;
|
||||||
@@ -172,9 +172,9 @@ r_ogl_os_select_window(OS_Window os, R_Handle r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
r_ogl_os_window_swap(OS_Window os, R_Handle r)
|
r_ogl_os_window_swap(WM_Window os, R_Handle r)
|
||||||
{
|
{
|
||||||
OS_W32_Window *w = os_w32_window_from_handle(os);
|
W32_WM_Window *w = w32_wm_window_from_handle(os);
|
||||||
if(w != 0)
|
if(w != 0)
|
||||||
{
|
{
|
||||||
HDC dc = w->hdc;
|
HDC dc = w->hdc;
|
||||||
|
|||||||
@@ -281,8 +281,8 @@ internal R_Pass *r_pass_from_kind(Arena *arena, R_PassList *list, R_PassKind kin
|
|||||||
r_hook void r_init(CmdLine *cmdln);
|
r_hook void r_init(CmdLine *cmdln);
|
||||||
|
|
||||||
//- rjf: window setup/teardown
|
//- rjf: window setup/teardown
|
||||||
r_hook R_Handle r_window_equip(OS_Window window);
|
r_hook R_Handle r_window_equip(WM_Window window);
|
||||||
r_hook void r_window_unequip(OS_Window window, R_Handle window_equip);
|
r_hook void r_window_unequip(WM_Window window, R_Handle window_equip);
|
||||||
|
|
||||||
//- rjf: textures
|
//- rjf: textures
|
||||||
r_hook R_Handle r_tex2d_alloc(R_ResourceKind kind, Vec2S32 size, R_Tex2DFormat format, void *data);
|
r_hook R_Handle r_tex2d_alloc(R_ResourceKind kind, Vec2S32 size, R_Tex2DFormat format, void *data);
|
||||||
@@ -299,10 +299,10 @@ r_hook void r_buffer_release(R_Handle buffer);
|
|||||||
//- rjf: frame markers
|
//- rjf: frame markers
|
||||||
r_hook void r_begin_frame(void);
|
r_hook void r_begin_frame(void);
|
||||||
r_hook void r_end_frame(void);
|
r_hook void r_end_frame(void);
|
||||||
r_hook void r_window_begin_frame(OS_Window window, R_Handle window_equip);
|
r_hook void r_window_begin_frame(WM_Window window, R_Handle window_equip);
|
||||||
r_hook void r_window_end_frame(OS_Window window, R_Handle window_equip);
|
r_hook void r_window_end_frame(WM_Window window, R_Handle window_equip);
|
||||||
|
|
||||||
//- rjf: render pass submission
|
//- rjf: render pass submission
|
||||||
r_hook void r_window_submit(OS_Window window, R_Handle window_equip, R_PassList *passes);
|
r_hook void r_window_submit(WM_Window window, R_Handle window_equip, R_PassList *passes);
|
||||||
|
|
||||||
#endif // RENDER_CORE_H
|
#endif // RENDER_CORE_H
|
||||||
|
|||||||
@@ -39,10 +39,10 @@ frame(void)
|
|||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
B32 quit = 0;
|
B32 quit = 0;
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
OS_EventList events = os_get_events(scratch.arena, 0);
|
WM_EventList events = wm_get_events(scratch.arena, 0);
|
||||||
for(OS_Event *evt = events.first; evt != 0; evt = evt->next)
|
for(WM_Event *evt = events.first; evt != 0; evt = evt->next)
|
||||||
{
|
{
|
||||||
if(evt->kind == OS_EventKind_WindowClose)
|
if(evt->kind == WM_EventKind_WindowClose)
|
||||||
{
|
{
|
||||||
quit = 1;
|
quit = 1;
|
||||||
break;
|
break;
|
||||||
@@ -54,7 +54,7 @@ frame(void)
|
|||||||
DR_Bucket *bucket = dr_bucket_make();
|
DR_Bucket *bucket = dr_bucket_make();
|
||||||
DR_BucketScope(bucket) ProfScope("draw")
|
DR_BucketScope(bucket) ProfScope("draw")
|
||||||
{
|
{
|
||||||
Vec2F32 mouse = os_mouse_from_window(os_window);
|
Vec2F32 mouse = wm_mouse_from_window(os_window);
|
||||||
FNT_Tag font = fnt_tag_from_path(str8_lit("C:/devel/raddebugger/data/Inconsolata-Regular.ttf"));
|
FNT_Tag font = fnt_tag_from_path(str8_lit("C:/devel/raddebugger/data/Inconsolata-Regular.ttf"));
|
||||||
for(F32 x = 0; x < 500; x += 5.f)
|
for(F32 x = 0; x < 500; x += 5.f)
|
||||||
{
|
{
|
||||||
@@ -75,8 +75,8 @@ frame(void)
|
|||||||
internal void
|
internal void
|
||||||
entry_point(CmdLine *cmdline)
|
entry_point(CmdLine *cmdline)
|
||||||
{
|
{
|
||||||
os_window = os_window_open(r2f32p(0, 0, 1600, 900), OS_WindowFlag_UseDefaultPosition, str8_lit("textperf"));
|
os_window = wm_window_open(r2f32p(0, 0, 1600, 900), WM_WindowFlag_UseDefaultPosition, str8_lit("textperf"));
|
||||||
r_window = r_window_equip(os_window);
|
r_window = r_window_equip(os_window);
|
||||||
os_window_first_paint(os_window);
|
wm_window_first_paint(os_window);
|
||||||
for(;!update(););
|
for(;!update(););
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
#define OS_FEATURE_GRAPHICAL 1
|
#define OS_FEATURE_GRAPHICAL 1
|
||||||
#define DMN_INIT_MANUAL 1
|
#define DMN_INIT_MANUAL 1
|
||||||
#define D_INIT_MANUAL 1
|
#define D_INIT_MANUAL 1
|
||||||
#define OS_GFX_INIT_MANUAL 1
|
#define WM_INIT_MANUAL 1
|
||||||
#define FP_INIT_MANUAL 1
|
#define FP_INIT_MANUAL 1
|
||||||
#define R_INIT_MANUAL 1
|
#define R_INIT_MANUAL 1
|
||||||
#define FNT_INIT_MANUAL 1
|
#define FNT_INIT_MANUAL 1
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ internal Vec4F32 ui_top_background_color(void) { UI_StackTopImpl(ui_state, Backg
|
|||||||
internal Vec4F32 ui_top_text_color(void) { UI_StackTopImpl(ui_state, TextColor, text_color) }
|
internal Vec4F32 ui_top_text_color(void) { UI_StackTopImpl(ui_state, TextColor, text_color) }
|
||||||
internal Vec4F32 ui_top_border_color(void) { UI_StackTopImpl(ui_state, BorderColor, border_color) }
|
internal Vec4F32 ui_top_border_color(void) { UI_StackTopImpl(ui_state, BorderColor, border_color) }
|
||||||
internal F32 ui_top_squish(void) { UI_StackTopImpl(ui_state, Squish, squish) }
|
internal F32 ui_top_squish(void) { UI_StackTopImpl(ui_state, Squish, squish) }
|
||||||
internal OS_Cursor ui_top_hover_cursor(void) { UI_StackTopImpl(ui_state, HoverCursor, hover_cursor) }
|
internal WM_Cursor ui_top_hover_cursor(void) { UI_StackTopImpl(ui_state, HoverCursor, hover_cursor) }
|
||||||
internal FNT_Tag ui_top_font(void) { UI_StackTopImpl(ui_state, Font, font) }
|
internal FNT_Tag ui_top_font(void) { UI_StackTopImpl(ui_state, Font, font) }
|
||||||
internal F32 ui_top_font_size(void) { UI_StackTopImpl(ui_state, FontSize, font_size) }
|
internal F32 ui_top_font_size(void) { UI_StackTopImpl(ui_state, FontSize, font_size) }
|
||||||
internal FNT_RasterFlags ui_top_text_raster_flags(void) { UI_StackTopImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
internal FNT_RasterFlags ui_top_text_raster_flags(void) { UI_StackTopImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
||||||
@@ -96,7 +96,7 @@ internal Vec4F32 ui_bottom_background_color(void) { UI_StackBottomImpl(ui_state,
|
|||||||
internal Vec4F32 ui_bottom_text_color(void) { UI_StackBottomImpl(ui_state, TextColor, text_color) }
|
internal Vec4F32 ui_bottom_text_color(void) { UI_StackBottomImpl(ui_state, TextColor, text_color) }
|
||||||
internal Vec4F32 ui_bottom_border_color(void) { UI_StackBottomImpl(ui_state, BorderColor, border_color) }
|
internal Vec4F32 ui_bottom_border_color(void) { UI_StackBottomImpl(ui_state, BorderColor, border_color) }
|
||||||
internal F32 ui_bottom_squish(void) { UI_StackBottomImpl(ui_state, Squish, squish) }
|
internal F32 ui_bottom_squish(void) { UI_StackBottomImpl(ui_state, Squish, squish) }
|
||||||
internal OS_Cursor ui_bottom_hover_cursor(void) { UI_StackBottomImpl(ui_state, HoverCursor, hover_cursor) }
|
internal WM_Cursor ui_bottom_hover_cursor(void) { UI_StackBottomImpl(ui_state, HoverCursor, hover_cursor) }
|
||||||
internal FNT_Tag ui_bottom_font(void) { UI_StackBottomImpl(ui_state, Font, font) }
|
internal FNT_Tag ui_bottom_font(void) { UI_StackBottomImpl(ui_state, Font, font) }
|
||||||
internal F32 ui_bottom_font_size(void) { UI_StackBottomImpl(ui_state, FontSize, font_size) }
|
internal F32 ui_bottom_font_size(void) { UI_StackBottomImpl(ui_state, FontSize, font_size) }
|
||||||
internal FNT_RasterFlags ui_bottom_text_raster_flags(void) { UI_StackBottomImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
internal FNT_RasterFlags ui_bottom_text_raster_flags(void) { UI_StackBottomImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
||||||
@@ -130,7 +130,7 @@ internal Vec4F32 ui_push_background_color(Vec4F32 v) { UI_StackPushImpl(ui_state
|
|||||||
internal Vec4F32 ui_push_text_color(Vec4F32 v) { UI_StackPushImpl(ui_state, TextColor, text_color, Vec4F32, v) }
|
internal Vec4F32 ui_push_text_color(Vec4F32 v) { UI_StackPushImpl(ui_state, TextColor, text_color, Vec4F32, v) }
|
||||||
internal Vec4F32 ui_push_border_color(Vec4F32 v) { UI_StackPushImpl(ui_state, BorderColor, border_color, Vec4F32, v) }
|
internal Vec4F32 ui_push_border_color(Vec4F32 v) { UI_StackPushImpl(ui_state, BorderColor, border_color, Vec4F32, v) }
|
||||||
internal F32 ui_push_squish(F32 v) { UI_StackPushImpl(ui_state, Squish, squish, F32, v) }
|
internal F32 ui_push_squish(F32 v) { UI_StackPushImpl(ui_state, Squish, squish, F32, v) }
|
||||||
internal OS_Cursor ui_push_hover_cursor(OS_Cursor v) { UI_StackPushImpl(ui_state, HoverCursor, hover_cursor, OS_Cursor, v) }
|
internal WM_Cursor ui_push_hover_cursor(WM_Cursor v) { UI_StackPushImpl(ui_state, HoverCursor, hover_cursor, WM_Cursor, v) }
|
||||||
internal FNT_Tag ui_push_font(FNT_Tag v) { UI_StackPushImpl(ui_state, Font, font, FNT_Tag, v) }
|
internal FNT_Tag ui_push_font(FNT_Tag v) { UI_StackPushImpl(ui_state, Font, font, FNT_Tag, v) }
|
||||||
internal F32 ui_push_font_size(F32 v) { UI_StackPushImpl(ui_state, FontSize, font_size, F32, v) }
|
internal F32 ui_push_font_size(F32 v) { UI_StackPushImpl(ui_state, FontSize, font_size, F32, v) }
|
||||||
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v) { UI_StackPushImpl(ui_state, TextRasterFlags, text_raster_flags, FNT_RasterFlags, v) }
|
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v) { UI_StackPushImpl(ui_state, TextRasterFlags, text_raster_flags, FNT_RasterFlags, v) }
|
||||||
@@ -164,7 +164,7 @@ internal Vec4F32 ui_pop_background_color(void) { UI_StackPopImpl(ui_state, Backg
|
|||||||
internal Vec4F32 ui_pop_text_color(void) { UI_StackPopImpl(ui_state, TextColor, text_color) }
|
internal Vec4F32 ui_pop_text_color(void) { UI_StackPopImpl(ui_state, TextColor, text_color) }
|
||||||
internal Vec4F32 ui_pop_border_color(void) { UI_StackPopImpl(ui_state, BorderColor, border_color) }
|
internal Vec4F32 ui_pop_border_color(void) { UI_StackPopImpl(ui_state, BorderColor, border_color) }
|
||||||
internal F32 ui_pop_squish(void) { UI_StackPopImpl(ui_state, Squish, squish) }
|
internal F32 ui_pop_squish(void) { UI_StackPopImpl(ui_state, Squish, squish) }
|
||||||
internal OS_Cursor ui_pop_hover_cursor(void) { UI_StackPopImpl(ui_state, HoverCursor, hover_cursor) }
|
internal WM_Cursor ui_pop_hover_cursor(void) { UI_StackPopImpl(ui_state, HoverCursor, hover_cursor) }
|
||||||
internal FNT_Tag ui_pop_font(void) { UI_StackPopImpl(ui_state, Font, font) }
|
internal FNT_Tag ui_pop_font(void) { UI_StackPopImpl(ui_state, Font, font) }
|
||||||
internal F32 ui_pop_font_size(void) { UI_StackPopImpl(ui_state, FontSize, font_size) }
|
internal F32 ui_pop_font_size(void) { UI_StackPopImpl(ui_state, FontSize, font_size) }
|
||||||
internal FNT_RasterFlags ui_pop_text_raster_flags(void) { UI_StackPopImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
internal FNT_RasterFlags ui_pop_text_raster_flags(void) { UI_StackPopImpl(ui_state, TextRasterFlags, text_raster_flags) }
|
||||||
@@ -198,7 +198,7 @@ internal Vec4F32 ui_set_next_background_color(Vec4F32 v) { UI_StackSetNextImpl(u
|
|||||||
internal Vec4F32 ui_set_next_text_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, TextColor, text_color, Vec4F32, v) }
|
internal Vec4F32 ui_set_next_text_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, TextColor, text_color, Vec4F32, v) }
|
||||||
internal Vec4F32 ui_set_next_border_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, BorderColor, border_color, Vec4F32, v) }
|
internal Vec4F32 ui_set_next_border_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, BorderColor, border_color, Vec4F32, v) }
|
||||||
internal F32 ui_set_next_squish(F32 v) { UI_StackSetNextImpl(ui_state, Squish, squish, F32, v) }
|
internal F32 ui_set_next_squish(F32 v) { UI_StackSetNextImpl(ui_state, Squish, squish, F32, v) }
|
||||||
internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v) { UI_StackSetNextImpl(ui_state, HoverCursor, hover_cursor, OS_Cursor, v) }
|
internal WM_Cursor ui_set_next_hover_cursor(WM_Cursor v) { UI_StackSetNextImpl(ui_state, HoverCursor, hover_cursor, WM_Cursor, v) }
|
||||||
internal FNT_Tag ui_set_next_font(FNT_Tag v) { UI_StackSetNextImpl(ui_state, Font, font, FNT_Tag, v) }
|
internal FNT_Tag ui_set_next_font(FNT_Tag v) { UI_StackSetNextImpl(ui_state, Font, font, FNT_Tag, v) }
|
||||||
internal F32 ui_set_next_font_size(F32 v) { UI_StackSetNextImpl(ui_state, FontSize, font_size, F32, v) }
|
internal F32 ui_set_next_font_size(F32 v) { UI_StackSetNextImpl(ui_state, FontSize, font_size, F32, v) }
|
||||||
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v) { UI_StackSetNextImpl(ui_state, TextRasterFlags, text_raster_flags, FNT_RasterFlags, v) }
|
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v) { UI_StackSetNextImpl(ui_state, TextRasterFlags, text_raster_flags, FNT_RasterFlags, v) }
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ typedef struct UI_BackgroundColorNode UI_BackgroundColorNode; struct UI_Backgrou
|
|||||||
typedef struct UI_TextColorNode UI_TextColorNode; struct UI_TextColorNode{UI_TextColorNode *next; Vec4F32 v;};
|
typedef struct UI_TextColorNode UI_TextColorNode; struct UI_TextColorNode{UI_TextColorNode *next; Vec4F32 v;};
|
||||||
typedef struct UI_BorderColorNode UI_BorderColorNode; struct UI_BorderColorNode{UI_BorderColorNode *next; Vec4F32 v;};
|
typedef struct UI_BorderColorNode UI_BorderColorNode; struct UI_BorderColorNode{UI_BorderColorNode *next; Vec4F32 v;};
|
||||||
typedef struct UI_SquishNode UI_SquishNode; struct UI_SquishNode{UI_SquishNode *next; F32 v;};
|
typedef struct UI_SquishNode UI_SquishNode; struct UI_SquishNode{UI_SquishNode *next; F32 v;};
|
||||||
typedef struct UI_HoverCursorNode UI_HoverCursorNode; struct UI_HoverCursorNode{UI_HoverCursorNode *next; OS_Cursor v;};
|
typedef struct UI_HoverCursorNode UI_HoverCursorNode; struct UI_HoverCursorNode{UI_HoverCursorNode *next; WM_Cursor v;};
|
||||||
typedef struct UI_FontNode UI_FontNode; struct UI_FontNode{UI_FontNode *next; FNT_Tag v;};
|
typedef struct UI_FontNode UI_FontNode; struct UI_FontNode{UI_FontNode *next; FNT_Tag v;};
|
||||||
typedef struct UI_FontSizeNode UI_FontSizeNode; struct UI_FontSizeNode{UI_FontSizeNode *next; F32 v;};
|
typedef struct UI_FontSizeNode UI_FontSizeNode; struct UI_FontSizeNode{UI_FontSizeNode *next; F32 v;};
|
||||||
typedef struct UI_TextRasterFlagsNode UI_TextRasterFlagsNode; struct UI_TextRasterFlagsNode{UI_TextRasterFlagsNode *next; FNT_RasterFlags v;};
|
typedef struct UI_TextRasterFlagsNode UI_TextRasterFlagsNode; struct UI_TextRasterFlagsNode{UI_TextRasterFlagsNode *next; FNT_RasterFlags v;};
|
||||||
@@ -104,7 +104,7 @@ state->background_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
|
|||||||
state->text_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
|
state->text_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
|
||||||
state->border_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
|
state->border_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
|
||||||
state->squish_nil_stack_top.v = 0;\
|
state->squish_nil_stack_top.v = 0;\
|
||||||
state->hover_cursor_nil_stack_top.v = OS_Cursor_Pointer;\
|
state->hover_cursor_nil_stack_top.v = WM_Cursor_Pointer;\
|
||||||
state->font_nil_stack_top.v = fnt_tag_zero();\
|
state->font_nil_stack_top.v = fnt_tag_zero();\
|
||||||
state->font_size_nil_stack_top.v = 24.f;\
|
state->font_size_nil_stack_top.v = 24.f;\
|
||||||
state->text_raster_flags_nil_stack_top.v = FNT_RasterFlag_Hinted;\
|
state->text_raster_flags_nil_stack_top.v = FNT_RasterFlag_Hinted;\
|
||||||
@@ -143,7 +143,7 @@ struct { UI_BackgroundColorNode *top; Vec4F32 bottom_val; UI_BackgroundColorNode
|
|||||||
struct { UI_TextColorNode *top; Vec4F32 bottom_val; UI_TextColorNode *free; U64 gen; B32 auto_pop; } text_color_stack;\
|
struct { UI_TextColorNode *top; Vec4F32 bottom_val; UI_TextColorNode *free; U64 gen; B32 auto_pop; } text_color_stack;\
|
||||||
struct { UI_BorderColorNode *top; Vec4F32 bottom_val; UI_BorderColorNode *free; U64 gen; B32 auto_pop; } border_color_stack;\
|
struct { UI_BorderColorNode *top; Vec4F32 bottom_val; UI_BorderColorNode *free; U64 gen; B32 auto_pop; } border_color_stack;\
|
||||||
struct { UI_SquishNode *top; F32 bottom_val; UI_SquishNode *free; U64 gen; B32 auto_pop; } squish_stack;\
|
struct { UI_SquishNode *top; F32 bottom_val; UI_SquishNode *free; U64 gen; B32 auto_pop; } squish_stack;\
|
||||||
struct { UI_HoverCursorNode *top; OS_Cursor bottom_val; UI_HoverCursorNode *free; U64 gen; B32 auto_pop; } hover_cursor_stack;\
|
struct { UI_HoverCursorNode *top; WM_Cursor bottom_val; UI_HoverCursorNode *free; U64 gen; B32 auto_pop; } hover_cursor_stack;\
|
||||||
struct { UI_FontNode *top; FNT_Tag bottom_val; UI_FontNode *free; U64 gen; B32 auto_pop; } font_stack;\
|
struct { UI_FontNode *top; FNT_Tag bottom_val; UI_FontNode *free; U64 gen; B32 auto_pop; } font_stack;\
|
||||||
struct { UI_FontSizeNode *top; F32 bottom_val; UI_FontSizeNode *free; U64 gen; B32 auto_pop; } font_size_stack;\
|
struct { UI_FontSizeNode *top; F32 bottom_val; UI_FontSizeNode *free; U64 gen; B32 auto_pop; } font_size_stack;\
|
||||||
struct { UI_TextRasterFlagsNode *top; FNT_RasterFlags bottom_val; UI_TextRasterFlagsNode *free; U64 gen; B32 auto_pop; } text_raster_flags_stack;\
|
struct { UI_TextRasterFlagsNode *top; FNT_RasterFlags bottom_val; UI_TextRasterFlagsNode *free; U64 gen; B32 auto_pop; } text_raster_flags_stack;\
|
||||||
@@ -180,7 +180,7 @@ state->background_color_stack.top = &state->background_color_nil_stack_top; stat
|
|||||||
state->text_color_stack.top = &state->text_color_nil_stack_top; state->text_color_stack.bottom_val = v4f32(0, 0, 0, 0); state->text_color_stack.free = 0; state->text_color_stack.auto_pop = 0;\
|
state->text_color_stack.top = &state->text_color_nil_stack_top; state->text_color_stack.bottom_val = v4f32(0, 0, 0, 0); state->text_color_stack.free = 0; state->text_color_stack.auto_pop = 0;\
|
||||||
state->border_color_stack.top = &state->border_color_nil_stack_top; state->border_color_stack.bottom_val = v4f32(0, 0, 0, 0); state->border_color_stack.free = 0; state->border_color_stack.auto_pop = 0;\
|
state->border_color_stack.top = &state->border_color_nil_stack_top; state->border_color_stack.bottom_val = v4f32(0, 0, 0, 0); state->border_color_stack.free = 0; state->border_color_stack.auto_pop = 0;\
|
||||||
state->squish_stack.top = &state->squish_nil_stack_top; state->squish_stack.bottom_val = 0; state->squish_stack.free = 0; state->squish_stack.auto_pop = 0;\
|
state->squish_stack.top = &state->squish_nil_stack_top; state->squish_stack.bottom_val = 0; state->squish_stack.free = 0; state->squish_stack.auto_pop = 0;\
|
||||||
state->hover_cursor_stack.top = &state->hover_cursor_nil_stack_top; state->hover_cursor_stack.bottom_val = OS_Cursor_Pointer; state->hover_cursor_stack.free = 0; state->hover_cursor_stack.auto_pop = 0;\
|
state->hover_cursor_stack.top = &state->hover_cursor_nil_stack_top; state->hover_cursor_stack.bottom_val = WM_Cursor_Pointer; state->hover_cursor_stack.free = 0; state->hover_cursor_stack.auto_pop = 0;\
|
||||||
state->font_stack.top = &state->font_nil_stack_top; state->font_stack.bottom_val = fnt_tag_zero(); state->font_stack.free = 0; state->font_stack.auto_pop = 0;\
|
state->font_stack.top = &state->font_nil_stack_top; state->font_stack.bottom_val = fnt_tag_zero(); state->font_stack.free = 0; state->font_stack.auto_pop = 0;\
|
||||||
state->font_size_stack.top = &state->font_size_nil_stack_top; state->font_size_stack.bottom_val = 24.f; state->font_size_stack.free = 0; state->font_size_stack.auto_pop = 0;\
|
state->font_size_stack.top = &state->font_size_nil_stack_top; state->font_size_stack.bottom_val = 24.f; state->font_size_stack.free = 0; state->font_size_stack.auto_pop = 0;\
|
||||||
state->text_raster_flags_stack.top = &state->text_raster_flags_nil_stack_top; state->text_raster_flags_stack.bottom_val = FNT_RasterFlag_Hinted; state->text_raster_flags_stack.free = 0; state->text_raster_flags_stack.auto_pop = 0;\
|
state->text_raster_flags_stack.top = &state->text_raster_flags_nil_stack_top; state->text_raster_flags_stack.bottom_val = FNT_RasterFlag_Hinted; state->text_raster_flags_stack.free = 0; state->text_raster_flags_stack.auto_pop = 0;\
|
||||||
@@ -253,7 +253,7 @@ internal Vec4F32 ui_top_background_color(void);
|
|||||||
internal Vec4F32 ui_top_text_color(void);
|
internal Vec4F32 ui_top_text_color(void);
|
||||||
internal Vec4F32 ui_top_border_color(void);
|
internal Vec4F32 ui_top_border_color(void);
|
||||||
internal F32 ui_top_squish(void);
|
internal F32 ui_top_squish(void);
|
||||||
internal OS_Cursor ui_top_hover_cursor(void);
|
internal WM_Cursor ui_top_hover_cursor(void);
|
||||||
internal FNT_Tag ui_top_font(void);
|
internal FNT_Tag ui_top_font(void);
|
||||||
internal F32 ui_top_font_size(void);
|
internal F32 ui_top_font_size(void);
|
||||||
internal FNT_RasterFlags ui_top_text_raster_flags(void);
|
internal FNT_RasterFlags ui_top_text_raster_flags(void);
|
||||||
@@ -288,7 +288,7 @@ internal Vec4F32 ui_bottom_background_color(void);
|
|||||||
internal Vec4F32 ui_bottom_text_color(void);
|
internal Vec4F32 ui_bottom_text_color(void);
|
||||||
internal Vec4F32 ui_bottom_border_color(void);
|
internal Vec4F32 ui_bottom_border_color(void);
|
||||||
internal F32 ui_bottom_squish(void);
|
internal F32 ui_bottom_squish(void);
|
||||||
internal OS_Cursor ui_bottom_hover_cursor(void);
|
internal WM_Cursor ui_bottom_hover_cursor(void);
|
||||||
internal FNT_Tag ui_bottom_font(void);
|
internal FNT_Tag ui_bottom_font(void);
|
||||||
internal F32 ui_bottom_font_size(void);
|
internal F32 ui_bottom_font_size(void);
|
||||||
internal FNT_RasterFlags ui_bottom_text_raster_flags(void);
|
internal FNT_RasterFlags ui_bottom_text_raster_flags(void);
|
||||||
@@ -323,7 +323,7 @@ internal Vec4F32 ui_push_background_color(Vec4F32 v);
|
|||||||
internal Vec4F32 ui_push_text_color(Vec4F32 v);
|
internal Vec4F32 ui_push_text_color(Vec4F32 v);
|
||||||
internal Vec4F32 ui_push_border_color(Vec4F32 v);
|
internal Vec4F32 ui_push_border_color(Vec4F32 v);
|
||||||
internal F32 ui_push_squish(F32 v);
|
internal F32 ui_push_squish(F32 v);
|
||||||
internal OS_Cursor ui_push_hover_cursor(OS_Cursor v);
|
internal WM_Cursor ui_push_hover_cursor(WM_Cursor v);
|
||||||
internal FNT_Tag ui_push_font(FNT_Tag v);
|
internal FNT_Tag ui_push_font(FNT_Tag v);
|
||||||
internal F32 ui_push_font_size(F32 v);
|
internal F32 ui_push_font_size(F32 v);
|
||||||
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v);
|
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v);
|
||||||
@@ -358,7 +358,7 @@ internal Vec4F32 ui_pop_background_color(void);
|
|||||||
internal Vec4F32 ui_pop_text_color(void);
|
internal Vec4F32 ui_pop_text_color(void);
|
||||||
internal Vec4F32 ui_pop_border_color(void);
|
internal Vec4F32 ui_pop_border_color(void);
|
||||||
internal F32 ui_pop_squish(void);
|
internal F32 ui_pop_squish(void);
|
||||||
internal OS_Cursor ui_pop_hover_cursor(void);
|
internal WM_Cursor ui_pop_hover_cursor(void);
|
||||||
internal FNT_Tag ui_pop_font(void);
|
internal FNT_Tag ui_pop_font(void);
|
||||||
internal F32 ui_pop_font_size(void);
|
internal F32 ui_pop_font_size(void);
|
||||||
internal FNT_RasterFlags ui_pop_text_raster_flags(void);
|
internal FNT_RasterFlags ui_pop_text_raster_flags(void);
|
||||||
@@ -393,7 +393,7 @@ internal Vec4F32 ui_set_next_background_color(Vec4F32 v);
|
|||||||
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
|
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
|
||||||
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
|
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
|
||||||
internal F32 ui_set_next_squish(F32 v);
|
internal F32 ui_set_next_squish(F32 v);
|
||||||
internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v);
|
internal WM_Cursor ui_set_next_hover_cursor(WM_Cursor v);
|
||||||
internal FNT_Tag ui_set_next_font(FNT_Tag v);
|
internal FNT_Tag ui_set_next_font(FNT_Tag v);
|
||||||
internal F32 ui_set_next_font_size(F32 v);
|
internal F32 ui_set_next_font_size(F32 v);
|
||||||
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v);
|
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v);
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ UI_StackTable:
|
|||||||
{ Squish squish F32 0 }
|
{ Squish squish F32 0 }
|
||||||
|
|
||||||
//- rjf: hover cursor
|
//- rjf: hover cursor
|
||||||
{ HoverCursor hover_cursor OS_Cursor OS_Cursor_Pointer }
|
{ HoverCursor hover_cursor WM_Cursor WM_Cursor_Pointer }
|
||||||
|
|
||||||
//- rjf: font
|
//- rjf: font
|
||||||
{ Font font FNT_Tag `fnt_tag_zero()` }
|
{ Font font FNT_Tag `fnt_tag_zero()` }
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ ui_line_edit(TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size,
|
|||||||
B32 is_focus_active_disabled = (!is_focus_active && ui_top_focus_active() == UI_FocusKind_On);
|
B32 is_focus_active_disabled = (!is_focus_active && ui_top_focus_active() == UI_FocusKind_On);
|
||||||
|
|
||||||
//- rjf: build top-level box
|
//- rjf: build top-level box
|
||||||
ui_set_next_hover_cursor(is_focus_active ? OS_Cursor_IBar : OS_Cursor_Pointer);
|
ui_set_next_hover_cursor(is_focus_active ? WM_Cursor_IBar : WM_Cursor_Pointer);
|
||||||
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_DrawBackground|
|
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_DrawBackground|
|
||||||
UI_BoxFlag_DrawBorder|
|
UI_BoxFlag_DrawBorder|
|
||||||
UI_BoxFlag_MouseClickable|
|
UI_BoxFlag_MouseClickable|
|
||||||
@@ -252,7 +252,7 @@ ui_line_edit(TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size,
|
|||||||
// rjf: perform copy
|
// rjf: perform copy
|
||||||
if(op.flags & UI_TxtOpFlag_Copy)
|
if(op.flags & UI_TxtOpFlag_Copy)
|
||||||
{
|
{
|
||||||
os_set_clipboard_text(op.copy);
|
wm_set_clipboard_text(op.copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: commit op's changed cursor & mark to caller-provided state
|
// rjf: commit op's changed cursor & mark to caller-provided state
|
||||||
@@ -436,7 +436,7 @@ ui_imagef(R_Handle texture, R_Tex2DSampleKind sample_kind, Rng2F32 region, Vec4F
|
|||||||
internal UI_Signal
|
internal UI_Signal
|
||||||
ui_expander(B32 is_expanded, String8 string)
|
ui_expander(B32 is_expanded, String8 string)
|
||||||
{
|
{
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
ui_set_next_text_alignment(UI_TextAlign_Center);
|
ui_set_next_text_alignment(UI_TextAlign_Center);
|
||||||
ui_set_next_font(ui_icon_font());
|
ui_set_next_font(ui_icon_font());
|
||||||
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable|UI_BoxFlag_DrawText, string);
|
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable|UI_BoxFlag_DrawText, string);
|
||||||
@@ -462,7 +462,7 @@ internal UI_Signal
|
|||||||
ui_sort_header(B32 sorting, B32 ascending, String8 string)
|
ui_sort_header(B32 sorting, B32 ascending, String8 string)
|
||||||
{
|
{
|
||||||
ui_set_next_child_layout_axis(Axis2_X);
|
ui_set_next_child_layout_axis(Axis2_X);
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawActiveEffects, string);
|
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawActiveEffects, string);
|
||||||
ui_push_parent(box);
|
ui_push_parent(box);
|
||||||
|
|
||||||
@@ -649,7 +649,7 @@ internal UI_Signal
|
|||||||
ui_sat_val_picker(F32 hue, F32 *out_sat, F32 *out_val, String8 string)
|
ui_sat_val_picker(F32 hue, F32 *out_sat, F32 *out_val, String8 string)
|
||||||
{
|
{
|
||||||
// rjf: build & interact
|
// rjf: build & interact
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
||||||
UI_SatValDrawData *user = push_array(ui_build_arena(), UI_SatValDrawData, 1);
|
UI_SatValDrawData *user = push_array(ui_build_arena(), UI_SatValDrawData, 1);
|
||||||
ui_box_equip_custom_draw(box, ui_sat_val_picker_draw, user);
|
ui_box_equip_custom_draw(box, ui_sat_val_picker_draw, user);
|
||||||
@@ -758,7 +758,7 @@ internal UI_Signal
|
|||||||
ui_hue_picker(F32 *out_hue, F32 sat, F32 val, String8 string)
|
ui_hue_picker(F32 *out_hue, F32 sat, F32 val, String8 string)
|
||||||
{
|
{
|
||||||
// rjf: build & interact
|
// rjf: build & interact
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
||||||
UI_HueDrawData *user = push_array(ui_build_arena(), UI_HueDrawData, 1);
|
UI_HueDrawData *user = push_array(ui_build_arena(), UI_HueDrawData, 1);
|
||||||
ui_box_equip_custom_draw(box, ui_hue_picker_draw, user);
|
ui_box_equip_custom_draw(box, ui_hue_picker_draw, user);
|
||||||
@@ -845,7 +845,7 @@ internal UI_Signal
|
|||||||
ui_alpha_picker(F32 *out_alpha, String8 string)
|
ui_alpha_picker(F32 *out_alpha, String8 string)
|
||||||
{
|
{
|
||||||
// rjf: build & interact
|
// rjf: build & interact
|
||||||
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
|
ui_set_next_hover_cursor(WM_Cursor_HandPoint);
|
||||||
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
UI_Box *box = ui_build_box_from_string(UI_BoxFlag_Clickable, string);
|
||||||
UI_AlphaDrawData *user = push_array(ui_build_arena(), UI_AlphaDrawData, 1);
|
UI_AlphaDrawData *user = push_array(ui_build_arena(), UI_AlphaDrawData, 1);
|
||||||
ui_box_equip_custom_draw(box, ui_alpha_picker_draw, user);
|
ui_box_equip_custom_draw(box, ui_alpha_picker_draw, user);
|
||||||
@@ -1006,7 +1006,7 @@ ui_table_begin(U64 column_pct_count, F32 **column_pcts, String8 string)
|
|||||||
// rjf: make column boundary widget
|
// rjf: make column boundary widget
|
||||||
UI_Rect(rect)
|
UI_Rect(rect)
|
||||||
{
|
{
|
||||||
ui_set_next_hover_cursor(OS_Cursor_LeftRight);
|
ui_set_next_hover_cursor(WM_Cursor_LeftRight);
|
||||||
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###%S_boundary_%I64u", table->string, column_idx);
|
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###%S_boundary_%I64u", table->string, column_idx);
|
||||||
|
|
||||||
F32 *left_pct_ptr = column_idx < ui_ts_col_pct_count ? column_pcts[column_idx-1] : 0;
|
F32 *left_pct_ptr = column_idx < ui_ts_col_pct_count ? column_pcts[column_idx-1] : 0;
|
||||||
|
|||||||
+43
-43
@@ -233,7 +233,7 @@ ui_single_line_txt_op_from_event(Arena *arena, UI_Event *event, String8 string,
|
|||||||
if(event->flags & UI_EventFlag_Paste)
|
if(event->flags & UI_EventFlag_Paste)
|
||||||
{
|
{
|
||||||
range = txt_rng(cursor, mark);
|
range = txt_rng(cursor, mark);
|
||||||
replace = os_get_clipboard_text(arena);
|
replace = wm_get_clipboard_text(arena);
|
||||||
next_cursor = next_mark = txt_pt(cursor.line, cursor.column+replace.size);
|
next_cursor = next_mark = txt_pt(cursor.line, cursor.column+replace.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,7 +471,7 @@ ui_build_arena(void)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Window
|
internal WM_Window
|
||||||
ui_window(void)
|
ui_window(void)
|
||||||
{
|
{
|
||||||
return ui_state->window;
|
return ui_state->window;
|
||||||
@@ -523,25 +523,25 @@ ui_next_event(UI_Event **ev)
|
|||||||
if(!(perms & UI_PermissionFlag_ClicksLeft) &&
|
if(!(perms & UI_PermissionFlag_ClicksLeft) &&
|
||||||
(n->v.kind == UI_EventKind_Press ||
|
(n->v.kind == UI_EventKind_Press ||
|
||||||
n->v.kind == UI_EventKind_Release) &&
|
n->v.kind == UI_EventKind_Release) &&
|
||||||
(n->v.key == OS_Key_LeftMouseButton))
|
(n->v.key == WM_Key_LeftMouseButton))
|
||||||
{
|
{
|
||||||
good = 0;
|
good = 0;
|
||||||
}
|
}
|
||||||
if(!(perms & UI_PermissionFlag_ClicksMiddle) &&
|
if(!(perms & UI_PermissionFlag_ClicksMiddle) &&
|
||||||
(n->v.kind == UI_EventKind_Press ||
|
(n->v.kind == UI_EventKind_Press ||
|
||||||
n->v.kind == UI_EventKind_Release) &&
|
n->v.kind == UI_EventKind_Release) &&
|
||||||
(n->v.key == OS_Key_MiddleMouseButton))
|
(n->v.key == WM_Key_MiddleMouseButton))
|
||||||
{
|
{
|
||||||
good = 0;
|
good = 0;
|
||||||
}
|
}
|
||||||
if(!(perms & UI_PermissionFlag_ClicksRight) &&
|
if(!(perms & UI_PermissionFlag_ClicksRight) &&
|
||||||
(n->v.kind == UI_EventKind_Press ||
|
(n->v.kind == UI_EventKind_Press ||
|
||||||
n->v.kind == UI_EventKind_Release) &&
|
n->v.kind == UI_EventKind_Release) &&
|
||||||
(n->v.key == OS_Key_RightMouseButton))
|
(n->v.key == WM_Key_RightMouseButton))
|
||||||
{
|
{
|
||||||
good = 0;
|
good = 0;
|
||||||
}
|
}
|
||||||
if(!(perms & UI_PermissionFlag_ScrollX) && (n->v.kind == UI_EventKind_Scroll) && (n->v.delta_2f32.x != 0 || n->v.modifiers == OS_Modifier_Shift))
|
if(!(perms & UI_PermissionFlag_ScrollX) && (n->v.kind == UI_EventKind_Scroll) && (n->v.delta_2f32.x != 0 || n->v.modifiers == WM_Modifier_Shift))
|
||||||
{
|
{
|
||||||
good = 0;
|
good = 0;
|
||||||
}
|
}
|
||||||
@@ -553,9 +553,9 @@ ui_next_event(UI_Event **ev)
|
|||||||
n->v.kind == UI_EventKind_Release ||
|
n->v.kind == UI_EventKind_Release ||
|
||||||
n->v.kind == UI_EventKind_Navigate ||
|
n->v.kind == UI_EventKind_Navigate ||
|
||||||
n->v.kind == UI_EventKind_Edit) &&
|
n->v.kind == UI_EventKind_Edit) &&
|
||||||
(n->v.key != OS_Key_LeftMouseButton &&
|
(n->v.key != WM_Key_LeftMouseButton &&
|
||||||
n->v.key != OS_Key_MiddleMouseButton &&
|
n->v.key != WM_Key_MiddleMouseButton &&
|
||||||
n->v.key != OS_Key_RightMouseButton))
|
n->v.key != WM_Key_RightMouseButton))
|
||||||
{
|
{
|
||||||
if((perms & UI_PermissionFlag_Keyboard) == UI_PermissionFlag_KeyboardSecondary)
|
if((perms & UI_PermissionFlag_Keyboard) == UI_PermissionFlag_KeyboardSecondary)
|
||||||
{
|
{
|
||||||
@@ -594,7 +594,7 @@ ui_eat_event(UI_Event *ev)
|
|||||||
//- rjf: event consumption helpers
|
//- rjf: event consumption helpers
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
ui_key_press(OS_Modifiers mods, OS_Key key)
|
ui_key_press(WM_Modifiers mods, WM_Key key)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
@@ -610,7 +610,7 @@ ui_key_press(OS_Modifiers mods, OS_Key key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
ui_key_release(OS_Modifiers mods, OS_Key key)
|
ui_key_release(WM_Modifiers mods, WM_Key key)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
@@ -796,7 +796,7 @@ ui_box_from_key(UI_Key key)
|
|||||||
//~ rjf: Top-Level Building API
|
//~ rjf: Top-Level Building API
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, UI_Theme *theme, UI_AnimationInfo *animation_info, F32 real_dt, F32 animation_dt)
|
ui_begin_build(WM_Window window, UI_EventList *events, UI_IconInfo *icon_info, UI_Theme *theme, UI_AnimationInfo *animation_info, F32 real_dt, F32 animation_dt)
|
||||||
{
|
{
|
||||||
//- rjf: reset per-build ui state
|
//- rjf: reset per-build ui state
|
||||||
{
|
{
|
||||||
@@ -872,11 +872,11 @@ ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, U
|
|||||||
//- rjf: detect external press & holds
|
//- rjf: detect external press & holds
|
||||||
for EachEnumVal(UI_MouseButtonKind, k)
|
for EachEnumVal(UI_MouseButtonKind, k)
|
||||||
{
|
{
|
||||||
if(ui_key_match(ui_state->active_box_key[k], ui_key_zero()) && os_key_is_down(OS_Key_LeftMouseButton+k))
|
if(ui_key_match(ui_state->active_box_key[k], ui_key_zero()) && wm_key_is_down(WM_Key_LeftMouseButton+k))
|
||||||
{
|
{
|
||||||
ui_state->active_box_key[k] = ui_state->external_key;
|
ui_state->active_box_key[k] = ui_state->external_key;
|
||||||
}
|
}
|
||||||
else if(ui_key_match(ui_state->active_box_key[k], ui_state->external_key) && !os_key_is_down(OS_Key_LeftMouseButton+k))
|
else if(ui_key_match(ui_state->active_box_key[k], ui_state->external_key) && !wm_key_is_down(WM_Key_LeftMouseButton+k))
|
||||||
{
|
{
|
||||||
ui_state->active_box_key[k] = ui_key_zero();
|
ui_state->active_box_key[k] = ui_key_zero();
|
||||||
}
|
}
|
||||||
@@ -887,7 +887,7 @@ ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, U
|
|||||||
ui_state->theme = theme;
|
ui_state->theme = theme;
|
||||||
ui_state->events = events;
|
ui_state->events = events;
|
||||||
ui_state->window = window;
|
ui_state->window = window;
|
||||||
ui_state->mouse = (os_window_is_focused(window) || ui_state->last_time_mousemoved_us+500000 >= now_time_us()) ? os_mouse_from_window(window) : v2f32(-100, -100);
|
ui_state->mouse = (wm_window_is_focused(window) || ui_state->last_time_mousemoved_us+500000 >= now_time_us()) ? wm_mouse_from_window(window) : v2f32(-100, -100);
|
||||||
ui_state->animation_dt = animation_dt;
|
ui_state->animation_dt = animation_dt;
|
||||||
MemoryZeroStruct(&ui_state->icon_info);
|
MemoryZeroStruct(&ui_state->icon_info);
|
||||||
ui_state->icon_info.icon_font = icon_info->icon_font;
|
ui_state->icon_info.icon_font = icon_info->icon_font;
|
||||||
@@ -921,11 +921,11 @@ ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, U
|
|||||||
B32 nav_next = 0;
|
B32 nav_next = 0;
|
||||||
B32 nav_prev = 0;
|
B32 nav_prev = 0;
|
||||||
Axis2 axis_lock = Axis2_Invalid;
|
Axis2 axis_lock = Axis2_Invalid;
|
||||||
if(ui_key_press(0, OS_Key_Tab))
|
if(ui_key_press(0, WM_Key_Tab))
|
||||||
{
|
{
|
||||||
nav_next = 1;
|
nav_next = 1;
|
||||||
}
|
}
|
||||||
if(ui_key_press(OS_Modifier_Shift, OS_Key_Tab))
|
if(ui_key_press(WM_Modifier_Shift, WM_Key_Tab))
|
||||||
{
|
{
|
||||||
nav_prev = 1;
|
nav_prev = 1;
|
||||||
}
|
}
|
||||||
@@ -1123,7 +1123,7 @@ ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, U
|
|||||||
|
|
||||||
//- rjf: build top-level root
|
//- rjf: build top-level root
|
||||||
{
|
{
|
||||||
Rng2F32 window_rect = os_client_rect_from_window(window);
|
Rng2F32 window_rect = wm_client_rect_from_window(window);
|
||||||
Vec2F32 window_rect_size = dim_2f32(window_rect);
|
Vec2F32 window_rect_size = dim_2f32(window_rect);
|
||||||
ui_set_next_fixed_width(window_rect_size.x);
|
ui_set_next_fixed_width(window_rect_size.x);
|
||||||
ui_set_next_fixed_height(window_rect_size.y);
|
ui_set_next_fixed_height(window_rect_size.y);
|
||||||
@@ -1306,7 +1306,7 @@ ui_end_build(void)
|
|||||||
UI_Box *root = floating_roots[idx];
|
UI_Box *root = floating_roots[idx];
|
||||||
if(!ui_box_is_nil(root))
|
if(!ui_box_is_nil(root))
|
||||||
{
|
{
|
||||||
Rng2F32 window_rect = os_client_rect_from_window(ui_window());
|
Rng2F32 window_rect = wm_client_rect_from_window(ui_window());
|
||||||
Vec2F32 window_dim = dim_2f32(window_rect);
|
Vec2F32 window_dim = dim_2f32(window_rect);
|
||||||
Rng2F32 root_rect = root->rect;
|
Rng2F32 root_rect = root->rect;
|
||||||
Vec2F32 shift_down =
|
Vec2F32 shift_down =
|
||||||
@@ -1538,7 +1538,7 @@ ui_end_build(void)
|
|||||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||||
{
|
{
|
||||||
if(evt->kind == UI_EventKind_Press &&
|
if(evt->kind == UI_EventKind_Press &&
|
||||||
(evt->key == OS_Key_LeftMouseButton || evt->key == OS_Key_RightMouseButton))
|
(evt->key == WM_Key_LeftMouseButton || evt->key == WM_Key_RightMouseButton))
|
||||||
{
|
{
|
||||||
ui_ctx_menu_close();
|
ui_ctx_menu_close();
|
||||||
}
|
}
|
||||||
@@ -1551,14 +1551,14 @@ ui_end_build(void)
|
|||||||
UI_Box *hot = ui_box_from_key(ui_state->hot_box_key);
|
UI_Box *hot = ui_box_from_key(ui_state->hot_box_key);
|
||||||
UI_Box *active = ui_box_from_key(ui_state->active_box_key[UI_MouseButtonKind_Left]);
|
UI_Box *active = ui_box_from_key(ui_state->active_box_key[UI_MouseButtonKind_Left]);
|
||||||
UI_Box *box = ui_box_is_nil(active) ? hot : active;
|
UI_Box *box = ui_box_is_nil(active) ? hot : active;
|
||||||
OS_Cursor cursor = box->hover_cursor;
|
WM_Cursor cursor = box->hover_cursor;
|
||||||
if(box->flags & UI_BoxFlag_Disabled && box->flags & UI_BoxFlag_Clickable)
|
if(box->flags & UI_BoxFlag_Disabled && box->flags & UI_BoxFlag_Clickable)
|
||||||
{
|
{
|
||||||
cursor = OS_Cursor_Disabled;
|
cursor = WM_Cursor_Disabled;
|
||||||
}
|
}
|
||||||
if(os_window_is_focused(ui_state->window) || !ui_box_is_nil(active))
|
if(wm_window_is_focused(ui_state->window) || !ui_box_is_nil(active))
|
||||||
{
|
{
|
||||||
os_set_cursor(cursor);
|
wm_set_cursor(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1583,7 +1583,7 @@ ui_end_build(void)
|
|||||||
StringJoin join = {0};
|
StringJoin join = {0};
|
||||||
join.sep = str8_lit(" ");
|
join.sep = str8_lit(" ");
|
||||||
String8 string = str8_list_join(scratch.arena, &strs, &join);
|
String8 string = str8_list_join(scratch.arena, &strs, &join);
|
||||||
os_set_clipboard_text(string);
|
wm_set_clipboard_text(string);
|
||||||
}
|
}
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
@@ -2451,7 +2451,7 @@ ui_build_box_from_key(UI_BoxFlags flags, UI_Key key)
|
|||||||
box->first = box->last = box->next = box->prev = box->parent = &ui_nil_box;
|
box->first = box->last = box->next = box->prev = box->parent = &ui_nil_box;
|
||||||
box->child_count = 0;
|
box->child_count = 0;
|
||||||
box->flags = 0;
|
box->flags = 0;
|
||||||
box->hover_cursor = OS_Cursor_Pointer;
|
box->hover_cursor = WM_Cursor_Pointer;
|
||||||
MemoryZeroArray(box->pref_size);
|
MemoryZeroArray(box->pref_size);
|
||||||
MemoryZeroStruct(&box->draw_bucket);
|
MemoryZeroStruct(&box->draw_bucket);
|
||||||
}
|
}
|
||||||
@@ -2809,7 +2809,7 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
{
|
{
|
||||||
B32 is_focus_hot = box->flags & UI_BoxFlag_FocusHot && !(box->flags & UI_BoxFlag_FocusHotDisabled);
|
B32 is_focus_hot = box->flags & UI_BoxFlag_FocusHot && !(box->flags & UI_BoxFlag_FocusHotDisabled);
|
||||||
UI_Signal sig = {box};
|
UI_Signal sig = {box};
|
||||||
sig.event_flags |= os_get_modifiers();
|
sig.event_flags |= wm_get_modifiers();
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: calculate possibly-clipped box rectangle
|
//- rjf: calculate possibly-clipped box rectangle
|
||||||
@@ -2858,13 +2858,13 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
//- rjf: unpack event
|
//- rjf: unpack event
|
||||||
Vec2F32 evt_mouse = evt->pos;
|
Vec2F32 evt_mouse = evt->pos;
|
||||||
B32 evt_mouse_in_bounds = !contains_2f32(blacklist_rect, evt_mouse) && contains_2f32(rect, evt_mouse);
|
B32 evt_mouse_in_bounds = !contains_2f32(blacklist_rect, evt_mouse) && contains_2f32(rect, evt_mouse);
|
||||||
UI_MouseButtonKind evt_mouse_button_kind = (evt->key == OS_Key_LeftMouseButton ? UI_MouseButtonKind_Left :
|
UI_MouseButtonKind evt_mouse_button_kind = (evt->key == WM_Key_LeftMouseButton ? UI_MouseButtonKind_Left :
|
||||||
evt->key == OS_Key_MiddleMouseButton ? UI_MouseButtonKind_Middle :
|
evt->key == WM_Key_MiddleMouseButton ? UI_MouseButtonKind_Middle :
|
||||||
evt->key == OS_Key_RightMouseButton ? UI_MouseButtonKind_Right :
|
evt->key == WM_Key_RightMouseButton ? UI_MouseButtonKind_Right :
|
||||||
UI_MouseButtonKind_Left);
|
UI_MouseButtonKind_Left);
|
||||||
B32 evt_key_is_mouse = (evt->key == OS_Key_LeftMouseButton ||
|
B32 evt_key_is_mouse = (evt->key == WM_Key_LeftMouseButton ||
|
||||||
evt->key == OS_Key_MiddleMouseButton ||
|
evt->key == WM_Key_MiddleMouseButton ||
|
||||||
evt->key == OS_Key_RightMouseButton);
|
evt->key == WM_Key_RightMouseButton);
|
||||||
sig.event_flags |= evt->modifiers;
|
sig.event_flags |= evt->modifiers;
|
||||||
|
|
||||||
//- rjf: mouse presses in box -> set hot/active; mark signal accordingly
|
//- rjf: mouse presses in box -> set hot/active; mark signal accordingly
|
||||||
@@ -2878,14 +2878,14 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
sig.f |= (UI_SignalFlag_LeftPressed<<evt_mouse_button_kind);
|
sig.f |= (UI_SignalFlag_LeftPressed<<evt_mouse_button_kind);
|
||||||
ui_state->drag_start_mouse = evt->pos;
|
ui_state->drag_start_mouse = evt->pos;
|
||||||
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
||||||
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*os_get_gfx_info()->double_click_time)
|
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*wm_get_system_info()->double_click_time)
|
||||||
{
|
{
|
||||||
sig.f |= (UI_SignalFlag_LeftDoubleClicked<<evt_mouse_button_kind);
|
sig.f |= (UI_SignalFlag_LeftDoubleClicked<<evt_mouse_button_kind);
|
||||||
}
|
}
|
||||||
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
||||||
ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][1]) &&
|
ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][1]) &&
|
||||||
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*os_get_gfx_info()->double_click_time &&
|
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*wm_get_system_info()->double_click_time &&
|
||||||
ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] - ui_state->press_timestamp_history_us[evt_mouse_button_kind][1] <= 1000000*os_get_gfx_info()->double_click_time)
|
ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] - ui_state->press_timestamp_history_us[evt_mouse_button_kind][1] <= 1000000*wm_get_system_info()->double_click_time)
|
||||||
{
|
{
|
||||||
sig.f |= (UI_SignalFlag_LeftTripleClicked<<evt_mouse_button_kind);
|
sig.f |= (UI_SignalFlag_LeftTripleClicked<<evt_mouse_button_kind);
|
||||||
}
|
}
|
||||||
@@ -2980,11 +2980,11 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
//- rjf: scrolling
|
//- rjf: scrolling
|
||||||
if(box->flags & UI_BoxFlag_Scroll &&
|
if(box->flags & UI_BoxFlag_Scroll &&
|
||||||
evt->kind == UI_EventKind_Scroll &&
|
evt->kind == UI_EventKind_Scroll &&
|
||||||
(evt->modifiers == 0 || evt->modifiers == OS_Modifier_Shift) &&
|
(evt->modifiers == 0 || evt->modifiers == WM_Modifier_Shift) &&
|
||||||
evt_mouse_in_bounds)
|
evt_mouse_in_bounds)
|
||||||
{
|
{
|
||||||
Vec2F32 delta = evt->delta_2f32;
|
Vec2F32 delta = evt->delta_2f32;
|
||||||
if(evt->modifiers & OS_Modifier_Shift)
|
if(evt->modifiers & WM_Modifier_Shift)
|
||||||
{
|
{
|
||||||
Swap(F32, delta.x, delta.y);
|
Swap(F32, delta.x, delta.y);
|
||||||
}
|
}
|
||||||
@@ -3001,11 +3001,11 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
//- rjf: view scrolling
|
//- rjf: view scrolling
|
||||||
if(box->flags & UI_BoxFlag_ViewScroll && box->first_touched_build_index != box->last_touched_build_index &&
|
if(box->flags & UI_BoxFlag_ViewScroll && box->first_touched_build_index != box->last_touched_build_index &&
|
||||||
evt->kind == UI_EventKind_Scroll &&
|
evt->kind == UI_EventKind_Scroll &&
|
||||||
(evt->modifiers == 0 || evt->modifiers == OS_Modifier_Shift) &&
|
(evt->modifiers == 0 || evt->modifiers == WM_Modifier_Shift) &&
|
||||||
evt_mouse_in_bounds)
|
evt_mouse_in_bounds)
|
||||||
{
|
{
|
||||||
Vec2F32 delta = evt->delta_2f32;
|
Vec2F32 delta = evt->delta_2f32;
|
||||||
if(evt->modifiers & OS_Modifier_Shift)
|
if(evt->modifiers & WM_Modifier_Shift)
|
||||||
{
|
{
|
||||||
Swap(F32, delta.x, delta.y);
|
Swap(F32, delta.x, delta.y);
|
||||||
}
|
}
|
||||||
@@ -3077,7 +3077,7 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
if(sig.f & (UI_SignalFlag_LeftDragging<<k) &&
|
if(sig.f & (UI_SignalFlag_LeftDragging<<k) &&
|
||||||
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
||||||
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
||||||
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*os_get_gfx_info()->double_click_time &&
|
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*wm_get_system_info()->double_click_time &&
|
||||||
length_2f32(sub_2f32(ui_state->press_pos_history[k][0], ui_state->press_pos_history[k][1])) < 10.f)
|
length_2f32(sub_2f32(ui_state->press_pos_history[k][0], ui_state->press_pos_history[k][1])) < 10.f)
|
||||||
{
|
{
|
||||||
sig.f |= (UI_SignalFlag_LeftDoubleDragging<<k);
|
sig.f |= (UI_SignalFlag_LeftDoubleDragging<<k);
|
||||||
@@ -3096,8 +3096,8 @@ ui_signal_from_box(UI_Box *box)
|
|||||||
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
||||||
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
||||||
ui_key_match(ui_state->press_key_history[k][2], box->key) &&
|
ui_key_match(ui_state->press_key_history[k][2], box->key) &&
|
||||||
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*os_get_gfx_info()->double_click_time &&
|
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*wm_get_system_info()->double_click_time &&
|
||||||
ui_state->press_timestamp_history_us[k][1] - ui_state->press_timestamp_history_us[k][2] <= 1000000*os_get_gfx_info()->double_click_time &&
|
ui_state->press_timestamp_history_us[k][1] - ui_state->press_timestamp_history_us[k][2] <= 1000000*wm_get_system_info()->double_click_time &&
|
||||||
length_2f32(sub_2f32(ui_state->press_pos_history[k][0], ui_state->press_pos_history[k][1])) < 10.f &&
|
length_2f32(sub_2f32(ui_state->press_pos_history[k][0], ui_state->press_pos_history[k][1])) < 10.f &&
|
||||||
length_2f32(sub_2f32(ui_state->press_pos_history[k][1], ui_state->press_pos_history[k][2])) < 10.f)
|
length_2f32(sub_2f32(ui_state->press_pos_history[k][1], ui_state->press_pos_history[k][2])) < 10.f)
|
||||||
{
|
{
|
||||||
|
|||||||
+14
-14
@@ -142,8 +142,8 @@ struct UI_Event
|
|||||||
UI_EventActionSlot slot;
|
UI_EventActionSlot slot;
|
||||||
UI_EventFlags flags;
|
UI_EventFlags flags;
|
||||||
UI_EventDeltaUnit delta_unit;
|
UI_EventDeltaUnit delta_unit;
|
||||||
OS_Key key;
|
WM_Key key;
|
||||||
OS_Modifiers modifiers;
|
WM_Modifiers modifiers;
|
||||||
String8 string;
|
String8 string;
|
||||||
String8List paths;
|
String8List paths;
|
||||||
Vec2F32 pos;
|
Vec2F32 pos;
|
||||||
@@ -389,7 +389,7 @@ struct UI_Box
|
|||||||
Vec2F32 min_size;
|
Vec2F32 min_size;
|
||||||
UI_Size pref_size[Axis2_COUNT];
|
UI_Size pref_size[Axis2_COUNT];
|
||||||
Axis2 child_layout_axis;
|
Axis2 child_layout_axis;
|
||||||
OS_Cursor hover_cursor;
|
WM_Cursor hover_cursor;
|
||||||
U32 fastpath_codepoint;
|
U32 fastpath_codepoint;
|
||||||
UI_Key group_key;
|
UI_Key group_key;
|
||||||
DR_Bucket *draw_bucket;
|
DR_Bucket *draw_bucket;
|
||||||
@@ -524,7 +524,7 @@ typedef struct UI_Signal UI_Signal;
|
|||||||
struct UI_Signal
|
struct UI_Signal
|
||||||
{
|
{
|
||||||
UI_Box *box;
|
UI_Box *box;
|
||||||
OS_Modifiers event_flags;
|
WM_Modifiers event_flags;
|
||||||
Vec2S16 scroll;
|
Vec2S16 scroll;
|
||||||
UI_SignalFlags f;
|
UI_SignalFlags f;
|
||||||
};
|
};
|
||||||
@@ -705,7 +705,7 @@ struct UI_State
|
|||||||
UI_IconInfo icon_info;
|
UI_IconInfo icon_info;
|
||||||
UI_Theme *theme;
|
UI_Theme *theme;
|
||||||
UI_AnimationInfo animation_info;
|
UI_AnimationInfo animation_info;
|
||||||
OS_Window window;
|
WM_Window window;
|
||||||
UI_EventList *events;
|
UI_EventList *events;
|
||||||
Vec2F32 mouse;
|
Vec2F32 mouse;
|
||||||
F32 animation_dt;
|
F32 animation_dt;
|
||||||
@@ -826,7 +826,7 @@ internal UI_State *ui_get_selected_state(void);
|
|||||||
|
|
||||||
//- rjf: per-frame info
|
//- rjf: per-frame info
|
||||||
internal Arena * ui_build_arena(void);
|
internal Arena * ui_build_arena(void);
|
||||||
internal OS_Window ui_window(void);
|
internal WM_Window ui_window(void);
|
||||||
internal Vec2F32 ui_mouse(void);
|
internal Vec2F32 ui_mouse(void);
|
||||||
internal FNT_Tag ui_icon_font(void);
|
internal FNT_Tag ui_icon_font(void);
|
||||||
internal String8 ui_icon_string_from_kind(UI_IconKind icon_kind);
|
internal String8 ui_icon_string_from_kind(UI_IconKind icon_kind);
|
||||||
@@ -837,8 +837,8 @@ internal B32 ui_next_event(UI_Event **ev);
|
|||||||
internal void ui_eat_event(UI_Event *ev);
|
internal void ui_eat_event(UI_Event *ev);
|
||||||
|
|
||||||
//- rjf: event consumption helpers
|
//- rjf: event consumption helpers
|
||||||
internal B32 ui_key_press(OS_Modifiers mods, OS_Key key);
|
internal B32 ui_key_press(WM_Modifiers mods, WM_Key key);
|
||||||
internal B32 ui_key_release(OS_Modifiers mods, OS_Key key);
|
internal B32 ui_key_release(WM_Modifiers mods, WM_Key key);
|
||||||
internal B32 ui_text(U32 character);
|
internal B32 ui_text(U32 character);
|
||||||
internal B32 ui_slot_press(UI_EventActionSlot slot);
|
internal B32 ui_slot_press(UI_EventActionSlot slot);
|
||||||
|
|
||||||
@@ -873,7 +873,7 @@ internal UI_Box * ui_box_from_key(UI_Key key);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Top-Level Building API
|
//~ rjf: Top-Level Building API
|
||||||
|
|
||||||
internal void ui_begin_build(OS_Window window, UI_EventList *events, UI_IconInfo *icon_info, UI_Theme *theme, UI_AnimationInfo *animation_info, F32 real_dt, F32 animation_dt);
|
internal void ui_begin_build(WM_Window window, UI_EventList *events, UI_IconInfo *icon_info, UI_Theme *theme, UI_AnimationInfo *animation_info, F32 real_dt, F32 animation_dt);
|
||||||
internal void ui_end_build(void);
|
internal void ui_end_build(void);
|
||||||
internal void ui_calc_sizes_standalone__in_place(UI_Box *root, Axis2 axis);
|
internal void ui_calc_sizes_standalone__in_place(UI_Box *root, Axis2 axis);
|
||||||
internal void ui_calc_sizes_upwards_dependent__in_place(UI_Box *root, Axis2 axis);
|
internal void ui_calc_sizes_upwards_dependent__in_place(UI_Box *root, Axis2 axis);
|
||||||
@@ -985,7 +985,7 @@ internal Vec4F32 ui_top_background_color(void);
|
|||||||
internal Vec4F32 ui_top_text_color(void);
|
internal Vec4F32 ui_top_text_color(void);
|
||||||
internal Vec4F32 ui_top_border_color(void);
|
internal Vec4F32 ui_top_border_color(void);
|
||||||
internal F32 ui_top_squish(void);
|
internal F32 ui_top_squish(void);
|
||||||
internal OS_Cursor ui_top_hover_cursor(void);
|
internal WM_Cursor ui_top_hover_cursor(void);
|
||||||
internal FNT_Tag ui_top_font(void);
|
internal FNT_Tag ui_top_font(void);
|
||||||
internal F32 ui_top_font_size(void);
|
internal F32 ui_top_font_size(void);
|
||||||
internal FNT_RasterFlags ui_top_text_raster_flags(void);
|
internal FNT_RasterFlags ui_top_text_raster_flags(void);
|
||||||
@@ -1020,7 +1020,7 @@ internal Vec4F32 ui_bottom_background_color(void);
|
|||||||
internal Vec4F32 ui_bottom_text_color(void);
|
internal Vec4F32 ui_bottom_text_color(void);
|
||||||
internal Vec4F32 ui_bottom_border_color(void);
|
internal Vec4F32 ui_bottom_border_color(void);
|
||||||
internal F32 ui_bottom_squish(void);
|
internal F32 ui_bottom_squish(void);
|
||||||
internal OS_Cursor ui_bottom_hover_cursor(void);
|
internal WM_Cursor ui_bottom_hover_cursor(void);
|
||||||
internal FNT_Tag ui_bottom_font(void);
|
internal FNT_Tag ui_bottom_font(void);
|
||||||
internal F32 ui_bottom_font_size(void);
|
internal F32 ui_bottom_font_size(void);
|
||||||
internal FNT_RasterFlags ui_bottom_text_raster_flags(void);
|
internal FNT_RasterFlags ui_bottom_text_raster_flags(void);
|
||||||
@@ -1055,7 +1055,7 @@ internal Vec4F32 ui_push_background_color(Vec4F32 v);
|
|||||||
internal Vec4F32 ui_push_text_color(Vec4F32 v);
|
internal Vec4F32 ui_push_text_color(Vec4F32 v);
|
||||||
internal Vec4F32 ui_push_border_color(Vec4F32 v);
|
internal Vec4F32 ui_push_border_color(Vec4F32 v);
|
||||||
internal F32 ui_push_squish(F32 v);
|
internal F32 ui_push_squish(F32 v);
|
||||||
internal OS_Cursor ui_push_hover_cursor(OS_Cursor v);
|
internal WM_Cursor ui_push_hover_cursor(WM_Cursor v);
|
||||||
internal FNT_Tag ui_push_font(FNT_Tag v);
|
internal FNT_Tag ui_push_font(FNT_Tag v);
|
||||||
internal F32 ui_push_font_size(F32 v);
|
internal F32 ui_push_font_size(F32 v);
|
||||||
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v);
|
internal FNT_RasterFlags ui_push_text_raster_flags(FNT_RasterFlags v);
|
||||||
@@ -1090,7 +1090,7 @@ internal Vec4F32 ui_pop_background_color(void);
|
|||||||
internal Vec4F32 ui_pop_text_color(void);
|
internal Vec4F32 ui_pop_text_color(void);
|
||||||
internal Vec4F32 ui_pop_border_color(void);
|
internal Vec4F32 ui_pop_border_color(void);
|
||||||
internal F32 ui_pop_squish(void);
|
internal F32 ui_pop_squish(void);
|
||||||
internal OS_Cursor ui_pop_hover_cursor(void);
|
internal WM_Cursor ui_pop_hover_cursor(void);
|
||||||
internal FNT_Tag ui_pop_font(void);
|
internal FNT_Tag ui_pop_font(void);
|
||||||
internal F32 ui_pop_font_size(void);
|
internal F32 ui_pop_font_size(void);
|
||||||
internal FNT_RasterFlags ui_pop_text_raster_flags(void);
|
internal FNT_RasterFlags ui_pop_text_raster_flags(void);
|
||||||
@@ -1125,7 +1125,7 @@ internal Vec4F32 ui_set_next_background_color(Vec4F32 v);
|
|||||||
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
|
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
|
||||||
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
|
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
|
||||||
internal F32 ui_set_next_squish(F32 v);
|
internal F32 ui_set_next_squish(F32 v);
|
||||||
internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v);
|
internal WM_Cursor ui_set_next_hover_cursor(WM_Cursor v);
|
||||||
internal FNT_Tag ui_set_next_font(FNT_Tag v);
|
internal FNT_Tag ui_set_next_font(FNT_Tag v);
|
||||||
internal F32 ui_set_next_font_size(F32 v);
|
internal F32 ui_set_next_font_size(F32 v);
|
||||||
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v);
|
internal FNT_RasterFlags ui_set_next_text_raster_flags(FNT_RasterFlags v);
|
||||||
|
|||||||
+94
-94
@@ -14,7 +14,7 @@ global RIO_EXTENSION_FUNCTION_TABLE w32_rio_functions = {0};
|
|||||||
//~ rjf: File Info Conversion Helpers
|
//~ rjf: File Info Conversion Helpers
|
||||||
|
|
||||||
internal FilePropertyFlags
|
internal FilePropertyFlags
|
||||||
os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
||||||
{
|
{
|
||||||
FilePropertyFlags flags = 0;
|
FilePropertyFlags flags = 0;
|
||||||
if(dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
if(dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||||
@@ -25,19 +25,19 @@ os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes)
|
w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes)
|
||||||
{
|
{
|
||||||
properties->size = Compose64Bit(attributes->nFileSizeHigh, attributes->nFileSizeLow);
|
properties->size = Compose64Bit(attributes->nFileSizeHigh, attributes->nFileSizeLow);
|
||||||
os_w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
||||||
os_w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
||||||
properties->flags = os_w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
properties->flags = w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Time Conversion Helpers
|
//~ rjf: Time Conversion Helpers
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
||||||
{
|
{
|
||||||
out->year = in->wYear;
|
out->year = in->wYear;
|
||||||
out->mon = in->wMonth - 1;
|
out->mon = in->wMonth - 1;
|
||||||
@@ -50,7 +50,7 @@ os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
||||||
{
|
{
|
||||||
out->wYear = (WORD)(in->year);
|
out->wYear = (WORD)(in->year);
|
||||||
out->wMonth = in->mon + 1;
|
out->wMonth = in->mon + 1;
|
||||||
@@ -62,17 +62,17 @@ os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_w32_dense_time_from_file_time(DenseTime *out, FILETIME *in)
|
w32_dense_time_from_file_time(DenseTime *out, FILETIME *in)
|
||||||
{
|
{
|
||||||
SYSTEMTIME systime = {0};
|
SYSTEMTIME systime = {0};
|
||||||
FileTimeToSystemTime(in, &systime);
|
FileTimeToSystemTime(in, &systime);
|
||||||
DateTime date_time = {0};
|
DateTime date_time = {0};
|
||||||
os_w32_date_time_from_system_time(&date_time, &systime);
|
w32_date_time_from_system_time(&date_time, &systime);
|
||||||
*out = dense_time_from_date_time(date_time);
|
*out = dense_time_from_date_time(date_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal U32
|
internal U32
|
||||||
os_w32_sleep_ms_from_endt_us(U64 endt_us)
|
w32_sleep_ms_from_endt_us(U64 endt_us)
|
||||||
{
|
{
|
||||||
U32 sleep_ms = 0;
|
U32 sleep_ms = 0;
|
||||||
if(endt_us == max_U64)
|
if(endt_us == max_U64)
|
||||||
@@ -92,7 +92,7 @@ os_w32_sleep_ms_from_endt_us(U64 endt_us)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal U32
|
internal U32
|
||||||
os_w32_unix_time_from_file_time(FILETIME file_time)
|
w32_unix_time_from_file_time(FILETIME file_time)
|
||||||
{
|
{
|
||||||
U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime;
|
U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime;
|
||||||
U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000);
|
U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000);
|
||||||
@@ -106,44 +106,44 @@ os_w32_unix_time_from_file_time(FILETIME file_time)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Functions
|
//~ rjf: Entity Functions
|
||||||
|
|
||||||
internal OS_W32_Entity *
|
internal W32_Entity *
|
||||||
os_w32_entity_alloc(OS_W32_EntityKind kind)
|
w32_entity_alloc(W32_EntityKind kind)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *result = 0;
|
W32_Entity *result = 0;
|
||||||
EnterCriticalSection(&os_w32_state.entity_mutex);
|
EnterCriticalSection(&w32_state.entity_mutex);
|
||||||
{
|
{
|
||||||
result = os_w32_state.entity_free;
|
result = w32_state.entity_free;
|
||||||
if(result)
|
if(result)
|
||||||
{
|
{
|
||||||
SLLStackPop(os_w32_state.entity_free);
|
SLLStackPop(w32_state.entity_free);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = push_array_no_zero(os_w32_state.entity_arena, OS_W32_Entity, 1);
|
result = push_array_no_zero(w32_state.entity_arena, W32_Entity, 1);
|
||||||
}
|
}
|
||||||
MemoryZeroStruct(result);
|
MemoryZeroStruct(result);
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&os_w32_state.entity_mutex);
|
LeaveCriticalSection(&w32_state.entity_mutex);
|
||||||
result->kind = kind;
|
result->kind = kind;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_w32_entity_release(OS_W32_Entity *entity)
|
w32_entity_release(W32_Entity *entity)
|
||||||
{
|
{
|
||||||
entity->kind = OS_W32_EntityKind_Null;
|
entity->kind = W32_EntityKind_Null;
|
||||||
EnterCriticalSection(&os_w32_state.entity_mutex);
|
EnterCriticalSection(&w32_state.entity_mutex);
|
||||||
SLLStackPush(os_w32_state.entity_free, entity);
|
SLLStackPush(w32_state.entity_free, entity);
|
||||||
LeaveCriticalSection(&os_w32_state.entity_mutex);
|
LeaveCriticalSection(&w32_state.entity_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Thread Entry Point
|
//~ rjf: Thread Entry Point
|
||||||
|
|
||||||
internal DWORD
|
internal DWORD
|
||||||
os_w32_thread_entry_point(void *ptr)
|
w32_thread_entry_point(void *ptr)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity *)ptr;
|
W32_Entity *entity = (W32_Entity *)ptr;
|
||||||
ThreadEntryPointFunctionType *func = entity->thread.func;
|
ThreadEntryPointFunctionType *func = entity->thread.func;
|
||||||
void *thread_ptr = entity->thread.ptr;
|
void *thread_ptr = entity->thread.ptr;
|
||||||
supplement_thread_base_entry_point(func, thread_ptr);
|
supplement_thread_base_entry_point(func, thread_ptr);
|
||||||
@@ -160,7 +160,7 @@ now_time_us(void)
|
|||||||
LARGE_INTEGER large_int_counter;
|
LARGE_INTEGER large_int_counter;
|
||||||
if(QueryPerformanceCounter(&large_int_counter))
|
if(QueryPerformanceCounter(&large_int_counter))
|
||||||
{
|
{
|
||||||
result = (large_int_counter.QuadPart*Million(1))/os_w32_state.microsecond_resolution;
|
result = (large_int_counter.QuadPart*Million(1))/w32_state.microsecond_resolution;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -170,7 +170,7 @@ now_time_unix(void)
|
|||||||
{
|
{
|
||||||
FILETIME file_time;
|
FILETIME file_time;
|
||||||
GetSystemTimeAsFileTime(&file_time);
|
GetSystemTimeAsFileTime(&file_time);
|
||||||
U32 unix_time = os_w32_unix_time_from_file_time(file_time);
|
U32 unix_time = w32_unix_time_from_file_time(file_time);
|
||||||
return unix_time;
|
return unix_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ now_time_universal(void)
|
|||||||
SYSTEMTIME systime = {0};
|
SYSTEMTIME systime = {0};
|
||||||
GetSystemTime(&systime);
|
GetSystemTime(&systime);
|
||||||
DateTime result = {0};
|
DateTime result = {0};
|
||||||
os_w32_date_time_from_system_time(&result, &systime);
|
w32_date_time_from_system_time(&result, &systime);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,14 +188,14 @@ internal DateTime
|
|||||||
universal_from_local_time(DateTime *date_time)
|
universal_from_local_time(DateTime *date_time)
|
||||||
{
|
{
|
||||||
SYSTEMTIME systime = {0};
|
SYSTEMTIME systime = {0};
|
||||||
os_w32_system_time_from_date_time(&systime, date_time);
|
w32_system_time_from_date_time(&systime, date_time);
|
||||||
FILETIME ftime = {0};
|
FILETIME ftime = {0};
|
||||||
SystemTimeToFileTime(&systime, &ftime);
|
SystemTimeToFileTime(&systime, &ftime);
|
||||||
FILETIME ftime_local = {0};
|
FILETIME ftime_local = {0};
|
||||||
LocalFileTimeToFileTime(&ftime, &ftime_local);
|
LocalFileTimeToFileTime(&ftime, &ftime_local);
|
||||||
FileTimeToSystemTime(&ftime_local, &systime);
|
FileTimeToSystemTime(&ftime_local, &systime);
|
||||||
DateTime result = {0};
|
DateTime result = {0};
|
||||||
os_w32_date_time_from_system_time(&result, &systime);
|
w32_date_time_from_system_time(&result, &systime);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,14 +203,14 @@ internal DateTime
|
|||||||
local_from_universal_time(DateTime *date_time)
|
local_from_universal_time(DateTime *date_time)
|
||||||
{
|
{
|
||||||
SYSTEMTIME systime = {0};
|
SYSTEMTIME systime = {0};
|
||||||
os_w32_system_time_from_date_time(&systime, date_time);
|
w32_system_time_from_date_time(&systime, date_time);
|
||||||
FILETIME ftime = {0};
|
FILETIME ftime = {0};
|
||||||
SystemTimeToFileTime(&systime, &ftime);
|
SystemTimeToFileTime(&systime, &ftime);
|
||||||
FILETIME ftime_local = {0};
|
FILETIME ftime_local = {0};
|
||||||
FileTimeToLocalFileTime(&ftime, &ftime_local);
|
FileTimeToLocalFileTime(&ftime, &ftime_local);
|
||||||
FileTimeToSystemTime(&ftime_local, &systime);
|
FileTimeToSystemTime(&ftime_local, &systime);
|
||||||
DateTime result = {0};
|
DateTime result = {0};
|
||||||
os_w32_date_time_from_system_time(&result, &systime);
|
w32_date_time_from_system_time(&result, &systime);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ shared_memory_view_close(SharedMemory handle, void *ptr, Rng1U64 range)
|
|||||||
internal SystemInfo *
|
internal SystemInfo *
|
||||||
get_system_info(void)
|
get_system_info(void)
|
||||||
{
|
{
|
||||||
return &os_w32_state.system_info;
|
return &w32_state.system_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -425,10 +425,10 @@ set_platform_thread_name(String8 name)
|
|||||||
internal Thread
|
internal Thread
|
||||||
thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Thread);
|
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Thread);
|
||||||
entity->thread.func = f;
|
entity->thread.func = f;
|
||||||
entity->thread.ptr = p;
|
entity->thread.ptr = p;
|
||||||
entity->thread.handle = CreateThread(0, 0, os_w32_thread_entry_point, entity, 0, &entity->thread.tid);
|
entity->thread.handle = CreateThread(0, 0, w32_thread_entry_point, entity, 0, &entity->thread.tid);
|
||||||
Thread result = {IntFromPtr(entity)};
|
Thread result = {IntFromPtr(entity)};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -436,14 +436,14 @@ thread_launch(ThreadEntryPointFunctionType *f, void *p)
|
|||||||
internal B32
|
internal B32
|
||||||
thread_join(Thread thread, U64 endt_us)
|
thread_join(Thread thread, U64 endt_us)
|
||||||
{
|
{
|
||||||
DWORD sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
DWORD sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity *)PtrFromInt(thread.u64[0]);
|
W32_Entity *entity = (W32_Entity *)PtrFromInt(thread.u64[0]);
|
||||||
DWORD wait_result = WAIT_OBJECT_0;
|
DWORD wait_result = WAIT_OBJECT_0;
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
wait_result = WaitForSingleObject(entity->thread.handle, sleep_ms);
|
wait_result = WaitForSingleObject(entity->thread.handle, sleep_ms);
|
||||||
CloseHandle(entity->thread.handle);
|
CloseHandle(entity->thread.handle);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
return (wait_result == WAIT_OBJECT_0);
|
return (wait_result == WAIT_OBJECT_0);
|
||||||
}
|
}
|
||||||
@@ -451,11 +451,11 @@ thread_join(Thread thread, U64 endt_us)
|
|||||||
internal void
|
internal void
|
||||||
thread_detach(Thread thread)
|
thread_detach(Thread thread)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(thread.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(thread.u64[0]);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
CloseHandle(entity->thread.handle);
|
CloseHandle(entity->thread.handle);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,7 +486,7 @@ safe_call(ThreadEntryPointFunctionType *func, ThreadEntryPointFunctionType *fail
|
|||||||
internal Mutex
|
internal Mutex
|
||||||
mutex_alloc(void)
|
mutex_alloc(void)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Mutex);
|
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Mutex);
|
||||||
InitializeCriticalSection(&entity->mutex);
|
InitializeCriticalSection(&entity->mutex);
|
||||||
Mutex result = {IntFromPtr(entity)};
|
Mutex result = {IntFromPtr(entity)};
|
||||||
return result;
|
return result;
|
||||||
@@ -495,22 +495,22 @@ mutex_alloc(void)
|
|||||||
internal void
|
internal void
|
||||||
mutex_release(Mutex mutex)
|
mutex_release(Mutex mutex)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||||
DeleteCriticalSection(&entity->mutex);
|
DeleteCriticalSection(&entity->mutex);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
mutex_take(Mutex mutex)
|
mutex_take(Mutex mutex)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||||
EnterCriticalSection(&entity->mutex);
|
EnterCriticalSection(&entity->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
mutex_drop(Mutex mutex)
|
mutex_drop(Mutex mutex)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||||
LeaveCriticalSection(&entity->mutex);
|
LeaveCriticalSection(&entity->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,7 +519,7 @@ mutex_drop(Mutex mutex)
|
|||||||
internal RWMutex
|
internal RWMutex
|
||||||
rw_mutex_alloc(void)
|
rw_mutex_alloc(void)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_RWMutex);
|
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_RWMutex);
|
||||||
InitializeSRWLock(&entity->rw_mutex);
|
InitializeSRWLock(&entity->rw_mutex);
|
||||||
RWMutex result = {IntFromPtr(entity)};
|
RWMutex result = {IntFromPtr(entity)};
|
||||||
return result;
|
return result;
|
||||||
@@ -528,14 +528,14 @@ rw_mutex_alloc(void)
|
|||||||
internal void
|
internal void
|
||||||
rw_mutex_release(RWMutex rw_mutex)
|
rw_mutex_release(RWMutex rw_mutex)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
rw_mutex_take(RWMutex rw_mutex, B32 write_mode)
|
rw_mutex_take(RWMutex rw_mutex, B32 write_mode)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||||
if(write_mode)
|
if(write_mode)
|
||||||
{
|
{
|
||||||
AcquireSRWLockExclusive(&entity->rw_mutex);
|
AcquireSRWLockExclusive(&entity->rw_mutex);
|
||||||
@@ -549,7 +549,7 @@ rw_mutex_take(RWMutex rw_mutex, B32 write_mode)
|
|||||||
internal void
|
internal void
|
||||||
rw_mutex_drop(RWMutex rw_mutex, B32 write_mode)
|
rw_mutex_drop(RWMutex rw_mutex, B32 write_mode)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(rw_mutex.u64[0]);
|
||||||
if(write_mode)
|
if(write_mode)
|
||||||
{
|
{
|
||||||
ReleaseSRWLockExclusive(&entity->rw_mutex);
|
ReleaseSRWLockExclusive(&entity->rw_mutex);
|
||||||
@@ -565,7 +565,7 @@ rw_mutex_drop(RWMutex rw_mutex, B32 write_mode)
|
|||||||
internal CondVar
|
internal CondVar
|
||||||
cond_var_alloc(void)
|
cond_var_alloc(void)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_ConditionVariable);
|
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_ConditionVariable);
|
||||||
InitializeConditionVariable(&entity->cv);
|
InitializeConditionVariable(&entity->cv);
|
||||||
CondVar result = {IntFromPtr(entity)};
|
CondVar result = {IntFromPtr(entity)};
|
||||||
return result;
|
return result;
|
||||||
@@ -574,19 +574,19 @@ cond_var_alloc(void)
|
|||||||
internal void
|
internal void
|
||||||
cond_var_release(CondVar cv)
|
cond_var_release(CondVar cv)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
||||||
{
|
{
|
||||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||||
BOOL result = 0;
|
BOOL result = 0;
|
||||||
if(sleep_ms > 0)
|
if(sleep_ms > 0)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||||
OS_W32_Entity *mutex_entity = (OS_W32_Entity*)PtrFromInt(mutex.u64[0]);
|
W32_Entity *mutex_entity = (W32_Entity*)PtrFromInt(mutex.u64[0]);
|
||||||
result = SleepConditionVariableCS(&entity->cv, &mutex_entity->mutex, sleep_ms);
|
result = SleepConditionVariableCS(&entity->cv, &mutex_entity->mutex, sleep_ms);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -595,12 +595,12 @@ cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us)
|
|||||||
internal B32
|
internal B32
|
||||||
cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
||||||
{
|
{
|
||||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||||
BOOL result = 0;
|
BOOL result = 0;
|
||||||
if(sleep_ms > 0)
|
if(sleep_ms > 0)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||||
OS_W32_Entity *mutex_entity = (OS_W32_Entity*)PtrFromInt(mutex_rw.u64[0]);
|
W32_Entity *mutex_entity = (W32_Entity*)PtrFromInt(mutex_rw.u64[0]);
|
||||||
result = SleepConditionVariableSRW(&entity->cv, &mutex_entity->rw_mutex, sleep_ms,
|
result = SleepConditionVariableSRW(&entity->cv, &mutex_entity->rw_mutex, sleep_ms,
|
||||||
write_mode ? 0 : CONDITION_VARIABLE_LOCKMODE_SHARED);
|
write_mode ? 0 : CONDITION_VARIABLE_LOCKMODE_SHARED);
|
||||||
}
|
}
|
||||||
@@ -610,14 +610,14 @@ cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 write_mode, U64 endt_us)
|
|||||||
internal void
|
internal void
|
||||||
cond_var_signal(CondVar cv)
|
cond_var_signal(CondVar cv)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||||
WakeConditionVariable(&entity->cv);
|
WakeConditionVariable(&entity->cv);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
cond_var_broadcast(CondVar cv)
|
cond_var_broadcast(CondVar cv)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(cv.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(cv.u64[0]);
|
||||||
WakeAllConditionVariable(&entity->cv);
|
WakeAllConditionVariable(&entity->cv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -662,7 +662,7 @@ semaphore_close(Semaphore semaphore)
|
|||||||
internal B32
|
internal B32
|
||||||
semaphore_take(Semaphore semaphore, U64 endt_us)
|
semaphore_take(Semaphore semaphore, U64 endt_us)
|
||||||
{
|
{
|
||||||
U32 sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
U32 sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||||
HANDLE handle = (HANDLE)semaphore.u64[0];
|
HANDLE handle = (HANDLE)semaphore.u64[0];
|
||||||
DWORD wait_result = WaitForSingleObject(handle, sleep_ms);
|
DWORD wait_result = WaitForSingleObject(handle, sleep_ms);
|
||||||
B32 result = (wait_result == WAIT_OBJECT_0);
|
B32 result = (wait_result == WAIT_OBJECT_0);
|
||||||
@@ -681,7 +681,7 @@ semaphore_drop(Semaphore semaphore)
|
|||||||
internal Barrier
|
internal Barrier
|
||||||
barrier_alloc(U64 count)
|
barrier_alloc(U64 count)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = os_w32_entity_alloc(OS_W32_EntityKind_Barrier);
|
W32_Entity *entity = w32_entity_alloc(W32_EntityKind_Barrier);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
BOOL init_good = InitializeSynchronizationBarrier(&entity->sb, count, -1);
|
BOOL init_good = InitializeSynchronizationBarrier(&entity->sb, count, -1);
|
||||||
@@ -694,18 +694,18 @@ barrier_alloc(U64 count)
|
|||||||
internal void
|
internal void
|
||||||
barrier_release(Barrier barrier)
|
barrier_release(Barrier barrier)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(barrier.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
DeleteSynchronizationBarrier(&entity->sb);
|
DeleteSynchronizationBarrier(&entity->sb);
|
||||||
os_w32_entity_release(entity);
|
w32_entity_release(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
barrier_wait(Barrier barrier)
|
barrier_wait(Barrier barrier)
|
||||||
{
|
{
|
||||||
OS_W32_Entity *entity = (OS_W32_Entity*)PtrFromInt(barrier.u64[0]);
|
W32_Entity *entity = (W32_Entity*)PtrFromInt(barrier.u64[0]);
|
||||||
if(entity != 0)
|
if(entity != 0)
|
||||||
{
|
{
|
||||||
EnterSynchronizationBarrier(&entity->sb, 0);
|
EnterSynchronizationBarrier(&entity->sb, 0);
|
||||||
@@ -826,7 +826,7 @@ file_set_time(File file, DateTime time)
|
|||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
HANDLE handle = (HANDLE)file.u64[0];
|
HANDLE handle = (HANDLE)file.u64[0];
|
||||||
SYSTEMTIME system_time = {0};
|
SYSTEMTIME system_time = {0};
|
||||||
os_w32_system_time_from_date_time(&system_time, &time);
|
w32_system_time_from_date_time(&system_time, &time);
|
||||||
FILETIME file_time = {0};
|
FILETIME file_time = {0};
|
||||||
result = (SystemTimeToFileTime(&system_time, &file_time) &&
|
result = (SystemTimeToFileTime(&system_time, &file_time) &&
|
||||||
SetFileTime(handle, &file_time, &file_time, &file_time));
|
SetFileTime(handle, &file_time, &file_time, &file_time));
|
||||||
@@ -846,9 +846,9 @@ properties_from_file(File file)
|
|||||||
U32 size_lo = info.nFileSizeLow;
|
U32 size_lo = info.nFileSizeLow;
|
||||||
U32 size_hi = info.nFileSizeHigh;
|
U32 size_hi = info.nFileSizeHigh;
|
||||||
props.size = (U64)size_lo | (((U64)size_hi)<<32);
|
props.size = (U64)size_lo | (((U64)size_hi)<<32);
|
||||||
os_w32_dense_time_from_file_time(&props.modified, &info.ftLastWriteTime);
|
w32_dense_time_from_file_time(&props.modified, &info.ftLastWriteTime);
|
||||||
os_w32_dense_time_from_file_time(&props.created, &info.ftCreationTime);
|
w32_dense_time_from_file_time(&props.created, &info.ftCreationTime);
|
||||||
props.flags = os_w32_file_property_flags_from_dwFileAttributes(info.dwFileAttributes);
|
props.flags = w32_file_property_flags_from_dwFileAttributes(info.dwFileAttributes);
|
||||||
}
|
}
|
||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
@@ -968,9 +968,9 @@ properties_from_file_path(String8 path)
|
|||||||
if(handle != INVALID_HANDLE_VALUE)
|
if(handle != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
props.size = Compose64Bit(find_data.nFileSizeHigh, find_data.nFileSizeLow);
|
props.size = Compose64Bit(find_data.nFileSizeHigh, find_data.nFileSizeLow);
|
||||||
os_w32_dense_time_from_file_time(&props.created, &find_data.ftCreationTime);
|
w32_dense_time_from_file_time(&props.created, &find_data.ftCreationTime);
|
||||||
os_w32_dense_time_from_file_time(&props.modified, &find_data.ftLastWriteTime);
|
w32_dense_time_from_file_time(&props.modified, &find_data.ftLastWriteTime);
|
||||||
props.flags = os_w32_file_property_flags_from_dwFileAttributes(find_data.dwFileAttributes);
|
props.flags = w32_file_property_flags_from_dwFileAttributes(find_data.dwFileAttributes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1093,7 +1093,7 @@ file_iter_begin(Arena *arena, String8 path, FileIterFlags flags)
|
|||||||
String16 path16 = str16_from_8(scratch.arena, path_with_wildcard);
|
String16 path16 = str16_from_8(scratch.arena, path_with_wildcard);
|
||||||
FileIter *iter = push_array(arena, FileIter, 1);
|
FileIter *iter = push_array(arena, FileIter, 1);
|
||||||
iter->flags = flags;
|
iter->flags = flags;
|
||||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||||
if(path.size == 0)
|
if(path.size == 0)
|
||||||
{
|
{
|
||||||
w32_iter->is_volume_iter = 1;
|
w32_iter->is_volume_iter = 1;
|
||||||
@@ -1124,7 +1124,7 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
|||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
FileIterFlags flags = iter->flags;
|
FileIterFlags flags = iter->flags;
|
||||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||||
switch(w32_iter->is_volume_iter)
|
switch(w32_iter->is_volume_iter)
|
||||||
{
|
{
|
||||||
//- rjf: file iteration
|
//- rjf: file iteration
|
||||||
@@ -1166,9 +1166,9 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
|||||||
if (usable_file){
|
if (usable_file){
|
||||||
info_out->name = str8_from_16(arena, str16_cstring((U16*)file_name));
|
info_out->name = str8_from_16(arena, str16_cstring((U16*)file_name));
|
||||||
info_out->props.size = (U64)w32_iter->find_data.nFileSizeLow | (((U64)w32_iter->find_data.nFileSizeHigh)<<32);
|
info_out->props.size = (U64)w32_iter->find_data.nFileSizeLow | (((U64)w32_iter->find_data.nFileSizeHigh)<<32);
|
||||||
os_w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
w32_dense_time_from_file_time(&info_out->props.created, &w32_iter->find_data.ftCreationTime);
|
||||||
os_w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
w32_dense_time_from_file_time(&info_out->props.modified, &w32_iter->find_data.ftLastWriteTime);
|
||||||
info_out->props.flags = os_w32_file_property_flags_from_dwFileAttributes(attributes);
|
info_out->props.flags = w32_file_property_flags_from_dwFileAttributes(attributes);
|
||||||
result = 1;
|
result = 1;
|
||||||
if (!FindNextFileW(w32_iter->handle, &w32_iter->find_data)){
|
if (!FindNextFileW(w32_iter->handle, &w32_iter->find_data)){
|
||||||
iter->flags |= FileIterFlag_Done;
|
iter->flags |= FileIterFlag_Done;
|
||||||
@@ -1202,7 +1202,7 @@ file_iter_next(Arena *arena, FileIter *iter, FileInfo *info_out)
|
|||||||
internal void
|
internal void
|
||||||
file_iter_end(FileIter *iter)
|
file_iter_end(FileIter *iter)
|
||||||
{
|
{
|
||||||
OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory;
|
W32_FileIter *w32_iter = (W32_FileIter*)iter->memory;
|
||||||
HANDLE zero_handle;
|
HANDLE zero_handle;
|
||||||
MemoryZeroStruct(&zero_handle);
|
MemoryZeroStruct(&zero_handle);
|
||||||
if(!MemoryMatchStruct(&zero_handle, &w32_iter->handle))
|
if(!MemoryMatchStruct(&zero_handle, &w32_iter->handle))
|
||||||
@@ -1248,7 +1248,7 @@ abort_self(S32 exit_code)
|
|||||||
internal ProcessInfo *
|
internal ProcessInfo *
|
||||||
get_process_info(void)
|
get_process_info(void)
|
||||||
{
|
{
|
||||||
return &os_w32_state.process_info;
|
return &w32_state.process_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
@@ -1274,7 +1274,7 @@ get_process_start_time_unix(void)
|
|||||||
FILETIME user_time;
|
FILETIME user_time;
|
||||||
if(GetProcessTimes(handle, &start_time, &exit_time, &kernel_time, &user_time))
|
if(GetProcessTimes(handle, &start_time, &exit_time, &kernel_time, &user_time))
|
||||||
{
|
{
|
||||||
result = os_w32_unix_time_from_file_time(start_time);
|
result = w32_unix_time_from_file_time(start_time);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1315,7 +1315,7 @@ process_launch(ProcessLaunchParams *params)
|
|||||||
{
|
{
|
||||||
str8_list_push(scratch.arena, &all_opts, n->string);
|
str8_list_push(scratch.arena, &all_opts, n->string);
|
||||||
}
|
}
|
||||||
for(String8Node *n = os_w32_state.process_info.environment.first; n != 0; n = n->next)
|
for(String8Node *n = w32_state.process_info.environment.first; n != 0; n = n->next)
|
||||||
{
|
{
|
||||||
str8_list_push(scratch.arena, &all_opts, n->string);
|
str8_list_push(scratch.arena, &all_opts, n->string);
|
||||||
}
|
}
|
||||||
@@ -1386,7 +1386,7 @@ internal B32
|
|||||||
process_join(Process process, U64 endt_us, U64 *exit_code_out)
|
process_join(Process process, U64 endt_us, U64 *exit_code_out)
|
||||||
{
|
{
|
||||||
HANDLE process_handle = (HANDLE)(process.u64[0]);
|
HANDLE process_handle = (HANDLE)(process.u64[0]);
|
||||||
DWORD sleep_ms = os_w32_sleep_ms_from_endt_us(endt_us);
|
DWORD sleep_ms = w32_sleep_ms_from_endt_us(endt_us);
|
||||||
DWORD result = WaitForSingleObject(process_handle, sleep_ms);
|
DWORD result = WaitForSingleObject(process_handle, sleep_ms);
|
||||||
B32 process_joined = (result == WAIT_OBJECT_0);
|
B32 process_joined = (result == WAIT_OBJECT_0);
|
||||||
if(process_joined && exit_code_out)
|
if(process_joined && exit_code_out)
|
||||||
@@ -1784,22 +1784,22 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
|||||||
// (we need to set up some basics before this layer can supply
|
// (we need to set up some basics before this layer can supply
|
||||||
// memory allocation primitives)
|
// memory allocation primitives)
|
||||||
{
|
{
|
||||||
os_w32_state.microsecond_resolution = 1;
|
w32_state.microsecond_resolution = 1;
|
||||||
LARGE_INTEGER large_int_resolution;
|
LARGE_INTEGER large_int_resolution;
|
||||||
if(QueryPerformanceFrequency(&large_int_resolution))
|
if(QueryPerformanceFrequency(&large_int_resolution))
|
||||||
{
|
{
|
||||||
os_w32_state.microsecond_resolution = large_int_resolution.QuadPart;
|
w32_state.microsecond_resolution = large_int_resolution.QuadPart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
SystemInfo *info = &os_w32_state.system_info;
|
SystemInfo *info = &w32_state.system_info;
|
||||||
info->logical_processor_count = (U64)sysinfo.dwNumberOfProcessors;
|
info->logical_processor_count = (U64)sysinfo.dwNumberOfProcessors;
|
||||||
info->page_size = sysinfo.dwPageSize;
|
info->page_size = sysinfo.dwPageSize;
|
||||||
info->large_page_size = GetLargePageMinimum();
|
info->large_page_size = GetLargePageMinimum();
|
||||||
info->allocation_granularity = sysinfo.dwAllocationGranularity;
|
info->allocation_granularity = sysinfo.dwAllocationGranularity;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
ProcessInfo *info = &os_w32_state.process_info;
|
ProcessInfo *info = &w32_state.process_info;
|
||||||
info->large_pages_allowed = large_pages_allowed;
|
info->large_pages_allowed = large_pages_allowed;
|
||||||
info->pid = GetCurrentProcessId();
|
info->pid = GetCurrentProcessId();
|
||||||
}
|
}
|
||||||
@@ -1820,7 +1820,7 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
|||||||
str8_match(arg8, str8_lit("-large_pages"), StringMatchFlag_CaseInsensitive))
|
str8_match(arg8, str8_lit("-large_pages"), StringMatchFlag_CaseInsensitive))
|
||||||
{
|
{
|
||||||
arena_default_flags = ArenaFlag_LargePages;
|
arena_default_flags = ArenaFlag_LargePages;
|
||||||
arena_default_reserve_size = Max(MB(64), os_w32_state.system_info.large_page_size);
|
arena_default_reserve_size = Max(MB(64), w32_state.system_info.large_page_size);
|
||||||
arena_default_commit_size = arena_default_reserve_size;
|
arena_default_commit_size = arena_default_reserve_size;
|
||||||
}
|
}
|
||||||
if(str8_match(arg8, str8_lit("--gen_crash_dump"), StringMatchFlag_CaseInsensitive) ||
|
if(str8_match(arg8, str8_lit("--gen_crash_dump"), StringMatchFlag_CaseInsensitive) ||
|
||||||
@@ -1838,9 +1838,9 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
|||||||
//- rjf: set up dynamically-alloc'd state
|
//- rjf: set up dynamically-alloc'd state
|
||||||
Arena *arena = arena_alloc();
|
Arena *arena = arena_alloc();
|
||||||
{
|
{
|
||||||
os_w32_state.arena = arena;
|
w32_state.arena = arena;
|
||||||
{
|
{
|
||||||
SystemInfo *info = &os_w32_state.system_info;
|
SystemInfo *info = &w32_state.system_info;
|
||||||
U8 buffer[MAX_COMPUTERNAME_LENGTH + 1] = {0};
|
U8 buffer[MAX_COMPUTERNAME_LENGTH + 1] = {0};
|
||||||
DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
|
DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
|
||||||
if(GetComputerNameA((char*)buffer, &size))
|
if(GetComputerNameA((char*)buffer, &size))
|
||||||
@@ -1850,7 +1850,7 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
ProcessInfo *info = &os_w32_state.process_info;
|
ProcessInfo *info = &w32_state.process_info;
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
DWORD size = KB(32);
|
DWORD size = KB(32);
|
||||||
@@ -1896,8 +1896,8 @@ w32_entry_point_caller(int argc, WCHAR **wargv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: set up entity storage
|
//- rjf: set up entity storage
|
||||||
InitializeCriticalSection(&os_w32_state.entity_mutex);
|
InitializeCriticalSection(&w32_state.entity_mutex);
|
||||||
os_w32_state.entity_arena = arena_alloc();
|
w32_state.entity_arena = arena_alloc();
|
||||||
|
|
||||||
//- rjf: call into "real" entry point
|
//- rjf: call into "real" entry point
|
||||||
main_thread_base_entry_point(argc, argv);
|
main_thread_base_entry_point(argc, argv);
|
||||||
|
|||||||
+28
-28
@@ -28,8 +28,8 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: File Iterator Types
|
//~ rjf: File Iterator Types
|
||||||
|
|
||||||
typedef struct OS_W32_FileIter OS_W32_FileIter;
|
typedef struct W32_FileIter W32_FileIter;
|
||||||
struct OS_W32_FileIter
|
struct W32_FileIter
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
WIN32_FIND_DATAW find_data;
|
WIN32_FIND_DATAW find_data;
|
||||||
@@ -37,27 +37,27 @@ struct OS_W32_FileIter
|
|||||||
String8Array drive_strings;
|
String8Array drive_strings;
|
||||||
U64 drive_strings_iter_idx;
|
U64 drive_strings_iter_idx;
|
||||||
};
|
};
|
||||||
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(OS_W32_FileIter), file_iter_memory_size);
|
StaticAssert(sizeof(Member(FileIter, memory)) >= sizeof(W32_FileIter), file_iter_memory_size);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Types
|
//~ rjf: Entity Types
|
||||||
|
|
||||||
typedef enum OS_W32_EntityKind
|
typedef enum W32_EntityKind
|
||||||
{
|
{
|
||||||
OS_W32_EntityKind_Null,
|
W32_EntityKind_Null,
|
||||||
OS_W32_EntityKind_Thread,
|
W32_EntityKind_Thread,
|
||||||
OS_W32_EntityKind_Mutex,
|
W32_EntityKind_Mutex,
|
||||||
OS_W32_EntityKind_RWMutex,
|
W32_EntityKind_RWMutex,
|
||||||
OS_W32_EntityKind_ConditionVariable,
|
W32_EntityKind_ConditionVariable,
|
||||||
OS_W32_EntityKind_Barrier,
|
W32_EntityKind_Barrier,
|
||||||
}
|
}
|
||||||
OS_W32_EntityKind;
|
W32_EntityKind;
|
||||||
|
|
||||||
typedef struct OS_W32_Entity OS_W32_Entity;
|
typedef struct W32_Entity W32_Entity;
|
||||||
struct OS_W32_Entity
|
struct W32_Entity
|
||||||
{
|
{
|
||||||
OS_W32_Entity *next;
|
W32_Entity *next;
|
||||||
OS_W32_EntityKind kind;
|
W32_EntityKind kind;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
@@ -77,8 +77,8 @@ struct OS_W32_Entity
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: State
|
//~ rjf: State
|
||||||
|
|
||||||
typedef struct OS_W32_State OS_W32_State;
|
typedef struct W32_State W32_State;
|
||||||
struct OS_W32_State
|
struct W32_State
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
|
|
||||||
@@ -90,37 +90,37 @@ struct OS_W32_State
|
|||||||
// rjf: entity storage
|
// rjf: entity storage
|
||||||
CRITICAL_SECTION entity_mutex;
|
CRITICAL_SECTION entity_mutex;
|
||||||
Arena *entity_arena;
|
Arena *entity_arena;
|
||||||
OS_W32_Entity *entity_free;
|
W32_Entity *entity_free;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals
|
//~ rjf: Globals
|
||||||
|
|
||||||
global OS_W32_State os_w32_state = {0};
|
global W32_State w32_state = {0};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: File Info Conversion Helpers
|
//~ rjf: File Info Conversion Helpers
|
||||||
|
|
||||||
internal FilePropertyFlags os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes);
|
internal FilePropertyFlags w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes);
|
||||||
internal void os_w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes);
|
internal void w32_file_properties_from_attribute_data(FileProperties *properties, WIN32_FILE_ATTRIBUTE_DATA *attributes);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Time Conversion Helpers
|
//~ rjf: Time Conversion Helpers
|
||||||
|
|
||||||
internal void os_w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in);
|
internal void w32_date_time_from_system_time(DateTime *out, SYSTEMTIME *in);
|
||||||
internal void os_w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in);
|
internal void w32_system_time_from_date_time(SYSTEMTIME *out, DateTime *in);
|
||||||
internal void os_w32_dense_time_from_file_time(DenseTime *out, FILETIME *in);
|
internal void w32_dense_time_from_file_time(DenseTime *out, FILETIME *in);
|
||||||
internal U32 os_w32_sleep_ms_from_endt_us(U64 endt_us);
|
internal U32 w32_sleep_ms_from_endt_us(U64 endt_us);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Functions
|
//~ rjf: Entity Functions
|
||||||
|
|
||||||
internal OS_W32_Entity *os_w32_entity_alloc(OS_W32_EntityKind kind);
|
internal W32_Entity *w32_entity_alloc(W32_EntityKind kind);
|
||||||
internal void os_w32_entity_release(OS_W32_Entity *entity);
|
internal void w32_entity_release(W32_Entity *entity);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Thread Entry Point
|
//~ rjf: Thread Entry Point
|
||||||
|
|
||||||
internal DWORD os_w32_thread_entry_point(void *ptr);
|
internal DWORD w32_thread_entry_point(void *ptr);
|
||||||
|
|
||||||
#endif // WIN32_BASE_H
|
#endif // WIN32_BASE_H
|
||||||
|
|||||||
+327
-347
File diff suppressed because it is too large
Load Diff
+192
-198
@@ -1,8 +1,8 @@
|
|||||||
// Copyright (c) Epic Games Tools
|
// Copyright (c) Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
#ifndef DEMON_CORE_WIN32_H
|
#ifndef WIN32_DEMON_H
|
||||||
#define DEMON_CORE_WIN32_H
|
#define WIN32_DEMON_H
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Windows Includes
|
//~ rjf: Windows Includes
|
||||||
@@ -15,173 +15,173 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Win32 Exception Codes
|
//~ rjf: Win32 Exception Codes
|
||||||
|
|
||||||
#define DMN_W32_EXCEPTION_BREAKPOINT 0x80000003u
|
#define W32_DMN_EXCEPTION_BREAKPOINT 0x80000003u
|
||||||
#define DMN_W32_EXCEPTION_SINGLE_STEP 0x80000004u
|
#define W32_DMN_EXCEPTION_SINGLE_STEP 0x80000004u
|
||||||
#define DMN_W32_EXCEPTION_LONG_JUMP 0x80000026u
|
#define W32_DMN_EXCEPTION_LONG_JUMP 0x80000026u
|
||||||
#define DMN_W32_EXCEPTION_ACCESS_VIOLATION 0xC0000005u
|
#define W32_DMN_EXCEPTION_ACCESS_VIOLATION 0xC0000005u
|
||||||
#define DMN_W32_EXCEPTION_ARRAY_BOUNDS_EXCEEDED 0xC000008Cu
|
#define W32_DMN_EXCEPTION_ARRAY_BOUNDS_EXCEEDED 0xC000008Cu
|
||||||
#define DMN_W32_EXCEPTION_DATA_TYPE_MISALIGNMENT 0x80000002u
|
#define W32_DMN_EXCEPTION_DATA_TYPE_MISALIGNMENT 0x80000002u
|
||||||
#define DMN_W32_EXCEPTION_GUARD_PAGE_VIOLATION 0x80000001u
|
#define W32_DMN_EXCEPTION_GUARD_PAGE_VIOLATION 0x80000001u
|
||||||
#define DMN_W32_EXCEPTION_FLT_DENORMAL_OPERAND 0xC000008Du
|
#define W32_DMN_EXCEPTION_FLT_DENORMAL_OPERAND 0xC000008Du
|
||||||
#define DMN_W32_EXCEPTION_FLT_DEVIDE_BY_ZERO 0xC000008Eu
|
#define W32_DMN_EXCEPTION_FLT_DEVIDE_BY_ZERO 0xC000008Eu
|
||||||
#define DMN_W32_EXCEPTION_FLT_INEXACT_RESULT 0xC000008Fu
|
#define W32_DMN_EXCEPTION_FLT_INEXACT_RESULT 0xC000008Fu
|
||||||
#define DMN_W32_EXCEPTION_FLT_INVALID_OPERATION 0xC0000090u
|
#define W32_DMN_EXCEPTION_FLT_INVALID_OPERATION 0xC0000090u
|
||||||
#define DMN_W32_EXCEPTION_FLT_OVERFLOW 0xC0000091u
|
#define W32_DMN_EXCEPTION_FLT_OVERFLOW 0xC0000091u
|
||||||
#define DMN_W32_EXCEPTION_FLT_STACK_CHECK 0xC0000092u
|
#define W32_DMN_EXCEPTION_FLT_STACK_CHECK 0xC0000092u
|
||||||
#define DMN_W32_EXCEPTION_FLT_UNDERFLOW 0xC0000093u
|
#define W32_DMN_EXCEPTION_FLT_UNDERFLOW 0xC0000093u
|
||||||
#define DMN_W32_EXCEPTION_INT_DIVIDE_BY_ZERO 0xC0000094u
|
#define W32_DMN_EXCEPTION_INT_DIVIDE_BY_ZERO 0xC0000094u
|
||||||
#define DMN_W32_EXCEPTION_INT_OVERFLOW 0xC0000095u
|
#define W32_DMN_EXCEPTION_INT_OVERFLOW 0xC0000095u
|
||||||
#define DMN_W32_EXCEPTION_PRIVILEGED_INSTRUCTION 0xC0000096u
|
#define W32_DMN_EXCEPTION_PRIVILEGED_INSTRUCTION 0xC0000096u
|
||||||
#define DMN_W32_EXCEPTION_ILLEGAL_INSTRUCTION 0xC000001Du
|
#define W32_DMN_EXCEPTION_ILLEGAL_INSTRUCTION 0xC000001Du
|
||||||
#define DMN_W32_EXCEPTION_IN_PAGE_ERROR 0xC0000006u
|
#define W32_DMN_EXCEPTION_IN_PAGE_ERROR 0xC0000006u
|
||||||
#define DMN_W32_EXCEPTION_INVALID_DISPOSITION 0xC0000026u
|
#define W32_DMN_EXCEPTION_INVALID_DISPOSITION 0xC0000026u
|
||||||
#define DMN_W32_EXCEPTION_NONCONTINUABLE 0xC0000025u
|
#define W32_DMN_EXCEPTION_NONCONTINUABLE 0xC0000025u
|
||||||
#define DMN_W32_EXCEPTION_STACK_OVERFLOW 0xC00000FDu
|
#define W32_DMN_EXCEPTION_STACK_OVERFLOW 0xC00000FDu
|
||||||
#define DMN_W32_EXCEPTION_INVALID_HANDLE 0xC0000008u
|
#define W32_DMN_EXCEPTION_INVALID_HANDLE 0xC0000008u
|
||||||
#define DMN_W32_EXCEPTION_UNWIND_CONSOLIDATE 0x80000029u
|
#define W32_DMN_EXCEPTION_UNWIND_CONSOLIDATE 0x80000029u
|
||||||
#define DMN_W32_EXCEPTION_DLL_NOT_FOUND 0xC0000135u
|
#define W32_DMN_EXCEPTION_DLL_NOT_FOUND 0xC0000135u
|
||||||
#define DMN_W32_EXCEPTION_ORDINAL_NOT_FOUND 0xC0000138u
|
#define W32_DMN_EXCEPTION_ORDINAL_NOT_FOUND 0xC0000138u
|
||||||
#define DMN_W32_EXCEPTION_ENTRY_POINT_NOT_FOUND 0xC0000139u
|
#define W32_DMN_EXCEPTION_ENTRY_POINT_NOT_FOUND 0xC0000139u
|
||||||
#define DMN_W32_EXCEPTION_DLL_INIT_FAILED 0xC0000142u
|
#define W32_DMN_EXCEPTION_DLL_INIT_FAILED 0xC0000142u
|
||||||
#define DMN_W32_EXCEPTION_CONTROL_C_EXIT 0xC000013Au
|
#define W32_DMN_EXCEPTION_CONTROL_C_EXIT 0xC000013Au
|
||||||
#define DMN_W32_EXCEPTION_FLT_MULTIPLE_FAULTS 0xC00002B4u
|
#define W32_DMN_EXCEPTION_FLT_MULTIPLE_FAULTS 0xC00002B4u
|
||||||
#define DMN_W32_EXCEPTION_FLT_MULTIPLE_TRAPS 0xC00002B5u
|
#define W32_DMN_EXCEPTION_FLT_MULTIPLE_TRAPS 0xC00002B5u
|
||||||
#define DMN_W32_EXCEPTION_NAT_CONSUMPTION 0xC00002C9u
|
#define W32_DMN_EXCEPTION_NAT_CONSUMPTION 0xC00002C9u
|
||||||
#define DMN_W32_EXCEPTION_HEAP_CORRUPTION 0xC0000374u
|
#define W32_DMN_EXCEPTION_HEAP_CORRUPTION 0xC0000374u
|
||||||
#define DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN 0xC0000409u
|
#define W32_DMN_EXCEPTION_STACK_BUFFER_OVERRUN 0xC0000409u
|
||||||
#define DMN_W32_EXCEPTION_INVALID_CRUNTIME_PARAM 0xC0000417u
|
#define W32_DMN_EXCEPTION_INVALID_CRUNTIME_PARAM 0xC0000417u
|
||||||
#define DMN_W32_EXCEPTION_ASSERT_FAILURE 0xC0000420u
|
#define W32_DMN_EXCEPTION_ASSERT_FAILURE 0xC0000420u
|
||||||
#define DMN_W32_EXCEPTION_NO_MEMORY 0xC0000017u
|
#define W32_DMN_EXCEPTION_NO_MEMORY 0xC0000017u
|
||||||
#define DMN_W32_EXCEPTION_THROW 0xE06D7363u
|
#define W32_DMN_EXCEPTION_THROW 0xE06D7363u
|
||||||
#define DMN_W32_EXCEPTION_SET_THREAD_NAME 0x406d1388u
|
#define W32_DMN_EXCEPTION_SET_THREAD_NAME 0x406d1388u
|
||||||
#define DMN_w32_EXCEPTION_CLRDBG_NOTIFICATION 0x04242420u
|
#define DMN_w32_EXCEPTION_CLRDBG_NOTIFICATION 0x04242420u
|
||||||
#define DMN_w32_EXCEPTION_CLR 0xE0434352u
|
#define DMN_w32_EXCEPTION_CLR 0xE0434352u
|
||||||
#define DMN_W32_EXCEPTION_RADDBG_SET_THREAD_COLOR 0x00524144u
|
#define W32_DMN_EXCEPTION_RADDBG_SET_THREAD_COLOR 0x00524144u
|
||||||
#define DMN_W32_EXCEPTION_RADDBG_SET_BREAKPOINT 0x00524145u
|
#define W32_DMN_EXCEPTION_RADDBG_SET_BREAKPOINT 0x00524145u
|
||||||
#define DMN_W32_EXCEPTION_RADDBG_SET_VADDR_RANGE_NOTE 0x00524156u
|
#define W32_DMN_EXCEPTION_RADDBG_SET_VADDR_RANGE_NOTE 0x00524156u
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Win32 Exception ExceptionInformation Codes
|
//~ rjf: Win32 Exception ExceptionInformation Codes
|
||||||
//
|
//
|
||||||
// used as a subcode, apparently in all cases, for DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN.
|
// used as a subcode, apparently in all cases, for W32_DMN_EXCEPTION_STACK_BUFFER_OVERRUN.
|
||||||
// need to somehow pipe this through & interpret it correctly in outer layers... @fastfail
|
// need to somehow pipe this through & interpret it correctly in outer layers... @fastfail
|
||||||
|
|
||||||
#define DMN_W32_FAST_FAIL_LEGACY_GS_VIOLATION 0
|
#define W32_DMN_FAST_FAIL_LEGACY_GS_VIOLATION 0
|
||||||
#define DMN_W32_FAST_FAIL_VTGUARD_CHECK_FAILURE 1
|
#define W32_DMN_FAST_FAIL_VTGUARD_CHECK_FAILURE 1
|
||||||
#define DMN_W32_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
|
#define W32_DMN_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
|
||||||
#define DMN_W32_FAST_FAIL_CORRUPT_LIST_ENTRY 3
|
#define W32_DMN_FAST_FAIL_CORRUPT_LIST_ENTRY 3
|
||||||
#define DMN_W32_FAST_FAIL_INCORRECT_STACK 4
|
#define W32_DMN_FAST_FAIL_INCORRECT_STACK 4
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_ARG 5
|
#define W32_DMN_FAST_FAIL_INVALID_ARG 5
|
||||||
#define DMN_W32_FAST_FAIL_GS_COOKIE_INIT 6
|
#define W32_DMN_FAST_FAIL_GS_COOKIE_INIT 6
|
||||||
#define DMN_W32_FAST_FAIL_FATAL_APP_EXIT 7
|
#define W32_DMN_FAST_FAIL_FATAL_APP_EXIT 7
|
||||||
#define DMN_W32_FAST_FAIL_RANGE_CHECK_FAILURE 8
|
#define W32_DMN_FAST_FAIL_RANGE_CHECK_FAILURE 8
|
||||||
#define DMN_W32_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
|
#define W32_DMN_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
|
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
|
#define W32_DMN_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_FIBER_SWITCH 12
|
#define W32_DMN_FAST_FAIL_INVALID_FIBER_SWITCH 12
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_SET_OF_CONTEXT 13
|
#define W32_DMN_FAST_FAIL_INVALID_SET_OF_CONTEXT 13
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
#define W32_DMN_FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_JUMP_BUFFER 18
|
#define W32_DMN_FAST_FAIL_INVALID_JUMP_BUFFER 18
|
||||||
#define DMN_W32_FAST_FAIL_MRDATA_MODIFIED 19
|
#define W32_DMN_FAST_FAIL_MRDATA_MODIFIED 19
|
||||||
#define DMN_W32_FAST_FAIL_CERTIFICATION_FAILURE 20
|
#define W32_DMN_FAST_FAIL_CERTIFICATION_FAILURE 20
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
|
#define W32_DMN_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
|
||||||
#define DMN_W32_FAST_FAIL_CRYPTO_LIBRARY 22
|
#define W32_DMN_FAST_FAIL_CRYPTO_LIBRARY 22
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
|
#define W32_DMN_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_IMAGE_BASE 24
|
#define W32_DMN_FAST_FAIL_INVALID_IMAGE_BASE 24
|
||||||
#define DMN_W32_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
|
#define W32_DMN_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
|
||||||
#define DMN_W32_FAST_FAIL_UNSAFE_EXTENSION_CALL 26
|
#define W32_DMN_FAST_FAIL_UNSAFE_EXTENSION_CALL 26
|
||||||
#define DMN_W32_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
|
#define W32_DMN_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_BUFFER_ACCESS 28
|
#define W32_DMN_FAST_FAIL_INVALID_BUFFER_ACCESS 28
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_BALANCED_TREE 29
|
#define W32_DMN_FAST_FAIL_INVALID_BALANCED_TREE 29
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_NEXT_THREAD 30
|
#define W32_DMN_FAST_FAIL_INVALID_NEXT_THREAD 30
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_APCS_DISABLED 32
|
#define W32_DMN_FAST_FAIL_APCS_DISABLED 32
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_IDLE_STATE 33
|
#define W32_DMN_FAST_FAIL_INVALID_IDLE_STATE 33
|
||||||
#define DMN_W32_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
|
#define W32_DMN_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
|
||||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
|
#define W32_DMN_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_LOCK_STATE 36
|
#define W32_DMN_FAST_FAIL_INVALID_LOCK_STATE 36
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
|
#define W32_DMN_FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_LONGJUMP_TARGET 38
|
#define W32_DMN_FAST_FAIL_INVALID_LONGJUMP_TARGET 38
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
|
#define W32_DMN_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_THREAD 40
|
#define W32_DMN_FAST_FAIL_INVALID_THREAD 40
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_SS_FAILURE 44
|
#define W32_DMN_FAST_FAIL_GUARD_SS_FAILURE 44
|
||||||
#define DMN_W32_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
|
#define W32_DMN_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_CONTROL_STACK 47
|
#define W32_DMN_FAST_FAIL_INVALID_CONTROL_STACK 47
|
||||||
#define DMN_W32_FAST_FAIL_SET_CONTEXT_DENIED 48
|
#define W32_DMN_FAST_FAIL_SET_CONTEXT_DENIED 48
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_IAT 49
|
#define W32_DMN_FAST_FAIL_INVALID_IAT 49
|
||||||
#define DMN_W32_FAST_FAIL_HEAP_METADATA_CORRUPTION 50
|
#define W32_DMN_FAST_FAIL_HEAP_METADATA_CORRUPTION 50
|
||||||
#define DMN_W32_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
|
#define W32_DMN_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
|
||||||
#define DMN_W32_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_ENCLAVE_CALL_FAILURE 53
|
#define W32_DMN_FAST_FAIL_ENCLAVE_CALL_FAILURE 53
|
||||||
#define DMN_W32_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
|
#define W32_DMN_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
|
||||||
#define DMN_W32_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
|
#define W32_DMN_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
|
||||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_CALL 56
|
#define W32_DMN_FAST_FAIL_UNEXPECTED_CALL 56
|
||||||
#define DMN_W32_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
|
#define W32_DMN_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
|
||||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
|
#define W32_DMN_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
|
||||||
#define DMN_W32_FAST_FAIL_FLAGS_CORRUPTION 59
|
#define W32_DMN_FAST_FAIL_FLAGS_CORRUPTION 59
|
||||||
#define DMN_W32_FAST_FAIL_VEH_CORRUPTION 60
|
#define W32_DMN_FAST_FAIL_VEH_CORRUPTION 60
|
||||||
#define DMN_W32_FAST_FAIL_ETW_CORRUPTION 61
|
#define W32_DMN_FAST_FAIL_ETW_CORRUPTION 61
|
||||||
#define DMN_W32_FAST_FAIL_RIO_ABORT 62
|
#define W32_DMN_FAST_FAIL_RIO_ABORT 62
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_PFN 63
|
#define W32_DMN_FAST_FAIL_INVALID_PFN 63
|
||||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
|
#define W32_DMN_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
|
||||||
#define DMN_W32_FAST_FAIL_CAST_GUARD 65 // Known to compiler, must retain value 65
|
#define W32_DMN_FAST_FAIL_CAST_GUARD 65 // Known to compiler, must retain value 65
|
||||||
#define DMN_W32_FAST_FAIL_HOST_VISIBILITY_CHANGE 66
|
#define W32_DMN_FAST_FAIL_HOST_VISIBILITY_CHANGE 66
|
||||||
#define DMN_W32_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
|
#define W32_DMN_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
|
||||||
#define DMN_W32_FAST_FAIL_PATCH_CALLBACK_FAILED 68
|
#define W32_DMN_FAST_FAIL_PATCH_CALLBACK_FAILED 68
|
||||||
#define DMN_W32_FAST_FAIL_NTDLL_PATCH_FAILED 69
|
#define W32_DMN_FAST_FAIL_NTDLL_PATCH_FAILED 69
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_FLS_DATA 70
|
#define W32_DMN_FAST_FAIL_INVALID_FLS_DATA 70
|
||||||
#define DMN_W32_FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
|
#define W32_DMN_FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Win32 Register Codes
|
//~ rjf: Win32 Register Codes
|
||||||
|
|
||||||
#define DMN_W32_CTX_X86 0x00010000
|
#define W32_DMN_CTX_X86 0x00010000
|
||||||
#define DMN_W32_CTX_X64 0x00100000
|
#define W32_DMN_CTX_X64 0x00100000
|
||||||
|
|
||||||
#define DMN_W32_CTX_INTEL_CONTROL 0x0001 // segss, rsp, segcs, rip, and rflags
|
#define W32_DMN_CTX_INTEL_CONTROL 0x0001 // segss, rsp, segcs, rip, and rflags
|
||||||
#define DMN_W32_CTX_INTEL_INTEGER 0x0002 // rax, rcx, rdx, rbx, rbp, rsi, rdi, and r8-r15
|
#define W32_DMN_CTX_INTEL_INTEGER 0x0002 // rax, rcx, rdx, rbx, rbp, rsi, rdi, and r8-r15
|
||||||
#define DMN_W32_CTX_INTEL_SEGMENTS 0x0004 // segds, seges, segfs, and seggs
|
#define W32_DMN_CTX_INTEL_SEGMENTS 0x0004 // segds, seges, segfs, and seggs
|
||||||
#define DMN_W32_CTX_INTEL_FLOATS 0x0008 // xmm0-xmm15
|
#define W32_DMN_CTX_INTEL_FLOATS 0x0008 // xmm0-xmm15
|
||||||
#define DMN_W32_CTX_INTEL_DEBUG 0x0010 // dr0-dr3 and dr6-dr7
|
#define W32_DMN_CTX_INTEL_DEBUG 0x0010 // dr0-dr3 and dr6-dr7
|
||||||
#define DMN_W32_CTX_INTEL_EXTENDED 0x0020
|
#define W32_DMN_CTX_INTEL_EXTENDED 0x0020
|
||||||
#define DMN_W32_CTX_INTEL_XSTATE 0x0040
|
#define W32_DMN_CTX_INTEL_XSTATE 0x0040
|
||||||
|
|
||||||
#define DMN_W32_CTX_X86_ALL (DMN_W32_CTX_X86 | \
|
#define W32_DMN_CTX_X86_ALL (W32_DMN_CTX_X86 | \
|
||||||
DMN_W32_CTX_INTEL_CONTROL | DMN_W32_CTX_INTEL_INTEGER | \
|
W32_DMN_CTX_INTEL_CONTROL | W32_DMN_CTX_INTEL_INTEGER | \
|
||||||
DMN_W32_CTX_INTEL_SEGMENTS | DMN_W32_CTX_INTEL_DEBUG | \
|
W32_DMN_CTX_INTEL_SEGMENTS | W32_DMN_CTX_INTEL_DEBUG | \
|
||||||
DMN_W32_CTX_INTEL_EXTENDED)
|
W32_DMN_CTX_INTEL_EXTENDED)
|
||||||
#define DMN_W32_CTX_X64_ALL (DMN_W32_CTX_X64 | \
|
#define W32_DMN_CTX_X64_ALL (W32_DMN_CTX_X64 | \
|
||||||
DMN_W32_CTX_INTEL_CONTROL | DMN_W32_CTX_INTEL_INTEGER | \
|
W32_DMN_CTX_INTEL_CONTROL | W32_DMN_CTX_INTEL_INTEGER | \
|
||||||
DMN_W32_CTX_INTEL_SEGMENTS | DMN_W32_CTX_INTEL_FLOATS | \
|
W32_DMN_CTX_INTEL_SEGMENTS | W32_DMN_CTX_INTEL_FLOATS | \
|
||||||
DMN_W32_CTX_INTEL_DEBUG)
|
W32_DMN_CTX_INTEL_DEBUG)
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Per-Entity State
|
//~ rjf: Per-Entity State
|
||||||
|
|
||||||
typedef enum DMN_W32_EntityKind
|
typedef enum W32_DMN_EntityKind
|
||||||
{
|
{
|
||||||
DMN_W32_EntityKind_Null,
|
W32_DMN_EntityKind_Null,
|
||||||
DMN_W32_EntityKind_Root,
|
W32_DMN_EntityKind_Root,
|
||||||
DMN_W32_EntityKind_Process,
|
W32_DMN_EntityKind_Process,
|
||||||
DMN_W32_EntityKind_Thread,
|
W32_DMN_EntityKind_Thread,
|
||||||
DMN_W32_EntityKind_Module,
|
W32_DMN_EntityKind_Module,
|
||||||
DMN_W32_EntityKind_COUNT
|
W32_DMN_EntityKind_COUNT
|
||||||
}
|
}
|
||||||
DMN_W32_EntityKind;
|
W32_DMN_EntityKind;
|
||||||
|
|
||||||
typedef struct DMN_W32_Entity DMN_W32_Entity;
|
typedef struct W32_DMN_Entity W32_DMN_Entity;
|
||||||
struct DMN_W32_Entity
|
struct W32_DMN_Entity
|
||||||
{
|
{
|
||||||
DMN_W32_Entity *first;
|
W32_DMN_Entity *first;
|
||||||
DMN_W32_Entity *last;
|
W32_DMN_Entity *last;
|
||||||
DMN_W32_Entity *next;
|
W32_DMN_Entity *next;
|
||||||
DMN_W32_Entity *prev;
|
W32_DMN_Entity *prev;
|
||||||
DMN_W32_Entity *parent;
|
W32_DMN_Entity *parent;
|
||||||
DMN_W32_EntityKind kind;
|
W32_DMN_EntityKind kind;
|
||||||
U32 gen;
|
U32 gen;
|
||||||
U64 id;
|
U64 id;
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
@@ -212,46 +212,46 @@ struct DMN_W32_Entity
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct DMN_W32_EntityNode DMN_W32_EntityNode;
|
typedef struct W32_DMN_EntityNode W32_DMN_EntityNode;
|
||||||
struct DMN_W32_EntityNode
|
struct W32_DMN_EntityNode
|
||||||
{
|
{
|
||||||
DMN_W32_EntityNode *next;
|
W32_DMN_EntityNode *next;
|
||||||
DMN_W32_Entity *v;
|
W32_DMN_Entity *v;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct DMN_W32_EntityIDHashNode DMN_W32_EntityIDHashNode;
|
typedef struct W32_DMN_EntityIDHashNode W32_DMN_EntityIDHashNode;
|
||||||
struct DMN_W32_EntityIDHashNode
|
struct W32_DMN_EntityIDHashNode
|
||||||
{
|
{
|
||||||
DMN_W32_EntityIDHashNode *next;
|
W32_DMN_EntityIDHashNode *next;
|
||||||
DMN_W32_EntityIDHashNode *prev;
|
W32_DMN_EntityIDHashNode *prev;
|
||||||
U64 id;
|
U64 id;
|
||||||
DMN_W32_Entity *entity;
|
W32_DMN_Entity *entity;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct DMN_W32_EntityIDHashSlot DMN_W32_EntityIDHashSlot;
|
typedef struct W32_DMN_EntityIDHashSlot W32_DMN_EntityIDHashSlot;
|
||||||
struct DMN_W32_EntityIDHashSlot
|
struct W32_DMN_EntityIDHashSlot
|
||||||
{
|
{
|
||||||
DMN_W32_EntityIDHashNode *first;
|
W32_DMN_EntityIDHashNode *first;
|
||||||
DMN_W32_EntityIDHashNode *last;
|
W32_DMN_EntityIDHashNode *last;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Injection Types
|
//~ rjf: Injection Types
|
||||||
|
|
||||||
typedef struct DMN_W32_InjectedBreak DMN_W32_InjectedBreak;
|
typedef struct W32_DMN_InjectedBreak W32_DMN_InjectedBreak;
|
||||||
struct DMN_W32_InjectedBreak
|
struct W32_DMN_InjectedBreak
|
||||||
{
|
{
|
||||||
U64 code;
|
U64 code;
|
||||||
U64 user_data;
|
U64 user_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DMN_W32_INJECTED_CODE_SIZE 32
|
#define W32_DMN_INJECTED_CODE_SIZE 32
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Image Info Types
|
//~ rjf: Image Info Types
|
||||||
|
|
||||||
typedef struct DMN_W32_ImageInfo DMN_W32_ImageInfo;
|
typedef struct W32_DMN_ImageInfo W32_DMN_ImageInfo;
|
||||||
struct DMN_W32_ImageInfo
|
struct W32_DMN_ImageInfo
|
||||||
{
|
{
|
||||||
Arch arch;
|
Arch arch;
|
||||||
U32 size;
|
U32 size;
|
||||||
@@ -261,13 +261,13 @@ struct DMN_W32_ImageInfo
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Dynamically-Loaded Win32 Function Types
|
//~ rjf: Dynamically-Loaded Win32 Function Types
|
||||||
|
|
||||||
typedef HRESULT DMN_W32_GetThreadDescriptionFunctionType(HANDLE hThread, WCHAR **ppszThreadDescription);
|
typedef HRESULT W32_DMN_GetThreadDescriptionFunctionType(HANDLE hThread, WCHAR **ppszThreadDescription);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Shared State Bundle
|
//~ rjf: Shared State Bundle
|
||||||
|
|
||||||
typedef struct DMN_W32_Shared DMN_W32_Shared;
|
typedef struct W32_DMN_Shared W32_DMN_Shared;
|
||||||
struct DMN_W32_Shared
|
struct W32_DMN_Shared
|
||||||
{
|
{
|
||||||
// rjf: top-level info
|
// rjf: top-level info
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
@@ -283,12 +283,12 @@ struct DMN_W32_Shared
|
|||||||
|
|
||||||
// rjf: entity state
|
// rjf: entity state
|
||||||
Arena *entities_arena;
|
Arena *entities_arena;
|
||||||
DMN_W32_Entity *entities_base;
|
W32_DMN_Entity *entities_base;
|
||||||
DMN_W32_Entity *entities_first_free;
|
W32_DMN_Entity *entities_first_free;
|
||||||
U64 entities_count;
|
U64 entities_count;
|
||||||
DMN_W32_EntityIDHashSlot *entities_id_hash_slots;
|
W32_DMN_EntityIDHashSlot *entities_id_hash_slots;
|
||||||
U64 entities_id_hash_slots_count;
|
U64 entities_id_hash_slots_count;
|
||||||
DMN_W32_EntityIDHashNode *entities_id_hash_node_free;
|
W32_DMN_EntityIDHashNode *entities_id_hash_node_free;
|
||||||
|
|
||||||
// rjf: launch state
|
// rjf: launch state
|
||||||
B32 new_process_pending;
|
B32 new_process_pending;
|
||||||
@@ -307,53 +307,47 @@ struct DMN_W32_Shared
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals
|
//~ rjf: Globals
|
||||||
|
|
||||||
global DMN_W32_Shared *dmn_w32_shared = 0;
|
global W32_DMN_Shared *w32_dmn_shared = 0;
|
||||||
global DMN_W32_Entity dmn_w32_entity_nil = {&dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil, &dmn_w32_entity_nil};
|
global W32_DMN_Entity w32_dmn_entity_nil = {&w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil, &w32_dmn_entity_nil};
|
||||||
global DMN_W32_GetThreadDescriptionFunctionType *dmn_w32_GetThreadDescription = 0;
|
global W32_DMN_GetThreadDescriptionFunctionType *w32_dmn_GetThreadDescription = 0;
|
||||||
thread_static B32 dmn_w32_ctrl_thread = 0;
|
thread_static B32 w32_dmn_ctrl_thread = 0;
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: Basic Helpers
|
|
||||||
|
|
||||||
internal U64 dmn_w32_hash_from_string(String8 string);
|
|
||||||
internal U64 dmn_w32_hash_from_id(U64 id);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Helpers
|
//~ rjf: Entity Helpers
|
||||||
|
|
||||||
//- rjf: entity <-> handle
|
//- rjf: entity <-> handle
|
||||||
internal DMN_Handle dmn_w32_handle_from_entity(DMN_W32_Entity *entity);
|
internal DMN_Handle w32_dmn_handle_from_entity(W32_DMN_Entity *entity);
|
||||||
internal DMN_W32_Entity *dmn_w32_entity_from_handle(DMN_Handle handle);
|
internal W32_DMN_Entity *w32_dmn_entity_from_handle(DMN_Handle handle);
|
||||||
|
|
||||||
//- rjf: entity allocation/deallocation
|
//- rjf: entity allocation/deallocation
|
||||||
internal DMN_W32_Entity *dmn_w32_entity_alloc(DMN_W32_Entity *parent, DMN_W32_EntityKind kind, U64 id);
|
internal W32_DMN_Entity *w32_dmn_entity_alloc(W32_DMN_Entity *parent, W32_DMN_EntityKind kind, U64 id);
|
||||||
internal void dmn_w32_entity_release(DMN_W32_Entity *entity);
|
internal void w32_dmn_entity_release(W32_DMN_Entity *entity);
|
||||||
|
|
||||||
//- rjf: kind*id -> entity
|
//- rjf: kind*id -> entity
|
||||||
internal DMN_W32_Entity *dmn_w32_entity_from_kind_id(DMN_W32_EntityKind kind, U64 id);
|
internal W32_DMN_Entity *w32_dmn_entity_from_kind_id(W32_DMN_EntityKind kind, U64 id);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Module Info Extraction
|
//~ rjf: Module Info Extraction
|
||||||
|
|
||||||
internal String8 dmn_w32_full_path_from_module(Arena *arena, DMN_W32_Entity *module);
|
internal String8 w32_dmn_full_path_from_module(Arena *arena, W32_DMN_Entity *module);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Win32-Level Process/Thread Reads/Writes
|
//~ rjf: Win32-Level Process/Thread Reads/Writes
|
||||||
|
|
||||||
//- rjf: processes
|
//- rjf: processes
|
||||||
internal U64 dmn_w32_process_read(HANDLE process, Rng1U64 range, void *dst);
|
internal U64 w32_dmn_process_read(HANDLE process, Rng1U64 range, void *dst);
|
||||||
internal B32 dmn_w32_process_write(HANDLE process, Rng1U64 range, void *src);
|
internal B32 w32_dmn_process_write(HANDLE process, Rng1U64 range, void *src);
|
||||||
internal String8 dmn_w32_read_memory_str(Arena *arena, HANDLE process_handle, U64 address);
|
internal String8 w32_dmn_read_memory_str(Arena *arena, HANDLE process_handle, U64 address);
|
||||||
internal String16 dmn_w32_read_memory_str16(Arena *arena, HANDLE process_handle, U64 address);
|
internal String16 w32_dmn_read_memory_str16(Arena *arena, HANDLE process_handle, U64 address);
|
||||||
#define dmn_w32_process_read_struct(process, vaddr, ptr) dmn_w32_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
#define w32_dmn_process_read_struct(process, vaddr, ptr) w32_dmn_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||||
#define dmn_w32_process_write_struct(process, vaddr, ptr) dmn_w32_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
#define w32_dmn_process_write_struct(process, vaddr, ptr) w32_dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||||
internal DMN_W32_ImageInfo dmn_w32_image_info_from_process_base_vaddr(HANDLE process, U64 base_vaddr);
|
internal W32_DMN_ImageInfo w32_dmn_image_info_from_process_base_vaddr(HANDLE process, U64 base_vaddr);
|
||||||
|
|
||||||
//- rjf: threads
|
//- rjf: threads
|
||||||
internal B32 dmn_w32_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
internal B32 w32_dmn_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||||
internal B32 dmn_w32_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
internal B32 w32_dmn_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||||
|
|
||||||
//- rjf: remote thread injection
|
//- rjf: remote thread injection
|
||||||
internal DWORD dmn_w32_inject_thread(HANDLE process, U64 start_address);
|
internal DWORD w32_dmn_inject_thread(HANDLE process, U64 start_address);
|
||||||
|
|
||||||
#endif // DEMON_CORE_WIN32_H
|
#endif // DEMON_CORE_WIN32_H
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -24,18 +24,18 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Windows
|
//~ rjf: Windows
|
||||||
|
|
||||||
typedef struct OS_W32_TitleBarClientArea OS_W32_TitleBarClientArea;
|
typedef struct W32_WM_TitleBarClientArea W32_WM_TitleBarClientArea;
|
||||||
struct OS_W32_TitleBarClientArea
|
struct W32_WM_TitleBarClientArea
|
||||||
{
|
{
|
||||||
OS_W32_TitleBarClientArea *next;
|
W32_WM_TitleBarClientArea *next;
|
||||||
Rng2F32 rect;
|
Rng2F32 rect;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_W32_Window OS_W32_Window;
|
typedef struct W32_WM_Window W32_WM_Window;
|
||||||
struct OS_W32_Window
|
struct W32_WM_Window
|
||||||
{
|
{
|
||||||
OS_W32_Window *next;
|
W32_WM_Window *next;
|
||||||
OS_W32_Window *prev;
|
W32_WM_Window *prev;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
WINDOWPLACEMENT last_window_placement;
|
WINDOWPLACEMENT last_window_placement;
|
||||||
@@ -47,77 +47,77 @@ struct OS_W32_Window
|
|||||||
F32 custom_border_edge_thickness;
|
F32 custom_border_edge_thickness;
|
||||||
B32 custom_border_composition_enabled;
|
B32 custom_border_composition_enabled;
|
||||||
Arena *paint_arena;
|
Arena *paint_arena;
|
||||||
OS_W32_TitleBarClientArea *first_title_bar_client_area;
|
W32_WM_TitleBarClientArea *first_title_bar_client_area;
|
||||||
OS_W32_TitleBarClientArea *last_title_bar_client_area;
|
W32_WM_TitleBarClientArea *last_title_bar_client_area;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Monitor Gathering Bundle
|
//~ rjf: Monitor Gathering Bundle
|
||||||
|
|
||||||
typedef struct OS_W32_MonitorGatherNode OS_W32_MonitorGatherNode;
|
typedef struct W32_WM_MonitorGatherNode W32_WM_MonitorGatherNode;
|
||||||
struct OS_W32_MonitorGatherNode
|
struct W32_WM_MonitorGatherNode
|
||||||
{
|
{
|
||||||
OS_W32_MonitorGatherNode *next;
|
W32_WM_MonitorGatherNode *next;
|
||||||
OS_Monitor v;
|
WM_Monitor v;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_W32_MonitorGatherBundle OS_W32_MonitorGatherBundle;
|
typedef struct W32_WM_MonitorGatherBundle W32_WM_MonitorGatherBundle;
|
||||||
struct OS_W32_MonitorGatherBundle
|
struct W32_WM_MonitorGatherBundle
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
OS_W32_MonitorGatherNode *first_monitor;
|
W32_WM_MonitorGatherNode *first_monitor;
|
||||||
OS_W32_MonitorGatherNode *last_monitor;
|
W32_WM_MonitorGatherNode *last_monitor;
|
||||||
U64 monitor_count;
|
U64 monitor_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Global State
|
//~ rjf: Global State
|
||||||
|
|
||||||
typedef struct OS_W32_GfxState OS_W32_GfxState;
|
typedef struct W32_WM_State W32_WM_State;
|
||||||
struct OS_W32_GfxState
|
struct W32_WM_State
|
||||||
{
|
{
|
||||||
Arena *arena;
|
Arena *arena;
|
||||||
U32 gfx_thread_tid;
|
U32 gfx_thread_tid;
|
||||||
HINSTANCE hInstance;
|
HINSTANCE hInstance;
|
||||||
HCURSOR hCursor;
|
HCURSOR hCursor;
|
||||||
OS_GfxInfo gfx_info;
|
WM_SystemInfo gfx_info;
|
||||||
OS_W32_Window *first_window;
|
W32_WM_Window *first_window;
|
||||||
OS_W32_Window *last_window;
|
W32_WM_Window *last_window;
|
||||||
OS_W32_Window *free_window;
|
W32_WM_Window *free_window;
|
||||||
OS_Key key_from_vkey_table[256];
|
WM_Key key_from_vkey_table[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals
|
//~ rjf: Globals
|
||||||
|
|
||||||
global OS_W32_GfxState *os_w32_gfx_state = 0;
|
global W32_WM_State *w32_wm_state = 0;
|
||||||
global OS_EventList os_w32_event_list = {0};
|
global WM_EventList w32_wm_event_list = {0};
|
||||||
global Arena *os_w32_event_arena = 0;
|
global Arena *w32_wm_event_arena = 0;
|
||||||
global B32 os_w32_resizing = 0;
|
global B32 w32_wm_resizing = 0;
|
||||||
global B32 os_w32_new_window_custom_border = 0;
|
global B32 w32_wm_new_window_custom_border = 0;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Basic Helpers
|
//~ rjf: Basic Helpers
|
||||||
|
|
||||||
internal Rng2F32 os_w32_rng2f32_from_rect(RECT rect);
|
internal Rng2F32 w32_wm_rng2f32_from_rect(RECT rect);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Windows
|
//~ rjf: Windows
|
||||||
|
|
||||||
internal OS_Window os_w32_handle_from_window(OS_W32_Window *window);
|
internal WM_Window w32_wm_handle_from_window(W32_WM_Window *window);
|
||||||
internal OS_W32_Window * os_w32_window_from_handle(OS_Window window);
|
internal W32_WM_Window * w32_wm_window_from_handle(WM_Window window);
|
||||||
internal OS_W32_Window * os_w32_window_from_hwnd(HWND hwnd);
|
internal W32_WM_Window * w32_wm_window_from_hwnd(HWND hwnd);
|
||||||
internal HWND os_w32_hwnd_from_window(OS_W32_Window *window);
|
internal HWND w32_wm_hwnd_from_window(W32_WM_Window *window);
|
||||||
internal OS_W32_Window * os_w32_window_alloc(void);
|
internal W32_WM_Window * w32_wm_window_alloc(void);
|
||||||
internal void os_w32_window_release(OS_W32_Window *window);
|
internal void w32_wm_window_release(W32_WM_Window *window);
|
||||||
internal OS_Event * os_w32_push_event(OS_EventKind kind, OS_W32_Window *window);
|
internal WM_Event * w32_wm_push_event(WM_EventKind kind, W32_WM_Window *window);
|
||||||
internal OS_Key os_w32_os_key_from_vkey(WPARAM vkey);
|
internal WM_Key w32_wm_os_key_from_vkey(WPARAM vkey);
|
||||||
internal WPARAM os_w32_vkey_from_os_key(OS_Key key);
|
internal WPARAM w32_wm_vkey_from_os_key(WM_Key key);
|
||||||
internal LRESULT os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
internal LRESULT w32_wm_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Monitors
|
//~ rjf: Monitors
|
||||||
|
|
||||||
internal BOOL os_w32_monitor_gather_enum_proc(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM bundle_ptr);
|
internal BOOL w32_wm_monitor_gather_enum_proc(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM bundle_ptr);
|
||||||
|
|
||||||
#endif // WIN32_WINDOW_MANAGER_H
|
#endif // WIN32_WINDOW_MANAGER_H
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
//- GENERATED CODE
|
//- GENERATED CODE
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
String8 os_g_key_display_string_table[143] =
|
String8 wm_key_display_name_table[143] =
|
||||||
{
|
{
|
||||||
str8_lit_comp("Invalid Key"),
|
str8_lit_comp("Invalid Key"),
|
||||||
str8_lit_comp("Escape"),
|
str8_lit_comp("Escape"),
|
||||||
@@ -151,7 +151,7 @@ str8_lit_comp("Middle Mouse Button"),
|
|||||||
str8_lit_comp("Right Mouse Button"),
|
str8_lit_comp("Right Mouse Button"),
|
||||||
};
|
};
|
||||||
|
|
||||||
String8 os_g_key_cfg_string_table[143] =
|
String8 wm_key_cfg_name_table[143] =
|
||||||
{
|
{
|
||||||
str8_lit_comp("null"),
|
str8_lit_comp("null"),
|
||||||
str8_lit_comp("esc"),
|
str8_lit_comp("esc"),
|
||||||
|
|||||||
@@ -6,157 +6,157 @@
|
|||||||
#ifndef WINDOW_MANAGER_META_H
|
#ifndef WINDOW_MANAGER_META_H
|
||||||
#define WINDOW_MANAGER_META_H
|
#define WINDOW_MANAGER_META_H
|
||||||
|
|
||||||
typedef enum OS_Key
|
typedef enum WM_Key
|
||||||
{
|
{
|
||||||
OS_Key_Null,
|
WM_Key_Null,
|
||||||
OS_Key_Esc,
|
WM_Key_Esc,
|
||||||
OS_Key_F1,
|
WM_Key_F1,
|
||||||
OS_Key_F2,
|
WM_Key_F2,
|
||||||
OS_Key_F3,
|
WM_Key_F3,
|
||||||
OS_Key_F4,
|
WM_Key_F4,
|
||||||
OS_Key_F5,
|
WM_Key_F5,
|
||||||
OS_Key_F6,
|
WM_Key_F6,
|
||||||
OS_Key_F7,
|
WM_Key_F7,
|
||||||
OS_Key_F8,
|
WM_Key_F8,
|
||||||
OS_Key_F9,
|
WM_Key_F9,
|
||||||
OS_Key_F10,
|
WM_Key_F10,
|
||||||
OS_Key_F11,
|
WM_Key_F11,
|
||||||
OS_Key_F12,
|
WM_Key_F12,
|
||||||
OS_Key_F13,
|
WM_Key_F13,
|
||||||
OS_Key_F14,
|
WM_Key_F14,
|
||||||
OS_Key_F15,
|
WM_Key_F15,
|
||||||
OS_Key_F16,
|
WM_Key_F16,
|
||||||
OS_Key_F17,
|
WM_Key_F17,
|
||||||
OS_Key_F18,
|
WM_Key_F18,
|
||||||
OS_Key_F19,
|
WM_Key_F19,
|
||||||
OS_Key_F20,
|
WM_Key_F20,
|
||||||
OS_Key_F21,
|
WM_Key_F21,
|
||||||
OS_Key_F22,
|
WM_Key_F22,
|
||||||
OS_Key_F23,
|
WM_Key_F23,
|
||||||
OS_Key_F24,
|
WM_Key_F24,
|
||||||
OS_Key_Tick,
|
WM_Key_Tick,
|
||||||
OS_Key_0,
|
WM_Key_0,
|
||||||
OS_Key_1,
|
WM_Key_1,
|
||||||
OS_Key_2,
|
WM_Key_2,
|
||||||
OS_Key_3,
|
WM_Key_3,
|
||||||
OS_Key_4,
|
WM_Key_4,
|
||||||
OS_Key_5,
|
WM_Key_5,
|
||||||
OS_Key_6,
|
WM_Key_6,
|
||||||
OS_Key_7,
|
WM_Key_7,
|
||||||
OS_Key_8,
|
WM_Key_8,
|
||||||
OS_Key_9,
|
WM_Key_9,
|
||||||
OS_Key_Minus,
|
WM_Key_Minus,
|
||||||
OS_Key_Equal,
|
WM_Key_Equal,
|
||||||
OS_Key_Backspace,
|
WM_Key_Backspace,
|
||||||
OS_Key_Tab,
|
WM_Key_Tab,
|
||||||
OS_Key_Q,
|
WM_Key_Q,
|
||||||
OS_Key_W,
|
WM_Key_W,
|
||||||
OS_Key_E,
|
WM_Key_E,
|
||||||
OS_Key_R,
|
WM_Key_R,
|
||||||
OS_Key_T,
|
WM_Key_T,
|
||||||
OS_Key_Y,
|
WM_Key_Y,
|
||||||
OS_Key_U,
|
WM_Key_U,
|
||||||
OS_Key_I,
|
WM_Key_I,
|
||||||
OS_Key_O,
|
WM_Key_O,
|
||||||
OS_Key_P,
|
WM_Key_P,
|
||||||
OS_Key_LeftBracket,
|
WM_Key_LeftBracket,
|
||||||
OS_Key_RightBracket,
|
WM_Key_RightBracket,
|
||||||
OS_Key_BackSlash,
|
WM_Key_BackSlash,
|
||||||
OS_Key_CapsLock,
|
WM_Key_CapsLock,
|
||||||
OS_Key_A,
|
WM_Key_A,
|
||||||
OS_Key_S,
|
WM_Key_S,
|
||||||
OS_Key_D,
|
WM_Key_D,
|
||||||
OS_Key_F,
|
WM_Key_F,
|
||||||
OS_Key_G,
|
WM_Key_G,
|
||||||
OS_Key_H,
|
WM_Key_H,
|
||||||
OS_Key_J,
|
WM_Key_J,
|
||||||
OS_Key_K,
|
WM_Key_K,
|
||||||
OS_Key_L,
|
WM_Key_L,
|
||||||
OS_Key_Semicolon,
|
WM_Key_Semicolon,
|
||||||
OS_Key_Quote,
|
WM_Key_Quote,
|
||||||
OS_Key_Return,
|
WM_Key_Return,
|
||||||
OS_Key_Shift,
|
WM_Key_Shift,
|
||||||
OS_Key_Z,
|
WM_Key_Z,
|
||||||
OS_Key_X,
|
WM_Key_X,
|
||||||
OS_Key_C,
|
WM_Key_C,
|
||||||
OS_Key_V,
|
WM_Key_V,
|
||||||
OS_Key_B,
|
WM_Key_B,
|
||||||
OS_Key_N,
|
WM_Key_N,
|
||||||
OS_Key_M,
|
WM_Key_M,
|
||||||
OS_Key_Comma,
|
WM_Key_Comma,
|
||||||
OS_Key_Period,
|
WM_Key_Period,
|
||||||
OS_Key_Slash,
|
WM_Key_Slash,
|
||||||
OS_Key_Ctrl,
|
WM_Key_Ctrl,
|
||||||
OS_Key_Alt,
|
WM_Key_Alt,
|
||||||
OS_Key_Space,
|
WM_Key_Space,
|
||||||
OS_Key_Menu,
|
WM_Key_Menu,
|
||||||
OS_Key_ScrollLock,
|
WM_Key_ScrollLock,
|
||||||
OS_Key_Pause,
|
WM_Key_Pause,
|
||||||
OS_Key_Insert,
|
WM_Key_Insert,
|
||||||
OS_Key_Home,
|
WM_Key_Home,
|
||||||
OS_Key_PageUp,
|
WM_Key_PageUp,
|
||||||
OS_Key_Delete,
|
WM_Key_Delete,
|
||||||
OS_Key_End,
|
WM_Key_End,
|
||||||
OS_Key_PageDown,
|
WM_Key_PageDown,
|
||||||
OS_Key_Up,
|
WM_Key_Up,
|
||||||
OS_Key_Left,
|
WM_Key_Left,
|
||||||
OS_Key_Down,
|
WM_Key_Down,
|
||||||
OS_Key_Right,
|
WM_Key_Right,
|
||||||
OS_Key_Ex0,
|
WM_Key_Ex0,
|
||||||
OS_Key_Ex1,
|
WM_Key_Ex1,
|
||||||
OS_Key_Ex2,
|
WM_Key_Ex2,
|
||||||
OS_Key_Ex3,
|
WM_Key_Ex3,
|
||||||
OS_Key_Ex4,
|
WM_Key_Ex4,
|
||||||
OS_Key_Ex5,
|
WM_Key_Ex5,
|
||||||
OS_Key_Ex6,
|
WM_Key_Ex6,
|
||||||
OS_Key_Ex7,
|
WM_Key_Ex7,
|
||||||
OS_Key_Ex8,
|
WM_Key_Ex8,
|
||||||
OS_Key_Ex9,
|
WM_Key_Ex9,
|
||||||
OS_Key_Ex10,
|
WM_Key_Ex10,
|
||||||
OS_Key_Ex11,
|
WM_Key_Ex11,
|
||||||
OS_Key_Ex12,
|
WM_Key_Ex12,
|
||||||
OS_Key_Ex13,
|
WM_Key_Ex13,
|
||||||
OS_Key_Ex14,
|
WM_Key_Ex14,
|
||||||
OS_Key_Ex15,
|
WM_Key_Ex15,
|
||||||
OS_Key_Ex16,
|
WM_Key_Ex16,
|
||||||
OS_Key_Ex17,
|
WM_Key_Ex17,
|
||||||
OS_Key_Ex18,
|
WM_Key_Ex18,
|
||||||
OS_Key_Ex19,
|
WM_Key_Ex19,
|
||||||
OS_Key_Ex20,
|
WM_Key_Ex20,
|
||||||
OS_Key_Ex21,
|
WM_Key_Ex21,
|
||||||
OS_Key_Ex22,
|
WM_Key_Ex22,
|
||||||
OS_Key_Ex23,
|
WM_Key_Ex23,
|
||||||
OS_Key_Ex24,
|
WM_Key_Ex24,
|
||||||
OS_Key_Ex25,
|
WM_Key_Ex25,
|
||||||
OS_Key_Ex26,
|
WM_Key_Ex26,
|
||||||
OS_Key_Ex27,
|
WM_Key_Ex27,
|
||||||
OS_Key_Ex28,
|
WM_Key_Ex28,
|
||||||
OS_Key_Ex29,
|
WM_Key_Ex29,
|
||||||
OS_Key_NumLock,
|
WM_Key_NumLock,
|
||||||
OS_Key_NumSlash,
|
WM_Key_NumSlash,
|
||||||
OS_Key_NumStar,
|
WM_Key_NumStar,
|
||||||
OS_Key_NumMinus,
|
WM_Key_NumMinus,
|
||||||
OS_Key_NumPlus,
|
WM_Key_NumPlus,
|
||||||
OS_Key_NumPeriod,
|
WM_Key_NumPeriod,
|
||||||
OS_Key_Num0,
|
WM_Key_Num0,
|
||||||
OS_Key_Num1,
|
WM_Key_Num1,
|
||||||
OS_Key_Num2,
|
WM_Key_Num2,
|
||||||
OS_Key_Num3,
|
WM_Key_Num3,
|
||||||
OS_Key_Num4,
|
WM_Key_Num4,
|
||||||
OS_Key_Num5,
|
WM_Key_Num5,
|
||||||
OS_Key_Num6,
|
WM_Key_Num6,
|
||||||
OS_Key_Num7,
|
WM_Key_Num7,
|
||||||
OS_Key_Num8,
|
WM_Key_Num8,
|
||||||
OS_Key_Num9,
|
WM_Key_Num9,
|
||||||
OS_Key_LeftMouseButton,
|
WM_Key_LeftMouseButton,
|
||||||
OS_Key_MiddleMouseButton,
|
WM_Key_MiddleMouseButton,
|
||||||
OS_Key_RightMouseButton,
|
WM_Key_RightMouseButton,
|
||||||
OS_Key_COUNT,
|
WM_Key_COUNT,
|
||||||
} OS_Key;
|
} WM_Key;
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
extern String8 os_g_key_display_string_table[143];
|
extern String8 wm_key_display_name_table[143];
|
||||||
extern String8 os_g_key_cfg_string_table[143];
|
extern String8 wm_key_cfg_name_table[143];
|
||||||
|
|
||||||
C_LINKAGE_END
|
C_LINKAGE_END
|
||||||
|
|
||||||
|
|||||||
+140
-140
@@ -9,22 +9,22 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Handle Type Helpers
|
//~ rjf: Handle Type Helpers
|
||||||
|
|
||||||
internal OS_Window
|
internal WM_Window
|
||||||
os_window_zero(void)
|
wm_window_zero(void)
|
||||||
{
|
{
|
||||||
OS_Window result = {0};
|
WM_Window result = {0};
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_match(OS_Window a, OS_Window b)
|
wm_window_match(WM_Window a, WM_Window b)
|
||||||
{
|
{
|
||||||
B32 result = MemoryMatchStruct(&a, &b);
|
B32 result = MemoryMatchStruct(&a, &b);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_monitor_match(OS_Monitor a, OS_Monitor b)
|
wm_monitor_match(WM_Monitor a, WM_Monitor b)
|
||||||
{
|
{
|
||||||
B32 result = MemoryMatchStruct(&a, &b);
|
B32 result = MemoryMatchStruct(&a, &b);
|
||||||
return result;
|
return result;
|
||||||
@@ -34,46 +34,46 @@ os_monitor_match(OS_Monitor a, OS_Monitor b)
|
|||||||
//~ rjf: Event Functions (Helpers, Implemented Once)
|
//~ rjf: Event Functions (Helpers, Implemented Once)
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_string_from_event_kind(OS_EventKind kind)
|
wm_string_from_event_kind(WM_EventKind kind)
|
||||||
{
|
{
|
||||||
String8 result = {0};
|
String8 result = {0};
|
||||||
switch(kind)
|
switch(kind)
|
||||||
{
|
{
|
||||||
case OS_EventKind_Null:
|
case WM_EventKind_Null:
|
||||||
case OS_EventKind_COUNT:
|
case WM_EventKind_COUNT:
|
||||||
{}break;
|
{}break;
|
||||||
case OS_EventKind_Press: {result = str8_lit("Press");}break;
|
case WM_EventKind_Press: {result = str8_lit("Press");}break;
|
||||||
case OS_EventKind_Release: {result = str8_lit("Release");}break;
|
case WM_EventKind_Release: {result = str8_lit("Release");}break;
|
||||||
case OS_EventKind_MouseMove: {result = str8_lit("MouseMove");}break;
|
case WM_EventKind_MouseMove: {result = str8_lit("MouseMove");}break;
|
||||||
case OS_EventKind_Text: {result = str8_lit("Text");}break;
|
case WM_EventKind_Text: {result = str8_lit("Text");}break;
|
||||||
case OS_EventKind_Scroll: {result = str8_lit("Scroll");}break;
|
case WM_EventKind_Scroll: {result = str8_lit("Scroll");}break;
|
||||||
case OS_EventKind_WindowLoseFocus: {result = str8_lit("WindowLoseFocus");}break;
|
case WM_EventKind_WindowLoseFocus: {result = str8_lit("WindowLoseFocus");}break;
|
||||||
case OS_EventKind_WindowClose: {result = str8_lit("WindowClose");}break;
|
case WM_EventKind_WindowClose: {result = str8_lit("WindowClose");}break;
|
||||||
case OS_EventKind_FileDrop: {result = str8_lit("FileDrop");}break;
|
case WM_EventKind_FileDrop: {result = str8_lit("FileDrop");}break;
|
||||||
case OS_EventKind_Wakeup: {result = str8_lit("Wakeup");}break;
|
case WM_EventKind_Wakeup: {result = str8_lit("Wakeup");}break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8List
|
internal String8List
|
||||||
os_string_list_from_modifiers(Arena *arena, OS_Modifiers modifiers)
|
wm_string_list_from_modifiers(Arena *arena, WM_Modifiers modifiers)
|
||||||
{
|
{
|
||||||
String8List result = {0};
|
String8List result = {0};
|
||||||
if(modifiers & OS_Modifier_Ctrl) { str8_list_push(arena, &result, str8_lit("Ctrl")); }
|
if(modifiers & WM_Modifier_Ctrl) { str8_list_push(arena, &result, str8_lit("Ctrl")); }
|
||||||
if(modifiers & OS_Modifier_Shift) { str8_list_push(arena, &result, str8_lit("Shift")); }
|
if(modifiers & WM_Modifier_Shift) { str8_list_push(arena, &result, str8_lit("Shift")); }
|
||||||
if(modifiers & OS_Modifier_Alt) { str8_list_push(arena, &result, str8_lit("Alt")); }
|
if(modifiers & WM_Modifier_Alt) { str8_list_push(arena, &result, str8_lit("Alt")); }
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_string_from_modifiers_key(Arena *arena, OS_Modifiers modifiers, OS_Key key)
|
wm_string_from_modifiers_key(Arena *arena, WM_Modifiers modifiers, WM_Key key)
|
||||||
{
|
{
|
||||||
String8 result = {0};
|
String8 result = {0};
|
||||||
if(key != OS_Key_Null)
|
if(key != WM_Key_Null)
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(&arena, 1);
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
String8List mods = os_string_list_from_modifiers(scratch.arena, modifiers);
|
String8List mods = wm_string_list_from_modifiers(scratch.arena, modifiers);
|
||||||
String8 key_string = os_g_key_display_string_table[key];
|
String8 key_string = wm_key_display_name_table[key];
|
||||||
str8_list_push(scratch.arena, &mods, key_string);
|
str8_list_push(scratch.arena, &mods, key_string);
|
||||||
StringJoin join = {0};
|
StringJoin join = {0};
|
||||||
join.sep = str8_lit(" + ");
|
join.sep = str8_lit(" + ");
|
||||||
@@ -84,105 +84,105 @@ os_string_from_modifiers_key(Arena *arena, OS_Modifiers modifiers, OS_Key key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal U32
|
internal U32
|
||||||
os_codepoint_from_modifiers_and_key(OS_Modifiers modifiers, OS_Key key)
|
wm_codepoint_from_modifiers_and_key(WM_Modifiers modifiers, WM_Key key)
|
||||||
{
|
{
|
||||||
U32 result = 0;
|
U32 result = 0;
|
||||||
|
|
||||||
// rjf: special-case map
|
// rjf: special-case map
|
||||||
local_persist read_only struct {U32 character; OS_Key key; OS_Modifiers modifiers;} map[] =
|
local_persist read_only struct {U32 character; WM_Key key; WM_Modifiers modifiers;} map[] =
|
||||||
{
|
{
|
||||||
{'!', OS_Key_1, OS_Modifier_Shift},
|
{'!', WM_Key_1, WM_Modifier_Shift},
|
||||||
{'@', OS_Key_2, OS_Modifier_Shift},
|
{'@', WM_Key_2, WM_Modifier_Shift},
|
||||||
{'#', OS_Key_3, OS_Modifier_Shift},
|
{'#', WM_Key_3, WM_Modifier_Shift},
|
||||||
{'$', OS_Key_4, OS_Modifier_Shift},
|
{'$', WM_Key_4, WM_Modifier_Shift},
|
||||||
{'%', OS_Key_5, OS_Modifier_Shift},
|
{'%', WM_Key_5, WM_Modifier_Shift},
|
||||||
{'^', OS_Key_6, OS_Modifier_Shift},
|
{'^', WM_Key_6, WM_Modifier_Shift},
|
||||||
{'&', OS_Key_7, OS_Modifier_Shift},
|
{'&', WM_Key_7, WM_Modifier_Shift},
|
||||||
{'*', OS_Key_8, OS_Modifier_Shift},
|
{'*', WM_Key_8, WM_Modifier_Shift},
|
||||||
{'(', OS_Key_9, OS_Modifier_Shift},
|
{'(', WM_Key_9, WM_Modifier_Shift},
|
||||||
{')', OS_Key_0, OS_Modifier_Shift},
|
{')', WM_Key_0, WM_Modifier_Shift},
|
||||||
{'_', OS_Key_Minus, OS_Modifier_Shift},
|
{'_', WM_Key_Minus, WM_Modifier_Shift},
|
||||||
{'_', OS_Key_Minus, OS_Modifier_Shift},
|
{'_', WM_Key_Minus, WM_Modifier_Shift},
|
||||||
{'-', OS_Key_Minus, 0},
|
{'-', WM_Key_Minus, 0},
|
||||||
{'=', OS_Key_Equal, 0},
|
{'=', WM_Key_Equal, 0},
|
||||||
{'+', OS_Key_Equal, OS_Modifier_Shift},
|
{'+', WM_Key_Equal, WM_Modifier_Shift},
|
||||||
{'`', OS_Key_Tick, 0},
|
{'`', WM_Key_Tick, 0},
|
||||||
{'~', OS_Key_Tick, OS_Modifier_Shift},
|
{'~', WM_Key_Tick, WM_Modifier_Shift},
|
||||||
{'[', OS_Key_LeftBracket, 0},
|
{'[', WM_Key_LeftBracket, 0},
|
||||||
{']', OS_Key_RightBracket, 0},
|
{']', WM_Key_RightBracket, 0},
|
||||||
{'{', OS_Key_LeftBracket, OS_Modifier_Shift},
|
{'{', WM_Key_LeftBracket, WM_Modifier_Shift},
|
||||||
{'}', OS_Key_RightBracket, OS_Modifier_Shift},
|
{'}', WM_Key_RightBracket, WM_Modifier_Shift},
|
||||||
{'\\', OS_Key_BackSlash, 0},
|
{'\\', WM_Key_BackSlash, 0},
|
||||||
{'|', OS_Key_BackSlash, OS_Modifier_Shift},
|
{'|', WM_Key_BackSlash, WM_Modifier_Shift},
|
||||||
{';', OS_Key_Semicolon, 0},
|
{';', WM_Key_Semicolon, 0},
|
||||||
{':', OS_Key_Semicolon, OS_Modifier_Shift},
|
{':', WM_Key_Semicolon, WM_Modifier_Shift},
|
||||||
{'\'', OS_Key_Quote, 0},
|
{'\'', WM_Key_Quote, 0},
|
||||||
{'"', OS_Key_Quote, OS_Modifier_Shift},
|
{'"', WM_Key_Quote, WM_Modifier_Shift},
|
||||||
{'.', OS_Key_Period, 0},
|
{'.', WM_Key_Period, 0},
|
||||||
{',', OS_Key_Comma, 0},
|
{',', WM_Key_Comma, 0},
|
||||||
{'<', OS_Key_Period, OS_Modifier_Shift},
|
{'<', WM_Key_Period, WM_Modifier_Shift},
|
||||||
{'>', OS_Key_Comma, OS_Modifier_Shift},
|
{'>', WM_Key_Comma, WM_Modifier_Shift},
|
||||||
{'/', OS_Key_Slash, 0},
|
{'/', WM_Key_Slash, 0},
|
||||||
{'?', OS_Key_Slash, OS_Modifier_Shift},
|
{'?', WM_Key_Slash, WM_Modifier_Shift},
|
||||||
{'a', OS_Key_A, 0},
|
{'a', WM_Key_A, 0},
|
||||||
{'b', OS_Key_B, 0},
|
{'b', WM_Key_B, 0},
|
||||||
{'c', OS_Key_C, 0},
|
{'c', WM_Key_C, 0},
|
||||||
{'d', OS_Key_D, 0},
|
{'d', WM_Key_D, 0},
|
||||||
{'e', OS_Key_E, 0},
|
{'e', WM_Key_E, 0},
|
||||||
{'f', OS_Key_F, 0},
|
{'f', WM_Key_F, 0},
|
||||||
{'g', OS_Key_G, 0},
|
{'g', WM_Key_G, 0},
|
||||||
{'h', OS_Key_H, 0},
|
{'h', WM_Key_H, 0},
|
||||||
{'i', OS_Key_I, 0},
|
{'i', WM_Key_I, 0},
|
||||||
{'j', OS_Key_J, 0},
|
{'j', WM_Key_J, 0},
|
||||||
{'k', OS_Key_K, 0},
|
{'k', WM_Key_K, 0},
|
||||||
{'l', OS_Key_L, 0},
|
{'l', WM_Key_L, 0},
|
||||||
{'m', OS_Key_M, 0},
|
{'m', WM_Key_M, 0},
|
||||||
{'n', OS_Key_N, 0},
|
{'n', WM_Key_N, 0},
|
||||||
{'o', OS_Key_O, 0},
|
{'o', WM_Key_O, 0},
|
||||||
{'p', OS_Key_P, 0},
|
{'p', WM_Key_P, 0},
|
||||||
{'q', OS_Key_Q, 0},
|
{'q', WM_Key_Q, 0},
|
||||||
{'r', OS_Key_R, 0},
|
{'r', WM_Key_R, 0},
|
||||||
{'s', OS_Key_S, 0},
|
{'s', WM_Key_S, 0},
|
||||||
{'t', OS_Key_T, 0},
|
{'t', WM_Key_T, 0},
|
||||||
{'u', OS_Key_U, 0},
|
{'u', WM_Key_U, 0},
|
||||||
{'v', OS_Key_V, 0},
|
{'v', WM_Key_V, 0},
|
||||||
{'w', OS_Key_W, 0},
|
{'w', WM_Key_W, 0},
|
||||||
{'x', OS_Key_X, 0},
|
{'x', WM_Key_X, 0},
|
||||||
{'y', OS_Key_Y, 0},
|
{'y', WM_Key_Y, 0},
|
||||||
{'z', OS_Key_Z, 0},
|
{'z', WM_Key_Z, 0},
|
||||||
{'A', OS_Key_A, OS_Modifier_Shift},
|
{'A', WM_Key_A, WM_Modifier_Shift},
|
||||||
{'B', OS_Key_B, OS_Modifier_Shift},
|
{'B', WM_Key_B, WM_Modifier_Shift},
|
||||||
{'C', OS_Key_C, OS_Modifier_Shift},
|
{'C', WM_Key_C, WM_Modifier_Shift},
|
||||||
{'D', OS_Key_D, OS_Modifier_Shift},
|
{'D', WM_Key_D, WM_Modifier_Shift},
|
||||||
{'E', OS_Key_E, OS_Modifier_Shift},
|
{'E', WM_Key_E, WM_Modifier_Shift},
|
||||||
{'F', OS_Key_F, OS_Modifier_Shift},
|
{'F', WM_Key_F, WM_Modifier_Shift},
|
||||||
{'G', OS_Key_G, OS_Modifier_Shift},
|
{'G', WM_Key_G, WM_Modifier_Shift},
|
||||||
{'H', OS_Key_H, OS_Modifier_Shift},
|
{'H', WM_Key_H, WM_Modifier_Shift},
|
||||||
{'I', OS_Key_I, OS_Modifier_Shift},
|
{'I', WM_Key_I, WM_Modifier_Shift},
|
||||||
{'J', OS_Key_J, OS_Modifier_Shift},
|
{'J', WM_Key_J, WM_Modifier_Shift},
|
||||||
{'K', OS_Key_K, OS_Modifier_Shift},
|
{'K', WM_Key_K, WM_Modifier_Shift},
|
||||||
{'L', OS_Key_L, OS_Modifier_Shift},
|
{'L', WM_Key_L, WM_Modifier_Shift},
|
||||||
{'M', OS_Key_M, OS_Modifier_Shift},
|
{'M', WM_Key_M, WM_Modifier_Shift},
|
||||||
{'N', OS_Key_N, OS_Modifier_Shift},
|
{'N', WM_Key_N, WM_Modifier_Shift},
|
||||||
{'O', OS_Key_O, OS_Modifier_Shift},
|
{'O', WM_Key_O, WM_Modifier_Shift},
|
||||||
{'P', OS_Key_P, OS_Modifier_Shift},
|
{'P', WM_Key_P, WM_Modifier_Shift},
|
||||||
{'Q', OS_Key_Q, OS_Modifier_Shift},
|
{'Q', WM_Key_Q, WM_Modifier_Shift},
|
||||||
{'R', OS_Key_R, OS_Modifier_Shift},
|
{'R', WM_Key_R, WM_Modifier_Shift},
|
||||||
{'S', OS_Key_S, OS_Modifier_Shift},
|
{'S', WM_Key_S, WM_Modifier_Shift},
|
||||||
{'T', OS_Key_T, OS_Modifier_Shift},
|
{'T', WM_Key_T, WM_Modifier_Shift},
|
||||||
{'U', OS_Key_U, OS_Modifier_Shift},
|
{'U', WM_Key_U, WM_Modifier_Shift},
|
||||||
{'V', OS_Key_V, OS_Modifier_Shift},
|
{'V', WM_Key_V, WM_Modifier_Shift},
|
||||||
{'W', OS_Key_W, OS_Modifier_Shift},
|
{'W', WM_Key_W, WM_Modifier_Shift},
|
||||||
{'X', OS_Key_X, OS_Modifier_Shift},
|
{'X', WM_Key_X, WM_Modifier_Shift},
|
||||||
{'Y', OS_Key_Y, OS_Modifier_Shift},
|
{'Y', WM_Key_Y, WM_Modifier_Shift},
|
||||||
{'Z', OS_Key_Z, OS_Modifier_Shift},
|
{'Z', WM_Key_Z, WM_Modifier_Shift},
|
||||||
{' ', OS_Key_Space, 0},
|
{' ', WM_Key_Space, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
// rjf: check numeric
|
// rjf: check numeric
|
||||||
if(OS_Key_0 <= key && key <= OS_Key_9)
|
if(WM_Key_0 <= key && key <= WM_Key_9)
|
||||||
{
|
{
|
||||||
result = '0' + (key - OS_Key_0);
|
result = '0' + (key - WM_Key_0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: check special-case map
|
// rjf: check special-case map
|
||||||
@@ -199,23 +199,23 @@ os_codepoint_from_modifiers_and_key(OS_Modifiers modifiers, OS_Key key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_eat_event(OS_EventList *events, OS_Event *event)
|
wm_eat_event(WM_EventList *events, WM_Event *event)
|
||||||
{
|
{
|
||||||
DLLRemove(events->first, events->last, event);
|
DLLRemove(events->first, events->last, event);
|
||||||
events->count -= 1;
|
events->count -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_key_press(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, OS_Key key)
|
wm_key_press(WM_EventList *events, WM_Window window, WM_Modifiers modifiers, WM_Key key)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
for(OS_Event *event = events->first; event != 0; event = event->next)
|
for(WM_Event *event = events->first; event != 0; event = event->next)
|
||||||
{
|
{
|
||||||
if((os_window_match(event->window, window) || os_window_match(window, os_window_zero())) &&
|
if((wm_window_match(event->window, window) || wm_window_match(window, wm_window_zero())) &&
|
||||||
event->kind == OS_EventKind_Press && event->key == key && event->modifiers == modifiers)
|
event->kind == WM_EventKind_Press && event->key == key && event->modifiers == modifiers)
|
||||||
{
|
{
|
||||||
result = 1;
|
result = 1;
|
||||||
os_eat_event(events, event);
|
wm_eat_event(events, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,16 +223,16 @@ os_key_press(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, OS_
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_key_release(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, OS_Key key)
|
wm_key_release(WM_EventList *events, WM_Window window, WM_Modifiers modifiers, WM_Key key)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
for(OS_Event *event = events->first; event != 0; event = event->next)
|
for(WM_Event *event = events->first; event != 0; event = event->next)
|
||||||
{
|
{
|
||||||
if((os_window_match(event->window, window) || os_window_match(window, os_window_zero())) &&
|
if((wm_window_match(event->window, window) || wm_window_match(window, wm_window_zero())) &&
|
||||||
event->kind == OS_EventKind_Release && event->key == key && event->modifiers == modifiers)
|
event->kind == WM_EventKind_Release && event->key == key && event->modifiers == modifiers)
|
||||||
{
|
{
|
||||||
result = 1;
|
result = 1;
|
||||||
os_eat_event(events, event);
|
wm_eat_event(events, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -240,29 +240,29 @@ os_key_release(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, O
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_text(OS_EventList *events, OS_Window window, U32 character)
|
wm_text(WM_EventList *events, WM_Window window, U32 character)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
for(OS_Event *event = events->first; event != 0; event = event->next)
|
for(WM_Event *event = events->first; event != 0; event = event->next)
|
||||||
{
|
{
|
||||||
if((os_window_match(event->window, window) || os_window_match(window, os_window_zero())) &&
|
if((wm_window_match(event->window, window) || wm_window_match(window, wm_window_zero())) &&
|
||||||
event->kind == OS_EventKind_Text && event->character == character)
|
event->kind == WM_EventKind_Text && event->character == character)
|
||||||
{
|
{
|
||||||
result = 1;
|
result = 1;
|
||||||
os_eat_event(events, event);
|
wm_eat_event(events, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_EventList
|
internal WM_EventList
|
||||||
os_event_list_copy(Arena *arena, OS_EventList *src)
|
wm_event_list_copy(Arena *arena, WM_EventList *src)
|
||||||
{
|
{
|
||||||
OS_EventList dst = {0};
|
WM_EventList dst = {0};
|
||||||
for(OS_Event *s = src->first; s != 0; s = s->next)
|
for(WM_Event *s = src->first; s != 0; s = s->next)
|
||||||
{
|
{
|
||||||
OS_Event *d = push_array(arena, OS_Event, 1);
|
WM_Event *d = push_array(arena, WM_Event, 1);
|
||||||
MemoryCopyStruct(d, s);
|
MemoryCopyStruct(d, s);
|
||||||
d->strings = str8_list_copy(arena, &s->strings);
|
d->strings = str8_list_copy(arena, &s->strings);
|
||||||
DLLPushBack(dst.first, dst.last, d);
|
DLLPushBack(dst.first, dst.last, d);
|
||||||
@@ -272,7 +272,7 @@ os_event_list_copy(Arena *arena, OS_EventList *src)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_event_list_concat_in_place(OS_EventList *dst, OS_EventList *to_push)
|
wm_event_list_concat_in_place(WM_EventList *dst, WM_EventList *to_push)
|
||||||
{
|
{
|
||||||
if(dst->last && to_push->first)
|
if(dst->last && to_push->first)
|
||||||
{
|
{
|
||||||
@@ -288,10 +288,10 @@ os_event_list_concat_in_place(OS_EventList *dst, OS_EventList *to_push)
|
|||||||
MemoryZeroStruct(to_push);
|
MemoryZeroStruct(to_push);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Event *
|
internal WM_Event *
|
||||||
os_event_list_push_new(Arena *arena, OS_EventList *evts, OS_EventKind kind)
|
wm_event_list_push_new(Arena *arena, WM_EventList *evts, WM_EventKind kind)
|
||||||
{
|
{
|
||||||
OS_Event *evt = push_array(arena, OS_Event, 1);
|
WM_Event *evt = push_array(arena, WM_Event, 1);
|
||||||
DLLPushBack(evts->first, evts->last, evt);
|
DLLPushBack(evts->first, evts->last, evt);
|
||||||
evts->count += 1;
|
evts->count += 1;
|
||||||
evt->timestamp_us = now_time_us();
|
evt->timestamp_us = now_time_us();
|
||||||
|
|||||||
+115
-115
@@ -1,14 +1,14 @@
|
|||||||
// Copyright (c) Epic Games Tools
|
// Copyright (c) Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
#ifndef OS_GFX_H
|
#ifndef WINDOW_MANAGER_H
|
||||||
#define OS_GFX_H
|
#define WINDOW_MANAGER_H
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Graphics System Info
|
//~ rjf: Graphics System Info
|
||||||
|
|
||||||
typedef struct OS_GfxInfo OS_GfxInfo;
|
typedef struct WM_SystemInfo WM_SystemInfo;
|
||||||
struct OS_GfxInfo
|
struct WM_SystemInfo
|
||||||
{
|
{
|
||||||
F32 double_click_time;
|
F32 double_click_time;
|
||||||
F32 caret_blink_time;
|
F32 caret_blink_time;
|
||||||
@@ -18,15 +18,15 @@ struct OS_GfxInfo
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Window Types
|
//~ rjf: Window Types
|
||||||
|
|
||||||
typedef U32 OS_WindowFlags;
|
typedef U32 WM_WindowFlags;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
OS_WindowFlag_CustomBorder = (1<<0),
|
WM_WindowFlag_CustomBorder = (1<<0),
|
||||||
OS_WindowFlag_UseDefaultPosition = (1<<1),
|
WM_WindowFlag_UseDefaultPosition = (1<<1),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_Window OS_Window;
|
typedef struct WM_Window WM_Window;
|
||||||
struct OS_Window
|
struct WM_Window
|
||||||
{
|
{
|
||||||
U64 u64[1];
|
U64 u64[1];
|
||||||
};
|
};
|
||||||
@@ -34,8 +34,8 @@ struct OS_Window
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: External Window Types
|
//~ rjf: External Window Types
|
||||||
|
|
||||||
typedef struct OS_ExternalWindow OS_ExternalWindow;
|
typedef struct WM_ExtWindow WM_ExtWindow;
|
||||||
struct OS_ExternalWindow
|
struct WM_ExtWindow
|
||||||
{
|
{
|
||||||
U64 u64[1];
|
U64 u64[1];
|
||||||
};
|
};
|
||||||
@@ -43,36 +43,36 @@ struct OS_ExternalWindow
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Monitor Types
|
//~ rjf: Monitor Types
|
||||||
|
|
||||||
typedef struct OS_Monitor OS_Monitor;
|
typedef struct WM_Monitor WM_Monitor;
|
||||||
struct OS_Monitor
|
struct WM_Monitor
|
||||||
{
|
{
|
||||||
U64 u64[1];
|
U64 u64[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_MonitorArray OS_MonitorArray;
|
typedef struct WM_MonitorArray WM_MonitorArray;
|
||||||
struct OS_MonitorArray
|
struct WM_MonitorArray
|
||||||
{
|
{
|
||||||
OS_Monitor *v;
|
WM_Monitor *v;
|
||||||
U64 count;
|
U64 count;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Cursor Types
|
//~ rjf: Cursor Types
|
||||||
|
|
||||||
typedef enum OS_Cursor
|
typedef enum WM_Cursor
|
||||||
{
|
{
|
||||||
OS_Cursor_Pointer,
|
WM_Cursor_Pointer,
|
||||||
OS_Cursor_IBar,
|
WM_Cursor_IBar,
|
||||||
OS_Cursor_LeftRight,
|
WM_Cursor_LeftRight,
|
||||||
OS_Cursor_UpDown,
|
WM_Cursor_UpDown,
|
||||||
OS_Cursor_DownRight,
|
WM_Cursor_DownRight,
|
||||||
OS_Cursor_UpRight,
|
WM_Cursor_UpRight,
|
||||||
OS_Cursor_UpDownLeftRight,
|
WM_Cursor_UpDownLeftRight,
|
||||||
OS_Cursor_HandPoint,
|
WM_Cursor_HandPoint,
|
||||||
OS_Cursor_Disabled,
|
WM_Cursor_Disabled,
|
||||||
OS_Cursor_COUNT,
|
WM_Cursor_COUNT,
|
||||||
}
|
}
|
||||||
OS_Cursor;
|
WM_Cursor;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Generated Code
|
//~ rjf: Generated Code
|
||||||
@@ -82,40 +82,40 @@ OS_Cursor;
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Event Types
|
//~ rjf: Event Types
|
||||||
|
|
||||||
typedef enum OS_EventKind
|
typedef enum WM_EventKind
|
||||||
{
|
{
|
||||||
OS_EventKind_Null,
|
WM_EventKind_Null,
|
||||||
OS_EventKind_Press,
|
WM_EventKind_Press,
|
||||||
OS_EventKind_Release,
|
WM_EventKind_Release,
|
||||||
OS_EventKind_MouseMove,
|
WM_EventKind_MouseMove,
|
||||||
OS_EventKind_Text,
|
WM_EventKind_Text,
|
||||||
OS_EventKind_Scroll,
|
WM_EventKind_Scroll,
|
||||||
OS_EventKind_WindowLoseFocus,
|
WM_EventKind_WindowLoseFocus,
|
||||||
OS_EventKind_WindowClose,
|
WM_EventKind_WindowClose,
|
||||||
OS_EventKind_FileDrop,
|
WM_EventKind_FileDrop,
|
||||||
OS_EventKind_Wakeup,
|
WM_EventKind_Wakeup,
|
||||||
OS_EventKind_COUNT
|
WM_EventKind_COUNT
|
||||||
}
|
}
|
||||||
OS_EventKind;
|
WM_EventKind;
|
||||||
|
|
||||||
typedef U32 OS_Modifiers;
|
typedef U32 WM_Modifiers;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
OS_Modifier_Ctrl = (1<<0),
|
WM_Modifier_Ctrl = (1<<0),
|
||||||
OS_Modifier_Shift = (1<<1),
|
WM_Modifier_Shift = (1<<1),
|
||||||
OS_Modifier_Alt = (1<<2),
|
WM_Modifier_Alt = (1<<2),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_Event OS_Event;
|
typedef struct WM_Event WM_Event;
|
||||||
struct OS_Event
|
struct WM_Event
|
||||||
{
|
{
|
||||||
OS_Event *next;
|
WM_Event *next;
|
||||||
OS_Event *prev;
|
WM_Event *prev;
|
||||||
U64 timestamp_us;
|
U64 timestamp_us;
|
||||||
OS_Window window;
|
WM_Window window;
|
||||||
OS_EventKind kind;
|
WM_EventKind kind;
|
||||||
OS_Modifiers modifiers;
|
WM_Modifiers modifiers;
|
||||||
OS_Key key;
|
WM_Key key;
|
||||||
B32 is_repeat;
|
B32 is_repeat;
|
||||||
B32 right_sided;
|
B32 right_sided;
|
||||||
U32 character;
|
U32 character;
|
||||||
@@ -125,12 +125,12 @@ struct OS_Event
|
|||||||
String8List strings;
|
String8List strings;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct OS_EventList OS_EventList;
|
typedef struct WM_EventList WM_EventList;
|
||||||
struct OS_EventList
|
struct WM_EventList
|
||||||
{
|
{
|
||||||
U64 count;
|
U64 count;
|
||||||
OS_Event *first;
|
WM_Event *first;
|
||||||
OS_Event *last;
|
WM_Event *last;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -141,106 +141,106 @@ internal B32 frame(void);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Handle Type Helpers
|
//~ rjf: Handle Type Helpers
|
||||||
|
|
||||||
internal OS_Window os_window_zero(void);
|
internal WM_Window wm_window_zero(void);
|
||||||
internal B32 os_window_match(OS_Window a, OS_Window b);
|
internal B32 wm_window_match(WM_Window a, WM_Window b);
|
||||||
internal B32 os_monitor_match(OS_Monitor a, OS_Monitor b);
|
internal B32 wm_monitor_match(WM_Monitor a, WM_Monitor b);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Event Functions (Helpers, Implemented Once)
|
//~ rjf: Event Functions (Helpers, Implemented Once)
|
||||||
|
|
||||||
internal String8 os_string_from_event_kind(OS_EventKind kind);
|
internal String8 wm_string_from_event_kind(WM_EventKind kind);
|
||||||
internal String8List os_string_list_from_modifiers(Arena *arena, OS_Modifiers flags);
|
internal String8List wm_string_list_from_modifiers(Arena *arena, WM_Modifiers flags);
|
||||||
internal String8 os_string_from_modifiers_key(Arena *arena, OS_Modifiers modifiers, OS_Key key);
|
internal String8 wm_string_from_modifiers_key(Arena *arena, WM_Modifiers modifiers, WM_Key key);
|
||||||
internal U32 os_codepoint_from_modifiers_and_key(OS_Modifiers flags, OS_Key key);
|
internal U32 wm_codepoint_from_modifiers_and_key(WM_Modifiers flags, WM_Key key);
|
||||||
internal void os_eat_event(OS_EventList *events, OS_Event *event);
|
internal void wm_eat_event(WM_EventList *events, WM_Event *event);
|
||||||
internal B32 os_key_press(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, OS_Key key);
|
internal B32 wm_key_press(WM_EventList *events, WM_Window window, WM_Modifiers modifiers, WM_Key key);
|
||||||
internal B32 os_key_release(OS_EventList *events, OS_Window window, OS_Modifiers modifiers, OS_Key key);
|
internal B32 wm_key_release(WM_EventList *events, WM_Window window, WM_Modifiers modifiers, WM_Key key);
|
||||||
internal B32 os_text(OS_EventList *events, OS_Window window, U32 character);
|
internal B32 wm_text(WM_EventList *events, WM_Window window, U32 character);
|
||||||
internal OS_EventList os_event_list_copy(Arena *arena, OS_EventList *src);
|
internal WM_EventList wm_event_list_copy(Arena *arena, WM_EventList *src);
|
||||||
internal void os_event_list_concat_in_place(OS_EventList *dst, OS_EventList *to_push);
|
internal void wm_event_list_concat_in_place(WM_EventList *dst, WM_EventList *to_push);
|
||||||
internal OS_Event *os_event_list_push_new(Arena *arena, OS_EventList *evts, OS_EventKind kind);
|
internal WM_Event *wm_event_list_push_new(Arena *arena, WM_EventList *evts, WM_EventKind kind);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
||||||
|
|
||||||
internal void os_gfx_init(void);
|
internal void wm_init(void);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_GfxInfo *os_get_gfx_info(void);
|
internal WM_SystemInfo *wm_get_system_info(void);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
||||||
|
|
||||||
internal void os_set_clipboard_text(String8 string);
|
internal void wm_set_clipboard_text(String8 string);
|
||||||
internal String8 os_get_clipboard_text(Arena *arena);
|
internal String8 wm_get_clipboard_text(Arena *arena);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Window os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title);
|
internal WM_Window wm_window_open(Rng2F32 rect, WM_WindowFlags flags, String8 title);
|
||||||
internal void os_window_close(OS_Window window);
|
internal void wm_window_close(WM_Window window);
|
||||||
internal void os_window_set_title(OS_Window window, String8 title);
|
internal void wm_window_set_title(WM_Window window, String8 title);
|
||||||
internal void os_window_first_paint(OS_Window window);
|
internal void wm_window_first_paint(WM_Window window);
|
||||||
internal void os_window_focus(OS_Window window);
|
internal void wm_window_focus(WM_Window window);
|
||||||
internal B32 os_window_is_focused(OS_Window window);
|
internal B32 wm_window_is_focused(WM_Window window);
|
||||||
internal B32 os_window_is_fullscreen(OS_Window window);
|
internal B32 wm_window_is_fullscreen(WM_Window window);
|
||||||
internal void os_window_set_fullscreen(OS_Window window, B32 fullscreen);
|
internal void wm_window_set_fullscreen(WM_Window window, B32 fullscreen);
|
||||||
internal B32 os_window_is_maximized(OS_Window window);
|
internal B32 wm_window_is_maximized(WM_Window window);
|
||||||
internal void os_window_set_maximized(OS_Window window, B32 maximized);
|
internal void wm_window_set_maximized(WM_Window window, B32 maximized);
|
||||||
internal B32 os_window_is_minimized(OS_Window window);
|
internal B32 wm_window_is_minimized(WM_Window window);
|
||||||
internal void os_window_set_minimized(OS_Window window, B32 minimized);
|
internal void wm_window_set_minimized(WM_Window window, B32 minimized);
|
||||||
internal void os_window_bring_to_front(OS_Window window);
|
internal void wm_window_bring_to_front(WM_Window window);
|
||||||
internal void os_window_set_monitor(OS_Window window, OS_Monitor monitor);
|
internal void wm_window_set_monitor(WM_Window window, WM_Monitor monitor);
|
||||||
internal void os_window_clear_custom_border_data(OS_Window handle);
|
internal void wm_window_clear_custom_border_data(WM_Window handle);
|
||||||
internal void os_window_push_custom_title_bar(OS_Window handle, F32 thickness);
|
internal void wm_window_push_custom_title_bar(WM_Window handle, F32 thickness);
|
||||||
internal void os_window_push_custom_edges(OS_Window handle, F32 thickness);
|
internal void wm_window_push_custom_edges(WM_Window handle, F32 thickness);
|
||||||
internal void os_window_push_custom_title_bar_client_area(OS_Window handle, Rng2F32 rect);
|
internal void wm_window_push_custom_title_bar_client_area(WM_Window handle, Rng2F32 rect);
|
||||||
internal Rng2F32 os_rect_from_window(OS_Window window);
|
internal Rng2F32 wm_rect_from_window(WM_Window window);
|
||||||
internal Rng2F32 os_client_rect_from_window(OS_Window window);
|
internal Rng2F32 wm_client_rect_from_window(WM_Window window);
|
||||||
internal F32 os_dpi_from_window(OS_Window window);
|
internal F32 wm_dpi_from_window(WM_Window window);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_ExternalWindow os_focused_external_window(void);
|
internal WM_ExtWindow wm_focused_external_window(void);
|
||||||
internal void os_focus_external_window(OS_ExternalWindow ext_window);
|
internal void wm_focus_external_window(WM_ExtWindow ext_window);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_MonitorArray os_push_monitors_array(Arena *arena);
|
internal WM_MonitorArray wm_push_monitors_array(Arena *arena);
|
||||||
internal OS_Monitor os_primary_monitor(void);
|
internal WM_Monitor wm_primary_monitor(void);
|
||||||
internal OS_Monitor os_monitor_from_window(OS_Window window);
|
internal WM_Monitor wm_monitor_from_window(WM_Window window);
|
||||||
internal String8 os_name_from_monitor(Arena *arena, OS_Monitor monitor);
|
internal String8 wm_name_from_monitor(Arena *arena, WM_Monitor monitor);
|
||||||
internal Vec2F32 os_dim_from_monitor(OS_Monitor monitor);
|
internal Vec2F32 wm_dim_from_monitor(WM_Monitor monitor);
|
||||||
internal F32 os_dpi_from_monitor(OS_Monitor monitor);
|
internal F32 wm_dpi_from_monitor(WM_Monitor monitor);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
||||||
|
|
||||||
internal void os_send_wakeup_event(void);
|
internal void wm_send_wakeup_event(void);
|
||||||
internal OS_EventList os_get_events(Arena *arena, B32 wait);
|
internal WM_EventList wm_get_events(Arena *arena, B32 wait);
|
||||||
internal OS_Modifiers os_get_modifiers(void);
|
internal WM_Modifiers wm_get_modifiers(void);
|
||||||
internal B32 os_key_is_down(OS_Key key);
|
internal B32 wm_key_is_down(WM_Key key);
|
||||||
internal Vec2F32 os_mouse_from_window(OS_Window window);
|
internal Vec2F32 wm_mouse_from_window(WM_Window window);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
||||||
|
|
||||||
internal void os_set_cursor(OS_Cursor cursor);
|
internal void wm_set_cursor(WM_Cursor cursor);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||||
|
|
||||||
internal void os_graphical_message(B32 error, String8 title, String8 message);
|
internal void wm_graphical_message(B32 error, String8 title, String8 message);
|
||||||
internal String8 os_graphical_pick_file(Arena *arena, String8 initial_path);
|
internal String8 wm_graphical_pick_file(Arena *arena, String8 initial_path);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Shell Operations
|
//~ rjf: @os_hooks Shell Operations
|
||||||
|
|
||||||
internal void os_show_in_filesystem_ui(String8 path);
|
internal void wm_show_in_filesystem_ui(String8 path);
|
||||||
internal void os_open_in_browser(String8 url);
|
internal void wm_open_in_browser(String8 url);
|
||||||
|
|
||||||
#endif // OS_GFX_H
|
#endif // WINDOW_MANAGER_H
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
//~ rjf: Tables
|
//~ rjf: Tables
|
||||||
|
|
||||||
@table(name, display_string, cfg_string)
|
@table(name, display_string, cfg_string)
|
||||||
OS_KeyTable:
|
WM_KeyTable:
|
||||||
{
|
{
|
||||||
{Null "Invalid Key" "null" }
|
{Null "Invalid Key" "null" }
|
||||||
{Esc "Escape" "esc" }
|
{Esc "Escape" "esc" }
|
||||||
@@ -155,18 +155,18 @@ OS_KeyTable:
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Generators
|
//~ rjf: Generators
|
||||||
|
|
||||||
@enum OS_Key:
|
@enum WM_Key:
|
||||||
{
|
{
|
||||||
@expand(OS_KeyTable a) `$(a.name)`,
|
@expand(WM_KeyTable a) `$(a.name)`,
|
||||||
COUNT,
|
COUNT,
|
||||||
}
|
}
|
||||||
|
|
||||||
@data(String8) os_g_key_display_string_table:
|
@data(String8) wm_key_display_name_table:
|
||||||
{
|
{
|
||||||
@expand(OS_KeyTable a) `str8_lit_comp("$(a.display_string)")`;
|
@expand(WM_KeyTable a) `str8_lit_comp("$(a.display_string)")`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@data(String8) os_g_key_cfg_string_table:
|
@data(String8) wm_key_cfg_name_table:
|
||||||
{
|
{
|
||||||
@expand(OS_KeyTable a) `str8_lit_comp("$(a.cfg_string)")`;
|
@expand(WM_KeyTable a) `str8_lit_comp("$(a.cfg_string)")`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
//~ rjf: @os_hooks Main Initialization API (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_gfx_init(void)
|
wm_init(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
//~ rjf: @os_hooks Graphics System Info (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_GfxInfo *
|
internal WM_SystemInfo *
|
||||||
os_get_gfx_info(void)
|
wm_get_system_info(void)
|
||||||
{
|
{
|
||||||
local_persist OS_GfxInfo g = {0};
|
local_persist WM_SystemInfo g = {0};
|
||||||
return &g;
|
return &g;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,12 +20,12 @@ os_get_gfx_info(void)
|
|||||||
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
//~ rjf: @os_hooks Clipboards (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_set_clipboard_text(String8 string)
|
wm_set_clipboard_text(String8 string)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_get_clipboard_text(Arena *arena)
|
wm_get_clipboard_text(Arena *arena)
|
||||||
{
|
{
|
||||||
return str8_zero();
|
return str8_zero();
|
||||||
}
|
}
|
||||||
@@ -33,118 +33,118 @@ os_get_clipboard_text(Arena *arena)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle
|
internal WM_Window
|
||||||
os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
wm_window_open(Rng2F32 rect, WM_WindowFlags flags, String8 title)
|
||||||
{
|
{
|
||||||
OS_Handle handle = {1};
|
WM_Window handle = {1};
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_close(OS_Handle window)
|
wm_window_close(WM_Window window)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_title(OS_Handle window, String8 title)
|
wm_window_set_title(WM_Window window, String8 title)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_first_paint(OS_Handle window)
|
wm_window_first_paint(WM_Window window)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_focus(OS_Handle window)
|
wm_window_focus(WM_Window window)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_focused(OS_Handle window)
|
wm_window_is_focused(WM_Window window)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_fullscreen(OS_Handle window)
|
wm_window_is_fullscreen(WM_Window window)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_fullscreen(OS_Handle window, B32 fullscreen)
|
wm_window_set_fullscreen(WM_Window window, B32 fullscreen)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_maximized(OS_Handle window)
|
wm_window_is_maximized(WM_Window window)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_maximized(OS_Handle window, B32 maximized)
|
wm_window_set_maximized(WM_Window window, B32 maximized)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_window_is_minimized(OS_Handle window)
|
wm_window_is_minimized(WM_Window window)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_minimized(OS_Handle window, B32 minimized)
|
wm_window_set_minimized(WM_Window window, B32 minimized)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_bring_to_front(OS_Handle window)
|
wm_window_bring_to_front(WM_Window window)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_set_monitor(OS_Handle window, OS_Handle monitor)
|
wm_window_set_monitor(WM_Window window, WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_clear_custom_border_data(OS_Handle handle)
|
wm_window_clear_custom_border_data(WM_Window handle)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_title_bar(OS_Handle handle, F32 thickness)
|
wm_window_push_custom_title_bar(WM_Window handle, F32 thickness)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_edges(OS_Handle handle, F32 thickness)
|
wm_window_push_custom_edges(WM_Window handle, F32 thickness)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_push_custom_title_bar_client_area(OS_Handle handle, Rng2F32 rect)
|
wm_window_push_custom_title_bar_client_area(WM_Window handle, Rng2F32 rect)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Rng2F32
|
internal Rng2F32
|
||||||
os_rect_from_window(OS_Handle window)
|
wm_rect_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
Rng2F32 rect = r2f32(v2f32(0, 0), v2f32(500, 500));
|
Rng2F32 rect = r2f32(v2f32(0, 0), v2f32(500, 500));
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Rng2F32
|
internal Rng2F32
|
||||||
os_client_rect_from_window(OS_Handle window)
|
wm_client_rect_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
Rng2F32 rect = r2f32(v2f32(0, 0), v2f32(500, 500));
|
Rng2F32 rect = r2f32(v2f32(0, 0), v2f32(500, 500));
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal F32
|
internal F32
|
||||||
os_dpi_from_window(OS_Handle window)
|
wm_dpi_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
return 96.f;
|
return 96.f;
|
||||||
}
|
}
|
||||||
@@ -152,59 +152,57 @@ os_dpi_from_window(OS_Handle window)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks External Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle
|
internal WM_ExtWindow
|
||||||
os_focused_external_window(void)
|
wm_focused_external_window(void)
|
||||||
{
|
{
|
||||||
OS_Handle result = {0};
|
WM_ExtWindow result = {0};
|
||||||
// TODO(rjf)
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_focus_external_window(OS_Handle handle)
|
wm_focus_external_window(WM_ExtWindow handle)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
//~ rjf: @os_hooks Monitors (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_HandleArray
|
internal WM_MonitorArray
|
||||||
os_push_monitors_array(Arena *arena)
|
wm_push_monitors_array(Arena *arena)
|
||||||
{
|
{
|
||||||
OS_HandleArray arr = {0};
|
WM_MonitorArray arr = {0};
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Handle
|
internal WM_Monitor
|
||||||
os_primary_monitor(void)
|
wm_primary_monitor(void)
|
||||||
{
|
{
|
||||||
OS_Handle handle = {1};
|
WM_Monitor handle = {1};
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Handle
|
internal WM_Monitor
|
||||||
os_monitor_from_window(OS_Handle window)
|
wm_monitor_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
OS_Handle handle = {1};
|
WM_Monitor handle = {1};
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_name_from_monitor(Arena *arena, OS_Handle monitor)
|
wm_name_from_monitor(Arena *arena, WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
return str8_zero();
|
return str8_zero();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Vec2F32
|
internal Vec2F32
|
||||||
os_dim_from_monitor(OS_Handle monitor)
|
wm_dim_from_monitor(WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
Vec2F32 v = v2f32(1000, 1000);
|
Vec2F32 v = v2f32(1000, 1000);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal F32
|
internal F32
|
||||||
os_dpi_from_monitor(OS_Handle monitor)
|
wm_dpi_from_monitor(WM_Monitor monitor)
|
||||||
{
|
{
|
||||||
return 96.f;
|
return 96.f;
|
||||||
}
|
}
|
||||||
@@ -213,32 +211,32 @@ os_dpi_from_monitor(OS_Handle monitor)
|
|||||||
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
//~ rjf: @os_hooks Events (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_send_wakeup_event(void)
|
wm_send_wakeup_event(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_EventList
|
internal WM_EventList
|
||||||
os_get_events(Arena *arena, B32 wait)
|
wm_get_events(Arena *arena, B32 wait)
|
||||||
{
|
{
|
||||||
OS_EventList evts = {0};
|
WM_EventList evts = {0};
|
||||||
return evts;
|
return evts;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal OS_Modifiers
|
internal WM_Modifiers
|
||||||
os_get_modifiers(void)
|
wm_get_modifiers(void)
|
||||||
{
|
{
|
||||||
OS_Modifiers f = 0;
|
WM_Modifiers f = 0;
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
os_key_is_down(OS_Key key)
|
wm_key_is_down(WM_Key key)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Vec2F32
|
internal Vec2F32
|
||||||
os_mouse_from_window(OS_Handle window)
|
wm_mouse_from_window(WM_Window window)
|
||||||
{
|
{
|
||||||
return v2f32(0, 0);
|
return v2f32(0, 0);
|
||||||
}
|
}
|
||||||
@@ -247,7 +245,7 @@ os_mouse_from_window(OS_Handle window)
|
|||||||
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
//~ rjf: @os_hooks Cursors (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_set_cursor(OS_Cursor cursor)
|
wm_set_cursor(WM_Cursor cursor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,12 +253,12 @@ os_set_cursor(OS_Cursor cursor)
|
|||||||
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
//~ rjf: @os_hooks Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_graphical_message(B32 error, String8 title, String8 message)
|
wm_graphical_message(B32 error, String8 title, String8 message)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
os_graphical_pick_file(Arena *arena, String8 initial_path)
|
wm_graphical_pick_file(Arena *arena, String8 initial_path)
|
||||||
{
|
{
|
||||||
return str8_zero();
|
return str8_zero();
|
||||||
}
|
}
|
||||||
@@ -269,11 +267,11 @@ os_graphical_pick_file(Arena *arena, String8 initial_path)
|
|||||||
//~ rjf: @os_hooks Shell Operations
|
//~ rjf: @os_hooks Shell Operations
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_show_in_filesystem_ui(String8 path)
|
wm_show_in_filesystem_ui(String8 path)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_open_in_browser(String8 url)
|
wm_open_in_browser(String8 url)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Epic Games Tools
|
// Copyright (c) Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
#ifndef OS_GFX_STUB_H
|
#ifndef WINDOW_MANAGER_STUB_H
|
||||||
#define OS_GFX_STUB_H
|
#define WINDOW_MANAGER_STUB_H
|
||||||
|
|
||||||
#endif // OS_GFX_STUB_H
|
#endif // WINDOW_MANAGER_STUB_H
|
||||||
|
|||||||
Reference in New Issue
Block a user