···4040 /// Return every base type until (and excluding) <see cref="object"/>
4141 /// </summary>
4242 /// <param name="t"></param>
4343- /// <returns></returns>
4443 public static IEnumerable<Type> EnumerateBaseTypes(this Type t)
4544 {
4645 while (t != null && t != typeof(object))
-1
osu.Framework/Graphics/Colour4.cs
···8989 /// The final alpha is clamped to the 0-1 range.
9090 /// </summary>
9191 /// <param name="scalar">The value that the existing alpha will be multiplied by.</param>
9292- /// <returns></returns>
9392 public Colour4 MultiplyAlpha(float scalar)
9493 {
9594 if (scalar < 0)
···135135 /// </summary>
136136 /// <param name="position">The value to clamp.</param>
137137 /// <param name="extension">An extension value beyond the normal extent.</param>
138138- /// <returns></returns>
139138 protected float Clamp(float position, float extension = 0) => Math.Max(Math.Min(position, ScrollableExtent + extension), -extension);
140139141140 protected override Container<T> Content => ScrollContent;
-1
osu.Framework/Graphics/Lines/SmoothPath.cs
···7878 /// Retrieves the colour from a position in the texture of the <see cref="Path"/>.
7979 /// </summary>
8080 /// <param name="position">The position within the texture. 0 indicates the outermost-point of the path, 1 indicates the centre of the path.</param>
8181- /// <returns></returns>
8281 protected virtual Color4 ColourAt(float position) => Color4.White;
8382 }
8483}
-1
osu.Framework/Graphics/UserInterface/Menu.cs
···538538 /// <summary>
539539 /// Creates a sub-menu for <see cref="MenuItem.Items"/> of <see cref="MenuItem"/>s added to this <see cref="Menu"/>.
540540 /// </summary>
541541- /// <returns></returns>
542541 protected abstract Menu CreateSubMenu();
543542544543 /// <summary>
+34-3
osu.Framework/Input/Bindings/KeyCombination.cs
···232232233233 public string ReadableString()
234234 {
235235- var sortedKeys = Keys.GetValuesInOrder();
236236- return string.Join('-', sortedKeys.Select(getReadableKey));
235235+ var sortedKeys = Keys.GetValuesInOrder().ToArray();
236236+237237+ return string.Join('-', sortedKeys.Select(key =>
238238+ {
239239+ switch (key)
240240+ {
241241+ case InputKey.Control:
242242+ if (sortedKeys.Contains(InputKey.LControl) || sortedKeys.Contains(InputKey.RControl))
243243+ return null;
244244+245245+ break;
246246+247247+ case InputKey.Shift:
248248+ if (sortedKeys.Contains(InputKey.LShift) || sortedKeys.Contains(InputKey.RShift))
249249+ return null;
250250+251251+ break;
252252+253253+ case InputKey.Alt:
254254+ if (sortedKeys.Contains(InputKey.LAlt) || sortedKeys.Contains(InputKey.RAlt))
255255+ return null;
256256+257257+ break;
258258+259259+ case InputKey.Super:
260260+ if (sortedKeys.Contains(InputKey.LSuper) || sortedKeys.Contains(InputKey.RSuper))
261261+ return null;
262262+263263+ break;
264264+ }
265265+266266+ return getReadableKey(key);
267267+ }).Where(s => !string.IsNullOrEmpty(s)));
237268 }
238269239270 [MethodImpl(MethodImplOptions.AggressiveInlining)]
···259290 return false;
260291 }
261292262262- private string getReadableKey(InputKey key)
293293+ private static string getReadableKey(InputKey key)
263294 {
264295 if (key >= InputKey.FirstTabletAuxiliaryButton)
265296 return $"Tablet Aux {key - InputKey.FirstTabletAuxiliaryButton + 1}";
-1
osu.Framework/Platform/Display.cs
···5959 /// <param name="size">The <see cref="Size"/> to match.</param>
6060 /// <param name="bitsPerPixel">The bits per pixel to match. If null, the highest available bits per pixel will be used.</param>
6161 /// <param name="refreshRate">The refresh rate in hertz. If null, the highest available refresh rate will be used.</param>
6262- /// <returns></returns>
6362 public DisplayMode FindDisplayMode(Size size, int? bitsPerPixel = null, int? refreshRate = null) =>
6463 DisplayModes.Where(mode => mode.Size.Width <= size.Width && mode.Size.Height <= size.Height &&
6564 (bitsPerPixel == null || mode.BitsPerPixel == bitsPerPixel) &&
-2
osu.Framework/Platform/IWindow.cs
···151151 /// Convert a screen based coordinate to local window space.
152152 /// </summary>
153153 /// <param name="point"></param>
154154- /// <returns></returns>
155154 Point PointToClient(Point point);
156155157156 /// <summary>
158157 /// Convert a window based coordinate to global screen space.
159158 /// </summary>
160159 /// <param name="point"></param>
161161- /// <returns></returns>
162160 Point PointToScreen(Point point);
163161164162 /// <summary>
···394394 /// Remove the "TestScene" prefix from a name.
395395 /// </summary>
396396 /// <param name="name"></param>
397397- /// <returns></returns>
398397 public static string RemovePrefix(string name)
399398 {
400399 return name.Replace("TestCase", string.Empty) // TestScene used to be called TestCase. This handles consumer projects which haven't updated their naming for the near future.
-1
osu.Framework/Utils/Interpolation.cs
···2626 /// <param name="final">The end value.</param>
2727 /// <param name="base">The base of the exponential. The valid range is [0, 1], where smaller values mean that the final value is achieved more quickly, and values closer to 1 results in slow convergence to the final value.</param>
2828 /// <param name="exponent">The exponent of the exponential. An exponent of 0 results in the start values, whereas larger exponents make the result converge to the final value.</param>
2929- /// <returns></returns>
3029 public static double Damp(double start, double final, double @base, double exponent)
3130 {
3231 if (@base < 0 || @base > 1)
-1
osu.Framework/Utils/PathApproximator.cs
···314314 /// Computes various properties that can be used to approximate the circular arc.
315315 /// </summary>
316316 /// <param name="controlPoints">Three distinct points on the arc.</param>
317317- /// <returns></returns>
318317 private static CircularArcProperties circularArcProperties(ReadOnlySpan<Vector2> controlPoints)
319318 {
320319 Vector2 a = controlPoints[0];
+1-1
osu.Framework/osu.Framework.csproj
···4646 See https://github.com/NuGet/Home/issues/4514 and https://github.com/dotnet/sdk/issues/765 . -->
4747 <PackageReference Include="ppy.osu.Framework.NativeLibs" Version="2021.115.0" />
4848 <PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
4949- <PackageReference Include="OpenTabletDriver" Version="0.5.2.3" />
4949+ <PackageReference Include="OpenTabletDriver" Version="0.5.3" />
5050 <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.9.0" />
5151 <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.9.0">
5252 <NoWarn>NU1701</NoWarn> <!-- Requires .NETFramework for MSBuild, but we use Microsoft.Build.Locator which allows this package to work in .NETCoreApp. -->