paintUnit method

  1. @override
Size paintUnit(
  1. Canvas canvas,
  2. double devicePixelRatio
)
override

绘制"单元水印",完整的水印是由单元水印重复平铺组成,返回值为"单元水印"占用空间的大小。 devicePixelRatio: 因为最终要将绘制内容保存为图片,所以在绘制时需要根据屏幕的 DPR来放大,以防止失真

Implementation

@override
Size paintUnit(Canvas canvas, double devicePixelRatio) {
  final TextWaterMarkPainter painter = TextWaterMarkPainter(
    text: text,
    padding: padding1,
    rotate: rotate ?? 0,
    textStyle: textStyle,
    textDirection: textDirection,
  );
  // 绘制第一个文本水印前保存画布状态,因为在绘制过程中可能会平移或旋转画布
  canvas.save();
  // 绘制第一个文本水印
  final size1 = painter.paintUnit(canvas, devicePixelRatio);
  // 绘制完毕后恢复画布状态。
  canvas.restore();
  // 确定交错方向
  bool vertical = staggerAxis == Axis.vertical;
  // 将Canvas 平移至第二个文本水印的起始绘制点
  canvas.translate(vertical ? 0 : size1.width, vertical ? size1.height : 0);
  // 设置第二个文本水印的 padding 和 text2
  painter
    ..padding = padding2
    ..text = text2;
  // 绘制第二个文本水印
  final size2 = painter.paintUnit(canvas, devicePixelRatio);
  // 返回两个文本水印所占用的总大小
  return Size(
    vertical ? math.max(size1.width, size2.width) : size1.width + size2.width,
    vertical
        ? size1.height + size2.height
        : math.max(size1.height, size2.height),
  );
}