aboutsummaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2022-06-20 18:26:58 -0230
committerSam Anthony <sam@samanthony.xyz>2022-06-20 18:26:58 -0230
commit2cc9053e108a649a302f5ecf0306b682d820d4e1 (patch)
treec10f3151e75c5b0bbf0f9a540527e7b6748b7603 /main.go
parent31605150d3e10b08dad2086005c64664f5648a51 (diff)
downloadvolute-staging.zip
use gio for uistaging
Diffstat (limited to 'main.go')
-rw-r--r--main.go140
1 files changed, 136 insertions, 4 deletions
diff --git a/main.go b/main.go
index be07b1b..d29fbc4 100644
--- a/main.go
+++ b/main.go
@@ -1,8 +1,18 @@
package main
import (
- "fmt"
+ "golang.org/x/exp/slices"
+ "log"
"os"
+
+ "gioui.org/app"
+ "gioui.org/font/gofont"
+ "gioui.org/io/system"
+ "gioui.org/layout"
+ "gioui.org/op"
+ "gioui.org/unit"
+ "gioui.org/widget"
+ "gioui.org/widget/material"
)
const (
@@ -11,9 +21,131 @@ const (
)
func main() {
- _, err := NewApp()
+ state, err := NewApp()
if err != nil {
- fmt.Println(err)
- os.Exit(1)
+ log.Fatal(err)
+ }
+
+ go func() {
+ w := app.NewWindow(
+ app.Title("Volute"),
+ )
+ if err := run(state, w); err != nil {
+ log.Fatal(err)
+ }
+ os.Exit(0)
+ }()
+ app.Main()
+}
+
+func run(s App, w *app.Window) error {
+ var ops op.Ops
+
+ th := material.NewTheme(gofont.Collection())
+ inset := layout.UniformInset(unit.Dp(2))
+
+ displacement := NewFloat(th)
+ displacement.Set(2000.0)
+
+ var rpm []Int
+ rpm = append(rpm, NewInt(th))
+ rpm[0].Set(2000)
+ var rpmList = layout.List{Axis: layout.Horizontal}
+
+ var duplicateButton []widget.Clickable
+ duplicateButton = append(duplicateButton, widget.Clickable{})
+ var duplicateButtonList = layout.List{Axis: layout.Horizontal}
+
+ var deleteButton []widget.Clickable
+ deleteButton = append(deleteButton, widget.Clickable{})
+ var deleteButtonList = layout.List{Axis: layout.Horizontal}
+
+ for {
+ e := <-w.Events()
+ switch e := e.(type) {
+ case system.DestroyEvent:
+ return e.Err
+ case system.FrameEvent:
+ gtx := layout.NewContext(&ops, e)
+
+ for i := range rpm {
+ if duplicateButton[i].Clicked() {
+ rpm = slices.Insert(rpm, i, rpm[i])
+ duplicateButton = slices.Insert(
+ duplicateButton,
+ i,
+ duplicateButton[i],
+ )
+ deleteButton = slices.Insert(
+ deleteButton,
+ i,
+ deleteButton[i],
+ )
+ break
+ }
+ if deleteButton[i].Clicked() && len(rpm) > 1 {
+ rpm = slices.Delete(rpm, i, i+1)
+ duplicateButton = slices.Delete(duplicateButton, i, i+1)
+ deleteButton = slices.Delete(deleteButton, i, i+1)
+ break
+ }
+ }
+
+ layout.Flex{
+ Axis: layout.Vertical,
+ }.Layout(gtx,
+ // Displacement
+ layout.Rigid(
+ func(gtx layout.Context) layout.Dimensions {
+ return inset.Layout(gtx,
+ func(gtx layout.Context) layout.Dimensions {
+ return displacement.Layout(gtx)
+ },
+ )
+ },
+ ),
+ // Rpm
+ layout.Rigid(
+ func(gtx layout.Context) layout.Dimensions {
+ return rpmList.Layout(gtx,
+ len(rpm),
+ func(gtx layout.Context, index int) layout.Dimensions {
+ return inset.Layout(gtx,
+ func(gtx layout.Context) layout.Dimensions {
+ return rpm[index].Layout(gtx)
+ },
+ )
+ },
+ )
+ },
+ ),
+ // Duplicate
+ layout.Rigid(
+ func(gtx layout.Context) layout.Dimensions {
+ return duplicateButtonList.Layout(gtx,
+ len(duplicateButton),
+ func(gtx layout.Context, i int) layout.Dimensions {
+ return material.Button(th, &duplicateButton[i], "Duplicate").
+ Layout(gtx)
+ },
+ )
+ },
+ ),
+ // Delete
+ layout.Rigid(
+ func(gtx layout.Context) layout.Dimensions {
+ return deleteButtonList.Layout(gtx,
+ len(deleteButton),
+ func(gtx layout.Context, i int) layout.Dimensions {
+ return material.Button(th, &deleteButton[i], "Delete").
+ Layout(gtx)
+ },
+ )
+ },
+ ),
+ )
+
+ e.Frame(gtx.Ops)
+ }
}
}