void UiScene::OnKeyDown()

in agdk/agde/endless-tunnel/endless-tunnel/Android/app/src/main/cpp/ui_scene.cpp [231:270]


void UiScene::OnKeyDown(int ourKeyCode) {
    if (mWaitScreen) {
        return;
    }

    int navDir = -1;
    switch (ourKeyCode) {
        case OURKEY_UP:
            navDir = UI_DIR_UP;
            break;
        case OURKEY_DOWN:
            navDir = UI_DIR_DOWN;
            break;
        case OURKEY_LEFT:
            navDir = UI_DIR_LEFT;
            break;
        case OURKEY_RIGHT:
            navDir = UI_DIR_RIGHT;
            break;
        case OURKEY_ENTER:
            DispatchButtonClick(mFocusWidget >= 0 ? mFocusWidget : mDefaultButton);
            break;
    }

    if (navDir >= 0) {
        if (mFocusWidget < 0) {
            // enter focus mode
            mFocusWidget = FindDefaultButton();
        } else {
            // navigate
            int destId = -1;
            UiWidget *w = GetWidgetById(mFocusWidget);
            UiWidget *destWidget = w ? GetWidgetById(destId = w->GetNav(navDir)) : NULL;
            if (destWidget && destWidget->IsClickableButton()) {
                // navigate to that widget
                mFocusWidget = destId;
            }
        }
    }
}