X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_imgui.h;h=b3dfa6a23aec7dc5f64abc392f38162b74e1089a;hb=HEAD;hp=955f365975794c31b0d773e7bed1ff4205c40593;hpb=70530f5055e116c22ab1b433884573944e9c4f64;p=vg.git diff --git a/vg_imgui.h b/vg_imgui.h deleted file mode 100644 index 955f365..0000000 --- a/vg_imgui.h +++ /dev/null @@ -1,312 +0,0 @@ -/* Copyright (C) 2021-2024 Harry Godden (hgn) - All Rights Reserved */ - -/* - * Principles: - * - * 1. layout is defined by subdividing - * 2. a parent node should never be resized by the content after creation - * 3. when the ui is in an interactive state, no controls should ever move - * 4. controls directly reference a memory location and use that as their - * unique id - * 5. a maximum of ONE control per memory location can be drawn at any given - * point. - */ - -#pragma once - -#include "vg_engine.h" -#include "vg_tex.h" -#include "vg_shader.h" -#include "vg_font.h" - -extern vg_font_sheet vg_default_font_sheet; -extern vg_font_face vgf_default_small, vgf_default_large, vgf_default_title; - -typedef i16 ui_px; -typedef ui_px ui_rect[4]; -typedef ui_px ui_point[2]; -typedef struct ui_vert ui_vert; - -enum ui_axis { - k_ui_axis_h = 0x0u, - k_ui_axis_v = 0x1u, -}; - -/* Relative to cursor p0 */ -enum ui_align -{ /* DC BA */ - k_ui_align_lwr = 0xff, - k_ui_align_left = 0x0000| 0x00, - k_ui_align_right = 0x0000| 0x01, - k_ui_align_center = 0x0000| 0x02, - - k_ui_align_middle = 0x0100, - k_ui_align_middle_left = 0x0100| 0x00, - k_ui_align_middle_right = 0x0100| 0x01, - k_ui_align_middle_center = 0x0100| 0x02, - - k_ui_align_bottom = 0x0200, - k_ui_align_bottom_left = 0x0200| 0x00, - k_ui_align_bottom_right = 0x0200| 0x01, - k_ui_align_bottom_center = 0x0200| 0x02, -}; - -#pragma pack(push,1) -struct ui_vert -{ - ui_px co[2]; - u16 uv[2]; - u32 colour; -}; -#pragma pack(pop) - -enum ui_scheme_colour{ - k_ui_bg = 0, - k_ui_fg = 8, - k_ui_hue = 16, - k_ui_red = 16, - k_ui_orange, - k_ui_yellow, - k_ui_green, - k_ui_aqua, - k_ui_blue, - k_ui_purple, - k_ui_gray, - k_ui_brighter = 8 -}; - -enum ui_shader { - k_ui_shader_colour, - k_ui_shader_image, - k_ui_shader_hsv, -}; - -extern ui_px k_ui_widget_height, - k_ui_scale, - k_ui_padding; - -typedef u32 ui_scheme[8*4]; - -#define UI_RGB( STDHEX ) 0xff000000 |\ - ((STDHEX&0x000000ff)<<16) |\ - ((STDHEX&0x0000ff00) ) |\ - ((STDHEX&0x00ff0000)>>16) - -#define UI_TEXTBOX_MULTILINE 0x1 -#define UI_TEXTBOX_WRAP 0x2 -#define UI_TEXTBOX_AUTOFOCUS 0x4 - -#define UI_MODAL_OK 0x0 -#define UI_MODAL_GOOD 0x1 -#define UI_MODAL_BAD 0x2 -#define UI_MODAL_WARN 0x3 -#define UI_MODAL_TYPE_BITS 0x3 - -#define UI_MOUSE_LEFT (SDL_BUTTON(SDL_BUTTON_LEFT)) -#define UI_MOUSE_RIGHT (SDL_BUTTON(SDL_BUTTON_RIGHT)) -#define UI_MOUSE_MIDDLE (SDL_BUTTON(SDL_BUTTON_MIDDLE)) - -#define UI_TOP 0x1 -#define UI_LEFT 0x2 -#define UI_BOTTOM 0x4 -#define UI_RIGHT 0x8 - -struct vg_imgui -{ - struct ui_vert *vertex_buffer; - u16 *indice_buffer; - u32 max_verts, max_indices, - cur_vert, cur_indice, - vert_start, indice_start; - - union { - void *focused_control_id; /* uses the memory location of various locking - controls as an id */ - char *textbuf; - i32 *ptr_enum; - }; - - u32 focused_control_hit; - enum ui_control_type{ - k_ui_control_none, - k_ui_control_textbox, - k_ui_control_enum, - k_ui_control_modal - } - focused_control_type; - - union{ /* controls that can be focused */ - struct ui_textbuf{ - int cursor_user, cursor_pos; - u32 len; - u32 flags; - - struct ui_textbox_callbacks{ - void (*enter)( char *, u32 ), - (*up)( char *, u32 ), - (*down)( char *, u32 ), - (*change)( char *, u32 ), - (*escape)( void ); - } - callbacks; - } - textbox; - - struct ui_enum{ - struct ui_enum_opt{ - i32 value; - const char *alias; - } - *options; - u32 option_count; - ui_rect rect; - } - _enum; - }; - - struct ui_modal{ - const char *message; - u32 options; - - struct ui_modal_callbacks{ - void (*close)(u32); - } - callbacks; - } - modal; - - GLuint tex_glyphs, vao, vbo, ebo, tex_bg; - v2f bg_inverse_ratio; - - ui_px mouse[2], mouse_delta[2], mouse_click[2]; - u32 mouse_state[2]; - u32 ignore_input_frames; - bool mouse_pos_overriden; - int wants_mouse; - - ui_rect click_fader, click_fader_end; - float click_fade_opacity; - f32 frosting; - - ui_scheme scheme; - const vg_font_face *font; - v2f inverse_font_sheet; - - enum ui_cursor{ - k_ui_cursor_default, - k_ui_cursor_ibeam, - k_ui_cursor_hand, - k_ui_cursor_max - } - cursor; - - SDL_Cursor *cursor_map[ k_ui_cursor_max ]; - v4f colour; - - f32 hue; /* lol this sucks */ -} -extern vg_ui; - -enum ui_button_state { - k_ui_button_none = 0x0, - k_ui_button_click = 0x1, - k_ui_button_holding_inside = 0x2, - k_ui_button_holding_outside = 0x4, - k_ui_button_hover = 0x8 -}; - -/* TODO: docu.. */ - -void vg_ui_init(void); -void rect_copy( ui_rect a, ui_rect b ); -void ui_flush( enum ui_shader shader, f32 w, f32 h ); -void ui_fill_rect( ui_rect rect, u32 colour, ui_px uv[4] ); -void ui_fill( ui_rect rect, u32 colour ); -void ui_outline( ui_rect rect, ui_px thickness, u32 colour, u32 mask ); -void ui_split( ui_rect rect, enum ui_axis other, ui_px width, ui_px gap, - ui_rect l, ui_rect r ); -void ui_rect_center( ui_rect parent, ui_rect rect ); -void ui_fit_item( ui_rect rect, ui_px size[2], ui_rect d ); -void ui_split_ratio( ui_rect rect, enum ui_axis dir, float ratio, - ui_px gap, ui_rect l, ui_rect r ); -void ui_rect_pad( ui_rect rect, ui_px pad[2] ); -ui_px ui_text_line_width( const char *str ); -ui_px ui_text_string_height( const char *str ); -ui_px ui_text_aligned_x( const char *str, ui_rect rect, ui_px scale, - enum ui_align align ); -int ui_clip( ui_rect parent, ui_rect child, ui_rect clipped ); -int ui_inside_rect( ui_rect rect, ui_px co[2] ); -int ui_click_down( u32 mask ); -int ui_clicking( u32 mask ); -int ui_click_up( u32 mask ); -void ui_set_mouse_pos( ui_px x, ui_px y ); -void ui_prerender(void); -u32 ui_colour( enum ui_scheme_colour id ); - -/* get an appropriately contrasting colour given the base */ -u32 ui_colourcont( enum ui_scheme_colour id ); - -void ui_hex_to_norm( u32 hex, v4f norm ); -u32 v4f_u32_colour( v4f colour ); - -u32 ui_opacity( u32 colour, f32 opacity ); -void ui_font_face( vg_font_face *ff ); -u32 ui_ntext( ui_rect rect, const char *str, u32 len, ui_px scale, - enum ui_align align, u32 colour ); -void ui_text( ui_rect rect, const char *str, ui_px scale, - enum ui_align align, u32 colour ); -void ui_panel( ui_rect in_rect, ui_rect out_panel ); -void ui_label( ui_rect rect, const char *text, ui_px size, - ui_px gap, ui_rect r ); -void ui_standard_widget( ui_rect inout_panel, ui_rect out_rect, ui_px count ); -void ui_info( ui_rect inout_panel, const char *text ); -void ui_image( ui_rect rect, GLuint image ); -void ui_defocus_all(void); -enum ui_button_state ui_colourbutton( ui_rect rect, - enum ui_scheme_colour colour, - enum ui_scheme_colour hover_colour, - enum ui_scheme_colour hi_colour, - bool const fill ); -enum ui_button_state ui_colourbutton_text( - ui_rect rect, const char *string, ui_px scale, - enum ui_scheme_colour colour ); -enum ui_button_state ui_button_text( ui_rect rect, - const char *string, ui_px scale ); -enum ui_button_state ui_button( ui_rect inout_panel, const char *string ); -void ui_postrender(void); - -int ui_checkbox( ui_rect inout_panel, const char *str_label, i32 *data ); -void ui_enum( ui_rect inout_panel, const char *str_label, - struct ui_enum_opt *options, u32 len, i32 *value ); -bool ui_slider( ui_rect inout_panel, const char *str_label, - f32 min, f32 max, f32 *value, const char *format ); -void ui_colourpicker( ui_rect inout_panel, const char *str_label, v4f value ); -int ui_textbox( ui_rect inout_panel, const char *label, - char *buf, u32 len, u32 lines, u32 flags, - struct ui_textbox_callbacks *callbacks ); -void ui_tabs( ui_rect inout_panel, ui_rect out_content_panel, - const char **titles, u32 count, i32 *page ); -void ui_start_modal( const char *message, u32 options ); -void ui_proc_key( SDL_Keysym ev ); -void ui_proc_utf8( const char *text ); -void ui_dev_colourview(void); - -void _ui_textbox_move_cursor( int *cursor0, int *cursor1, - int dir, int snap_together ); -int _ui_textbox_delete_char( int direction ); -void _ui_textbox_put_char( char c ); -void _ui_textbox_up(void); -void _ui_textbox_left(void); -void _ui_textbox_left_select(void); -void _ui_textbox_down(void); -void _ui_textbox_right_select(void); -void _ui_textbox_right(void); -void _ui_textbox_backspace(void); -void _ui_textbox_delete(void); -void _ui_textbox_home_select(void); -void _ui_textbox_home(void); -void _ui_textbox_end_select(void); -void _ui_textbox_end(void); -void _ui_textbox_select_all(void); -void _ui_textbox_cut(void); -void _ui_textbox_enter(void);