Move the child menu arrow image to accommodatefor the scroll bar showing when the amunt of items exceeds the maximum.

This commit is contained in:
Chandler Cox
2023-02-12 21:29:58 -06:00
parent 7fe7742430
commit 4725a83406
2 changed files with 23 additions and 1 deletions

View File

@@ -365,6 +365,7 @@ namespace FlaxEditor.GUI.ContextMenu
float maxWidth = 0;
float height = _itemsAreaMargin.Height;
int itemsLeft = MaximumItemsInViewCount;
int overflowItemCount = 0;
for (int i = 0; i < _panel.Children.Count; i++)
{
if (_panel.Children[i] is ContextMenuItem item && item.Visible)
@@ -374,11 +375,27 @@ namespace FlaxEditor.GUI.ContextMenu
height += item.Height + _itemsMargin.Height;
itemsLeft--;
}
else
{
overflowItemCount++;
}
maxWidth = Mathf.Max(maxWidth, item.MinimumWidth);
}
}
maxWidth = Mathf.Max(maxWidth + 20, MinimumWidth);
// Move child arrows to accommodate scroll bar showing
if (overflowItemCount > 0)
{
foreach (var child in _panel.Children)
{
if (child is ContextMenuChildMenu item && item.Visible)
{
item.AdjustArrowAmount = -_panel.VScrollBar.Width;
}
}
}
// Resize container
Size = new Float2(Mathf.Ceil(maxWidth), Mathf.Ceil(height));

View File

@@ -17,6 +17,11 @@ namespace FlaxEditor.GUI.ContextMenu
/// </summary>
public readonly ContextMenu ContextMenu = new ContextMenu();
/// <summary>
/// The amount to adjust the arrow image by in x coordinates.
/// </summary>
public float AdjustArrowAmount = 0;
/// <summary>
/// Initializes a new instance of the <see cref="ContextMenuChildMenu"/> class.
/// </summary>
@@ -44,7 +49,7 @@ namespace FlaxEditor.GUI.ContextMenu
// Draw arrow
if (ContextMenu.HasChildren)
Render2D.DrawSprite(style.ArrowRight, new Rectangle(Width - 15, (Height - 12) / 2, 12, 12), Enabled ? isCMopened ? style.BackgroundSelected : style.Foreground : style.ForegroundDisabled);
Render2D.DrawSprite(style.ArrowRight, new Rectangle(Width - 15 + AdjustArrowAmount, (Height - 12) / 2, 12, 12), Enabled ? isCMopened ? style.BackgroundSelected : style.Foreground : style.ForegroundDisabled);
}
/// <inheritdoc />