drawCrossLine method

void drawCrossLine({
  1. required Canvas canvas,
  2. required double canvasWidth,
  3. required double canvasHeight,
  4. required double scrollX,
  5. required double scale,
  6. required double dx,
  7. required double dy,
  8. required Color color,
  9. required double strokeWidth,
})

交叉线

Implementation

void drawCrossLine(
    {required Canvas canvas,
    required double canvasWidth,
    required double canvasHeight,
    required double scrollX,
    required double scale,
    required double dx,
    required double dy,
    required Color color,
    required double strokeWidth}) {
  double min = scrollX.abs() / scale;
  double max = min + canvasWidth / scale;
  if (dx < min) {
    dx = min;
  } else if (dx > max) {
    dx = max;
  }
  canvas.save();
  canvas.translate(scrollX, 0);
  canvas.scale(scale, 1);
  final paint = Paint()
    ..strokeWidth = strokeWidth
    ..style = PaintingStyle.fill
    ..color = color;

  /// 绘制线
  canvas.drawLine(Offset(0, dy),
      Offset(canvasWidth / scale + (-scrollX / scale), dy), paint);
  paint.strokeWidth /= scale;
  canvas.drawLine(Offset(dx, 0), Offset(dx, canvasHeight), paint);
  canvas.restore();

  /// 绘制交叉圆点
  canvas.save();
  canvas.translate(scrollX, 0);
  canvas.scale(scale);
  canvas.drawCircle(Offset(dx, dy / scale), 2 / scale, paint);
  canvas.restore();
}