Add forward delete to TextFieldElement

This commit is contained in:
MrLetsplay 2023-10-17 21:31:27 +02:00
parent bbee789593
commit 638c716507
Signed by: mr
SSH Key Fingerprint: SHA256:92jBH80vpXyaZHjaIl47pjRq+Yt7XGTArqQg1V7hSqg
3 changed files with 25 additions and 8 deletions

View File

@ -1,8 +1,10 @@
#include "input.h" #include "input.h"
#include <GLFW/glfw3.h>
#include <iostream> #include <iostream>
#include <map> #include <map>
#include "constants.h"
#include "internal.h" #include "internal.h"
#include "internal/input.h" #include "internal/input.h"
@ -31,8 +33,15 @@ void onKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mo
return; return;
} }
if(key == GLFW_KEY_BACKSPACE && (action == GLFW_PRESS || action == GLFW_REPEAT)) { if(action == GLFW_PRESS || action == GLFW_REPEAT) {
kekData.input->activeKeyboardCapture.charCallback(KeyCharEvent{window, KEK_INPUT_DELETE}); switch(key) {
case GLFW_KEY_BACKSPACE:
kekData.input->activeKeyboardCapture.charCallback(KeyCharEvent{window, KEK_INPUT_DELETE});
break;
case GLFW_KEY_DELETE:
kekData.input->activeKeyboardCapture.charCallback(KeyCharEvent{window, KEK_INPUT_DELETE_FORWARD});
break;
}
} }
kekData.input->activeKeyboardCapture.keyCallback(KeyEvent{window, key, scancode, action, mods}); kekData.input->activeKeyboardCapture.keyCallback(KeyEvent{window, key, scancode, action, mods});

View File

@ -266,11 +266,19 @@ void TextFieldElement::focusEnter() {
TextFieldElement *_this = (TextFieldElement *) data; TextFieldElement *_this = (TextFieldElement *) data;
std::u32string str = Unicode::convertStdToU32(_this->text); std::u32string str = Unicode::convertStdToU32(_this->text);
if(event.codepoint == KEK_INPUT_DELETE) { switch(event.codepoint) {
if(_this->cursorPos == str.length()) return; case KEK_INPUT_DELETE:
str = str.erase(str.length() - _this->cursorPos - 1, 1); if(_this->cursorPos == str.length()) return;
} else { str = str.erase(str.length() - _this->cursorPos - 1, 1);
str.insert(str.length() - _this->cursorPos, 1, event.codepoint); break;
case KEK_INPUT_DELETE_FORWARD:
if(_this->cursorPos == 0) return;
str = str.erase(str.length() - _this->cursorPos, 1);
_this->cursorPos--;
break;
default:
str.insert(str.length() - _this->cursorPos, 1, event.codepoint);
break;
} }
_this->lastCharTyped = glfwGetTime(); _this->lastCharTyped = glfwGetTime();
@ -337,5 +345,4 @@ void TextFieldElement::setText(std::string text) {
this->cursorPos = 0; this->cursorPos = 0;
updateText(Unicode::convertStdToU32(text)); updateText(Unicode::convertStdToU32(text));
} }
} }

View File

@ -42,6 +42,7 @@
#define KEK_DEFAULT_FONT_SIZE_PIXELS 24 #define KEK_DEFAULT_FONT_SIZE_PIXELS 24
#define KEK_INPUT_DELETE -1u #define KEK_INPUT_DELETE -1u
#define KEK_INPUT_DELETE_FORWARD -2u
#define KEK_PLAYER_HEIGHT 2 #define KEK_PLAYER_HEIGHT 2
#define KEK_PLAYER_RADIUS 0.5f #define KEK_PLAYER_RADIUS 0.5f