animating moments improved
This commit is contained in:
parent
a61de3d671
commit
60a51a1cc8
23
4ed.cpp
23
4ed.cpp
|
@ -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;
|
||||||
|
|
|
@ -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,258 +4102,261 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case VUI_Interactive:
|
case VUI_Interactive:
|
||||||
switch (view->interaction){
|
{
|
||||||
case IInt_Sys_File_List:
|
GUI_id id = {0};
|
||||||
{
|
id.id[1] = VUI_Interactive + ((u64)view->interaction << 32);
|
||||||
String message = {0};
|
|
||||||
switch (view->action){
|
|
||||||
case IAct_Open: message = make_lit_string("Open: "); break;
|
|
||||||
case IAct_Save_As: message = make_lit_string("Save As: "); break;
|
|
||||||
case IAct_New: message = make_lit_string("New: "); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Exhaustive_File_Loop loop;
|
|
||||||
Exhaustive_File_Info file_info;
|
|
||||||
|
|
||||||
GUI_id id;
|
|
||||||
GUI_Item_Update update = {0};
|
|
||||||
Hot_Directory *hdir = &models->hot_directory;
|
|
||||||
b32 do_new_directory = 0;
|
|
||||||
i32 i = 0;
|
|
||||||
|
|
||||||
|
switch (view->interaction){
|
||||||
|
case IInt_Sys_File_List:
|
||||||
{
|
{
|
||||||
Single_Line_Input_Step step = {0};
|
String message = {0};
|
||||||
Key_Event_Data key = {0};
|
switch (view->action){
|
||||||
i32 i;
|
case IAct_Open: message = make_lit_string("Open: "); break;
|
||||||
|
case IAct_Save_As: message = make_lit_string("Save As: "); break;
|
||||||
for (i = 0; i < keys.count; ++i){
|
case IAct_New: message = make_lit_string("New: "); break;
|
||||||
key = get_single_key(&keys, i);
|
|
||||||
step = app_single_file_input_step(system, &models->working_set, key, &hdir->string, hdir, 1, 1, 0);
|
|
||||||
if (step.made_a_change){
|
|
||||||
view->list_i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gui_do_text_field(target, message, hdir->string);
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// TODO(allen): Deduplicate. Perhaps we want a standard list helper?
|
|
||||||
id.id[0] = (u64)(hdir) + 1;
|
|
||||||
if (gui_begin_list(target, id, view->list_i, 0, &update)){
|
|
||||||
if (update.has_adjustment){
|
|
||||||
view->list_i = update.adjustment_value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b32 indirectly_activate = 0;
|
Exhaustive_File_Loop loop;
|
||||||
for (i32 j = 0; j < keys.count; ++j){
|
Exhaustive_File_Info file_info;
|
||||||
i16 key = keys.keys[j].keycode;
|
|
||||||
switch (key){
|
|
||||||
case key_up:
|
|
||||||
--view->list_i;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case key_down:
|
GUI_Item_Update update = {0};
|
||||||
++view->list_i;
|
Hot_Directory *hdir = &models->hot_directory;
|
||||||
break;
|
b32 do_new_directory = 0;
|
||||||
|
i32 i = 0;
|
||||||
|
|
||||||
case '\n':
|
{
|
||||||
indirectly_activate = 1;
|
Single_Line_Input_Step step = {0};
|
||||||
break;
|
Key_Event_Data key = {0};
|
||||||
|
i32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < keys.count; ++i){
|
||||||
|
key = get_single_key(&keys, i);
|
||||||
|
step = app_single_file_input_step(system, &models->working_set, key, &hdir->string, hdir, 1, 1, 0);
|
||||||
|
if (step.made_a_change){
|
||||||
|
view->list_i = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gui_rollback(target, &update);
|
gui_do_text_field(target, message, hdir->string);
|
||||||
gui_begin_list(target, id, view->list_i, indirectly_activate, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
view->current_scroll = &view->gui_scroll;
|
||||||
begin_exhaustive_loop(&loop, hdir);
|
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
|
||||||
for (i = 0; i < loop.count; ++i){
|
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
|
||||||
file_info = get_exhaustive_info(system, &models->working_set, &loop, i);
|
|
||||||
|
|
||||||
if (file_info.name_match){
|
// TODO(allen): Deduplicate. Perhaps we want a standard list helper?
|
||||||
id.id[0] = (u64)(file_info.info);
|
id.id[0] = (u64)(hdir) + 1;
|
||||||
if (gui_do_file_option(target, id, file_info.info->filename, file_info.is_folder, file_info.message)){
|
if (gui_begin_list(target, id, view->list_i, 0, &update)){
|
||||||
if (file_info.is_folder){
|
if (update.has_adjustment){
|
||||||
set_last_folder(&hdir->string, file_info.info->filename, '/');
|
view->list_i = update.adjustment_value;
|
||||||
do_new_directory = 1;
|
}
|
||||||
}
|
|
||||||
else{
|
b32 indirectly_activate = 0;
|
||||||
interactive_view_complete(view, loop.full_path, 0);
|
for (i32 j = 0; j < keys.count; ++j){
|
||||||
|
i16 key = keys.keys[j].keycode;
|
||||||
|
switch (key){
|
||||||
|
case key_up:
|
||||||
|
--view->list_i;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case key_down:
|
||||||
|
++view->list_i;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\n':
|
||||||
|
indirectly_activate = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gui_rollback(target, &update);
|
||||||
|
gui_begin_list(target, id, view->list_i, indirectly_activate, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
begin_exhaustive_loop(&loop, hdir);
|
||||||
|
for (i = 0; i < loop.count; ++i){
|
||||||
|
file_info = get_exhaustive_info(system, &models->working_set, &loop, i);
|
||||||
|
|
||||||
|
if (file_info.name_match){
|
||||||
|
id.id[0] = (u64)(file_info.info);
|
||||||
|
if (gui_do_file_option(target, id, file_info.info->filename, file_info.is_folder, file_info.message)){
|
||||||
|
if (file_info.is_folder){
|
||||||
|
set_last_folder(&hdir->string, file_info.info->filename, '/');
|
||||||
|
do_new_directory = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
interactive_view_complete(view, loop.full_path, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
gui_end_list(target);
|
gui_end_list(target);
|
||||||
|
|
||||||
if (do_new_directory){
|
if (do_new_directory){
|
||||||
hot_directory_reload(system, hdir, &models->working_set);
|
hot_directory_reload(system, hdir, &models->working_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
gui_end_scrollable(target);
|
gui_end_scrollable(target);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case IInt_Live_File_List:
|
|
||||||
{
|
|
||||||
persist String message_unsaved = make_lit_string(" *");
|
|
||||||
persist String message_unsynced = make_lit_string(" !");
|
|
||||||
|
|
||||||
String message = {0};
|
|
||||||
switch (view->action){
|
|
||||||
case IAct_Switch: message = make_lit_string("Switch: "); break;
|
|
||||||
case IAct_Kill: message = make_lit_string("Kill: "); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Absolutes absolutes;
|
|
||||||
GUI_id id;
|
|
||||||
Editing_File *file;
|
|
||||||
File_Node *node, *used_nodes;
|
|
||||||
Working_Set *working_set = &models->working_set;
|
|
||||||
GUI_Item_Update update = {0};
|
|
||||||
|
|
||||||
|
case IInt_Live_File_List:
|
||||||
{
|
{
|
||||||
Single_Line_Input_Step step;
|
persist String message_unsaved = make_lit_string(" *");
|
||||||
Key_Event_Data key;
|
persist String message_unsynced = make_lit_string(" !");
|
||||||
i32 i;
|
|
||||||
for (i = 0; i < keys.count; ++i){
|
|
||||||
key = get_single_key(&keys, i);
|
|
||||||
step = app_single_line_input_step(system, key, &view->dest);
|
|
||||||
if (step.made_a_change){
|
|
||||||
view->list_i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get_absolutes(view->dest, &absolutes, 1, 1);
|
String message = {0};
|
||||||
|
switch (view->action){
|
||||||
gui_do_text_field(target, message, view->dest);
|
case IAct_Switch: message = make_lit_string("Switch: "); break;
|
||||||
|
case IAct_Kill: message = make_lit_string("Kill: "); break;
|
||||||
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);
|
|
||||||
|
|
||||||
// TODO(allen): Deduplicate. Perhaps we want a standard list helper?
|
|
||||||
id.id[0] = (u64)(working_set) + 1;
|
|
||||||
if (gui_begin_list(target, id, view->list_i, 0, &update)){
|
|
||||||
if (update.has_adjustment){
|
|
||||||
view->list_i = update.adjustment_value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b32 indirectly_activate = 0;
|
Absolutes absolutes;
|
||||||
for (i32 j = 0; j < keys.count; ++j){
|
Editing_File *file;
|
||||||
i16 key = keys.keys[j].keycode;
|
File_Node *node, *used_nodes;
|
||||||
switch (key){
|
Working_Set *working_set = &models->working_set;
|
||||||
case key_up:
|
GUI_Item_Update update = {0};
|
||||||
--view->list_i;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case key_down:
|
{
|
||||||
++view->list_i;
|
Single_Line_Input_Step step;
|
||||||
break;
|
Key_Event_Data key;
|
||||||
|
i32 i;
|
||||||
case '\n':
|
for (i = 0; i < keys.count; ++i){
|
||||||
indirectly_activate = 1;
|
key = get_single_key(&keys, i);
|
||||||
break;
|
step = app_single_line_input_step(system, key, &view->dest);
|
||||||
|
if (step.made_a_change){
|
||||||
|
view->list_i = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gui_rollback(target, &update);
|
get_absolutes(view->dest, &absolutes, 1, 1);
|
||||||
gui_begin_list(target, id, view->list_i, indirectly_activate, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
used_nodes = &working_set->used_sentinel;
|
gui_do_text_field(target, message, view->dest);
|
||||||
for (dll_items(node, used_nodes)){
|
|
||||||
file = (Editing_File*)node;
|
|
||||||
Assert(!file->state.is_dummy);
|
|
||||||
|
|
||||||
message = {0};
|
view->current_scroll = &view->gui_scroll;
|
||||||
switch (buffer_get_sync(file)){
|
gui_get_scroll_vars(target, view->showing_ui, &view->gui_scroll);
|
||||||
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
gui_begin_scrollable(target, view->showing_ui, view->gui_scroll, 9.f * view->font_height);
|
||||||
case SYNC_UNSAVED: message = message_unsaved; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filename_match(view->dest, &absolutes, file->name.live_name, 1)){
|
// TODO(allen): Deduplicate. Perhaps we want a standard list helper?
|
||||||
id.id[0] = (u64)(file);
|
id.id[0] = (u64)(working_set) + 1;
|
||||||
if (gui_do_file_option(target, id, file->name.live_name, 0, message)){
|
if (gui_begin_list(target, id, view->list_i, 0, &update)){
|
||||||
interactive_view_complete(view, file->name.live_name, 0);
|
if (update.has_adjustment){
|
||||||
|
view->list_i = update.adjustment_value;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gui_end_list(target);
|
b32 indirectly_activate = 0;
|
||||||
|
for (i32 j = 0; j < keys.count; ++j){
|
||||||
|
i16 key = keys.keys[j].keycode;
|
||||||
|
switch (key){
|
||||||
|
case key_up:
|
||||||
|
--view->list_i;
|
||||||
|
break;
|
||||||
|
|
||||||
gui_end_scrollable(target);
|
case key_down:
|
||||||
}break;
|
++view->list_i;
|
||||||
|
break;
|
||||||
|
|
||||||
case IInt_Sure_To_Close:
|
case '\n':
|
||||||
{
|
indirectly_activate = 1;
|
||||||
i32 action = -1;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GUI_id id;
|
gui_rollback(target, &update);
|
||||||
String empty_str = {0};
|
gui_begin_list(target, id, view->list_i, indirectly_activate, 0);
|
||||||
String message = make_lit_string("There is one or more files unsaved changes, close anyway?");
|
}
|
||||||
|
|
||||||
gui_do_text_field(target, message, empty_str);
|
used_nodes = &working_set->used_sentinel;
|
||||||
|
for (dll_items(node, used_nodes)){
|
||||||
|
file = (Editing_File*)node;
|
||||||
|
Assert(!file->state.is_dummy);
|
||||||
|
|
||||||
id.id[0] = (u64)('y' + (VUI_Interactive << 8));
|
message = {0};
|
||||||
message = make_lit_string("(Y)es");
|
switch (buffer_get_sync(file)){
|
||||||
if (gui_do_fixed_option(target, id, message, 'y')){
|
case SYNC_BEHIND_OS: message = message_unsynced; break;
|
||||||
action = 0;
|
case SYNC_UNSAVED: message = message_unsaved; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
id.id[0] = (u64)('n' + (VUI_Interactive << 8));
|
if (filename_match(view->dest, &absolutes, file->name.live_name, 1)){
|
||||||
message = make_lit_string("(N)o");
|
id.id[0] = (u64)(file);
|
||||||
if (gui_do_fixed_option(target, id, message, 'n')){
|
if (gui_do_file_option(target, id, file->name.live_name, 0, message)){
|
||||||
action = 1;
|
interactive_view_complete(view, file->name.live_name, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (action != -1){
|
gui_end_list(target);
|
||||||
interactive_view_complete(view, view->dest, action);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case IInt_Sure_To_Kill:
|
gui_end_scrollable(target);
|
||||||
{
|
}break;
|
||||||
i32 action = -1;
|
|
||||||
|
|
||||||
GUI_id id;
|
case IInt_Sure_To_Close:
|
||||||
String empty_str = {0};
|
{
|
||||||
String message = make_lit_string("There are unsaved changes, close anyway?");
|
i32 action = -1;
|
||||||
|
|
||||||
gui_do_text_field(target, message, empty_str);
|
String empty_str = {0};
|
||||||
|
String message = make_lit_string("There is one or more files unsaved changes, close anyway?");
|
||||||
|
|
||||||
id.id[0] = (u64)('y' + (VUI_Interactive << 8));
|
gui_do_text_field(target, message, empty_str);
|
||||||
message = make_lit_string("(Y)es");
|
|
||||||
if (gui_do_fixed_option(target, id, message, 'y')){
|
|
||||||
action = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
id.id[0] = (u64)('n' + (VUI_Interactive << 8));
|
id.id[0] = (u64)('y');
|
||||||
message = make_lit_string("(N)o");
|
message = make_lit_string("(Y)es");
|
||||||
if (gui_do_fixed_option(target, id, message, 'n')){
|
if (gui_do_fixed_option(target, id, message, 'y')){
|
||||||
action = 1;
|
action = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
id.id[0] = (u64)('s' + (VUI_Interactive << 8));
|
id.id[0] = (u64)('n');
|
||||||
message = make_lit_string("(S)ave and kill");
|
message = make_lit_string("(N)o");
|
||||||
if (gui_do_fixed_option(target, id, message, 's')){
|
if (gui_do_fixed_option(target, id, message, 'n')){
|
||||||
action = 2;
|
action = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action != -1){
|
if (action != -1){
|
||||||
interactive_view_complete(view, view->dest, action);
|
interactive_view_complete(view, view->dest, action);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
case IInt_Sure_To_Kill:
|
||||||
|
{
|
||||||
|
i32 action = -1;
|
||||||
|
|
||||||
|
String empty_str = {0};
|
||||||
|
String message = make_lit_string("There are unsaved changes, close anyway?");
|
||||||
|
|
||||||
|
gui_do_text_field(target, message, empty_str);
|
||||||
|
|
||||||
|
id.id[0] = (u64)('y');
|
||||||
|
message = make_lit_string("(Y)es");
|
||||||
|
if (gui_do_fixed_option(target, id, message, 'y')){
|
||||||
|
action = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
id.id[0] = (u64)('n');
|
||||||
|
message = make_lit_string("(N)o");
|
||||||
|
if (gui_do_fixed_option(target, id, message, 'n')){
|
||||||
|
action = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
id.id[0] = (u64)('s');
|
||||||
|
message = make_lit_string("(S)ave and kill");
|
||||||
|
if (gui_do_fixed_option(target, id, message, 's')){
|
||||||
|
action = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action != -1){
|
||||||
|
interactive_view_complete(view, view->dest, action);
|
||||||
|
}
|
||||||
|
}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
|
||||||
|
|
58
4ed_gui.cpp
58
4ed_gui.cpp
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue