drawPaths method

void drawPaths({
  1. required TouchyCanvas touchyCanvas,
  2. required Canvas plainCanvas,
  3. required Size size,
  4. required bool showIndex,
  5. required Iterable<Drawable> drawables,
  6. required Matrix4 fittingMatrix,
  7. double? textPaddingLeft,
  8. double? textPaddingTop,
})

Implementation

void drawPaths({
  required final TouchyCanvas touchyCanvas,
  required final Canvas plainCanvas,
  required final Size size,
  required final bool showIndex,
  required final Iterable<Drawable> drawables,
  required final Matrix4 fittingMatrix,
  final double? textPaddingLeft,
  final double? textPaddingTop,
}) {
  for (final element in drawables) {
    final id = element.id;
    if (id == null) {
      continue;
    }
    final path = (element as DrawableShape).path;

    final Paint paint = Paint();
    final isExistInList = models.any((final e) => e.id == id);

    if (isExistInList) {
      paint.color =
          models.firstWhereOrNull((final e) => e.id == id)?.selectedColor ??
              selectedColor;
    } else {
      paint.color =
          models.firstWhereOrNull((final e) => e.id == id)?.unSelectedColor ??
              unSelectedColor;
    }

    touchyCanvas.drawPath(
      element.path.transform(fittingMatrix.storage),
      paint,
      onTapDown: (final _) {
        if (isExistInList) {
          onTap.call(id, false);
        } else {
          onTap.call(id, true);
        }
      },
    );

    plainCanvas.drawPath(
      element.path.transform(fittingMatrix.storage),
      Paint()
        ..color = borderColor
        ..strokeWidth = borderWith
        ..style = PaintingStyle.stroke,
    );

    if (showIndex) {
      drawTextOnPath(
        plainCanvas,
        models.firstWhereOrNull((final e) => e.id == id)?.char ?? id,
        size,
        path,
        textPaddingLeft,
        textPaddingTop,
        textStyle: style,
        fittingMatrix: fittingMatrix,
      );
    }
  }
}