Fix inputs and add methods
This commit is contained in:
+6
-31
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user