From 6ed91cb412a2d5a8a6ec1a853713e059a2fb307d Mon Sep 17 00:00:00 2001 From: Thomas Friedel Date: Wed, 9 May 2018 19:17:59 +0200 Subject: [PATCH] updated to go-sdl2 v0.3; also fixed key runes --- examples/sdl/sdl.go | 36 ++--- sdlcanvas/keynames.go | 324 +++++++++++++++++++++++++---------------- sdlcanvas/sdlcanvas.go | 62 ++++---- 3 files changed, 250 insertions(+), 172 deletions(-) diff --git a/examples/sdl/sdl.go b/examples/sdl/sdl.go index a6249ef..735162f 100644 --- a/examples/sdl/sdl.go +++ b/examples/sdl/sdl.go @@ -22,23 +22,23 @@ func main() { defer sdl.Quit() // the stencil size setting is required for the canvas to work - sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 0) - sdl.GL_SetAttribute(sdl.GL_STENCIL_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4) + sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_ALPHA_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 0) + sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4) // create window const title = "SDL Test" window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) if err != nil { // fallback in case multisample is not available - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0) window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) if err != nil { log.Fatalf("Error creating window: %v", err) @@ -47,7 +47,7 @@ func main() { defer window.Destroy() // create GL context - glContext, err := sdl.GL_CreateContext(window) + glContext, err := window.GLCreateContext() if err != nil { log.Fatalf("Error creating GL context: %v", err) } @@ -59,7 +59,7 @@ func main() { } // enable vsync and multisample (if available) - sdl.GL_SetSwapInterval(1) + sdl.GLSetSwapInterval(1) gl.Enable(gl.MULTISAMPLE) // load canvas GL assets @@ -72,7 +72,7 @@ func main() { cv := canvas.New(0, 0, 0, 0) for running := true; running; { - err := sdl.GL_MakeCurrent(window, glContext) + err := window.GLMakeCurrent(glContext) if err != nil { time.Sleep(10 * time.Millisecond) continue @@ -86,8 +86,8 @@ func main() { } switch e := event.(type) { - case *sdl.KeyDownEvent: - if e.Keysym.Scancode == sdl.SCANCODE_ESCAPE { + case *sdl.KeyboardEvent: + if e.Type == sdl.KEYDOWN && e.Keysym.Scancode == sdl.SCANCODE_ESCAPE { running = false } case *sdl.WindowEvent: @@ -99,13 +99,13 @@ func main() { // set canvas size ww, wh := window.GetSize() - cv.SetSize(ww, wh) + cv.SetSize(int(ww), int(wh)) // call the run function to do all the drawing run(cv, float64(ww), float64(wh)) // swap back and front buffer - sdl.GL_SwapWindow(window) + window.GLSwap() } } diff --git a/sdlcanvas/keynames.go b/sdlcanvas/keynames.go index 6f9707c..cdfe925 100644 --- a/sdlcanvas/keynames.go +++ b/sdlcanvas/keynames.go @@ -2,139 +2,215 @@ package sdlcanvas import "github.com/veandco/go-sdl2/sdl" -var keyMap [262]string +var keyNameMap [262]string +var keyRuneMap [262]rune func init() { - keyMap[sdl.SCANCODE_ESCAPE] = "Escape" - keyMap[sdl.SCANCODE_0] = "Digit0" - keyMap[sdl.SCANCODE_1] = "Digit1" - keyMap[sdl.SCANCODE_2] = "Digit2" - keyMap[sdl.SCANCODE_3] = "Digit3" - keyMap[sdl.SCANCODE_4] = "Digit4" - keyMap[sdl.SCANCODE_5] = "Digit5" - keyMap[sdl.SCANCODE_6] = "Digit6" - keyMap[sdl.SCANCODE_7] = "Digit7" - keyMap[sdl.SCANCODE_8] = "Digit8" - keyMap[sdl.SCANCODE_9] = "Digit9" - keyMap[sdl.SCANCODE_MINUS] = "Minus" - keyMap[sdl.SCANCODE_EQUALS] = "Equal" - keyMap[sdl.SCANCODE_BACKSPACE] = "Backspace" - keyMap[sdl.SCANCODE_TAB] = "Tab" - keyMap[sdl.SCANCODE_Q] = "KeyQ" - keyMap[sdl.SCANCODE_W] = "KeyW" - keyMap[sdl.SCANCODE_E] = "KeyE" - keyMap[sdl.SCANCODE_R] = "KeyR" - keyMap[sdl.SCANCODE_T] = "KeyT" - keyMap[sdl.SCANCODE_Y] = "KeyY" - keyMap[sdl.SCANCODE_U] = "KeyU" - keyMap[sdl.SCANCODE_I] = "KeyI" - keyMap[sdl.SCANCODE_O] = "KeyO" - keyMap[sdl.SCANCODE_P] = "KeyP" - keyMap[sdl.SCANCODE_LEFTBRACKET] = "BracketLeft" - keyMap[sdl.SCANCODE_RIGHTBRACKET] = "BracketRight" - keyMap[sdl.SCANCODE_RETURN] = "Enter" - keyMap[sdl.SCANCODE_LCTRL] = "ControlLeft" - keyMap[sdl.SCANCODE_A] = "KeyA" - keyMap[sdl.SCANCODE_S] = "KeyS" - keyMap[sdl.SCANCODE_D] = "KeyD" - keyMap[sdl.SCANCODE_F] = "KeyF" - keyMap[sdl.SCANCODE_G] = "KeyG" - keyMap[sdl.SCANCODE_H] = "KeyH" - keyMap[sdl.SCANCODE_J] = "KeyJ" - keyMap[sdl.SCANCODE_K] = "KeyK" - keyMap[sdl.SCANCODE_L] = "KeyL" - keyMap[sdl.SCANCODE_SEMICOLON] = "Semicolon" - keyMap[sdl.SCANCODE_APOSTROPHE] = "Quote" - keyMap[sdl.SCANCODE_GRAVE] = "Backquote" - keyMap[sdl.SCANCODE_LSHIFT] = "ShiftLeft" - keyMap[sdl.SCANCODE_BACKSLASH] = "Backslash" - keyMap[sdl.SCANCODE_Z] = "KeyZ" - keyMap[sdl.SCANCODE_X] = "KeyX" - keyMap[sdl.SCANCODE_C] = "KeyC" - keyMap[sdl.SCANCODE_V] = "KeyV" - keyMap[sdl.SCANCODE_B] = "KeyB" - keyMap[sdl.SCANCODE_N] = "KeyN" - keyMap[sdl.SCANCODE_M] = "KeyM" - keyMap[sdl.SCANCODE_COMMA] = "Comma" - keyMap[sdl.SCANCODE_PERIOD] = "Period" - keyMap[sdl.SCANCODE_SLASH] = "Slash" - keyMap[sdl.SCANCODE_RSHIFT] = "RightShift" - keyMap[sdl.SCANCODE_KP_MULTIPLY] = "NumpadMultiply" - keyMap[sdl.SCANCODE_LALT] = "AltLeft" - keyMap[sdl.SCANCODE_SPACE] = "Space" - keyMap[sdl.SCANCODE_CAPSLOCK] = "CapsLock" - keyMap[sdl.SCANCODE_F1] = "F1" - keyMap[sdl.SCANCODE_F2] = "F2" - keyMap[sdl.SCANCODE_F3] = "F3" - keyMap[sdl.SCANCODE_F4] = "F4" - keyMap[sdl.SCANCODE_F5] = "F5" - keyMap[sdl.SCANCODE_F6] = "F6" - keyMap[sdl.SCANCODE_F7] = "F7" - keyMap[sdl.SCANCODE_F8] = "F8" - keyMap[sdl.SCANCODE_F9] = "F9" - keyMap[sdl.SCANCODE_F10] = "F10" - keyMap[sdl.SCANCODE_PAUSE] = "Pause" - keyMap[sdl.SCANCODE_SCROLLLOCK] = "ScrollLock" - keyMap[sdl.SCANCODE_KP_7] = "Numpad7" - keyMap[sdl.SCANCODE_KP_8] = "Numpad8" - keyMap[sdl.SCANCODE_KP_9] = "Numpad9" - keyMap[sdl.SCANCODE_KP_MINUS] = "NumpadSubtract" - keyMap[sdl.SCANCODE_KP_4] = "Numpad4" - keyMap[sdl.SCANCODE_KP_5] = "Numpad5" - keyMap[sdl.SCANCODE_KP_6] = "Numpad6" - keyMap[sdl.SCANCODE_KP_PLUS] = "NumpadAdd" - keyMap[sdl.SCANCODE_KP_1] = "Numpad1" - keyMap[sdl.SCANCODE_KP_2] = "Numpad2" - keyMap[sdl.SCANCODE_KP_3] = "Numpad3" - keyMap[sdl.SCANCODE_KP_0] = "Numpad0" - keyMap[sdl.SCANCODE_KP_DECIMAL] = "NumpadDecimal" - keyMap[sdl.SCANCODE_PRINTSCREEN] = "PrintScreen" - keyMap[sdl.SCANCODE_NONUSBACKSLASH] = "IntlBackslash" - keyMap[sdl.SCANCODE_F11] = "F11" - keyMap[sdl.SCANCODE_F12] = "F12" - keyMap[sdl.SCANCODE_KP_EQUALS] = "NumpadEqual" - keyMap[sdl.SCANCODE_F13] = "F13" - keyMap[sdl.SCANCODE_F14] = "F14" - keyMap[sdl.SCANCODE_F15] = "F15" - keyMap[sdl.SCANCODE_F16] = "F16" - keyMap[sdl.SCANCODE_F17] = "F17" - keyMap[sdl.SCANCODE_F18] = "F18" - keyMap[sdl.SCANCODE_F19] = "F19" - keyMap[sdl.SCANCODE_UNDO] = "Undo" - keyMap[sdl.SCANCODE_PASTE] = "Paste" - keyMap[sdl.SCANCODE_AUDIOPREV] = "MediaTrackPrevious" - keyMap[sdl.SCANCODE_CUT] = "Cut" - keyMap[sdl.SCANCODE_COPY] = "Copy" - keyMap[sdl.SCANCODE_AUDIONEXT] = "MediaTrackNext" - keyMap[sdl.SCANCODE_KP_ENTER] = "NumpadEnter" - keyMap[sdl.SCANCODE_RCTRL] = "ControlRight" - keyMap[sdl.SCANCODE_MUTE] = "AudioVolumeMute" - keyMap[sdl.SCANCODE_AUDIOPLAY] = "MediaPlayPause" - keyMap[sdl.SCANCODE_AUDIOSTOP] = "MediaStop" - keyMap[sdl.SCANCODE_VOLUMEDOWN] = "AudioVolumeDown" - keyMap[sdl.SCANCODE_VOLUMEUP] = "AudioVolumeUp" - keyMap[sdl.SCANCODE_KP_DIVIDE] = "NumpadDivide" - keyMap[sdl.SCANCODE_RALT] = "AltRight" - keyMap[sdl.SCANCODE_HELP] = "Help" - keyMap[sdl.SCANCODE_HOME] = "Home" - keyMap[sdl.SCANCODE_UP] = "ArrowUp" - keyMap[sdl.SCANCODE_PAGEUP] = "PageUp" - keyMap[sdl.SCANCODE_LEFT] = "ArrowLeft" - keyMap[sdl.SCANCODE_RIGHT] = "ArrowRight" - keyMap[sdl.SCANCODE_END] = "End" - keyMap[sdl.SCANCODE_DOWN] = "ArrowDown" - keyMap[sdl.SCANCODE_INSERT] = "Insert" - keyMap[sdl.SCANCODE_DELETE] = "Delete" - keyMap[sdl.SCANCODE_APPLICATION] = "ContextMenu" + keyNameMap[sdl.SCANCODE_ESCAPE] = "Escape" + keyNameMap[sdl.SCANCODE_0] = "Digit0" + keyNameMap[sdl.SCANCODE_1] = "Digit1" + keyNameMap[sdl.SCANCODE_2] = "Digit2" + keyNameMap[sdl.SCANCODE_3] = "Digit3" + keyNameMap[sdl.SCANCODE_4] = "Digit4" + keyNameMap[sdl.SCANCODE_5] = "Digit5" + keyNameMap[sdl.SCANCODE_6] = "Digit6" + keyNameMap[sdl.SCANCODE_7] = "Digit7" + keyNameMap[sdl.SCANCODE_8] = "Digit8" + keyNameMap[sdl.SCANCODE_9] = "Digit9" + keyNameMap[sdl.SCANCODE_MINUS] = "Minus" + keyNameMap[sdl.SCANCODE_EQUALS] = "Equal" + keyNameMap[sdl.SCANCODE_BACKSPACE] = "Backspace" + keyNameMap[sdl.SCANCODE_TAB] = "Tab" + keyNameMap[sdl.SCANCODE_Q] = "KeyQ" + keyNameMap[sdl.SCANCODE_W] = "KeyW" + keyNameMap[sdl.SCANCODE_E] = "KeyE" + keyNameMap[sdl.SCANCODE_R] = "KeyR" + keyNameMap[sdl.SCANCODE_T] = "KeyT" + keyNameMap[sdl.SCANCODE_Y] = "KeyY" + keyNameMap[sdl.SCANCODE_U] = "KeyU" + keyNameMap[sdl.SCANCODE_I] = "KeyI" + keyNameMap[sdl.SCANCODE_O] = "KeyO" + keyNameMap[sdl.SCANCODE_P] = "KeyP" + keyNameMap[sdl.SCANCODE_LEFTBRACKET] = "BracketLeft" + keyNameMap[sdl.SCANCODE_RIGHTBRACKET] = "BracketRight" + keyNameMap[sdl.SCANCODE_RETURN] = "Enter" + keyNameMap[sdl.SCANCODE_LCTRL] = "ControlLeft" + keyNameMap[sdl.SCANCODE_A] = "KeyA" + keyNameMap[sdl.SCANCODE_S] = "KeyS" + keyNameMap[sdl.SCANCODE_D] = "KeyD" + keyNameMap[sdl.SCANCODE_F] = "KeyF" + keyNameMap[sdl.SCANCODE_G] = "KeyG" + keyNameMap[sdl.SCANCODE_H] = "KeyH" + keyNameMap[sdl.SCANCODE_J] = "KeyJ" + keyNameMap[sdl.SCANCODE_K] = "KeyK" + keyNameMap[sdl.SCANCODE_L] = "KeyL" + keyNameMap[sdl.SCANCODE_SEMICOLON] = "Semicolon" + keyNameMap[sdl.SCANCODE_APOSTROPHE] = "Quote" + keyNameMap[sdl.SCANCODE_GRAVE] = "Backquote" + keyNameMap[sdl.SCANCODE_LSHIFT] = "ShiftLeft" + keyNameMap[sdl.SCANCODE_BACKSLASH] = "Backslash" + keyNameMap[sdl.SCANCODE_Z] = "KeyZ" + keyNameMap[sdl.SCANCODE_X] = "KeyX" + keyNameMap[sdl.SCANCODE_C] = "KeyC" + keyNameMap[sdl.SCANCODE_V] = "KeyV" + keyNameMap[sdl.SCANCODE_B] = "KeyB" + keyNameMap[sdl.SCANCODE_N] = "KeyN" + keyNameMap[sdl.SCANCODE_M] = "KeyM" + keyNameMap[sdl.SCANCODE_COMMA] = "Comma" + keyNameMap[sdl.SCANCODE_PERIOD] = "Period" + keyNameMap[sdl.SCANCODE_SLASH] = "Slash" + keyNameMap[sdl.SCANCODE_RSHIFT] = "RightShift" + keyNameMap[sdl.SCANCODE_KP_MULTIPLY] = "NumpadMultiply" + keyNameMap[sdl.SCANCODE_LALT] = "AltLeft" + keyNameMap[sdl.SCANCODE_SPACE] = "Space" + keyNameMap[sdl.SCANCODE_CAPSLOCK] = "CapsLock" + keyNameMap[sdl.SCANCODE_F1] = "F1" + keyNameMap[sdl.SCANCODE_F2] = "F2" + keyNameMap[sdl.SCANCODE_F3] = "F3" + keyNameMap[sdl.SCANCODE_F4] = "F4" + keyNameMap[sdl.SCANCODE_F5] = "F5" + keyNameMap[sdl.SCANCODE_F6] = "F6" + keyNameMap[sdl.SCANCODE_F7] = "F7" + keyNameMap[sdl.SCANCODE_F8] = "F8" + keyNameMap[sdl.SCANCODE_F9] = "F9" + keyNameMap[sdl.SCANCODE_F10] = "F10" + keyNameMap[sdl.SCANCODE_PAUSE] = "Pause" + keyNameMap[sdl.SCANCODE_SCROLLLOCK] = "ScrollLock" + keyNameMap[sdl.SCANCODE_KP_7] = "Numpad7" + keyNameMap[sdl.SCANCODE_KP_8] = "Numpad8" + keyNameMap[sdl.SCANCODE_KP_9] = "Numpad9" + keyNameMap[sdl.SCANCODE_KP_MINUS] = "NumpadSubtract" + keyNameMap[sdl.SCANCODE_KP_4] = "Numpad4" + keyNameMap[sdl.SCANCODE_KP_5] = "Numpad5" + keyNameMap[sdl.SCANCODE_KP_6] = "Numpad6" + keyNameMap[sdl.SCANCODE_KP_PLUS] = "NumpadAdd" + keyNameMap[sdl.SCANCODE_KP_1] = "Numpad1" + keyNameMap[sdl.SCANCODE_KP_2] = "Numpad2" + keyNameMap[sdl.SCANCODE_KP_3] = "Numpad3" + keyNameMap[sdl.SCANCODE_KP_0] = "Numpad0" + keyNameMap[sdl.SCANCODE_KP_DECIMAL] = "NumpadDecimal" + keyNameMap[sdl.SCANCODE_PRINTSCREEN] = "PrintScreen" + keyNameMap[sdl.SCANCODE_NONUSBACKSLASH] = "IntlBackslash" + keyNameMap[sdl.SCANCODE_F11] = "F11" + keyNameMap[sdl.SCANCODE_F12] = "F12" + keyNameMap[sdl.SCANCODE_KP_EQUALS] = "NumpadEqual" + keyNameMap[sdl.SCANCODE_F13] = "F13" + keyNameMap[sdl.SCANCODE_F14] = "F14" + keyNameMap[sdl.SCANCODE_F15] = "F15" + keyNameMap[sdl.SCANCODE_F16] = "F16" + keyNameMap[sdl.SCANCODE_F17] = "F17" + keyNameMap[sdl.SCANCODE_F18] = "F18" + keyNameMap[sdl.SCANCODE_F19] = "F19" + keyNameMap[sdl.SCANCODE_UNDO] = "Undo" + keyNameMap[sdl.SCANCODE_PASTE] = "Paste" + keyNameMap[sdl.SCANCODE_AUDIOPREV] = "MediaTrackPrevious" + keyNameMap[sdl.SCANCODE_CUT] = "Cut" + keyNameMap[sdl.SCANCODE_COPY] = "Copy" + keyNameMap[sdl.SCANCODE_AUDIONEXT] = "MediaTrackNext" + keyNameMap[sdl.SCANCODE_KP_ENTER] = "NumpadEnter" + keyNameMap[sdl.SCANCODE_RCTRL] = "ControlRight" + keyNameMap[sdl.SCANCODE_MUTE] = "AudioVolumeMute" + keyNameMap[sdl.SCANCODE_AUDIOPLAY] = "MediaPlayPause" + keyNameMap[sdl.SCANCODE_AUDIOSTOP] = "MediaStop" + keyNameMap[sdl.SCANCODE_VOLUMEDOWN] = "AudioVolumeDown" + keyNameMap[sdl.SCANCODE_VOLUMEUP] = "AudioVolumeUp" + keyNameMap[sdl.SCANCODE_KP_DIVIDE] = "NumpadDivide" + keyNameMap[sdl.SCANCODE_RALT] = "AltRight" + keyNameMap[sdl.SCANCODE_HELP] = "Help" + keyNameMap[sdl.SCANCODE_HOME] = "Home" + keyNameMap[sdl.SCANCODE_UP] = "ArrowUp" + keyNameMap[sdl.SCANCODE_PAGEUP] = "PageUp" + keyNameMap[sdl.SCANCODE_LEFT] = "ArrowLeft" + keyNameMap[sdl.SCANCODE_RIGHT] = "ArrowRight" + keyNameMap[sdl.SCANCODE_END] = "End" + keyNameMap[sdl.SCANCODE_DOWN] = "ArrowDown" + keyNameMap[sdl.SCANCODE_INSERT] = "Insert" + keyNameMap[sdl.SCANCODE_DELETE] = "Delete" + keyNameMap[sdl.SCANCODE_APPLICATION] = "ContextMenu" + + keyRuneMap[sdl.SCANCODE_0] = '0' + keyRuneMap[sdl.SCANCODE_1] = '1' + keyRuneMap[sdl.SCANCODE_2] = '2' + keyRuneMap[sdl.SCANCODE_3] = '3' + keyRuneMap[sdl.SCANCODE_4] = '4' + keyRuneMap[sdl.SCANCODE_5] = '5' + keyRuneMap[sdl.SCANCODE_6] = '6' + keyRuneMap[sdl.SCANCODE_7] = '7' + keyRuneMap[sdl.SCANCODE_8] = '8' + keyRuneMap[sdl.SCANCODE_9] = '9' + keyRuneMap[sdl.SCANCODE_MINUS] = '-' + keyRuneMap[sdl.SCANCODE_EQUALS] = '=' + keyRuneMap[sdl.SCANCODE_TAB] = '\t' + keyRuneMap[sdl.SCANCODE_Q] = 'Q' + keyRuneMap[sdl.SCANCODE_W] = 'W' + keyRuneMap[sdl.SCANCODE_E] = 'E' + keyRuneMap[sdl.SCANCODE_R] = 'R' + keyRuneMap[sdl.SCANCODE_T] = 'T' + keyRuneMap[sdl.SCANCODE_Y] = 'Y' + keyRuneMap[sdl.SCANCODE_U] = 'U' + keyRuneMap[sdl.SCANCODE_I] = 'I' + keyRuneMap[sdl.SCANCODE_O] = 'O' + keyRuneMap[sdl.SCANCODE_P] = 'P' + keyRuneMap[sdl.SCANCODE_LEFTBRACKET] = '[' + keyRuneMap[sdl.SCANCODE_RIGHTBRACKET] = ']' + keyRuneMap[sdl.SCANCODE_RETURN] = '\n' + keyRuneMap[sdl.SCANCODE_A] = 'A' + keyRuneMap[sdl.SCANCODE_S] = 'S' + keyRuneMap[sdl.SCANCODE_D] = 'D' + keyRuneMap[sdl.SCANCODE_F] = 'F' + keyRuneMap[sdl.SCANCODE_G] = 'G' + keyRuneMap[sdl.SCANCODE_H] = 'H' + keyRuneMap[sdl.SCANCODE_J] = 'J' + keyRuneMap[sdl.SCANCODE_K] = 'K' + keyRuneMap[sdl.SCANCODE_L] = 'L' + keyRuneMap[sdl.SCANCODE_SEMICOLON] = ';' + keyRuneMap[sdl.SCANCODE_APOSTROPHE] = '\'' + keyRuneMap[sdl.SCANCODE_GRAVE] = '`' + keyRuneMap[sdl.SCANCODE_BACKSLASH] = '\\' + keyRuneMap[sdl.SCANCODE_Z] = 'Z' + keyRuneMap[sdl.SCANCODE_X] = 'X' + keyRuneMap[sdl.SCANCODE_C] = 'C' + keyRuneMap[sdl.SCANCODE_V] = 'V' + keyRuneMap[sdl.SCANCODE_B] = 'B' + keyRuneMap[sdl.SCANCODE_N] = 'N' + keyRuneMap[sdl.SCANCODE_M] = 'M' + keyRuneMap[sdl.SCANCODE_COMMA] = ',' + keyRuneMap[sdl.SCANCODE_PERIOD] = '.' + keyRuneMap[sdl.SCANCODE_SLASH] = '/' + keyRuneMap[sdl.SCANCODE_KP_MULTIPLY] = '*' + keyRuneMap[sdl.SCANCODE_SPACE] = ' ' + keyRuneMap[sdl.SCANCODE_KP_7] = '7' + keyRuneMap[sdl.SCANCODE_KP_8] = '8' + keyRuneMap[sdl.SCANCODE_KP_9] = '9' + keyRuneMap[sdl.SCANCODE_KP_MINUS] = '-' + keyRuneMap[sdl.SCANCODE_KP_4] = '4' + keyRuneMap[sdl.SCANCODE_KP_5] = '5' + keyRuneMap[sdl.SCANCODE_KP_6] = '6' + keyRuneMap[sdl.SCANCODE_KP_PLUS] = '+' + keyRuneMap[sdl.SCANCODE_KP_1] = '1' + keyRuneMap[sdl.SCANCODE_KP_2] = '2' + keyRuneMap[sdl.SCANCODE_KP_3] = '3' + keyRuneMap[sdl.SCANCODE_KP_0] = '0' + keyRuneMap[sdl.SCANCODE_KP_DECIMAL] = '.' + keyRuneMap[sdl.SCANCODE_KP_EQUALS] = '=' + keyRuneMap[sdl.SCANCODE_KP_ENTER] = '\n' + keyRuneMap[sdl.SCANCODE_KP_DIVIDE] = '/' } func keyName(s sdl.Scancode) string { - if int(s) >= len(keyMap) { + if int(s) >= len(keyNameMap) { return "Unidentified" } - name := keyMap[s] + name := keyNameMap[s] if name == "" { return "Unidentified" } return name } + +func keyRune(s sdl.Scancode) rune { + if int(s) >= len(keyNameMap) { + return 0 + } + return keyRuneMap[s] +} diff --git a/sdlcanvas/sdlcanvas.go b/sdlcanvas/sdlcanvas.go index 8ed028d..183ebf4 100644 --- a/sdlcanvas/sdlcanvas.go +++ b/sdlcanvas/sdlcanvas.go @@ -2,7 +2,7 @@ package sdlcanvas import ( "fmt" - _ "image/gif" + _ "image/gif" // Imported here so that applications based on this package support these formats by default _ "image/jpeg" _ "image/png" "runtime" @@ -43,29 +43,29 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { return nil, nil, fmt.Errorf("Error initializing SDL: %v", err) } - sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 0) - sdl.GL_SetAttribute(sdl.GL_STENCIL_SIZE, 8) - sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4) + sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_ALPHA_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 0) + sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8) + sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4) // create window - window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, w, h, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) + window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, int32(w), int32(h), sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) if err != nil { - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0) - sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0) - window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, w, h, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0) + sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0) + window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, int32(w), int32(h), sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL) if err != nil { return nil, nil, fmt.Errorf("Error creating window: %v", err) } } // create GL context - glContext, err := sdl.GL_CreateContext(window) + glContext, err := window.GLCreateContext() if err != nil { return nil, nil, fmt.Errorf("Error creating GL context: %v", err) } @@ -76,7 +76,7 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { return nil, nil, fmt.Errorf("Error initializing GL: %v", err) } - sdl.GL_SetSwapInterval(1) + sdl.GLSetSwapInterval(1) gl.Enable(gl.MULTISAMPLE) err = canvas.LoadGL(goglimpl.GLImpl{}) @@ -96,7 +96,7 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { // Destroy destroys the GL context and the window func (wnd *Window) Destroy() { - sdl.GL_DeleteContext(wnd.GLContext) + sdl.GLDeleteContext(wnd.GLContext) wnd.Window.Destroy() } @@ -112,7 +112,7 @@ func (wnd *Window) Close() { // StartFrame handles events and gets the window ready for rendering func (wnd *Window) StartFrame() error { - err := sdl.GL_MakeCurrent(wnd.Window, wnd.GLContext) + err := wnd.Window.GLMakeCurrent(wnd.GLContext) if err != nil { return err } @@ -143,15 +143,17 @@ func (wnd *Window) StartFrame() error { wnd.MouseMove(int(e.X), int(e.Y)) handled = true } - case *sdl.KeyDownEvent: - if wnd.KeyDown != nil { - wnd.KeyDown(int(e.Keysym.Scancode), rune(e.Keysym.Unicode), keyName(e.Keysym.Scancode)) - handled = true - } - case *sdl.KeyUpEvent: - if wnd.KeyUp != nil { - wnd.KeyUp(int(e.Keysym.Scancode), rune(e.Keysym.Unicode), keyName(e.Keysym.Scancode)) - handled = true + case *sdl.KeyboardEvent: + if e.Type == sdl.KEYDOWN { + if wnd.KeyDown != nil { + wnd.KeyDown(int(e.Keysym.Scancode), keyRune(e.Keysym.Scancode), keyName(e.Keysym.Scancode)) + handled = true + } + } else if e.Type == sdl.KEYUP { + if wnd.KeyUp != nil { + wnd.KeyUp(int(e.Keysym.Scancode), keyRune(e.Keysym.Scancode), keyName(e.Keysym.Scancode)) + handled = true + } } } @@ -181,7 +183,7 @@ func (wnd *Window) FinishFrame() { wnd.fps = float32(wnd.frameCount-1) / float32(diff) } - sdl.GL_SwapWindow(wnd.Window) + wnd.Window.GLSwap() } // MainLoop runs a main loop and calls run on every frame @@ -202,8 +204,8 @@ func (wnd *Window) MainLoop(run func()) { } case *sdl.QuitEvent: wnd.close = true - case *sdl.KeyDownEvent: - if e.Keysym.Scancode == sdl.SCANCODE_ESCAPE { + case *sdl.KeyboardEvent: + if e.Type == sdl.KEYDOWN && e.Keysym.Scancode == sdl.SCANCODE_ESCAPE { wnd.close = true } }