Input handling cleanup, new view_activate key, fix notepad-like click to new view problem

master
Allen Webster 2018-11-08 18:16:11 -08:00
parent e2655f24f3
commit a1f240f04e
7 changed files with 99 additions and 93 deletions

View File

@ -353,10 +353,9 @@ STRUCT Key_Event_Data{
/* DOC(This field is like the field character, except that the state of caps lock is ignored in the translation.) */ /* DOC(This field is like the field character, except that the state of caps lock is ignored in the translation.) */
Key_Code character_no_caps_lock; Key_Code character_no_caps_lock;
/* DOC(This field is an array indicating the state of modifiers at the time of the key press. The array is indexed using the values of Key_Modifier_Index. 1 indicates that the corresponding modifier was held, and a 0 indicates that it was not held.) /* DOC(This field is an array indicating the state of modifiers at the time of the key press. The array is indexed using the values of Key_Modifier_Index.
1 indicates that the corresponding modifier was held, and a 0 indicates that it was not held.)
DOC_SEE(Key_Modifier) DOC_SEE(Key_Modifier) */
*/
int8_t modifiers[MDFR_INDEX_COUNT]; int8_t modifiers[MDFR_INDEX_COUNT];
}; };

View File

@ -146,7 +146,7 @@ CUSTOM_DOC("Sets the left size of the view near the x position of the cursor.")
view_set_scroll(app, &view, scroll); view_set_scroll(app, &view, scroll);
} }
bool32 static bool32
global_point_to_view_point(View_Summary *view, int32_t x, int32_t y, float *x_out, float *y_out){ global_point_to_view_point(View_Summary *view, int32_t x, int32_t y, float *x_out, float *y_out){
bool32 result = false; bool32 result = false;

View File

@ -18,22 +18,23 @@ key_mouse_right_release = 55311,
key_mouse_wheel = 55312, key_mouse_wheel = 55312,
key_mouse_move = 55313, key_mouse_move = 55313,
key_animate = 55314, key_animate = 55314,
key_f1 = 55315, key_view_activate = 55315,
key_f2 = 55316, key_f1 = 55316,
key_f3 = 55317, key_f2 = 55317,
key_f4 = 55318, key_f3 = 55318,
key_f5 = 55319, key_f4 = 55319,
key_f6 = 55320, key_f5 = 55320,
key_f7 = 55321, key_f6 = 55321,
key_f8 = 55322, key_f7 = 55322,
key_f9 = 55323, key_f8 = 55323,
key_f10 = 55324, key_f9 = 55324,
key_f11 = 55325, key_f10 = 55325,
key_f12 = 55326, key_f11 = 55326,
key_f13 = 55327, key_f12 = 55327,
key_f14 = 55328, key_f13 = 55328,
key_f15 = 55329, key_f14 = 55329,
key_f16 = 55330, key_f15 = 55330,
key_f16 = 55331,
}; };
static char* static char*
global_key_name(uint32_t key_code, int32_t *size){ global_key_name(uint32_t key_code, int32_t *size){
@ -58,6 +59,7 @@ case key_mouse_right_release: result = "key_mouse_right_release"; *size = sizeof
case key_mouse_wheel: result = "key_mouse_wheel"; *size = sizeof("key_mouse_wheel")-1; break; case key_mouse_wheel: result = "key_mouse_wheel"; *size = sizeof("key_mouse_wheel")-1; break;
case key_mouse_move: result = "key_mouse_move"; *size = sizeof("key_mouse_move")-1; break; case key_mouse_move: result = "key_mouse_move"; *size = sizeof("key_mouse_move")-1; break;
case key_animate: result = "key_animate"; *size = sizeof("key_animate")-1; break; case key_animate: result = "key_animate"; *size = sizeof("key_animate")-1; break;
case key_view_activate: result = "key_view_activate"; *size = sizeof("key_view_activate")-1; break;
case key_f1: result = "key_f1"; *size = sizeof("key_f1")-1; break; case key_f1: result = "key_f1"; *size = sizeof("key_f1")-1; break;
case key_f2: result = "key_f2"; *size = sizeof("key_f2")-1; break; case key_f2: result = "key_f2"; *size = sizeof("key_f2")-1; break;
case key_f3: result = "key_f3"; *size = sizeof("key_f3")-1; break; case key_f3: result = "key_f3"; *size = sizeof("key_f3")-1; break;

View File

@ -44,6 +44,7 @@ end_map(context);
begin_map(context, mapid_file); begin_map(context, mapid_file);
bind_vanilla_keys(context, write_character); bind_vanilla_keys(context, write_character);
bind(context, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark); bind(context, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark);
bind(context, key_view_activate, MDFR_NONE, click_set_cursor_and_mark);
bind(context, key_mouse_left_release, MDFR_NONE, click_set_cursor); bind(context, key_mouse_left_release, MDFR_NONE, click_set_cursor);
bind(context, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton); bind(context, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton);
bind(context, key_del, MDFR_NONE, delete_char); bind(context, key_del, MDFR_NONE, delete_char);
@ -166,6 +167,7 @@ bind(context, key_down, MDFR_NONE, lister__move_down);
bind(context, key_page_down, MDFR_NONE, lister__move_down); bind(context, key_page_down, MDFR_NONE, lister__move_down);
bind(context, key_mouse_wheel, MDFR_NONE, lister__wheel_scroll); bind(context, key_mouse_wheel, MDFR_NONE, lister__wheel_scroll);
bind(context, key_mouse_left, MDFR_NONE, lister__mouse_press); bind(context, key_mouse_left, MDFR_NONE, lister__mouse_press);
bind(context, key_view_activate, MDFR_NONE, lister__mouse_press);
bind(context, key_mouse_left_release, MDFR_NONE, lister__mouse_release); bind(context, key_mouse_left_release, MDFR_NONE, lister__mouse_release);
bind(context, key_mouse_move, MDFR_NONE, lister__repaint); bind(context, key_mouse_move, MDFR_NONE, lister__repaint);
bind(context, key_animate, MDFR_NONE, lister__repaint); bind(context, key_animate, MDFR_NONE, lister__repaint);
@ -217,6 +219,7 @@ begin_map(context, mapid_file);
bind_vanilla_keys(context, write_character); bind_vanilla_keys(context, write_character);
bind_vanilla_keys(context, MDFR_ALT, write_character); bind_vanilla_keys(context, MDFR_ALT, write_character);
bind(context, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark); bind(context, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark);
bind(context, key_view_activate, MDFR_NONE, click_set_cursor_and_mark);
bind(context, key_mouse_left_release, MDFR_NONE, click_set_cursor); bind(context, key_mouse_left_release, MDFR_NONE, click_set_cursor);
bind(context, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton); bind(context, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton);
bind(context, key_del, MDFR_NONE, delete_char); bind(context, key_del, MDFR_NONE, delete_char);
@ -337,6 +340,7 @@ bind(context, key_down, MDFR_NONE, lister__move_down);
bind(context, key_page_down, MDFR_NONE, lister__move_down); bind(context, key_page_down, MDFR_NONE, lister__move_down);
bind(context, key_mouse_wheel, MDFR_NONE, lister__wheel_scroll); bind(context, key_mouse_wheel, MDFR_NONE, lister__wheel_scroll);
bind(context, key_mouse_left, MDFR_NONE, lister__mouse_press); bind(context, key_mouse_left, MDFR_NONE, lister__mouse_press);
bind(context, key_view_activate, MDFR_NONE, click_set_cursor_and_mark);
bind(context, key_mouse_left_release, MDFR_NONE, lister__mouse_release); bind(context, key_mouse_left_release, MDFR_NONE, lister__mouse_release);
bind(context, key_mouse_move, MDFR_NONE, lister__repaint); bind(context, key_mouse_move, MDFR_NONE, lister__repaint);
bind(context, key_animate, MDFR_NONE, lister__repaint); bind(context, key_animate, MDFR_NONE, lister__repaint);
@ -398,7 +402,6 @@ static Meta_Key_Bind fcoder_binds_for_default_mapid_global[39] = {
{0, 88, 2, "project_command_lister", 22, LINK_PROCS(project_command_lister)}, {0, 88, 2, "project_command_lister", 22, LINK_PROCS(project_command_lister)},
{0, 73, 1, "list_all_functions_current_buffer_lister", 40, LINK_PROCS(list_all_functions_current_buffer_lister)}, {0, 73, 1, "list_all_functions_current_buffer_lister", 40, LINK_PROCS(list_all_functions_current_buffer_lister)},
{0, 69, 2, "exit_4coder", 11, LINK_PROCS(exit_4coder)}, {0, 69, 2, "exit_4coder", 11, LINK_PROCS(exit_4coder)},
{0, 55315, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55316, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55316, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55317, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55317, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55318, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55318, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
@ -414,11 +417,13 @@ static Meta_Key_Bind fcoder_binds_for_default_mapid_global[39] = {
{0, 55328, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55328, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55329, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55329, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55330, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55330, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55331, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55312, 0, "mouse_wheel_scroll", 18, LINK_PROCS(mouse_wheel_scroll)}, {0, 55312, 0, "mouse_wheel_scroll", 18, LINK_PROCS(mouse_wheel_scroll)},
}; };
static Meta_Key_Bind fcoder_binds_for_default_mapid_file[77] = { static Meta_Key_Bind fcoder_binds_for_default_mapid_file[78] = {
{1, 0, 0, "write_character", 15, LINK_PROCS(write_character)}, {1, 0, 0, "write_character", 15, LINK_PROCS(write_character)},
{0, 55308, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)}, {0, 55308, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)},
{0, 55315, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)},
{0, 55310, 0, "click_set_cursor", 16, LINK_PROCS(click_set_cursor)}, {0, 55310, 0, "click_set_cursor", 16, LINK_PROCS(click_set_cursor)},
{0, 55313, 0, "click_set_cursor_if_lbutton", 27, LINK_PROCS(click_set_cursor_if_lbutton)}, {0, 55313, 0, "click_set_cursor_if_lbutton", 27, LINK_PROCS(click_set_cursor_if_lbutton)},
{0, 55301, 0, "delete_char", 11, LINK_PROCS(delete_char)}, {0, 55301, 0, "delete_char", 11, LINK_PROCS(delete_char)},
@ -528,7 +533,7 @@ static Meta_Key_Bind fcoder_binds_for_default_default_code_map[31] = {
{0, 50, 2, "open_matching_file_cpp", 22, LINK_PROCS(open_matching_file_cpp)}, {0, 50, 2, "open_matching_file_cpp", 22, LINK_PROCS(open_matching_file_cpp)},
{0, 48, 1, "write_zero_struct", 17, LINK_PROCS(write_zero_struct)}, {0, 48, 1, "write_zero_struct", 17, LINK_PROCS(write_zero_struct)},
}; };
static Meta_Key_Bind fcoder_binds_for_default_default_lister_ui_map[14] = { static Meta_Key_Bind fcoder_binds_for_default_default_lister_ui_map[15] = {
{1, 0, 0, "lister__write_character", 23, LINK_PROCS(lister__write_character)}, {1, 0, 0, "lister__write_character", 23, LINK_PROCS(lister__write_character)},
{0, 55307, 0, "lister__quit", 12, LINK_PROCS(lister__quit)}, {0, 55307, 0, "lister__quit", 12, LINK_PROCS(lister__quit)},
{0, 10, 0, "lister__activate", 16, LINK_PROCS(lister__activate)}, {0, 10, 0, "lister__activate", 16, LINK_PROCS(lister__activate)},
@ -540,15 +545,16 @@ static Meta_Key_Bind fcoder_binds_for_default_default_lister_ui_map[14] = {
{0, 55306, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)}, {0, 55306, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)},
{0, 55312, 0, "lister__wheel_scroll", 20, LINK_PROCS(lister__wheel_scroll)}, {0, 55312, 0, "lister__wheel_scroll", 20, LINK_PROCS(lister__wheel_scroll)},
{0, 55308, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)}, {0, 55308, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)},
{0, 55315, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)},
{0, 55310, 0, "lister__mouse_release", 21, LINK_PROCS(lister__mouse_release)}, {0, 55310, 0, "lister__mouse_release", 21, LINK_PROCS(lister__mouse_release)},
{0, 55313, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)}, {0, 55313, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)},
{0, 55314, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)}, {0, 55314, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)},
}; };
static Meta_Sub_Map fcoder_submaps_for_default[4] = { static Meta_Sub_Map fcoder_submaps_for_default[4] = {
{"mapid_global", 12, "The following bindings apply in all situations.", 47, 0, 0, fcoder_binds_for_default_mapid_global, 39}, {"mapid_global", 12, "The following bindings apply in all situations.", 47, 0, 0, fcoder_binds_for_default_mapid_global, 39},
{"mapid_file", 10, "The following bindings apply in general text files and most apply in code files, but some are overriden by other commands specific to code files.", 145, 0, 0, fcoder_binds_for_default_mapid_file, 77}, {"mapid_file", 10, "The following bindings apply in general text files and most apply in code files, but some are overriden by other commands specific to code files.", 145, 0, 0, fcoder_binds_for_default_mapid_file, 78},
{"default_code_map", 16, "The following commands only apply in files where the lexer (syntax highlighting) is turned on.", 94, "mapid_file", 10, fcoder_binds_for_default_default_code_map, 31}, {"default_code_map", 16, "The following commands only apply in files where the lexer (syntax highlighting) is turned on.", 94, "mapid_file", 10, fcoder_binds_for_default_default_code_map, 31},
{"default_lister_ui_map", 21, "These commands apply in 'lister mode' such as when you open a file.", 67, 0, 0, fcoder_binds_for_default_default_lister_ui_map, 14}, {"default_lister_ui_map", 21, "These commands apply in 'lister mode' such as when you open a file.", 67, 0, 0, fcoder_binds_for_default_default_lister_ui_map, 15},
}; };
static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_global[39] = { static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_global[39] = {
{0, 44, 4, "change_active_panel", 19, LINK_PROCS(change_active_panel)}, {0, 44, 4, "change_active_panel", 19, LINK_PROCS(change_active_panel)},
@ -573,7 +579,6 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_global[39] = {
{0, 88, 1, "project_command_lister", 22, LINK_PROCS(project_command_lister)}, {0, 88, 1, "project_command_lister", 22, LINK_PROCS(project_command_lister)},
{0, 73, 4, "list_all_functions_current_buffer_lister", 40, LINK_PROCS(list_all_functions_current_buffer_lister)}, {0, 73, 4, "list_all_functions_current_buffer_lister", 40, LINK_PROCS(list_all_functions_current_buffer_lister)},
{0, 69, 1, "exit_4coder", 11, LINK_PROCS(exit_4coder)}, {0, 69, 1, "exit_4coder", 11, LINK_PROCS(exit_4coder)},
{0, 55315, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55316, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55316, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55317, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55317, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55318, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55318, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
@ -589,12 +594,14 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_global[39] = {
{0, 55328, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55328, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55329, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55329, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55330, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)}, {0, 55330, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55331, 0, "project_fkey_command", 20, LINK_PROCS(project_fkey_command)},
{0, 55312, 0, "mouse_wheel_scroll", 18, LINK_PROCS(mouse_wheel_scroll)}, {0, 55312, 0, "mouse_wheel_scroll", 18, LINK_PROCS(mouse_wheel_scroll)},
}; };
static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_file[76] = { static Meta_Key_Bind fcoder_binds_for_mac_default_mapid_file[77] = {
{1, 0, 0, "write_character", 15, LINK_PROCS(write_character)}, {1, 0, 0, "write_character", 15, LINK_PROCS(write_character)},
{1, 0, 2, "write_character", 15, LINK_PROCS(write_character)}, {1, 0, 2, "write_character", 15, LINK_PROCS(write_character)},
{0, 55308, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)}, {0, 55308, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)},
{0, 55315, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)},
{0, 55310, 0, "click_set_cursor", 16, LINK_PROCS(click_set_cursor)}, {0, 55310, 0, "click_set_cursor", 16, LINK_PROCS(click_set_cursor)},
{0, 55313, 0, "click_set_cursor_if_lbutton", 27, LINK_PROCS(click_set_cursor_if_lbutton)}, {0, 55313, 0, "click_set_cursor_if_lbutton", 27, LINK_PROCS(click_set_cursor_if_lbutton)},
{0, 55301, 0, "delete_char", 11, LINK_PROCS(delete_char)}, {0, 55301, 0, "delete_char", 11, LINK_PROCS(delete_char)},
@ -702,7 +709,7 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_default_code_map[31] = {
{0, 50, 1, "open_matching_file_cpp", 22, LINK_PROCS(open_matching_file_cpp)}, {0, 50, 1, "open_matching_file_cpp", 22, LINK_PROCS(open_matching_file_cpp)},
{0, 48, 4, "write_zero_struct", 17, LINK_PROCS(write_zero_struct)}, {0, 48, 4, "write_zero_struct", 17, LINK_PROCS(write_zero_struct)},
}; };
static Meta_Key_Bind fcoder_binds_for_mac_default_default_lister_ui_map[14] = { static Meta_Key_Bind fcoder_binds_for_mac_default_default_lister_ui_map[15] = {
{1, 0, 0, "lister__write_character", 23, LINK_PROCS(lister__write_character)}, {1, 0, 0, "lister__write_character", 23, LINK_PROCS(lister__write_character)},
{0, 55307, 0, "lister__quit", 12, LINK_PROCS(lister__quit)}, {0, 55307, 0, "lister__quit", 12, LINK_PROCS(lister__quit)},
{0, 10, 0, "lister__activate", 16, LINK_PROCS(lister__activate)}, {0, 10, 0, "lister__activate", 16, LINK_PROCS(lister__activate)},
@ -714,15 +721,16 @@ static Meta_Key_Bind fcoder_binds_for_mac_default_default_lister_ui_map[14] = {
{0, 55306, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)}, {0, 55306, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)},
{0, 55312, 0, "lister__wheel_scroll", 20, LINK_PROCS(lister__wheel_scroll)}, {0, 55312, 0, "lister__wheel_scroll", 20, LINK_PROCS(lister__wheel_scroll)},
{0, 55308, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)}, {0, 55308, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)},
{0, 55315, 0, "click_set_cursor_and_mark", 25, LINK_PROCS(click_set_cursor_and_mark)},
{0, 55310, 0, "lister__mouse_release", 21, LINK_PROCS(lister__mouse_release)}, {0, 55310, 0, "lister__mouse_release", 21, LINK_PROCS(lister__mouse_release)},
{0, 55313, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)}, {0, 55313, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)},
{0, 55314, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)}, {0, 55314, 0, "lister__repaint", 15, LINK_PROCS(lister__repaint)},
}; };
static Meta_Sub_Map fcoder_submaps_for_mac_default[4] = { static Meta_Sub_Map fcoder_submaps_for_mac_default[4] = {
{"mapid_global", 12, "The following bindings apply in all situations.", 47, 0, 0, fcoder_binds_for_mac_default_mapid_global, 39}, {"mapid_global", 12, "The following bindings apply in all situations.", 47, 0, 0, fcoder_binds_for_mac_default_mapid_global, 39},
{"mapid_file", 10, "The following bindings apply in general text files and most apply in code files, but some are overriden by other commands specific to code files.", 145, 0, 0, fcoder_binds_for_mac_default_mapid_file, 76}, {"mapid_file", 10, "The following bindings apply in general text files and most apply in code files, but some are overriden by other commands specific to code files.", 145, 0, 0, fcoder_binds_for_mac_default_mapid_file, 77},
{"default_code_map", 16, "The following commands only apply in files where the lexer (syntax highlighting) is turned on.", 94, "mapid_file", 10, fcoder_binds_for_mac_default_default_code_map, 31}, {"default_code_map", 16, "The following commands only apply in files where the lexer (syntax highlighting) is turned on.", 94, "mapid_file", 10, fcoder_binds_for_mac_default_default_code_map, 31},
{"default_lister_ui_map", 21, "These commands apply in 'lister mode' such as when you open a file.", 67, 0, 0, fcoder_binds_for_mac_default_default_lister_ui_map, 14}, {"default_lister_ui_map", 21, "These commands apply in 'lister mode' such as when you open a file.", 67, 0, 0, fcoder_binds_for_mac_default_default_lister_ui_map, 15},
}; };
static Meta_Mapping fcoder_meta_maps[2] = { static Meta_Mapping fcoder_meta_maps[2] = {
{"default", 7, "The default 4coder bindings - typically good for Windows and Linux", 66, fcoder_submaps_for_default, 4, LINK_PROCS(fill_keys_default)}, {"default", 7, "The default 4coder bindings - typically good for Windows and Linux", 66, fcoder_submaps_for_default, 4, LINK_PROCS(fill_keys_default)},

97
4ed.cpp
View File

@ -1561,12 +1561,12 @@ App_Step_Sig(app_step){
app_result.animating = true; app_result.animating = true;
// 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?
if (view != 0 && models->command_coroutine == 0){ if (view != 0 && models->command_coroutine == 0){
init_query_set(&view->transient.query_set); init_query_set(&view->transient.query_set);
} }
if (models->command_coroutine == 0) break; if (models->command_coroutine == 0){
break;
}
} }
} }
@ -1574,19 +1574,7 @@ App_Step_Sig(app_step){
} }
// NOTE(allen): pass raw input to the panels // NOTE(allen): pass raw input to the panels
Input_Summary dead_input = {}; f32 dt = input->dt;
dead_input.mouse.x = input->mouse.x;
dead_input.mouse.y = input->mouse.y;
dead_input.dt = input->dt;
Input_Summary active_input = {};
active_input.mouse.x = input->mouse.x;
active_input.mouse.y = input->mouse.y;
active_input.dt = input->dt;
active_input.keys = get_key_data(&vars->available_input);
Mouse_State mouse_state = get_mouse_state(&vars->available_input);
{ {
Command_Data *command = cmd; Command_Data *command = cmd;
@ -1597,12 +1585,6 @@ App_Step_Sig(app_step){
panel != &models->layout.used_sentinel; panel != &models->layout.used_sentinel;
panel = panel->next){ panel = panel->next){
View *view = panel->view; View *view = panel->view;
b32 active = (panel == active_panel);
Input_Summary summary = (active)?(active_input):(dead_input);
if (panel == mouse_panel && !input->mouse.out_of_window){
summary.mouse = mouse_state;
}
GUI_Scroll_Vars *scroll_vars = 0; GUI_Scroll_Vars *scroll_vars = 0;
i32 max_y = 0; i32 max_y = 0;
@ -1619,17 +1601,12 @@ App_Step_Sig(app_step){
file_scroll = false; file_scroll = false;
} }
Input_Process_Result ip_result = do_step_file_view(system, view, models, panel->inner, active, &summary, *scroll_vars, max_y); b32 active = (panel == active_panel);
Input_Process_Result ip_result = do_step_file_view(system, view, models, panel->inner, active, dt, *scroll_vars, max_y);
if (ip_result.is_animating){ if (ip_result.is_animating){
app_result.animating = true; app_result.animating = true;
} }
if (ip_result.consumed_l){
consume_input(&vars->available_input, Input_MouseLeftButton, "file view step");
}
if (ip_result.consumed_r){
consume_input(&vars->available_input, Input_MouseRightButton, "file view step");
}
if (memcmp(scroll_vars, &ip_result.scroll, sizeof(*scroll_vars)) != 0){ if (memcmp(scroll_vars, &ip_result.scroll, sizeof(*scroll_vars)) != 0){
if (file_scroll){ if (file_scroll){
@ -1666,7 +1643,7 @@ App_Step_Sig(app_step){
i32 map = view_get_map(view); i32 map = view_get_map(view);
Command_Binding cmd_bind = map_extract_recursive(&models->mapping, map, key); Command_Binding cmd_bind = map_extract_recursive(&models->mapping, map, key);
if (cmd_bind.function){ if (cmd_bind.function != 0){
if (key.keycode == key_esc){ if (key.keycode == key_esc){
hit_esc = true; hit_esc = true;
} }
@ -1748,7 +1725,7 @@ App_Step_Sig(app_step){
i32 top = 0; i32 top = 0;
divider_stack[top++] = div.id; divider_stack[top++] = div.id;
while (top > 0){ for (;top > 0;){
--top; --top;
Divider_And_ID other_div = layout_get_divider(&models->layout, divider_stack[top]); Divider_And_ID other_div = layout_get_divider(&models->layout, divider_stack[top]);
b32 divider_match = (other_div.divider->v_divider == mouse_divider_vertical); b32 divider_match = (other_div.divider->v_divider == mouse_divider_vertical);
@ -1778,28 +1755,16 @@ App_Step_Sig(app_step){
Panel_Divider *divider = vars->resizing.divider; Panel_Divider *divider = vars->resizing.divider;
i32 mouse_position = 0; i32 mouse_position = 0;
b32 do_absolute_positions = 1; i32 absolute_positions[MAX_VIEWS];
if (do_absolute_positions){ i32 min = 0;
i32 absolute_positions[MAX_VIEWS]; i32 max = 0;
i32 min = 0, max = 0; i32 div_id = (i32)(divider - models->layout.dividers);
i32 div_id = (i32)(divider - models->layout.dividers);
layout_compute_absolute_positions(&models->layout, absolute_positions);
mouse_position = (divider->v_divider)?(mx):(my);
layout_get_min_max(&models->layout, divider, absolute_positions, &min, &max);
absolute_positions[div_id] = clamp(min, mouse_position, max);
layout_update_all_positions(&models->layout, absolute_positions);
}
else{ layout_compute_absolute_positions(&models->layout, absolute_positions);
if (divider->v_divider){ mouse_position = (divider->v_divider)?(mx):(my);
mouse_position = clamp(0, mx, models->layout.full_width); layout_get_min_max(&models->layout, divider, absolute_positions, &min, &max);
} absolute_positions[div_id] = clamp(min, mouse_position, max);
else{ layout_update_all_positions(&models->layout, absolute_positions);
mouse_position = clamp(0, my, models->layout.full_height);
}
divider->pos = layout_compute_position(&models->layout, divider, mouse_position);
}
layout_fix_all_panels(&models->layout); layout_fix_all_panels(&models->layout);
} }
@ -1837,6 +1802,32 @@ App_Step_Sig(app_step){
models->layout.active_panel = new_panel_id; models->layout.active_panel = new_panel_id;
app_result.animating = true; app_result.animating = true;
{
Command_Data *command = cmd;
Key_Event_Data key = {};
key.keycode = key_view_activate;
cmd->key = key;
USE_VIEW(view);
i32 map = view_get_map(view);
Command_Binding cmd_bind = map_extract_recursive(&models->mapping, map, key);
if (cmd_bind.function != 0){
Assert(models->command_coroutine == 0);
Coroutine_Head *command_coroutine = system->create_coroutine(command_caller);
models->command_coroutine = command_coroutine;
Command_In cmd_in;
cmd_in.cmd = cmd;
cmd_in.bind = cmd_bind;
models->command_coroutine = app_launch_coroutine(system, &models->app_links, Co_Command, models->command_coroutine, &cmd_in, models->command_coroutine_flags);
models->prev_command = cmd_bind;
}
}
} }
} }
@ -1894,7 +1885,7 @@ App_Step_Sig(app_step){
GUI_Scroll_Vars *scroll_vars = &view->transient.edit_pos->scroll; GUI_Scroll_Vars *scroll_vars = &view->transient.edit_pos->scroll;
do_render_file_view(system, view, models, scroll_vars, active_view, panel->inner, active, target, &dead_input); do_render_file_view(system, view, models, scroll_vars, active_view, panel->inner, active, target);
u32 margin_color; u32 margin_color;
if (active){ if (active){

View File

@ -47,7 +47,7 @@ global_const Style_Color_Edit colors_to_edit[] = {
}; };
internal Input_Process_Result internal Input_Process_Result
do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, Input_Summary *user_input, GUI_Scroll_Vars scroll, i32 max_y){ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, f32 dt, GUI_Scroll_Vars scroll, i32 max_y){
scroll.target_y = clamp(0, scroll.target_y, max_y); scroll.target_y = clamp(0, scroll.target_y, max_y);
Input_Process_Result result = {0}; Input_Process_Result result = {0};
@ -70,10 +70,11 @@ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect
slot = slot->next, ++bar_count); slot = slot->next, ++bar_count);
view->transient.widget_height = (f32)bar_count*(view->transient.line_height + 2); view->transient.widget_height = (f32)bar_count*(view->transient.line_height + 2);
Editing_File *file = view->transient.file_data.file;
if (!view->transient.ui_mode){ if (!view->transient.ui_mode){
view->transient.file_region = rect; view->transient.file_region = rect;
Editing_File *file = view->transient.file_data.file;
if (view->transient.reinit_scrolling){ if (view->transient.reinit_scrolling){
view->transient.reinit_scrolling = false; view->transient.reinit_scrolling = false;
result.is_animating = true; result.is_animating = true;
@ -101,11 +102,11 @@ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect
result.scroll.scroll_x = (f32)target_x; result.scroll.scroll_x = (f32)target_x;
result.scroll.prev_target_x = -1000; result.scroll.prev_target_x = -1000;
} }
}
if (!file->is_loading && file->state.paste_effect.seconds_down > 0.f){
file->state.paste_effect.seconds_down -= user_input->dt; if (!file->is_loading && file->state.paste_effect.seconds_down > 0.f){
result.is_animating = true; file->state.paste_effect.seconds_down -= dt;
} result.is_animating = true;
} }
{ {
@ -116,7 +117,7 @@ do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect
f32 target_x = (f32)scroll_vars.target_x; f32 target_x = (f32)scroll_vars.target_x;
f32 target_y = (f32)scroll_vars.target_y; f32 target_y = (f32)scroll_vars.target_y;
if (models->scroll_rule(target_x, target_y, &scroll_vars.scroll_x, &scroll_vars.scroll_y, (view->persistent.id) + 1, is_new_target, user_input->dt)){ if (models->scroll_rule(target_x, target_y, &scroll_vars.scroll_x, &scroll_vars.scroll_y, (view->persistent.id) + 1, is_new_target, dt)){
result.is_animating = true; result.is_animating = true;
} }
@ -225,7 +226,7 @@ draw_file_bar(System_Functions *system, Render_Target *target, View *view, Model
} }
internal void internal void
do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Scroll_Vars *scroll, View *active, i32_Rect rect, b32 is_active, Render_Target *target, Input_Summary *user_input){ do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Scroll_Vars *scroll, View *active, i32_Rect rect, b32 is_active, Render_Target *target){
Editing_File *file = view->transient.file_data.file; Editing_File *file = view->transient.file_data.file;
Assert(file != 0); Assert(file != 0);

View File

@ -54,6 +54,7 @@ M(mouse_right_release) \
M(mouse_wheel) \ M(mouse_wheel) \
M(mouse_move) \ M(mouse_move) \
M(animate) \ M(animate) \
M(view_activate) \
M(f1) \ M(f1) \
M(f2) \ M(f2) \
M(f3) \ M(f3) \
@ -743,6 +744,7 @@ generate_remapping_code_and_data(){
bind_vanilla_keys(mappings, MDFR_NONE, write_character); bind_vanilla_keys(mappings, MDFR_NONE, write_character);
bind(mappings, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark); bind(mappings, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark);
bind(mappings, key_view_activate, MDFR_NONE, click_set_cursor_and_mark);
bind(mappings, key_mouse_left_release, MDFR_NONE, click_set_cursor); bind(mappings, key_mouse_left_release, MDFR_NONE, click_set_cursor);
bind(mappings, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton); bind(mappings, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton);
@ -892,6 +894,7 @@ generate_remapping_code_and_data(){
bind(mappings, key_page_down, MDFR_NONE, lister__move_down); bind(mappings, key_page_down, MDFR_NONE, lister__move_down);
bind(mappings, key_mouse_wheel , MDFR_NONE, lister__wheel_scroll); bind(mappings, key_mouse_wheel , MDFR_NONE, lister__wheel_scroll);
bind(mappings, key_mouse_left , MDFR_NONE, lister__mouse_press); bind(mappings, key_mouse_left , MDFR_NONE, lister__mouse_press);
bind(mappings, key_view_activate , MDFR_NONE, lister__mouse_press);
bind(mappings, key_mouse_left_release, MDFR_NONE, lister__mouse_release); bind(mappings, key_mouse_left_release, MDFR_NONE, lister__mouse_release);
bind(mappings, key_mouse_move, MDFR_NONE, lister__repaint); bind(mappings, key_mouse_move, MDFR_NONE, lister__repaint);
bind(mappings, key_animate , MDFR_NONE, lister__repaint); bind(mappings, key_animate , MDFR_NONE, lister__repaint);
@ -964,6 +967,7 @@ generate_remapping_code_and_data(){
bind_vanilla_keys(mappings, MDFR_ALT, write_character); bind_vanilla_keys(mappings, MDFR_ALT, write_character);
bind(mappings, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark); bind(mappings, key_mouse_left, MDFR_NONE, click_set_cursor_and_mark);
bind(mappings, key_view_activate, MDFR_NONE, click_set_cursor_and_mark);
bind(mappings, key_mouse_left_release, MDFR_NONE, click_set_cursor); bind(mappings, key_mouse_left_release, MDFR_NONE, click_set_cursor);
bind(mappings, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton); bind(mappings, key_mouse_move, MDFR_NONE, click_set_cursor_if_lbutton);
@ -1111,6 +1115,7 @@ generate_remapping_code_and_data(){
bind(mappings, key_page_down, MDFR_NONE, lister__move_down); bind(mappings, key_page_down, MDFR_NONE, lister__move_down);
bind(mappings, key_mouse_wheel , MDFR_NONE, lister__wheel_scroll); bind(mappings, key_mouse_wheel , MDFR_NONE, lister__wheel_scroll);
bind(mappings, key_mouse_left , MDFR_NONE, lister__mouse_press); bind(mappings, key_mouse_left , MDFR_NONE, lister__mouse_press);
bind(mappings, key_view_activate , MDFR_NONE, click_set_cursor_and_mark);
bind(mappings, key_mouse_left_release, MDFR_NONE, lister__mouse_release); bind(mappings, key_mouse_left_release, MDFR_NONE, lister__mouse_release);
bind(mappings, key_mouse_move, MDFR_NONE, lister__repaint); bind(mappings, key_mouse_move, MDFR_NONE, lister__repaint);
bind(mappings, key_animate , MDFR_NONE, lister__repaint); bind(mappings, key_animate , MDFR_NONE, lister__repaint);