3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/gui/CardinalDirection.h"
7#include "mc/client/gui/screens/RecentFocusVector.h"
8#include "mc/deps/core/utility/pub_sub/Publisher.h"
24 ::ll::TypedStorage<4, 8, ::glm::vec2> mSize;
25 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::UIControl>>> mFocusControls;
26 bool mFocusActive : 1;
27 bool mFocusResetFlag : 1;
28 bool mFindClosestControl : 1;
29 bool mFocusPositionCaptured : 1;
30 bool mNeedsDefaultFocusUpdate : 1;
31 bool mIncludeMagnetControls : 1;
33 ::ll::TypedStorage<1, 1, bool> mScrollToFocusedControlIfClipped;
34 bool mHoverNothing : 1;
35 ::ll::TypedStorage<4, 4, int> mFocusedControlIndex;
36 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mFocusedControl;
37 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mPreviousFocusedControl;
38 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mLostFocusControl;
39 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mCurrentModalRoot;
40 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mCurrentFocusContainer;
41 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::UIControl>> mRootOfFocusTree;
42 ::ll::TypedStorage<8, 32, ::RecentFocusVector> mRecentFocusList;
43 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::FocusManagerProxy>> mProxy;
44 ::ll::TypedStorage<8, 32, ::std::string> mPendingFocusControlID;
45 ::ll::TypedStorage<4, 4, int> mPendingFocusControlIndex;
46 ::ll::TypedStorage<1, 1, bool> mHasPendingFocusControl;
47 ::ll::TypedStorage<8, 32, ::std::string> mPendingFocusCollectionIndexName;
51 ::Bedrock::PubSub::Publisher<
52 void(::std::weak_ptr<::UIControl>, ::std::weak_ptr<::UIControl>),
53 ::Bedrock::PubSub::ThreadModel::SingleThreaded,
63 MCAPI
bool _canControlBeFocused(::UIControl& control)
const;
65 MCAPI ::std::shared_ptr<::UIControl> _findFocusContainerControlFor(::std::shared_ptr<::UIControl> forControl)
const;
67 MCAPI ::SweepResult _getControlAtFocusPoint(
68 ::SweepDescription
const& desc,
69 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls
72 MCAPI ::std::shared_ptr<::UIControl> _getFocusContainterControl();
74 MCAPI ::std::shared_ptr<::UIControl> _getLastGoodFocusedControl(::std::shared_ptr<::UIControl> oldFocusedControl);
76 MCAPI
bool _handleFocusContainerLogic(::ui::CardinalDirection direction, ::std::shared_ptr<::UIControl> toControl);
78 MCAPI
bool _passesParentClipping(::std::shared_ptr<::UIControl>
const& control, ::glm::vec2
const& checkPos);
80 MCAPI
void _setFocusControlFromIndex(
int focusControlIndex,
bool overrideLastFocus);
82 MCAPI
void _setFocusControlFromWeakPtr(::std::weak_ptr<::UIControl> control);
84 MCAPI
void _setFocusControlInternal(::UIControl
const& control,
bool allowDefault,
bool overrideLastFocus);
86 MCAPI
void _sweepForClosestControl(::std::shared_ptr<::UIControl> focusedControl);
88 MCAPI ::SweepResult _sweepForControlDirectional(
89 ::SweepDescription
const& desc,
90 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls,
94 MCAPI ::SweepResult _sweepForControlFocusOverride(
95 ::SweepDescription
const& desc,
96 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls,
101 _sweepToNextFocusObject(::ui::CardinalDirection direction,
bool overrideOrigin, ::glm::vec2
const& overridePos);
103 MCAPI
bool _trySetLastGoodFocus(::std::shared_ptr<::UIControl> oldFocusedControl);
105 MCAPI
void _updateFocusContainer(
106 ::std::weak_ptr<::UIControl> oldFocusedControl,
107 bool updateControlIndex,
108 bool overrideLastFocus
111 MCAPI
void _updateFocusControlIndex();
113 MCAPI
void _updateLostFocusControlList(::std::weak_ptr<::UIControl> control);
115 MCAPI
void _updateRootOfFocusTree();
117 MCAPI
void addControl(::UIControl& control);
119 MCAPI
void clearPendingFocusControl();
121 MCAPI
void defaultFocus();
123 MCAPI
bool focusPositionCaptured();
125 MCAPI
void forceRepeatTTS();
127 MCAPI
bool getAndResetRepeatTTS();
129 MCAPI
bool getAndResetScrollToFocusedControlIfClipped();
131 MCAPI ::std::shared_ptr<::UIControl> getCurrentModalRoot();
133 MCAPI ::std::shared_ptr<::UIControl> getFocusedControl();
135 MCAPI ::std::shared_ptr<::UIControl> getPreviousFocusedControl();
137 MCFOLD ::FocusManagerProxy* getProxy();
139 MCAPI ::std::shared_ptr<::UIControl> getRootOfFocusTree();
141 MCAPI
bool hasControl(::UIControl
const& control)
const;
143 MCAPI
bool hasFocusedControl();
145 MCFOLD
bool hasPendingFocusControl()
const;
147 MCAPI
bool hasRequestedFocusReset();
149 MCAPI
bool isActive()
const;
151 MCAPI
bool isHoveringOverNothing()
const;
153 MCFOLD ::Bedrock::PubSub::Subscription
154 listenToFocusChange(::std::function<
void(::std::weak_ptr<::UIControl>, ::std::weak_ptr<::UIControl>)> func);
156 MCAPI
void moveFocus(::ui::CardinalDirection direction,
bool overrideOrigin, ::glm::vec2 overridePos);
158 MCAPI
void onFocusContainerLostFocus();
160 MCAPI
void removeControl(
161 ::UIControl& control,
162 ::std::map<::std::vector<::std::shared_ptr<::UIControl>>*, ::std::vector<::std::shared_ptr<::UIControl>>>&
166 MCAPI
void requestFocusReset(
bool focusPositionSetFlag);
168 MCAPI
void setActive(
bool active);
170 MCAPI
bool setFocusControl(::UIControl
const& control,
bool allowDefault);
172 MCAPI
void setFocusPosition(::glm::vec2
const& pos);
174 MCAPI
void setFocusPositionCaptured(
bool captured);
176 MCAPI
void setFocusedControlToLostFocus();
178 MCAPI
void setIncludeMagnetControls(
bool include);
180 MCAPI
void setLostFocusControl(::std::shared_ptr<::UIControl> control);
182 MCAPI
void setModalRoot(::std::shared_ptr<::UIControl>& control);
184 MCAPI
void setPendingFocusControl(::std::string
const& name, ::std::string
const& collectionName,
int index);
186 MCFOLD
void setSize(::glm::vec2
const& size);
188 MCAPI
void updateDefaultFocusIfNeeded();
190 MCAPI
bool updatePendingFocusControl();
192 MCAPI
void validateFocusControl();
194 MCAPI ~FocusManager();
Definition Subscription.h:10
Definition FocusManagerProxy.h:5
Definition FocusManager.h:5
Definition SingleThreaded.h:7
Definition SweepDescription.h:5
Definition SweepResult.h:5