feat: one-time hint banner introduces v0.6.1 pop-out toolbar and default flip

This commit is contained in:
2026-05-03 16:38:31 +02:00
parent c882eac1ca
commit 9506af49db
+70
View File
@@ -352,6 +352,10 @@ public sealed class ChatLogWindow : Window
// does not get clipped by the new toolbar row. // does not get clipped by the new toolbar row.
height -= ImGui.GetFrameHeightWithSpacing(); height -= ImGui.GetFrameHeightWithSpacing();
// Hellion Chat v0.6.1 — der Hint-Banner verbraucht Höhe wenn sichtbar
// (0 wenn dismissed). Field wird in DrawChatLog vor Tab-Render gesetzt.
height -= _v061HintBannerHeight;
return height; return height;
} }
@@ -548,6 +552,12 @@ public sealed class ChatLogWindow : Window
if (IsChatMode && Plugin.InputPreview.IsDrawable) if (IsChatMode && Plugin.InputPreview.IsDrawable)
Plugin.InputPreview.CalculatePreview(); Plugin.InputPreview.CalculatePreview();
// Hellion Chat v0.6.1 — render the one-time hint banner first so it
// sits above the tab area / sidebar in full window width. Stash the
// height for GetRemainingHeightForMessageLog so the message log
// shrinks accordingly while the banner is visible.
_v061HintBannerHeight = DrawV061HintBannerIfNeeded();
if (Plugin.Config.SidebarTabView) if (Plugin.Config.SidebarTabView)
DrawTabSidebar(); DrawTabSidebar();
else else
@@ -1458,6 +1468,60 @@ public sealed class ChatLogWindow : Window
} }
} }
// Hellion Chat v0.6.1 — One-Time-Hint-Banner introducing the chat header
// pop-out toolbar button and the right-click pathway. Reuses the visual
// pattern from Popout.cs DrawHintBannerIfNeeded so users see a familiar
// dismiss-affordance. Returns the vertical space the banner consumed
// (0 when not shown) so the message log can shrink accordingly.
private float DrawV061HintBannerIfNeeded()
{
if (Plugin.Config.SeenPopOutHeaderHint)
return 0f;
var hintText = Resources.HellionStrings.Hint_v061_PopOutHeader_Body;
var ackLabel = Resources.HellionStrings.Hint_v061_PopOutHeader_Ack;
var openLabel = Resources.HellionStrings.Hint_v061_PopOutHeader_OpenSettings;
var startY = ImGui.GetCursorPosY();
var bg = new System.Numerics.Vector4(0.16f, 0.20f, 0.28f, 1f);
ImGui.PushStyleColor(ImGuiCol.ChildBg, bg);
ImGui.PushStyleVar(ImGuiStyleVar.FrameBorderSize, 1f);
var dismiss = false;
var openSettings = false;
using (var child = ImRaii.Child("##v061-pop-out-header-hint", new System.Numerics.Vector2(0f, 84f), true))
{
if (child)
{
ImGui.TextWrapped(hintText);
if (ImGui.Button(ackLabel))
dismiss = true;
ImGui.SameLine();
if (ImGui.Button(openLabel))
{
dismiss = true;
openSettings = true;
}
}
}
ImGui.PopStyleVar();
ImGui.PopStyleColor();
ImGui.Spacing();
if (dismiss)
{
Plugin.Config.SeenPopOutHeaderHint = true;
Plugin.SaveConfig();
Plugin.Log.Debug("v0.6.1 pop-out header hint dismissed");
if (openSettings)
Plugin.SettingsWindow.Toggle();
}
return ImGui.GetCursorPosY() - startY;
}
private void DrawTabContextMenu(Tab tab, int i) private void DrawTabContextMenu(Tab tab, int i)
{ {
using var contextMenu = ImRaii.ContextPopupItem($"tab-context-menu-{i}"); using var contextMenu = ImRaii.ContextPopupItem($"tab-context-menu-{i}");
@@ -1517,6 +1581,12 @@ public sealed class ChatLogWindow : Window
internal readonly List<bool> PopOutDocked = []; internal readonly List<bool> PopOutDocked = [];
internal readonly HashSet<Guid> PopOutWindows = []; internal readonly HashSet<Guid> PopOutWindows = [];
// Hellion Chat v0.6.1 — height the v0.6.1 hint banner consumed in the
// current frame, read by GetRemainingHeightForMessageLog so the message
// log can shrink. Reset to 0 each frame; positive only when the banner
// actually rendered.
private float _v061HintBannerHeight;
// v0.6.0 — live enumeration of all active Popout windows so the // v0.6.0 — live enumeration of all active Popout windows so the
// KeybindManager can find a focused ChatInputBar to forward tab-cycle // KeybindManager can find a focused ChatInputBar to forward tab-cycle
// keybinds to. Filter on IsOpen prevents touching closed-but-still- // keybinds to. Filter on IsOpen prevents touching closed-but-still-