drawPointer method

void drawPointer(
  1. Canvas canvas,
  2. RadialGaugeAxisDefinition axisDefinition,
  3. 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);
  }
}