|
|
@ -1248,7 +1248,7 @@ void ged_move_cursor_relative(Ged* a, Isz delta_y, Isz delta_x) { |
|
|
|
a->is_draw_dirty = true; |
|
|
|
} |
|
|
|
|
|
|
|
Usz guarded_selection_axis_resize(Usz x, int delta) { |
|
|
|
Usz guarded_selection_axis_resize(Usz x, Isz delta) { |
|
|
|
if (delta < 0) { |
|
|
|
if (delta > INT_MIN && (Usz)(-delta) < x) { |
|
|
|
x -= (Usz)(-delta); |
|
|
@ -1259,7 +1259,7 @@ Usz guarded_selection_axis_resize(Usz x, int delta) { |
|
|
|
return x; |
|
|
|
} |
|
|
|
|
|
|
|
void ged_modify_selection_size(Ged* a, int delta_y, int delta_x) { |
|
|
|
void ged_modify_selection_size(Ged* a, Isz delta_y, Isz delta_x) { |
|
|
|
Usz cur_h = a->ged_cursor.h; |
|
|
|
Usz cur_w = a->ged_cursor.w; |
|
|
|
Usz new_h = guarded_selection_axis_resize(cur_h, delta_y); |
|
|
@ -1278,39 +1278,40 @@ typedef enum { |
|
|
|
Ged_dir_right, |
|
|
|
} Ged_dir; |
|
|
|
|
|
|
|
void ged_dir_input(Ged* a, Ged_dir dir) { |
|
|
|
void ged_dir_input(Ged* a, Ged_dir dir, Isz step_length) { |
|
|
|
switch (a->input_mode) { |
|
|
|
case Ged_input_mode_normal: |
|
|
|
case Ged_input_mode_append: |
|
|
|
case Ged_input_mode_piano: |
|
|
|
switch (dir) { |
|
|
|
case Ged_dir_up: |
|
|
|
ged_move_cursor_relative(a, -1, 0); |
|
|
|
ged_move_cursor_relative(a, -step_length, 0); |
|
|
|
break; |
|
|
|
case Ged_dir_down: |
|
|
|
ged_move_cursor_relative(a, 1, 0); |
|
|
|
ged_move_cursor_relative(a, step_length, 0); |
|
|
|
break; |
|
|
|
case Ged_dir_left: |
|
|
|
ged_move_cursor_relative(a, 0, -1); |
|
|
|
ged_move_cursor_relative(a, 0, -step_length); |
|
|
|
break; |
|
|
|
case Ged_dir_right: |
|
|
|
ged_move_cursor_relative(a, 0, 1); |
|
|
|
ged_move_cursor_relative(a, 0, step_length); |
|
|
|
break; |
|
|
|
} |
|
|
|
break; |
|
|
|
case Ged_input_mode_selresize: |
|
|
|
// AtteJensen: This code is never reached, or?
|
|
|
|
switch (dir) { |
|
|
|
case Ged_dir_up: |
|
|
|
ged_modify_selection_size(a, -1, 0); |
|
|
|
ged_modify_selection_size(a, -step_length, 0); |
|
|
|
break; |
|
|
|
case Ged_dir_down: |
|
|
|
ged_modify_selection_size(a, 1, 0); |
|
|
|
ged_modify_selection_size(a, step_length, 0); |
|
|
|
break; |
|
|
|
case Ged_dir_left: |
|
|
|
ged_modify_selection_size(a, 0, -1); |
|
|
|
ged_modify_selection_size(a, 0, -step_length); |
|
|
|
break; |
|
|
|
case Ged_dir_right: |
|
|
|
ged_modify_selection_size(a, 0, 1); |
|
|
|
ged_modify_selection_size(a, 0, step_length); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
@ -2335,21 +2336,21 @@ int main(int argc, char** argv) { |
|
|
|
switch (key) { |
|
|
|
case KEY_UP: |
|
|
|
case CTRL_PLUS('k'): |
|
|
|
ged_dir_input(&ged_state, Ged_dir_up); |
|
|
|
ged_dir_input(&ged_state, Ged_dir_up, 1); |
|
|
|
break; |
|
|
|
case CTRL_PLUS('j'): |
|
|
|
case KEY_DOWN: |
|
|
|
ged_dir_input(&ged_state, Ged_dir_down); |
|
|
|
ged_dir_input(&ged_state, Ged_dir_down, 1); |
|
|
|
break; |
|
|
|
case 127: // backspace in terminal.app, apparently
|
|
|
|
case KEY_BACKSPACE: |
|
|
|
case CTRL_PLUS('h'): |
|
|
|
case KEY_LEFT: |
|
|
|
ged_dir_input(&ged_state, Ged_dir_left); |
|
|
|
ged_dir_input(&ged_state, Ged_dir_left, 1); |
|
|
|
break; |
|
|
|
case CTRL_PLUS('l'): |
|
|
|
case KEY_RIGHT: |
|
|
|
ged_dir_input(&ged_state, Ged_dir_right); |
|
|
|
ged_dir_input(&ged_state, Ged_dir_right, 1); |
|
|
|
break; |
|
|
|
case CTRL_PLUS('z'): |
|
|
|
case CTRL_PLUS('u'): |
|
|
@ -2435,11 +2436,37 @@ int main(int argc, char** argv) { |
|
|
|
case 402: // shift-right
|
|
|
|
ged_modify_selection_size(&ged_state, 0, 1); |
|
|
|
break; |
|
|
|
case 567: // shift-control-up
|
|
|
|
ged_modify_selection_size(&ged_state, -(Isz)ged_state.ruler_spacing_y, 0); |
|
|
|
break; |
|
|
|
case 526: // shift-control-down
|
|
|
|
ged_modify_selection_size(&ged_state, (Isz)ged_state.ruler_spacing_y, 0); |
|
|
|
break; |
|
|
|
case 546: // shift-control-left
|
|
|
|
ged_modify_selection_size(&ged_state, 0, -(Isz)ged_state.ruler_spacing_x); |
|
|
|
break; |
|
|
|
case 561: // shift-control-right
|
|
|
|
ged_modify_selection_size(&ged_state, 0, (Isz)ged_state.ruler_spacing_x); |
|
|
|
break; |
|
|
|
|
|
|
|
case 330: // delete?
|
|
|
|
ged_input_character(&ged_state, '.'); |
|
|
|
break; |
|
|
|
|
|
|
|
// Jump on control-arrow
|
|
|
|
case 566: //control-up
|
|
|
|
ged_dir_input(&ged_state, Ged_dir_up, (Isz)ged_state.ruler_spacing_y); |
|
|
|
break; |
|
|
|
case 525: //control-down
|
|
|
|
ged_dir_input(&ged_state, Ged_dir_down, (Isz)ged_state.ruler_spacing_y); |
|
|
|
break; |
|
|
|
case 545: //control-left
|
|
|
|
ged_dir_input(&ged_state, Ged_dir_left, (Isz)ged_state.ruler_spacing_x); |
|
|
|
break; |
|
|
|
case 560: //control-right
|
|
|
|
ged_dir_input(&ged_state, Ged_dir_right, (Isz)ged_state.ruler_spacing_x); |
|
|
|
break; |
|
|
|
|
|
|
|
case CTRL_PLUS('d'): |
|
|
|
case KEY_F(1): |
|
|
|
push_main_menu(); |
|
|
|