diff --git a/Luna b/Luna index 59967db0..a602d059 160000 --- a/Luna +++ b/Luna @@ -1 +1 @@ -Subproject commit 59967db0b6fba6e85d04d91e91ed07a35cb42d69 +Subproject commit a602d059783e244017200c04d97603f37ca2166a diff --git a/Penumbra/UI/ModsTab/Selector/Filter/ModFilter.cs b/Penumbra/UI/ModsTab/Selector/Filter/ModFilter.cs index cba5a957..b018dd5a 100644 --- a/Penumbra/UI/ModsTab/Selector/Filter/ModFilter.cs +++ b/Penumbra/UI/ModsTab/Selector/Filter/ModFilter.cs @@ -265,9 +265,10 @@ public sealed class ModFilter(ModManager modManager, ActiveCollections collectio { if (token.Type switch { - ModFilterTokenType.Name => folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - ModFilterTokenType.Default => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - _ => true, + ModFilterTokenType.Name => !folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.Default => !folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.FullContext => !folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + _ => true, }) return false; } @@ -276,9 +277,10 @@ public sealed class ModFilter(ModManager modManager, ActiveCollections collectio { if (token.Type switch { - ModFilterTokenType.Name => folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - ModFilterTokenType.Default => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - _ => false, + ModFilterTokenType.Name => folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.Default => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.FullContext => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + _ => false, }) return false; } @@ -287,9 +289,10 @@ public sealed class ModFilter(ModManager modManager, ActiveCollections collectio { if (token.Type switch { - ModFilterTokenType.Name => folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - ModFilterTokenType.Default => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), - _ => false, + ModFilterTokenType.Name => folder.Name.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.Default => folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + ModFilterTokenType.FullContext => !folder.FullPath.Contains(token.Needle, StringComparison.OrdinalIgnoreCase), + _ => false, }) return true; } diff --git a/Penumbra/UI/Tabs/ResourceTab.cs b/Penumbra/UI/Tabs/ResourceTab.cs index cbd6347a..0b4341a2 100644 --- a/Penumbra/UI/Tabs/ResourceTab.cs +++ b/Penumbra/UI/Tabs/ResourceTab.cs @@ -20,13 +20,19 @@ public sealed class ResourceTab(Configuration config, ResourceManagerService res public bool IsVisible => config.DebugMode; - public readonly TextFilter Filter = new(); + public readonly ResourceFilter Filter = new(); + + public sealed class ResourceFilter : Utf8FilterBase + { + protected override ReadOnlySpan ToFilterString(in ResourceHandle item, int globalIndex) + => item.FileName.AsSpan(); + } /// Draw a tab to iterate over the main resource maps and see what resources are currently loaded. public unsafe void DrawContent() { // Filter for resources containing the input string. - Filter.DrawFilter("##ResourceFilter"u8, Im.ContentRegion.Available); + Filter.DrawFilter("Filter..."u8, Im.ContentRegion.Available); using var child = Im.Child.Begin("##ResourceManagerTab"u8, Im.ContentRegion.Available); if (!child) return; @@ -75,7 +81,7 @@ public sealed class ResourceTab(Configuration config, ResourceManagerService res resourceManager.IterateResourceMap(map, (hash, r) => { // Filter unwanted names. - if (Filter.Text.Length > 0 && Filter.WouldBeVisible(r->FileName.ToString(), -1)) + if (!Filter.WouldBeVisible(in *r, -1)) return; Im.Table.DrawColumn($"0x{hash:X8}");