mirror of https://github.com/anoshenko/rui.git
* Added "push-perspective", "push-rotate-x", "push-rotate-y", "push-rotate-z", "push-rotate", "push-skew-x", "push-skew-y", "push-scale-x", "push-scale-y", "push-scale-z", "push-translate-x", "push-translate-y", "push-translate-z" properties.
This commit is contained in:
parent
bdc8472600
commit
5cc4475370
|
@ -7,6 +7,8 @@
|
|||
* Changed Push and Pop method of StackLayout interface.
|
||||
* Removed DefaultAnimation, StartToEndAnimation, EndToStartAnimation, TopDownAnimation, and BottomUpAnimation constants.
|
||||
* Added "push-transform", "push-duration", "push-timing", and "move-to-front-animation" properties.
|
||||
* Added "push-perspective", "push-rotate-x", "push-rotate-y", "push-rotate-z", "push-rotate", "push-skew-x", "push-skew-y",
|
||||
"push-scale-x", "push-scale-y", "push-scale-z", "push-translate-x", "push-translate-y", "push-translate-z" properties.
|
||||
* Added GetPushTransform, GetPushDuration, GetPushTiming, and IsMoveToFrontAnimation functions.
|
||||
* Added LineJoin type. Type of constants MiterJoin, RoundJoin, and BevelJoin changed to LineJoin. Type of Canvas.SetLineJoin function argument changed to LineJoin.
|
||||
* Added LineCap type. Type of constants ButtCap, RoundCap, and SquareCap changed to LineCap. Type of Canvas.SetLineCap function argument changed to LineCap.
|
||||
|
|
198
stackLayout.go
198
stackLayout.go
|
@ -58,6 +58,191 @@ const (
|
|||
// `true` or `1` or "true", "yes", "on", "1" - animation is used (default value).
|
||||
// `false` or `0` or "false", "no", "off", "0" - animation is not used.
|
||||
MoveToFrontAnimation = "move-to-front-animation"
|
||||
|
||||
// PushPerspective is the constant for "push-perspective" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "perspective" property of StackLayout "push-transform" property:
|
||||
// Distance between the z-plane and the user in order to give a 3D-positioned element some perspective. Each 3D element
|
||||
// with z > 0 becomes larger, each 3D-element with z < 0 becomes smaller. The default value is 0 (no 3D effects).
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
PushPerspective PropertyName = "push-perspective"
|
||||
|
||||
// PushTranslateX is the constant for "push-translate-x" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "translate-x" property of StackLayout "push-transform" property:
|
||||
// x-axis translation value of a 2D/3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
PushTranslateX PropertyName = "push-translate-x"
|
||||
|
||||
// PushTranslateY is the constant for "push-translate-y" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "translate-y" property of StackLayout "push-transform" property:
|
||||
// y-axis translation value of a 2D/3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
PushTranslateY PropertyName = "push-translate-y"
|
||||
|
||||
// PushTranslateZ is the constant for "push-translate-z" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "translate-z" property of StackLayout "push-transform" property:
|
||||
// z-axis translation value of a 3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
PushTranslateZ PropertyName = "push-translate-z"
|
||||
|
||||
// PushScaleX is the constant for "push-scale-x" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "scale-x" property of StackLayout "push-transform" property:
|
||||
// x-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushScaleX PropertyName = "push-scale-x"
|
||||
|
||||
// PushScaleY is the constant for "push-scale-y" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "scale-y" property of StackLayout "push-transform" property:
|
||||
// y-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushScaleY PropertyName = "push-scale-y"
|
||||
|
||||
// PushScaleZ is the constant for "push-scale-z" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "scale-z" property of StackLayout "push-transform" property:
|
||||
// z-axis scaling value of a 3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushScaleZ PropertyName = "push-scale-z"
|
||||
|
||||
// PushRotate is the constant for "push-rotate" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "rotate" property of StackLayout "push-transform" property:
|
||||
// Angle of the view rotation. A positive angle denotes a clockwise rotation, a negative angle a counter-clockwise.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `AngleUnit`, other types will be converted to it during assignment.
|
||||
// See `AngleUnit` description for more details.
|
||||
//
|
||||
// Conversion rules:
|
||||
// `AngleUnit` - stored as is, no conversion performed.
|
||||
// `string` - must contain string representation of `AngleUnit`. If numeric value will be provided without any suffix then `AngleUnit` with value and `Radian` value type will be created.
|
||||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
PushRotate PropertyName = "push-rotate"
|
||||
|
||||
// PushRotateX is the constant for "push-rotate-x" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "rotate-x" property of StackLayout "push-transform" property:
|
||||
// x-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushRotateX PropertyName = "push-rotate-x"
|
||||
|
||||
// PushRotateY is the constant for "push-rotate-y" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "rotate-y" property of StackLayout "push-transform" property:
|
||||
// y-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushRotateY PropertyName = "push-rotate-y"
|
||||
|
||||
// PushRotateZ is the constant for "push-rotate-z" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "rotate-z" property of StackLayout "push-transform" property:
|
||||
// z-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
PushRotateZ PropertyName = "push-rotate-z"
|
||||
|
||||
// PushSkewX is the constant for "push-skew-x" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "skew-x" property of StackLayout "push-transform" property:
|
||||
// Angle to use to distort the element along the abscissa. The default value is 0.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `AngleUnit`, other types will be converted to it during assignment.
|
||||
// See `AngleUnit` description for more details.
|
||||
//
|
||||
// Conversion rules:
|
||||
// `AngleUnit` - stored as is, no conversion performed.
|
||||
// `string` - must contain string representation of `AngleUnit`. If numeric value will be provided without any suffix then `AngleUnit` with value and `Radian` value type will be created.
|
||||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
PushSkewX PropertyName = "push-skew-x"
|
||||
|
||||
// PushSkewY is the constant for "push-skew-y" property tag.
|
||||
//
|
||||
// Used by `StackLayout`.
|
||||
//
|
||||
// Used to access the "skew-y" property of StackLayout "push-transform" property:
|
||||
// Angle to use to distort the element along the ordinate. The default value is 0.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
//
|
||||
// Internal type is `AngleUnit`, other types will be converted to it during assignment.
|
||||
// See `AngleUnit` description for more details.
|
||||
//
|
||||
// Conversion rules:
|
||||
// `AngleUnit` - stored as is, no conversion performed.
|
||||
// `string` - must contain string representation of `AngleUnit`. If numeric value will be provided without any suffix then `AngleUnit` with value and `Radian` value type will be created.
|
||||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
PushSkewY PropertyName = "push-skew-y"
|
||||
)
|
||||
|
||||
// StackLayout represents a StackLayout view
|
||||
|
@ -137,6 +322,7 @@ func (layout *stackLayoutData) init(session Session) {
|
|||
layout.onMoveFinished = map[string]popFinished{}
|
||||
layout.set = layout.setFunc
|
||||
layout.remove = layout.removeFunc
|
||||
layout.changed = layout.propertyChanged
|
||||
|
||||
layout.setRaw(TransitionEndEvent, []func(View, PropertyName){layout.transitionFinished})
|
||||
if session.TextDirection() == RightToLeftDirection {
|
||||
|
@ -253,6 +439,18 @@ func (layout *stackLayoutData) setFunc(tag PropertyName, value any) []PropertyNa
|
|||
return layout.viewsContainerData.setFunc(tag, value)
|
||||
}
|
||||
|
||||
func (layout *stackLayoutData) propertyChanged(tag PropertyName) {
|
||||
switch tag {
|
||||
case PushTransform, PushTiming, PushDuration, MoveToFrontAnimation,
|
||||
PushPerspective, PushRotateX, PushRotateY, PushRotateZ, PushRotate, PushSkewX, PushSkewY,
|
||||
PushScaleX, PushScaleY, PushScaleZ, PushTranslateX, PushTranslateY, PushTranslateZ:
|
||||
// do nothing
|
||||
|
||||
default:
|
||||
layout.viewsContainerData.propertyChanged(tag)
|
||||
}
|
||||
}
|
||||
|
||||
func (layout *stackLayoutData) removeFunc(tag PropertyName) []PropertyName {
|
||||
switch tag {
|
||||
case TransitionEndEvent:
|
||||
|
|
86
transform.go
86
transform.go
|
@ -19,12 +19,12 @@ const (
|
|||
//
|
||||
// Conversion rules:
|
||||
// `TransformProperty` - stored as is, no conversion performed.
|
||||
// `string` - string representation of `Transform` interface. Example: "_{translate-x = 10px, scale-y = 1.1}".
|
||||
// `string` - string representation of `TransformProperty` interface. Example: "_{translate-x = 10px, scale-y = 1.1}".
|
||||
Transform PropertyName = "transform"
|
||||
|
||||
// Perspective is the constant for "perspective" property tag.
|
||||
//
|
||||
// Used by `View`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
// Distance between the z-plane and the user in order to give a 3D-positioned element some perspective. Each 3D element
|
||||
// with z > 0 becomes larger, each 3D-element with z < 0 becomes smaller. The default value is 0 (no 3D effects).
|
||||
//
|
||||
|
@ -70,7 +70,7 @@ const (
|
|||
// `false` or `0` or "false", "no", "off", "0" - Back face is hidden, effectively making the view invisible when turned away from the user.
|
||||
BackfaceVisible PropertyName = "backface-visibility"
|
||||
|
||||
// OriginX is the constant for "origin-x" property tag.
|
||||
// TransformOriginX is the constant for "transform-origin-x" property tag.
|
||||
//
|
||||
// Used by `View`.
|
||||
// x-coordinate of the point around which a view transformation is applied. The default value is 50%.
|
||||
|
@ -81,7 +81,7 @@ const (
|
|||
// See `SizeUnit` description for more details.
|
||||
TransformOriginX PropertyName = "transform-origin-x"
|
||||
|
||||
// OriginY is the constant for "origin-y" property tag.
|
||||
// TransformOriginY is the constant for "transform-origin-y" property tag.
|
||||
//
|
||||
// Used by `View`.
|
||||
// y-coordinate of the point around which a view transformation is applied. The default value is 50%.
|
||||
|
@ -92,7 +92,7 @@ const (
|
|||
// See `SizeUnit` description for more details.
|
||||
TransformOriginY PropertyName = "transform-origin-y"
|
||||
|
||||
// OriginZ is the constant for "origin-z" property tag.
|
||||
// TransformOriginZ is the constant for "transform-origin-z" property tag.
|
||||
//
|
||||
// Used by `View`.
|
||||
// z-coordinate of the point around which a view transformation is applied. The default value is 50%.
|
||||
|
@ -105,7 +105,7 @@ const (
|
|||
|
||||
// TranslateX is the constant for "translate-x" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// x-axis translation value of a 2D/3D translation.
|
||||
|
@ -115,7 +115,7 @@ const (
|
|||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// x-axis translation value of a 2D/3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
|
@ -126,7 +126,7 @@ const (
|
|||
|
||||
// TranslateY is the constant for "translate-y" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// y-axis translation value of a 2D/3D translation.
|
||||
|
@ -136,7 +136,7 @@ const (
|
|||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// x-axis translation value of a 2D/3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
|
@ -147,7 +147,7 @@ const (
|
|||
|
||||
// TranslateZ is the constant for "translate-z" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// z-axis translation value of a 3D translation.
|
||||
|
@ -157,7 +157,7 @@ const (
|
|||
// Internal type is `SizeUnit`, other types converted to it during assignment.
|
||||
// See `SizeUnit` description for more details.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// z-axis translation value of a 3D translation.
|
||||
//
|
||||
// Supported types: `SizeUnit`, `SizeFunc`, `string`, `float`, `int`.
|
||||
|
@ -168,7 +168,7 @@ const (
|
|||
|
||||
// ScaleX is the constant for "scale-x" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// x-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
|
@ -178,7 +178,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// x-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
|
@ -189,7 +189,7 @@ const (
|
|||
|
||||
// ScaleY is the constant for "scale-y" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// y-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
|
@ -199,7 +199,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// y-axis scaling value of a 2D/3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
|
@ -210,7 +210,7 @@ const (
|
|||
|
||||
// ScaleZ is the constant for "scale-z" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// z-axis scaling value of a 3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
|
@ -220,7 +220,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// z-axis scaling value of a 3D scale. The original scale is 1. Values between 0 and 1 are used to decrease original
|
||||
// scale, more than 1 - to increase. The default value is 1.
|
||||
//
|
||||
|
@ -231,7 +231,7 @@ const (
|
|||
|
||||
// Rotate is the constant for "rotate" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// Angle of the view rotation. A positive angle denotes a clockwise rotation, a negative angle a counter-clockwise.
|
||||
|
@ -247,7 +247,7 @@ const (
|
|||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// Angle of the view rotation. A positive angle denotes a clockwise rotation, a negative angle a counter-clockwise.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
|
@ -264,7 +264,7 @@ const (
|
|||
|
||||
// RotateX is the constant for "rotate-x" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// x-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
|
@ -273,7 +273,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// x-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
|
@ -283,7 +283,7 @@ const (
|
|||
|
||||
// RotateY is the constant for "rotate-y" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// y-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
|
@ -292,7 +292,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// y-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
|
@ -302,7 +302,7 @@ const (
|
|||
|
||||
// RotateZ is the constant for "rotate-z" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// z-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
|
@ -311,7 +311,7 @@ const (
|
|||
//
|
||||
// Internal type is `float`, other types converted to it during assignment.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// z-coordinate of the vector denoting the axis of rotation in range 0 to 1.
|
||||
//
|
||||
// Supported types: `float`, `int`, `string`.
|
||||
|
@ -321,7 +321,7 @@ const (
|
|||
|
||||
// SkewX is the constant for "skew-x" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// Angle to use to distort the element along the abscissa. The default value is 0.
|
||||
|
@ -337,7 +337,7 @@ const (
|
|||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// Angle to use to distort the element along the abscissa. The default value is 0.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
|
@ -354,7 +354,7 @@ const (
|
|||
|
||||
// SkewY is the constant for "skew-y" property tag.
|
||||
//
|
||||
// Used by `View`, `Transform`.
|
||||
// Used by `View`, `TransformProperty`.
|
||||
//
|
||||
// Usage in `View`:
|
||||
// Angle to use to distort the element along the ordinate. The default value is 0.
|
||||
|
@ -370,7 +370,7 @@ const (
|
|||
// `float` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
// `int` - a new `AngleUnit` value will be created with `Radian` as a type.
|
||||
//
|
||||
// Usage in `Transform`:
|
||||
// Usage in `TransformProperty`:
|
||||
// Angle to use to distort the element along the ordinate. The default value is 0.
|
||||
//
|
||||
// Supported types: `AngleUnit`, `string`, `float`, `int`.
|
||||
|
@ -416,6 +416,7 @@ func NewTransformProperty(params Params) TransformProperty {
|
|||
|
||||
func (transform *transformPropertyData) init() {
|
||||
transform.dataProperty.init()
|
||||
transform.normalize = normalizeTransformTag
|
||||
transform.set = transformSet
|
||||
transform.supportedProperties = []PropertyName{
|
||||
RotateX, RotateY, RotateZ, Rotate, SkewX, SkewY, ScaleX, ScaleY, ScaleZ,
|
||||
|
@ -423,6 +424,17 @@ func (transform *transformPropertyData) init() {
|
|||
}
|
||||
}
|
||||
|
||||
func normalizeTransformTag(tag PropertyName) PropertyName {
|
||||
tag = defaultNormalize(tag)
|
||||
|
||||
name := string(tag)
|
||||
if strings.HasPrefix(name, "push-") {
|
||||
tag = PropertyName(name[5:])
|
||||
}
|
||||
|
||||
return tag
|
||||
}
|
||||
|
||||
func (transform *transformPropertyData) String() string {
|
||||
buffer := allocStringBuilder()
|
||||
defer freeStringBuilder(buffer)
|
||||
|
@ -527,25 +539,27 @@ func getTransformProperty(properties Properties, tag PropertyName) TransformProp
|
|||
return nil
|
||||
}
|
||||
|
||||
func setTransformPropertyElement(properties Properties, tag PropertyName, value any) []PropertyName {
|
||||
func setTransformPropertyElement(properties Properties, tag, transformTag PropertyName, value any) []PropertyName {
|
||||
srcTag := tag
|
||||
tag = normalizeTransformTag(tag)
|
||||
switch tag {
|
||||
case Perspective, RotateX, RotateY, RotateZ, Rotate, SkewX, SkewY, ScaleX, ScaleY, ScaleZ, TranslateX, TranslateY, TranslateZ:
|
||||
var result []PropertyName = nil
|
||||
if transform := getTransformProperty(properties, Transform); transform != nil {
|
||||
if transform := getTransformProperty(properties, transformTag); transform != nil {
|
||||
if result = transformSet(transform, tag, value); result != nil {
|
||||
result = append(result, Transform)
|
||||
result = []PropertyName{srcTag, transformTag}
|
||||
}
|
||||
} else {
|
||||
transform := NewTransformProperty(nil)
|
||||
if result = transformSet(transform, tag, value); result != nil {
|
||||
properties.setRaw(Transform, transform)
|
||||
result = append(result, Transform)
|
||||
properties.setRaw(transformTag, transform)
|
||||
result = []PropertyName{srcTag, transformTag}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
ErrorLogF(`"Transform" interface does not support the "%s" property`, tag)
|
||||
ErrorLogF(`"TransformProperty" interface does not support the "%s" property`, tag)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -698,7 +712,7 @@ func (style *viewStyle) writeViewTransformCSS(builder cssBuilder, session Sessio
|
|||
}
|
||||
|
||||
if transform := getTransformProperty(style, Transform); transform != nil {
|
||||
builder.add(`transform`, transform.transformCSS(session))
|
||||
builder.add(`TransformProperty`, transform.transformCSS(session))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
7
view.go
7
view.go
|
@ -705,14 +705,17 @@ func (view *viewData) propertyChanged(tag PropertyName) {
|
|||
x, y, z := getTransformOrigin(view, session)
|
||||
session.updateCSSProperty(htmlID, "transform-origin", transformOriginCSS(x, y, z, view.Session()))
|
||||
|
||||
case Transform, Perspective, SkewX, SkewY, TranslateX, TranslateY, TranslateZ,
|
||||
ScaleX, ScaleY, ScaleZ, Rotate, RotateX, RotateY, RotateZ:
|
||||
case Transform:
|
||||
css := ""
|
||||
if transform := getTransformProperty(view, Transform); transform != nil {
|
||||
css = transform.transformCSS(session)
|
||||
}
|
||||
session.updateCSSProperty(htmlID, "transform", css)
|
||||
|
||||
case Perspective, SkewX, SkewY, TranslateX, TranslateY, TranslateZ,
|
||||
ScaleX, ScaleY, ScaleZ, Rotate, RotateX, RotateY, RotateZ:
|
||||
// do nothing
|
||||
|
||||
case FocusEvent, LostFocusEvent, ResizeEvent, ScrollEvent, KeyDownEvent, KeyUpEvent,
|
||||
ClickEvent, DoubleClickEvent, MouseDown, MouseUp, MouseMove, MouseOut, MouseOver, ContextMenuEvent,
|
||||
PointerDown, PointerUp, PointerMove, PointerOut, PointerOver, PointerCancel,
|
||||
|
|
|
@ -354,7 +354,11 @@ func viewStyleSet(style Properties, tag PropertyName, value any) []PropertyName
|
|||
|
||||
case Perspective, RotateX, RotateY, RotateZ, Rotate, SkewX, SkewY, ScaleX, ScaleY, ScaleZ,
|
||||
TranslateX, TranslateY, TranslateZ:
|
||||
return setTransformPropertyElement(style, tag, value)
|
||||
return setTransformPropertyElement(style, tag, Transform, value)
|
||||
|
||||
case PushPerspective, PushRotateX, PushRotateY, PushRotateZ, PushRotate, PushSkewX, PushSkewY,
|
||||
PushScaleX, PushScaleY, PushScaleZ, PushTranslateX, PushTranslateY, PushTranslateZ:
|
||||
return setTransformPropertyElement(style, tag, PushTransform, value)
|
||||
|
||||
case Orientation:
|
||||
if text, ok := value.(string); ok {
|
||||
|
|
Loading…
Reference in New Issue