| 142 | } |
| 143 | |
| 144 | RichTextUserInput::Changes RichTextUserInput::input_key_callback(InputManager& input, const InputManager::KeyCallbackArgs& key) { |
| 145 | std::optional<RichText::TextStyleModifier::ModifierMap> modMapOpt = shared_ptr_to_opt(modMap); |
| 146 | |
| 147 | Changes toRet; |
| 148 | |
| 149 | if(key.down) { |
| 150 | auto oldCursor = *cursor; |
| 151 | |
| 152 | switch(key.key) { |
| 153 | case InputManager::KEY_GENERIC_UP: |
| 154 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::UP, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 155 | break; |
| 156 | case InputManager::KEY_GENERIC_DOWN: |
| 157 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::DOWN, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 158 | break; |
| 159 | case InputManager::KEY_GENERIC_LEFT: |
| 160 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::LEFT, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 161 | break; |
| 162 | case InputManager::KEY_GENERIC_RIGHT: |
| 163 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::RIGHT, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 164 | break; |
| 165 | case InputManager::KEY_TEXT_BACKSPACE: |
| 166 | do_textbox_operation_with_undo([&] { |
| 167 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::BACKSPACE, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 168 | }); |
| 169 | toRet.textEdited = true; |
| 170 | break; |
| 171 | case InputManager::KEY_TEXT_DELETE: |
| 172 | do_textbox_operation_with_undo([&] { |
| 173 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::DEL, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 174 | }); |
| 175 | toRet.textEdited = true; |
| 176 | break; |
| 177 | case InputManager::KEY_TEXT_HOME: |
| 178 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::HOME, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 179 | break; |
| 180 | case InputManager::KEY_TEXT_END: |
| 181 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::END, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 182 | break; |
| 183 | case InputManager::KEY_TEXT_COPY: |
| 184 | input.set_clipboard_plain_and_richtext_pair(textBox->process_copy(*cursor)); |
| 185 | break; |
| 186 | case InputManager::KEY_TEXT_CUT: |
| 187 | do_textbox_operation_with_undo([&] { |
| 188 | input.set_clipboard_plain_and_richtext_pair(textBox->process_cut(*cursor)); |
| 189 | }); |
| 190 | toRet.textEdited = true; |
| 191 | break; |
| 192 | case InputManager::KEY_TEXT_PASTE: |
| 193 | input.call_paste(CustomEvents::PasteEvent::DataType::TEXT); |
| 194 | break; |
| 195 | case InputManager::KEY_TEXT_SELECTALL: |
| 196 | textBox->process_key_input(*cursor, RichText::TextBox::InputKey::SELECT_ALL, input.ctrl_or_meta_held(), input.key(InputManager::KEY_GENERIC_LSHIFT).held, modMapOpt); |
| 197 | break; |
| 198 | case InputManager::KEY_TEXT_UNDO: |
| 199 | textboxUndo.undo(); |
| 200 | toRet.textEdited = true; |
| 201 | break; |
nothing calls this directly
no test coverage detected