example,cmd: bump gio version

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-05-23 19:54:27 +02:00
parent 2451750782
commit d8000880c3
13 changed files with 236 additions and 216 deletions
+12 -11
View File
@@ -26,13 +26,13 @@ type Slider struct {
}
// PushLeft pushes the existing widget to the left.
func (s *Slider) PushLeft(gtx *layout.Context) { s.push = 1 }
func (s *Slider) PushLeft() { s.push = 1 }
// PushRight pushes the existing widget to the right.
func (s *Slider) PushRight(gtx *layout.Context) { s.push = -1 }
func (s *Slider) PushRight() { s.push = -1 }
// Layout lays out widget that can be pushed.
func (s *Slider) Layout(gtx *layout.Context, w layout.Widget) {
func (s *Slider) Layout(gtx layout.Context, w layout.Widget) layout.Dimensions {
if s.push != 0 {
s.last, s.next = s.next, new(op.Ops)
s.offset = float32(s.push)
@@ -68,20 +68,20 @@ func (s *Slider) Layout(gtx *layout.Context, w layout.Widget) {
op.InvalidateOp{}.Add(gtx.Ops)
}
var dims layout.Dimensions
{
prev := gtx.Ops
if s.next == nil {
s.next = new(op.Ops)
}
s.next.Reset()
gtx := gtx
gtx.Ops = s.next
w()
gtx.Ops = prev
dims = w(gtx)
}
if s.offset == 0 {
op.CallOp{Ops: s.next}.Add(gtx.Ops)
return
return dims
}
var stack op.StackOp
@@ -92,25 +92,26 @@ func (s *Slider) Layout(gtx *layout.Context, w layout.Widget) {
if s.offset > 0 {
op.TransformOp{}.Offset(f32.Point{
X: float32(gtx.Dimensions.Size.X) * (offset - 1),
X: float32(dims.Size.X) * (offset - 1),
}).Add(gtx.Ops)
op.CallOp{Ops: s.last}.Add(gtx.Ops)
op.TransformOp{}.Offset(f32.Point{
X: float32(gtx.Dimensions.Size.X),
X: float32(dims.Size.X),
}).Add(gtx.Ops)
op.CallOp{Ops: s.next}.Add(gtx.Ops)
} else {
op.TransformOp{}.Offset(f32.Point{
X: float32(gtx.Dimensions.Size.X) * (offset + 1),
X: float32(dims.Size.X) * (offset + 1),
}).Add(gtx.Ops)
op.CallOp{Ops: s.last}.Add(gtx.Ops)
op.TransformOp{}.Offset(f32.Point{
X: float32(-gtx.Dimensions.Size.X),
X: float32(-dims.Size.X),
}).Add(gtx.Ops)
op.CallOp{Ops: s.next}.Add(gtx.Ops)
}
return dims
}
// smooth handles -1 to 1 with ease-in-out cubic easing func.
+32 -25
View File
@@ -13,6 +13,7 @@ import (
"gioui.org/f32"
"gioui.org/io/system"
"gioui.org/layout"
"gioui.org/op"
"gioui.org/op/paint"
"gioui.org/unit"
"gioui.org/widget"
@@ -34,14 +35,14 @@ func main() {
func loop(w *app.Window) error {
gofont.Register()
th := material.NewTheme()
gtx := new(layout.Context)
var ops op.Ops
for {
e := <-w.Events()
switch e := e.(type) {
case system.DestroyEvent:
return e.Err
case system.FrameEvent:
gtx.Reset(e.Queue, e.Config, e.Size)
gtx := layout.NewContext(&ops, e.Queue, e.Config, e.Size)
drawTabs(gtx, th)
e.Frame(gtx.Ops)
}
@@ -70,32 +71,38 @@ func init() {
}
}
func drawTabs(gtx *layout.Context, th *material.Theme) {
layout.Flex{Axis: layout.Vertical}.Layout(gtx,
layout.Rigid(func() {
tabs.list.Layout(gtx, len(tabs.tabs), func(tabIdx int) {
type (
C = layout.Context
D = layout.Dimensions
)
func drawTabs(gtx layout.Context, th *material.Theme) layout.Dimensions {
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
layout.Rigid(func(gtx C) D {
return tabs.list.Layout(gtx, len(tabs.tabs), func(gtx C, tabIdx int) D {
t := &tabs.tabs[tabIdx]
if t.btn.Clicked(gtx) {
if tabs.selected < tabIdx {
slider.PushLeft(gtx)
slider.PushLeft()
} else if tabs.selected > tabIdx {
slider.PushRight(gtx)
slider.PushRight()
}
tabs.selected = tabIdx
}
var tabWidth int
layout.Stack{Alignment: layout.S}.Layout(gtx,
layout.Stacked(func() {
material.Clickable(gtx, &t.btn, func() {
layout.UniformInset(unit.Sp(12)).Layout(gtx, func() {
material.H6(th, t.Title).Layout(gtx)
})
return layout.Stack{Alignment: layout.S}.Layout(gtx,
layout.Stacked(func(gtx C) D {
dims := material.Clickable(gtx, &t.btn, func(gtx C) D {
return layout.UniformInset(unit.Sp(12)).Layout(gtx,
material.H6(th, t.Title).Layout,
)
})
tabWidth = gtx.Dimensions.Size.X
tabWidth = dims.Size.X
return dims
}),
layout.Stacked(func() {
layout.Stacked(func(gtx C) D {
if tabs.selected != tabIdx {
return
return layout.Dimensions{}
}
paint.ColorOp{Color: th.Color.Primary}.Add(gtx.Ops)
tabHeight := gtx.Px(unit.Dp(4))
@@ -105,25 +112,25 @@ func drawTabs(gtx *layout.Context, th *material.Theme) {
Y: float32(tabHeight),
},
}}.Add(gtx.Ops)
gtx.Dimensions = layout.Dimensions{
return layout.Dimensions{
Size: image.Point{X: tabWidth, Y: tabHeight},
}
}),
)
})
}),
layout.Flexed(1, func() {
slider.Layout(gtx, func() {
layout.Flexed(1, func(gtx C) D {
return slider.Layout(gtx, func(gtx C) D {
fill(gtx, dynamicColor(tabs.selected))
layout.Center.Layout(gtx, func() {
material.H1(th, fmt.Sprintf("Tab content #%d", tabs.selected+1)).Layout(gtx)
})
return layout.Center.Layout(gtx,
material.H1(th, fmt.Sprintf("Tab content #%d", tabs.selected+1)).Layout,
)
})
}),
)
}
func bounds(gtx *layout.Context) f32.Rectangle {
func bounds(gtx layout.Context) f32.Rectangle {
cs := gtx.Constraints
d := cs.Min
return f32.Rectangle{
@@ -131,7 +138,7 @@ func bounds(gtx *layout.Context) f32.Rectangle {
}
}
func fill(gtx *layout.Context, col color.RGBA) {
func fill(gtx layout.Context, col color.RGBA) {
dr := bounds(gtx)
paint.ColorOp{Color: col}.Add(gtx.Ops)
paint.PaintOp{Rect: dr}.Add(gtx.Ops)