drawCursor method

  1. @override
void drawCursor(
  1. Canvas canvas,
  2. Size size,
  3. Rect rect,
  4. Cursor cursor, [
  5. Offset? offset,
  6. TextDirection textDirection = TextDirection.ltr,
])
inherited

Implementation

@override
void drawCursor(Canvas canvas, Size size, Rect rect, Cursor cursor,
    [Offset? offset, TextDirection textDirection = TextDirection.ltr]) {
  double height = cursor.height ?? size.height / 3;
  double width = cursor.width ?? size.width / 3;

  _cursorPaint.color = cursor.color;

  double verticalOffset = 0;
  double horizontalOffset = 0;
  Offset effectiveOffset = Offset.zero;
  switch (cursor.orientation) {
    case Orientation.horizontal:
      if (offset != null) {
        effectiveOffset = offset + Offset(height, 0);
      }
      _cursorPaint.strokeWidth = height;
      verticalOffset = cursor.offset;
      break;
    case Orientation.vertical:
      if (offset != null) {
        effectiveOffset = offset + Offset(width, 0);
      }
      _cursorPaint.strokeWidth = width;
      horizontalOffset = cursor.offset;
      break;
  }
  if (textDirection == TextDirection.rtl) {
    effectiveOffset *= -1;
  }

  RRect rRect = RRect.fromRectAndRadius(
    Rect.fromLTWH(
      rect.center.dx - width / 2 - effectiveOffset.dx + horizontalOffset,
      rect.center.dy - height / 2 - effectiveOffset.dy + verticalOffset,
      width,
      height,
    ),
    cursor.radius,
  );
  canvas.drawRRect(rRect, _cursorPaint);
}