Added NewTransitionAnimation, NewAnimation

This commit is contained in:
Alexei Anoshenko 2024-12-06 19:52:57 +03:00
parent 0c2bea9a75
commit 28881bac9a
6 changed files with 114 additions and 20 deletions

View File

@ -28,11 +28,12 @@
NewViewFilter function -> NewFilterProperty NewViewFilter function -> NewFilterProperty
Animation interface -> AnimationProperty Animation interface -> AnimationProperty
AnimationTag constant -> Animation AnimationTag constant -> Animation
NewAnimation function -> NewAnimationProperty
* Added functions: NewBounds, NewEllipticRadius, NewRadii, NewLinearGradient, NewCircleRadialGradient, * Added functions: NewBounds, NewEllipticRadius, NewRadii, NewLinearGradient, NewCircleRadialGradient,
NewEllipseRadialGradient, GetPushTransform, GetPushDuration, GetPushTiming, IsMoveToFrontAnimation, NewEllipseRadialGradient, GetPushTransform, GetPushDuration, GetPushTiming, IsMoveToFrontAnimation,
GetBackground, GetMask, GetBackgroundClip,GetBackgroundOrigin, GetMaskClip, GetMaskOrigin, NewColumnSeparator, GetBackground, GetMask, GetBackgroundClip,GetBackgroundOrigin, GetMaskClip, GetMaskOrigin, NewColumnSeparator,
NewClipShapeProperty. NewClipShapeProperty, NewTransitionAnimation, NewAnimation.
* Added SetConicGradientFillStyle and SetConicGradientStrokeStyle methods to Canvas interface. * Added SetConicGradientFillStyle and SetConicGradientStrokeStyle methods to Canvas interface.

View File

@ -5043,7 +5043,7 @@ onNo или onCancel (если она не nil).
Для задания параметров анимации используется интерфейс AnimationProperty. Он расширяет интерфейс Properties. Для задания параметров анимации используется интерфейс AnimationProperty. Он расширяет интерфейс Properties.
Интерфейс создается с помощью функции: Интерфейс создается с помощью функции:
func NewAnimation(params Params) AnimationProperty func NewAnimationProperty(params Params) AnimationProperty
Часть свойств интерфейса AnimationProperty используется в обоих типах анимации, остальные используются Часть свойств интерфейса AnimationProperty используется в обоих типах анимации, остальные используются
только в сценариях анимации. только в сценариях анимации.
@ -5082,13 +5082,13 @@ onNo или onCancel (если она не nil).
Например Например
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.TimingFunction: rui.StepsTiming(10), rui.TimingFunction: rui.StepsTiming(10),
}) })
эквивалентно эквивалентно
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.TimingFunction: "steps(10)", rui.TimingFunction: "steps(10)",
}) })
@ -5117,7 +5117,7 @@ x1 и x2 должны быть в диапазоне [0, 1]. Вы можете
Она присваивает свойству новое значение, при этом изменение происходит с использованием заданной анимации. Она присваивает свойству новое значение, при этом изменение происходит с использованием заданной анимации.
Например, Например,
view.SetAnimated(rui.Width, rui.Px(400), rui.NewAnimation(rui.Params{ view.SetAnimated(rui.Width, rui.Px(400), rui.NewAnimationProperty(rui.Params{
rui.Duration: 0.75, rui.Duration: 0.75,
rui.TimingFunction: rui.EaseOutTiming, rui.TimingFunction: rui.EaseOutTiming,
})) }))
@ -5132,11 +5132,11 @@ x1 и x2 должны быть в диапазоне [0, 1]. Вы можете
Например, Например,
view.Set(rui.Transition, rui.Params{ view.Set(rui.Transition, rui.Params{
rui.Height: rui.NewAnimation(rui.Params{ rui.Height: rui.NewAnimationProperty(rui.Params{
rui.Duration: 0.75, rui.Duration: 0.75,
rui.TimingFunction: rui.EaseOutTiming, rui.TimingFunction: rui.EaseOutTiming,
}, },
rui.BackgroundColor: rui.NewAnimation(rui.Params{ rui.BackgroundColor: rui.NewAnimationProperty(rui.Params{
rui.Duration: 1.5, rui.Duration: 1.5,
rui.Delay: 0.5, rui.Delay: 0.5,
rui.TimingFunction: rui.Linear, rui.TimingFunction: rui.Linear,
@ -5273,7 +5273,7 @@ KeyFrames - промежуточные значения свойства (клю
90: rui.Px(220), 90: rui.Px(220),
} }
} }
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.PropertyTag: []rui.AnimatedProperty{prop}, rui.PropertyTag: []rui.AnimatedProperty{prop},
rui.Duration: 2, rui.Duration: 2,
rui.TimingFunction: LinearTiming, rui.TimingFunction: LinearTiming,

View File

@ -5014,7 +5014,7 @@ The library supports two types of animation:
The AnimationProperty interface is used to set animation parameters. It extends the Properties interface. The AnimationProperty interface is used to set animation parameters. It extends the Properties interface.
The interface is created using the function: The interface is created using the function:
func NewAnimation(params Params) AnimationProperty func NewAnimationProperty(params Params) AnimationProperty
Some of the properties of the AnimationProperty interface are used in both types of animation, the rest are used only Some of the properties of the AnimationProperty interface are used in both types of animation, the rest are used only
in animation scripts. in animation scripts.
@ -5053,13 +5053,13 @@ You can specify this function either as text or using the function:
For example For example
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.TimingFunction: rui.StepsTiming(10), rui.TimingFunction: rui.StepsTiming(10),
}) })
equivalent to equivalent to
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.TimingFunction: "steps(10)", rui.TimingFunction: "steps(10)",
}) })
@ -5087,7 +5087,7 @@ This function has the following description:
It assigns a new value to the property, and the change occurs using the specified animation. It assigns a new value to the property, and the change occurs using the specified animation.
For example, For example,
view.SetAnimated(rui.Width, rui.Px(400), rui.NewAnimation(rui.Params{ view.SetAnimated(rui.Width, rui.Px(400), rui.NewAnimationProperty(rui.Params{
rui.Duration: 0.75, rui.Duration: 0.75,
rui.TimingFunction: rui.EaseOutTiming, rui.TimingFunction: rui.EaseOutTiming,
})) }))
@ -5103,11 +5103,11 @@ and the value should be the AnimationProperty interface.
For example, For example,
view.Set(rui.Transition, rui.Params{ view.Set(rui.Transition, rui.Params{
rui.Height: rui.NewAnimation(rui.Params{ rui.Height: rui.NewAnimationProperty(rui.Params{
rui.Duration: 0.75, rui.Duration: 0.75,
rui.TimingFunction: rui.EaseOutTiming, rui.TimingFunction: rui.EaseOutTiming,
}, },
rui.BackgroundColor: rui.NewAnimation(rui.Params{ rui.BackgroundColor: rui.NewAnimationProperty(rui.Params{
rui.Duration: 1.5, rui.Duration: 1.5,
rui.Delay: 0.5, rui.Delay: 0.5,
rui.TimingFunction: rui.Linear, rui.TimingFunction: rui.Linear,
@ -5246,7 +5246,7 @@ Example,
90: rui.Px(220), 90: rui.Px(220),
} }
} }
animation := rui.NewAnimation(rui.Params{ animation := rui.NewAnimationProperty(rui.Params{
rui.PropertyTag: []rui.AnimatedProperty{prop}, rui.PropertyTag: []rui.AnimatedProperty{prop},
rui.Duration: 2, rui.Duration: 2,
rui.TimingFunction: LinearTiming, rui.TimingFunction: LinearTiming,

View File

@ -256,8 +256,19 @@ func parseAnimation(obj DataObject) AnimationProperty {
return animation return animation
} }
// NewAnimation creates a new animation object and return its interface // NewAnimationProperty creates a new animation object and return its interface
func NewAnimation(params Params) AnimationProperty { //
// The following properties can be used:
// - "id" (ID) - specifies the animation identifier. Used only for animation script.
// - "duration" (Duration) - specifies the length of time in seconds that an animation takes to complete one cycle;
// - "delay" (Delay) - specifies the amount of time in seconds to wait from applying the animation to an element before beginning to perform
// the animation. The animation can start later, immediately from its beginning or immediately and partway through the animation;
// - "timing-function" (TimingFunction) - specifies how an animation progresses through the duration of each cycle;
// - "iteration-count" (IterationCount) - specifies the number of times an animation sequence should be played before stopping. Used only for animation script;
// - "animation-direction" (AnimationDirection) - specifies whether an animation should play forward, backward,
// or alternate back and forth between playing the sequence forward and backward. Used only for animation script;
// - "property" (PropertyTag) - describes a scenario for changing a View's property. Used only for animation script.
func NewAnimationProperty(params Params) AnimationProperty {
animation := new(animationData) animation := new(animationData)
animation.init() animation.init()
@ -267,6 +278,88 @@ func NewAnimation(params Params) AnimationProperty {
return animation return animation
} }
// NewTransitionAnimation creates animation data for the transition.
// - timingFunc - specifies how an animation progresses through the duration of each cycle. If it is "" then "easy" function is used;
// - duration - specifies the length of time in seconds that an animation takes to complete one cycle. Must be > 0;
// - delay - specifies the amount of time in seconds to wait from applying the animation to an element before beginning to perform
// the animation. The animation can start later, immediately from its beginning or immediately and partway through the animation.
func NewTransitionAnimation(timingFunc string, duration float64, delay float64) AnimationProperty {
animation := new(animationData)
animation.init()
if duration <= 0 {
ErrorLog("Animation duration must be greater than 0")
return nil
}
if !animation.Set(Duration, duration) {
return nil
}
if timingFunc != "" {
if !animation.Set(TimingFunction, timingFunc) {
return nil
}
}
if delay != 0 {
animation.Set(Delay, delay)
}
return animation
}
// NewTransitionAnimation creates the animation scenario.
// - id - specifies the animation identifier.
// - timingFunc - specifies how an animation progresses through the duration of each cycle. If it is "" then "easy" function is used;
// - duration - specifies the length of time in seconds that an animation takes to complete one cycle. Must be > 0;
// - delay - specifies the amount of time in seconds to wait from applying the animation to an element before beginning to perform
// the animation. The animation can start later, immediately from its beginning or immediately and partway through the animation.
// - direction - specifies whether an animation should play forward, backward,
// or alternate back and forth between playing the sequence forward and backward. Only the following values can be used:
// 0 (NormalAnimation), 1 (ReverseAnimation), 2 (AlternateAnimation), and 3 (AlternateReverseAnimation);
// - iterationCount - specifies the number of times an animation sequence should be played before stopping;
// - property - describes a scenario for changing a View's property.
func NewAnimation(id string, timingFunc string, duration float64, delay float64, direction int, iterationCount int, property ...AnimatedProperty) AnimationProperty {
animation := new(animationData)
animation.init()
if duration <= 0 {
ErrorLog("Animation duration must be greater than 0")
return nil
}
if !animation.Set(Duration, duration) {
return nil
}
if id != "" {
animation.Set(ID, id)
}
if timingFunc != "" {
animation.Set(TimingFunction, timingFunc)
}
if delay != 0 {
animation.Set(Delay, delay)
}
if direction > 0 {
animation.Set(AnimationDirection, direction)
}
if iterationCount > 0 {
animation.Set(IterationCount, iterationCount)
}
if len(property) > 0 {
animation.Set(PropertyTag, property)
}
return animation
}
func (animation *animationData) init() { func (animation *animationData) init() {
animation.dataProperty.init() animation.dataProperty.init()
animation.normalize = normalizeAnimation animation.normalize = normalizeAnimation

View File

@ -797,7 +797,7 @@ func (popup *popupData) init(view View, popupParams Params) {
popup.layerView = NewGridLayout(session, layerParams) popup.layerView = NewGridLayout(session, layerParams)
if popup.showOpacity != 1 || popup.showTransform != nil { if popup.showOpacity != 1 || popup.showTransform != nil {
animation := NewAnimation(Params{ animation := NewAnimationProperty(Params{
Duration: popup.showDuration, Duration: popup.showDuration,
TimingFunction: popup.showTiming, TimingFunction: popup.showTiming,
}) })

View File

@ -6,14 +6,14 @@ type PropertyName string
const ( const (
// ID is the constant for "id" property tag. // ID is the constant for "id" property tag.
// //
// # Used by View, Animation. // # Used by View, AnimationProperty.
// //
// Usage in View: // Usage in View:
// Optional textual identifier for the view. Used to reference view from source code if needed. // Optional textual identifier for the view. Used to reference view from source code if needed.
// //
// Supported types: string. // Supported types: string.
// //
// # Usage in Animation: // # Usage in AnimationProperty:
// //
// Specifies the animation identifier. Used only for animation script. // Specifies the animation identifier. Used only for animation script.
// //