mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
feat(tracker): create initial tracker skeleton using Gio
This commit is contained in:
parent
5eb7cef889
commit
64fe28a240
5
go.mod
5
go.mod
@ -2,4 +2,7 @@ module github.com/vsariola/sointu
|
||||
|
||||
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
|
||||
)
|
||||
|
24
go4k/cmd/sointu-tracker/main.go
Normal file
24
go4k/cmd/sointu-tracker/main.go
Normal 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
17
go4k/tracker/keyevent.go
Normal 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
7
go4k/tracker/layout.go
Normal 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
35
go4k/tracker/run.go
Normal 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
13
go4k/tracker/tracker.go
Normal 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),
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user