feat(chat): the sample the timestamp column measures against

Eights rather than zeroes. In most faces 8 is the widest digit, and a column
measured from 00:00 gets undercut by a 10:38 -- which would shove the name column
right on exactly that row, the misalignment the column exists to remove.

Two samples because the twelve-hour form is wider. That difference is why
Use24HourClock has to enter the layout fingerprint: switching it moves every wrap
position after the stamp, and the height cache never knew.
This commit is contained in:
2026-08-19 11:43:38 +02:00
parent 56a9f3f474
commit ad7421fbed
@@ -0,0 +1,17 @@
namespace HellionChat.Ui.Components;
// TEST-MIRROR: Ui/TimestampColumnTests.cs
//
// The timestamp sits in a column of fixed width so the sender names below each
// other actually line up. The mockup asks for tabular figures; ImGui exposes no
// font features, and whether the bundled face even has equal-width digits is
// unverified. So the width comes from measuring the widest shape the format can
// produce, once per layout change rather than per row.
//
// Eights, not zeroes: in most faces 8 is the widest digit. A column measured
// from 00:00 would be undercut by a 10:38 and shove the name column right on
// that one row -- exactly the misalignment this exists to remove.
internal static class TimestampColumn
{
internal static string SampleFor(bool use24Hour) => use24Hour ? "88:88" : "88:88 PM";
}