diff --git a/osu.Android.props b/osu.Android.props
index 1c180a6b39..c1075cfb17 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -51,7 +51,7 @@
-
+
diff --git a/osu.Game/Graphics/Containers/OsuRearrangeableListItem.cs b/osu.Game/Graphics/Containers/OsuRearrangeableListItem.cs
index 911d47704a..d43c3a608b 100644
--- a/osu.Game/Graphics/Containers/OsuRearrangeableListItem.cs
+++ b/osu.Game/Graphics/Containers/OsuRearrangeableListItem.cs
@@ -7,6 +7,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Events;
+using osu.Game.Graphics.UserInterface;
using osuTK;
using osuTK.Graphics;
@@ -59,33 +60,37 @@ namespace osu.Game.Graphics.Containers
[BackgroundDependencyLoader]
private void load()
{
- InternalChild = new GridContainer
+ InternalChildren = new Drawable[]
{
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Content = new[]
+ new GridContainer
{
- new[]
+ RelativeSizeAxes = Axes.X,
+ AutoSizeAxes = Axes.Y,
+ Content = new[]
{
- handleContainer = new Container
+ new[]
{
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- AutoSizeAxes = Axes.Both,
- Padding = new MarginPadding { Horizontal = 5 },
- Child = handle = new PlaylistItemHandle
+ handleContainer = new Container
{
- Size = new Vector2(12),
- Colour = HandleColour,
- AlwaysPresent = true,
- Alpha = 0
- }
- },
- CreateContent()
- }
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ AutoSizeAxes = Axes.Both,
+ Padding = new MarginPadding { Horizontal = 5 },
+ Child = handle = new PlaylistItemHandle
+ {
+ Size = new Vector2(12),
+ Colour = HandleColour,
+ AlwaysPresent = true,
+ Alpha = 0
+ }
+ },
+ CreateContent()
+ }
+ },
+ ColumnDimensions = new[] { new Dimension(GridSizeMode.AutoSize) },
+ RowDimensions = new[] { new Dimension(GridSizeMode.AutoSize) }
},
- ColumnDimensions = new[] { new Dimension(GridSizeMode.AutoSize) },
- RowDimensions = new[] { new Dimension(GridSizeMode.AutoSize) }
+ new HoverClickSounds()
};
}
diff --git a/osu.Game/Graphics/UserInterface/BackButton.cs b/osu.Game/Graphics/UserInterface/BackButton.cs
index b941e5fcbd..b8196c6360 100644
--- a/osu.Game/Graphics/UserInterface/BackButton.cs
+++ b/osu.Game/Graphics/UserInterface/BackButton.cs
@@ -20,7 +20,7 @@ namespace osu.Game.Graphics.UserInterface
{
Size = TwoLayerButton.SIZE_EXTENDED;
- Child = button = new TwoLayerButton
+ Child = button = new TwoLayerButton(HoverSampleSet.Submit)
{
Anchor = Anchor.TopLeft,
Origin = Anchor.TopLeft,
diff --git a/osu.Game/Graphics/UserInterface/DialogButton.cs b/osu.Game/Graphics/UserInterface/DialogButton.cs
index 2d75dad828..2f9e4dae51 100644
--- a/osu.Game/Graphics/UserInterface/DialogButton.cs
+++ b/osu.Game/Graphics/UserInterface/DialogButton.cs
@@ -56,6 +56,7 @@ namespace osu.Game.Graphics.UserInterface
private Vector2 hoverSpacing => new Vector2(3f, 0f);
public DialogButton()
+ : base(HoverSampleSet.Submit)
{
RelativeSizeAxes = Axes.X;
diff --git a/osu.Game/Graphics/UserInterface/ExternalLinkButton.cs b/osu.Game/Graphics/UserInterface/ExternalLinkButton.cs
index 6ad88eaaba..0df69a5b54 100644
--- a/osu.Game/Graphics/UserInterface/ExternalLinkButton.cs
+++ b/osu.Game/Graphics/UserInterface/ExternalLinkButton.cs
@@ -23,14 +23,20 @@ namespace osu.Game.Graphics.UserInterface
[Resolved]
private GameHost host { get; set; }
+ private readonly SpriteIcon linkIcon;
+
public ExternalLinkButton(string link = null)
{
Link = link;
Size = new Vector2(12);
- InternalChild = new SpriteIcon
+ InternalChildren = new Drawable[]
{
- Icon = FontAwesome.Solid.ExternalLinkAlt,
- RelativeSizeAxes = Axes.Both
+ linkIcon = new SpriteIcon
+ {
+ Icon = FontAwesome.Solid.ExternalLinkAlt,
+ RelativeSizeAxes = Axes.Both
+ },
+ new HoverClickSounds(HoverSampleSet.Submit)
};
}
@@ -42,13 +48,13 @@ namespace osu.Game.Graphics.UserInterface
protected override bool OnHover(HoverEvent e)
{
- InternalChild.FadeColour(hoverColour, 500, Easing.OutQuint);
+ linkIcon.FadeColour(hoverColour, 500, Easing.OutQuint);
return base.OnHover(e);
}
protected override void OnHoverLost(HoverLostEvent e)
{
- InternalChild.FadeColour(Color4.White, 500, Easing.OutQuint);
+ linkIcon.FadeColour(Color4.White, 500, Easing.OutQuint);
base.OnHoverLost(e);
}
diff --git a/osu.Game/Graphics/UserInterface/HoverSampleSet.cs b/osu.Game/Graphics/UserInterface/HoverSampleSet.cs
index b4afb4831f..a5ea6fcfbf 100644
--- a/osu.Game/Graphics/UserInterface/HoverSampleSet.cs
+++ b/osu.Game/Graphics/UserInterface/HoverSampleSet.cs
@@ -10,8 +10,8 @@ namespace osu.Game.Graphics.UserInterface
[Description("default")]
Default,
- [Description("soft")]
- Soft,
+ [Description("submit")]
+ Submit,
[Description("button")]
Button,
diff --git a/osu.Game/Graphics/UserInterface/TwoLayerButton.cs b/osu.Game/Graphics/UserInterface/TwoLayerButton.cs
index 8f03c7073c..969309bc79 100644
--- a/osu.Game/Graphics/UserInterface/TwoLayerButton.cs
+++ b/osu.Game/Graphics/UserInterface/TwoLayerButton.cs
@@ -71,7 +71,8 @@ namespace osu.Game.Graphics.UserInterface
}
}
- public TwoLayerButton()
+ public TwoLayerButton(HoverSampleSet sampleSet = HoverSampleSet.Default)
+ : base(sampleSet)
{
Size = SIZE_RETRACTED;
Shear = shear;
diff --git a/osu.Game/Graphics/UserInterfaceV2/OsuDirectorySelectorDirectory.cs b/osu.Game/Graphics/UserInterfaceV2/OsuDirectorySelectorDirectory.cs
index 794c728e56..618c7dabfa 100644
--- a/osu.Game/Graphics/UserInterfaceV2/OsuDirectorySelectorDirectory.cs
+++ b/osu.Game/Graphics/UserInterfaceV2/OsuDirectorySelectorDirectory.cs
@@ -32,7 +32,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
{
Depth = 1
},
- new HoverClickSounds(HoverSampleSet.Soft)
+ new HoverClickSounds()
});
}
diff --git a/osu.Game/Graphics/UserInterfaceV2/OsuFileSelector.cs b/osu.Game/Graphics/UserInterfaceV2/OsuFileSelector.cs
index e4c78e723d..3d09d09833 100644
--- a/osu.Game/Graphics/UserInterfaceV2/OsuFileSelector.cs
+++ b/osu.Game/Graphics/UserInterfaceV2/OsuFileSelector.cs
@@ -57,7 +57,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
{
Depth = 1
},
- new HoverClickSounds(HoverSampleSet.Soft)
+ new HoverClickSounds()
});
}
diff --git a/osu.Game/Online/Chat/DrawableLinkCompiler.cs b/osu.Game/Online/Chat/DrawableLinkCompiler.cs
index 53ea1d6f99..4df60eba69 100644
--- a/osu.Game/Online/Chat/DrawableLinkCompiler.cs
+++ b/osu.Game/Online/Chat/DrawableLinkCompiler.cs
@@ -31,6 +31,7 @@ namespace osu.Game.Online.Chat
protected override HoverSounds CreateHoverSounds(HoverSampleSet sampleSet) => new LinkHoverSounds(sampleSet, Parts);
public DrawableLinkCompiler(IEnumerable parts)
+ : base(HoverSampleSet.Submit)
{
Parts = parts.ToList();
}
diff --git a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs b/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs
index afb5eeda36..9ff39ce1dd 100644
--- a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs
+++ b/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs
@@ -50,6 +50,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
protected Action ViewBeatmap;
protected BeatmapPanel(BeatmapSetInfo setInfo)
+ : base(HoverSampleSet.Submit)
{
Debug.Assert(setInfo.OnlineBeatmapSetID != null);
diff --git a/osu.Game/Overlays/Chat/Tabs/ChannelTabItem.cs b/osu.Game/Overlays/Chat/Tabs/ChannelTabItem.cs
index cca4dc33e5..58b402c164 100644
--- a/osu.Game/Overlays/Chat/Tabs/ChannelTabItem.cs
+++ b/osu.Game/Overlays/Chat/Tabs/ChannelTabItem.cs
@@ -3,6 +3,9 @@
using System;
using osu.Framework.Allocation;
+using osu.Framework.Audio;
+using osu.Framework.Audio.Sample;
+using osu.Framework.Extensions;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@@ -13,6 +16,7 @@ using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input.Events;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Online.Chat;
using osuTK;
using osuTK.Graphics;
@@ -39,6 +43,8 @@ namespace osu.Game.Overlays.Chat.Tabs
protected override Container Content => content;
+ private Sample sampleTabSwitched;
+
public ChannelTabItem(Channel value)
: base(value)
{
@@ -112,6 +118,7 @@ namespace osu.Game.Overlays.Chat.Tabs
},
},
},
+ new HoverSounds()
};
}
@@ -152,11 +159,12 @@ namespace osu.Game.Overlays.Chat.Tabs
}
[BackgroundDependencyLoader]
- private void load(OsuColour colours)
+ private void load(OsuColour colours, AudioManager audio)
{
BackgroundActive = colours.ChatBlue;
BackgroundInactive = colours.Gray4;
backgroundHover = colours.Gray7;
+ sampleTabSwitched = audio.Samples.Get($@"UI/{HoverSampleSet.Default.GetDescription()}-select");
highlightBox.Colour = colours.Yellow;
}
@@ -217,7 +225,14 @@ namespace osu.Game.Overlays.Chat.Tabs
Text.Font = Text.Font.With(weight: FontWeight.Medium);
}
- protected override void OnActivated() => updateState();
+ protected override void OnActivated()
+ {
+ if (IsLoaded)
+ sampleTabSwitched?.Play();
+
+ updateState();
+ }
+
protected override void OnDeactivated() => updateState();
}
}
diff --git a/osu.Game/Overlays/Chat/Tabs/PrivateChannelTabItem.cs b/osu.Game/Overlays/Chat/Tabs/PrivateChannelTabItem.cs
index 7c82420e08..d01aec630e 100644
--- a/osu.Game/Overlays/Chat/Tabs/PrivateChannelTabItem.cs
+++ b/osu.Game/Overlays/Chat/Tabs/PrivateChannelTabItem.cs
@@ -25,7 +25,7 @@ namespace osu.Game.Overlays.Chat.Tabs
if (value.Type != ChannelType.PM)
throw new ArgumentException("Argument value needs to have the targettype user!");
- ClickableAvatar avatar;
+ DrawableAvatar avatar;
AddRange(new Drawable[]
{
@@ -48,10 +48,9 @@ namespace osu.Game.Overlays.Chat.Tabs
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Masking = true,
- Child = new DelayedLoadWrapper(avatar = new ClickableAvatar(value.Users.First())
+ Child = new DelayedLoadWrapper(avatar = new DrawableAvatar(value.Users.First())
{
- RelativeSizeAxes = Axes.Both,
- OpenOnClick = false,
+ RelativeSizeAxes = Axes.Both
})
{
RelativeSizeAxes = Axes.Both,
diff --git a/osu.Game/Overlays/News/NewsCard.cs b/osu.Game/Overlays/News/NewsCard.cs
index 599b45fa78..cc2fa7e1e1 100644
--- a/osu.Game/Overlays/News/NewsCard.cs
+++ b/osu.Game/Overlays/News/NewsCard.cs
@@ -14,6 +14,7 @@ using osu.Framework.Platform;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Overlays.News
@@ -28,6 +29,7 @@ namespace osu.Game.Overlays.News
private TextFlowContainer main;
public NewsCard(APINewsPost post)
+ : base(HoverSampleSet.Submit)
{
this.post = post;
diff --git a/osu.Game/Overlays/News/Sidebar/MonthSection.cs b/osu.Game/Overlays/News/Sidebar/MonthSection.cs
index b300a755f9..cd6ab224a9 100644
--- a/osu.Game/Overlays/News/Sidebar/MonthSection.cs
+++ b/osu.Game/Overlays/News/Sidebar/MonthSection.cs
@@ -15,13 +15,18 @@ using System.Collections.Generic;
using osu.Framework.Allocation;
using osu.Framework.Graphics.Sprites;
using System.Diagnostics;
+using osu.Framework.Audio;
+using osu.Framework.Audio.Sample;
using osu.Framework.Platform;
+using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.News.Sidebar
{
public class MonthSection : CompositeDrawable
{
private const int animation_duration = 250;
+ private Sample sampleOpen;
+ private Sample sampleClose;
public readonly BindableBool Expanded = new BindableBool();
@@ -51,6 +56,21 @@ namespace osu.Game.Overlays.News.Sidebar
}
}
};
+
+ Expanded.ValueChanged += expanded =>
+ {
+ if (expanded.NewValue)
+ sampleOpen?.Play();
+ else
+ sampleClose?.Play();
+ };
+ }
+
+ [BackgroundDependencyLoader]
+ private void load(AudioManager audio)
+ {
+ sampleOpen = audio.Samples.Get(@"UI/dropdown-open");
+ sampleClose = audio.Samples.Get(@"UI/dropdown-close");
}
private class DropdownHeader : OsuClickableContainer
@@ -59,6 +79,8 @@ namespace osu.Game.Overlays.News.Sidebar
private readonly SpriteIcon icon;
+ protected override HoverSounds CreateHoverSounds(HoverSampleSet sampleSet) => new HoverSounds();
+
public DropdownHeader(int month, int year)
{
var date = new DateTime(year, month, 1);
@@ -104,6 +126,7 @@ namespace osu.Game.Overlays.News.Sidebar
private readonly APINewsPost post;
public PostButton(APINewsPost post)
+ : base(HoverSampleSet.Submit)
{
this.post = post;
diff --git a/osu.Game/Overlays/Profile/Sections/BeatmapMetadataContainer.cs b/osu.Game/Overlays/Profile/Sections/BeatmapMetadataContainer.cs
index 67a976fe6f..a8a4cfc365 100644
--- a/osu.Game/Overlays/Profile/Sections/BeatmapMetadataContainer.cs
+++ b/osu.Game/Overlays/Profile/Sections/BeatmapMetadataContainer.cs
@@ -6,6 +6,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Beatmaps;
using osu.Game.Graphics.Containers;
+using osu.Game.Graphics.UserInterface;
namespace osu.Game.Overlays.Profile.Sections
{
@@ -17,6 +18,7 @@ namespace osu.Game.Overlays.Profile.Sections
private readonly BeatmapInfo beatmap;
protected BeatmapMetadataContainer(BeatmapInfo beatmap)
+ : base(HoverSampleSet.Submit)
{
this.beatmap = beatmap;
diff --git a/osu.Game/Overlays/Settings/Sections/Input/KeyBindingRow.cs b/osu.Game/Overlays/Settings/Sections/Input/KeyBindingRow.cs
index 4f7deebb5b..6e018597be 100644
--- a/osu.Game/Overlays/Settings/Sections/Input/KeyBindingRow.cs
+++ b/osu.Game/Overlays/Settings/Sections/Input/KeyBindingRow.cs
@@ -138,7 +138,8 @@ namespace osu.Game.Overlays.Settings.Sections.Input
},
}
}
- }
+ },
+ new HoverClickSounds()
};
foreach (var b in bindings)
@@ -458,6 +459,7 @@ namespace osu.Game.Overlays.Settings.Sections.Input
Origin = Anchor.Centre,
Text = keyBinding.KeyCombination.ReadableString(),
},
+ new HoverSounds()
};
}
diff --git a/osu.Game/Screens/Edit/EditorTable.cs b/osu.Game/Screens/Edit/EditorTable.cs
index 756339405c..ab8bd6a3bc 100644
--- a/osu.Game/Screens/Edit/EditorTable.cs
+++ b/osu.Game/Screens/Edit/EditorTable.cs
@@ -11,7 +11,6 @@ using osu.Framework.Localisation;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
-using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays;
using osuTK.Graphics;
@@ -67,7 +66,6 @@ namespace osu.Game.Screens.Edit
private EditorClock clock { get; set; }
public RowBackground(object item)
- : base(HoverSampleSet.Soft)
{
Item = item;
diff --git a/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs b/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs
index 845c0a914e..6ecb96f723 100644
--- a/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs
+++ b/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs
@@ -14,6 +14,7 @@ using osu.Game.Graphics.Sprites;
using osuTK;
using osuTK.Graphics;
using osu.Game.Graphics.Containers;
+using osu.Game.Graphics.UserInterface;
namespace osu.Game.Screens.Select.Options
{
@@ -76,6 +77,7 @@ namespace osu.Game.Screens.Select.Options
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => box.ReceivePositionalInputAt(screenSpacePos);
public BeatmapOptionsButton()
+ : base(HoverSampleSet.Submit)
{
Width = width;
RelativeSizeAxes = Axes.Y;
diff --git a/osu.Game/Users/Drawables/ClickableAvatar.cs b/osu.Game/Users/Drawables/ClickableAvatar.cs
index f73489ac61..c8af8d80e4 100644
--- a/osu.Game/Users/Drawables/ClickableAvatar.cs
+++ b/osu.Game/Users/Drawables/ClickableAvatar.cs
@@ -8,6 +8,7 @@ using osu.Framework.Graphics.Textures;
using osu.Framework.Input.Events;
using osu.Framework.Localisation;
using osu.Game.Graphics.Containers;
+using osu.Game.Graphics.UserInterface;
namespace osu.Game.Users.Drawables
{
@@ -71,6 +72,11 @@ namespace osu.Game.Users.Drawables
{
private LocalisableString tooltip = default_tooltip_text;
+ public ClickableArea()
+ : base(HoverSampleSet.Submit)
+ {
+ }
+
public override LocalisableString TooltipText
{
get => Enabled.Value ? tooltip : default;
diff --git a/osu.Game/Users/Drawables/UpdateableFlag.cs b/osu.Game/Users/Drawables/UpdateableFlag.cs
index 1d30720889..7db834bf83 100644
--- a/osu.Game/Users/Drawables/UpdateableFlag.cs
+++ b/osu.Game/Users/Drawables/UpdateableFlag.cs
@@ -5,6 +5,7 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Events;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays;
namespace osu.Game.Users.Drawables
@@ -32,9 +33,17 @@ namespace osu.Game.Users.Drawables
if (country == null && !ShowPlaceholderOnNull)
return null;
- return new DrawableFlag(country)
+ return new Container
{
RelativeSizeAxes = Axes.Both,
+ Children = new Drawable[]
+ {
+ new DrawableFlag(country)
+ {
+ RelativeSizeAxes = Axes.Both
+ },
+ new HoverClickSounds(HoverSampleSet.Submit)
+ }
};
}
diff --git a/osu.Game/Users/UserPanel.cs b/osu.Game/Users/UserPanel.cs
index 0981136dba..ff0d03a036 100644
--- a/osu.Game/Users/UserPanel.cs
+++ b/osu.Game/Users/UserPanel.cs
@@ -31,6 +31,7 @@ namespace osu.Game.Users
protected Drawable Background { get; private set; }
protected UserPanel(User user)
+ : base(HoverSampleSet.Submit)
{
if (user == null)
throw new ArgumentNullException(nameof(user));
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index 2efcfeb278..936fe8db94 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -37,7 +37,7 @@
-
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 2630614c03..7b7d5f80fe 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -71,7 +71,7 @@
-
+