further memory view fixes / tweaks; rich hover coverage for virtual address ranges in memory views / watch views

This commit is contained in:
Ryan Fleury
2025-06-06 14:57:46 -07:00
parent 2d9929452c
commit 4057e00fa1
13 changed files with 248 additions and 122 deletions
+6
View File
@@ -25,6 +25,7 @@
#define UI_Tag(v) DeferLoop(ui_push_tag(v), ui_pop_tag())
#define UI_BackgroundColor(v) DeferLoop(ui_push_background_color(v), ui_pop_background_color())
#define UI_TextColor(v) DeferLoop(ui_push_text_color(v), ui_pop_text_color())
#define UI_BorderColor(v) DeferLoop(ui_push_border_color(v), ui_pop_border_color())
#define UI_Squish(v) DeferLoop(ui_push_squish(v), ui_pop_squish())
#define UI_HoverCursor(v) DeferLoop(ui_push_hover_cursor(v), ui_pop_hover_cursor())
#define UI_Font(v) DeferLoop(ui_push_font(v), ui_pop_font())
@@ -59,6 +60,7 @@ internal UI_Key ui_top_group_key(void) { UI_StackTopImpl(ui_state, GroupKey, gro
internal F32 ui_top_transparency(void) { UI_StackTopImpl(ui_state, Transparency, transparency) }
internal Vec4F32 ui_top_background_color(void) { UI_StackTopImpl(ui_state, BackgroundColor, background_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 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 FNT_Tag ui_top_font(void) { UI_StackTopImpl(ui_state, Font, font) }
@@ -92,6 +94,7 @@ internal UI_Key ui_bottom_group_key(void) { UI_StackBottomImpl(ui_state, GroupKe
internal F32 ui_bottom_transparency(void) { UI_StackBottomImpl(ui_state, Transparency, transparency) }
internal Vec4F32 ui_bottom_background_color(void) { UI_StackBottomImpl(ui_state, BackgroundColor, background_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 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 FNT_Tag ui_bottom_font(void) { UI_StackBottomImpl(ui_state, Font, font) }
@@ -125,6 +128,7 @@ internal UI_Key ui_push_group_key(UI_Key v) { UI_StackPushImpl(ui_state, GroupKe
internal F32 ui_push_transparency(F32 v) { UI_StackPushImpl(ui_state, Transparency, transparency, F32, v) }
internal Vec4F32 ui_push_background_color(Vec4F32 v) { UI_StackPushImpl(ui_state, BackgroundColor, background_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 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 FNT_Tag ui_push_font(FNT_Tag v) { UI_StackPushImpl(ui_state, Font, font, FNT_Tag, v) }
@@ -158,6 +162,7 @@ internal UI_Key ui_pop_group_key(void) { UI_StackPopImpl(ui_state, GroupKey, gro
internal F32 ui_pop_transparency(void) { UI_StackPopImpl(ui_state, Transparency, transparency) }
internal Vec4F32 ui_pop_background_color(void) { UI_StackPopImpl(ui_state, BackgroundColor, background_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 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 FNT_Tag ui_pop_font(void) { UI_StackPopImpl(ui_state, Font, font) }
@@ -191,6 +196,7 @@ internal UI_Key ui_set_next_group_key(UI_Key v) { UI_StackSetNextImpl(ui_state,
internal F32 ui_set_next_transparency(F32 v) { UI_StackSetNextImpl(ui_state, Transparency, transparency, F32, v) }
internal Vec4F32 ui_set_next_background_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, BackgroundColor, background_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 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 FNT_Tag ui_set_next_font(FNT_Tag v) { UI_StackSetNextImpl(ui_state, Font, font, FNT_Tag, v) }
+11
View File
@@ -27,6 +27,7 @@ typedef struct UI_TransparencyNode UI_TransparencyNode; struct UI_TransparencyNo
typedef struct UI_TagNode UI_TagNode; struct UI_TagNode{UI_TagNode *next; String8 v;};
typedef struct UI_BackgroundColorNode UI_BackgroundColorNode; struct UI_BackgroundColorNode{UI_BackgroundColorNode *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_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_FontNode UI_FontNode; struct UI_FontNode{UI_FontNode *next; FNT_Tag v;};
@@ -64,6 +65,7 @@ UI_TransparencyNode transparency_nil_stack_top;\
UI_TagNode tag_nil_stack_top;\
UI_BackgroundColorNode background_color_nil_stack_top;\
UI_TextColorNode text_color_nil_stack_top;\
UI_BorderColorNode border_color_nil_stack_top;\
UI_SquishNode squish_nil_stack_top;\
UI_HoverCursorNode hover_cursor_nil_stack_top;\
UI_FontNode font_nil_stack_top;\
@@ -100,6 +102,7 @@ state->transparency_nil_stack_top.v = 0;\
state->tag_nil_stack_top.v = str8_lit("");\
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->border_color_nil_stack_top.v = v4f32(0, 0, 0, 0);\
state->squish_nil_stack_top.v = 0;\
state->hover_cursor_nil_stack_top.v = OS_Cursor_Pointer;\
state->font_nil_stack_top.v = fnt_tag_zero();\
@@ -138,6 +141,7 @@ struct { UI_TransparencyNode *top; F32 bottom_val; UI_TransparencyNode *free; U6
struct { UI_TagNode *top; String8 bottom_val; UI_TagNode *free; U64 gen; B32 auto_pop; } tag_stack;\
struct { UI_BackgroundColorNode *top; Vec4F32 bottom_val; UI_BackgroundColorNode *free; U64 gen; B32 auto_pop; } background_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_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_FontNode *top; FNT_Tag bottom_val; UI_FontNode *free; U64 gen; B32 auto_pop; } font_stack;\
@@ -174,6 +178,7 @@ state->transparency_stack.top = &state->transparency_nil_stack_top; state->trans
state->tag_stack.top = &state->tag_nil_stack_top; state->tag_stack.bottom_val = str8_lit(""); state->tag_stack.free = 0; state->tag_stack.auto_pop = 0;\
state->background_color_stack.top = &state->background_color_nil_stack_top; state->background_color_stack.bottom_val = v4f32(0, 0, 0, 0); state->background_color_stack.free = 0; state->background_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->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->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;\
@@ -210,6 +215,7 @@ if(state->transparency_stack.auto_pop) { ui_pop_transparency(); state->transpare
if(state->tag_stack.auto_pop) { ui_pop_tag(); state->tag_stack.auto_pop = 0; }\
if(state->background_color_stack.auto_pop) { ui_pop_background_color(); state->background_color_stack.auto_pop = 0; }\
if(state->text_color_stack.auto_pop) { ui_pop_text_color(); state->text_color_stack.auto_pop = 0; }\
if(state->border_color_stack.auto_pop) { ui_pop_border_color(); state->border_color_stack.auto_pop = 0; }\
if(state->squish_stack.auto_pop) { ui_pop_squish(); state->squish_stack.auto_pop = 0; }\
if(state->hover_cursor_stack.auto_pop) { ui_pop_hover_cursor(); state->hover_cursor_stack.auto_pop = 0; }\
if(state->font_stack.auto_pop) { ui_pop_font(); state->font_stack.auto_pop = 0; }\
@@ -245,6 +251,7 @@ internal F32 ui_top_transparency(void);
internal String8 ui_top_tag(void);
internal Vec4F32 ui_top_background_color(void);
internal Vec4F32 ui_top_text_color(void);
internal Vec4F32 ui_top_border_color(void);
internal F32 ui_top_squish(void);
internal OS_Cursor ui_top_hover_cursor(void);
internal FNT_Tag ui_top_font(void);
@@ -279,6 +286,7 @@ internal F32 ui_bottom_transparency(void);
internal String8 ui_bottom_tag(void);
internal Vec4F32 ui_bottom_background_color(void);
internal Vec4F32 ui_bottom_text_color(void);
internal Vec4F32 ui_bottom_border_color(void);
internal F32 ui_bottom_squish(void);
internal OS_Cursor ui_bottom_hover_cursor(void);
internal FNT_Tag ui_bottom_font(void);
@@ -313,6 +321,7 @@ internal F32 ui_push_transparency(F32 v);
internal String8 ui_push_tag(String8 v);
internal Vec4F32 ui_push_background_color(Vec4F32 v);
internal Vec4F32 ui_push_text_color(Vec4F32 v);
internal Vec4F32 ui_push_border_color(Vec4F32 v);
internal F32 ui_push_squish(F32 v);
internal OS_Cursor ui_push_hover_cursor(OS_Cursor v);
internal FNT_Tag ui_push_font(FNT_Tag v);
@@ -347,6 +356,7 @@ internal F32 ui_pop_transparency(void);
internal String8 ui_pop_tag(void);
internal Vec4F32 ui_pop_background_color(void);
internal Vec4F32 ui_pop_text_color(void);
internal Vec4F32 ui_pop_border_color(void);
internal F32 ui_pop_squish(void);
internal OS_Cursor ui_pop_hover_cursor(void);
internal FNT_Tag ui_pop_font(void);
@@ -381,6 +391,7 @@ internal F32 ui_set_next_transparency(F32 v);
internal String8 ui_set_next_tag(String8 v);
internal Vec4F32 ui_set_next_background_color(Vec4F32 v);
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
internal F32 ui_set_next_squish(F32 v);
internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v);
internal FNT_Tag ui_set_next_font(FNT_Tag v);
+1
View File
@@ -38,6 +38,7 @@ UI_StackTable:
{ Tag tag String8 `str8_lit("")` 1 }
{ BackgroundColor background_color Vec4F32 `v4f32(0, 0, 0, 0)` }
{ TextColor text_color Vec4F32 `v4f32(0, 0, 0, 0)` }
{ BorderColor border_color Vec4F32 `v4f32(0, 0, 0, 0)` }
//- rjf: squish
{ Squish squish F32 0 }
+15
View File
@@ -2606,6 +2606,21 @@ ui_build_box_from_key(UI_BoxFlags flags, UI_Key key)
box->text_color = ui_color_from_name(str8_lit("text"));
}
}
if(box->flags & (UI_BoxFlag_DrawBorder|
UI_BoxFlag_DrawSideRight|
UI_BoxFlag_DrawSideLeft|
UI_BoxFlag_DrawSideTop|
UI_BoxFlag_DrawSideBottom))
{
if(ui_state->border_color_stack.top != &ui_state->border_color_nil_stack_top)
{
box->border_color = ui_state->border_color_stack.top->v;
}
else
{
box->border_color = ui_color_from_name(str8_lit("border"));
}
}
}
//- rjf: auto-pop all stacks
+16
View File
@@ -396,6 +396,7 @@ struct UI_Box
void *custom_draw_user_data;
Vec4F32 background_color;
Vec4F32 text_color;
Vec4F32 border_color;
FNT_Tag font;
F32 font_size;
F32 tab_size;
@@ -969,6 +970,8 @@ internal F32 ui_top_fixed_width(void);
internal F32 ui_top_fixed_height(void);
internal UI_Size ui_top_pref_width(void);
internal UI_Size ui_top_pref_height(void);
internal F32 ui_top_min_width(void);
internal F32 ui_top_min_height(void);
internal UI_PermissionFlags ui_top_permission_flags(void);
internal UI_BoxFlags ui_top_flags(void);
internal UI_BoxFlags ui_top_omit_flags(void);
@@ -980,6 +983,7 @@ internal F32 ui_top_transparency(void);
internal String8 ui_top_tag(void);
internal Vec4F32 ui_top_background_color(void);
internal Vec4F32 ui_top_text_color(void);
internal Vec4F32 ui_top_border_color(void);
internal F32 ui_top_squish(void);
internal OS_Cursor ui_top_hover_cursor(void);
internal FNT_Tag ui_top_font(void);
@@ -1001,6 +1005,8 @@ internal F32 ui_bottom_fixed_width(void);
internal F32 ui_bottom_fixed_height(void);
internal UI_Size ui_bottom_pref_width(void);
internal UI_Size ui_bottom_pref_height(void);
internal F32 ui_bottom_min_width(void);
internal F32 ui_bottom_min_height(void);
internal UI_PermissionFlags ui_bottom_permission_flags(void);
internal UI_BoxFlags ui_bottom_flags(void);
internal UI_BoxFlags ui_bottom_omit_flags(void);
@@ -1012,6 +1018,7 @@ internal F32 ui_bottom_transparency(void);
internal String8 ui_bottom_tag(void);
internal Vec4F32 ui_bottom_background_color(void);
internal Vec4F32 ui_bottom_text_color(void);
internal Vec4F32 ui_bottom_border_color(void);
internal F32 ui_bottom_squish(void);
internal OS_Cursor ui_bottom_hover_cursor(void);
internal FNT_Tag ui_bottom_font(void);
@@ -1033,6 +1040,8 @@ internal F32 ui_push_fixed_width(F32 v);
internal F32 ui_push_fixed_height(F32 v);
internal UI_Size ui_push_pref_width(UI_Size v);
internal UI_Size ui_push_pref_height(UI_Size v);
internal F32 ui_push_min_width(F32 v);
internal F32 ui_push_min_height(F32 v);
internal UI_PermissionFlags ui_push_permission_flags(UI_PermissionFlags v);
internal UI_BoxFlags ui_push_flags(UI_BoxFlags v);
internal UI_BoxFlags ui_push_omit_flags(UI_BoxFlags v);
@@ -1044,6 +1053,7 @@ internal F32 ui_push_transparency(F32 v);
internal String8 ui_push_tag(String8 v);
internal Vec4F32 ui_push_background_color(Vec4F32 v);
internal Vec4F32 ui_push_text_color(Vec4F32 v);
internal Vec4F32 ui_push_border_color(Vec4F32 v);
internal F32 ui_push_squish(F32 v);
internal OS_Cursor ui_push_hover_cursor(OS_Cursor v);
internal FNT_Tag ui_push_font(FNT_Tag v);
@@ -1065,6 +1075,8 @@ internal F32 ui_pop_fixed_width(void);
internal F32 ui_pop_fixed_height(void);
internal UI_Size ui_pop_pref_width(void);
internal UI_Size ui_pop_pref_height(void);
internal F32 ui_pop_min_width(void);
internal F32 ui_pop_min_height(void);
internal UI_PermissionFlags ui_pop_permission_flags(void);
internal UI_BoxFlags ui_pop_flags(void);
internal UI_BoxFlags ui_pop_omit_flags(void);
@@ -1076,6 +1088,7 @@ internal F32 ui_pop_transparency(void);
internal String8 ui_pop_tag(void);
internal Vec4F32 ui_pop_background_color(void);
internal Vec4F32 ui_pop_text_color(void);
internal Vec4F32 ui_pop_border_color(void);
internal F32 ui_pop_squish(void);
internal OS_Cursor ui_pop_hover_cursor(void);
internal FNT_Tag ui_pop_font(void);
@@ -1097,6 +1110,8 @@ internal F32 ui_set_next_fixed_width(F32 v);
internal F32 ui_set_next_fixed_height(F32 v);
internal UI_Size ui_set_next_pref_width(UI_Size v);
internal UI_Size ui_set_next_pref_height(UI_Size v);
internal F32 ui_set_next_min_width(F32 v);
internal F32 ui_set_next_min_height(F32 v);
internal UI_PermissionFlags ui_set_next_permission_flags(UI_PermissionFlags v);
internal UI_BoxFlags ui_set_next_flags(UI_BoxFlags v);
internal UI_BoxFlags ui_set_next_omit_flags(UI_BoxFlags v);
@@ -1108,6 +1123,7 @@ internal F32 ui_set_next_transparency(F32 v);
internal String8 ui_set_next_tag(String8 v);
internal Vec4F32 ui_set_next_background_color(Vec4F32 v);
internal Vec4F32 ui_set_next_text_color(Vec4F32 v);
internal Vec4F32 ui_set_next_border_color(Vec4F32 v);
internal F32 ui_set_next_squish(F32 v);
internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v);
internal FNT_Tag ui_set_next_font(FNT_Tag v);