It was quite easy to dismiss by accident. I've added some positional and
time based lenience with numbers that feel good to me. Open to
discussion on whether both are required and if the numbers feel good.
Going forward, at some point, we'll likely want to standardise this
across to other expand-on-hover elements (like player load overlays).
Addresses https://github.com/ppy/osu/discussions/32368.
`CommentReportButton` is pretty cursed but I guess I can see why it is
like it is. Short of inlining it into `DrawableComment` this is probably
the best escape hatch (which I wouldn't be against doing, by the way,
just not sure it's the most productive use of time unless review
feedback comes in saying that would be a better path forward).
Bit unfortunate that this is code that can be written and do stupid
things. Unsure if additional API protections against this are desired
framework-side.
It's at a very simple stage for now:
- Tab control is no longer recreated when friends change, counts are
updated as bindables.
- All async logic removed temporarily.
- Sort and filtering happens in realtime without panel reload.
- Display modes removed for now. Need to think about this one a bit more,
and whether to retry the async path or look for a separate solution.
- Real time user presence is now considered. Not considered for sorting
by last visit time yet.
See previous commit for partial rationale.
There's an argument to be made about the `NaN`-spreading semantics being
desirable because at least something will loudly fail in that case, but
I'm not so sure about that these days. It feels like either way if
`NaN`s are produced, then things are outside of any control, and chances
are the game can probably continue without crashing. And, this move
reduces our dependence on osuTK, which has already been living on
borrowed time for years now and is only awaiting someone brave to go
excise it.