A game framework written with osu! in mind.

Merge branch 'reset-input-handlers' into tablet

+31 -25
+5
osu.Framework.Tests/Visual/Input/TestSceneInputManager.cs
··· 9 9 using osu.Framework.Graphics.Sprites; 10 10 using osu.Framework.Input; 11 11 using osu.Framework.Input.Events; 12 + using osu.Framework.Platform; 12 13 using osu.Framework.Platform.Windows; 13 14 using osuTK; 14 15 using osuTK.Graphics; ··· 172 173 [Resolved] 173 174 private FrameworkConfigManager config { get; set; } 174 175 176 + [Resolved] 177 + private GameHost host { get; set; } 178 + 175 179 [BackgroundDependencyLoader] 176 180 private void load() 177 181 { ··· 181 185 setRawInputConfig(false); 182 186 AddToggleStep("Toggle ConfineMouseMode", setConfineMouseModeConfig); 183 187 setConfineMouseModeConfig(false); 188 + AddStep("Reset handlers", () => host.ResetInputHandlers()); 184 189 } 185 190 186 191 private void setCursorSensivityConfig(double x)
+26 -25
osu.Framework/Platform/GameHost.cs
··· 584 584 IsActive.BindTo(Window.IsActive); 585 585 } 586 586 587 - resetInputHandlers(); 587 + initialiseInputHandlers(); 588 588 589 589 threadRunner.Start(); 590 590 ··· 694 694 Logger.Storage = Storage.GetStorageForDirectory("logs"); 695 695 } 696 696 697 - private void resetInputHandlers() 697 + private void initialiseInputHandlers() 698 698 { 699 - if (AvailableInputHandlers != null) 700 - { 701 - foreach (var h in AvailableInputHandlers) 702 - h.Dispose(); 703 - } 704 - 705 699 AvailableInputHandlers = CreateAvailableInputHandlers().ToImmutableArray(); 706 700 701 + // disable any ignored handlers before performing initialisation. 702 + ignoredInputHandlers.TriggerChange(); 703 + 707 704 foreach (var handler in AvailableInputHandlers) 708 705 { 706 + (handler as IHasCursorSensitivity)?.Sensitivity.BindTo(cursorSensitivity); 707 + 708 + if (!handler.Enabled.Value) 709 + continue; 710 + 709 711 if (!handler.Initialize(this)) 710 712 { 711 713 handler.Enabled.Value = false; 712 - continue; 713 714 } 715 + } 716 + } 714 717 715 - (handler as IHasCursorSensitivity)?.Sensitivity.BindTo(cursorSensitivity); 718 + /// <summary> 719 + /// Reset all input handlers' settings to a default state. 720 + /// </summary> 721 + public void ResetInputHandlers() 722 + { 723 + // disable any ignored handlers before performing initialisation. 724 + ignoredInputHandlers.TriggerChange(); 725 + 726 + foreach (var handler in AvailableInputHandlers) 727 + { 728 + (handler as IHasCursorSensitivity)?.Sensitivity.SetDefault(); 716 729 } 717 730 } 718 731 ··· 839 852 { 840 853 var configIgnores = e.NewValue.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s)); 841 854 842 - // for now, we always want at least one handler disabled (don't want raw and non-raw mouse at once). 843 - // Todo: We renamed OpenTK to osuTK, the second condition can be removed after some time has passed 844 - bool restoreDefaults = !configIgnores.Any() || e.NewValue.Contains("OpenTK"); 845 - 846 - if (restoreDefaults) 847 - { 848 - resetInputHandlers(); 849 - ignoredInputHandlers.Value = string.Join(' ', AvailableInputHandlers.Where(h => !h.Enabled.Value).Select(h => h.ToString())); 850 - } 851 - else 855 + foreach (var handler in AvailableInputHandlers) 852 856 { 853 - foreach (var handler in AvailableInputHandlers) 854 - { 855 - var handlerType = handler.ToString(); 856 - handler.Enabled.Value = configIgnores.All(ch => ch != handlerType); 857 - } 857 + var handlerType = handler.ToString(); 858 + handler.Enabled.Value = configIgnores.All(ch => ch != handlerType); 858 859 } 859 860 }; 860 861