diff --git a/ILSpy.Tests/Docking/PreviewTabPromotionTests.cs b/ILSpy.Tests/Docking/PreviewTabPromotionTests.cs index f84cac3c9..fc44b014f 100644 --- a/ILSpy.Tests/Docking/PreviewTabPromotionTests.cs +++ b/ILSpy.Tests/Docking/PreviewTabPromotionTests.cs @@ -210,6 +210,11 @@ public class PreviewTabPromotionTests "the preview MainTab must carry the accent BorderBrush"); mainTabItem.BorderThickness.Should().Be(new global::Avalonia.Thickness(3, 0, 0, 0), "the preview MainTab must carry the left-only 3px accent stripe"); + // The accent is purple (#9B59B6) -- deliberately not the selection/toolbar blue, so the + // One stays distinct from a blue-highlighted selected tab. + (mainTabItem.BorderBrush as global::Avalonia.Media.ISolidColorBrush)!.Color + .Should().Be(global::Avalonia.Media.Color.FromRgb(0x9B, 0x59, 0xB6), + "the preview accent stripe must be purple, not blue"); } [AvaloniaTest] diff --git a/ILSpy/Themes/BoolToBrushConverter.cs b/ILSpy/Themes/BoolToBrushConverter.cs index db9c21356..53e9e478b 100644 --- a/ILSpy/Themes/BoolToBrushConverter.cs +++ b/ILSpy/Themes/BoolToBrushConverter.cs @@ -33,10 +33,12 @@ namespace ILSpy.Themes /// public sealed class BoolToBrushConverter : IValueConverter { - /// Static accent for the preview-tab left-edge stripe — matches the - /// toolbar accent palette (#0078D7). + /// Static accent for the preview-tab left-edge stripe. Purple (#9B59B6), + /// deliberately NOT the selection/toolbar blue — so the One preview tab stays visually + /// distinct from a blue-highlighted *selected* tab even when it is itself selected. Reads + /// against both light and dark tab-strip backgrounds. public static readonly BoolToBrushConverter PreviewAccent = new() { - TrueBrush = new ImmutableSolidColorBrush(Color.FromRgb(0x00, 0x78, 0xD7)), + TrueBrush = new ImmutableSolidColorBrush(Color.FromRgb(0x9B, 0x59, 0xB6)), }; public IBrush? TrueBrush { get; init; } diff --git a/ILSpy/Themes/PreviewTabFreezeButtonBehavior.cs b/ILSpy/Themes/PreviewTabFreezeButtonBehavior.cs index c2b8a2c6a..9a0a2d226 100644 --- a/ILSpy/Themes/PreviewTabFreezeButtonBehavior.cs +++ b/ILSpy/Themes/PreviewTabFreezeButtonBehavior.cs @@ -102,24 +102,27 @@ namespace ILSpy.Themes // paint on top of it. titleStack.ClipToBounds = true; - // Tilted-pushpin silhouette matching the Visual Studio preview-tab affordance. - // Vector path (not a font glyph): the previous Segoe Fluent Icons U+E718 - // fallback was Windows-only and rendered as a tofu box on Linux / macOS. - // Path with bound Fill is what restores per-tab Foreground inheritance that - // the intermediate SVG-image variant lost - Avalonia.Svg.Skia honors the - // asset's literal fill, not the consuming control's theme color. RotateTransform - // at -45 deg orients the upright pin path so its tip points to the lower-left. + // Snowflake glyph for "freeze". A STROKED vector Path (not a font glyph): the + // previous Segoe Fluent fallback was Windows-only and rendered as tofu on Linux / + // macOS. Six spokes + tip barbs in a 16x16 box (inset so the stroke isn't clipped + // at the tips). Stroke (not Fill) is bound to the tab's Foreground so the glyph + // inherits the per-tab theme colour. var glyph = new Path { - Data = StreamGeometry.Parse("M5 2h6v1h-1v4l2 2v1H9v3l-1 2-1-2v-3H4V9l2-2V3H5z"), + Data = StreamGeometry.Parse( + "M8,1.5 L8,14.5 M2.37,4.75 L13.63,11.25 M2.37,11.25 L13.63,4.75 " + + "M8,4.2 L6.6,2.9 M8,4.2 L9.4,2.9 M8,11.8 L6.6,13.1 M8,11.8 L9.4,13.1 " + + "M5.0,5.9 L3.4,5.5 M5.0,5.9 L4.6,7.5 M11.0,10.1 L12.6,10.5 M11.0,10.1 L11.4,8.5 " + + "M5.0,10.1 L3.4,10.5 M5.0,10.1 L4.6,8.5 M11.0,5.9 L12.6,5.5 M11.0,5.9 L11.4,7.5"), Stretch = Stretch.Uniform, + StrokeThickness = 1.3, + StrokeLineCap = PenLineCap.Round, + StrokeJoin = PenLineJoin.Round, Width = 12, Height = 12, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, - RenderTransform = new RotateTransform(45), - RenderTransformOrigin = RelativePoint.Center, }; - glyph.Bind(Shape.FillProperty, new Binding(nameof(TemplatedControl.Foreground)) { + glyph.Bind(Shape.StrokeProperty, new Binding(nameof(TemplatedControl.Foreground)) { Source = item, Mode = BindingMode.OneWay, });