mouse button release events

master
Allen Webster 2016-09-09 13:14:38 -04:00
parent 3de8779d53
commit 602d41be70
7 changed files with 37 additions and 21 deletions

File diff suppressed because one or more lines are too long

View File

@ -342,6 +342,11 @@ default_keys(Bind_Helper *context){
bind(context, key_mouse_left, MDFR_NONE, click_set_cursor); bind(context, key_mouse_left, MDFR_NONE, click_set_cursor);
bind(context, key_mouse_right, MDFR_NONE, click_set_mark); bind(context, key_mouse_right, MDFR_NONE, click_set_mark);
// NOTE(allen|a4.0.11): You can now bind left and right mouse
// button releases. Modifiers do work so control+click shift+click
// etc can now have special meanings.
bind(context, key_mouse_left_release, MDFR_NONE, click_set_mark);
bind(context, key_left, MDFR_NONE, move_left); bind(context, key_left, MDFR_NONE, move_left);
bind(context, key_right, MDFR_NONE, move_right); bind(context, key_right, MDFR_NONE, move_right);
bind(context, key_del, MDFR_NONE, delete_char); bind(context, key_del, MDFR_NONE, delete_char);

View File

@ -13,6 +13,8 @@ key_page_down = 13,
key_esc = 14, key_esc = 14,
key_mouse_left = 15, key_mouse_left = 15,
key_mouse_right = 16, key_mouse_right = 16,
key_mouse_left_release = 17,
key_mouse_right_release = 18,
key_f1 = 127, key_f1 = 127,
key_f2 = 128, key_f2 = 128,
key_f3 = 129, key_f3 = 129,
@ -48,6 +50,8 @@ case key_page_down: result = "page_down"; *size = sizeof("page_down")-1; break;
case key_esc: result = "esc"; *size = sizeof("esc")-1; break; case key_esc: result = "esc"; *size = sizeof("esc")-1; break;
case key_mouse_left: result = "mouse_left"; *size = sizeof("mouse_left")-1; break; case key_mouse_left: result = "mouse_left"; *size = sizeof("mouse_left")-1; break;
case key_mouse_right: result = "mouse_right"; *size = sizeof("mouse_right")-1; break; case key_mouse_right: result = "mouse_right"; *size = sizeof("mouse_right")-1; break;
case key_mouse_left_release: result = "mouse_left_release"; *size = sizeof("mouse_left_release")-1; break;
case key_mouse_right_release: result = "mouse_right_release"; *size = sizeof("mouse_right_release")-1; break;
case key_f1: result = "f1"; *size = sizeof("f1")-1; break; case key_f1: result = "f1"; *size = sizeof("f1")-1; break;
case key_f2: result = "f2"; *size = sizeof("f2")-1; break; case key_f2: result = "f2"; *size = sizeof("f2")-1; break;
case key_f3: result = "f3"; *size = sizeof("f3")-1; break; case key_f3: result = "f3"; *size = sizeof("f3")-1; break;

View File

@ -366,11 +366,9 @@ struct Key_Event_Data{
char modifiers[MDFR_INDEX_COUNT]; char modifiers[MDFR_INDEX_COUNT];
}; };
/* DOC( /* DOC(Mouse_State describes an entire mouse state complete with the
Mouse_State describes an entire mouse state complete with the position, position, left and right button states, the wheel state, and whether
left and right button states, the wheel state, and whether or not the or not the mouse if in the window.) */
mouse if in the window.
) */
struct Mouse_State{ struct Mouse_State{
/* DOC(This field indicates that the left button is held.) */ /* DOC(This field indicates that the left button is held.) */
char l; char l;

27
4ed.cpp
View File

@ -1783,10 +1783,7 @@ App_Step_Sig(app_step){
} }
Key_Event_Data mouse_event = {0}; Key_Event_Data mouse_event = {0};
if (input->mouse.press_l || memcpy(mouse_event.modifiers, input->keys.modifiers, sizeof(input->keys.modifiers));
input->mouse.press_r){
memcpy(mouse_event.modifiers, input->keys.modifiers, sizeof(input->keys.modifiers));
}
if (input->mouse.press_l){ if (input->mouse.press_l){
mouse_event.keycode = key_mouse_left; mouse_event.keycode = key_mouse_left;
@ -1798,6 +1795,16 @@ App_Step_Sig(app_step){
key_summary.keys[key_summary.count++] = mouse_event; key_summary.keys[key_summary.count++] = mouse_event;
} }
if (input->mouse.release_l){
mouse_event.keycode = key_mouse_left_release;
key_summary.keys[key_summary.count++] = mouse_event;
}
if (input->mouse.release_r){
mouse_event.keycode = key_mouse_right_release;
key_summary.keys[key_summary.count++] = mouse_event;
}
input->mouse.wheel = -input->mouse.wheel; input->mouse.wheel = -input->mouse.wheel;
} }
@ -2436,8 +2443,7 @@ App_Step_Sig(app_step){
if (record->consumed && record->consumer[0] != 0){ if (record->consumed && record->consumer[0] != 0){
Debug_Input_Event *event = debug->input_events; Debug_Input_Event *event = debug->input_events;
for (i32 i = 0; i < count; ++i, ++event){ for (i32 i = 0; i < count; ++i, ++event){
if (event->key == key_mouse_left && if (event->key == key_mouse_left && event->consumer[0] == 0){
event->consumer[0] == 0){
memcpy(event->consumer, record->consumer, sizeof(record->consumer)); memcpy(event->consumer, record->consumer, sizeof(record->consumer));
} }
} }
@ -2447,8 +2453,7 @@ App_Step_Sig(app_step){
if (record->consumed && record->consumer[0] != 0){ if (record->consumed && record->consumer[0] != 0){
Debug_Input_Event *event = debug->input_events; Debug_Input_Event *event = debug->input_events;
for (i32 i = 0; i < count; ++i, ++event){ for (i32 i = 0; i < count; ++i, ++event){
if (event->key == key_mouse_right && if (event->key == key_mouse_right && event->consumer[0] == 0){
event->consumer[0] == 0){
memcpy(event->consumer, record->consumer, sizeof(record->consumer)); memcpy(event->consumer, record->consumer, sizeof(record->consumer));
} }
} }
@ -2458,8 +2463,7 @@ App_Step_Sig(app_step){
if (record->consumed && record->consumer[0] != 0){ if (record->consumed && record->consumer[0] != 0){
Debug_Input_Event *event = debug->input_events; Debug_Input_Event *event = debug->input_events;
for (i32 i = 0; i < count; ++i, ++event){ for (i32 i = 0; i < count; ++i, ++event){
if (event->key == key_esc && if (event->key == key_esc && event->consumer[0] == 0){
event->consumer[0] == 0){
memcpy(event->consumer, record->consumer, sizeof(record->consumer)); memcpy(event->consumer, record->consumer, sizeof(record->consumer));
} }
} }
@ -2491,6 +2495,9 @@ App_Step_Sig(app_step){
" and fullscreen can be toggled with <control pageup>.\n" " and fullscreen can be toggled with <control pageup>.\n"
" (This sometimes causes artifacts on the Windows task bar)\n" " (This sometimes causes artifacts on the Windows task bar)\n"
"-<alt f4> to exit\n" "-<alt f4> to exit\n"
"-hook on exit for the customization system\n"
"-tokens now exposed in customization system\n"
"-mouse release events in customization system\n"
"\n" "\n"
"New in alpha 4.0.10:\n" "New in alpha 4.0.10:\n"
"-<control F> list all locations of a string across all open buffers\n" "-<control F> list all locations of a string across all open buffers\n"

View File

@ -89,6 +89,8 @@ char *keys_that_need_codes[] = {
"mouse_left", "mouse_left",
"mouse_right", "mouse_right",
"mouse_left_release",
"mouse_right_release",
"f1", "f1",
"f2", "f2",

View File

@ -73,6 +73,7 @@
; [X] problem with end of line comments ; [X] problem with end of line comments
; [X] paths with parens in them ; [X] paths with parens in them
; [X] killing compilation panel changes active panel ; [X] killing compilation panel changes active panel
; [X] make panel resizing not whacky with child panels
; ;
; [] indication on failure to save ; [] indication on failure to save
; [] history is broken, revist the entire system ; [] history is broken, revist the entire system
@ -86,8 +87,6 @@
; BEFORE I SHIP ; BEFORE I SHIP
; ;
; [X] make panel resizing not whacky with child panels
; [X] case insensitive interactive switch buffer
; [X] tokens in the custom API ; [X] tokens in the custom API
; [X] token seeking on custom side ; [X] token seeking on custom side
; [X] auto indent on the custom side ; [X] auto indent on the custom side
@ -96,7 +95,6 @@
; [] clean up and comment the auto indent code to allow for customizations ; [] clean up and comment the auto indent code to allow for customizations
; [] more built in options for auto indenting ; [] more built in options for auto indenting
; [] expose dirty flags ; [] expose dirty flags
; [] mouse down/up distinction
; [] occasionally missing the (!) mark on files on windows ; [] occasionally missing the (!) mark on files on windows
; [] scroll down on compilation buffer durring compilation ; [] scroll down on compilation buffer durring compilation
; [] why are command line files not loading any more? ; [] why are command line files not loading any more?
@ -143,6 +141,8 @@
; [X] new file ; [X] new file
; [X] hook on exit ; [X] hook on exit
; [X] file out of sync ; [X] file out of sync
; [X] mouse down/up distinction
; [X] case insensitive interactive switch buffer
; ;
; [] binary buffers ; [] binary buffers