mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-03 16:35:36 +00:00
example,cmd: bump gio version
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+12
-11
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user