matching the notifications to the new styling
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user