drawPointer method
void
drawPointer(
- Canvas canvas,
- RadialGaugeAxisDefinition axisDefinition,
- GaugePointer pointer
)
Implementation
void drawPointer(
Canvas canvas,
RadialGaugeAxisDefinition axisDefinition,
GaugePointer pointer,
) {
final degrees = axis.degrees;
final center = axisDefinition.center;
final offset = pointer.position.offset;
final size = pointer.size;
final double originDY;
switch (pointer.position.anchor) {
case GaugePointerAnchor.center:
originDY = size.height - offset.dy;
break;
case GaugePointerAnchor.surface:
originDY = axisDefinition.radius + size.height / 2 - offset.dy;
break;
}
final origin = Offset(
size.width / 2 - offset.dx,
originDY,
);
final rotation = _valueProgress * degrees - degrees / 2;
final transformation = rotateOverOrigin(
matrix: Matrix4.translationValues(
center.dx - size.width / 2 + offset.dx,
center.dy - originDY,
0.0,
),
origin: origin,
rotation: toRadians(rotation),
);
final path = pointer.path.transform(transformation.storage);
final fillPaint = Paint();
if (pointer.shadow != null) {
canvas.drawPath(path, pointer.shadow!.toPaint());
}
if (pointer.color != null) {
fillPaint.color = pointer.color!;
}
if (pointer.gradient != null) {
fillPaint.shader = pointer.gradient!.createShader(path.getBounds());
}
fillPaint.style = PaintingStyle.fill;
canvas.drawPath(path, fillPaint);
final border = pointer.border;
if (border != null && border.width > 0) {
final strokePaint = Paint()
..strokeWidth = math.max(border.width, 0)
..color = border.color
..style = PaintingStyle.stroke;
canvas.drawPath(path, strokePaint);
}
}