func (state *State) Render(window *glfw.Window) { if !state.Dirty { return } state.Dirty = false state.Reset(window) state.Time = time.Now() state.UpdateInput(window) hue := float32(state.Time.UnixNano()/1e6%360) / 360.0 Highlight = ui.ColorHSLA(hue, 0.7, 0.7, 1.0) w, h := window.GetSize() root := &ui.Context{ Backend: state.Backend, Input: state.Input, Area: ui.Block(0, 0, float32(w), float32(h)), } if root.Input.Mouse.Drag != nil { if !root.Input.Mouse.Drag(root) { root.Input.Mouse.Drag = nil } } state.Backend.SetBack(ui.ColorHex(0xEEEEEEFF)) state.Backend.SetFore(ui.ColorHex(0xCCCCCCFF)) state.Backend.SetFontColor(ui.ColorHex(0x000000FF)) view := NewView(state, root, &state.Timeline) view.Render() }
// onResize sets up a simple 2d ortho context based on the window size func onResize(window *glfw.Window, w, h int) { w, h = window.GetSize() // query window to get screen pixels width, height := window.GetFramebufferSize() gl.Viewport(0, 0, int32(width), int32(height)) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, float64(w), 0, float64(h), -1, 1) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.ClearColor(1, 1, 1, 1) }
func initOpenGl(window *glfw.Window, w, h int) { w, h = window.GetSize() // query window to get screen pixels width, height := window.GetFramebufferSize() gl.Viewport(0, 0, width, height) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, float64(w), 0, float64(h), -1, 1) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.ClearColor(.25, .88, .83, 1) // turquoise }
func (state *State) Reset(window *glfw.Window) { gl.ClearColor(1, 1, 1, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Disable(gl.DEPTH) gl.Enable(gl.FRAMEBUFFER_SRGB) width, height := window.GetSize() gl.Viewport(0, 0, int32(width), int32(height)) gl.Ortho(0, float64(width), float64(height), 0, 30, -30) }
func (state *State) Render(window *glfw.Window) { state.Reset(window) state.UpdateInput(window) w, h := window.GetSize() root := &ui.Context{ Backend: state.Backend, Input: state.Input, Area: ui.Block(0, 0, float32(w), float32(h)), } if root.Input.Mouse.Drag != nil { if !root.Input.Mouse.Drag(root) { root.Input.Mouse.Drag = nil } } state.Backend.SetBack(ui.ColorHex(0xEEEEEEFF)) state.Backend.SetFore(ui.ColorHex(0xCCCCCCFF)) state.Backend.SetFontColor(ui.ColorHex(0x000000FF)) mm := &MainMenu{} ui.Buttons{ {"☺", mm.File}, {"Load", mm.Load}, {"Save", mm.Save}, {"Quit", mm.Quit}, }.DoDynamic(ui.LayoutToRight(50, root.Top(20).Panel())) boxbounds := ui.Bounds{ state.Box, state.Box.Offset(ui.Point{30, 30})} runtime.ReadMemStats(&state.MemStats) root.Right(state.SidePanelSize).Reflect("Mem", &state.MemStats) ui.SplitterX(root.Right(5), func(delta float32) { state.SidePanelSize -= delta }) box := root.Child(boxbounds) box.Backend.SetBack(ui.ColorHex(0xFF88EEFF)) box.Backend.SetFore(ui.ColorHex(0xFF88EEFF)) box.Backend.Fill(box.Area) box.Backend.Stroke(box.Area) ui.DoDragXY(box, func(dx, dy float32) { state.Box.X += dx state.Box.Y += dy }) }
func onMouseMove(w *glfw.Window, xpos float64, ypos float64) { width, height := w.GetSize() if currentScreen != nil { fw, fh := w.GetFramebufferSize() currentScreen.hover(xpos*(float64(fw)/float64(width)), ypos*(float64(fh)/float64(height)), fw, fh) return } if !lockMouse { return } ww, hh := float64(width/2), float64(height/2) w.SetCursorPos(ww, hh) s := float64(10000-mouseSensitivity.Value()) + 0.01 rotate((xpos-ww)/s, (ypos-hh)/s) }
func onMouseClick(w *glfw.Window, button glfw.MouseButton, action glfw.Action, mod glfw.ModifierKey) { if currentScreen != nil { if button != glfw.MouseButtonLeft || action == glfw.Repeat { return } width, height := w.GetSize() xpos, ypos := w.GetCursorPos() fw, fh := w.GetFramebufferSize() currentScreen.click(action == glfw.Press, xpos*(float64(fw)/float64(width)), ypos*(float64(fh)/float64(height)), fw, fh) return } if !Client.chat.enteringText && lockMouse && action != glfw.Repeat { Client.MouseAction(button, action == glfw.Press) } if button == glfw.MouseButtonLeft && action == glfw.Press && !Client.chat.enteringText { lockMouse = true w.SetInputMode(glfw.CursorMode, glfw.CursorDisabled) } }
func draw(w *glfw.Window) { //Get the horizontal split size of the window sizex, sizey := w.GetSize() var eyesize mgl32.Vec2 eyesize[0] = float32(sizex / 2.0) eyesize[1] = float32(sizey) gl.Enable(gl.SCISSOR_TEST) gl.Scissor(0, 0, int32(eyesize[0]), int32(eyesize[1])) gl.ClearColor(1, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Scissor(int32(eyesize[0]), 0, int32(eyesize[0]), int32(eyesize[1])) gl.ClearColor(0, 0, 1, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Disable(gl.SCISSOR_TEST) }
// OpenGL draw function func draw(window *glfw.Window) { gl.Clear(gl.COLOR_BUFFER_BIT) gl.Enable(gl.BLEND) gl.Enable(gl.POINT_SMOOTH) gl.Enable(gl.LINE_SMOOTH) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.LoadIdentity() gl.PushMatrix() gl.Disable(gl.LIGHTING) width, height := window.GetSize() x := float64(width) y := float64(height) h := 0 gl.Color4f(.1, .1, .1, .8) gl.LineWidth(1.0) // x方向 var x0, x1, y0, y1 float64 var deltaX, deltaY float64 d := width / 2 x0 = -x x1 = -x y0 = -y y1 = y deltaX = ((2 * x) / float64(d)) for i := 0; i < d; i++ { x0 = x0 + deltaX gl.Begin(gl.LINES) gl.Vertex3f(float32(x0), float32(y0), float32(h)) gl.Vertex3f(float32(x0), float32(y1), float32(h)) gl.End() } // y方向 x0 = -x x1 = x deltaY = ((2 * y) / float64(d)) for i := 0; i < d; i++ { y0 = y0 + deltaY gl.Begin(gl.LINES) gl.Vertex3f(float32(x0), float32(y0), float32(h)) gl.Vertex3f(float32(x1), float32(y0), float32(h)) gl.End() } gl.PopMatrix() // draw boxes for _, room := range rooms { gl.PushMatrix() rot := room.Box.Body.Angle() * chipmunk.DegreeConst gl.Rotatef(float32(rot), 0, 0, 1.0) x := roundm(float64(room.Box.Body.Position().X), 4.0) y := roundm(float64(room.Box.Body.Position().Y), 4.0) gl.Translated(x, y, 0.0) drawRoom(room) gl.PopMatrix() } }