2019-05-20 17:02:13 +08:00
// 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.
2019-12-27 12:15:55 +08:00
using JetBrains.Annotations ;
2020-01-16 03:41:22 +08:00
using osu.Framework.Allocation ;
2019-05-20 17:02:13 +08:00
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Containers ;
2019-12-27 03:09:06 +08:00
using osu.Framework.Graphics.Shapes ;
using osuTK.Graphics ;
2019-05-20 17:02:13 +08:00
namespace osu.Game.Overlays
{
2019-12-31 23:12:03 +08:00
public abstract class OverlayHeader : Container
2019-05-20 17:02:13 +08:00
{
2020-04-16 17:07:38 +08:00
public const int CONTENT_X_MARGIN = 50 ;
2019-12-27 03:09:06 +08:00
private readonly Box titleBackground ;
2020-01-20 13:52:03 +08:00
protected readonly FillFlowContainer HeaderInfo ;
2019-12-27 03:09:06 +08:00
2020-01-24 17:33:34 +08:00
protected OverlayHeader ( )
2019-05-20 17:02:13 +08:00
{
RelativeSizeAxes = Axes . X ;
AutoSizeAxes = Axes . Y ;
2019-12-27 12:15:55 +08:00
Add ( new FillFlowContainer
2019-05-20 17:02:13 +08:00
{
2019-12-27 03:09:06 +08:00
RelativeSizeAxes = Axes . X ,
AutoSizeAxes = Axes . Y ,
Direction = FillDirection . Vertical ,
2019-12-27 12:15:55 +08:00
Children = new [ ]
2019-05-20 17:02:13 +08:00
{
2020-01-04 04:22:19 +08:00
HeaderInfo = new FillFlowContainer
2019-12-27 03:09:06 +08:00
{
RelativeSizeAxes = Axes . X ,
AutoSizeAxes = Axes . Y ,
2020-01-04 04:22:19 +08:00
Direction = FillDirection . Vertical ,
Depth = - float . MaxValue ,
2020-01-27 21:45:10 +08:00
Children = new [ ]
2019-12-27 03:09:06 +08:00
{
2020-01-27 20:36:19 +08:00
CreateBackground ( ) ,
2020-01-04 04:22:19 +08:00
new Container
2019-12-27 03:09:06 +08:00
{
2020-01-04 04:22:19 +08:00
RelativeSizeAxes = Axes . X ,
AutoSizeAxes = Axes . Y ,
Children = new Drawable [ ]
2019-12-27 03:09:06 +08:00
{
2020-01-04 04:22:19 +08:00
titleBackground = new Box
{
RelativeSizeAxes = Axes . Both ,
Colour = Color4 . Gray ,
} ,
2020-02-03 16:09:46 +08:00
new Container
2020-01-04 04:22:19 +08:00
{
2020-02-03 16:09:46 +08:00
RelativeSizeAxes = Axes . X ,
AutoSizeAxes = Axes . Y ,
Padding = new MarginPadding
2020-01-04 04:22:19 +08:00
{
2020-04-16 17:07:38 +08:00
Horizontal = CONTENT_X_MARGIN ,
2020-02-03 16:09:46 +08:00
} ,
Children = new [ ]
{
2020-03-26 23:11:58 +08:00
CreateTitle ( ) . With ( title = >
2020-02-03 16:09:46 +08:00
{
2020-02-03 16:44:31 +08:00
title . Anchor = Anchor . CentreLeft ;
title . Origin = Anchor . CentreLeft ;
2020-02-03 16:09:46 +08:00
} ) ,
CreateTitleContent ( ) . With ( content = >
{
content . Anchor = Anchor . CentreRight ;
content . Origin = Anchor . CentreRight ;
} )
}
}
2020-01-04 04:22:19 +08:00
}
2019-12-27 03:09:06 +08:00
} ,
2019-05-20 17:02:13 +08:00
}
2019-12-27 12:15:55 +08:00
} ,
CreateContent ( )
2019-12-27 02:21:15 +08:00
}
} ) ;
2019-05-20 17:02:13 +08:00
}
2020-01-16 03:41:22 +08:00
[BackgroundDependencyLoader]
2020-01-24 17:33:34 +08:00
private void load ( OverlayColourProvider colourProvider )
2020-01-16 03:41:22 +08:00
{
2020-01-24 17:33:34 +08:00
titleBackground . Colour = colourProvider . Dark5 ;
2020-01-16 03:41:22 +08:00
}
2019-12-27 12:15:55 +08:00
[NotNull]
2020-02-03 16:09:46 +08:00
protected virtual Drawable CreateContent ( ) = > Empty ( ) ;
[NotNull]
protected virtual Drawable CreateBackground ( ) = > Empty ( ) ;
2019-05-20 17:02:13 +08:00
2020-02-03 16:09:46 +08:00
/// <summary>
2020-03-25 05:08:20 +08:00
/// Creates a <see cref="Drawable"/> on the opposite side of the <see cref="OverlayTitle"/>. Used mostly to create <see cref="OverlayRulesetSelector"/>.
2020-02-03 16:09:46 +08:00
/// </summary>
2020-01-27 20:36:19 +08:00
[NotNull]
2020-02-03 16:09:46 +08:00
protected virtual Drawable CreateTitleContent ( ) = > Empty ( ) ;
2020-01-27 20:36:19 +08:00
2020-03-25 05:08:20 +08:00
protected abstract OverlayTitle CreateTitle ( ) ;
2019-05-20 17:02:13 +08:00
}
}