diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index a131946..c8863b3 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -443,6 +443,10 @@ public partial class SharpIdeCodeEdit : CodeEdit { var symbolKindString = CollectionExtensions.GetValueOrDefault(completionItem.Properties, "SymbolKind"); var symbolKind = symbolKindString is null ? null : (SymbolKind?)int.Parse(symbolKindString); + var typeKindString = completionItem.Tags[0]; + var accessibilityModifierString = completionItem.Tags.Skip(1).FirstOrDefault(); // accessibility is not always supplied + TypeKind? typeKind = Enum.TryParse(typeKindString, out var tk) ? tk : null; + Accessibility? accessibilityModifier = Enum.TryParse(accessibilityModifierString, out var am) ? am : null; var godotCompletionType = symbolKind switch { SymbolKind.Method => CodeCompletionKind.Function, @@ -452,7 +456,7 @@ public partial class SharpIdeCodeEdit : CodeEdit SymbolKind.Field => CodeCompletionKind.Member, _ => CodeCompletionKind.PlainText }; - var icon = GetIconForSymbolKind(symbolKind); + var icon = GetIconForCompletion(symbolKind, typeKind, accessibilityModifier); AddCodeCompletionOption(godotCompletionType, completionItem.DisplayText, completionItem.DisplayText, icon: icon, value: new RefCountedContainer(completionItem)); } // partially working - displays menu only when caret is what CodeEdit determines as valid diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit_Completions.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit_Completions.cs index a7d2b3e..28b918b 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit_Completions.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit_Completions.cs @@ -7,13 +7,15 @@ public partial class SharpIdeCodeEdit { private readonly Texture2D _csharpMethodIcon = ResourceLoader.Load("uid://b17p18ijhvsep"); private readonly Texture2D _csharpClassIcon = ResourceLoader.Load("uid://b027uufaewitj"); + private readonly Texture2D _csharpInterfaceIcon = ResourceLoader.Load("uid://bdwmkdweqvowt"); - private Texture2D? GetIconForSymbolKind(SymbolKind? symbolKind) + private Texture2D? GetIconForCompletion(SymbolKind? symbolKind, TypeKind? typeKind, Accessibility? accessibility) { - var texture = symbolKind switch + var texture = (symbolKind, typeKind, accessibility) switch { - SymbolKind.Method => _csharpMethodIcon, - SymbolKind.NamedType => _csharpClassIcon, + (SymbolKind.Method, _, _) => _csharpMethodIcon, + (SymbolKind.NamedType, TypeKind.Interface, _) => _csharpInterfaceIcon, + (SymbolKind.NamedType, _, _) => _csharpClassIcon, //SymbolKind.Local => , //SymbolKind.Property => , //SymbolKind.Field => , diff --git a/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg b/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg new file mode 100644 index 0000000..559b822 --- /dev/null +++ b/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg @@ -0,0 +1,55 @@ + + + + + + + + diff --git a/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg.import b/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg.import new file mode 100644 index 0000000..63f7953 --- /dev/null +++ b/src/SharpIDE.Godot/Features/Completions/Resources/interface-icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdwmkdweqvowt" +path="res://.godot/imported/interface-icon.svg-1e415258a2c18b1738f926a403e84537.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Features/Completions/Resources/interface-icon.svg" +dest_files=["res://.godot/imported/interface-icon.svg-1e415258a2c18b1738f926a403e84537.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=0.1 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false