Fix scene search performance regression

This commit is contained in:
2026-05-04 23:05:25 +02:00
parent da716dde6a
commit 864f3a3d42
2 changed files with 41 additions and 19 deletions
+40 -18
View File
@@ -182,7 +182,7 @@ namespace FlaxEditor.SceneGraph.GUI
_highlights?.Clear();
isThisVisible = true;
}
else
else if (filterText.Contains(','))
{
var splitFilter = filterText.Split(',');
var hasAllFilters = true;
@@ -199,21 +199,17 @@ namespace FlaxEditor.SceneGraph.GUI
// Check for any scripts
if (trimmedFilter.Equals("s:", StringComparison.OrdinalIgnoreCase))
{
if (Actor != null)
{
if (Actor.ScriptsCount > 0)
{
hasFilter = true;
}
}
if (actor != null && actor.ScriptsCount > 0)
hasFilter = true;
}
else
{
var scriptText = trimmedFilter.Replace("s:", "", StringComparison.OrdinalIgnoreCase).Trim();
var scriptFound = false;
if (Actor != null)
if (actor != null)
{
foreach (var script in Actor.Scripts)
var scripts = actor.Scripts;
foreach (var script in scripts)
{
var name = TypeUtils.GetTypeDisplayName(script.GetType());
var nameNoSpaces = name.Replace(" ", "");
@@ -233,15 +229,15 @@ namespace FlaxEditor.SceneGraph.GUI
{
if (trimmedFilter.Equals("a:", StringComparison.OrdinalIgnoreCase))
{
if (Actor != null)
if (actor != null)
hasFilter = true;
}
else
{
if (Actor != null)
if (actor != null)
{
var actorTypeText = trimmedFilter.Replace("a:", "", StringComparison.OrdinalIgnoreCase).Trim();
var name = TypeUtils.GetTypeDisplayName(Actor.GetType());
var name = TypeUtils.GetTypeDisplayName(actor.GetType());
var nameNoSpaces = name.Replace(" ", "");
if (name.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase))
hasFilter = true;
@@ -253,15 +249,15 @@ namespace FlaxEditor.SceneGraph.GUI
{
if (trimmedFilter.Equals("c:", StringComparison.OrdinalIgnoreCase))
{
if (Actor != null)
if (actor != null)
hasFilter = true;
}
else
{
if (Actor != null && Actor is UIControl uic && uic.Control != null)
if (actor is UIControl uiControl && uiControl.Control != null)
{
var controlTypeText = trimmedFilter.Replace("c:", "", StringComparison.OrdinalIgnoreCase).Trim();
var name = TypeUtils.GetTypeDisplayName(uic.Control.GetType());
var name = TypeUtils.GetTypeDisplayName(uiControl.Control.GetType());
var nameNoSpaces = name.Replace(" ", "");
if (name.Contains(controlTypeText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(controlTypeText, StringComparison.OrdinalIgnoreCase))
hasFilter = true;
@@ -283,8 +279,9 @@ namespace FlaxEditor.SceneGraph.GUI
var textRect = TextRect;
for (int i = 0; i < ranges.Length; i++)
{
var start = font.GetCharPosition(text, ranges[i].StartIndex);
var end = font.GetCharPosition(text, ranges[i].EndIndex);
var range = ranges[i];
var start = font.GetCharPosition(text, range.StartIndex);
var end = font.GetCharPosition(text, range.EndIndex);
_highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height));
}
hasFilter = true;
@@ -302,6 +299,31 @@ namespace FlaxEditor.SceneGraph.GUI
if (!hasAllFilters)
_highlights?.Clear();
}
else if (QueryFilterHelper.Match(filterText, Text, out QueryFilterHelper.Range[] ranges))
{
// Update highlights
if (_highlights == null)
_highlights = new List<Rectangle>(ranges.Length);
else
_highlights.Clear();
var font = Style.Current.FontSmall;
var textRect = TextRect;
var text = Text;
for (int i = 0; i < ranges.Length; i++)
{
var range = ranges[i];
var start = font.GetCharPosition(text, range.StartIndex);
var end = font.GetCharPosition(text, range.EndIndex);
_highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height));
}
isThisVisible = true;
}
else
{
// Hide
_highlights?.Clear();
isThisVisible = false;
}
// Update children
bool isAnyChildVisible = false;
+1 -1
View File
@@ -175,8 +175,8 @@ namespace FlaxEditor.Windows
if (IsLayoutLocked)
return;
_tree.LockChildrenRecursive();
PerformLayout();
_tree.LockChildrenRecursive();
// Update tree
var query = _searchBox.Text;