Пример #1
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is StadiumBorder stadiumBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(this.side, stadiumBorder.side, t),
                           borderRadius: this.borderRadius,
                           rectness: this.rectness * (1.0f - t)
                           ));
            }

            if (b is RoundedRectangleBorder rectBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(this.side, rectBorder.side, t),
                           borderRadius: this.borderRadius,
                           rectness: this.rectness + (1.0f - this.rectness) * t
                           ));
            }

            if (b is _StadiumToRoundedRectangleBorder border)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(this.side, border.side, t),
                           borderRadius: BorderRadius.lerp(this.borderRadius, border.borderRadius, t),
                           rectness: MathUtils.lerpFloat(this.rectness, border.rectness, t)
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #2
0
        public static ShapeDecoration lerp(ShapeDecoration a, ShapeDecoration b, float t)
        {
            if (a == null && b == null)
            {
                return(null);
            }

            if (a != null && b != null)
            {
                if (t == 0.0)
                {
                    return(a);
                }

                if (t == 1.0)
                {
                    return(b);
                }
            }

            return(new ShapeDecoration(
                       color: Color.lerp(a?.color, b?.color, t),
                       gradient: Gradient.lerp(a?.gradient, b?.gradient, t),
                       image: t < 0.5 ? a.image : b.image,
                       shadows: BoxShadow.lerpList(a?.shadows, b?.shadows, t),
                       shape: ShapeBorder.lerp(a?.shape, b?.shape, t)
                       ));
        }
Пример #3
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is StadiumBorder stadiumBorder)
            {
                return(new StadiumBorder(side: BorderSide.lerp(this.side, stadiumBorder.side, t)));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(this.side, circleBorder.side, t),
                           circleness: t
                           ));
            }

            if (b is RoundedRectangleBorder rectBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(this.side, rectBorder.side, t),
                           borderRadius: rectBorder.borderRadius,
                           rectness: t
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #4
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is StadiumBorder stadiumBorder)
            {
                return(new StadiumBorder(side: BorderSide.lerp(stadiumBorder.side, this.side, t)));
            }

            if (a is CircleBorder circleBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(circleBorder.side, this.side, t),
                           circleness: 1.0f - t
                           ));
            }

            if (a is RoundedRectangleBorder rectBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(rectBorder.side, this.side, t),
                           borderRadius: rectBorder.borderRadius,
                           rectness: 1.0f - t
                           ));
            }

            return(base.lerpFrom(a, t));
        }
Пример #5
0
 public override ShapeBorder lerpFrom(ShapeBorder a, double t)
 {
     if (a is StadiumBorder stadiumBorder)
     {
         return(new _StadiumToRoundedRectangleBorder(
                    side: BorderSide.lerp(stadiumBorder.side, this.side, t),
                    borderRadius: this.borderRadius,
                    rectness: this.rectness * t
                    ));
     }
     if (a is RoundedRectangleBorder rectBorder)
     {
         return(new _StadiumToRoundedRectangleBorder(
                    side: BorderSide.lerp(rectBorder.side, this.side, t),
                    borderRadius: this.borderRadius,
                    rectness: this.rectness + (1.0 - this.rectness) * (1.0 - t)
                    ));
     }
     if (a is _StadiumToRoundedRectangleBorder border)
     {
         return(new _StadiumToRoundedRectangleBorder(
                    side: BorderSide.lerp(border.side, this.side, t),
                    borderRadius: BorderRadius.lerp(border.borderRadius, this.borderRadius, t),
                    rectness: MathUtils.lerpDouble(border.rectness, this.rectness, t)
                    ));
     }
     return(base.lerpFrom(a, t));
 }
Пример #6
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is RoundedRectangleBorder rectBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(side, rectBorder.side, t),
                           borderRadius: BorderRadius.lerp(borderRadius, rectBorder.borderRadius, t),
                           circleness: circleness * (1.0f - t)
                           ));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(side, circleBorder.side, t),
                           borderRadius: borderRadius,
                           circleness: circleness + (1.0f - circleness) * t
                           ));
            }

            if (b is _RoundedRectangleToCircleBorder border)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(side, border.side, t),
                           borderRadius: BorderRadius.lerp(borderRadius, border.borderRadius, t),
                           circleness: MathUtils.lerpNullableFloat(circleness, border.circleness, t)
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #7
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is StadiumBorder stadiumBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(stadiumBorder.side, side, t),
                           borderRadius: borderRadius,
                           rectness: rectness * t
                           ));
            }

            if (a is RoundedRectangleBorder rectBorder)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(rectBorder.side, side, t),
                           borderRadius: borderRadius,
                           rectness: rectness + (1.0f - rectness) * (1.0f - t)
                           ));
            }

            if (a is _StadiumToRoundedRectangleBorder border)
            {
                return(new _StadiumToRoundedRectangleBorder(
                           side: BorderSide.lerp(border.side, side, t),
                           borderRadius: BorderRadius.lerp(border.borderRadius, borderRadius, t),
                           rectness: MathUtils.lerpNullableFloat(border.rectness, rectness, t)
                           ));
            }

            return(base.lerpFrom(a, t));
        }
Пример #8
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is RoundedRectangleBorder rectBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(rectBorder.side, this.side, t),
                           borderRadius: BorderRadius.lerp(rectBorder.borderRadius, this.borderRadius, t),
                           circleness: this.circleness * t
                           ));
            }

            if (a is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(circleBorder.side, this.side, t),
                           borderRadius: this.borderRadius,
                           circleness: this.circleness + (1.0f - this.circleness) * (1.0f - t)
                           ));
            }

            if (a is _RoundedRectangleToCircleBorder border)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(border.side, this.side, t),
                           borderRadius: BorderRadius.lerp(border.borderRadius, this.borderRadius, t),
                           circleness: MathUtils.lerpFloat(border.circleness, this.circleness, t)
                           ));
            }

            return(base.lerpFrom(a, t));
        }
        public override ShapeBorder lerpTo(ShapeBorder b, double t)
        {
            if (b is RoundedRectangleBorder rectBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(this.side, rectBorder.side, t),
                           borderRadius: BorderRadius.lerp(this.borderRadius, rectBorder.borderRadius, t),
                           circleness: this.circleness * (1.0 - t)
                           ));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(this.side, circleBorder.side, t),
                           borderRadius: this.borderRadius,
                           circleness: this.circleness + (1.0 - this.circleness) * t
                           ));
            }

            if (b is _RoundedRectangleToCircleBorder border)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(this.side, border.side, t),
                           borderRadius: BorderRadius.lerp(this.borderRadius, border.borderRadius, t),
                           circleness: MathUtils.lerpDouble(this.circleness, border.circleness, t)
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #10
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is StadiumBorder stadiumBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(this.side, stadiumBorder.side, t),
                           circleness: this.circleness * (1.0f - t)
                           ));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(this.side, circleBorder.side, t),
                           circleness: this.circleness + (1.0f - this.circleness) * t
                           ));
            }

            if (b is _StadiumToCircleBorder border)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(this.side, border.side, t),
                           circleness: MathUtils.lerpFloat(this.circleness, border.circleness, t)
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #11
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is StadiumBorder stadiumBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(stadiumBorder.side, this.side, t),
                           circleness: this.circleness * t
                           ));
            }

            if (a is CircleBorder circleBorder)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(circleBorder.side, this.side, t),
                           circleness: this.circleness + (1.0f - this.circleness) * (1.0f - t)
                           ));
            }

            if (a is _StadiumToCircleBorder border)
            {
                return(new _StadiumToCircleBorder(
                           side: BorderSide.lerp(border.side, this.side, t),
                           circleness: MathUtils.lerpFloat(border.circleness, this.circleness, t)
                           ));
            }

            return(base.lerpFrom(a, t));
        }
Пример #12
0
        public override ShapeBorder lerpFrom(ShapeBorder a, double t)
        {
            if (a is Border border)
            {
                return(lerp(border, this, t));
            }

            return(base.lerpFrom(a, t));
        }
Пример #13
0
        public virtual ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a == null)
            {
                return(this.scale(t));
            }

            return(null);
        }
Пример #14
0
        public override ShapeBorder lerpTo(ShapeBorder b, double t)
        {
            if (b is Border border)
            {
                return(lerp(this, border, t));
            }

            return(base.lerpTo(b, t));
        }
Пример #15
0
        public virtual ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b == null)
            {
                return(this.scale(1.0f - t));
            }

            return(null);
        }
Пример #16
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is CircleBorder border)
            {
                return(new CircleBorder(side: BorderSide.lerp(side, border.side, t)));
            }

            return(base.lerpTo(b, t));
        }
Пример #17
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is CircleBorder border)
            {
                return(new CircleBorder(side: BorderSide.lerp(border.side, side, t)));
            }

            return(base.lerpFrom(a, t));
        }
Пример #18
0
 public override ShapeBorder lerpFrom(ShapeBorder a, double t)
 {
     if (a is BeveledRectangleBorder border)
     {
         return(new BeveledRectangleBorder(
                    side: BorderSide.lerp(border.side, this.side, t),
                    borderRadius: BorderRadius.lerp(border.borderRadius, this.borderRadius, t)
                    ));
     }
     return(base.lerpFrom(a, t));
 }
Пример #19
0
 public override ShapeBorder lerpTo(ShapeBorder b, double t)
 {
     if (b is BeveledRectangleBorder border)
     {
         return(new BeveledRectangleBorder(
                    side: BorderSide.lerp(this.side, border.side, t),
                    borderRadius: BorderRadius.lerp(this.borderRadius, border.borderRadius, t)
                    ));
     }
     return(base.lerpTo(b, t));
 }
 public override ShapeBorder lerpTo(ShapeBorder b, float t)
 {
     if (b is ContinuousRectangleBorder)
     {
         return(new ContinuousRectangleBorder(
                    side: BorderSide.lerp(this.side, (b as ContinuousRectangleBorder).side, t),
                    borderRadius: BorderRadius.lerp(this.borderRadius,
                                                    (b as ContinuousRectangleBorder).borderRadius, t)
                    ));
     }
     return(base.lerpTo(b, t));
 }
 public override ShapeBorder lerpFrom(ShapeBorder a, float t)
 {
     if (a is ContinuousRectangleBorder)
     {
         return(new ContinuousRectangleBorder(
                    side: BorderSide.lerp((a as ContinuousRectangleBorder).side, this.side, t),
                    borderRadius: BorderRadius.lerp((a as ContinuousRectangleBorder).borderRadius,
                                                    this.borderRadius, t)
                    ));
     }
     return(base.lerpFrom(a, t));
 }
Пример #22
0
        public static ShapeBorder lerp(ShapeBorder a, ShapeBorder b, float t)
        {
            ShapeBorder result = null;

            if (b != null)
            {
                result = b.lerpFrom(a, t);
            }

            if (result == null && a != null)
            {
                result = a.lerpTo(b, t);
            }

            return(result ?? (t < 0.5 ? a : b));
        }
Пример #23
0
        public ShapeDecoration(
            Color color              = null,
            DecorationImage image    = null,
            Gradient gradient        = null,
            List <BoxShadow> shadows = null,
            ShapeBorder shape        = null
            )
        {
            D.assert(!(color != null && gradient != null));
            D.assert(shape != null);

            this.color    = color;
            this.image    = image;
            this.gradient = gradient;
            this.shadows  = shadows;
            this.shape    = shape;
        }
Пример #24
0
        public override ShapeBorder add(ShapeBorder other, bool reversed = false)
        {
            if (!(other is Border border))
            {
                return(null);
            }

            if (BorderSide.canMerge(this.top, border.top) &&
                BorderSide.canMerge(this.right, border.right) &&
                BorderSide.canMerge(this.bottom, border.bottom) &&
                BorderSide.canMerge(this.left, border.left))
            {
                return(merge(this, border));
            }

            return(null);
        }
Пример #25
0
        public static ShapeDecoration fromBoxDecoration(BoxDecoration source)
        {
            ShapeBorder shape = null;

            switch (source.shape)
            {
            case BoxShape.circle:
                if (source.border != null)
                {
                    D.assert(source.border.isUniform);
                    shape = new CircleBorder(side: source.border.top);
                }
                else
                {
                    shape = new CircleBorder();
                }

                break;

            case BoxShape.rectangle:
                if (source.borderRadius != null)
                {
                    D.assert(source.border == null || source.border.isUniform);
                    shape = new RoundedRectangleBorder(
                        side: source.border?.top ?? BorderSide.none,
                        borderRadius: source.borderRadius
                        );
                }
                else
                {
                    shape = source.border ?? new Border();
                }

                break;
            }

            return(new ShapeDecoration(
                       color: source.color,
                       image: source.image,
                       gradient: source.gradient,
                       shadows: source.boxShadow,
                       shape: shape
                       ));
        }
Пример #26
0
        public override ShapeBorder lerpFrom(ShapeBorder a, float t)
        {
            if (a is RoundedRectangleBorder border)
            {
                return(new RoundedRectangleBorder(
                           side: BorderSide.lerp(border.side, side, t),
                           borderRadius: BorderRadius.lerp(border.borderRadius, borderRadius, t)
                           ));
            }

            if (a is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(circleBorder.side, side, t),
                           borderRadius: borderRadius,
                           circleness: 1.0f - t
                           ));
            }

            return(base.lerpFrom(a, t));
        }
Пример #27
0
        public override ShapeBorder lerpTo(ShapeBorder b, float t)
        {
            if (b is RoundedRectangleBorder border)
            {
                return(new RoundedRectangleBorder(
                           side: BorderSide.lerp(side, border.side, t),
                           borderRadius: BorderRadius.lerp(borderRadius, border.borderRadius, t)
                           ));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(side, circleBorder.side, t),
                           borderRadius: borderRadius,
                           circleness: t
                           ));
            }

            return(base.lerpTo(b, t));
        }
Пример #28
0
        public new static _CompoundBorder lerp(ShapeBorder a, ShapeBorder b, float t)
        {
            D.assert(a is _CompoundBorder || b is _CompoundBorder);
            List <ShapeBorder> aList = a is _CompoundBorder aBorder ? aBorder.borders : new List <ShapeBorder> {
                a
            };
            List <ShapeBorder> bList = b is _CompoundBorder bBorder ? bBorder.borders : new List <ShapeBorder> {
                b
            };
            List <ShapeBorder> results = new List <ShapeBorder>();
            int length = Mathf.Max(aList.Count, bList.Count);

            for (int index = 0; index < length; index += 1)
            {
                ShapeBorder localA = index < aList.Count ? aList[index] : null;
                ShapeBorder localB = index < bList.Count ? bList[index] : null;
                if (localA != null && localB != null)
                {
                    ShapeBorder localResult = localA.lerpTo(localB, t) ?? localB.lerpFrom(localA, t);
                    if (localResult != null)
                    {
                        results.Add(localResult);
                        continue;
                    }
                }

                if (localB != null)
                {
                    results.Add(localB.scale(t));
                }

                if (localA != null)
                {
                    results.Add(localA.scale(1.0f - t));
                }
            }

            return(new _CompoundBorder(results));
        }
Пример #29
0
        public override ShapeBorder add(ShapeBorder other, bool reversed = false)
        {
            if (!(other is _CompoundBorder))
            {
                ShapeBorder ours   = reversed ? this.borders.Last() : this.borders.First();
                ShapeBorder merged = ours.add(other, reversed: reversed) ?? other.add(ours, reversed: !reversed);
                if (merged != null)
                {
                    List <ShapeBorder> result = new List <ShapeBorder>(this.borders);
                    result[reversed ? result.Count - 1 : 0] = merged;
                    return(new _CompoundBorder(result));
                }
            }

            List <ShapeBorder> mergedBorders = new List <ShapeBorder>();

            if (reversed)
            {
                mergedBorders.AddRange(this.borders);
            }

            if (other is _CompoundBorder border)
            {
                mergedBorders.AddRange(border.borders);
            }
            else
            {
                mergedBorders.Add(other);
            }

            if (!reversed)
            {
                mergedBorders.AddRange(this.borders);
            }

            return(new _CompoundBorder(mergedBorders));
        }
Пример #30
0
 public override ShapeBorder lerpTo(ShapeBorder b, float t)
 {
     return(lerp(this, b, t));
 }