solve static method

Implementation

static UiContourAccessoryGeometry solve(
  UiContourAccessoryGeometryInput input,
) {
  final t = input.progress.clamp(0.0, 1.0);
  final bar = input.barSize;
  final accessory = input.accessorySize;

  final barDest = Rect.fromLTWH(
    0,
    0,
    (bar.width - accessory.width).clamp(0.0, bar.width),
    bar.height,
  );
  final barStart = Rect.fromLTWH(0, 0, bar.width, bar.height);
  final barRect = Rect.lerp(barStart, barDest, t)!;

  final accessoryDest = Rect.fromLTWH(
    barDest.width,
    (bar.height - accessory.height) / 2,
    accessory.width,
    accessory.height,
  );
  final accessoryRect = Rect.lerp(input.sourceRect, accessoryDest, t)!;

  // Unlike UiContourActionGeometrySolver's zero-size source point, this
  // solver's source rect is the search icon's real footprint (non-zero),
  // so a width-ratio visibility would never reach 0 at rest — the
  // accessory surface would coincide with, and duplicate, the visible
  // search icon. Progress itself is the correct fade here: fully hidden
  // at t=0 (exactly coincident with the icon), ramping to fully visible.
  final accessoryVisibility = t.clamp(0.0, 1.0);

  return UiContourAccessoryGeometry(
    barRect: barRect,
    accessoryRect: accessoryRect,
    accessoryVisibility: accessoryVisibility,
    barContentVisibility: (1 - (t / input.contentThreshold)).clamp(0.0, 1.0),
    accessoryInteractive: t >= 0.92,
  );
}