console viewer
[fishladder.git] / vg / vg_console.h
1 struct vg_console
2 {
3 struct vg_convar
4 {
5 void *data;
6 const char *name;
7
8 enum vg_convar_dtype
9 {
10 k_convar_dtype_i32,
11 k_convar_dtype_u32,
12 k_convar_dtype_f32
13 }
14 data_type;
15 }
16 *convars;
17
18 char lines[16][512];
19 u32 current, len;
20 }
21 vg_console;
22
23 static void vg_convar_push( struct vg_convar cv )
24 {
25 arrpush( vg_console.convars, cv );
26 }
27
28 static void vg_console_draw( void )
29 {
30 int ptr = vg_console.current - vg_console.len;
31 if( ptr <= 0 )
32 ptr += vg_list_size( vg_console.lines );
33 ptr --;
34
35 ui_global_ctx.cursor[0] = 0;
36 ui_global_ctx.cursor[1] = 0;
37 ui_global_ctx.cursor[3] = vg_console.len*8;
38 ui_fill_x( &ui_global_ctx );
39
40 ui_new_node( &ui_global_ctx );
41 {
42 ui_fill_rect( &ui_global_ctx, ui_global_ctx.cursor, 0x77333333 );
43
44 ui_global_ctx.cursor[3] = 8;
45 ui_align_bottom( &ui_global_ctx );
46
47 for( int i = 0; i < vg_console.len; i ++ )
48 {
49 ui_text( &ui_global_ctx, vg_console.lines[ptr], 1, 0 );
50 ui_global_ctx.cursor[1] -= 8;
51
52 ptr --;
53 if( ptr < 0 )
54 ptr = vg_list_size( vg_console.lines )-1;
55 }
56 }
57 ui_end_down( &ui_global_ctx );
58 }
59
60 void vg_console_println( const char *str )
61 {
62 if( vg_console.len < vg_list_size( vg_console.lines ) )
63 vg_console.len ++;
64
65 strcpy( vg_console.lines[ vg_console.current ++ ], str );
66
67 if( vg_console.current >= vg_list_size( vg_console.lines ) )
68 vg_console.current = 0;
69 }
70
71 static void vg_console_init(void)
72 {
73 vg_log_callback = vg_console_println;
74 }
75
76 static void vg_console_free(void)
77 {
78 arrfree( vg_console.convars );
79 }