// // UIFocusSystem.hpp // SDLTest // // Created by Даниил Виноградов on 02.04.2023. // #pragma once #include #include namespace NXKit { class UIView; class UIWindow; class UIPressesEvent; class UIFocusSystem { public: UIFocusSystem(); // Return nullptr if FocusSystem is not active std::weak_ptr focusedItem() { return _isActive ? _focusedItem : std::weak_ptr(); } private: void setActive(bool active); bool _isActive = true; std::weak_ptr _selectedFocusedItem; std::weak_ptr _focusedItem; std::weak_ptr _rootWindow; void updateFocus(); void sendEvent(const std::shared_ptr& event); std::shared_ptr findItemToFocus(); void applyFocusToItem(const std::shared_ptr& item, UIFocusUpdateContext context); static UIFocusHeading makeFocusHeadingFromEvent(const std::shared_ptr& event); friend class UIWindow; friend class UIControl; }; }