clear method

  1. @override
void clear([
  1. Color? c
])
override

Set all of the pixels to the Color c, or all values to 0 if c is not given.

Implementation

@override
void clear([Color? c]) {
  final c8 = c?.convert(format: Format.uint8);
  if (numChannels == 1) {
    final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
    data.fillRange(0, data.length, ri);
  } else if (numChannels == 2) {
    final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
    final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
    final rg = (gi << 8) | ri;
    final u16 = Uint16List.view(data.buffer);
    u16.fillRange(0, u16.length, rg);
  } else if (numChannels == 4) {
    final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
    final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
    final bi = c8 == null ? 0 : (c8.b as int).clamp(0, 255);
    final ai = c8 == null ? 0 : (c8.a as int).clamp(0, 255);
    final rgba = (ai << 24) | (bi << 16) | (gi << 8) | ri;
    final u32 = Uint32List.view(data.buffer);
    u32.fillRange(0, u32.length, rgba);
  } else {
    final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
    final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
    final bi = c8 == null ? 0 : (c8.b as int).clamp(0, 255);
    // rgb is the slow case since we can't pack the channels
    for (final p in this) {
      p
        ..r = ri
        ..g = gi
        ..b = bi;
    }
  }
}