1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 07:07:45 +08:00

Merge pull request #12100 from bdach/invalid-thread-mutation-tablet

Fix transform mutations from invalid thread on tablet disconnection/reconnection
This commit is contained in:
Dean Herbert 2021-03-20 21:30:12 +09:00 committed by GitHub
commit 0bb6fbdd38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 17 deletions

View File

@ -125,17 +125,20 @@ namespace osu.Game.Overlays.Settings.Sections.Input
}, true);
tablet.BindTo(handler.Tablet);
tablet.BindValueChanged(val =>
{
tabletContainer.Size = val.NewValue?.Size ?? Vector2.Zero;
tabletName.Text = val.NewValue?.Name ?? string.Empty;
checkBounds();
}, true);
tablet.BindValueChanged(_ => Scheduler.AddOnce(updateTabletDetails));
updateTabletDetails();
// initial animation should be instant.
FinishTransforms(true);
}
private void updateTabletDetails()
{
tabletContainer.Size = tablet.Value?.Size ?? Vector2.Zero;
tabletName.Text = tablet.Value?.Name ?? string.Empty;
checkBounds();
}
private static int greatestCommonDivider(int a, int b)
{
while (b != 0)

View File

@ -196,19 +196,13 @@ namespace osu.Game.Overlays.Settings.Sections.Input
tablet.BindTo(tabletHandler.Tablet);
tablet.BindValueChanged(val =>
{
Scheduler.AddOnce(toggleVisibility);
var tab = val.NewValue;
bool tabletFound = tab != null;
if (!tabletFound)
{
mainSettings.Hide();
noTabletMessage.Show();
return;
}
mainSettings.Show();
noTabletMessage.Hide();
offsetX.MaxValue = tab.Size.X;
offsetX.Default = tab.Size.X / 2;
@ -222,13 +216,28 @@ namespace osu.Game.Overlays.Settings.Sections.Input
}, true);
}
private void toggleVisibility()
{
bool tabletFound = tablet.Value != null;
if (!tabletFound)
{
mainSettings.Hide();
noTabletMessage.Show();
return;
}
mainSettings.Show();
noTabletMessage.Hide();
}
private void applyAspectRatio(BindableNumber<float> sizeChanged)
{
try
{
if (!aspectLock.Value)
{
float proposedAspectRatio = curentAspectRatio;
float proposedAspectRatio = currentAspectRatio;
if (proposedAspectRatio >= aspectRatio.MinValue && proposedAspectRatio <= aspectRatio.MaxValue)
{
@ -269,8 +278,8 @@ namespace osu.Game.Overlays.Settings.Sections.Input
aspectLock.Value = true;
}
private void updateAspectRatio() => aspectRatio.Value = curentAspectRatio;
private void updateAspectRatio() => aspectRatio.Value = currentAspectRatio;
private float curentAspectRatio => sizeX.Value / sizeY.Value;
private float currentAspectRatio => sizeX.Value / sizeY.Value;
}
}