Fix inputs and add methods

This commit is contained in:
2026-05-07 13:55:02 +01:00
parent a77f75dcf4
commit 0f693a5de0
12 changed files with 500 additions and 93 deletions
+6 -31
View File
@@ -15,7 +15,7 @@ Window::Window(Vec2<float> size, const char *title) {
compute_transform();
text_input_active = false;
SDL_StartTextInput(window);
white_tex = SDL_CreateTexture(
renderer,
@@ -370,22 +370,17 @@ bool Window::poll(Event &event) {
case SDL_EVENT_KEY_DOWN:
event.type = Event::KEY_DOWN;
event.key.key = sdl_event.key.scancode;
event.key.key = (Key)sdl_event.key.scancode;
break;
case SDL_EVENT_KEY_UP:
event.type = Event::KEY_UP;
event.key.key = sdl_event.key.scancode;
event.key.key = (Key)sdl_event.key.scancode;
break;
case SDL_EVENT_TEXT_INPUT:
if (!text_input_active)
return false;
event.type = Event::TEXT_INPUT;
event.text_input.length = strlen(sdl_event.text.text);
event.text_input.text = (char *)malloc(event.text_input.length + 1);
strcpy(event.text_input.text, sdl_event.text.text);
event.text_input.text[event.text_input.length] = '\0';
event.text_input = new std::string(sdl_event.text.text);
break;
case SDL_EVENT_WINDOW_MOUSE_LEAVE:
@@ -394,7 +389,7 @@ bool Window::poll(Event &event) {
case SDL_EVENT_MOUSE_BUTTON_DOWN: {
event.type = Event::MOUSE_BUTTON_DOWN;
event.mouse_button.button = sdl_event.button.button;
event.mouse_button.button = (Key)(sdl_event.button.button + 512);
Vec2<float> virtual_position;
if (mouse_in_window({sdl_event.button.x, sdl_event.button.y}, virtual_position))
event.mouse_button.position = virtual_position;
@@ -404,7 +399,7 @@ bool Window::poll(Event &event) {
case SDL_EVENT_MOUSE_BUTTON_UP: {
event.type = Event::MOUSE_BUTTON_UP;
event.mouse_button.button = sdl_event.button.button;
event.mouse_button.button = (Key)(sdl_event.button.button + 512);
Vec2<float> virtual_position;
if (mouse_in_window({sdl_event.button.x, sdl_event.button.y}, virtual_position))
event.mouse_button.position = virtual_position;
@@ -444,26 +439,6 @@ bool Window::poll(Event &event) {
return false;
}
void Window::consume(Event &event) {
if (event.type == Event::TEXT_INPUT) {
free(event.text_input.text);
event.text_input.text = nullptr;
event.text_input.length = 0;
}
event.type = Event::NONE;
}
void Window::start_text_input() {
text_input_active = true;
SDL_StartTextInput(window);
}
void Window::stop_text_input() {
text_input_active = false;
SDL_StopTextInput(window);
}
const char *Window::paste() {
const char *clipboard_text = SDL_GetClipboardText();
if (clipboard_text == nullptr) {