mirror of
https://github.com/ppy/osu.git
synced 2024-11-06 11:27:24 +08:00
Merge pull request #1161 from peppy/volume-control-fixes
Update volume control logic to use key bindings
This commit is contained in:
commit
a06cd9b419
@ -1 +1 @@
|
||||
Subproject commit f1527e5456cd228ddfb68cf6d56eb5d28dc360bf
|
||||
Subproject commit ba70b8eaa9b79d4248873d4399f3b9e918fc3c8f
|
@ -3,11 +3,11 @@
|
||||
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Input;
|
||||
using osu.Framework.Threading;
|
||||
using OpenTK;
|
||||
using osu.Framework.Audio;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Game.Input.Bindings;
|
||||
|
||||
namespace osu.Game.Graphics.UserInterface.Volume
|
||||
{
|
||||
@ -64,15 +64,25 @@ namespace osu.Game.Graphics.UserInterface.Volume
|
||||
volumeMeterMusic.Bindable.ValueChanged -= volumeChanged;
|
||||
}
|
||||
|
||||
public void Adjust(InputState state)
|
||||
public bool Adjust(GlobalAction action)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case GlobalAction.DecreaseVolume:
|
||||
if (State == Visibility.Hidden)
|
||||
{
|
||||
Show();
|
||||
return;
|
||||
else
|
||||
volumeMeterMaster.Decrease();
|
||||
return true;
|
||||
case GlobalAction.IncreaseVolume:
|
||||
if (State == Visibility.Hidden)
|
||||
Show();
|
||||
else
|
||||
volumeMeterMaster.Increase();
|
||||
return true;
|
||||
}
|
||||
|
||||
volumeMeterMaster.TriggerOnWheel(state);
|
||||
return false;
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
|
@ -3,32 +3,16 @@
|
||||
|
||||
using System;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Input;
|
||||
using OpenTK.Input;
|
||||
using osu.Framework.Input.Bindings;
|
||||
using osu.Game.Input.Bindings;
|
||||
|
||||
namespace osu.Game.Graphics.UserInterface.Volume
|
||||
{
|
||||
internal class VolumeControlReceptor : Container
|
||||
internal class VolumeControlReceptor : Container, IKeyBindingHandler<GlobalAction>
|
||||
{
|
||||
public Action<InputState> ActionRequested;
|
||||
public Func<GlobalAction, bool> ActionRequested;
|
||||
|
||||
protected override bool OnWheel(InputState state)
|
||||
{
|
||||
ActionRequested?.Invoke(state);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
|
||||
{
|
||||
switch (args.Key)
|
||||
{
|
||||
case Key.Up:
|
||||
case Key.Down:
|
||||
ActionRequested?.Invoke(state);
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnKeyDown(state, args);
|
||||
}
|
||||
public bool OnPressed(GlobalAction action) => ActionRequested?.Invoke(action) ?? false;
|
||||
public bool OnReleased(GlobalAction action) => false;
|
||||
}
|
||||
}
|
||||
|
@ -4,15 +4,16 @@
|
||||
using osu.Framework.Configuration;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Framework.Input;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics;
|
||||
using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Input.Bindings;
|
||||
using osu.Game.Input.Bindings;
|
||||
|
||||
namespace osu.Game.Graphics.UserInterface.Volume
|
||||
{
|
||||
internal class VolumeMeter : Container
|
||||
internal class VolumeMeter : Container, IKeyBindingHandler<GlobalAction>
|
||||
{
|
||||
private readonly Box meterFill;
|
||||
public BindableDouble Bindable { get; } = new BindableDouble();
|
||||
@ -76,12 +77,35 @@ namespace osu.Game.Graphics.UserInterface.Volume
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool OnWheel(InputState state)
|
||||
public void Increase()
|
||||
{
|
||||
Volume += 0.05f * state.Mouse.WheelDelta;
|
||||
return true;
|
||||
Volume += 0.05f;
|
||||
}
|
||||
|
||||
public void Decrease()
|
||||
{
|
||||
Volume -= 0.05f;
|
||||
}
|
||||
|
||||
private void updateFill() => meterFill.ScaleTo(new Vector2(1, (float)Volume), 300, Easing.OutQuint);
|
||||
|
||||
public bool OnPressed(GlobalAction action)
|
||||
{
|
||||
if (!IsHovered) return false;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GlobalAction.DecreaseVolume:
|
||||
Decrease();
|
||||
return true;
|
||||
case GlobalAction.IncreaseVolume:
|
||||
Increase();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool OnReleased(GlobalAction action) => false;
|
||||
}
|
||||
}
|
@ -26,7 +26,10 @@ namespace osu.Game.Input.Bindings
|
||||
new KeyBinding(new[] { InputKey.Control, InputKey.Alt, InputKey.R }, GlobalAction.ResetInputSettings),
|
||||
new KeyBinding(new[] { InputKey.Control, InputKey.T }, GlobalAction.ToggleToolbar),
|
||||
new KeyBinding(new[] { InputKey.Control, InputKey.O }, GlobalAction.ToggleSettings),
|
||||
new KeyBinding(new[] { InputKey.Control, InputKey.D }, GlobalAction.ToggleDirect),
|
||||
new KeyBinding(new[] { InputKey.Up }, GlobalAction.IncreaseVolume),
|
||||
new KeyBinding(new[] { InputKey.MouseWheelUp }, GlobalAction.IncreaseVolume),
|
||||
new KeyBinding(new[] { InputKey.Down }, GlobalAction.DecreaseVolume),
|
||||
new KeyBinding(new[] { InputKey.MouseWheelDown }, GlobalAction.DecreaseVolume),
|
||||
};
|
||||
|
||||
protected override IEnumerable<Drawable> KeyBindingInputQueue =>
|
||||
@ -47,5 +50,9 @@ namespace osu.Game.Input.Bindings
|
||||
ToggleSettings,
|
||||
[Description("Toggle osu!direct")]
|
||||
ToggleDirect,
|
||||
[Description("Increase Volume")]
|
||||
IncreaseVolume,
|
||||
[Description("Decrease Volume")]
|
||||
DecreaseVolume,
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ using osu.Game.Configuration;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Game.Overlays;
|
||||
using osu.Framework.Input;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Game.Graphics.UserInterface.Volume;
|
||||
using osu.Framework.Allocation;
|
||||
@ -160,7 +159,7 @@ namespace osu.Game
|
||||
new VolumeControlReceptor
|
||||
{
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
ActionRequested = delegate(InputState state) { volume.Adjust(state); }
|
||||
ActionRequested = action => volume.Adjust(action)
|
||||
},
|
||||
mainContent = new Container
|
||||
{
|
||||
|
@ -136,10 +136,9 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
|
||||
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)
|
||||
{
|
||||
if (HasFocus)
|
||||
{
|
||||
if (bindTarget.IsHovered)
|
||||
{
|
||||
if (!HasFocus || !bindTarget.IsHovered)
|
||||
return base.OnMouseDown(state, args);
|
||||
|
||||
if (!AllowMainMouseButtons)
|
||||
{
|
||||
switch (args.Button)
|
||||
@ -153,15 +152,13 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
bindTarget.UpdateKeyCombination(KeyCombination.FromInputState(state));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return base.OnMouseDown(state, args);
|
||||
}
|
||||
|
||||
protected override bool OnMouseUp(InputState state, MouseUpEventArgs args)
|
||||
{
|
||||
if (HasFocus && !state.Mouse.Buttons.Any())
|
||||
{
|
||||
// don't do anything until the last button is released.
|
||||
if (!HasFocus || state.Mouse.Buttons.Any())
|
||||
return base.OnMouseUp(state, args);
|
||||
|
||||
if (bindTarget.IsHovered)
|
||||
finalise();
|
||||
else
|
||||
@ -169,7 +166,19 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnMouseUp(state, args);
|
||||
protected override bool OnWheel(InputState state)
|
||||
{
|
||||
if (HasFocus)
|
||||
{
|
||||
if (bindTarget.IsHovered)
|
||||
{
|
||||
bindTarget.UpdateKeyCombination(KeyCombination.FromInputState(state));
|
||||
finalise();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return base.OnWheel(state);
|
||||
}
|
||||
|
||||
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
|
||||
@ -196,15 +205,12 @@ namespace osu.Game.Overlays.KeyBinding
|
||||
|
||||
protected override bool OnKeyUp(InputState state, KeyUpEventArgs args)
|
||||
{
|
||||
if (HasFocus)
|
||||
{
|
||||
if (!HasFocus) return base.OnKeyUp(state, args);
|
||||
|
||||
finalise();
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnKeyUp(state, args);
|
||||
}
|
||||
|
||||
private void finalise()
|
||||
{
|
||||
if (bindTarget != null)
|
||||
|
Loading…
Reference in New Issue
Block a user