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:
commit
09f4d1df47
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user