80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build darwin linux
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"log"
 | |
| 
 | |
| 	"gioui.org/app"
 | |
| 	"gioui.org/io/system"
 | |
| 	"gioui.org/layout"
 | |
| 	"gioui.org/op"
 | |
| 	"gioui.org/unit"
 | |
| 	"gioui.org/widget/material"
 | |
| 
 | |
| 	"gioui.org/font/gofont"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	labchan chan string
 | |
| )
 | |
| 
 | |
| type (
 | |
| 	D = layout.Dimensions
 | |
| 	C = layout.Context
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	labchan = make(chan string)
 | |
| 	log.Print("Staring event loop")
 | |
| 	go eventloop()
 | |
| 	app.Main()
 | |
| 	log.Print("app.Main() returned")
 | |
| }
 | |
| 
 | |
| func eventloop() {
 | |
| 	w := app.NewWindow(
 | |
| 		app.Size(unit.Dp(400), unit.Dp(400)),
 | |
| 		app.Title("Hello"))
 | |
| 	th := material.NewTheme(gofont.Collection())
 | |
| 	var ops op.Ops
 | |
| 
 | |
| 	sysinset := &layout.Inset{}
 | |
| 	margin := layout.UniformInset(unit.Dp(10))
 | |
| 	labels := []material.LabelStyle{}
 | |
| 	list := &layout.List{Axis: layout.Vertical}
 | |
| 
 | |
| 	resetSysinset := func(x system.Insets) {
 | |
| 		sysinset.Top = x.Top
 | |
| 		sysinset.Bottom = x.Bottom
 | |
| 		sysinset.Left = x.Left
 | |
| 		sysinset.Right = x.Right
 | |
| 	}
 | |
| 	go func() {
 | |
| 		labchan <- "Starting"
 | |
| 		registerFragment(w)
 | |
| 	}()
 | |
| 	for {
 | |
| 		select {
 | |
| 		case x := <-labchan:
 | |
| 			labels = append(labels, material.Body1(th, x))
 | |
| 		case e := <-w.Events():
 | |
| 			switch e := e.(type) {
 | |
| 			case system.DestroyEvent:
 | |
| 				return
 | |
| 			case system.FrameEvent:
 | |
| 				gtx := layout.NewContext(&ops, e)
 | |
| 				resetSysinset(e.Insets)
 | |
| 				sysinset.Layout(gtx, func(gtx C) D {
 | |
| 					return margin.Layout(gtx, func(gtx C) D {
 | |
| 						return list.Layout(gtx, len(labels), func(gtx C, i int) D {
 | |
| 							return labels[i].Layout(gtx)
 | |
| 						})
 | |
| 					})
 | |
| 				})
 | |
| 				e.Frame(gtx.Ops)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |