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

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

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

            return(base.lerpTo(b, t));
        }
Пример #2
0
        public override ShapeBorder lerpTo(ShapeBorder b, float 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.0f - t)
                           ));
            }

            if (b is CircleBorder circleBorder)
            {
                return(new _RoundedRectangleToCircleBorder(
                           side: BorderSide.lerp(this.side, circleBorder.side, t),
                           borderRadius: this.borderRadius,
                           circleness: this.circleness + (1.0f - 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.lerpFloat(this.circleness, border.circleness, t)
                           ));
            }

            return(base.lerpTo(b, t));
        }
        public override ShapeBorder lerpFrom(ShapeBorder a, double 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.0 - this.circleness) * (1.0 - 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.lerpDouble(border.circleness, this.circleness, t)
                           ));
            }

            return(base.lerpFrom(a, t));
        }
Пример #4
0
 public BeveledRectangleBorder(
     BorderSide side           = null,
     BorderRadius borderRadius = null
     )
 {
     this.side         = side ?? BorderSide.none;
     this.borderRadius = borderRadius ?? BorderRadius.zero;
 }
Пример #5
0
 BorderRadius _adjustBorderRadius(Rect rect)
 {
     return(BorderRadius.lerp(
                this.borderRadius,
                BorderRadius.all(Radius.circular(rect.shortestSide / 2.0f)),
                1.0f - this.rectness
                ));
 }
Пример #6
0
 public _RoundedRectangleToCircleBorder(
     BorderSide side           = null,
     BorderRadius borderRadius = null,
     float circleness          = 0.0f
     )
 {
     this.side         = side ?? BorderSide.none;
     this.borderRadius = borderRadius ?? BorderRadius.zero;
     this.circleness   = circleness;
 }
Пример #7
0
 public _StadiumToRoundedRectangleBorder(
     BorderSide side           = null,
     BorderRadius borderRadius = null,
     float rectness            = 0.0f
     )
 {
     this.side         = side ?? BorderSide.none;
     this.borderRadius = borderRadius ?? BorderRadius.zero;
     this.rectness     = rectness;
 }
Пример #8
0
 public virtual void paint(
     Canvas canvas,
     Rect rect,
     TextDirection?textDirection = null,
     BoxShape shape           = BoxShape.rectangle,
     BorderRadius borderRadus = null
     )
 {
     paint(canvas, rect, textDirection);
 }
Пример #9
0
        BorderRadius _adjustBorderRadius(Rect rect)
        {
            BorderRadius resolvedRadius = this.borderRadius;

            if (this.circleness == 0.0f)
            {
                return(resolvedRadius);
            }

            return(BorderRadius.lerp(resolvedRadius, BorderRadius.circular(rect.shortestSide / 2.0f), this.circleness));
        }
Пример #10
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));
 }
Пример #11
0
        BorderRadius _adjustBorderRadius(Rect rect, TextDirection?textDirection)
        {
            BorderRadius resolvedRadius = borderRadius.resolve(textDirection);

            if (circleness == 0.0f)
            {
                return(resolvedRadius);
            }

            return(BorderRadius.lerp(resolvedRadius, BorderRadius.circular(rect.shortestSide / 2.0f), circleness));
        }
Пример #12
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));
 }
 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));
 }
 public BoxDecoration scale(float factor)
 {
     return(new BoxDecoration(
                color: Color.lerp(null, this.color, factor),
                image: this.image,
                border: Border.lerp(null, this.border, factor),
                borderRadius: BorderRadius.lerp(null, this.borderRadius, factor),
                boxShadow: BoxShadow.lerpList(null, this.boxShadow, factor),
                gradient: this.gradient?.scale(factor),
                backgroundBlendMode: this.backgroundBlendMode,
                shape: this.shape
                ));
 }
Пример #16
0
        public void paint(Canvas canvas, Rect rect,
                          TextDirection?textDirection = null,
                          BoxShape shape            = BoxShape.rectangle,
                          BorderRadius borderRadius = null)
        {
            if (isUniform)
            {
                switch (top.style)
                {
                case BorderStyle.none:
                    return;

                case BorderStyle.solid:
                    switch (shape)
                    {
                    case BoxShape.circle:
                        D.assert(borderRadius == null,
                                 () => "A borderRadius can only be given for rectangular boxes.");
                        _paintUniformBorderWithCircle(canvas, rect, top);
                        break;

                    case BoxShape.rectangle:
                        if (borderRadius != null)
                        {
                            _paintUniformBorderWithRadius(canvas, rect, top, borderRadius);
                        }
                        else
                        {
                            _paintUniformBorderWithRectangle(canvas, rect, top);
                        }

                        break;
                    }

                    return;
                }
            }

            D.assert(borderRadius == null, () => "A borderRadius can only be given for uniform borders.");
            D.assert(shape == BoxShape.rectangle, () => "A border can only be drawn as a circle if it is uniform.");

            BorderUtils.paintBorder(canvas, rect,
                                    top: top, right: right, bottom: bottom, left: left);
        }
Пример #17
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));
        }
Пример #18
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));
        }
Пример #19
0
 public BoxDecoration copyWith(
     Color color                   = null,
     DecorationImage image         = null,
     Border border                 = null,
     BorderRadius borderRadius     = null,
     List <BoxShadow> boxShadow    = null,
     Gradient gradient             = null,
     BlendMode?backgroundBlendMode = null,
     BoxShape?shape                = null
     )
 {
     return(new BoxDecoration(
                color: color ?? this.color,
                image: image ?? this.image,
                border: border ?? this.border,
                borderRadius: borderRadius ?? this.borderRadius,
                boxShadow: boxShadow ?? this.boxShadow,
                gradient: gradient ?? this.gradient,
                backgroundBlendMode: backgroundBlendMode ?? this.backgroundBlendMode,
                shape: shape ?? this.shape
                ));
 }
Пример #20
0
        internal static void _paintUniformBorderWithRadius(Canvas canvas, Rect rect, BorderSide side,
                                                           BorderRadius borderRadius)
        {
            D.assert(side.style != BorderStyle.none);
            Paint paint = new Paint();

            paint.color = side.color;
            RRect outer = borderRadius.toRRect(rect);
            float width = side.width;

            if (width == 0.0f)
            {
                paint.style       = PaintingStyle.stroke;
                paint.strokeWidth = 0.0f;
                canvas.drawRRect(outer, paint);
            }
            else
            {
                RRect inner = outer.deflate(width);
                canvas.drawDRRect(outer, inner, paint);
            }
        }
        public static BoxDecoration lerp(BoxDecoration a, BoxDecoration b, float t)
        {
            if (a == null && b == null)
            {
                return(null);
            }

            if (a == null)
            {
                return(b.scale(t));
            }

            if (b == null)
            {
                return(a.scale(1.0f - t));
            }

            if (t == 0.0)
            {
                return(a);
            }

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

            return(new BoxDecoration(
                       color: Color.lerp(a.color, b.color, t),
                       image: t < 0.5 ? a.image : b.image,
                       border: Border.lerp(a.border, b.border, t),
                       borderRadius: BorderRadius.lerp(a.borderRadius, b.borderRadius, t),
                       boxShadow: BoxShadow.lerpList(a.boxShadow, b.boxShadow, t),
                       gradient: Gradient.lerp(a.gradient, b.gradient, t),
                       backgroundBlendMode: t < 0.5 ? a.backgroundBlendMode : b.backgroundBlendMode,
                       shape: t < 0.5 ? a.shape : b.shape
                       ));
        }
Пример #22
0
 BorderRadius _adjustBorderRadius(Rect rect)
 {
     return(BorderRadius.circular(rect.shortestSide / 2.0f));
 }