From 380d200b46e417db260bb5ca3613dfb107c9615b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 19 Feb 2020 17:34:47 +0900 Subject: [PATCH] Allow different sizing modes for OverlinedDisplay --- .../Multi/Components/OverlinedDisplay.cs | 59 ++++++++++++++----- .../Screens/Multi/Match/MatchSubScreen.cs | 3 +- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Multi/Components/OverlinedDisplay.cs b/osu.Game/Screens/Multi/Components/OverlinedDisplay.cs index 844337aed4..600fa99a9a 100644 --- a/osu.Game/Screens/Multi/Components/OverlinedDisplay.cs +++ b/osu.Game/Screens/Multi/Components/OverlinedDisplay.cs @@ -15,6 +15,26 @@ namespace osu.Game.Screens.Multi.Components { protected readonly Container Content; + public override Axes RelativeSizeAxes + { + get => base.RelativeSizeAxes; + set + { + base.RelativeSizeAxes = value; + updateDimensions(); + } + } + + public override Axes AutoSizeAxes + { + get => base.AutoSizeAxes; + protected set + { + base.AutoSizeAxes = value; + updateDimensions(); + } + } + protected string Details { set => details.Text = value; @@ -22,14 +42,12 @@ namespace osu.Game.Screens.Multi.Components private readonly Circle line; private readonly OsuSpriteText details; + private readonly GridContainer grid; protected OverlinedDisplay(string title) { - RelativeSizeAxes = Axes.Both; - - InternalChild = new GridContainer + InternalChild = grid = new GridContainer { - RelativeSizeAxes = Axes.Both, Content = new[] { new Drawable[] @@ -62,19 +80,12 @@ namespace osu.Game.Screens.Multi.Components }, new Drawable[] { - Content = new Container - { - Margin = new MarginPadding { Top = 5 }, - RelativeSizeAxes = Axes.Both - } + Content = new Container { Margin = new MarginPadding { Top = 5 } } } - }, - RowDimensions = new[] - { - new Dimension(GridSizeMode.AutoSize), - new Dimension(GridSizeMode.AutoSize), } }; + + updateDimensions(); } [BackgroundDependencyLoader] @@ -83,5 +94,25 @@ namespace osu.Game.Screens.Multi.Components line.Colour = colours.Yellow; details.Colour = colours.Yellow; } + + private void updateDimensions() + { + grid.RowDimensions = new[] + { + new Dimension(GridSizeMode.AutoSize), + new Dimension(GridSizeMode.AutoSize), + new Dimension(AutoSizeAxes.HasFlag(Axes.Y) ? GridSizeMode.AutoSize : GridSizeMode.Distributed), + }; + + grid.AutoSizeAxes = Axes.None; + grid.RelativeSizeAxes = Axes.None; + grid.AutoSizeAxes = AutoSizeAxes; + grid.RelativeSizeAxes = ~AutoSizeAxes; + + Content.AutoSizeAxes = Axes.None; + Content.RelativeSizeAxes = Axes.None; + Content.AutoSizeAxes = grid.AutoSizeAxes; + Content.RelativeSizeAxes = grid.RelativeSizeAxes; + } } } diff --git a/osu.Game/Screens/Multi/Match/MatchSubScreen.cs b/osu.Game/Screens/Multi/Match/MatchSubScreen.cs index a8630b79b1..caa88a06e0 100644 --- a/osu.Game/Screens/Multi/Match/MatchSubScreen.cs +++ b/osu.Game/Screens/Multi/Match/MatchSubScreen.cs @@ -114,7 +114,7 @@ namespace osu.Game.Screens.Multi.Match { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Right = 5 }, - Child = new OverlinedParticipants() + Child = new OverlinedParticipants { RelativeSizeAxes = Axes.Both } }, new Container { @@ -122,6 +122,7 @@ namespace osu.Game.Screens.Multi.Match Padding = new MarginPadding { Horizontal = 5 }, Child = new OverlinedPlaylist(true) // Temporarily always allow selection { + RelativeSizeAxes = Axes.Both, SelectedItem = { BindTarget = SelectedItem } } },