// // Label - Handles Ctrl combination key presses. // static void EZ_label_CtrlComboKeyDown(ez_label_t *label, int key) { char c = (char)key; switch (c) { case 'c' : case 'C' : { if (LABEL_TEXT_SELECTED(label)) { // CTRL + C (Copy to clipboard). int selected_len = EZ_label_GetSelectedTextSize(label) + 1; char *selected_text = (char *)Q_malloc(selected_len * sizeof(char)); EZ_label_GetSelectedText(label, selected_text, selected_len); CopyToClipboard(selected_text); break; } } case 'v' : case 'V' : { // CTRL + V (Paste from clipboard). char *pasted_text = ReadFromClipboard(); EZ_label_AppendText(label, label->caret_pos.index, pasted_text); break; } case 'a' : case 'A' : { // CTRL + A (Select all). label->select_start = 0; label->select_end = label->text_length; label->int_flags |= label_selecting; EZ_label_SetCaretPosition(label, label->select_end); label->int_flags &= ~label_selecting; break; } default : { break; } } }
void CEditBox_Key(CEditBox *e, int key) { char c; switch (key) { case K_LEFTARROW: e->pos--; break; case K_RIGHTARROW: e->pos++; break; case K_HOME: e->pos = 0; break; case K_END: e->pos = strlen(e->text); break; case K_DEL: if (e->pos < strlen(e->text)) memmove(e->text + e->pos, e->text + e->pos + 1, strlen(e->text + e->pos + 1) + 1); break; case K_BACKSPACE: if (e->pos > 0) { memmove(e->text + e->pos - 1, e->text + e->pos, strlen(e->text + e->pos) + 1); e->pos --; } break; case 'v': case 'V': if (isCtrlDown()) { int len; char *clip = ReadFromClipboard(); len = min(strlen(clip), e->max - strlen(e->text)); if (len > 0) { memmove(e->text + e->pos + len, e->text + e->pos, strlen(e->text + e->pos) + 1); memcpy(e->text + e->pos, clip, len); e->pos += len; } } break; } e->pos = max(e->pos, 0); e->pos = min(e->pos, strlen(e->text)); if (!isCtrlDown() && key >= ' ' && key <= '}' && strlen(e->text) < e->max) { memmove(e->text + e->pos + 1, e->text + e->pos, strlen(e->text + e->pos) + 1); c = key; if (isShiftDown() && c >= 'a' && c <= 'z') c = toupper(c); e->text[e->pos] = c; e->pos++; } }