release(v1.5.4): manifest bump and forge post
Bumps csproj, yaml, repo.json, CHANGELOG, ROADMAP and README in lock-step to 1.5.4. Forge-post DE-body added with the Polish & Motion versionsnatur. Slim-rule applied to the yaml and repo.json changelog blocks (keeps v1.5.4 + v1.5.3 + v1.5.2 + v1.5.1, drops v1.5.0). A csharpier reflow of two v1.5.4 source files (ChatLogWindow, HellionStyle) is folded in. preflight.sh blocks A-F all green.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
|
||||
<PropertyGroup>
|
||||
<!-- Independent versioning; see yaml changelog for upstream Chat 2 base -->
|
||||
<Version>1.5.3</Version>
|
||||
<Version>1.5.4</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<!-- Use lock file to pin exact versions -->
|
||||
|
||||
@@ -35,6 +35,44 @@ tags:
|
||||
- Replacement
|
||||
- Privacy
|
||||
changelog: |-
|
||||
**v1.5.4 — Polish and Motion (2026-05-20)**
|
||||
|
||||
A polish cycle: smoother theme switching, faster theme and tab
|
||||
access, and subtle hover motion. Three P3 items plus an
|
||||
accessibility toggle.
|
||||
|
||||
User-visible:
|
||||
|
||||
- Theme switches now crossfade smoothly over ~300 ms across every
|
||||
Hellion-rendered surface — sidebar, title, buttons, tabs,
|
||||
scrollbar, separators. The window background snaps deliberately
|
||||
so the per-window opacity override from Dalamud's pinning menu
|
||||
stays untouched.
|
||||
- New header quick-picker: a palette button left of the cog opens
|
||||
a compact popup with two sections — every built-in and custom
|
||||
theme, and every tab. The active entry carries a check glyph;
|
||||
clicking another switches without closing the popup.
|
||||
- Sidebar icons ease their opacity on hover, and card-mode message
|
||||
borders highlight per tab while the cursor is over their rows.
|
||||
Framerate-independent, so a stalled Wine frame cannot overshoot
|
||||
the animation.
|
||||
- New "Reduce motion" toggle in Theme & Layout disables the
|
||||
crossfade, the hover animations and the unread-tab pulse for
|
||||
users who prefer a static UI.
|
||||
|
||||
Under the hood:
|
||||
|
||||
- Two pure-helper lerp paths (ThemeAbgrCacheLerp, FrameLerp) with
|
||||
xUnit coverage in the Build Suite, plus a ColourUtil.ApplyAlpha
|
||||
alpha modulator. Two new /xlperf self-test steps pin the
|
||||
crossfade and quick-picker contracts.
|
||||
|
||||
No schema bump, no migration. Migration v17 stays.
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
**v1.5.3 — Localisation Wave + Bundled-Font Overhaul (2026-05-19)**
|
||||
|
||||
Multi-language pass plus a long-standing first-frame HITCH lands
|
||||
@@ -194,52 +232,4 @@ changelog: |-
|
||||
|
||||
---
|
||||
|
||||
**v1.5.0 — DI Foundation and Service Refactor (2026-05-17)**
|
||||
|
||||
Major architecture cycle. The plugin bootstrap moves to a
|
||||
generic-host DI container (Microsoft.Extensions.Hosting +
|
||||
IServiceCollection) modelled on Lightless Sync. Service logging
|
||||
moves from a static Plugin.LogProxy locator to typed
|
||||
Microsoft.Extensions.Logging.ILogger<T> via constructor injection,
|
||||
bridged over Dalamud's IPluginLog by a custom DalamudLogger trio.
|
||||
|
||||
What changes under the hood:
|
||||
|
||||
- 18 instance-class services migrate to ILogger<T> via constructor
|
||||
injection across four slices: data layer (MessageStore,
|
||||
MessageManager, AutoTellTabsService), IPC and integrations
|
||||
(HonorificService, IpcManager, TypingIpc, ExtraChat, the three
|
||||
GameFunctions classes), UI window layer (ChatLogWindow,
|
||||
DbViewer, Popout, three settings tabs), and root (Commands,
|
||||
ThemeRegistry, PayloadHandler).
|
||||
- Plugin.LogProxy stays in place for the eight buckets ctor
|
||||
injection cannot reach: static helpers (EmoteCache,
|
||||
AutoTranslate, MemoryUtil, WrapperUtil), Dalamud-reflected
|
||||
types (Configuration), the Message data class, and instance
|
||||
classes that only log from static methods (FontManager, one
|
||||
GameFunctions site).
|
||||
- Plugin.cs finishes at 1012 lines — virtually identical to the
|
||||
pre-cycle 1013. The new Phase-1 host build and Plugin.X bridge
|
||||
wiring trade out exactly the service and window allocations
|
||||
that previously lived in LoadAsync.
|
||||
- Cross-plugin baseline confirms no performance penalty against
|
||||
Chat 2: HellionChat first-frame HITCH 77 ms median, Chat 2
|
||||
74 ms median. Lightless and XIVInstantMessenger sit around
|
||||
7 ms by deferring their font-atlas build past Finished
|
||||
loading — that pattern is the v1.5.1 follow-up.
|
||||
|
||||
User-visible:
|
||||
|
||||
- Slash-command insert fix: pasting a slash command into the
|
||||
chat input (Friend List "/tell" action, plugin-driven inserts
|
||||
from Artisan, AllaganTools etc.) now replaces the existing
|
||||
input instead of concatenating. Cherry-picked from ChatTwo
|
||||
upstream ee7768ac with namespace adaptation.
|
||||
|
||||
Migration v17 stays (no schema bump).
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
|
||||
|
||||
@@ -515,8 +515,7 @@ public sealed class ChatLogWindow : Window
|
||||
$"{theme.Name}##quick-theme-{theme.Slug}",
|
||||
isActive,
|
||||
ImGuiSelectableFlags.DontClosePopups
|
||||
)
|
||||
&& !isActive
|
||||
) && !isActive
|
||||
)
|
||||
Plugin.ThemeRegistry.Switch(theme.Slug);
|
||||
}
|
||||
@@ -547,8 +546,7 @@ public sealed class ChatLogWindow : Window
|
||||
$"{tabs[i].Name}##quick-tab-{i}",
|
||||
isActive,
|
||||
ImGuiSelectableFlags.DontClosePopups
|
||||
)
|
||||
&& !isActive
|
||||
) && !isActive
|
||||
)
|
||||
ChangeTab(i);
|
||||
}
|
||||
|
||||
@@ -49,10 +49,7 @@ internal static class HellionStyle
|
||||
// per-window opacity override and must not fade. See
|
||||
// feedback_dalamud_pinning_override.
|
||||
ThemeAbgrCache a;
|
||||
if (
|
||||
!Plugin.Config.ReduceMotion
|
||||
&& registry.TryGetActiveCrossfade(out var lerped)
|
||||
)
|
||||
if (!Plugin.Config.ReduceMotion && registry.TryGetActiveCrossfade(out var lerped))
|
||||
{
|
||||
a = lerped;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user