Previously, carousel panels would appear immediately at their required Y
position. This didn't look great when they appear with other panels
surrounding them.
Now they will spawn in underneath the nearest item before them, making
the animation feel much more correct.
The new carousel implementation was lacking some scroll related
behaviours. This makes sure that post-filter, the selection is
re-centered *unless* the user has scrolled away manually.
This matches the old carousel's behaviour. See
https://github.com/ppy/osu/pull/16647 for original implementation.
Closes https://github.com/ppy/osu/issues/33052.
This also fixes code running in `Update` which shouldn't be, by
consuming the new `NewItemsPresented` callback.
Fields and properties are renamed to knock some sense into things (was
previously called two or three different things).
The original `IEnumerable` flow prioritised slight performance gains,
but a filter's implementation could actually make this detrimental to
overall performance.
I noticed in passing that there were already potentially multiple
enumerations, via `updateYPositions` and the final `ToList` call. Rather
than faffing around, let's keep things simple and require lists.
In benchmarking, the difference is (currently) negiligible. Slight
improvement if anything.
Keep masking back in `Content`, since the scaling animation is happening
on `Content` instead of `this`. This doesn't regress the intended
behaviour in this PR (which is to just to make the button class itself
sheared instead of its content).