mirror of https://github.com/anoshenko/rui.git
Updated transition
This commit is contained in:
parent
9af68bc5f3
commit
f3f3ddb084
|
@ -4,7 +4,9 @@
|
|||
* The "interface{}" type replaced by "any"
|
||||
* Added "overflow", "arrow", "arrow-align", "arrow-size", "arrow-width", and "arrow-offset" properties
|
||||
* Added "@ruiArrowSize" and "@ruiArrowWidth" constants to the default theme
|
||||
* Added the GetOverflow function
|
||||
* Added Transition, Transitions, and SetTransition functions to the ViewStyle interface
|
||||
* Added GetOverflow, and GetTransitions functions
|
||||
* Changed GetTransition functions
|
||||
|
||||
# v0.8.0
|
||||
|
||||
|
|
77
animation.go
77
animation.go
|
@ -55,16 +55,19 @@ const (
|
|||
// The animation plays forwards each cycle. In other words, each time the animation cycles,
|
||||
// the animation will reset to the beginning state and start over again. This is the default value.
|
||||
NormalAnimation = 0
|
||||
|
||||
// ReverseAnimation is value of the "animation-direction" property.
|
||||
// The animation plays backwards each cycle. In other words, each time the animation cycles,
|
||||
// the animation will reset to the end state and start over again. Animation steps are performed
|
||||
// backwards, and timing functions are also reversed.
|
||||
// For example, an "ease-in" timing function becomes "ease-out".
|
||||
ReverseAnimation = 1
|
||||
|
||||
// AlternateAnimation is value of the "animation-direction" property.
|
||||
// The animation reverses direction each cycle, with the first iteration being played forwards.
|
||||
// The count to determine if a cycle is even or odd starts at one.
|
||||
AlternateAnimation = 2
|
||||
|
||||
// AlternateReverseAnimation is value of the "animation-direction" property.
|
||||
// The animation reverses direction each cycle, with the first iteration being played backwards.
|
||||
// The count to determine if a cycle is even or odd starts at one.
|
||||
|
@ -673,14 +676,38 @@ func (view *viewData) updateTransitionCSS() {
|
|||
updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.Session()), view.Session())
|
||||
}
|
||||
|
||||
func (view *viewData) getTransitions() Params {
|
||||
result := Params{}
|
||||
for tag, animation := range view.transitions {
|
||||
func (style *viewStyle) Transition(tag string) Animation {
|
||||
if style.transitions != nil {
|
||||
if anim, ok := style.transitions[tag]; ok {
|
||||
return anim
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (style *viewStyle) Transitions() map[string]Animation {
|
||||
result := map[string]Animation{}
|
||||
for tag, animation := range style.transitions {
|
||||
result[tag] = animation
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (style *viewStyle) SetTransition(tag string, animation Animation) {
|
||||
if animation == nil {
|
||||
delete(style.transitions, tag)
|
||||
} else {
|
||||
style.transitions[tag] = animation
|
||||
}
|
||||
}
|
||||
|
||||
func (view *viewData) SetTransition(tag string, animation Animation) {
|
||||
view.viewStyle.SetTransition(tag, animation)
|
||||
if view.created {
|
||||
updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.Session()), view.Session())
|
||||
}
|
||||
}
|
||||
|
||||
// SetAnimated sets the property with name "tag" of the "rootView" subview with "viewID" id by value. Result:
|
||||
// true - success,
|
||||
// false - error (incompatible type or invalid format of a string value, see AppLog).
|
||||
|
@ -697,38 +724,48 @@ func IsAnimationPaused(view View, subviewID string) bool {
|
|||
return boolStyledProperty(view, subviewID, AnimationPaused, false)
|
||||
}
|
||||
|
||||
// GetTransition returns the subview transitions. The result is always non-nil.
|
||||
// GetTransitions returns the subview transitions. The result is always non-nil.
|
||||
// If the second argument (subviewID) is "" then transitions of the first argument (view) is returned
|
||||
func GetTransition(view View, subviewID string) Params {
|
||||
func GetTransitions(view View, subviewID string) map[string]Animation {
|
||||
if subviewID != "" {
|
||||
view = ViewByID(view, subviewID)
|
||||
}
|
||||
|
||||
if view != nil {
|
||||
return view.getTransitions()
|
||||
return view.Transitions()
|
||||
}
|
||||
|
||||
return Params{}
|
||||
return map[string]Animation{}
|
||||
}
|
||||
|
||||
// GetTransition returns the subview property transition. If there is no transition for the given property then nil is returned.
|
||||
// If the second argument (subviewID) is "" then transitions of the first argument (view) is returned
|
||||
func GetTransition(view View, subviewID, tag string) Animation {
|
||||
if subviewID != "" {
|
||||
view = ViewByID(view, subviewID)
|
||||
}
|
||||
|
||||
if view != nil {
|
||||
return view.Transition(tag)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddTransition adds the transition for the subview property.
|
||||
// If the second argument (subviewID) is "" then the transition is added to the first argument (view)
|
||||
func AddTransition(view View, subviewID, tag string, animation Animation) bool {
|
||||
if tag == "" {
|
||||
return false
|
||||
}
|
||||
if tag != "" {
|
||||
if subviewID != "" {
|
||||
view = ViewByID(view, subviewID)
|
||||
}
|
||||
|
||||
if subviewID != "" {
|
||||
view = ViewByID(view, subviewID)
|
||||
if view != nil {
|
||||
view.SetTransition(tag, animation)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if view == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
transitions := view.getTransitions()
|
||||
transitions[tag] = animation
|
||||
return view.Set(Transition, transitions)
|
||||
return false
|
||||
}
|
||||
|
||||
// GetAnimation returns the subview animations. The result is always non-nil.
|
||||
|
|
|
@ -264,9 +264,22 @@ func (customView *CustomViewData) setScroll(x, y, width, height float64) {
|
|||
}
|
||||
}
|
||||
|
||||
func (customView *CustomViewData) getTransitions() Params {
|
||||
func (customView *CustomViewData) Transition(tag string) Animation {
|
||||
if customView.superView != nil {
|
||||
return customView.superView.getTransitions()
|
||||
return customView.superView.Transition(tag)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (customView *CustomViewData) Transitions() map[string]Animation {
|
||||
if customView.superView != nil {
|
||||
return customView.superView.Transitions()
|
||||
}
|
||||
return map[string]Animation{}
|
||||
}
|
||||
|
||||
func (customView *CustomViewData) SetTransition(tag string, animation Animation) {
|
||||
if customView.superView != nil {
|
||||
customView.superView.SetTransition(tag, animation)
|
||||
}
|
||||
return Params{}
|
||||
}
|
||||
|
|
|
@ -4,8 +4,8 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
var stopTestLogFlag = false
|
||||
var testLogDone chan int
|
||||
// var stopTestLogFlag = false
|
||||
// var testLogDone chan int
|
||||
var ignoreTestLog = false
|
||||
|
||||
func createTestLog(t *testing.T, ignore bool) {
|
||||
|
|
2
view.go
2
view.go
|
@ -71,8 +71,6 @@ type View interface {
|
|||
cssStyle(self View, builder cssBuilder)
|
||||
addToCSSStyle(addCSS map[string]string)
|
||||
|
||||
getTransitions() Params
|
||||
|
||||
onResize(self View, x, y, width, height float64)
|
||||
onItemResize(self View, index string, x, y, width, height float64)
|
||||
setNoResizeEvent()
|
||||
|
|
16
viewStyle.go
16
viewStyle.go
|
@ -10,6 +10,16 @@ import (
|
|||
// ViewStyle interface of the style of view
|
||||
type ViewStyle interface {
|
||||
Properties
|
||||
|
||||
// Transition returns the transition animation of the property. Returns nil is there is no transition animation.
|
||||
Transition(tag string) Animation
|
||||
// Transitions returns the map of transition animations. The result is always non-nil.
|
||||
Transitions() map[string]Animation
|
||||
// SetTransition sets the transition animation for the property if "animation" argument is not nil, and
|
||||
// removes the transition animation of the property if "animation" argument is nil.
|
||||
// The "tag" argument is the property name.
|
||||
SetTransition(tag string, animation Animation)
|
||||
|
||||
cssViewStyle(buffer cssBuilder, session Session)
|
||||
}
|
||||
|
||||
|
@ -741,7 +751,7 @@ func writePropertyValue(buffer *strings.Builder, tag string, value any, indent s
|
|||
if animation := value[tag]; animation != nil {
|
||||
buffer.WriteString(indent2)
|
||||
animation.writeTransitionString(tag, buffer)
|
||||
buffer.WriteString("\n")
|
||||
buffer.WriteString(",\n")
|
||||
}
|
||||
}
|
||||
buffer.WriteString(indent)
|
||||
|
@ -822,6 +832,10 @@ func writeViewStyle(name string, view ViewStyle, buffer *strings.Builder, indent
|
|||
}
|
||||
}
|
||||
|
||||
if transitions := view.Transitions(); len(transitions) > 0 {
|
||||
writeProperty(Transition, transitions)
|
||||
}
|
||||
|
||||
indent = indent[:len(indent)-1]
|
||||
buffer.WriteString(indent)
|
||||
buffer.WriteString("}")
|
||||
|
|
|
@ -47,8 +47,7 @@ func (container *viewsContainerData) setParentID(parentID string) {
|
|||
func (container *viewsContainerData) Views() []View {
|
||||
if container.views == nil {
|
||||
container.views = []View{}
|
||||
}
|
||||
if count := len(container.views); count > 0 {
|
||||
} else if count := len(container.views); count > 0 {
|
||||
views := make([]View, count)
|
||||
copy(views, container.views)
|
||||
return views
|
||||
|
|
Loading…
Reference in New Issue