summaryrefslogtreecommitdiff
path: root/src/gui/console.h
blob: 0730f1525872c82fbfa77e8c4c623c75db3a5e0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#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<GUI_CONTEXTMENU_ITEM> items{};
      CONSOLE_MENU_INPUT_MODE mode{};
      char query[GUI_TEXTBOX_MAX]{};
      GUI_CONTEXTMENU* menu{};
      LIST<CVAR*> cvars{};
      U32 history_size{};
      U32 cvar_count{};
      U8 suppressed{};
    } input;

    struct GUI_CONSOLEWINDOW_OUTPUT_MENU {
      LIST<GUI_CONTEXTMENU_ITEM> items{};
      GUI_CONTEXTMENU* menu{};
    } output;
  } menus;

  LIST<CONSOLE_WRAPPED_LINE> 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{};
};