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

Merge pull request #1383 from peppy/notification-thread-safety

Make ProgressNotification's status and progress thread-safe
This commit is contained in:
Dan Balasescu 2017-10-20 17:01:39 +09:00 committed by GitHub
commit 09f4d1df47
2 changed files with 39 additions and 41 deletions

View File

@ -25,10 +25,7 @@ namespace osu.Game.Overlays.Notifications
public float Progress
{
get { return progressBar.Progress; }
set
{
progressBar.Progress = value;
}
set { Schedule(() => progressBar.Progress = value); }
}
protected override void LoadComplete()
@ -44,41 +41,44 @@ namespace osu.Game.Overlays.Notifications
get { return state; }
set
{
bool stateChanged = state != value;
state = value;
if (IsLoaded)
Schedule(() =>
{
switch (state)
{
case ProgressNotificationState.Queued:
Light.Colour = colourQueued;
Light.Pulsate = false;
progressBar.Active = false;
break;
case ProgressNotificationState.Active:
Light.Colour = colourActive;
Light.Pulsate = true;
progressBar.Active = true;
break;
case ProgressNotificationState.Cancelled:
Light.Colour = colourCancelled;
Light.Pulsate = false;
progressBar.Active = false;
break;
}
}
bool stateChanged = state != value;
state = value;
if (stateChanged)
{
switch (state)
if (IsLoaded)
{
case ProgressNotificationState.Completed:
NotificationContent.MoveToY(-DrawSize.Y / 2, 200, Easing.OutQuint);
this.FadeOut(200).Finally(d => Completed());
break;
switch (state)
{
case ProgressNotificationState.Queued:
Light.Colour = colourQueued;
Light.Pulsate = false;
progressBar.Active = false;
break;
case ProgressNotificationState.Active:
Light.Colour = colourActive;
Light.Pulsate = true;
progressBar.Active = true;
break;
case ProgressNotificationState.Cancelled:
Light.Colour = colourCancelled;
Light.Pulsate = false;
progressBar.Active = false;
break;
}
}
}
if (stateChanged)
{
switch (state)
{
case ProgressNotificationState.Completed:
NotificationContent.MoveToY(-DrawSize.Y / 2, 200, Easing.OutQuint);
this.FadeOut(200).Finally(d => Completed());
break;
}
}
});
}
}
@ -232,4 +232,4 @@ namespace osu.Game.Overlays.Notifications
Completed,
Cancelled
}
}
}

View File

@ -66,13 +66,11 @@ namespace osu.Game.Tests.Visual
progressingNotifications.RemoveAll(n => n.State == ProgressNotificationState.Completed);
while (progressingNotifications.Count(n => n.State == ProgressNotificationState.Active) < 3)
if (progressingNotifications.Count(n => n.State == ProgressNotificationState.Active) < 3)
{
var p = progressingNotifications.FirstOrDefault(n => n.IsAlive && n.State == ProgressNotificationState.Queued);
if (p == null)
break;
p.State = ProgressNotificationState.Active;
if (p != null)
p.State = ProgressNotificationState.Active;
}
foreach (var n in progressingNotifications.FindAll(n => n.State == ProgressNotificationState.Active))