// Copyright 2016 The G3N Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package window abstracts the OpenGL Window manager // Currently only "glfw" is supported package window import ( "github.com/g3n/engine/core" "github.com/go-gl/glfw/v3.2/glfw" ) // IWindowManager is the interface for all window managers type IWindowManager interface { ScreenResolution(interface{}) (width, height int) CreateWindow(width, height int, title string, full bool) (IWindow, error) SetSwapInterval(interval int) PollEvents() Terminate() } // IWindow is the interface for all windows type IWindow interface { core.IDispatcher MakeContextCurrent() Size() (width int, height int) SetSize(width int, height int) Pos() (xpos, ypos int) SetPos(xpos, ypos int) SetTitle(title string) SetStandardCursor(cursor StandardCursor) ShouldClose() bool SetShouldClose(bool) FullScreen() bool SetFullScreen(bool) SwapBuffers() Destroy() } // Key corresponds to a keyboard key. type Key int // Keycodes (from glfw) 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) KeyLast = Key(glfw.KeyLast) ) // ModifierKey corresponds to a modifier key. type ModifierKey int // Modifier keys const ( ModShift = ModifierKey(glfw.ModShift) ModControl = ModifierKey(glfw.ModControl) ModAlt = ModifierKey(glfw.ModAlt) ModSuper = ModifierKey(glfw.ModSuper) ) // MouseButton corresponds to a mouse button. type MouseButton int // Mouse buttons const ( MouseButton1 = MouseButton(glfw.MouseButton1) MouseButton2 = MouseButton(glfw.MouseButton2) MouseButton3 = MouseButton(glfw.MouseButton3) MouseButton4 = MouseButton(glfw.MouseButton4) MouseButton5 = MouseButton(glfw.MouseButton5) MouseButton6 = MouseButton(glfw.MouseButton6) MouseButton7 = MouseButton(glfw.MouseButton7) MouseButton8 = MouseButton(glfw.MouseButton8) MouseButtonLast = MouseButton(glfw.MouseButtonLast) MouseButtonLeft = MouseButton(glfw.MouseButtonLeft) MouseButtonRight = MouseButton(glfw.MouseButtonRight) MouseButtonMiddle = MouseButton(glfw.MouseButtonMiddle) ) // StandardCursor corresponds to a standard cursor icon. type StandardCursor int // Standard cursors const ( ArrowCursor = StandardCursor(glfw.ArrowCursor) IBeamCursor = StandardCursor(glfw.IBeamCursor) CrosshairCursor = StandardCursor(glfw.CrosshairCursor) HandCursor = StandardCursor(glfw.HandCursor) HResizeCursor = StandardCursor(glfw.HResizeCursor) VResizeCursor = StandardCursor(glfw.VResizeCursor) ) // Action corresponds to a key or button action. type Action int const ( // Release indicates that key or mouse button was released Release = Action(glfw.Release) // Press indicates that key or mouse button was pressed Press = Action(glfw.Press) // Repeat indicates that key was held down until it repeated Repeat = Action(glfw.Repeat) ) // InputMode corresponds to an input mode. type InputMode int // Input modes const ( CursorMode = InputMode(glfw.CursorMode) // See Cursor mode values StickyKeysMode = InputMode(glfw.StickyKeysMode) // Value can be either 1 or 0 StickyMouseButtonsMode = InputMode(glfw.StickyMouseButtonsMode) // Value can be either 1 or 0 ) // Cursor mode values const ( CursorNormal = glfw.CursorNormal CursorHidden = glfw.CursorHidden CursorDisabled = glfw.CursorDisabled ) // // Window event names using for dispatch and subscribe // const ( OnWindowPos = "win.OnWindowPos" OnWindowSize = "win.OnWindowSize" OnKeyUp = "win.OnKeyUp" OnKeyDown = "win.OnKeyDown" OnKeyRepeat = "win.OnKeyRepeat" OnChar = "win.OnChar" OnCursor = "win.OnCursor" OnMouseUp = "win.OnMouseUp" OnMouseDown = "win.OnMouseDown" OnScroll = "win.OnScroll" OnFrame = "win.OnFrame" ) // PosEvent describes a windows position changed event type PosEvent struct { W IWindow Xpos int Ypos int } // SizeEvent describers a window size changed event type SizeEvent struct { W IWindow Width int Height int } // KeyEvent describes a window key event type KeyEvent struct { W IWindow Keycode Key Scancode int Action Action Mods ModifierKey } // CharEvent describes a window char event type CharEvent struct { W IWindow Char rune Mods ModifierKey } // MouseEvent describes a mouse event over the window type MouseEvent struct { W IWindow Xpos float32 Ypos float32 Button MouseButton Action Action Mods ModifierKey } // CursorEvent describes a cursor position changed event type CursorEvent struct { W IWindow Xpos float32 Ypos float32 } // ScrollEvent describes a scroll event type ScrollEvent struct { W IWindow Xoffset float32 Yoffset float32 } // Manager returns the window manager for the specified type. // Currently only "glfw" type is supported. func Manager(wtype string) (IWindowManager, error) { if wtype != "glfw" { panic("Unsupported window manager") } return Glfw() }