veandco / go-sdl2

SDL2 binding for Go
https://godoc.org/github.com/veandco/go-sdl2
BSD 3-Clause "New" or "Revised" License
2.17k stars 219 forks source link

No way to get enter key event when using sdl.WaitEvent() #575

Open Mariownyou opened 11 months ago

Mariownyou commented 11 months ago

Go version: Go-SDL2 version: SDL2 version: OS: mac Architecture: m1


for running {
    sdl.WaitEvent()
    // DrawMultilineText(text, surface, popup)

    RenderText(text, surface)
    window.UpdateSurface()

    for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
        switch event := event.(type) {
        case *sdl.KeyboardEvent:
            fmt.Println("Keyboard event") // does not work when waiting for events
            if event.Type == sdl.KEYDOWN {
                fmt.Println("Key pressed:", event.Keysym.Sym, text)
            }
        case *sdl.TextInputEvent:
            fmt.Println("Text input event", event.GetText()) // does not work when I don't wait for events but works when after sdl.WaitEvent()
        case *sdl.QuitEvent:
            running = false
        default:
            fmt.Println("Event type: ", event.GetType(), event) // does not work on Enter, when waiting for events
        }
    }

    sdl.Delay(delay)
}

Keyboard events such as Enter or Escape works fine when I don't wait for event. But if i use wait event, I can catch only text input events. moreover, text input events does not appear when I don't use wait for event. @veeableful

veeableful commented 11 months ago

Hi @Mariownyou, since you called sdl.WaitEvent() you can use the event returned from the function and check whether it is a KeyboardEvent for the Enter or Escape, using a switch case similar to the one used for sdl.PollEvent().