| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/painting.dart'; |
| |
| import 'colors.dart'; |
| |
| /// Paints an iOS-style slider thumb. |
| /// |
| /// Used by [CupertinoSwitch] and [CupertinoSlider]. |
| class CupertinoThumbPainter { |
| /// Creates an object that paints an iOS-style slider thumb. |
| CupertinoThumbPainter({ |
| this.color = CupertinoColors.white, |
| this.shadowColor = const Color(0x2C000000), |
| }) : _shadowPaint = BoxShadow( |
| color: shadowColor, |
| blurRadius: 1.0, |
| ).toPaint(); |
| |
| /// The color of the interior of the thumb. |
| final Color color; |
| |
| /// The color of the shadow case by the thumb. |
| final Color shadowColor; |
| |
| /// The paint used to draw the shadow case by the thumb. |
| final Paint _shadowPaint; |
| |
| /// Half the default diameter of the thumb. |
| static const double radius = 14.0; |
| |
| /// The default amount the thumb should be extended horizontally when pressed. |
| static const double extension = 7.0; |
| |
| /// Paints the thumb onto the given canvas in the given rectangle. |
| /// |
| /// Consider using [radius] and [extension] when deciding how large a |
| /// rectangle to use for the thumb. |
| void paint(Canvas canvas, Rect rect) { |
| final RRect rrect = RRect.fromRectAndRadius( |
| rect, |
| Radius.circular(rect.shortestSide / 2.0), |
| ); |
| |
| canvas.drawRRect(rrect, _shadowPaint); |
| canvas.drawRRect(rrect.shift(const Offset(0.0, 3.0)), _shadowPaint); |
| canvas.drawRRect(rrect, Paint()..color = color); |
| } |
| } |