1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 21:02:55 +08:00

Merge pull request #151 from SirCmpwn/options-sidebar

Expand the options sidebar on hover
This commit is contained in:
Dean Herbert 2016-11-11 13:33:10 +09:00 committed by GitHub
commit 27542d9747
12 changed files with 64 additions and 17 deletions

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.Audio
{
public class AudioSection : OptionsSection
{
protected override string Header => "Audio";
public override string Header => "Audio";
public override FontAwesome Icon => FontAwesome.fa_headphones;
public AudioSection()

View File

@ -9,7 +9,7 @@ namespace osu.Game.Overlays.Options
{
public class EditorSection : OptionsSection
{
protected override string Header => "Editor";
public override string Header => "Editor";
public override FontAwesome Icon => FontAwesome.fa_pencil;
private CheckBoxOption backgroundVideo, defaultSkin, snakingSliders, hitAnimations, followPoints, stacking;

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.Gameplay
{
public class GameplaySection : OptionsSection
{
protected override string Header => "Gameplay";
public override string Header => "Gameplay";
public override FontAwesome Icon => FontAwesome.fa_circle_o;
public GameplaySection()

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.General
{
public class GeneralSection : OptionsSection
{
protected override string Header => "General";
public override string Header => "General";
public override FontAwesome Icon => FontAwesome.fa_gear;
public GeneralSection()

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.Graphics
{
public class GraphicsSection : OptionsSection
{
protected override string Header => "Graphics";
public override string Header => "Graphics";
public override FontAwesome Icon => FontAwesome.fa_laptop;
public GraphicsSection()

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.Input
{
public class InputSection : OptionsSection
{
protected override string Header => "Input";
public override string Header => "Input";
public override FontAwesome Icon => FontAwesome.fa_keyboard_o;
public InputSection()

View File

@ -8,7 +8,7 @@ namespace osu.Game.Overlays.Options
{
public class MaintenanceSection : OptionsSection
{
protected override string Header => "Maintenance";
public override string Header => "Maintenance";
public override FontAwesome Icon => FontAwesome.fa_wrench;
public MaintenanceSection()

View File

@ -5,7 +5,7 @@ namespace osu.Game.Overlays.Options.Online
{
public class OnlineSection : OptionsSection
{
protected override string Header => "Online";
public override string Header => "Online";
public override FontAwesome Icon => FontAwesome.fa_globe;
public OnlineSection()

View File

@ -14,7 +14,7 @@ namespace osu.Game.Overlays.Options
protected override Container<Drawable> Content => content;
public abstract FontAwesome Icon { get; }
protected abstract string Header { get; }
public abstract string Header { get; }
public OptionsSection()
{

View File

@ -4,7 +4,9 @@ using OpenTK.Graphics;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transformations;
using osu.Framework.Input;
using osu.Framework.Threading;
using osu.Game.Graphics;
namespace osu.Game.Overlays.Options
@ -12,6 +14,7 @@ namespace osu.Game.Overlays.Options
public class OptionsSidebar : Container
{
private FlowContainer content;
internal const int default_width = 60, expanded_width = 200;
protected override Container<Drawable> Content => content;
public OptionsSidebar()
@ -41,6 +44,25 @@ namespace osu.Game.Overlays.Options
};
}
private ScheduledDelegate expandEvent;
protected override bool OnHover(InputState state)
{
expandEvent = Scheduler.AddDelayed(() =>
{
expandEvent = null;
ResizeTo(new Vector2(expanded_width, Height), 150, EasingTypes.OutQuad);
}, 750);
return true;
}
protected override void OnHoverLost(InputState state)
{
expandEvent?.Cancel();
ResizeTo(new Vector2(default_width, Height), 150, EasingTypes.OutQuad);
base.OnHoverLost(state);
}
private class SidebarScrollContainer : ScrollContainer
{
public SidebarScrollContainer()
@ -53,6 +75,7 @@ namespace osu.Game.Overlays.Options
public class SidebarButton : Container
{
private TextAwesome drawableIcon;
private SpriteText headerText;
private Box backgroundBox;
public Action Action;
@ -61,10 +84,17 @@ namespace osu.Game.Overlays.Options
get { return drawableIcon.Icon; }
set { drawableIcon.Icon = value; }
}
public string Header
{
get { return headerText.Text; }
set { headerText.Text = value; }
}
public SidebarButton()
{
Size = new Vector2(60);
Height = default_width;
RelativeSizeAxes = Axes.X;
Children = new Drawable[]
{
backgroundBox = new Box
@ -74,11 +104,25 @@ namespace osu.Game.Overlays.Options
Colour = new Color4(60, 60, 60, 255),
Alpha = 0,
},
drawableIcon = new TextAwesome
new Container
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Width = default_width,
RelativeSizeAxes = Axes.Y,
Children = new[]
{
drawableIcon = new TextAwesome
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
},
}
},
headerText = new SpriteText
{
Position = new Vector2(default_width + 10, 0),
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
}
};
}
@ -92,12 +136,13 @@ namespace osu.Game.Overlays.Options
protected override bool OnHover(InputState state)
{
backgroundBox.FadeTo(0.4f, 200);
return true;
return base.OnHover(state);
}
protected override void OnHoverLost(InputState state)
{
backgroundBox.FadeTo(0, 200);
base.OnHoverLost(state);
}
}
}

View File

@ -11,7 +11,7 @@ namespace osu.Game.Overlays.Options
{
public class SkinSection : OptionsSection
{
protected override string Header => "Skin";
public override string Header => "Skin";
public override FontAwesome Icon => FontAwesome.fa_paint_brush;
private CheckBoxOption ignoreSkins, useSkinSoundSamples, useTaikoSkin, useSkinCursor, autoCursorSize;

View File

@ -27,7 +27,8 @@ namespace osu.Game.Overlays
internal const float CONTENT_MARGINS = 10;
private const float width = 400;
private const float sidebar_width = 60;
private const float sidebar_width = OptionsSidebar.default_width;
private const float sidebar_padding = 10;
private ScrollContainer scrollContainer;
private OptionsSidebar sidebar;
@ -105,7 +106,8 @@ namespace osu.Game.Overlays
new OptionsSidebar.SidebarButton
{
Icon = section.Icon,
Action = () => scrollContainer.ScrollIntoView(section)
Header = section.Header,
Action = () => scrollContainer.ScrollIntoView(section),
}
)
}