animating moments improved

This commit is contained in:
Allen Webster 2016-05-06 10:45:11 -04:00
parent a61de3d671
commit 60a51a1cc8
3 changed files with 293 additions and 449 deletions

23
4ed.cpp
View File

@ -3701,6 +3701,7 @@ App_Step_Sig(app_step){
// NOTE(allen): try to abort the command corroutine if we are shutting down // NOTE(allen): try to abort the command corroutine if we are shutting down
if (app_result.trying_to_kill){ if (app_result.trying_to_kill){
b32 there_is_unsaved = 0; b32 there_is_unsaved = 0;
app_result.animating = 1;
File_Node *node, *sent; File_Node *node, *sent;
sent = &models->working_set.used_sentinel; sent = &models->working_set.used_sentinel;
@ -3723,7 +3724,7 @@ App_Step_Sig(app_step){
command_coroutine = system->resume_coroutine(command_coroutine, &user_in, models->command_coroutine_flags); command_coroutine = system->resume_coroutine(command_coroutine, &user_in, models->command_coroutine_flags);
++i; ++i;
if (i >= 128){ if (i >= 128){
// TODO(allen): post grave warning, resource cleanup system // TODO(allen): post grave warning, resource cleanup system.
command_coroutine = 0; command_coroutine = 0;
} }
} }
@ -3749,6 +3750,7 @@ App_Step_Sig(app_step){
// NOTE(allen): process the command_coroutine if it is unfinished // NOTE(allen): process the command_coroutine if it is unfinished
b8 consumed_input[6] = {0}; b8 consumed_input[6] = {0};
// NOTE(allen): Keyboard input to command coroutine.
if (models->command_coroutine != 0){ if (models->command_coroutine != 0){
Coroutine *command_coroutine = models->command_coroutine; Coroutine *command_coroutine = models->command_coroutine;
u32 get_flags = models->command_coroutine_flags[0]; u32 get_flags = models->command_coroutine_flags[0];
@ -3795,6 +3797,7 @@ App_Step_Sig(app_step){
if (pass_in){ if (pass_in){
models->command_coroutine = models->command_coroutine =
system->resume_coroutine(command_coroutine, &user_in, models->command_coroutine_flags); system->resume_coroutine(command_coroutine, &user_in, models->command_coroutine_flags);
app_result.animating = 1;
// TOOD(allen): Deduplicate // TOOD(allen): Deduplicate
// TODO(allen): Should I somehow allow a view to clean up however it wants after a // TODO(allen): Should I somehow allow a view to clean up however it wants after a
@ -3807,6 +3810,7 @@ App_Step_Sig(app_step){
} }
} }
// NOTE(allen): Mouse input to command coroutine
if (models->command_coroutine != 0 && (get_flags & EventOnMouse)){ if (models->command_coroutine != 0 && (get_flags & EventOnMouse)){
View *view = cmd->view; View *view = cmd->view;
b32 pass_in = 0; b32 pass_in = 0;
@ -3859,6 +3863,8 @@ App_Step_Sig(app_step){
models->command_coroutine = system->resume_coroutine(command_coroutine, &user_in, models->command_coroutine = system->resume_coroutine(command_coroutine, &user_in,
models->command_coroutine_flags); models->command_coroutine_flags);
app_result.animating = 1;
// TOOD(allen): Deduplicate // TOOD(allen): Deduplicate
// TODO(allen): Should I somehow allow a view to clean up however it wants after a // TODO(allen): Should I somehow allow a view to clean up however it wants after a
// command finishes, or after transfering to another view mid command? // command finishes, or after transfering to another view mid command?
@ -3941,14 +3947,15 @@ App_Step_Sig(app_step){
} }
} }
// TODO(allen): This is a pretty big hack at the moment. // TODO(allen): This is perhaps not the best system...
// The problem is that the exact region and scroll position is pretty important
// for some commands, so this is here to eliminate the one frame of lag.
// Going to leave this here for now because the oder of events is going to
// change a lot soon.
for (dll_items(panel, used_panels)){ for (dll_items(panel, used_panels)){
view = panel->view; view = panel->view;
if (view->showing_ui == VUI_None){ if (view->current_scroll){
gui_get_scroll_vars(&view->gui_target, view->showing_ui, &view->file_data.file_scroll); gui_get_scroll_vars(&view->gui_target, view->showing_ui, view->current_scroll);
}
else{
gui_get_scroll_vars(&view->gui_target, view->showing_ui, &view->gui_scroll);
} }
} }
} }
@ -3996,6 +4003,8 @@ App_Step_Sig(app_step){
models->command_coroutine = system->launch_coroutine(models->command_coroutine, models->command_coroutine = system->launch_coroutine(models->command_coroutine,
&cmd_in, models->command_coroutine_flags); &cmd_in, models->command_coroutine_flags);
models->prev_command = cmd_bind; models->prev_command = cmd_bind;
app_result.animating = 1;
} }
} }
}break; }break;

View File

@ -96,6 +96,7 @@ struct View{
File_Viewing_Data file_data; File_Viewing_Data file_data;
GUI_Scroll_Vars *current_scroll;
View_UI showing_ui; View_UI showing_ui;
GUI_Target gui_target; GUI_Target gui_target;
void *gui_mem; void *gui_mem;
@ -3827,10 +3828,11 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
GUI_Target *target = &view->gui_target; GUI_Target *target = &view->gui_target;
Models *models = view->models; Models *models = view->models;
Key_Summary keys = input.keys; Key_Summary keys = input.keys;
b32 is_animating = 0;
f32 min_target_y = view->file_data.file_scroll.min_y; f32 min_target_y = view->file_data.file_scroll.min_y;
view->current_scroll = 0;
gui_begin_top_level(target, input); gui_begin_top_level(target, input);
{ {
gui_do_top_bar(target); gui_do_top_bar(target);
@ -3850,6 +3852,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
f32 delta = 9.f * view->font_height; f32 delta = 9.f * view->font_height;
f32 target_y = 0; f32 target_y = 0;
view->current_scroll = &view->file_data.file_scroll;
if (gui_get_scroll_vars(target, view->showing_ui, &view->file_data.file_scroll)){ if (gui_get_scroll_vars(target, view->showing_ui, &view->file_data.file_scroll)){
target_y = view->file_data.file_scroll.target_y; target_y = view->file_data.file_scroll.target_y;
if (cursor_y > target_y + cursor_max_y){ if (cursor_y > target_y + cursor_max_y){
@ -3886,16 +3889,17 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
String message = make_lit_string("Menu"); String message = make_lit_string("Menu");
String empty_string = {0}; String empty_string = {0};
GUI_id id = {0}; GUI_id id = {0};
id.id[1] = VUI_Menu;
gui_do_text_field(target, message, empty_string); gui_do_text_field(target, message, empty_string);
id.id[0] = (u64)(0 + (VUI_Menu << 8)); id.id[0] = 0;
message = make_lit_string("Theme"); message = make_lit_string("Theme");
if (gui_do_fixed_option(target, id, message, 0)){ if (gui_do_fixed_option(target, id, message, 0)){
view_show_theme(view, view->map); view_show_theme(view, view->map);
} }
id.id[0] = (u64)(1 + (VUI_Menu << 8)); id.id[0] = 1;
message = make_lit_string("Config"); message = make_lit_string("Config");
if (gui_do_fixed_option(target, id, message, 0)){ if (gui_do_fixed_option(target, id, message, 0)){
view_show_config(view, view->map); view_show_config(view, view->map);
@ -3907,10 +3911,11 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
String message = make_lit_string("Config"); String message = make_lit_string("Config");
String empty_string = {0}; String empty_string = {0};
GUI_id id = {0}; GUI_id id = {0};
id.id[1] = VUI_Config;
gui_do_text_field(target, message, empty_string); gui_do_text_field(target, message, empty_string);
id.id[0] = (u64)(0 + (VUI_Config << 8)); id.id[0] = 0;
message = make_lit_string("Left Ctrl + Left Alt = AltGr"); message = make_lit_string("Left Ctrl + Left Alt = AltGr");
if (gui_do_fixed_option_checkbox(target, id, message, 0, (b8)models->settings.lctrl_lalt_is_altgr)){ if (gui_do_fixed_option_checkbox(target, id, message, 0, (b8)models->settings.lctrl_lalt_is_altgr)){
models->settings.lctrl_lalt_is_altgr = !models->settings.lctrl_lalt_is_altgr; models->settings.lctrl_lalt_is_altgr = !models->settings.lctrl_lalt_is_altgr;
@ -3926,6 +3931,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
String message = {0}; String message = {0};
String empty_string = {0}; String empty_string = {0};
GUI_id id = {0}; GUI_id id = {0};
id.id[1] = VUI_Theme + ((u64)view->color_mode << 32);
switch (view->color_mode){ switch (view->color_mode){
case CV_Mode_Library: case CV_Mode_Library:
@ -3935,19 +3941,18 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
id.id[0] = (u64)(&models->style); id.id[0] = (u64)(&models->style);
if (gui_do_style_preview(target, id, &models->style)){ if (gui_do_style_preview(target, id, &models->style)){
view->color_mode = CV_Mode_Adjusting; view->color_mode = CV_Mode_Adjusting;
is_animating = 1;
} }
message = make_lit_string("Set Font"); message = make_lit_string("Set Font");
id.id[0] = (u64)(&models->global_font); id.id[0] = (u64)(&models->global_font);
if (gui_do_button(target, id, message)){ if (gui_do_button(target, id, message)){
view->color_mode = CV_Mode_Font; view->color_mode = CV_Mode_Font;
is_animating = 1;
} }
message = make_lit_string("Theme Library - Click to Select"); message = make_lit_string("Theme Library - Click to Select");
gui_do_text_field(target, message, empty_string); gui_do_text_field(target, message, empty_string);
view->current_scroll = &view->gui_scroll;
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll); gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height); gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
@ -3960,7 +3965,6 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
id.id[0] = (u64)(style); id.id[0] = (u64)(style);
if (gui_do_style_preview(target, id, style)){ if (gui_do_style_preview(target, id, style)){
style_copy(&models->style, style); style_copy(&models->style, style);
is_animating = 1;
} }
} }
} }
@ -3975,14 +3979,12 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
i16 i = 1, count = (i16)models->font_set->count + 1; i16 i = 1, count = (i16)models->font_set->count + 1;
i16 font_id = 0, new_font_id = 0; i16 font_id = 0, new_font_id = 0;
GUI_id id = {0};
String message = make_lit_string("Back"); String message = make_lit_string("Back");
id.id[0] = (u64)(0 + (CV_Mode_Font << 9)); id.id[0] = 0;
if (gui_do_button(target, id, message)){ if (gui_do_button(target, id, message)){
view->color_mode = CV_Mode_Library; view->color_mode = CV_Mode_Library;
is_animating = 1;
} }
font_id = models->global_font.font_id; font_id = models->global_font.font_id;
@ -3990,11 +3992,10 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
for (i = 1; i < count; ++i){ for (i = 1; i < count; ++i){
info = get_font_info(font_set, i); info = get_font_info(font_set, i);
id.id[0] = (u64)(i + (CV_Mode_Font << 9)); id.id[0] = (u64)i;
if (i != font_id){ if (i != font_id){
if (gui_do_font_button(target, id, i, info->name)){ if (gui_do_font_button(target, id, i, info->name)){
new_font_id = i; new_font_id = i;
is_animating = 1;
} }
} }
else{ else{
@ -4014,17 +4015,16 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
Style *style = &models->style; Style *style = &models->style;
u32 *edit_color = 0; u32 *edit_color = 0;
u32 *fore = 0, *back = 0; u32 *fore = 0, *back = 0;
GUI_id id = {0};
i32 i = 0; i32 i = 0;
String message = make_lit_string("Back"); String message = make_lit_string("Back");
id.id[0] = (u64)(0 + (VUI_Theme << 8)); id.id[0] = 0;
if (gui_do_button(target, id, message)){ if (gui_do_button(target, id, message)){
view->color_mode = CV_Mode_Library; view->color_mode = CV_Mode_Library;
is_animating = 1;
} }
view->current_scroll = &view->gui_scroll;
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll); gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height); gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
@ -4055,22 +4055,18 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
for (j = 0; j < keys.count; ++j){ for (j = 0; j < keys.count; ++j){
i16 key = keys.keys[j].keycode; i16 key = keys.keys[j].keycode;
switch (key){ switch (key){
case key_left: --view->color_cursor; r = 1; case key_left: --view->color_cursor; r = 1; break;
is_animating = 1; break; case key_right: ++view->color_cursor; r = 1; break;
case key_right: ++view->color_cursor; r = 1;
is_animating = 1; break;
case key_up: case key_up:
if (next_color_editing > 0){ if (next_color_editing > 0){
--next_color_editing; --next_color_editing;
is_animating = 1;
} }
break; break;
case key_down: case key_down:
if (next_color_editing <= ArrayCount(colors_to_edit)-1){ if (next_color_editing <= ArrayCount(colors_to_edit)-1){
++next_color_editing; ++next_color_editing;
is_animating = 1;
} }
break; break;
@ -4098,7 +4094,6 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
if (view->current_color_editing != next_color_editing){ if (view->current_color_editing != next_color_editing){
view->current_color_editing = next_color_editing; view->current_color_editing = next_color_editing;
view->color_cursor = 0; view->color_cursor = 0;
is_animating = 1;
} }
gui_end_scrollable(target); gui_end_scrollable(target);
@ -4107,6 +4102,10 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
}break; }break;
case VUI_Interactive: case VUI_Interactive:
{
GUI_id id = {0};
id.id[1] = VUI_Interactive + ((u64)view->interaction << 32);
switch (view->interaction){ switch (view->interaction){
case IInt_Sys_File_List: case IInt_Sys_File_List:
{ {
@ -4120,7 +4119,6 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
Exhaustive_File_Loop loop; Exhaustive_File_Loop loop;
Exhaustive_File_Info file_info; Exhaustive_File_Info file_info;
GUI_id id;
GUI_Item_Update update = {0}; GUI_Item_Update update = {0};
Hot_Directory *hdir = &models->hot_directory; Hot_Directory *hdir = &models->hot_directory;
b32 do_new_directory = 0; b32 do_new_directory = 0;
@ -4142,6 +4140,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
gui_do_text_field(target, message, hdir->string); gui_do_text_field(target, message, hdir->string);
view->current_scroll = &view->gui_scroll;
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll); gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height); gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
@ -4215,7 +4214,6 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
} }
Absolutes absolutes; Absolutes absolutes;
GUI_id id;
Editing_File *file; Editing_File *file;
File_Node *node, *used_nodes; File_Node *node, *used_nodes;
Working_Set *working_set = &models->working_set; Working_Set *working_set = &models->working_set;
@ -4238,6 +4236,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
gui_do_text_field(target, message, view->dest); gui_do_text_field(target, message, view->dest);
view->current_scroll = &view->gui_scroll;
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll); gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height); gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
@ -4298,19 +4297,18 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
{ {
i32 action = -1; i32 action = -1;
GUI_id id;
String empty_str = {0}; String empty_str = {0};
String message = make_lit_string("There is one or more files unsaved changes, close anyway?"); String message = make_lit_string("There is one or more files unsaved changes, close anyway?");
gui_do_text_field(target, message, empty_str); gui_do_text_field(target, message, empty_str);
id.id[0] = (u64)('y' + (VUI_Interactive << 8)); id.id[0] = (u64)('y');
message = make_lit_string("(Y)es"); message = make_lit_string("(Y)es");
if (gui_do_fixed_option(target, id, message, 'y')){ if (gui_do_fixed_option(target, id, message, 'y')){
action = 0; action = 0;
} }
id.id[0] = (u64)('n' + (VUI_Interactive << 8)); id.id[0] = (u64)('n');
message = make_lit_string("(N)o"); message = make_lit_string("(N)o");
if (gui_do_fixed_option(target, id, message, 'n')){ if (gui_do_fixed_option(target, id, message, 'n')){
action = 1; action = 1;
@ -4325,25 +4323,24 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
{ {
i32 action = -1; i32 action = -1;
GUI_id id;
String empty_str = {0}; String empty_str = {0};
String message = make_lit_string("There are unsaved changes, close anyway?"); String message = make_lit_string("There are unsaved changes, close anyway?");
gui_do_text_field(target, message, empty_str); gui_do_text_field(target, message, empty_str);
id.id[0] = (u64)('y' + (VUI_Interactive << 8)); id.id[0] = (u64)('y');
message = make_lit_string("(Y)es"); message = make_lit_string("(Y)es");
if (gui_do_fixed_option(target, id, message, 'y')){ if (gui_do_fixed_option(target, id, message, 'y')){
action = 0; action = 0;
} }
id.id[0] = (u64)('n' + (VUI_Interactive << 8)); id.id[0] = (u64)('n');
message = make_lit_string("(N)o"); message = make_lit_string("(N)o");
if (gui_do_fixed_option(target, id, message, 'n')){ if (gui_do_fixed_option(target, id, message, 'n')){
action = 1; action = 1;
} }
id.id[0] = (u64)('s' + (VUI_Interactive << 8)); id.id[0] = (u64)('s');
message = make_lit_string("(S)ave and kill"); message = make_lit_string("(S)ave and kill");
if (gui_do_fixed_option(target, id, message, 's')){ if (gui_do_fixed_option(target, id, message, 's')){
action = 2; action = 2;
@ -4353,12 +4350,13 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
interactive_view_complete(view, view->dest, action); interactive_view_complete(view, view->dest, action);
} }
}break; }break;
}
}break; }break;
} }
} }
} }
gui_end_top_level(target); gui_end_top_level(target);
return(is_animating); return(target->animating);
} }
internal f32 internal f32
@ -4439,53 +4437,6 @@ do_input_file_view(System_Functions *system, Exchange *exchange,
is_file_scroll = 1; is_file_scroll = 1;
}break; }break;
#if 0
case guicom_text_input:
{
Single_Line_Input_Step step;
Key_Event_Data key;
GUI_Edit *e = (GUI_Edit*)h;
String *string = (String*)e->out;
Key_Summary *keys = &user_input->keys;
i32 i, count;
count = keys->count;
for (i = 0; i < count; ++i){
key = get_single_key(keys, i);
step = app_single_line_input_step(system, key, string);
if ((step.hit_newline || step.hit_ctrl_newline) && !step.no_file_match){
view->gui_target.active = e->id;
is_animating = 1;
}
}
}break;
case guicom_file_input:
{
Single_Line_Input_Step step;
Key_Event_Data key;
GUI_Edit *e = (GUI_Edit*)h;
Hot_Directory *hdir = (Hot_Directory*)e->out;
Key_Summary *keys = &user_input->keys;
Working_Set *working_set = &view->models->working_set;
i32 i, count;
count = keys->count;
for (i = 0; i < count; ++i){
key = get_single_key(keys, i);
step = app_single_file_input_step(system, working_set, key, &hdir->string, hdir, 1, 1, 0);
if ((step.hit_newline || step.hit_ctrl_newline) && !step.no_file_match){
view->gui_target.active = e->id;
is_animating = 1;
}
}
}break;
#endif
case guicom_color_button: case guicom_color_button:
case guicom_font_button: case guicom_font_button:
case guicom_button: case guicom_button:
@ -4671,7 +4622,7 @@ do_input_file_view(System_Functions *system, Exchange *exchange,
} }
if (!user_input->mouse.l){ if (!user_input->mouse.l){
if (!gui_id_eq(target->mouse_hot, {0})){ if (!gui_id_is_null(target->mouse_hot)){
target->mouse_hot = {0}; target->mouse_hot = {0};
is_animating = 1; is_animating = 1;
} }
@ -5402,110 +5353,6 @@ do_render_file_view(System_Functions *system, Exchange *exchange,
draw_pop_clip(target); draw_pop_clip(target);
return(result); return(result);
#if 0
Editing_File *file = view->file;
i32 result = 0;
{
i32 line_height = view->font_height;
i32_Rect bar_rect = rect;
bar_rect.y1 = bar_rect.y0 + line_height + 2;
do_render_file_bar(target, view, file, bar_rect);
rect.y0 = bar_rect.y1;
}
target->push_clip(target, rect);
if (view->gui_target.show_file){
view->scroll_min_limit = 0;
if (view->reinit_scrolling){
view_reinit_scrolling(view);
}
switch (view->showing_ui){
case VUI_None:
{
if (file && file_is_ready(file)){
result = draw_file_loaded(view, rect, is_active, target);
}
}break;
}
}
target->pop_clip(target);
return(result);
#endif
#if 0
Models *models = view->models;
Editing_File *file = view->file;
i32 result = 0;
i32 widget_height = 0;
AllowLocal(models);
#if 0
{
UI_State state =
ui_state_init(&view->widget.state, target, 0,
&models->style, models->global_font.font_id, models->font_set, 0, 0);
UI_Layout layout;
begin_layout(&layout, rect);
switch (view->widget.type){
case FWIDG_NONE:
{
if (file && view->showing_ui == VUI_None){
do_file_bar(view, file, &layout, target);
}
draw_file_view_queries(view, &state, &layout);
}break;
case FWIDG_TIMELINES:
{
if (file){
i32 undo_count = file->state.undo.undo.edit_count;
i32 redo_count = file->state.undo.redo.edit_count;
i32 total_count = undo_count + redo_count;
undo_shit(0, view, &state, &layout, total_count, undo_count, 0);
}
else{
view->widget.type = FWIDG_NONE;
}
}break;
}
widget_height = layout.y - rect.y0;
ui_finish_frame(&view->widget.state, &state, &layout, rect, 0, 0);
}
#endif
view->scroll_min_limit = (f32)-widget_height;
{
rect.y0 += widget_height;
target->push_clip(target, rect);
rect.y0 -= widget_height;
switch (view->showing_ui){
case VUI_None:
{
if (file && file_is_ready(file)){
result = draw_file_loaded(view, rect, is_active, target);
}
}break;
}
target->pop_clip(target);
}
return (result);
#endif
} }
// TODO(allen): Passing this hook and app pointer is a hack. It can go as soon as we start // TODO(allen): Passing this hook and app pointer is a hack. It can go as soon as we start

View File

@ -113,7 +113,7 @@ super_color_post_byte(Super_Color *color, i32 channel, u8 byte){
} }
struct GUI_id{ struct GUI_id{
u64 id[1]; u64 id[2];
}; };
struct GUI_Scroll_Vars{ struct GUI_Scroll_Vars{
@ -148,6 +148,7 @@ struct GUI_Target{
f32 delta; f32 delta;
u32 scroll_id; u32 scroll_id;
b32 has_keys; b32 has_keys;
b32 animating;
}; };
struct GUI_Item_Update{ struct GUI_Item_Update{
@ -182,12 +183,6 @@ enum GUI_Command_Type{
guicom_top_bar, guicom_top_bar,
guicom_file, guicom_file,
guicom_text_field, guicom_text_field,
#if 0
guicom_text_input,
guicom_file_input,
#endif
guicom_color_button, guicom_color_button,
guicom_font_button, guicom_font_button,
guicom_text_with_cursor, guicom_text_with_cursor,
@ -208,13 +203,13 @@ enum GUI_Command_Type{
internal b32 internal b32
gui_id_eq(GUI_id id1, GUI_id id2){ gui_id_eq(GUI_id id1, GUI_id id2){
b32 result = (id1.id[0] == id2.id[0]); b32 result = (id1.id[0] == id2.id[0] && id1.id[1] == id2.id[1]);
return(result); return(result);
} }
internal b32 internal b32
gui_id_is_null(GUI_id id){ gui_id_is_null(GUI_id id){
b32 result = (id.id[0] == 0); b32 result = (id.id[0] == 0 && id.id[1] == 0);
return(result); return(result);
} }
@ -405,6 +400,7 @@ internal void
gui_begin_top_level(GUI_Target *target, Input_Summary input){ gui_begin_top_level(GUI_Target *target, Input_Summary input){
target->push.pos = 0; target->push.pos = 0;
target->has_keys = (input.keys.count > 0); target->has_keys = (input.keys.count > 0);
target->animating = 0;
} }
internal void internal void
@ -439,33 +435,12 @@ gui_do_text_with_cursor(GUI_Target *target, i32 pos, String text, GUI_Item_Updat
result = target->has_keys; result = target->has_keys;
if (result){ if (result){
gui_fill_item_update(update, target, h, 0); gui_fill_item_update(update, target, h, 0);
target->animating = 1;
} }
return(result); return(result);
} }
#if 0
internal b32
gui_do_text_input(GUI_Target *target, GUI_id id, void *out){
b32 result = 0;
gui_push_string_edit_command(target, guicom_text_input, id, out);
if (gui_id_eq(id, target->active)){
result = 1;
}
return(result);
}
internal b32
gui_do_file_input(GUI_Target *target, GUI_id id, void *out){
b32 result = 0;
gui_push_string_edit_command(target, guicom_file_input, id, out);
if (gui_id_eq(id, target->active)){
result = 1;
}
return(result);
}
#endif
internal b32 internal b32
gui_do_color_button(GUI_Target *target, GUI_id id, u32 fore, u32 back, String text){ gui_do_color_button(GUI_Target *target, GUI_id id, u32 fore, u32 back, String text){
b32 result = 0; b32 result = 0;
@ -477,6 +452,7 @@ gui_do_color_button(GUI_Target *target, GUI_id id, u32 fore, u32 back, String te
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -493,6 +469,7 @@ gui_do_font_button(GUI_Target *target, GUI_id id, i16 font_id, String text){
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -515,6 +492,7 @@ gui_begin_list(GUI_Target *target, GUI_id id, i32 list_i, b32 activate_item, GUI
if (result){ if (result){
gui_fill_item_update(update, target, h, active); gui_fill_item_update(update, target, h, active);
target->animating = 1;
} }
return(result); return(result);
@ -536,6 +514,7 @@ gui_do_file_option(GUI_Target *target, GUI_id id, String filename, b32 is_folder
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -551,6 +530,7 @@ gui_do_button(GUI_Target *target, GUI_id id, String message){
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -567,6 +547,7 @@ gui_do_fixed_option(GUI_Target *target, GUI_id id, String message, char key){
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -584,6 +565,7 @@ gui_do_fixed_option_checkbox(GUI_Target *target, GUI_id id, String message, char
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -599,6 +581,7 @@ gui_do_style_preview(GUI_Target *target, GUI_id id, Style *style){
if (gui_id_eq(id, target->active)){ if (gui_id_eq(id, target->active)){
result = 1; result = 1;
target->animating = 1;
} }
return(result); return(result);
@ -607,28 +590,32 @@ gui_do_style_preview(GUI_Target *target, GUI_id id, Style *style){
internal GUI_id internal GUI_id
gui_id_scrollbar(){ gui_id_scrollbar(){
GUI_id id; GUI_id id;
id.id[0] = max_u64; id.id[0] = 0;
id.id[1] = max_u64;
return(id); return(id);
} }
internal GUI_id internal GUI_id
gui_id_scrollbar_top(){ gui_id_scrollbar_top(){
GUI_id id; GUI_id id;
id.id[0] = max_u64 - 1; id.id[0] = 1;
id.id[1] = max_u64;
return(id); return(id);
} }
internal GUI_id internal GUI_id
gui_id_scrollbar_slider(){ gui_id_scrollbar_slider(){
GUI_id id; GUI_id id;
id.id[0] = max_u64 - 2; id.id[0] = 2;
id.id[1] = max_u64;
return(id); return(id);
} }
internal GUI_id internal GUI_id
gui_id_scrollbar_bottom(){ gui_id_scrollbar_bottom(){
GUI_id id; GUI_id id;
id.id[0] = max_u64 - 3; id.id[0] = 3;
id.id[1] = max_u64;
return(id); return(id);
} }
@ -648,6 +635,7 @@ gui_get_scroll_vars(GUI_Target *target, u32 scroll_id, GUI_Scroll_Vars *vars_out
if (gui_id_eq(target->active, gui_id_scrollbar())){ if (gui_id_eq(target->active, gui_id_scrollbar())){
result = 1; result = 1;
target->animating = 1;
} }
} }
return(result); return(result);