#pragma once #include "UIView.h" #include namespace NXKit { enum class UIWindowInputType { touch, focus }; class UIViewController; class UIWindow: public UIView { public: UIWindow(); ~UIWindow() override; bool isHierarchyRoot() override { return true; } std::shared_ptr window() override; std::shared_ptr focusSystem() { return _focusSystem; } void setRootViewController(std::shared_ptr controller); std::shared_ptr rootViewController() { return _rootViewController; } void makeKeyAndVisible(); void sendEvent(const std::shared_ptr& event); void layoutSubviews() override; void updateFocus(); void pressesBegan(std::set> pressees, std::shared_ptr event) override; void pressesChanged(std::set> pressees, std::shared_ptr event) override; void pressesEnded(std::set> pressees, std::shared_ptr event) override; void pressesCancelled(std::set> pressees, std::shared_ptr event) override; void traitCollectionDidChange(std::shared_ptr previousTraitCollection) override; UIWindowInputType currentUserInputType() { return _inputType; } private: std::shared_ptr _rootViewController; std::vector> _presentedViewControllers; friend class UIViewController; void addPresentedViewController(const std::shared_ptr& controller); void removePresentedViewController(const std::shared_ptr& controller); void sendTouchEvent(std::shared_ptr event); void sendPressEvent(const std::shared_ptr& event); std::shared_ptr _focusSystem; UIWindowInputType _inputType = UIWindowInputType::focus; }; }