1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 16:32:54 +08:00

Implement sticky container for sidebar in NewsOverlay

This commit is contained in:
Andrei Zavatski 2021-05-19 15:28:12 +03:00
parent 150ed01c62
commit 6cc4ffadab

View File

@ -1,11 +1,14 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Threading;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Overlays.News;
using osu.Game.Overlays.News.Displays;
using osu.Game.Overlays.News.Sidebar;
namespace osu.Game.Overlays
{
@ -13,9 +16,44 @@ namespace osu.Game.Overlays
{
private readonly Bindable<string> article = new Bindable<string>(null);
protected override Container<Drawable> Content => content;
private readonly Container content;
private readonly Container sidebarContainer;
public NewsOverlay()
: base(OverlayColourScheme.Purple, false)
{
base.Content.Add(new GridContainer
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
RowDimensions = new[]
{
new Dimension(GridSizeMode.AutoSize)
},
ColumnDimensions = new[]
{
new Dimension(GridSizeMode.AutoSize),
new Dimension()
},
Content = new[]
{
new Drawable[]
{
sidebarContainer = new Container
{
AutoSizeAxes = Axes.X,
Child = new NewsSidebar()
},
content = new Container
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y
}
}
}
});
}
protected override void LoadComplete()
@ -90,6 +128,14 @@ namespace osu.Game.Overlays
}, (cancellationToken = new CancellationTokenSource()).Token);
}
protected override void UpdateAfterChildren()
{
base.UpdateAfterChildren();
sidebarContainer.Height = DrawHeight;
sidebarContainer.Y = Math.Clamp(ScrollFlow.Current - Header.DrawHeight, 0, Math.Max(ScrollFlow.ScrollContent.DrawHeight - DrawHeight - Header.DrawHeight, 0));
}
protected override void Dispose(bool isDisposing)
{
cancellationToken?.Cancel();