Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add settings for toggling raw input and adjusting sensitivity #893

Merged
merged 9 commits into from
Jun 5, 2017
94 changes: 91 additions & 3 deletions osu.Game/Overlays/Settings/Sections/Input/MouseSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,31 @@ public class MouseSettings : SettingsSubsection
{
protected override string Header => "Mouse";

private readonly BindableBool rawInputToggle = new BindableBool();
private Bindable<string> activeInputHandlers;
private SensitivitySetting sensitivity;

[BackgroundDependencyLoader]
private void load(OsuConfigManager osuConfig, FrameworkConfigManager config)
{
activeInputHandlers = config.GetBindable<string>(FrameworkSetting.ActiveInputHandlers);
rawInputToggle.Value = activeInputHandlers.Value.Contains("Raw");

Children = new Drawable[]
{
new SettingsCheckbox
{
LabelText = "Raw Input",
Bindable = rawInputToggle
},
sensitivity = new SensitivitySetting
{
LabelText = "Cursor Sensitivity",
Bindable = config.GetBindable<double>(FrameworkSetting.CursorSensitivity)
},
new SettingsEnumDropdown<ConfineMouseMode>
{
LabelText = "Confine mouse cursor",
LabelText = "Confine mouse cursor to window",
Bindable = config.GetBindable<ConfineMouseMode>(FrameworkSetting.ConfineMouseMode),
},
new SettingsCheckbox
Expand All @@ -35,11 +52,82 @@ private void load(OsuConfigManager osuConfig, FrameworkConfigManager config)
Bindable = osuConfig.GetBindable<bool>(OsuSetting.MouseDisableButtons)
},
};

rawInputToggle.ValueChanged += enabled =>
{
// this is temporary until we support per-handler settings.
const string raw_mouse_handler = @"OpenTKRawMouseHandler";
const string standard_mouse_handler = @"OpenTKMouseHandler";

activeInputHandlers.Value = enabled ?
activeInputHandlers.Value.Replace(standard_mouse_handler, raw_mouse_handler) :
activeInputHandlers.Value.Replace(raw_mouse_handler, standard_mouse_handler);

sensitivity.Bindable.Disabled = !enabled;
};

rawInputToggle.TriggerChange();
}

private class SensitivitySetting : SettingsSlider<double, SensitivitySlider>

This comment was marked as off-topic.

This comment was marked as off-topic.

{
public override Bindable<double> Bindable
{
get { return ((SensitivitySlider)Control).Sensitivity; }

set
{
BindableDouble doubleValue = (BindableDouble)value;

// create a second layer of bindable so we can only handle state changes when not being dragged.
((SensitivitySlider)Control).Sensitivity = doubleValue;

// this bindable will still act as the "interactive" bindable displayed during a drag.
base.Bindable = new BindableDouble(doubleValue.Value)
{
MinValue = doubleValue.MinValue,
MaxValue = doubleValue.MaxValue
};

// one-way binding to update the sliderbar with changes from external actions.
doubleValue.DisabledChanged += disabled => base.Bindable.Disabled = disabled;
doubleValue.ValueChanged += newValue => base.Bindable.Value = newValue;
}
}
}

private class SensitivitySlider : OsuSliderBar<double>
{
public override string TooltipText => Current.Value.ToString(@"0.##x");
public Bindable<double> Sensitivity;

public SensitivitySlider()
{
KeyboardStep = 0.01f;

Current.ValueChanged += newValue =>
{
if (!isDragging && Sensitivity != null)
Sensitivity.Value = newValue;
};
}

private bool isDragging;

protected override bool OnDragStart(InputState state)
{
isDragging = true;
return base.OnDragStart(state);
}

protected override bool OnDragEnd(InputState state)
{
isDragging = false;
Current.TriggerChange();

return base.OnDragEnd(state);
}

public override string TooltipText => Current.Disabled ? "Enable raw input to adjust sensitivity" : Current.Value.ToString(@"0.##x");
}
}
}
}
2 changes: 1 addition & 1 deletion osu.Game/Overlays/Settings/SettingsItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public virtual string LabelText
// hold a reference to the provided bindable so we don't have to in every settings section.
private Bindable<T> bindable;

public Bindable<T> Bindable
public virtual Bindable<T> Bindable
{
get
{
Expand Down