mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 21:08:40 +00:00
commit window placement/etc. to cfg tree, pass through all monitor/pos/size/fullscreen/maximize info to initialization
This commit is contained in:
@@ -71,8 +71,10 @@ os_get_clipboard_text(Arena *arena)
|
|||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle
|
internal OS_Handle
|
||||||
os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title)
|
os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
||||||
{
|
{
|
||||||
|
Vec2F32 resolution = dim_2f32(rect);
|
||||||
|
|
||||||
//- rjf: allocate window
|
//- rjf: allocate window
|
||||||
OS_LNX_Window *w = os_lnx_gfx_state->free_window;
|
OS_LNX_Window *w = os_lnx_gfx_state->free_window;
|
||||||
if(w)
|
if(w)
|
||||||
|
|||||||
+3
-2
@@ -21,7 +21,8 @@ struct OS_GfxInfo
|
|||||||
typedef U32 OS_WindowFlags;
|
typedef U32 OS_WindowFlags;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
OS_WindowFlag_CustomBorder = (1<<0),
|
OS_WindowFlag_CustomBorder = (1<<0),
|
||||||
|
OS_WindowFlag_UseDefaultPosition = (1<<1),
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -139,7 +140,7 @@ internal String8 os_get_clipboard_text(Arena *arena);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title);
|
internal OS_Handle os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title);
|
||||||
internal void os_window_close(OS_Handle window);
|
internal void os_window_close(OS_Handle window);
|
||||||
internal void os_window_first_paint(OS_Handle window);
|
internal void os_window_first_paint(OS_Handle window);
|
||||||
internal void os_window_focus(OS_Handle window);
|
internal void os_window_focus(OS_Handle window);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ os_get_clipboard_text(Arena *arena)
|
|||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle
|
internal OS_Handle
|
||||||
os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title)
|
os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
||||||
{
|
{
|
||||||
OS_Handle handle = {1};
|
OS_Handle handle = {1};
|
||||||
return handle;
|
return handle;
|
||||||
|
|||||||
@@ -1015,9 +1015,12 @@ os_get_clipboard_text(Arena *arena)
|
|||||||
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
//~ rjf: @os_hooks Windows (Implemented Per-OS)
|
||||||
|
|
||||||
internal OS_Handle
|
internal OS_Handle
|
||||||
os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title)
|
os_window_open(Rng2F32 rect, OS_WindowFlags flags, String8 title)
|
||||||
{
|
{
|
||||||
B32 custom_border = !!(flags & OS_WindowFlag_CustomBorder);
|
B32 custom_border = !!(flags & OS_WindowFlag_CustomBorder);
|
||||||
|
B32 use_default_position = !!(flags & OS_WindowFlag_UseDefaultPosition);
|
||||||
|
Vec2F32 pos = rect.p0;
|
||||||
|
Vec2F32 dim = dim_2f32(rect);
|
||||||
|
|
||||||
//- rjf: make hwnd
|
//- rjf: make hwnd
|
||||||
HWND hwnd = 0;
|
HWND hwnd = 0;
|
||||||
@@ -1029,9 +1032,10 @@ os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title)
|
|||||||
L"graphical-window",
|
L"graphical-window",
|
||||||
(WCHAR*)title16.str,
|
(WCHAR*)title16.str,
|
||||||
WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
|
WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
use_default_position ? CW_USEDEFAULT : (S32)pos.x,
|
||||||
(int)resolution.x,
|
use_default_position ? CW_USEDEFAULT : (S32)pos.y,
|
||||||
(int)resolution.y,
|
(S32)dim.x,
|
||||||
|
(S32)dim.y,
|
||||||
0, 0,
|
0, 0,
|
||||||
os_w32_gfx_state->hInstance,
|
os_w32_gfx_state->hInstance,
|
||||||
0);
|
0);
|
||||||
|
|||||||
+101
-2
@@ -5972,11 +5972,17 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
|||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
|
||||||
// rjf: unpack configuration options
|
// rjf: unpack configuration options
|
||||||
|
B32 has_pos = 0;
|
||||||
|
Vec2F32 pos = {0};
|
||||||
Vec2F32 size = {0};
|
Vec2F32 size = {0};
|
||||||
OS_Handle preferred_monitor = {0};
|
OS_Handle preferred_monitor = {0};
|
||||||
{
|
{
|
||||||
|
RD_Cfg *pos_cfg = rd_cfg_child_from_string(window_cfg, str8_lit("pos"));
|
||||||
|
has_pos = (pos_cfg != &rd_nil_cfg);
|
||||||
RD_Cfg *size_cfg = rd_cfg_child_from_string(window_cfg, str8_lit("size"));
|
RD_Cfg *size_cfg = rd_cfg_child_from_string(window_cfg, str8_lit("size"));
|
||||||
RD_Cfg *monitor_cfg = rd_cfg_child_from_string(window_cfg, str8_lit("monitor"));
|
RD_Cfg *monitor_cfg = rd_cfg_child_from_string(window_cfg, str8_lit("monitor"));
|
||||||
|
pos.x = (F32)f64_from_str8(pos_cfg->first->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_HandleArray monitors = os_push_monitors_array(scratch.arena);
|
OS_HandleArray monitors = os_push_monitors_array(scratch.arena);
|
||||||
@@ -6008,7 +6014,7 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
|||||||
ws->arena = arena_alloc();
|
ws->arena = arena_alloc();
|
||||||
{
|
{
|
||||||
String8 title = str8_lit_comp(BUILD_TITLE_STRING_LITERAL);
|
String8 title = str8_lit_comp(BUILD_TITLE_STRING_LITERAL);
|
||||||
ws->os = os_window_open(size, OS_WindowFlag_CustomBorder, title);
|
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->r = r_window_equip(ws->os);
|
ws->r = r_window_equip(ws->os);
|
||||||
ws->ui = ui_state_alloc();
|
ws->ui = ui_state_alloc();
|
||||||
@@ -6264,6 +6270,94 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- rjf: commit window's position/status to underlying cfg tree
|
||||||
|
//
|
||||||
|
{
|
||||||
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
B32 is_fullscreen = os_window_is_fullscreen(ws->os);
|
||||||
|
B32 is_maximized = os_window_is_maximized(ws->os);
|
||||||
|
if(is_fullscreen)
|
||||||
|
{
|
||||||
|
rd_cfg_child_from_string_or_alloc(window, str8_lit("fullscreen"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rd_cfg_release(rd_cfg_child_from_string(window, str8_lit("fullscreen")));
|
||||||
|
}
|
||||||
|
if(is_maximized)
|
||||||
|
{
|
||||||
|
rd_cfg_child_from_string_or_alloc(window, str8_lit("maximized"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rd_cfg_release(rd_cfg_child_from_string(window, str8_lit("maximized")));
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: commit position
|
||||||
|
Rng2F32 window_rect = os_rect_from_window(ws->os);
|
||||||
|
if(!is_fullscreen && !is_maximized)
|
||||||
|
{
|
||||||
|
Vec2F32 pos = window_rect.p0;
|
||||||
|
RD_Cfg *pos_root = rd_cfg_child_from_string_or_alloc(window, str8_lit("pos"));
|
||||||
|
if((S32)pos.x != (S32)f64_from_str8(pos_root->first->string) ||
|
||||||
|
(S32)pos.y != (S32)f64_from_str8(pos_root->last->string))
|
||||||
|
{
|
||||||
|
RD_Cfg *x = pos_root->first;
|
||||||
|
if(x == &rd_nil_cfg)
|
||||||
|
{
|
||||||
|
x= rd_cfg_alloc();
|
||||||
|
rd_cfg_insert_child(pos_root, &rd_nil_cfg, x);
|
||||||
|
}
|
||||||
|
RD_Cfg *y = x->next;
|
||||||
|
if(y == &rd_nil_cfg)
|
||||||
|
{
|
||||||
|
y = rd_cfg_alloc();
|
||||||
|
rd_cfg_insert_child(pos_root, x, y);
|
||||||
|
}
|
||||||
|
rd_cfg_equip_stringf(x, "%i", (S32)pos.x);
|
||||||
|
rd_cfg_equip_stringf(y, "%i", (S32)pos.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: commit size
|
||||||
|
if(!is_fullscreen && !is_maximized)
|
||||||
|
{
|
||||||
|
Vec2F32 size = dim_2f32(window_rect);
|
||||||
|
RD_Cfg *size_root = rd_cfg_child_from_string_or_alloc(window, str8_lit("size"));
|
||||||
|
if((S32)size.x != (S32)f64_from_str8(size_root->first->string) ||
|
||||||
|
(S32)size.y != (S32)f64_from_str8(size_root->last->string))
|
||||||
|
{
|
||||||
|
RD_Cfg *width = size_root->first;
|
||||||
|
if(width == &rd_nil_cfg)
|
||||||
|
{
|
||||||
|
width = rd_cfg_alloc();
|
||||||
|
rd_cfg_insert_child(size_root, &rd_nil_cfg, width);
|
||||||
|
}
|
||||||
|
RD_Cfg *height = width->next;
|
||||||
|
if(height == &rd_nil_cfg)
|
||||||
|
{
|
||||||
|
height = rd_cfg_alloc();
|
||||||
|
rd_cfg_insert_child(size_root, width, height);
|
||||||
|
}
|
||||||
|
rd_cfg_equip_stringf(width, "%i", (S32)size.x);
|
||||||
|
rd_cfg_equip_stringf(height, "%i", (S32)size.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: commit monitor
|
||||||
|
{
|
||||||
|
OS_Handle monitor = os_monitor_from_window(ws->os);
|
||||||
|
String8 monitor_name = os_name_from_monitor(scratch.arena, monitor);
|
||||||
|
RD_Cfg *monitor_root = rd_cfg_child_from_string_or_alloc(window, str8_lit("monitor"));
|
||||||
|
if(!str8_match(monitor_root->first->string, monitor_name, 0))
|
||||||
|
{
|
||||||
|
rd_cfg_new_replace(monitor_root, monitor_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scratch_end(scratch);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: fill panel/view interaction registers
|
//- rjf: fill panel/view interaction registers
|
||||||
//
|
//
|
||||||
@@ -13616,7 +13710,11 @@ rd_frame(void)
|
|||||||
for(RD_Cfg *old_child = old_window->first; old_child != &rd_nil_cfg; old_child = old_child->next)
|
for(RD_Cfg *old_child = old_window->first; old_child != &rd_nil_cfg; old_child = old_child->next)
|
||||||
{
|
{
|
||||||
if(!str8_match(old_child->string, str8_lit("panels"), 0) &&
|
if(!str8_match(old_child->string, str8_lit("panels"), 0) &&
|
||||||
!str8_match(old_child->string, str8_lit("size"), 0))
|
!str8_match(old_child->string, str8_lit("size"), 0) &&
|
||||||
|
!str8_match(old_child->string, str8_lit("pos"), 0) &&
|
||||||
|
!str8_match(old_child->string, str8_lit("monitor"), 0) &&
|
||||||
|
!str8_match(old_child->string, str8_lit("fullscreen"), 0) &&
|
||||||
|
!str8_match(old_child->string, str8_lit("maximized"), 0))
|
||||||
{
|
{
|
||||||
RD_Cfg *new_child = rd_cfg_deep_copy(old_child);
|
RD_Cfg *new_child = rd_cfg_deep_copy(old_child);
|
||||||
rd_cfg_insert_child(new_window, new_window->last, new_child);
|
rd_cfg_insert_child(new_window, new_window->last, new_child);
|
||||||
@@ -16048,6 +16146,7 @@ Z(getting_started)
|
|||||||
String8 file_path = rd_regs()->file_path;
|
String8 file_path = rd_regs()->file_path;
|
||||||
RD_Cfg *project = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("project"));
|
RD_Cfg *project = rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("project"));
|
||||||
RD_Cfg *target = rd_cfg_new(project, str8_lit("target"));
|
RD_Cfg *target = rd_cfg_new(project, str8_lit("target"));
|
||||||
|
rd_cfg_new(target, str8_lit("disabled"));
|
||||||
RD_Cfg *exe = rd_cfg_new(target, str8_lit("executable"));
|
RD_Cfg *exe = rd_cfg_new(target, str8_lit("executable"));
|
||||||
rd_cfg_new(exe, file_path);
|
rd_cfg_new(exe, file_path);
|
||||||
String8 working_directory = str8_chop_last_slash(file_path);
|
String8 working_directory = str8_chop_last_slash(file_path);
|
||||||
|
|||||||
Reference in New Issue
Block a user