Browse Source

Layered Reference / Export overlay icons for ref nodes

Assisted-by: Claude:claude-opus-4-7:Claude Code

Assisted-by: Claude:claude-opus-4-7:Claude Code
pull/3755/head
Siegfried Pammer 2 months ago
parent
commit
ddecb542ed
  1. 35
      ILSpy/Images.cs
  2. 2
      ILSpy/TreeNodes/ExportedTypeTreeNode.cs
  3. 6
      ILSpy/TreeNodes/MemberReferenceTreeNode.cs
  4. 2
      ILSpy/TreeNodes/TypeReferenceTreeNode.cs

35
ILSpy/Images.cs

@ -95,6 +95,15 @@ namespace ILSpy.Images @@ -95,6 +95,15 @@ namespace ILSpy.Images
public static readonly IImage Property = LoadSvg(nameof(Property));
public static readonly IImage Event = LoadSvg(nameof(Event));
// Reference overlays (small badge layered onto a base icon for TypeRef/MemberRef nodes).
internal static readonly IImage ReferenceOverlay = LoadSvg(nameof(ReferenceOverlay));
internal static readonly IImage ExportOverlay = LoadSvg(nameof(ExportOverlay));
public static readonly IImage TypeReference = new PairOverlayImage(Class, ReferenceOverlay);
public static readonly IImage MethodReference = new PairOverlayImage(Method, ReferenceOverlay);
public static readonly IImage FieldReference = new PairOverlayImage(Field, ReferenceOverlay);
public static readonly IImage ExportedType = new PairOverlayImage(Class, ExportOverlay);
// Overlays
internal static readonly IImage OverlayProtected = LoadSvg(nameof(OverlayProtected));
internal static readonly IImage OverlayInternal = LoadSvg(nameof(OverlayInternal));
@ -142,6 +151,32 @@ namespace ILSpy.Images @@ -142,6 +151,32 @@ namespace ILSpy.Images
};
}
/// <summary>
/// Two-layer icon: a base image with a single overlay drawn on top at full size. Used by
/// TypeRef / MemberRef / ExportedType nodes to differentiate them from their plain
/// Class / Method / Field counterparts.
/// </summary>
sealed class PairOverlayImage : IImage
{
static readonly Size IconSize = new(16, 16);
readonly IImage baseImage;
readonly IImage overlay;
public PairOverlayImage(IImage baseImage, IImage overlay)
{
this.baseImage = baseImage;
this.overlay = overlay;
}
public Size Size => IconSize;
public void Draw(DrawingContext context, Rect sourceRect, Rect destRect)
{
baseImage.Draw(context, new Rect(baseImage.Size), destRect);
overlay.Draw(context, new Rect(overlay.Size), destRect);
}
}
/// <summary>
/// Composed tree-node icon: a base symbol with optional accessibility overlay, static badge, or extension badge.
/// Mirrors the layered drawing scheme from <see cref="ICSharpCode.ILSpy.Images"/> in the WPF host.

2
ILSpy/TreeNodes/ExportedTypeTreeNode.cs

@ -46,7 +46,7 @@ namespace ILSpy.TreeNodes @@ -46,7 +46,7 @@ namespace ILSpy.TreeNodes
public override object Text => Language.TypeToString(resolvedType);
public override object Icon => Images.Images.Class;
public override object Icon => Images.Images.ExportedType;
protected override void LoadChildren()
{

6
ILSpy/TreeNodes/MemberReferenceTreeNode.cs

@ -53,9 +53,9 @@ namespace ILSpy.TreeNodes @@ -53,9 +53,9 @@ namespace ILSpy.TreeNodes
public override object Text => Signature;
public override object Icon => r.MemberReferenceKind switch {
MemberReferenceKind.Method => Images.Images.Method,
MemberReferenceKind.Field => Images.Images.Field,
_ => Images.Images.Class,
MemberReferenceKind.Method => Images.Images.MethodReference,
MemberReferenceKind.Field => Images.Images.FieldReference,
_ => Images.Images.TypeReference,
};
public string Signature => Language.EntityToString(resolvedMember, ConversionFlags.None);

2
ILSpy/TreeNodes/TypeReferenceTreeNode.cs

@ -47,7 +47,7 @@ namespace ILSpy.TreeNodes @@ -47,7 +47,7 @@ namespace ILSpy.TreeNodes
public override object Text => Language.TypeToString(resolvedType, ConversionFlags.None);
public override object Icon => Images.Images.Class;
public override object Icon => Images.Images.TypeReference;
protected override void LoadChildren()
{

Loading…
Cancel
Save