| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629 |
- //go:build !js
- // +build !js
- package glfw
- import (
- "io"
- "os"
- "runtime"
- "github.com/go-gl/glfw/v3.3/glfw"
- )
- const (
- True int = glfw.True
- False int = glfw.False
- DontCare int = glfw.DontCare
- )
- func init() {
- runtime.LockOSThread()
- }
- var contextWatcher ContextWatcher
- // Init initializes the library.
- //
- // A valid ContextWatcher must be provided. It gets notified when context becomes current or detached.
- // It should be provided by the GL bindings you are using, so you can do glfw.Init(gl.ContextWatcher).
- func Init(cw ContextWatcher) error {
- contextWatcher = cw
- return glfw.Init()
- }
- func Terminate() {
- glfw.Terminate()
- }
- func CreateWindow(width, height int, title string, monitor *Monitor, share *Window) (*Window, error) {
- var m *glfw.Monitor
- if monitor != nil {
- m = monitor.Monitor
- }
- var s *glfw.Window
- if share != nil {
- s = share.Window
- }
- w, err := glfw.CreateWindow(width, height, title, m, s)
- if err != nil {
- return nil, err
- }
- window := &Window{Window: w}
- return window, err
- }
- func (w *Window) SetAttrib(attrib Hint, value int) {
- w.Window.SetAttrib(glfw.Hint(attrib), value)
- }
- func SwapInterval(interval int) {
- glfw.SwapInterval(interval)
- }
- func (w *Window) MakeContextCurrent() {
- w.Window.MakeContextCurrent()
- // In reality, context is available on each platform via GetGLXContext, GetWGLContext, GetNSGLContext, etc.
- // Pretend it is not available and pass nil, since it's not actually needed at this time.
- contextWatcher.OnMakeCurrent(nil)
- }
- func DetachCurrentContext() {
- glfw.DetachCurrentContext()
- contextWatcher.OnDetach()
- }
- type Window struct {
- *glfw.Window
- }
- type Monitor struct {
- *glfw.Monitor
- }
- func GetPrimaryMonitor() *Monitor {
- m := glfw.GetPrimaryMonitor()
- return &Monitor{Monitor: m}
- }
- func (w *Window) SetMonitor(monitor *Monitor, xpos, ypos, width, height, refreshRate int) {
- w.Window.SetMonitor(monitor.Monitor, xpos, ypos, width, height, refreshRate)
- }
- func PollEvents() {
- glfw.PollEvents()
- }
- type CursorPosCallback func(w *Window, xpos float64, ypos float64)
- func (w *Window) SetCursorPosCallback(cbfun CursorPosCallback) (previous CursorPosCallback) {
- wrappedCbfun := func(_ *glfw.Window, xpos float64, ypos float64) {
- cbfun(w, xpos, ypos)
- }
- p := w.Window.SetCursorPosCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type MouseMovementCallback func(w *Window, xpos float64, ypos float64, xdelta float64, ydelta float64)
- var lastMousePos [2]float64 // HACK.
- // TODO: For now, this overrides SetCursorPosCallback; should support both.
- func (w *Window) SetMouseMovementCallback(cbfun MouseMovementCallback) (previous MouseMovementCallback) {
- lastMousePos[0], lastMousePos[1] = w.Window.GetCursorPos()
- wrappedCbfun := func(_ *glfw.Window, xpos float64, ypos float64) {
- xdelta, ydelta := xpos-lastMousePos[0], ypos-lastMousePos[1]
- lastMousePos[0], lastMousePos[1] = xpos, ypos
- cbfun(w, xpos, ypos, xdelta, ydelta)
- }
- p := w.Window.SetCursorPosCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type KeyCallback func(w *Window, key Key, scancode int, action Action, mods ModifierKey)
- func (w *Window) SetKeyCallback(cbfun KeyCallback) (previous KeyCallback) {
- wrappedCbfun := func(_ *glfw.Window, key glfw.Key, scancode int, action glfw.Action, mods glfw.ModifierKey) {
- cbfun(w, Key(key), scancode, Action(action), ModifierKey(mods))
- }
- p := w.Window.SetKeyCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type CharCallback func(w *Window, char rune)
- func (w *Window) SetCharCallback(cbfun CharCallback) (previous CharCallback) {
- wrappedCbfun := func(_ *glfw.Window, char rune) {
- cbfun(w, char)
- }
- p := w.Window.SetCharCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type ScrollCallback func(w *Window, xoff float64, yoff float64)
- func (w *Window) SetScrollCallback(cbfun ScrollCallback) (previous ScrollCallback) {
- wrappedCbfun := func(_ *glfw.Window, xoff float64, yoff float64) {
- cbfun(w, xoff, yoff)
- }
- p := w.Window.SetScrollCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type MouseButtonCallback func(w *Window, button MouseButton, action Action, mods ModifierKey)
- func (w *Window) SetMouseButtonCallback(cbfun MouseButtonCallback) (previous MouseButtonCallback) {
- wrappedCbfun := func(_ *glfw.Window, button glfw.MouseButton, action glfw.Action, mods glfw.ModifierKey) {
- cbfun(w, MouseButton(button), Action(action), ModifierKey(mods))
- }
- p := w.Window.SetMouseButtonCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type FramebufferSizeCallback func(w *Window, width int, height int)
- func (w *Window) SetFramebufferSizeCallback(cbfun FramebufferSizeCallback) (previous FramebufferSizeCallback) {
- wrappedCbfun := func(_ *glfw.Window, width int, height int) {
- cbfun(w, width, height)
- }
- p := w.Window.SetFramebufferSizeCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- func (w *Window) GetKey(key Key) Action {
- a := w.Window.GetKey(glfw.Key(key))
- return Action(a)
- }
- func (w *Window) GetMouseButton(button MouseButton) Action {
- a := w.Window.GetMouseButton(glfw.MouseButton(button))
- return Action(a)
- }
- func (w *Window) GetInputMode(mode InputMode) int {
- return w.Window.GetInputMode(glfw.InputMode(mode))
- }
- func (w *Window) SetInputMode(mode InputMode, value int) {
- w.Window.SetInputMode(glfw.InputMode(mode), value)
- }
- type Key glfw.Key
- const (
- KeyUnknown = Key(glfw.KeyUnknown)
- KeySpace = Key(glfw.KeySpace)
- KeyApostrophe = Key(glfw.KeyApostrophe)
- KeyComma = Key(glfw.KeyComma)
- KeyMinus = Key(glfw.KeyMinus)
- KeyPeriod = Key(glfw.KeyPeriod)
- KeySlash = Key(glfw.KeySlash)
- Key0 = Key(glfw.Key0)
- Key1 = Key(glfw.Key1)
- Key2 = Key(glfw.Key2)
- Key3 = Key(glfw.Key3)
- Key4 = Key(glfw.Key4)
- Key5 = Key(glfw.Key5)
- Key6 = Key(glfw.Key6)
- Key7 = Key(glfw.Key7)
- Key8 = Key(glfw.Key8)
- Key9 = Key(glfw.Key9)
- KeySemicolon = Key(glfw.KeySemicolon)
- KeyEqual = Key(glfw.KeyEqual)
- KeyA = Key(glfw.KeyA)
- KeyB = Key(glfw.KeyB)
- KeyC = Key(glfw.KeyC)
- KeyD = Key(glfw.KeyD)
- KeyE = Key(glfw.KeyE)
- KeyF = Key(glfw.KeyF)
- KeyG = Key(glfw.KeyG)
- KeyH = Key(glfw.KeyH)
- KeyI = Key(glfw.KeyI)
- KeyJ = Key(glfw.KeyJ)
- KeyK = Key(glfw.KeyK)
- KeyL = Key(glfw.KeyL)
- KeyM = Key(glfw.KeyM)
- KeyN = Key(glfw.KeyN)
- KeyO = Key(glfw.KeyO)
- KeyP = Key(glfw.KeyP)
- KeyQ = Key(glfw.KeyQ)
- KeyR = Key(glfw.KeyR)
- KeyS = Key(glfw.KeyS)
- KeyT = Key(glfw.KeyT)
- KeyU = Key(glfw.KeyU)
- KeyV = Key(glfw.KeyV)
- KeyW = Key(glfw.KeyW)
- KeyX = Key(glfw.KeyX)
- KeyY = Key(glfw.KeyY)
- KeyZ = Key(glfw.KeyZ)
- KeyLeftBracket = Key(glfw.KeyLeftBracket)
- KeyBackslash = Key(glfw.KeyBackslash)
- KeyRightBracket = Key(glfw.KeyRightBracket)
- KeyGraveAccent = Key(glfw.KeyGraveAccent)
- KeyWorld1 = Key(glfw.KeyWorld1)
- KeyWorld2 = Key(glfw.KeyWorld2)
- KeyEscape = Key(glfw.KeyEscape)
- KeyEnter = Key(glfw.KeyEnter)
- KeyTab = Key(glfw.KeyTab)
- KeyBackspace = Key(glfw.KeyBackspace)
- KeyInsert = Key(glfw.KeyInsert)
- KeyDelete = Key(glfw.KeyDelete)
- KeyRight = Key(glfw.KeyRight)
- KeyLeft = Key(glfw.KeyLeft)
- KeyDown = Key(glfw.KeyDown)
- KeyUp = Key(glfw.KeyUp)
- KeyPageUp = Key(glfw.KeyPageUp)
- KeyPageDown = Key(glfw.KeyPageDown)
- KeyHome = Key(glfw.KeyHome)
- KeyEnd = Key(glfw.KeyEnd)
- KeyCapsLock = Key(glfw.KeyCapsLock)
- KeyScrollLock = Key(glfw.KeyScrollLock)
- KeyNumLock = Key(glfw.KeyNumLock)
- KeyPrintScreen = Key(glfw.KeyPrintScreen)
- KeyPause = Key(glfw.KeyPause)
- KeyF1 = Key(glfw.KeyF1)
- KeyF2 = Key(glfw.KeyF2)
- KeyF3 = Key(glfw.KeyF3)
- KeyF4 = Key(glfw.KeyF4)
- KeyF5 = Key(glfw.KeyF5)
- KeyF6 = Key(glfw.KeyF6)
- KeyF7 = Key(glfw.KeyF7)
- KeyF8 = Key(glfw.KeyF8)
- KeyF9 = Key(glfw.KeyF9)
- KeyF10 = Key(glfw.KeyF10)
- KeyF11 = Key(glfw.KeyF11)
- KeyF12 = Key(glfw.KeyF12)
- KeyF13 = Key(glfw.KeyF13)
- KeyF14 = Key(glfw.KeyF14)
- KeyF15 = Key(glfw.KeyF15)
- KeyF16 = Key(glfw.KeyF16)
- KeyF17 = Key(glfw.KeyF17)
- KeyF18 = Key(glfw.KeyF18)
- KeyF19 = Key(glfw.KeyF19)
- KeyF20 = Key(glfw.KeyF20)
- KeyF21 = Key(glfw.KeyF21)
- KeyF22 = Key(glfw.KeyF22)
- KeyF23 = Key(glfw.KeyF23)
- KeyF24 = Key(glfw.KeyF24)
- KeyF25 = Key(glfw.KeyF25)
- KeyKP0 = Key(glfw.KeyKP0)
- KeyKP1 = Key(glfw.KeyKP1)
- KeyKP2 = Key(glfw.KeyKP2)
- KeyKP3 = Key(glfw.KeyKP3)
- KeyKP4 = Key(glfw.KeyKP4)
- KeyKP5 = Key(glfw.KeyKP5)
- KeyKP6 = Key(glfw.KeyKP6)
- KeyKP7 = Key(glfw.KeyKP7)
- KeyKP8 = Key(glfw.KeyKP8)
- KeyKP9 = Key(glfw.KeyKP9)
- KeyKPDecimal = Key(glfw.KeyKPDecimal)
- KeyKPDivide = Key(glfw.KeyKPDivide)
- KeyKPMultiply = Key(glfw.KeyKPMultiply)
- KeyKPSubtract = Key(glfw.KeyKPSubtract)
- KeyKPAdd = Key(glfw.KeyKPAdd)
- KeyKPEnter = Key(glfw.KeyKPEnter)
- KeyKPEqual = Key(glfw.KeyKPEqual)
- KeyLeftShift = Key(glfw.KeyLeftShift)
- KeyLeftControl = Key(glfw.KeyLeftControl)
- KeyLeftAlt = Key(glfw.KeyLeftAlt)
- KeyLeftSuper = Key(glfw.KeyLeftSuper)
- KeyRightShift = Key(glfw.KeyRightShift)
- KeyRightControl = Key(glfw.KeyRightControl)
- KeyRightAlt = Key(glfw.KeyRightAlt)
- KeyRightSuper = Key(glfw.KeyRightSuper)
- KeyMenu = Key(glfw.KeyMenu)
- )
- type MouseButton glfw.MouseButton
- const (
- MouseButton1 = MouseButton(glfw.MouseButton1)
- MouseButton2 = MouseButton(glfw.MouseButton2)
- MouseButton3 = MouseButton(glfw.MouseButton3)
- MouseButtonLeft = MouseButton(glfw.MouseButtonLeft)
- MouseButtonRight = MouseButton(glfw.MouseButtonRight)
- MouseButtonMiddle = MouseButton(glfw.MouseButtonMiddle)
- )
- type Joystick glfw.Joystick
- const (
- Joystick1 = Joystick(glfw.Joystick1)
- Joystick2 = Joystick(glfw.Joystick2)
- Joystick3 = Joystick(glfw.Joystick3)
- Joystick4 = Joystick(glfw.Joystick4)
- Joystick5 = Joystick(glfw.Joystick5)
- Joystick6 = Joystick(glfw.Joystick6)
- Joystick7 = Joystick(glfw.Joystick7)
- Joystick8 = Joystick(glfw.Joystick8)
- Joystick9 = Joystick(glfw.Joystick9)
- Joystick10 = Joystick(glfw.Joystick10)
- Joystick11 = Joystick(glfw.Joystick11)
- Joystick12 = Joystick(glfw.Joystick12)
- Joystick13 = Joystick(glfw.Joystick13)
- Joystick14 = Joystick(glfw.Joystick14)
- Joystick15 = Joystick(glfw.Joystick15)
- Joystick16 = Joystick(glfw.Joystick16)
- JoystickLast = Joystick(glfw.JoystickLast)
- )
- type GamepadAxis glfw.GamepadAxis
- const (
- AxisLeftX = GamepadAxis(glfw.AxisLeftX)
- AxisLeftY = GamepadAxis(glfw.AxisLeftY)
- AxisRightX = GamepadAxis(glfw.AxisRightX)
- AxisRightY = GamepadAxis(glfw.AxisRightY)
- AxisLeftTrigger = GamepadAxis(glfw.AxisLeftTrigger)
- AxisRightTrigger = GamepadAxis(glfw.AxisRightTrigger)
- AxisLast = GamepadAxis(glfw.AxisLast)
- )
- type GamepadButton glfw.GamepadButton
- const (
- ButtonA = GamepadButton(glfw.ButtonA)
- ButtonB = GamepadButton(glfw.ButtonB)
- ButtonX = GamepadButton(glfw.ButtonX)
- ButtonY = GamepadButton(glfw.ButtonY)
- ButtonLeftBumper = GamepadButton(glfw.ButtonLeftBumper)
- ButtonRightBumper = GamepadButton(glfw.ButtonRightBumper)
- ButtonBack = GamepadButton(glfw.ButtonBack)
- ButtonStart = GamepadButton(glfw.ButtonStart)
- ButtonGuide = GamepadButton(glfw.ButtonGuide)
- ButtonLeftThumb = GamepadButton(glfw.ButtonLeftThumb)
- ButtonRightThumb = GamepadButton(glfw.ButtonRightThumb)
- ButtonDpadUp = GamepadButton(glfw.ButtonDpadUp)
- ButtonDpadRight = GamepadButton(glfw.ButtonDpadRight)
- ButtonDpadDown = GamepadButton(glfw.ButtonDpadDown)
- ButtonDpadLeft = GamepadButton(glfw.ButtonDpadLeft)
- ButtonLast = GamepadButton(glfw.ButtonLast)
- ButtonCross = GamepadButton(glfw.ButtonCross)
- ButtonCircle = GamepadButton(glfw.ButtonCircle)
- ButtonSquare = GamepadButton(glfw.ButtonSquare)
- ButtonTriangle = GamepadButton(glfw.ButtonTriangle)
- )
- type Action glfw.Action
- const (
- Release = Action(glfw.Release)
- Press = Action(glfw.Press)
- Repeat = Action(glfw.Repeat)
- )
- type InputMode int
- const (
- CursorMode = InputMode(glfw.CursorMode)
- StickyKeysMode = InputMode(glfw.StickyKeysMode)
- StickyMouseButtonsMode = InputMode(glfw.StickyMouseButtonsMode)
- LockKeyMods = InputMode(glfw.LockKeyMods)
- RawMouseMotion = InputMode(glfw.RawMouseMotion)
- )
- const (
- CursorNormal = int(glfw.CursorNormal)
- CursorHidden = int(glfw.CursorHidden)
- CursorDisabled = int(glfw.CursorDisabled)
- )
- type ModifierKey int
- const (
- ModShift = ModifierKey(glfw.ModShift)
- ModControl = ModifierKey(glfw.ModControl)
- ModAlt = ModifierKey(glfw.ModAlt)
- ModSuper = ModifierKey(glfw.ModSuper)
- )
- func (joy Joystick) IsPresent() bool {
- return glfw.Joystick(joy).Present()
- }
- func (joy Joystick) GetGamepadName() string {
- return glfw.Joystick(joy).GetGamepadName()
- }
- func (joy Joystick) GetAxes() []float32 {
- return glfw.Joystick(joy).GetAxes()
- }
- func (joy Joystick) GetButtons() []Action {
- src := glfw.Joystick(joy).GetButtons()
- dst := make([]Action, len(src))
- for i, v := range src {
- dst[i] = Action(v)
- }
- return dst
- }
- // Open opens a named asset. It's the caller's responsibility to close it when done.
- //
- // For now, assets are read directly from the current working directory.
- func Open(name string) (io.ReadCloser, error) {
- return os.Open(name)
- }
- // ---
- func WaitEvents() {
- glfw.WaitEvents()
- }
- func PostEmptyEvent() {
- glfw.PostEmptyEvent()
- }
- func DefaultWindowHints() {
- glfw.DefaultWindowHints()
- }
- func (w *Window) SetClipboardString(str string) {
- glfw.SetClipboardString(str)
- }
- func (w *Window) GetClipboardString() (string, error) {
- return glfw.GetClipboardString(), nil
- }
- type CloseCallback func(w *Window)
- func (w *Window) SetCloseCallback(cbfun CloseCallback) (previous CloseCallback) {
- wrappedCbfun := func(_ *glfw.Window) {
- cbfun(w)
- }
- p := w.Window.SetCloseCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type RefreshCallback func(w *Window)
- func (w *Window) SetRefreshCallback(cbfun RefreshCallback) (previous RefreshCallback) {
- wrappedCbfun := func(_ *glfw.Window) {
- cbfun(w)
- }
- p := w.Window.SetRefreshCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type SizeCallback func(w *Window, width int, height int)
- func (w *Window) SetSizeCallback(cbfun SizeCallback) (previous SizeCallback) {
- wrappedCbfun := func(_ *glfw.Window, width int, height int) {
- cbfun(w, width, height)
- }
- p := w.Window.SetSizeCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type CursorEnterCallback func(w *Window, entered bool)
- func (w *Window) SetCursorEnterCallback(cbfun CursorEnterCallback) (previous CursorEnterCallback) {
- wrappedCbfun := func(_ *glfw.Window, entered bool) {
- cbfun(w, entered)
- }
- p := w.Window.SetCursorEnterCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type CharModsCallback func(w *Window, char rune, mods ModifierKey)
- // SetCharModsCallback is a wrapper around the GFLW window SetCharModsCallback method.
- //
- // Deprecated: Scheduled for removal in GLFW version 4.0.
- func (w *Window) SetCharModsCallback(cbfun CharModsCallback) (previous CharModsCallback) {
- wrappedCbfun := func(_ *glfw.Window, char rune, mods glfw.ModifierKey) {
- cbfun(w, char, ModifierKey(mods))
- }
- p := w.Window.SetCharModsCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type PosCallback func(w *Window, xpos int, ypos int)
- func (w *Window) SetPosCallback(cbfun PosCallback) (previous PosCallback) {
- wrappedCbfun := func(_ *glfw.Window, xpos int, ypos int) {
- cbfun(w, xpos, ypos)
- }
- p := w.Window.SetPosCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type FocusCallback func(w *Window, focused bool)
- func (w *Window) SetFocusCallback(cbfun FocusCallback) (previous FocusCallback) {
- wrappedCbfun := func(_ *glfw.Window, focused bool) {
- cbfun(w, focused)
- }
- p := w.Window.SetFocusCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type IconifyCallback func(w *Window, iconified bool)
- func (w *Window) SetIconifyCallback(cbfun IconifyCallback) (previous IconifyCallback) {
- wrappedCbfun := func(_ *glfw.Window, iconified bool) {
- cbfun(w, iconified)
- }
- p := w.Window.SetIconifyCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
- type DropCallback func(w *Window, names []string)
- func (w *Window) SetDropCallback(cbfun DropCallback) (previous DropCallback) {
- wrappedCbfun := func(_ *glfw.Window, names []string) {
- cbfun(w, names)
- }
- p := w.Window.SetDropCallback(wrappedCbfun)
- _ = p
- // TODO: Handle previous.
- return nil
- }
|