forked from mbk-lab/rui_orig
143 lines
4.2 KiB
Go
143 lines
4.2 KiB
Go
package main
|
|
|
|
import "github.com/anoshenko/rui"
|
|
|
|
const animationDemoText = `
|
|
GridLayout {
|
|
style = demoPage,
|
|
content = [
|
|
AbsoluteLayout {
|
|
id = animationContainer, width = 100%, height = 100%,
|
|
content = [
|
|
View {
|
|
id = animatedView1, width = 32px, height = 32px, left = 16px, top = 16px, background-color = #FF0000FF
|
|
}
|
|
]
|
|
},
|
|
ListLayout {
|
|
style = optionsPanel,
|
|
content = [
|
|
GridLayout {
|
|
style = optionsTable,
|
|
content = [
|
|
TextView { row = 0, text = "Duration" },
|
|
DropDownList { row = 0, column = 1, id = animationDuration, current = 0, items = ["4s", "8s", "12s"]},
|
|
TextView { row = 1, text = "Delay" },
|
|
DropDownList { row = 1, column = 1, id = animationDelay, current = 0, items = ["0s", "1s", "2s"]},
|
|
TextView { row = 2, text = "Timing function" },
|
|
DropDownList { row = 2, column = 1, id = animationTimingFunction, current = 0, items = ["ease", "linear", "steps(40)"]},
|
|
TextView { row = 3, text = "Iteration Count" },
|
|
DropDownList { row = 3, column = 1, id = animationIterationCount, current = 0, items = ["1", "3", "infinite"]},
|
|
TextView { row = 4, text = "Direction" },
|
|
DropDownList { row = 4, column = 1, id = animationDirection, current = 0, items = ["normal", "reverse", "alternate", "alternate-reverse"]},
|
|
Button { row = 5, column = 0:1, id = animationStart, content = Start },
|
|
Button { row = 6, column = 0:1, id = animationPause, content = Pause },
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}`
|
|
|
|
func createAnimationDemo(session rui.Session) rui.View {
|
|
view := rui.CreateViewFromText(session, animationDemoText)
|
|
if view == nil {
|
|
return nil
|
|
}
|
|
|
|
rui.Set(view, "animationStart", rui.ClickEvent, func() {
|
|
frame := rui.GetViewFrame(view, "animationContainer")
|
|
prop1 := rui.AnimatedProperty{
|
|
Tag: rui.Left,
|
|
From: rui.Px(16),
|
|
To: rui.Px(16),
|
|
KeyFrames: map[int]interface{}{
|
|
25: rui.Px(frame.Width - 48),
|
|
50: rui.Px(frame.Width - 48),
|
|
75: rui.Px(16),
|
|
},
|
|
}
|
|
prop2 := rui.AnimatedProperty{
|
|
Tag: rui.Top,
|
|
From: rui.Px(16),
|
|
To: rui.Px(16),
|
|
KeyFrames: map[int]interface{}{
|
|
25: rui.Px(16),
|
|
50: rui.Px(frame.Height - 48),
|
|
75: rui.Px(frame.Height - 48),
|
|
},
|
|
}
|
|
prop3 := rui.AnimatedProperty{
|
|
Tag: rui.Rotate,
|
|
From: rui.Deg(0),
|
|
To: rui.Deg(360),
|
|
KeyFrames: map[int]interface{}{
|
|
25: rui.Deg(90),
|
|
50: rui.Deg(180),
|
|
75: rui.Deg(270),
|
|
},
|
|
}
|
|
|
|
params := rui.Params{
|
|
rui.PropertyTag: []rui.AnimatedProperty{prop1, prop2, prop3},
|
|
rui.Duration: rui.GetCurrent(view, "animationDuration") * 4,
|
|
rui.Delay: rui.GetCurrent(view, "animationDelay"),
|
|
rui.AnimationDirection: rui.GetCurrent(view, "animationDirection"),
|
|
}
|
|
|
|
switch rui.GetCurrent(view, "animationTimingFunction") {
|
|
case 0:
|
|
params[rui.TimingFunction] = rui.EaseTiming
|
|
|
|
case 1:
|
|
params[rui.TimingFunction] = rui.LinearTiming
|
|
|
|
case 2:
|
|
params[rui.TimingFunction] = rui.StepsTiming(40)
|
|
}
|
|
|
|
switch rui.GetCurrent(view, "animationIterationCount") {
|
|
case 0:
|
|
params[rui.IterationCount] = 1
|
|
|
|
case 1:
|
|
params[rui.IterationCount] = 3
|
|
|
|
case 2:
|
|
params[rui.IterationCount] = -1
|
|
}
|
|
|
|
rui.Set(view, "animatedView1", rui.AnimationTag, rui.NewAnimation(params))
|
|
})
|
|
|
|
rui.Set(view, "animationPause", rui.ClickEvent, func() {
|
|
if rui.IsAnimationPaused(view, "animatedView1") {
|
|
rui.Set(view, "animatedView1", rui.AnimationPaused, false)
|
|
rui.Set(view, "animationPause", rui.Content, "Pause")
|
|
} else {
|
|
rui.Set(view, "animatedView1", rui.AnimationPaused, true)
|
|
rui.Set(view, "animationPause", rui.Content, "Resume")
|
|
}
|
|
})
|
|
|
|
rui.Set(view, "animatedView1", rui.AnimationStartEvent, func() {
|
|
rui.Set(view, "animatedView1", rui.AnimationPaused, false)
|
|
rui.Set(view, "animationPause", rui.Content, "Pause")
|
|
})
|
|
|
|
rui.Set(view, "animatedView1", rui.AnimationEndEvent, func() {
|
|
rui.Set(view, "animatedView1", rui.AnimationPaused, false)
|
|
rui.Set(view, "animationPause", rui.Content, "Pause")
|
|
})
|
|
|
|
rui.Set(view, "animatedView1", rui.AnimationCancelEvent, func() {
|
|
rui.Set(view, "animatedView1", rui.AnimationPaused, false)
|
|
rui.Set(view, "animationPause", rui.Content, "Pause")
|
|
})
|
|
|
|
rui.Set(view, "animatedView1", rui.AnimationIterationEvent, func() {
|
|
})
|
|
|
|
return view
|
|
}
|