diff --git a/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs b/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
index 2c902a466f..f2faeab1c4 100644
--- a/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
+++ b/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
@@ -96,6 +96,8 @@ namespace osu.Game.Tests.Visual.SongSelect
{
Carousel = new BeatmapCarousel
{
+ BleedTop = 50,
+ BleedBottom = 50,
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Width = 800,
diff --git a/osu.Game/Screens/SelectV2/Carousel.cs b/osu.Game/Screens/SelectV2/Carousel.cs
index 5339b5358b..7b1fd6e999 100644
--- a/osu.Game/Screens/SelectV2/Carousel.cs
+++ b/osu.Game/Screens/SelectV2/Carousel.cs
@@ -38,12 +38,12 @@ namespace osu.Game.Screens.SelectV2
///
/// Height of the area above the carousel that should be treated as visible due to transparency of elements in front of it.
///
- public float BleedTop { get; set; } = 0;
+ public float BleedTop { get; set; }
///
/// Height of the area below the carousel that should be treated as visible due to transparency of elements in front of it.
///
- public float BleedBottom { get; set; } = 0;
+ public float BleedBottom { get; set; }
///
/// The number of pixels outside the carousel's vertical bounds to manifest drawables.
@@ -505,7 +505,7 @@ namespace osu.Game.Screens.SelectV2
private void scrollToSelection()
{
if (currentKeyboardSelection.CarouselItem != null)
- Scroll.ScrollTo(currentKeyboardSelection.CarouselItem.CarouselYPosition - visibleHalfHeight);
+ Scroll.ScrollTo(currentKeyboardSelection.CarouselItem.CarouselYPosition - visibleHalfHeight + BleedTop);
}
#endregion
@@ -519,17 +519,17 @@ namespace osu.Game.Screens.SelectV2
///
/// The position of the lower visible bound with respect to the current scroll position.
///
- private float visibleBottomBound => (float)(Scroll.Current + DrawHeight + BleedBottom);
+ private float visibleBottomBound;
///
/// The position of the upper visible bound with respect to the current scroll position.
///
- private float visibleUpperBound => (float)(Scroll.Current - BleedTop);
+ private float visibleUpperBound;
///
/// Half the height of the visible content.
///
- private float visibleHalfHeight => (DrawHeight + BleedBottom + BleedTop) / 2;
+ private float visibleHalfHeight;
protected override void Update()
{
@@ -538,6 +538,10 @@ namespace osu.Game.Screens.SelectV2
if (carouselItems == null)
return;
+ visibleBottomBound = (float)(Scroll.Current + DrawHeight + BleedBottom);
+ visibleUpperBound = (float)(Scroll.Current - BleedTop);
+ visibleHalfHeight = (DrawHeight + BleedBottom + BleedTop) / 2;
+
if (!selectionValid.IsValid)
{
refreshAfterSelection();
@@ -582,7 +586,7 @@ namespace osu.Game.Screens.SelectV2
protected virtual float GetPanelXOffset(Drawable panel)
{
Vector2 posInScroll = Scroll.ToLocalSpace(panel.ScreenSpaceDrawQuad.Centre);
- float dist = Math.Abs(1f - posInScroll.Y / visibleHalfHeight);
+ float dist = Math.Abs(1f - (posInScroll.Y + BleedTop) / visibleHalfHeight);
return offsetX(dist, visibleHalfHeight);
}