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)); }
// 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); } } }
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; } }
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); }); }
void _paintShadows(Canvas canvas, Rect rect) { foreach (BoxShadow boxShadow in boxShadows) { Paint paint = boxShadow.toPaint(); canvas.drawRRect( MaterialConstantsUtils.kMaterialEdges[MaterialType.card].toRRect(rect), paint); } }
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)); }
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); } }
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); } }
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; } }
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); } }
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; } }
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); } } } }