/** Handle Ctrl-key combination. */ static void key_handle_ctrl(kbd_event_t const *ev) { switch (ev->key) { case KC_Q: done = true; break; case KC_S: if (doc.file_name != NULL) file_save(doc.file_name); else file_save_as(); break; case KC_E: file_save_as(); break; case KC_C: selection_copy(); break; case KC_V: selection_delete(); insert_clipboard_data(); pane.rflags |= REDRAW_TEXT; caret_update(); break; case KC_X: selection_copy(); selection_delete(); pane.rflags |= REDRAW_TEXT; caret_update(); break; case KC_A: selection_sel_all(); break; default: break; } }
void RichTextLabel::_input_event(InputEvent p_event) { switch(p_event.type) { case InputEvent::MOUSE_BUTTON: { if (main->first_invalid_line<main->lines.size()) return; const InputEventMouseButton& b = p_event.mouse_button; if (b.button_index==BUTTON_LEFT) { if (true) { if (b.pressed && !b.doubleclick) { int line=0; Item *item=NULL; bool outside; _find_click(main,Point2i(b.x,b.y),&item,&line,&outside); if (item) { Variant meta; if (!outside && _find_meta(item,&meta)) { //meta clicked emit_signal("meta_clicked",meta); } else if (selection.enabled) { selection.click=item; selection.click_char=line; } } } else if (!b.pressed) { selection.click=NULL; } } } if (b.button_index==BUTTON_WHEEL_UP) { if (scroll_active) vscroll->set_val( vscroll->get_val()-vscroll->get_page()/8 ); } if (b.button_index==BUTTON_WHEEL_DOWN) { if (scroll_active) vscroll->set_val( vscroll->get_val()+vscroll->get_page()/8 ); } } break; case InputEvent::KEY: { const InputEventKey &k=p_event.key; if (k.pressed && !k.mod.alt && !k.mod.shift && !k.mod.meta) { bool handled=true; switch(k.scancode) { case KEY_PAGEUP: { if (vscroll->is_visible()) vscroll->set_val( vscroll->get_val() - vscroll->get_page() ); } break; case KEY_PAGEDOWN: { if (vscroll->is_visible()) vscroll->set_val( vscroll->get_val() + vscroll->get_page() ); } break; case KEY_UP: { if (vscroll->is_visible()) vscroll->set_val( vscroll->get_val() - get_font("normal_font")->get_height() ); } break; case KEY_DOWN: { if (vscroll->is_visible()) vscroll->set_val( vscroll->get_val() + get_font("normal_font")->get_height() ); } break; case KEY_HOME: { if (vscroll->is_visible()) vscroll->set_val( 0 ); } break; case KEY_END: { if (vscroll->is_visible()) vscroll->set_val( vscroll->get_max() ); } break; case KEY_INSERT: case KEY_C: { if (k.mod.command) { selection_copy(); } else { handled=false; } } break; default: handled=false; } if (handled) accept_event(); } } break; case InputEvent::MOUSE_MOTION: { if (main->first_invalid_line<main->lines.size()) return; const InputEventMouseMotion& m = p_event.mouse_motion; if (selection.click) { int line=0; Item *item=NULL; _find_click(main,Point2i(m.x,m.y),&item,&line); if (!item) return; // do not update selection.from=selection.click; selection.from_char=selection.click_char; selection.to=item; selection.to_char=line; bool swap=false; if (selection.from->index > selection.to->index ) swap=true; else if (selection.from->index == selection.to->index) { if (selection.from_char > selection.to_char) swap=true; else if (selection.from_char == selection.to_char) { selection.active=false; return; } } if (swap) { SWAP( selection.from, selection.to ); SWAP( selection.from_char, selection.to_char ); } selection.active=true; update(); } } break; } }