#include #include #include namespace NXKit { UIPress::UIPress(Timer timestamp): _timestamp(timestamp) { } void UIPress::setForWindow(const std::shared_ptr& window) { _window = window; if (!window || !window->rootViewController()) { _responder = window; return; } // auto weakFocus = window->focusSystem()->focusedItem(); // if (!weakFocus.expired()) { // auto focus = std::dynamic_pointer_cast(weakFocus.lock()); // if (focus) { // _responder = focus; // return; // } // } auto vc = window->rootViewController(); while (!vc->children().empty()) { vc = vc->children().front(); } _responder = vc->view(); } void UIPress::runPressActionOnRecognizerHierachy(const std::function)>& action) { for (const auto& recognizer: _gestureRecognizers) { if (_hasBeenCancelledByAGestureRecognizer) return; if (recognizer.expired() || !recognizer.lock()->isEnabled()) continue; action(recognizer.lock()); } } }