Added an implementation of SetItemDefaultFocus() in the master branch for combo patterns to use and be more forward-compatible. (#787)

This commit is contained in:
omar
2017-12-11 16:19:37 +01:00
parent 6d93011fdf
commit 9fd15defe4
2 changed files with 19 additions and 5 deletions

View File

@ -5884,6 +5884,15 @@ void ImGui::SetScrollHere(float center_y_ratio)
SetScrollFromPosY(target_y, center_y_ratio);
}
// FIXME-NAV: This function is a placeholder for the upcoming Navigation branch + Focusing features.
// In the current branch this function will only set the scrolling, in the navigation branch it will also set your navigation cursor.
// Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable.
void ImGui::SetItemDefaultFocus()
{
if (IsWindowAppearing())
SetScrollHere();
}
void ImGui::SetKeyboardFocusHere(int offset)
{
IM_ASSERT(offset >= -1); // -1 is allowed but not below
@ -9186,7 +9195,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
return false;
// Display items
// FIXME-OPT: Use clipper (if we can disable it on the appearing frame to make sure our call to SetScrollHere() is processed)
// FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed)
bool value_changed = false;
for (int i = 0; i < items_count; i++)
{
@ -9200,8 +9209,8 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
value_changed = true;
*current_item = i;
}
if (item_selected && IsWindowAppearing())
SetScrollHere();
if (item_selected)
SetItemDefaultFocus();
PopID();
}