add(project): initial commit
This commit is contained in:
parent
f34565bf49
commit
cf17a4ec59
11 changed files with 628 additions and 0 deletions
101
internal/app/app.go
Normal file
101
internal/app/app.go
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"simple_ui/internal/components"
|
||||
"simple_ui/internal/ui"
|
||||
|
||||
"gioui.org/app"
|
||||
"gioui.org/layout"
|
||||
"gioui.org/op"
|
||||
"gioui.org/unit"
|
||||
"gioui.org/widget"
|
||||
"gioui.org/widget/material"
|
||||
"golang.org/x/exp/shiny/materialdesign/icons"
|
||||
)
|
||||
|
||||
func Run() {
|
||||
go runApp()
|
||||
app.Main()
|
||||
}
|
||||
|
||||
func runApp() {
|
||||
w := &app.Window{}
|
||||
|
||||
w.Option(
|
||||
app.Title("Simple UI"),
|
||||
app.Size(800, 600),
|
||||
app.MinSize(400, 300),
|
||||
)
|
||||
|
||||
err := runWindowEvents(w)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func runWindowEvents(window *app.Window) error {
|
||||
theme := material.NewTheme()
|
||||
var ops op.Ops
|
||||
currentPage := HomePage
|
||||
|
||||
navMenu := components.NewNavigationMenu(theme)
|
||||
|
||||
homeIcon, err := widget.NewIcon(icons.ActionHome)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create home icon: %v", err)
|
||||
}
|
||||
aboutIcon, err := widget.NewIcon(icons.ActionInfo)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create about icon: %v", err)
|
||||
}
|
||||
|
||||
navMenu.AddItem("Home", homeIcon, func() { currentPage = HomePage })
|
||||
navMenu.AddItem("About", aboutIcon, func() { currentPage = AboutPage })
|
||||
|
||||
navMenu.SetSelected(int(currentPage))
|
||||
|
||||
pages := []ui.Page{
|
||||
HomePage: ui.NewHomePage(theme),
|
||||
AboutPage: ui.NewAboutPage(theme),
|
||||
}
|
||||
|
||||
for {
|
||||
switch e := window.Event().(type) {
|
||||
case app.DestroyEvent:
|
||||
return e.Err
|
||||
case app.FrameEvent:
|
||||
gtx := app.NewContext(&ops, e)
|
||||
|
||||
navMenu.HandleClicks(gtx)
|
||||
navMenu.SetSelected(int(currentPage))
|
||||
|
||||
layout.Flex{
|
||||
Axis: layout.Horizontal,
|
||||
}.Layout(gtx,
|
||||
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||
return navMenu.Layout(gtx)
|
||||
}),
|
||||
layout.Flexed(1, func(gtx layout.Context) layout.Dimensions {
|
||||
return layout.Inset{
|
||||
Top: unit.Dp(16),
|
||||
Bottom: unit.Dp(16),
|
||||
Left: unit.Dp(16),
|
||||
Right: unit.Dp(16),
|
||||
}.Layout(gtx, func(gtx layout.Context) layout.Dimensions {
|
||||
return pages[currentPage].Layout(gtx)
|
||||
})
|
||||
}),
|
||||
)
|
||||
|
||||
e.Frame(gtx.Ops)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
HomePage = iota
|
||||
AboutPage
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue