#pragma once #include "base.h" enum RESIZE_EDGES : U8 { RESIZE_NONE = 0, RESIZE_LEFT = 1 << 0, RESIZE_RIGHT = 1 << 1, RESIZE_BOTTOM = 1 << 2 }; enum CONSOLE_MENU_INPUT_MODE : U8 { CONSOLE_MENU_INPUT_NONE = 0, CONSOLE_MENU_INPUT_HIST = 1, CONSOLE_MENU_INPUT_CVAR = 2 }; struct CVAR; struct CONSOLE_WRAPPED_LINE { STR text{}; U64 source_id{}; }; struct GUI_CONSOLEWINDOW : GUI_WINDOW { struct GUI_CONSOLEWINDOW_MENU { struct GUI_CONSOLEWINDOW_INPUT_MENU { char suppressed_value[GUI_TEXTBOX_MAX]{}; LIST items{}; CONSOLE_MENU_INPUT_MODE mode{}; char query[GUI_TEXTBOX_MAX]{}; GUI_CONTEXTMENU* menu{}; LIST cvars{}; U32 history_size{}; U32 cvar_count{}; U8 suppressed{}; } input; struct GUI_CONSOLEWINDOW_OUTPUT_MENU { LIST items{}; GUI_CONTEXTMENU* menu{}; } output; } menus; LIST wrapped_lines{}; U64 wrapped_revision{(U64)-1}; I32 wrapped_width{-1}; U64 seen_revision{}; I32 scroll_offset{}; I32 visible_rows{}; U64 output_selection_anchor{}; U64 output_selection_cursor{}; U8 output_selection_active{}; U8 output_selecting{}; U8 copy_key_held{}; GUI_TEXTBOX* input{}; GUI_BUTTON* close{}; GUI_TITLE* title{}; RESIZE_EDGES active_edges = RESIZE_NONE; VEC2 drag_start_mouse{}; VEC2 drag_start_pos{}; VEC2 drag_start_sz{}; U8 lmb_held{}; U8 rmb_held{}; };