+ if(selection_active)
+ erase_selection(true);
+ else if(edit_pos>0)
+ {
+ unsigned start_pos = text.move_offset(edit_pos, -1);
+ erase(start_pos, edit_pos-start_pos);
+ }
+ }
+ else if(key==Input::KEY_DELETE)
+ {
+ if(selection_active)
+ erase_selection(true);
+ else
+ {
+ unsigned end_pos = text.move_offset(edit_pos, 1);
+ erase(edit_pos, end_pos-edit_pos);
+ }
+ }
+ else if(key==Input::KEY_ENTER && multiline)
+ insert(edit_pos, "\n");
+ else if(key==Input::KEY_END)
+ {
+ unsigned row, col;
+ text.offset_to_coords(edit_pos, row, col);
+ set_edit_position(text.coords_to_offset(row, text.get_line_length(row)), mod==MOD_SHIFT);
+ }
+ else if(key==Input::KEY_HOME)
+ {
+ unsigned row, col;
+ text.offset_to_coords(edit_pos, row, col);
+ set_edit_position(text.coords_to_offset(row, 0), mod==MOD_SHIFT);
+ }
+ else if(key==Input::KEY_PGUP)
+ {
+ unsigned row, col;
+ text.offset_to_coords(edit_pos, row, col);
+ set_edit_position(text.coords_to_offset((row<visible_rows ? 0 : row-visible_rows), col), mod==MOD_SHIFT);
+ }
+ else if(key==Input::KEY_PGDN)
+ {
+ unsigned row, col;
+ text.offset_to_coords(edit_pos, row, col);
+ set_edit_position(text.coords_to_offset(row+visible_rows, col), mod==MOD_SHIFT);
+ }
+ else if(key==Input::KEY_LEFT && mod==MOD_SHIFT)
+ move_edit_position(NAV_LEFT, true);
+ else if(key==Input::KEY_RIGHT && mod==MOD_SHIFT)
+ move_edit_position(NAV_RIGHT, true);
+ else if(key==Input::KEY_UP && mod==MOD_SHIFT && multiline)
+ move_edit_position(NAV_UP, true);
+ else if(key==Input::KEY_DOWN && mod==MOD_SHIFT && multiline)
+ move_edit_position(NAV_DOWN, true);
+ else
+ return false;