Merge branch 'master' into Visject-DescriptionPanel

This commit is contained in:
Nils Hausfeld
2024-06-18 18:30:09 +02:00
5 changed files with 35 additions and 21 deletions

View File

@@ -698,7 +698,7 @@ namespace FlaxEditor.GUI.Tree
}
}
// Show tree guide lines
// Show tree guidelines
if (Editor.Instance.Options.Options.Interface.ShowTreeLines)
{
TreeNode parentNode = Parent as TreeNode;
@@ -753,15 +753,16 @@ namespace FlaxEditor.GUI.Tree
var children = _children;
if (children.Count == 0)
return;
var last = children.Count - 1;
if (CullChildren)
{
Render2D.PeekClip(out var globalClipping);
Render2D.PeekTransform(out var globalTransform);
// Try to estimate the rough location of the first node, assuming the node height is constant
// Try to estimate the rough location of the first and the last nodes, assuming the node height is constant
var firstChildGlobalRect = GetChildGlobalRectangle(children[0], ref globalTransform);
var firstVisibleChild = Math.Clamp((int)Math.Floor((globalClipping.Y - firstChildGlobalRect.Top) / _headerHeight) + 1, 0, children.Count - 1);
var firstVisibleChild = Math.Clamp((int)Math.Floor((globalClipping.Top - firstChildGlobalRect.Top) / _headerHeight) + 1, 0, last);
if (GetChildGlobalRectangle(children[firstVisibleChild], ref globalTransform).Top > globalClipping.Top || !children[firstVisibleChild].Visible)
{
// Estimate overshoot, either it's partially visible or hidden in the tree
@@ -770,22 +771,29 @@ namespace FlaxEditor.GUI.Tree
var child = children[firstVisibleChild];
if (!child.Visible)
continue;
if (GetChildGlobalRectangle(child, ref globalTransform).Top < globalClipping.Top)
break;
}
}
var lastVisibleChild = Math.Clamp((int)Math.Ceiling((globalClipping.Bottom - firstChildGlobalRect.Top) / _headerHeight) + 1, firstVisibleChild, last);
if (GetChildGlobalRectangle(children[lastVisibleChild], ref globalTransform).Top < globalClipping.Bottom || !children[lastVisibleChild].Visible)
{
// Estimate overshoot, either it's partially visible or hidden in the tree
for (; lastVisibleChild < last; lastVisibleChild++)
{
var child = children[lastVisibleChild];
if (!child.Visible)
continue;
if (GetChildGlobalRectangle(child, ref globalTransform).Top > globalClipping.Bottom)
break;
}
}
for (int i = firstVisibleChild; i < children.Count; i++)
for (int i = firstVisibleChild; i <= lastVisibleChild; i++)
{
var child = children[i];
if (!child.Visible)
continue;
var childGlobalRect = GetChildGlobalRectangle(child, ref globalTransform);
if (!globalClipping.Intersects(ref childGlobalRect))
break;
Render2D.PushTransform(ref child._cachedTransform);
child.Draw();
Render2D.PopTransform();
@@ -799,7 +807,7 @@ namespace FlaxEditor.GUI.Tree
}
else
{
for (int i = 0; i < children.Count; i++)
for (int i = 0; i <= last; i++)
{
var child = children[i];
if (child.Visible)

View File

@@ -96,15 +96,20 @@ namespace FlaxEditor.Surface.ContextMenu
int dotIndex = filterText.IndexOf('.');
if (dotIndex != -1)
{
// Early out and make the group invisible if it doesn't start with the specified string
string filterGroupName = filterText.Substring(0, dotIndex);
if (!Name.StartsWith(filterGroupName, StringComparison.InvariantCultureIgnoreCase))
// If the string in front of the dot has the length of 0 or doesn't start with a letter we skip the filtering to make spawning floats work
if (filterGroupName.Length > 0 && char.IsLetter(filterGroupName[0]))
{
Visible = false;
Profiler.EndEvent();
return;
// Early out and make the group invisible if it doesn't start with the specified string
if (!Name.StartsWith(filterGroupName, StringComparison.InvariantCultureIgnoreCase))
{
Visible = false;
Profiler.EndEvent();
return;
}
filterText = filterText.Substring(dotIndex + 1);
}
filterText = filterText.Substring(dotIndex + 1);
}
}