mirror of https://github.com/anoshenko/rui.git
Added New...Gradient functions
This commit is contained in:
parent
5f55d30443
commit
7bb90e5b2a
|
@ -143,6 +143,46 @@ func parseBackgroundValue(value any) []BackgroundElement {
|
|||
return []BackgroundElement{element}
|
||||
}
|
||||
}
|
||||
|
||||
case []string:
|
||||
elements := make([]BackgroundElement, 0, len(value))
|
||||
for _, element := range value {
|
||||
if obj := ParseDataText(element); obj != nil {
|
||||
if element := createBackground(obj); element != nil {
|
||||
elements = append(elements, element)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return elements
|
||||
|
||||
case []any:
|
||||
elements := make([]BackgroundElement, 0, len(value))
|
||||
for _, element := range value {
|
||||
switch element := element.(type) {
|
||||
case BackgroundElement:
|
||||
elements = append(elements, element)
|
||||
|
||||
case string:
|
||||
if obj := ParseDataText(element); obj != nil {
|
||||
if element := createBackground(obj); element != nil {
|
||||
elements = append(elements, element)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return elements
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -2,31 +2,33 @@ package rui
|
|||
|
||||
import "strings"
|
||||
|
||||
type LinearGradientDirectionType int
|
||||
|
||||
// Constants related to view's background gradient description
|
||||
const (
|
||||
// ToTopGradient is value of the Direction property of a linear gradient. The value is equivalent to the 0deg angle
|
||||
ToTopGradient = 0
|
||||
ToTopGradient LinearGradientDirectionType = 0
|
||||
|
||||
// ToRightTopGradient is value of the Direction property of a linear gradient.
|
||||
ToRightTopGradient = 1
|
||||
ToRightTopGradient LinearGradientDirectionType = 1
|
||||
|
||||
// ToRightGradient is value of the Direction property of a linear gradient. The value is equivalent to the 90deg angle
|
||||
ToRightGradient = 2
|
||||
ToRightGradient LinearGradientDirectionType = 2
|
||||
|
||||
// ToRightBottomGradient is value of the Direction property of a linear gradient.
|
||||
ToRightBottomGradient = 3
|
||||
ToRightBottomGradient LinearGradientDirectionType = 3
|
||||
|
||||
// ToBottomGradient is value of the Direction property of a linear gradient. The value is equivalent to the 180deg angle
|
||||
ToBottomGradient = 4
|
||||
ToBottomGradient LinearGradientDirectionType = 4
|
||||
|
||||
// ToLeftBottomGradient is value of the Direction property of a linear gradient.
|
||||
ToLeftBottomGradient = 5
|
||||
ToLeftBottomGradient LinearGradientDirectionType = 5
|
||||
|
||||
// ToLeftGradient is value of the Direction property of a linear gradient. The value is equivalent to the 270deg angle
|
||||
ToLeftGradient = 6
|
||||
ToLeftGradient LinearGradientDirectionType = 6
|
||||
|
||||
// ToLeftTopGradient is value of the Direction property of a linear gradient.
|
||||
ToLeftTopGradient = 7
|
||||
ToLeftTopGradient LinearGradientDirectionType = 7
|
||||
)
|
||||
|
||||
// BackgroundGradientPoint define point on gradient straight line
|
||||
|
@ -47,7 +49,14 @@ type backgroundLinearGradient struct {
|
|||
backgroundGradient
|
||||
}
|
||||
|
||||
// NewBackgroundLinearGradient creates the new background linear gradient
|
||||
// NewBackgroundLinearGradient creates the new background linear gradient.
|
||||
// The following properties can be used:
|
||||
//
|
||||
// "gradient" (Gradient) - Describes gradient stop points. This is a mandatory property while describing background gradients.
|
||||
//
|
||||
// "direction" (Direction) - Defines the direction of the gradient line.
|
||||
//
|
||||
// "repeating" (Repeating) - Defines whether stop points needs to be repeated after the last one.
|
||||
func NewBackgroundLinearGradient(params Params) BackgroundElement {
|
||||
result := new(backgroundLinearGradient)
|
||||
result.init()
|
||||
|
@ -57,6 +66,18 @@ func NewBackgroundLinearGradient(params Params) BackgroundElement {
|
|||
return result
|
||||
}
|
||||
|
||||
// NewLinearGradient creates the new background linear gradient.
|
||||
func NewLinearGradient[DirectionType LinearGradientDirectionType | AngleUnit](direction DirectionType, repeating bool, point1 GradientPoint, point2 GradientPoint, points ...GradientPoint) BackgroundElement {
|
||||
params := Params{
|
||||
Direction: direction,
|
||||
Gradient: append([]GradientPoint{point1, point2}, points...),
|
||||
}
|
||||
if repeating {
|
||||
params[Repeating] = true
|
||||
}
|
||||
return NewBackgroundLinearGradient(params)
|
||||
}
|
||||
|
||||
func parseGradientText(value string) []BackgroundGradientPoint {
|
||||
elements := strings.Split(value, ",")
|
||||
count := len(elements)
|
||||
|
@ -289,7 +310,6 @@ func (gradient *backgroundLinearGradient) init() {
|
|||
gradient.backgroundElement.init()
|
||||
gradient.set = backgroundLinearGradientSet
|
||||
gradient.supportedProperties = []PropertyName{Direction, Repeating, Gradient}
|
||||
|
||||
}
|
||||
|
||||
func (gradient *backgroundLinearGradient) Tag() string {
|
||||
|
@ -319,6 +339,9 @@ func backgroundLinearGradientSet(properties Properties, tag PropertyName, value
|
|||
properties.setRaw(Direction, angle)
|
||||
return []PropertyName{tag}
|
||||
}
|
||||
|
||||
case LinearGradientDirectionType:
|
||||
return setEnumProperty(properties, tag, int(value), enumProperties[Direction].values)
|
||||
}
|
||||
return setEnumProperty(properties, tag, value, enumProperties[Direction].values)
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package rui
|
|||
|
||||
import "strings"
|
||||
|
||||
type RadialGradientRadiusType int
|
||||
|
||||
// Constants related to view's background gradient description
|
||||
const (
|
||||
// EllipseGradient is value of the Shape property of a radial gradient background:
|
||||
|
@ -15,29 +17,40 @@ const (
|
|||
// ClosestSideGradient is value of the Radius property of a radial gradient background:
|
||||
// The gradient's ending shape meets the side of the box closest to its center (for circles)
|
||||
// or meets both the vertical and horizontal sides closest to the center (for ellipses).
|
||||
ClosestSideGradient = 0
|
||||
ClosestSideGradient RadialGradientRadiusType = 0
|
||||
|
||||
// ClosestCornerGradient is value of the Radius property of a radial gradient background:
|
||||
// The gradient's ending shape is sized so that it exactly meets the closest corner
|
||||
// of the box from its center.
|
||||
ClosestCornerGradient = 1
|
||||
ClosestCornerGradient RadialGradientRadiusType = 1
|
||||
|
||||
// FarthestSideGradient is value of the Radius property of a radial gradient background:
|
||||
// Similar to closest-side, except the ending shape is sized to meet the side of the box
|
||||
// farthest from its center (or vertical and horizontal sides).
|
||||
FarthestSideGradient = 2
|
||||
FarthestSideGradient RadialGradientRadiusType = 2
|
||||
|
||||
// FarthestCornerGradient is value of the Radius property of a radial gradient background:
|
||||
// The default value, the gradient's ending shape is sized so that it exactly meets
|
||||
// the farthest corner of the box from its center.
|
||||
FarthestCornerGradient = 3
|
||||
FarthestCornerGradient RadialGradientRadiusType = 3
|
||||
)
|
||||
|
||||
type backgroundRadialGradient struct {
|
||||
backgroundGradient
|
||||
}
|
||||
|
||||
// NewBackgroundRadialGradient creates the new background radial gradient
|
||||
// NewBackgroundRadialGradient creates the new background radial gradient.
|
||||
// The following properties can be used:
|
||||
//
|
||||
// "gradient" (Gradient) - Describes gradient stop points. This is a mandatory property while describing background gradients.
|
||||
//
|
||||
// "center-x" (CenterX), "center-y" (CenterY) - Defines the gradient center point cooordinates.
|
||||
//
|
||||
// "radial-gradient-radius" (RadialGradientRadius) - Defines radius of the radial gradient.
|
||||
//
|
||||
// "radial-gradient-shape" (RadialGradientShape) - Defines shape of the radial gradient.
|
||||
//
|
||||
// "repeating" (Repeating) - Defines whether stop points needs to be repeated after the last one.
|
||||
func NewBackgroundRadialGradient(params Params) BackgroundElement {
|
||||
result := new(backgroundRadialGradient)
|
||||
result.init()
|
||||
|
@ -47,6 +60,44 @@ func NewBackgroundRadialGradient(params Params) BackgroundElement {
|
|||
return result
|
||||
}
|
||||
|
||||
// NewCircleRadialGradient creates the new background circle radial gradient.
|
||||
func NewCircleRadialGradient[radiusType SizeUnit | RadialGradientRadiusType](xCenter, yCenter SizeUnit, radius radiusType, repeating bool, point1 GradientPoint, point2 GradientPoint, points ...GradientPoint) BackgroundElement {
|
||||
params := Params{
|
||||
RadialGradientShape: CircleGradient,
|
||||
Gradient: append([]GradientPoint{point1, point2}, points...),
|
||||
RadialGradientRadius: radius,
|
||||
}
|
||||
if xCenter.Type != Auto {
|
||||
params[CenterX] = xCenter
|
||||
}
|
||||
if yCenter.Type != Auto {
|
||||
params[CenterY] = yCenter
|
||||
}
|
||||
if repeating {
|
||||
params[Repeating] = true
|
||||
}
|
||||
return NewBackgroundRadialGradient(params)
|
||||
}
|
||||
|
||||
// NewCircleRadialGradient creates the new background ellipse radial gradient.
|
||||
func NewEllipseRadialGradient[radiusType []SizeUnit | RadialGradientRadiusType](xCenter, yCenter SizeUnit, radius radiusType, repeating bool, point1 GradientPoint, point2 GradientPoint, points ...GradientPoint) BackgroundElement {
|
||||
params := Params{
|
||||
RadialGradientShape: EllipseGradient,
|
||||
Gradient: append([]GradientPoint{point1, point2}, points...),
|
||||
RadialGradientRadius: radius,
|
||||
}
|
||||
if xCenter.Type != Auto {
|
||||
params[CenterX] = xCenter
|
||||
}
|
||||
if yCenter.Type != Auto {
|
||||
params[CenterY] = yCenter
|
||||
}
|
||||
if repeating {
|
||||
params[Repeating] = true
|
||||
}
|
||||
return NewBackgroundRadialGradient(params)
|
||||
}
|
||||
|
||||
func (gradient *backgroundRadialGradient) init() {
|
||||
gradient.backgroundElement.init()
|
||||
gradient.normalize = normalizeRadialGradientTag
|
||||
|
@ -144,6 +195,9 @@ func backgroundRadialGradientSet(properties Properties, tag PropertyName, value
|
|||
}
|
||||
return []PropertyName{tag}
|
||||
|
||||
case RadialGradientRadiusType:
|
||||
return setEnumProperty(properties, RadialGradientRadius, int(value), enumProperties[RadialGradientRadius].values)
|
||||
|
||||
case int:
|
||||
return setEnumProperty(properties, RadialGradientRadius, value, enumProperties[RadialGradientRadius].values)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue