writeRadialGradient method

int writeRadialGradient(
  1. VectorGraphicsBuffer buffer, {
  2. required double centerX,
  3. required double centerY,
  4. required double radius,
  5. required double? focalX,
  6. required double? focalY,
  7. required Int32List colors,
  8. required Float32List? offsets,
  9. required Float64List? transform,
  10. required int tileMode,
})

Write a radial gradient into the current buffer.

focalX and focalY must be either both null or both non-null.

Implementation

int writeRadialGradient(
  VectorGraphicsBuffer buffer, {
  required double centerX,
  required double centerY,
  required double radius,
  required double? focalX,
  required double? focalY,
  required Int32List colors,
  required Float32List? offsets,
  required Float64List? transform,
  required int tileMode,
}) {
  assert((focalX == null && focalY == null) ||
      (focalX != null && focalY != null));
  assert(transform == null || transform.length == 16);
  buffer._checkPhase(_CurrentSection.shaders);

  final int shaderId = buffer._nextShaderId++;
  assert(shaderId < kMaxId);
  buffer._putUint8(_radialGradientTag);
  buffer._putUint16(shaderId);
  buffer._putFloat32(centerX);
  buffer._putFloat32(centerY);
  buffer._putFloat32(radius);

  if (focalX != null) {
    buffer._putUint8(1);
    buffer._putFloat32(focalX);
    buffer._putFloat32(focalY!);
  } else {
    buffer._putUint8(0);
  }
  buffer._putUint16(colors.length);
  buffer._putInt32List(colors);
  if (offsets != null) {
    buffer._putUint16(offsets.length);
    buffer._putFloat32List(offsets);
  } else {
    buffer._putUint16(0);
  }
  buffer._writeTransform(transform);
  buffer._putUint8(tileMode);
  return shaderId;
}