| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:build darwin || linux
- // Small test app used by app/app_test.go.
- package main
- import (
- "log"
- "net"
- "golang.org/x/mobile/app"
- "golang.org/x/mobile/app/internal/apptest"
- "golang.org/x/mobile/event/lifecycle"
- "golang.org/x/mobile/event/paint"
- "golang.org/x/mobile/event/size"
- "golang.org/x/mobile/event/touch"
- "golang.org/x/mobile/gl"
- )
- func main() {
- app.Main(func(a app.App) {
- var (
- glctx gl.Context
- visible bool
- )
- addr := "127.0.0.1:" + apptest.Port
- log.Printf("addr: %s", addr)
- conn, err := net.Dial("tcp", addr)
- if err != nil {
- log.Fatal(err)
- }
- defer conn.Close()
- log.Printf("dialled")
- comm := &apptest.Comm{
- Conn: conn,
- Fatalf: log.Panicf,
- Printf: log.Printf,
- }
- comm.Send("hello_from_testapp")
- comm.Recv("hello_from_host")
- color := "red"
- sendPainting := false
- for e := range a.Events() {
- switch e := a.Filter(e).(type) {
- case lifecycle.Event:
- switch e.Crosses(lifecycle.StageVisible) {
- case lifecycle.CrossOn:
- comm.Send("lifecycle_visible")
- sendPainting = true
- visible = true
- glctx, _ = e.DrawContext.(gl.Context)
- case lifecycle.CrossOff:
- comm.Send("lifecycle_not_visible")
- visible = false
- }
- case size.Event:
- comm.Send("size", e.PixelsPerPt, e.Orientation)
- case paint.Event:
- if visible {
- if color == "red" {
- glctx.ClearColor(1, 0, 0, 1)
- } else {
- glctx.ClearColor(0, 1, 0, 1)
- }
- glctx.Clear(gl.COLOR_BUFFER_BIT)
- a.Publish()
- }
- if sendPainting {
- comm.Send("paint", color)
- sendPainting = false
- }
- case touch.Event:
- comm.Send("touch", e.Type, e.X, e.Y)
- if e.Type == touch.TypeEnd {
- if color == "red" {
- color = "green"
- } else {
- color = "red"
- }
- sendPainting = true
- // Send a paint event so the screen gets redrawn.
- a.Send(paint.Event{})
- }
- }
- }
- })
- }
|