matching the notifications to the new styling

This commit is contained in:
choco
2025-12-16 11:35:52 +01:00
parent a41f419076
commit 755bae1294

View File

@@ -6,6 +6,7 @@ using LightlessSync.LightlessConfiguration.Models;
using LightlessSync.Services; using LightlessSync.Services;
using LightlessSync.Services.Mediator; using LightlessSync.Services.Mediator;
using LightlessSync.UI.Models; using LightlessSync.UI.Models;
using LightlessSync.UI.Style;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Numerics; using System.Numerics;
@@ -30,6 +31,7 @@ public class LightlessNotificationUi : WindowMediatorSubscriberBase
private readonly LightlessConfigService _configService; private readonly LightlessConfigService _configService;
private readonly Dictionary<string, float> _notificationYOffsets = []; private readonly Dictionary<string, float> _notificationYOffsets = [];
private readonly Dictionary<string, float> _notificationTargetYOffsets = []; private readonly Dictionary<string, float> _notificationTargetYOffsets = [];
private readonly Dictionary<string, Vector4> _notificationBackgrounds = [];
public LightlessNotificationUi(ILogger<LightlessNotificationUi> logger, LightlessMediator mediator, PerformanceCollectorService performanceCollector, LightlessConfigService configService) public LightlessNotificationUi(ILogger<LightlessNotificationUi> logger, LightlessMediator mediator, PerformanceCollectorService performanceCollector, LightlessConfigService configService)
: base(logger, mediator, "Lightless Notifications##LightlessNotifications", performanceCollector) : base(logger, mediator, "Lightless Notifications##LightlessNotifications", performanceCollector)
@@ -225,6 +227,7 @@ public class LightlessNotificationUi : WindowMediatorSubscriberBase
_notifications.RemoveAt(i); _notifications.RemoveAt(i);
_notificationYOffsets.Remove(notification.Id); _notificationYOffsets.Remove(notification.Id);
_notificationTargetYOffsets.Remove(notification.Id); _notificationTargetYOffsets.Remove(notification.Id);
_notificationBackgrounds.Remove(notification.Id);
} }
} }
} }
@@ -333,14 +336,15 @@ public class LightlessNotificationUi : WindowMediatorSubscriberBase
var windowPos = ImGui.GetWindowPos(); var windowPos = ImGui.GetWindowPos();
var windowSize = ImGui.GetWindowSize(); var windowSize = ImGui.GetWindowSize();
var bgColor = CalculateBackgroundColor(alpha, ImGui.IsWindowHovered());
var accentColor = GetNotificationAccentColor(notification.Type); var accentColor = GetNotificationAccentColor(notification.Type);
accentColor.W *= alpha; var bgColor = CalculateBackgroundColor(notification, alpha, ImGui.IsWindowHovered(), accentColor);
var accentColorWithAlpha = accentColor;
accentColorWithAlpha.W *= alpha;
DrawShadow(drawList, windowPos, windowSize, alpha); DrawShadow(drawList, windowPos, windowSize, alpha);
HandleClickToDismiss(notification); HandleClickToDismiss(notification);
DrawBackground(drawList, windowPos, windowSize, bgColor); DrawBackground(drawList, windowPos, windowSize, bgColor);
DrawAccentBar(drawList, windowPos, windowSize, accentColor); DrawAccentBar(drawList, windowPos, windowSize, accentColorWithAlpha);
DrawDurationProgressBar(notification, alpha, windowPos, windowSize, drawList); DrawDurationProgressBar(notification, alpha, windowPos, windowSize, drawList);
// Draw download progress bar above duration bar for download notifications // Draw download progress bar above duration bar for download notifications
@@ -352,16 +356,38 @@ public class LightlessNotificationUi : WindowMediatorSubscriberBase
DrawNotificationText(notification, alpha); DrawNotificationText(notification, alpha);
} }
private Vector4 CalculateBackgroundColor(float alpha, bool isHovered) private Vector4 CalculateBackgroundColor(LightlessNotification notification, float alpha, bool isHovered, Vector4 accentColor)
{ {
var baseOpacity = _configService.Current.NotificationOpacity; var baseOpacity = _configService.Current.NotificationOpacity;
var finalOpacity = baseOpacity * alpha; var finalOpacity = baseOpacity * alpha;
var bgColor = new Vector4(30f/255f, 30f/255f, 30f/255f, finalOpacity);
float boost = Luminance.ComputeHighlight(null, accentColor);
var baseBg = new Vector4(
30f/255f + boost,
30f/255f + boost,
30f/255f + boost,
finalOpacity
);
if (!_notificationBackgrounds.ContainsKey(notification.Id))
{
_notificationBackgrounds[notification.Id] = baseBg;
}
var currentBg = _notificationBackgrounds[notification.Id];
var bgColor = Luminance.BackgroundContrast(null, accentColor, baseBg, ref currentBg);
_notificationBackgrounds[notification.Id] = currentBg;
bgColor.W = finalOpacity;
if (isHovered) if (isHovered)
{ {
bgColor *= 1.1f; bgColor = new Vector4(
bgColor.W = Math.Min(bgColor.W, 0.98f); bgColor.X * 1.1f,
bgColor.Y * 1.1f,
bgColor.Z * 1.1f,
Math.Min(bgColor.W, 0.98f)
);
} }
return bgColor; return bgColor;