Esempio n. 1
0
        public override void paint(PaintingContext context, Offset offset)
        {
            float visualPosition = 0.0f;
            Color leftColor      = null;
            Color rightColor     = null;

            switch (textDirection)
            {
            case TextDirection.rtl:
                visualPosition = 1.0f - _position.value;
                leftColor      = _activeColor;
                rightColor     = trackColor;
                break;

            case TextDirection.ltr:
                visualPosition = _position.value;
                leftColor      = trackColor;
                rightColor     = _activeColor;
                break;
            }


            float trackCenter = offset.dy + size.height / 2.0f;
            float trackLeft   = offset.dx + _trackLeft;
            float trackTop    = trackCenter - 1.0f;
            float trackBottom = trackCenter + 1.0f;
            float trackRight  = offset.dx + _trackRight;
            float trackActive = offset.dx + _thumbCenter;

            Canvas canvas = context.canvas;

            if (visualPosition > 0.0f)
            {
                Paint paint = new Paint();
                paint.color = rightColor;
                canvas.drawRRect(RRect.fromLTRBXY(trackLeft, trackTop, trackActive, trackBottom, 1.0f, 1.0f), paint);
            }

            if (visualPosition < 1.0f)
            {
                Paint paint = new Paint();
                paint.color = leftColor;
                canvas.drawRRect(RRect.fromLTRBXY(trackActive, trackTop, trackRight, trackBottom, 1.0f, 1.0f), paint);
            }

            Offset thumbCenter = new Offset(trackActive, trackCenter);

            new CupertinoThumbPainter(color: thumbColor).paint(canvas, Rect.fromCircle(center: thumbCenter, radius: CupertinoThumbPainter.radius));
        }
Esempio n. 2
0
        // describeSemanticsConfiguration todo

        void _paintCaret(Canvas canvas, Offset effectiveOffset)
        {
            D.assert(this._textLayoutLastWidth == this.constraints.maxWidth);
            var caretOffset = this._textPainter.getOffsetForCaret(this._selection.extendPos, this._caretPrototype);
            var paint       = new Paint()
            {
                color = this._cursorColor
            };
            var caretRect = this._caretPrototype.shift(caretOffset + effectiveOffset);

            if (this.cursorRadius == null)
            {
                canvas.drawRect(caretRect, paint);
            }
            else
            {
                RRect caretRRect = RRect.fromRectAndRadius(caretRect, this.cursorRadius);
                canvas.drawRRect(caretRRect, paint);
            }
            if (!caretRect.Equals(this._lastCaretRect))
            {
                this._lastCaretRect = caretRect;
                if (this.onCaretChanged != null)
                {
                    this.onCaretChanged(caretRect);
                }
            }
        }
Esempio n. 3
0
        public override void paint(Canvas canvas, Rect rect, TextDirection?textDirection = null)
        {
            switch (side.style)
            {
            case BorderStyle.none:
                break;

            case BorderStyle.solid:
                float width = side.width;
                if (width == 0.0)
                {
                    canvas.drawRRect(borderRadius.resolve(textDirection).toRRect(rect), side.toPaint());
                }
                else
                {
                    RRect outer = borderRadius.resolve(textDirection).toRRect(rect);
                    RRect inner = outer.deflate(width);
                    Paint paint = new Paint {
                        color = side.color,
                    };
                    canvas.drawDRRect(outer, inner, paint);
                }

                break;
            }
        }
Esempio n. 4
0
        public override void paint(PaintingContext context, Offset offset)
        {
            Canvas canvas               = context.canvas;
            float  currentValue         = _state.position.value;
            float  currentReactionValue = _state._reaction.value;

            float visualPosition = 0.0f;

            switch (textDirection)
            {
            case TextDirection.rtl:
                visualPosition = 1.0f - currentValue;
                break;

            case TextDirection.ltr:
                visualPosition = currentValue;
                break;
            }

            Paint paint = new Paint()
            {
                color = Color.lerp(trackColor, activeColor, currentValue)
            };
            Rect trackRect = Rect.fromLTWH(
                offset.dx + (size.width - CupertinoSwitchUtils._kTrackWidth) / 2.0f,
                offset.dy + (size.height - CupertinoSwitchUtils._kTrackHeight) / 2.0f,
                CupertinoSwitchUtils._kTrackWidth,
                CupertinoSwitchUtils._kTrackHeight
                );
            RRect trackRRect = RRect.fromRectAndRadius(trackRect, Radius.circular(CupertinoSwitchUtils._kTrackRadius));

            canvas.drawRRect(trackRRect, paint);

            float currentThumbExtension = CupertinoThumbPainter.extension * currentReactionValue;
            float thumbLeft             = MathUtils.lerpNullableFloat(
                trackRect.left + CupertinoSwitchUtils._kTrackInnerStart - CupertinoThumbPainter.radius,
                trackRect.left + CupertinoSwitchUtils._kTrackInnerEnd - CupertinoThumbPainter.radius -
                currentThumbExtension,
                visualPosition
                );
            float thumbRight = MathUtils.lerpNullableFloat(
                trackRect.left + CupertinoSwitchUtils._kTrackInnerStart + CupertinoThumbPainter.radius +
                currentThumbExtension,
                trackRect.left + CupertinoSwitchUtils._kTrackInnerEnd + CupertinoThumbPainter.radius,
                visualPosition
                );
            float thumbCenterY = offset.dy + size.height / 2.0f;
            Rect  thumbBounds  = Rect.fromLTRB(
                thumbLeft,
                thumbCenterY - CupertinoThumbPainter.radius,
                thumbRight,
                thumbCenterY + CupertinoThumbPainter.radius
                );

            context.pushClipRRect(needsCompositing, Offset.zero, thumbBounds, trackRRect,
                                  (PaintingContext innerContext, Offset offset1) => {
                CupertinoThumbPainter.switchThumb().paint(innerContext.canvas, thumbBounds);
            });
        }
Esempio n. 5
0
 void _paintShadows(Canvas canvas, Rect rect)
 {
     foreach (BoxShadow boxShadow in boxShadows)
     {
         Paint paint = boxShadow.toPaint();
         canvas.drawRRect(
             MaterialConstantsUtils.kMaterialEdges[MaterialType.card].toRRect(rect), paint);
     }
 }
Esempio n. 6
0
        void paint(PaintingContext context, Offset offset)
        {
            float visualPosition;
            Color leftColor;
            Color rightColor;

            visualPosition = this._position.value;
            leftColor      = SliderUtils._kTrackColor;
            rightColor     = this._activeColor;

            float trackCenter = offset.dy + this.size.height / 2.0f;
            float trackLeft   = offset.dx + this._trackLeft;
            float trackTop    = trackCenter - 1.0f;
            float trackBottom = trackCenter + 1.0f;
            float trackRight  = offset.dx + this._trackRight;
            float trackActive = offset.dx + this._thumbCenter;

            Canvas canvas = context.canvas;

            if (visualPosition > 0.0f)
            {
                Paint paint = new Paint();
                paint.color = rightColor;
                canvas.drawRRect(RRect.fromLTRBXY(trackLeft, trackTop, trackActive, trackBottom, 1.0f, 1.0f), paint);
            }

            if (visualPosition < 1.0f)
            {
                Paint paint = new Paint();
                paint.color = leftColor;
                canvas.drawRRect(RRect.fromLTRBXY(trackActive, trackTop, trackRight, trackBottom, 1.0f, 1.0f), paint);
            }

            Offset thumbCenter = new Offset(trackActive, trackCenter);

            this._thumbPainter.paint(canvas,
                                     Rect.fromCircle(center: thumbCenter, radius: CupertinoThumbPainter.radius));
        }
Esempio n. 7
0
        void _paintHorizontalThumb(Canvas canvas, Size size, float thumbOffset, float thumbExtent)
        {
            Offset thumbOrigin = new Offset(thumbOffset, size.height - this.thickness);
            Size   thumbSize   = new Size(thumbExtent, this.thickness);
            Rect   thumbRect   = thumbOrigin & thumbSize;

            if (this.radius == null)
            {
                canvas.drawRect(thumbRect, this._paint);
            }
            else
            {
                canvas.drawRRect(RRect.fromRectAndRadius(thumbRect, this.radius), this._paint);
            }
        }
Esempio n. 8
0
        void _paintVerticalThumb(Canvas canvas, Size size, float thumbOffset, float thumbExtent)
        {
            Offset thumbOrigin = new Offset(this._getThumbX(size), thumbOffset);
            Size   thumbSize   = new Size(this.thickness, thumbExtent);
            Rect   thumbRect   = thumbOrigin & thumbSize;

            if (this.radius == null)
            {
                canvas.drawRect(thumbRect, this._paint);
            }
            else
            {
                canvas.drawRRect(RRect.fromRectAndRadius(thumbRect, this.radius), this._paint);
            }
        }
Esempio n. 9
0
        public override void paint(Canvas canvas, Rect rect, TextDirection?textDirection = null)
        {
            switch (side.style)
            {
            case BorderStyle.none:
                break;

            case BorderStyle.solid:
                Radius radius = Radius.circular(rect.shortestSide / 2.0f);
                canvas.drawRRect(
                    RRect.fromRectAndRadius(rect, radius).deflate(side.width / 2.0f),
                    side.toPaint()
                    );
                break;
            }
        }
Esempio n. 10
0
        void _paintThumbCrossAxis(Canvas canvas, Size size, float thumbOffset, float thumbExtent, AxisDirection direction)
        {
            float x         = 0;
            float y         = 0;
            Size  thumbSize = Size.zero;

            switch (direction)
            {
            case AxisDirection.down:
                thumbSize = new Size(thickness, thumbExtent);
                x         = textDirection == TextDirection.rtl
                        ? crossAxisMargin + padding.left
                        : size.width - thickness - crossAxisMargin - padding.right;
                y = thumbOffset;
                break;

            case AxisDirection.up:
                thumbSize = new Size(thickness, thumbExtent);
                x         = textDirection == TextDirection.rtl
                        ? crossAxisMargin + padding.left
                        : size.width - thickness - crossAxisMargin - padding.right;
                y = thumbOffset;
                break;

            case AxisDirection.left:
                thumbSize = new Size(thumbExtent, thickness);
                x         = thumbOffset;
                y         = size.height - thickness - crossAxisMargin - padding.bottom;
                break;

            case AxisDirection.right:
                thumbSize = new Size(thumbExtent, thickness);
                x         = thumbOffset;
                y         = size.height - thickness - crossAxisMargin - padding.bottom;
                break;
            }

            _thumbRect = new Offset(x, y) & thumbSize;
            if (radius == null)
            {
                canvas.drawRect(_thumbRect, _paint);
            }
            else
            {
                canvas.drawRRect(RRect.fromRectAndRadius(_thumbRect, radius), _paint);
            }
        }
Esempio n. 11
0
        public override void paint(Canvas canvas, Size size)
        {
            Paint paint = new Paint();

            canvas.save();
            canvas.translate(size.width / 2.0f, size.height / 2.0f);

            int activeTick = (CupertinoActivityIndicatorUtils._kTickCount * position.value).floor();

            for (int i = 0; i < CupertinoActivityIndicatorUtils._kTickCount; ++i)
            {
                int t = ((i + activeTick) % CupertinoActivityIndicatorUtils._kTickCount);
                paint.color = activeColor.withAlpha(CupertinoActivityIndicatorUtils._alphaValues[t]);
                canvas.drawRRect(tickFundamentalRRect, paint);
                canvas.rotate(-CupertinoActivityIndicatorUtils._kTwoPI / CupertinoActivityIndicatorUtils._kTickCount);
            }

            canvas.restore();
        }
        public override void paint(Canvas canvas, Rect rect,
            float gapStart,
            float gapExtent = 0.0f,
            float gapPercentage = 0.0f
        ) {
            D.assert(gapPercentage >= 0.0f && gapPercentage <= 1.0f);
            D.assert(_cornersAreCircular(this.borderRadius));

            Paint paint = this.borderSide.toPaint();
            RRect outer = this.borderRadius.toRRect(rect);
            RRect center = outer.deflate(this.borderSide.width / 2.0f);
            if (gapExtent <= 0.0f || gapPercentage == 0.0f) {
                canvas.drawRRect(center, paint);
            }
            else {
                float extent = MathUtils.lerpFloat(0.0f, gapExtent + this.gapPadding * 2.0f, gapPercentage);
                Path path = this._gapBorderPath(canvas, center, Mathf.Max(0.0f,gapStart - this.gapPadding), extent);
                canvas.drawPath(path, paint);
            }
        }
        public override void paint(Canvas canvas, Size size)
        {
            Paint paint = new Paint();

            canvas.save();
            canvas.translate(size.width / 2.0f, size.height / 2.0f);

            int activeTick = (CupertinoActivityIndicatorUtils._kTickCount * this.position.value).floor();

            for (int i = 0; i < CupertinoActivityIndicatorUtils._kTickCount; ++i)
            {
                float t = (((i + activeTick) % CupertinoActivityIndicatorUtils._kTickCount) /
                           CupertinoActivityIndicatorUtils._kHalfTickCount).clamp(0, 1);
                paint.color = Color.lerp(a: CupertinoActivityIndicatorUtils._kActiveTickColor,
                                         b: CupertinoActivityIndicatorUtils._kTickColor, t: t);
                canvas.drawRRect(rect: this.tickFundamentalRRect, paint: paint);
                canvas.rotate(-CupertinoActivityIndicatorUtils._kTwoPI / CupertinoActivityIndicatorUtils._kTickCount);
            }

            canvas.restore();
        }
        void _paintBox(Canvas canvas, Rect rect, Paint paint)
        {
            switch (this._decoration.shape)
            {
            case BoxShape.circle:
                D.assert(this._decoration.borderRadius == null);
                Offset center = rect.center;
                float  radius = rect.shortestSide / 2.0f;
                canvas.drawCircle(center, radius, paint);
                break;

            case BoxShape.rectangle:
                if (this._decoration.borderRadius == null)
                {
                    canvas.drawRect(rect, paint);
                }
                else
                {
                    canvas.drawRRect(this._decoration.borderRadius.toRRect(rect), paint);
                }

                break;
            }
        }
Esempio n. 15
0
        public override void paint(PaintingContext context, Offset offset)
        {
            Canvas canvas = context.canvas;

            this.paintRadialReaction(canvas, offset, this.size.center(Offset.zero));

            Offset          origin      = offset + (this.size / 2.0f - Size.square(CheckboxUtils._kEdgeSize) / 2.0f);
            AnimationStatus status      = this.position.status;
            float           tNormalized = status == AnimationStatus.forward || status == AnimationStatus.completed
                ? this.position.value
                : 1.0f - this.position.value;

            if (this._oldValue == false || this.value == false)
            {
                float t     = this.value == false ? 1.0f - tNormalized : tNormalized;
                RRect outer = this._outerRectAt(origin, t);
                Paint paint = new Paint();
                paint.color = this._colorAt(t);

                if (t <= 0.5f)
                {
                    this._drawBorder(canvas, outer, t, paint);
                }
                else
                {
                    canvas.drawRRect(outer, paint);

                    this._initStrokePaint(paint);
                    float tShrink = (t - 0.5f) * 2.0f;
                    if (this._oldValue == null || this.value == null)
                    {
                        this._drawDash(canvas, origin, tShrink, paint);
                    }
                    else
                    {
                        this._drawCheck(canvas, origin, tShrink, paint);
                    }
                }
            }
            else
            {
                // Two cases: null to true, true to null
                RRect outer = this._outerRectAt(origin, 1.0f);
                Paint paint = new Paint();
                paint.color = this._colorAt(1.0f);
                canvas.drawRRect(outer, paint);

                this._initStrokePaint(paint);
                if (tNormalized <= 0.5f)
                {
                    float tShrink = 1.0f - tNormalized * 2.0f;
                    if (this._oldValue == true)
                    {
                        this._drawCheck(canvas, origin, tShrink, paint);
                    }
                    else
                    {
                        this._drawDash(canvas, origin, tShrink, paint);
                    }
                }
                else
                {
                    float tExpand = (tNormalized - 0.5f) * 2.0f;
                    if (this.value == true)
                    {
                        this._drawCheck(canvas, origin, tExpand, paint);
                    }
                    else
                    {
                        this._drawDash(canvas, origin, tExpand, paint);
                    }
                }
            }
        }