darker static method

double? darker(
  1. double tone,
  2. double ratio
)

Returns T in HCT, L* in Lab* <= tone parameter that ensures ratio with input T/L*. Returns null if ratio cannot be achieved.

Implementation

static double? darker(double tone, double ratio) {
  if (tone < 0.0 || tone > 100.0) return null;
  // Invert the contrast ratio equation to determine darker Y given a ratio and lighter Y.
  final lightY = ColorUtils.yFromLstar(tone);
  final darkY = ((lightY + 5.0) / ratio) - 5.0;
  if (darkY < 0.0 || darkY > 100.0) return null;
  final realContrast = ratioOfYs(lightY, darkY);
  final delta = (realContrast - ratio).abs();
  if (realContrast < ratio && delta > _contrastRatioEpsilon) return null;
  // For information on 0.4 constant, see comment in lighter(tone, ratio).
  final returnValue =
      ColorUtils.lstarFromY(darkY) - _luminanceGamutMapTolerance;
  // NOMUTANTS--important validation step; functions it is calling may change implementation.
  return returnValue < 0.0 || returnValue > 100.0 ? null : returnValue;
}