feat(tracker): create initial tracker skeleton using Gio

This commit is contained in:
Matias Lahti 2020-11-07 19:50:37 +02:00
parent 5eb7cef889
commit 64fe28a240
6 changed files with 100 additions and 1 deletions

5
go.mod
View File

@ -2,4 +2,7 @@ module github.com/vsariola/sointu
go 1.15 go 1.15
require github.com/hajimehoshi/oto v0.6.6 require (
gioui.org v0.0.0-20201106195654-dbc0796d0207
github.com/hajimehoshi/oto v0.6.6
)

View File

@ -0,0 +1,24 @@
package main
import (
"fmt"
"gioui.org/app"
"gioui.org/unit"
"github.com/vsariola/sointu/go4k/tracker"
"os"
)
func main() {
go func() {
w := app.NewWindow(
app.Size(unit.Dp(800), unit.Dp(600)),
app.Title("Sointu Tracker"),
)
if err := tracker.New().Run(w); err != nil {
fmt.Println(err)
os.Exit(1)
}
os.Exit(0)
}()
app.Main()
}

17
go4k/tracker/keyevent.go Normal file
View File

@ -0,0 +1,17 @@
package tracker
import (
"gioui.org/io/key"
"os"
)
// KeyEvent handles incoming key events and returns true if repaint is needed.
func (t *Tracker) KeyEvent(e key.Event) bool {
if e.State == key.Press {
switch e.Name {
case key.NameEscape:
os.Exit(0)
}
}
return false
}

7
go4k/tracker/layout.go Normal file
View File

@ -0,0 +1,7 @@
package tracker
import "gioui.org/layout"
func (t *Tracker) Layout(gtx layout.Context) {
t.QuitButton.Layout(gtx)
}

35
go4k/tracker/run.go Normal file
View File

@ -0,0 +1,35 @@
package tracker
import (
"gioui.org/app"
"gioui.org/io/key"
"gioui.org/io/system"
"gioui.org/layout"
"gioui.org/op"
"os"
)
func (t *Tracker) Run(w *app.Window) error {
var ops op.Ops
for {
select {
case e := <-w.Events():
switch e := e.(type) {
case system.DestroyEvent:
return e.Err
case key.Event:
if t.KeyEvent(e) {
w.Invalidate()
}
case system.FrameEvent:
gtx := layout.NewContext(&ops, e)
if t.QuitButton.Clicked() {
os.Exit(0)
}
t.Layout(gtx)
e.Frame(gtx.Ops)
}
}
}
}

13
go4k/tracker/tracker.go Normal file
View File

@ -0,0 +1,13 @@
package tracker
import "gioui.org/widget"
type Tracker struct {
QuitButton *widget.Clickable
}
func New() *Tracker {
return &Tracker{
QuitButton: new(widget.Clickable),
}
}