mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 03:19:56 +00:00
Core - Added fading in and out of profiles
This commit is contained in:
1 parent
f30cc31ead
commit
194780b25c
6 files changed
+87
-3
No files matched your search
@@ -8,6 +8,15 @@ using SkiaSharp;
|
||||
|
||||
namespace Artemis.Core;
|
||||
|
||||
|
||||
internal enum FadingStatus
|
||||
{
|
||||
Enabled,
|
||||
FadingIn,
|
||||
FadingOut,
|
||||
Disabled
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a profile containing folders and layers
|
||||
/// </summary>
|
||||
@@ -18,12 +27,15 @@ public sealed class Profile : ProfileElement
|
||||
private readonly ObservableCollection<ProfileScript> _scripts;
|
||||
private bool _isFreshImport;
|
||||
private ProfileElement? _lastSelectedProfileElement;
|
||||
private double _opacity;
|
||||
|
||||
internal Profile(ProfileConfiguration configuration, ProfileEntity profileEntity) : base(null!)
|
||||
{
|
||||
_scripts = new ObservableCollection<ProfileScript>();
|
||||
_scriptConfigurations = new ObservableCollection<ScriptConfiguration>();
|
||||
|
||||
_opacity = 0d;
|
||||
|
||||
FadingStatus = FadingStatus.FadingIn;
|
||||
Configuration = configuration;
|
||||
Profile = this;
|
||||
ProfileEntity = profileEntity;
|
||||
@@ -81,6 +93,8 @@ public sealed class Profile : ProfileElement
|
||||
|
||||
internal List<Exception> Exceptions { get; }
|
||||
|
||||
internal FadingStatus FadingStatus { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Update(double deltaTime)
|
||||
{
|
||||
@@ -97,6 +111,16 @@ public sealed class Profile : ProfileElement
|
||||
|
||||
foreach (ProfileScript profileScript in Scripts)
|
||||
profileScript.OnProfileUpdated(deltaTime);
|
||||
|
||||
const double OPACITY_PER_SECOND = 1;
|
||||
if (FadingStatus == FadingStatus.FadingIn)
|
||||
_opacity = Math.Clamp(_opacity + OPACITY_PER_SECOND * deltaTime, 0d, 1d);
|
||||
if (FadingStatus == FadingStatus.FadingOut)
|
||||
_opacity = Math.Clamp(_opacity - OPACITY_PER_SECOND * deltaTime, 0d, 1d);
|
||||
if (_opacity == 0d)
|
||||
FadingStatus = FadingStatus.Disabled;
|
||||
if (_opacity == 1d)
|
||||
FadingStatus = FadingStatus.Enabled;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,9 +135,17 @@ public sealed class Profile : ProfileElement
|
||||
foreach (ProfileScript profileScript in Scripts)
|
||||
profileScript.OnProfileRendering(canvas, canvas.LocalClipBounds);
|
||||
|
||||
using var opacityPaint = new SKPaint();
|
||||
if (Configuration.FadeInAndOut && FadingStatus != FadingStatus.Enabled)
|
||||
opacityPaint.Color = new SKColor(0, 0, 0, (byte)(255d * Easings.CubicEaseInOut(_opacity)));
|
||||
|
||||
canvas.SaveLayer(opacityPaint);
|
||||
|
||||
foreach (ProfileElement profileElement in Children)
|
||||
profileElement.Render(canvas, basePosition, editorFocus);
|
||||
|
||||
canvas.Restore();
|
||||
|
||||
foreach (ProfileScript profileScript in Scripts)
|
||||
profileScript.OnProfileRendered(canvas, canvas.LocalClipBounds);
|
||||
|
||||
@@ -165,6 +197,17 @@ public sealed class Profile : ProfileElement
|
||||
layer.PopulateLeds(devices);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the fade out process.
|
||||
/// </summary>
|
||||
public void FadeOut()
|
||||
{
|
||||
if (Disposed)
|
||||
throw new ObjectDisposedException("Profile");
|
||||
|
||||
FadingStatus = FadingStatus.FadingOut;
|
||||
}
|
||||
|
||||
#region Overrides of BreakableModel
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
Reference in new issue
Block a user