wrap scrolling items with arrow keys and simplify scrolling logic

This commit is contained in:
xxSeys1
2025-06-07 17:34:01 +02:00
parent eee4e55cf0
commit cce042045e

View File

@@ -563,8 +563,17 @@ namespace FlaxEditor.GUI
case KeyboardKeys.Escape: case KeyboardKeys.Escape:
Hide(); Hide();
return true; return true;
case KeyboardKeys.Backspace:
// Alow the user to quickly focus the searchbar
if (_searchBox != null && !_searchBox.IsFocused)
{
_searchBox.Focus();
_searchBox.SelectAll();
return true;
}
break;
case KeyboardKeys.ArrowDown: case KeyboardKeys.ArrowDown:
{ case KeyboardKeys.ArrowUp:
if (RootWindow.FocusedControl == null) if (RootWindow.FocusedControl == null)
{ {
// Focus search box if nothing is focused // Focus search box if nothing is focused
@@ -572,39 +581,17 @@ namespace FlaxEditor.GUI
return true; return true;
} }
// Focus the first visible item or then next one // Get the next item
var items = GetVisibleItems(); var items = GetVisibleItems();
var focusedIndex = items.IndexOf(focusedItem); var focusedIndex = items.IndexOf(focusedItem);
if (focusedIndex == -1) int delta = key == KeyboardKeys.ArrowDown ? -1 : 1;
focusedIndex = -1; int nextIndex = Mathf.Wrap(focusedIndex - delta, 0, items.Count - 1);
if (focusedIndex + 1 < items.Count) var nextItem = items[nextIndex];
{
var item = items[focusedIndex + 1]; // Focus the next item
item.Focus(); nextItem.Focus();
_scrollPanel.ScrollViewTo(item); _scrollPanel.ScrollViewTo(nextItem);
return true; return true;
}
break;
}
case KeyboardKeys.ArrowUp:
if (focusedItem != null)
{
// Focus the previous visible item or the search box
var items = GetVisibleItems();
var focusedIndex = items.IndexOf(focusedItem);
if (focusedIndex == 0)
{
_searchBox?.Focus();
}
else if (focusedIndex > 0)
{
var item = items[focusedIndex - 1];
item.Focus();
_scrollPanel.ScrollViewTo(item);
return true;
}
}
break;
case KeyboardKeys.Return: case KeyboardKeys.Return:
if (focusedItem != null) if (focusedItem != null)
{ {