feat(sidebar): subtle pulse animation on unread-dot indicator
Sin-based alpha scaling between 60% and 100% with a 2-second cycle. Subtle enough to register peripherally without becoming distracting. Respects Plugin.Config.ReduceMotion (field exists since v1.1.0, toggle UI lands in v1.3.0) — static render when disabled.
This commit is contained in:
@@ -1604,10 +1604,26 @@ public sealed class ChatLogWindow : Window
|
||||
var dotCenter = new Vector2(
|
||||
max.X - dotRadius - dotPadding,
|
||||
min.Y + dotRadius + dotPadding);
|
||||
|
||||
// v1.2.0 — Sanfter Pulse-Effekt: Alpha schwankt zwischen 60% und
|
||||
// 100% mit ~2-Sekunden-Cycle (subtil, nicht hektisch).
|
||||
// Plugin.Config.ReduceMotion (Field seit v1.1.0) skipt den Pulse
|
||||
// und rendert statisch — Default ist Animation an.
|
||||
var dotColor = theme.Colors.StatusDanger;
|
||||
if (!Plugin.Config.ReduceMotion)
|
||||
{
|
||||
// Sin-basierter 2s-Cycle: -1..1 → 0..1 → 0.6..1.0 Alpha-Skala.
|
||||
var phase = (float)((Math.Sin(Environment.TickCount64 / 1000.0 * Math.PI) + 1.0) * 0.5);
|
||||
var alphaScale = 0.6f + 0.4f * phase;
|
||||
var origAlpha = dotColor & 0xFFu;
|
||||
var pulsedAlpha = (uint)(origAlpha * alphaScale);
|
||||
dotColor = (dotColor & 0xFFFFFF00u) | pulsedAlpha;
|
||||
}
|
||||
|
||||
ImGui.GetWindowDrawList().AddCircleFilled(
|
||||
dotCenter,
|
||||
dotRadius,
|
||||
ColourUtil.RgbaToAbgr(theme.Colors.StatusDanger),
|
||||
ColourUtil.RgbaToAbgr(dotColor),
|
||||
12);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user