diff --git a/docs/changelog/v0.2.5.md b/docs/changelog/v0.2.5.md index c8944a8..45e6b67 100644 --- a/docs/changelog/v0.2.5.md +++ b/docs/changelog/v0.2.5.md @@ -35,7 +35,7 @@ ### True Transparent Background - Transparent theme now uses the terminal's native background instead of solid black -- Powered by `Color.Transparent` (alpha=0) which emits ANSI `CSI 49m` (default background) instead of explicit RGB +- Powered by `Color.None` (alpha=0) which emits ANSI `CSI 49m` (default background) instead of explicit RGB - Terminal transparency, acrylic, wallpaper effects now show through the TUI - Dialogs retain solid `DarkGray` background for readability - Uses local Terminal.Gui fork (submodule) with transparent color support pending upstream merge ([gui-cs/Terminal.Gui#4234](https://github.com/gui-cs/Terminal.Gui/pull/4234)) diff --git a/src/EchoHub.Client/Themes/ThemeManager.cs b/src/EchoHub.Client/Themes/ThemeManager.cs index b04b920..763057b 100644 --- a/src/EchoHub.Client/Themes/ThemeManager.cs +++ b/src/EchoHub.Client/Themes/ThemeManager.cs @@ -418,16 +418,16 @@ public static class ThemeManager Base = new ThemeColors { Foreground = "White", - Background = "Transparent", + Background = "None", FocusForeground = "BrightCyan", - FocusBackground = "Transparent" + FocusBackground = "None" }, Menu = new ThemeColors { Foreground = "White", - Background = "Transparent", + Background = "None", FocusForeground = "BrightCyan", - FocusBackground = "Transparent" + FocusBackground = "None" }, Dialog = new ThemeColors { @@ -439,9 +439,9 @@ public static class ThemeManager Status = new ThemeColors { Foreground = "Gray", - Background = "Transparent", + Background = "None", FocusForeground = "Gray", - FocusBackground = "Transparent" + FocusBackground = "None" } }; diff --git a/src/EchoHub.Client/UI/AudioPlayerDialog.cs b/src/EchoHub.Client/UI/AudioPlayerDialog.cs index fd0d647..448a705 100644 --- a/src/EchoHub.Client/UI/AudioPlayerDialog.cs +++ b/src/EchoHub.Client/UI/AudioPlayerDialog.cs @@ -14,12 +14,12 @@ public sealed class AudioPlayerDialog private const int WaveBarCount = 24; private const int AnimationIntervalMs = 150; - private static readonly Attribute WaveActiveAttr = new(new Color(180, 100, 255), Color.Transparent); - private static readonly Attribute WaveIdleAttr = new(new Color(80, 50, 120), Color.Transparent); - private static readonly Attribute FileNameAttr = new(new Color(180, 100, 255), Color.Transparent); - private static readonly Attribute StatusPlayingAttr = new(new Color(0, 200, 0), Color.Transparent); - private static readonly Attribute StatusPausedAttr = new(new Color(220, 180, 0), Color.Transparent); - private static readonly Attribute StatusStoppedAttr = new(new Color(160, 160, 160), Color.Transparent); + private static readonly Attribute WaveActiveAttr = new(new Color(180, 100, 255), Color.None); + private static readonly Attribute WaveIdleAttr = new(new Color(80, 50, 120), Color.None); + private static readonly Attribute FileNameAttr = new(new Color(180, 100, 255), Color.None); + private static readonly Attribute StatusPlayingAttr = new(new Color(0, 200, 0), Color.None); + private static readonly Attribute StatusPausedAttr = new(new Color(220, 180, 0), Color.None); + private static readonly Attribute StatusStoppedAttr = new(new Color(160, 160, 160), Color.None); public static void Show(IApplication app, AudioPlaybackService audioService, string filePath, string fileName) { @@ -213,7 +213,7 @@ public sealed class AudioPlayerDialog fileLabel.DrawingContent += (s, e) => { var normalAttr = fileLabel.GetAttributeForRole(VisualRole.Normal); - var resolvedAttr = FileNameAttr.Background == Color.Transparent + var resolvedAttr = FileNameAttr.Background == Color.None ? FileNameAttr with { Background = normalAttr.Background } : FileNameAttr; fileLabel.SetAttribute(resolvedAttr); @@ -233,7 +233,7 @@ public sealed class AudioPlayerDialog { var normalAttr = waveLabel.GetAttributeForRole(VisualRole.Normal); var attr = (audioService.IsPlaying && !audioService.IsPaused) ? WaveActiveAttr : WaveIdleAttr; - var resolvedAttr = attr.Background == Color.Transparent + var resolvedAttr = attr.Background == Color.None ? attr with { Background = normalAttr.Background } : attr; waveLabel.SetAttribute(resolvedAttr); @@ -259,7 +259,7 @@ public sealed class AudioPlayerDialog else attr = StatusStoppedAttr; - var resolvedAttr = attr.Background == Color.Transparent + var resolvedAttr = attr.Background == Color.None ? attr with { Background = normalAttr.Background } : attr; statusLabel.SetAttribute(resolvedAttr); diff --git a/src/EchoHub.Client/UI/ChatRenderer.cs b/src/EchoHub.Client/UI/ChatRenderer.cs index 46fe8ac..c6830b2 100644 --- a/src/EchoHub.Client/UI/ChatRenderer.cs +++ b/src/EchoHub.Client/UI/ChatRenderer.cs @@ -131,7 +131,7 @@ public partial class ChatLine Color? currentFg = null; Color? currentBg = null; var defaultFg = defaultAttr?.Foreground; - var defaultBg = defaultAttr?.Background ?? Color.Transparent; + var defaultBg = defaultAttr?.Background ?? Color.None; Attribute? BuildAttr() { @@ -250,7 +250,7 @@ public class ChatListSource : IListDataSource foreach (var segment in chatLine.Segments) { var attr = segment.Color ?? normalAttr; - if (attr.Background == Color.Transparent) + if (attr.Background == Color.None) attr = attr with { Background = normalAttr.Background }; if (mentionBg.HasValue) attr = attr with { Background = mentionBg.Value }; @@ -304,10 +304,10 @@ public class ChannelListSource : IListDataSource public int MaxItemLength { get; private set; } public bool SuspendCollectionChangedEvent { get; set; } - private static readonly Attribute ActiveAttr = new(Color.White, Color.Transparent); - private static readonly Attribute UnreadAttr = new(Color.BrightCyan, Color.Transparent); - private static readonly Attribute NormalAttr = new(Color.DarkGray, Color.Transparent); - private static readonly Attribute BadgeAttr = new(Color.BrightYellow, Color.Transparent); + private static readonly Attribute ActiveAttr = new(Color.White, Color.None); + private static readonly Attribute UnreadAttr = new(Color.BrightCyan, Color.None); + private static readonly Attribute NormalAttr = new(Color.DarkGray, Color.None); + private static readonly Attribute BadgeAttr = new(Color.BrightYellow, Color.None); public void Update(List channels, Dictionary unread, string activeChannel) { @@ -343,7 +343,7 @@ public class ChannelListSource : IListDataSource // Resolve Transparent backgrounds to the view's actual background Attribute Resolve(Attribute attr) => - attr.Background == Color.Transparent ? attr with { Background = normalAttr.Background } : attr; + attr.Background == Color.None ? attr with { Background = normalAttr.Background } : attr; int drawnChars = 0; @@ -479,16 +479,16 @@ static class RenderHelpers /// public static partial class ChatColors { - public static readonly Attribute TimestampAttr = new(Color.DarkGray, Color.Transparent); - public static readonly Attribute SystemAttr = new(new Color(0, 180, 180), Color.Transparent); + public static readonly Attribute TimestampAttr = new(Color.DarkGray, Color.None); + public static readonly Attribute SystemAttr = new(new Color(0, 180, 180), Color.None); public static readonly Attribute MentionHighlightAttr = new(Color.White, new Color(80, 40, 0)); - public static readonly Attribute MentionTextAttr = new(new Color(255, 180, 50), Color.Transparent); - public static readonly Attribute EmbedBorderAttr = new(new Color(91, 155, 213), Color.Transparent); - public static readonly Attribute EmbedTitleAttr = new(Color.White, Color.Transparent); - public static readonly Attribute EmbedDescAttr = new(new Color(160, 160, 160), Color.Transparent); - public static readonly Attribute EmbedUrlAttr = new(new Color(100, 100, 100), Color.Transparent); - public static readonly Attribute AudioAttr = new(new Color(180, 100, 255), Color.Transparent); - public static readonly Attribute FileAttr = new(new Color(100, 180, 255), Color.Transparent); + public static readonly Attribute MentionTextAttr = new(new Color(255, 180, 50), Color.None); + public static readonly Attribute EmbedBorderAttr = new(new Color(91, 155, 213), Color.None); + public static readonly Attribute EmbedTitleAttr = new(Color.White, Color.None); + public static readonly Attribute EmbedDescAttr = new(new Color(160, 160, 160), Color.None); + public static readonly Attribute EmbedUrlAttr = new(new Color(100, 100, 100), Color.None); + public static readonly Attribute AudioAttr = new(new Color(180, 100, 255), Color.None); + public static readonly Attribute FileAttr = new(new Color(100, 180, 255), Color.None); /// /// Split text around @mentions, giving each @word the MentionTextAttr accent color. @@ -537,7 +537,7 @@ public static class ColorHelper var r = Convert.ToInt32(hex[..2], 16); var g = Convert.ToInt32(hex[2..4], 16); var b = Convert.ToInt32(hex[4..6], 16); - return new Attribute(new Color(r, g, b), Color.Transparent); + return new Attribute(new Color(r, g, b), Color.None); } catch { diff --git a/src/EchoHub.Client/UI/MainWindow.cs b/src/EchoHub.Client/UI/MainWindow.cs index 87a771c..fdd4000 100644 --- a/src/EchoHub.Client/UI/MainWindow.cs +++ b/src/EchoHub.Client/UI/MainWindow.cs @@ -712,10 +712,10 @@ public sealed class MainWindow : Runnable _statusLabel.SetNeedsDraw(); } - private static readonly Attribute StatusConnectedAttr = new(new Color(0, 200, 0), Color.Transparent); - private static readonly Attribute StatusDisconnectedAttr = new(new Color(220, 50, 50), Color.Transparent); - private static readonly Attribute StatusTransitionalAttr = new(new Color(220, 180, 0), Color.Transparent); - private static readonly Attribute StatusBrandAttr = new(new Color(218, 165, 32), Color.Transparent); + private static readonly Attribute StatusConnectedAttr = new(new Color(0, 200, 0), Color.None); + private static readonly Attribute StatusDisconnectedAttr = new(new Color(220, 50, 50), Color.None); + private static readonly Attribute StatusTransitionalAttr = new(new Color(220, 180, 0), Color.None); + private static readonly Attribute StatusBrandAttr = new(new Color(218, 165, 32), Color.None); private void OnStatusBarDrawContent(object? sender, DrawEventArgs e) { @@ -724,9 +724,9 @@ public sealed class MainWindow : Runnable var width = _statusLabel.Viewport.Width; if (width <= 0) return; - // Resolve transparent background for colored segments + // Resolve None background for colored segments var bg = normalAttr.Background; - Attribute Resolve(Attribute a) => a.Background == Color.Transparent ? a with { Background = bg } : a; + Attribute Resolve(Attribute a) => a.Background == Color.None ? a with { Background = bg } : a; int col = 0; diff --git a/src/Terminal.Gui b/src/Terminal.Gui index acc7b81..0061d03 160000 --- a/src/Terminal.Gui +++ b/src/Terminal.Gui @@ -1 +1 @@ -Subproject commit acc7b819237aef83e67ff80007074b33691c95c4 +Subproject commit 0061d03558264e0005d8c5ba53845e629ea2f8da