From 2973df584978d9aae6f164ce0204179c8a28b3ae Mon Sep 17 00:00:00 2001 From: 2lag <96544487+2lag@users.noreply.github.com> Date: Sat, 8 Aug 2026 17:33:36 +0200 Subject: console, textbox changes, some other shit --- src/gui/base.h | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 3 deletions(-) (limited to 'src/gui/base.h') diff --git a/src/gui/base.h b/src/gui/base.h index 108988d..3fedfcf 100644 --- a/src/gui/base.h +++ b/src/gui/base.h @@ -11,6 +11,8 @@ static const struct { CLR bg = CLR::blend( CLR::WHITE(), CLR::BLACK(), 0.92f ); CLR bg_sec = CLR::blend( CLR::WHITE(), CLR::BLACK(), 0.97f ); CLR bg_alt = CLR::blend( CLR::WHITE(), CLR::BLACK(), 0.985f ); + CLR shadow = CLR::blend_root( CLR::BLACK(), CLR::WHITE(), 0.05f ); + CLR selection = CLR::blend( CLR::WHITE(), CLR::BLACK(), 0.7f ); } ui_clr; // ========================================== [ base ] ============================================ @@ -35,6 +37,7 @@ extern struct GUI_WINDOW* gui_get_parent_wnd( struct GUI_BASE* node ); extern void gui_empty_children( struct GUI_BASE* node ); extern void gui_free( struct GUI_BASE* node ); +extern void gui_shutdown(); extern struct GUI_VIEW* gui_get_view(); // gets currently edited view extern void gui_set_view( struct GUI_VIEW* view ); // sets currently edited view @@ -58,6 +61,18 @@ struct GUI_CONTEXT_ENTRY { LIST subentries; }; +typedef void( *GUI_CONTEXTMENU_CALLBACK )( void* data ); +struct GUI_CONTEXTMENU_ITEM; +typedef U8( *GUI_CONTEXTMENU_ENABLED_CALLBACK )( GUI_CONTEXTMENU_ITEM* item ); + +struct GUI_CONTEXTMENU_ITEM { + char text[64]{}; + void* data{}; + GUI_CONTEXTMENU_CALLBACK cb{}; + GUI_CONTEXTMENU_ENABLED_CALLBACK enabled_cb{}; + U8 enabled{1}; + LIST items{}; +}; extern struct GUI_VIEW* gui_view( I32 x, I32 y, I32 w, I32 h ); // sets current view extern struct GUI_WINDOW* gui_window( I32 w, I32 h ); // sets current view and window @@ -76,6 +91,39 @@ extern struct GUI_LIST_ENTRY* gui_list_get_selected( struct GUI_LIST* list ); extern struct GUI_CONTEXTBOX* gui_contextbox( I32 x, I32 y, I32 w, I32 h, const char* title, LIST* entries ); extern struct GUI_CONTEXTBOX* gui_contextbox( I32 x, I32 y, I32 w, I32 h, LIST* entries ); +extern struct GUI_CONTEXTMENU* gui_show_contextmenu( + I32 x, I32 y, + LIST* items, + GUI_BASE* parent, + const char* title = 0, + I32 max_visible_rows = 0, + struct GUI_CONTEXTMENU** owner_ref = 0 +); +extern void gui_hide_contextmenu( GUI_CONTEXTMENU* menu ); +extern U8 gui_contextmenu_open( GUI_CONTEXTMENU* menu ); +extern I32 gui_contextmenu_height( + I32 rows, + const char* title = 0 +); +extern void gui_contextmenu_move_selection( + GUI_CONTEXTMENU* menu, + I32 delta, + U8 wrap = 1 +); +extern void gui_contextmenu_reveal_selection( + GUI_CONTEXTMENU* menu +); +extern void gui_contextmenu_set_item( + GUI_CONTEXTMENU_ITEM* item, + const char* text, + GUI_CONTEXTMENU_CALLBACK cb = 0, + void* data = 0, + GUI_CONTEXTMENU_ENABLED_CALLBACK enabled_cb = 0 +); +extern struct GUI_CONTEXTMENU_ITEM* gui_contextmenu_selected( + GUI_CONTEXTMENU* menu +); + extern struct GUI_FLOATINPUT* gui_floatinput( I32 x, I32 y, I32 w, const char* title, @@ -108,6 +156,16 @@ extern struct GUI_COLORINPUT* gui_colorinput( U8 showalpha = 1 ); +extern struct GUI_CONSOLEWINDOW* gui_consolewindow( + I32 x, + I32 y, + I32 w, + I32 h +); +extern U8 gui_consolewindow_is_open(); +extern void gui_consolewindow_toggle(); +extern U8 gui_consolewindow_input_focused(); + // ======================================= [ definitions ] ======================================== enum GuiTxtAlign_t { @@ -201,16 +259,22 @@ struct GUI_DROPDOWN : GUI_BASE { struct GUI_TEXTBOX : GUI_BASE { char value[GUI_TEXTBOX_MAX]; - U32 len; U32 maxlen; - U8 keys[0xff]; - U8 prevkeys[0xff]; + U8 keys[0x100]; + U8 prevkeys[0x100]; U8 heldkey; F32 heldtime; F32 repeattime; + U32 cursorin, cursorout; + I32 cursorpxin, cursorpxout; + I32 cursorpy; + I32 scrollpx, scrollpy; + U8 cursor_goal_valid; + I32 cursor_goal_px; + F32 blinktime; U8 blink; @@ -223,6 +287,22 @@ struct GUI_TEXTBOX : GUI_BASE { GUI_CALLBACK pre_cb; }; +struct GUI_CONTEXTMENU : GUI_BASE { + LIST* items{}; + GUI_CONTEXTMENU** owner_ref{}; + + I32 selected_idx{-1}; + I32 first_visible{}; + I32 visible_rows{}; + I32 max_visible_rows{}; + + U8 initheld{1}; + U8 held{}; + I32 held_idx{-1}; + + char title[64]{}; +}; + struct GUI_CONTEXTBOX : GUI_BASE { LIST* entries; }; -- cgit v1.2.3