1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-28 18:53:21 +08:00

Remove too much nesting for OverlaySortTabControl class

This commit is contained in:
Andrei Zavatski 2020-02-17 22:32:58 +03:00
parent 519548c99f
commit bce9e7a356
2 changed files with 131 additions and 131 deletions

View File

@ -33,74 +33,74 @@ namespace osu.Game.Overlays.BeatmapListing
{ {
SortDirection = { BindTarget = SortDirection } SortDirection = { BindTarget = SortDirection }
}; };
}
private class BeatmapSortTabItem : SortTabItem private class BeatmapSortTabItem : SortTabItem
{
public readonly Bindable<SortDirection> SortDirection = new Bindable<SortDirection>();
public BeatmapSortTabItem(BeatmapSortCriteria value)
: base(value)
{ {
public readonly Bindable<SortDirection> SortDirection = new Bindable<SortDirection>(); }
public BeatmapSortTabItem(BeatmapSortCriteria value) protected override TabButton CreateTabButton(BeatmapSortCriteria value) => new BeatmapTabButton(value)
: base(value) {
Active = { BindTarget = Active },
SortDirection = { BindTarget = SortDirection }
};
}
private class BeatmapTabButton : TabButton
{
public readonly Bindable<SortDirection> SortDirection = new Bindable<SortDirection>();
protected override Color4 ContentColour
{
set
{ {
base.ContentColour = value;
icon.Colour = value;
} }
}
protected override TabButton CreateTabButton(BeatmapSortCriteria value) => new BeatmapTabButton(value) private readonly SpriteIcon icon;
public BeatmapTabButton(BeatmapSortCriteria value)
: base(value)
{
Add(icon = new SpriteIcon
{ {
Active = { BindTarget = Active }, Anchor = Anchor.Centre,
SortDirection = { BindTarget = SortDirection } Origin = Anchor.Centre,
}; AlwaysPresent = true,
Alpha = 0,
Size = new Vector2(6)
});
}
private class BeatmapTabButton : TabButton protected override void LoadComplete()
{
base.LoadComplete();
SortDirection.BindValueChanged(direction =>
{ {
public readonly Bindable<SortDirection> SortDirection = new Bindable<SortDirection>(); icon.Icon = direction.NewValue == Overlays.SortDirection.Ascending ? FontAwesome.Solid.CaretUp : FontAwesome.Solid.CaretDown;
}, true);
}
protected override Color4 ContentColour protected override void UpdateState()
{ {
set base.UpdateState();
{ icon.FadeTo(Active.Value || IsHovered ? 1 : 0, 200, Easing.OutQuint);
base.ContentColour = value; }
icon.Colour = value;
}
}
private readonly SpriteIcon icon; protected override bool OnClick(ClickEvent e)
{
if (Active.Value)
SortDirection.Value = SortDirection.Value == Overlays.SortDirection.Ascending ? Overlays.SortDirection.Descending : Overlays.SortDirection.Ascending;
public BeatmapTabButton(BeatmapSortCriteria value) return base.OnClick(e);
: base(value)
{
Add(icon = new SpriteIcon
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
AlwaysPresent = true,
Alpha = 0,
Size = new Vector2(6)
});
}
protected override void LoadComplete()
{
base.LoadComplete();
SortDirection.BindValueChanged(direction =>
{
icon.Icon = direction.NewValue == Overlays.SortDirection.Ascending ? FontAwesome.Solid.CaretUp : FontAwesome.Solid.CaretDown;
}, true);
}
protected override void UpdateState()
{
base.UpdateState();
icon.FadeTo(Active.Value || IsHovered ? 1 : 0, 200, Easing.OutQuint);
}
protected override bool OnClick(ClickEvent e)
{
if (Active.Value)
SortDirection.Value = SortDirection.Value == Overlays.SortDirection.Ascending ? Overlays.SortDirection.Descending : Overlays.SortDirection.Ascending;
return base.OnClick(e);
}
}
} }
} }
} }

View File

@ -75,93 +75,93 @@ namespace osu.Game.Overlays
{ {
AutoSizeAxes = Axes.Both; AutoSizeAxes = Axes.Both;
} }
}
protected class SortTabItem : TabItem<T> protected class SortTabItem : TabItem<T>
{
public SortTabItem(T value)
: base(value)
{ {
public SortTabItem(T value) AutoSizeAxes = Axes.Both;
: base(value) Child = CreateTabButton(value);
}
[NotNull]
protected virtual TabButton CreateTabButton(T value) => new TabButton(value)
{
Active = { BindTarget = Active }
};
protected override void OnActivated()
{
}
protected override void OnDeactivated()
{
}
}
protected class TabButton : HeaderButton
{
public readonly BindableBool Active = new BindableBool();
protected override Container<Drawable> Content => content;
protected virtual Color4 ContentColour
{
set => text.Colour = value;
}
[Resolved]
private OverlayColourProvider colourProvider { get; set; }
private readonly SpriteText text;
private readonly FillFlowContainer content;
public TabButton(T value)
{
base.Content.Add(content = new FillFlowContainer
{ {
AutoSizeAxes = Axes.Both; AutoSizeAxes = Axes.Both,
Child = CreateTabButton(value); Direction = FillDirection.Horizontal,
} Spacing = new Vector2(3, 0),
Children = new Drawable[]
[NotNull]
protected virtual TabButton CreateTabButton(T value) => new TabButton(value)
{
Active = { BindTarget = Active }
};
protected override void OnActivated()
{
}
protected override void OnDeactivated()
{
}
protected class TabButton : HeaderButton
{
public readonly BindableBool Active = new BindableBool();
protected override Container<Drawable> Content => content;
protected virtual Color4 ContentColour
{ {
set => text.Colour = value; text = new OsuSpriteText
}
[Resolved]
private OverlayColourProvider colourProvider { get; set; }
private readonly SpriteText text;
private readonly FillFlowContainer content;
public TabButton(T value)
{
base.Content.Add(content = new FillFlowContainer
{ {
AutoSizeAxes = Axes.Both, Anchor = Anchor.Centre,
Direction = FillDirection.Horizontal, Origin = Anchor.Centre,
Spacing = new Vector2(3, 0), Font = OsuFont.GetFont(size: 12),
Children = new Drawable[] Text = value.ToString()
{ }
text = new OsuSpriteText
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Font = OsuFont.GetFont(size: 12),
Text = value.ToString()
}
}
});
} }
});
}
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
Active.BindValueChanged(_ => UpdateState(), true); Active.BindValueChanged(_ => UpdateState(), true);
} }
protected override bool OnHover(HoverEvent e) protected override bool OnHover(HoverEvent e)
{ {
UpdateState(); UpdateState();
return true; return true;
} }
protected override void OnHoverLost(HoverLostEvent e) => UpdateState(); protected override void OnHoverLost(HoverLostEvent e) => UpdateState();
protected virtual void UpdateState() protected virtual void UpdateState()
{ {
if (Active.Value || IsHovered) if (Active.Value || IsHovered)
ShowBackground(); ShowBackground();
else else
HideBackground(); HideBackground();
ContentColour = Active.Value && !IsHovered ? colourProvider.Light1 : Color4.White; ContentColour = Active.Value && !IsHovered ? colourProvider.Light1 : Color4.White;
text.Font = text.Font.With(weight: Active.Value ? FontWeight.Bold : FontWeight.Medium); text.Font = text.Font.With(weight: Active.Value ? FontWeight.Bold : FontWeight.Medium);
}
}
} }
} }
} }