WIP #212 Light card support
This commit is contained in:
77
lib/plugins/circular_slider/slider_painter.dart
Normal file
77
lib/plugins/circular_slider/slider_painter.dart
Normal file
@ -0,0 +1,77 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'circular_slider_paint.dart' show CircularSliderMode;
|
||||
import 'utils.dart';
|
||||
|
||||
class SliderPainter extends CustomPainter {
|
||||
CircularSliderMode mode;
|
||||
double startAngle;
|
||||
double endAngle;
|
||||
double sweepAngle;
|
||||
Color selectionColor;
|
||||
Color handlerColor;
|
||||
double handlerOutterRadius;
|
||||
bool showRoundedCapInSelection;
|
||||
bool showHandlerOutter;
|
||||
double sliderStrokeWidth;
|
||||
|
||||
Offset initHandler;
|
||||
Offset endHandler;
|
||||
Offset center;
|
||||
double radius;
|
||||
|
||||
SliderPainter({
|
||||
@required this.mode,
|
||||
@required this.startAngle,
|
||||
@required this.endAngle,
|
||||
@required this.sweepAngle,
|
||||
@required this.selectionColor,
|
||||
@required this.handlerColor,
|
||||
@required this.handlerOutterRadius,
|
||||
@required this.showRoundedCapInSelection,
|
||||
@required this.showHandlerOutter,
|
||||
@required this.sliderStrokeWidth,
|
||||
});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
Paint progress = _getPaint(color: selectionColor);
|
||||
|
||||
center = Offset(size.width / 2, size.height / 2);
|
||||
radius = min(size.width / 2, size.height / 2) - sliderStrokeWidth;
|
||||
|
||||
canvas.drawArc(Rect.fromCircle(center: center, radius: radius),
|
||||
-pi / 2 + startAngle, sweepAngle, false, progress);
|
||||
|
||||
Paint handler = _getPaint(color: handlerColor, style: PaintingStyle.fill);
|
||||
Paint handlerOutter = _getPaint(color: handlerColor, width: 2.0);
|
||||
|
||||
// draw handlers
|
||||
if (mode == CircularSliderMode.doubleHandler) {
|
||||
initHandler = radiansToCoordinates(center, -pi / 2 + startAngle, radius);
|
||||
canvas.drawCircle(initHandler, 8.0, handler);
|
||||
canvas.drawCircle(initHandler, handlerOutterRadius, handlerOutter);
|
||||
}
|
||||
|
||||
endHandler = radiansToCoordinates(center, -pi / 2 + endAngle, radius);
|
||||
canvas.drawCircle(endHandler, 8.0, handler);
|
||||
if (showHandlerOutter) {
|
||||
canvas.drawCircle(endHandler, handlerOutterRadius, handlerOutter);
|
||||
}
|
||||
}
|
||||
|
||||
Paint _getPaint({@required Color color, double width, PaintingStyle style}) =>
|
||||
Paint()
|
||||
..color = color
|
||||
..strokeCap =
|
||||
showRoundedCapInSelection ? StrokeCap.round : StrokeCap.butt
|
||||
..style = style ?? PaintingStyle.stroke
|
||||
..strokeWidth = width ?? sliderStrokeWidth;
|
||||
|
||||
@override
|
||||
bool shouldRepaint(CustomPainter oldDelegate) {
|
||||
return true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user