func (w *ButtonWidget) Render() { // HACK: Brute-force check the mouse pointer if it contains this widget isOriginHit := false for _, hit := range mousePointer.OriginMapping { if w == hit { isOriginHit = true break } } isHit := len(w.HoverPointers()) > 0 // HACK: Assumes mousePointer rather than considering all connected pointing pointers if isOriginHit && mousePointer.State.IsActive() && isHit { //DrawGBox(w.pos, w.size) //drawInnerRoundedBox(w.pos, w.size, highlightColor, grayColor) c := mgl64.Vec3{42.0 / 255, 154.0 / 255, 254.0 / 255} drawInnerRoundedBox(w.pos, w.size, c.Mul(201.0/255), c) gl.Color3d(1, 1, 1) //} else if (isHit && !mousePointer.State.IsActive()) || isOriginHit { // //DrawYBox(w.pos, w.size) // drawInnerRoundedBox(w.pos, w.size, highlightColor, nearlyWhiteColor) } else { //DrawNBox(w.pos, w.size) //drawInnerRoundedBox(w.pos, w.size, mgl64.Vec3{0.3, 0.3, 0.3}, nearlyWhiteColor) c := mgl64.Vec3{1, 1, 1} drawInnerRoundedBox(w.pos, w.size, c.Mul(201.0/255), c) gl.Color3d(0, 0, 0) } NewOpenGlStream(w.pos.Add(mgl64.Vec2{8, 3})).PrintText("Software Update...") }
func piirrä(aika float64) { gl.Begin(gl.LINES) gl.Color3d(1, 1, 1) gl.Vertex2d(0, 0) gl.Color3d(0, 0, 0) gl.Vertex2d(0.5, 0) gl.Color3d(1, 0, 0) gl.Vertex2d(0, 0) gl.Vertex2d(0, 0.5) gl.End() }
func drawSpinner(spinner int) { gl.LoadIdentity() gl.Translatef(30.5, 30.5, 0) gl.Rotatef(float32(spinner), 0, 0, 1) gl.Color3d(0, 0, 0) gl.Rectd(-0.5, -10.5, 0.5, 10.5) }
func drawSpinner(spinner int) { gl.PushMatrix() gl.Translated(30.5, 30.5, 0) gl.Rotated(float64(spinner), 0, 0, 1) gl.Color3d(0, 0, 0) gl.Rectd(-0.5, -10.5, 0.5, 10.5) gl.PopMatrix() }
func (this *Pointer) Render() { switch { case this.VirtualCategory == POINTING && len(this.State.Axes) >= 2: // Prevent pointer from being drawn when the OS mouse pointer is visible. { // HACK var windowSize [2]int if globalWindow != nil { windowSize[0], windowSize[1] = globalWindow.GetSize() } // HACK: OS X specific. const border = 3 if this.State.Axes[1] < 0 || this.State.Axes[0] < border || this.State.Axes[0] >= float64(windowSize[0])-border || this.State.Axes[1] >= float64(windowSize[1])-border { break } } gl.PushMatrix() defer gl.PopMatrix() gl.Translated(float64(NearInt64(this.State.Axes[0]))+0.5, float64(NearInt64(this.State.Axes[1]))+0.5, 0) const size float64 = 12 * 40 / 40 gl.Color3d(1, 1, 1) gl.Begin(gl.TRIANGLE_FAN) gl.Vertex2d(0, 0) gl.Vertex2d(0, size) gl.Vertex2d(size*0.85*math.Sin(math.Pi/8), size*0.85*math.Cos(math.Pi/8)) gl.Vertex2d(size/math.Sqrt2, size/math.Sqrt2) gl.End() gl.Begin(gl.LINE_LOOP) gl.Color3d(0, 0, 0) gl.Vertex2d(0, 0) gl.Vertex2d(0, size) gl.Color3d(0.75, 0.75, 0.75) gl.Vertex2d(size*0.85*math.Sin(math.Pi/8), size*0.85*math.Cos(math.Pi/8)) gl.Color3d(0, 0, 0) gl.Vertex2d(size/math.Sqrt2, size/math.Sqrt2) gl.End() } }
func piirrä(aika float64) { const pisteitä = 200 gl.Begin(gl.LINE_STRIP) gl.Color3d( nollastaYhteen(aika*10), nollastaYhteen(aika*7), nollastaYhteen(aika*3), ) for i := 0.0; i < pisteitä; i++ { x := i / (pisteitä - 1) gl.Vertex2d(x*2-1, 0.8*math.Sin(x*8+aika)) } gl.End() }
func main() { if err := glfw.Init(nopContextWatcher{}); err != nil { panic(err) } defer glfw.Terminate() glfw.WindowHint(glfw.Samples, 8) // Anti-aliasing. window, err := glfw.CreateWindow(400, 400, "", nil, nil) if err != nil { panic(err) } window.MakeContextCurrent() if err := gl.Init(); err != nil { panic(err) } glfw.SwapInterval(1) // Vsync. InitFont() defer DeinitFont() framebufferSizeCallback := func(w *glfw.Window, framebufferSize0, framebufferSize1 int) { gl.Viewport(0, 0, int32(framebufferSize0), int32(framebufferSize1)) var windowSize [2]int windowSize[0], windowSize[1] = w.GetSize() // Update the projection matrix. gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, float64(windowSize[0]), float64(windowSize[1]), 0, -1, 1) gl.MatrixMode(gl.MODELVIEW) } { var framebufferSize [2]int framebufferSize[0], framebufferSize[1] = window.GetFramebufferSize() framebufferSizeCallback(window, framebufferSize[0], framebufferSize[1]) } window.SetFramebufferSizeCallback(framebufferSizeCallback) var inputEventQueue []events.InputEvent mousePointer = &events.Pointer{VirtualCategory: events.POINTING} window.SetMouseMovementCallback(func(w *glfw.Window, xpos, ypos, xdelta, ydelta float64) { inputEvent := events.InputEvent{ Pointer: mousePointer, EventTypes: map[events.EventType]struct{}{events.SLIDER_EVENT: {}}, InputId: 0, Buttons: nil, Sliders: []float64{xdelta, ydelta}, } if w.GetInputMode(glfw.CursorMode) != glfw.CursorDisabled { inputEvent.EventTypes[events.AXIS_EVENT] = struct{}{} inputEvent.Axes = []float64{xpos, ypos} } inputEventQueue = events.EnqueueInputEvent(inputEventQueue, inputEvent) }) window.SetMouseButtonCallback(func(w *glfw.Window, button glfw.MouseButton, action glfw.Action, mods glfw.ModifierKey) { inputEvent := events.InputEvent{ Pointer: mousePointer, EventTypes: map[events.EventType]struct{}{events.BUTTON_EVENT: {}}, InputId: uint16(button), Buttons: []bool{action != glfw.Release}, Sliders: nil, Axes: nil, ModifierKey: uint8(mods), } inputEventQueue = events.EnqueueInputEvent(inputEventQueue, inputEvent) }) go func() { <-time.After(5 * time.Second) log.Println("trigger!") boxUpdated = true glfw.PostEmptyEvent() }() gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) // For font. gl.ClearColor(247.0/255, 247.0/255, 247.0/255, 1) var spinner int var widgets []events.Widgeter widgets = append(widgets, NewButtonWidget(mgl64.Vec2{50, 200}, func() { fmt.Println("button triggered") })) for !window.ShouldClose() && glfw.Press != window.GetKey(glfw.KeyEscape) { glfw.WaitEvents() // Process Input. inputEventQueue = events.ProcessInputEventQueue(inputEventQueue, widgets[0]) gl.Clear(gl.COLOR_BUFFER_BIT) gl.LoadIdentity() for _, widget := range widgets { widget.Render() } drawSpinner(spinner) spinner++ drawBox() gl.Color3d(1, 0, 0) NewOpenGlStream(mgl64.Vec2{50, 300}).PrintText(` !"#$%&'()*+,-./ 0123456789:;<=>? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ ` + "`" + `abcdefghijklmno pqrstuvwxyz{|}~`) window.SwapBuffers() log.Println("swapped buffers") //runtime.Gosched() } }