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,
);
}