claymorphismKeyFaceFor function

KeyFaceRenderer claymorphismKeyFaceFor(
  1. ThemeSpec spec, {
  2. GlassRendering rendering = GlassRendering.standard,
})

The key renderer for a ThemeFamily.claymorphism spec.

rendering carries the device effects tier: lite draws no blurs. Reduce Motion (EffectsTier.off) keeps the full static artwork, and the glass mode is ignored (clay is opaque). Zero or foreign style values fall back to the family defaults (5 dp depth, 12 dp blur, 0.09 shade), so every spec paints.

Implementation

KeyFaceRenderer claymorphismKeyFaceFor(
  ThemeSpec spec, {
  GlassRendering rendering = GlassRendering.standard,
}) {
  final p = spec.palette;
  final style = spec.keyStyle;
  final depth = spec.motion.depthCdp > 0 ? spec.motion.depthCdp : 500;
  final blur = style.shadowBlurCdp > 0 ? style.shadowBlurCdp : 1200;
  final shade = style.edgeShadePermille > 0 ? style.edgeShadePermille : 90;
  return ClayKeyFace(
    digitShadow: Color(p.digit.edge),
    operatorShadow: Color(p.operator.edge),
    equalsShadow: Color(p.equals.edge),
    functionShadow: Color(p.function.edge),
    highlight: Color(p.highlight),
    depth: depth / 100,
    blur: blur / 100,
    shadeDepth: shade.clamp(40, 140) / 1000,
    cornerFraction: spec.keyShape.cornerFraction.clamp(0.0, 0.5),
    pressScale: spec.motion.scalePermille / 1000,
    labelFloor: spec.accessible ? ratioAccessible : ratioText,
    lite: rendering.tier == EffectsTier.lite,
    slashedZero: spec.type.slashedZero,
  );
}