summaryrefslogtreecommitdiff
path: root/src/gui/base.h
diff options
context:
space:
mode:
authoraura <nw@moneybot.cc>2026-08-11 19:10:16 +0200
committeraura <nw@moneybot.cc>2026-08-11 19:10:16 +0200
commit17c07b5f884453130d8be3a6d91d730d80d4f8ae (patch)
tree6ec11e5e5f7f0be9ed899196c2897aa76a907de2 /src/gui/base.h
parent1aa17de9188790f049c0edc4281597cb4e535627 (diff)
parent0a9d7ce6a0764a87766ebb23cc1ece4c26c8c678 (diff)
Merge remote-tracking branch 'origin/day'
Diffstat (limited to 'src/gui/base.h')
-rw-r--r--src/gui/base.h86
1 files changed, 83 insertions, 3 deletions
diff --git a/src/gui/base.h b/src/gui/base.h
index 108988d..c2c09d1 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<GUI_CONTEXT_ENTRY> 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<GUI_CONTEXTMENU_ITEM> 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<GUI_CONTEXT_ENTRY>* entries );
extern struct GUI_CONTEXTBOX* gui_contextbox( I32 x, I32 y, I32 w, I32 h, LIST<GUI_CONTEXT_ENTRY>* entries );
+extern struct GUI_CONTEXTMENU* gui_show_contextmenu(
+ I32 x, I32 y,
+ LIST<GUI_CONTEXTMENU_ITEM>* items,
+ GUI_BASE* parent,
+ const char* title = 0,
+ I32 max_visible_rows = 0,
+ struct GUI_CONTEXTMENU** owner_ref = 0
+);
+extern void gui_contextmenu_hide( 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<GUI_CONTEXTMENU_ITEM>* 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<GUI_CONTEXT_ENTRY>* entries;
};