LeviLamina
Loading...
Searching...
No Matches
FocusManager.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
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"
9
10// auto generated forward declare list
11// clang-format off
13class UIControl;
14struct SweepDescription;
15struct SweepResult;
16namespace Bedrock::PubSub { class Subscription; }
17namespace Bedrock::PubSub::ThreadModel { struct SingleThreaded; }
18// clang-format on
19
20class FocusManager {
21public:
22 // member variables
23 // NOLINTBEGIN
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;
32 bool mRepeatTTS : 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;
48 ::ll::TypedStorage<
49 8,
50 48,
51 ::Bedrock::PubSub::Publisher<
52 void(::std::weak_ptr<::UIControl>, ::std::weak_ptr<::UIControl>),
53 ::Bedrock::PubSub::ThreadModel::SingleThreaded,
54 0>>
55 mFocusChangePub;
56 // NOLINTEND
57
58public:
59 // member functions
60 // NOLINTBEGIN
61 MCAPI FocusManager();
62
63 MCAPI bool _canControlBeFocused(::UIControl& control) const;
64
65 MCAPI ::std::shared_ptr<::UIControl> _findFocusContainerControlFor(::std::shared_ptr<::UIControl> forControl) const;
66
67 MCAPI ::SweepResult _getControlAtFocusPoint(
68 ::SweepDescription const& desc,
69 ::std::vector<::std::shared_ptr<::UIControl>> const& controls
70 );
71
72 MCAPI ::std::shared_ptr<::UIControl> _getFocusContainterControl();
73
74 MCAPI ::std::shared_ptr<::UIControl> _getLastGoodFocusedControl(::std::shared_ptr<::UIControl> oldFocusedControl);
75
76 MCAPI bool _handleFocusContainerLogic(::ui::CardinalDirection direction, ::std::shared_ptr<::UIControl> toControl);
77
78 MCAPI bool _passesParentClipping(::std::shared_ptr<::UIControl> const& control, ::glm::vec2 const& checkPos);
79
80 MCAPI void _setFocusControlFromIndex(int focusControlIndex, bool overrideLastFocus);
81
82 MCAPI void _setFocusControlFromWeakPtr(::std::weak_ptr<::UIControl> control);
83
84 MCAPI void _setFocusControlInternal(::UIControl const& control, bool allowDefault, bool overrideLastFocus);
85
86 MCAPI void _sweepForClosestControl(::std::shared_ptr<::UIControl> focusedControl);
87
88 MCAPI ::SweepResult _sweepForControlDirectional(
89 ::SweepDescription const& desc,
90 ::std::vector<::std::shared_ptr<::UIControl>> const& controls,
91 bool hasWrapped
92 );
93
94 MCAPI ::SweepResult _sweepForControlFocusOverride(
95 ::SweepDescription const& desc,
96 ::std::vector<::std::shared_ptr<::UIControl>> const& controls,
97 bool hasWrapped
98 );
99
100 MCAPI void
101 _sweepToNextFocusObject(::ui::CardinalDirection direction, bool overrideOrigin, ::glm::vec2 const& overridePos);
102
103 MCAPI bool _trySetLastGoodFocus(::std::shared_ptr<::UIControl> oldFocusedControl);
104
105 MCAPI void _updateFocusContainer(
106 ::std::weak_ptr<::UIControl> oldFocusedControl,
107 bool updateControlIndex,
108 bool overrideLastFocus
109 );
110
111 MCAPI void _updateFocusControlIndex();
112
113 MCAPI void _updateLostFocusControlList(::std::weak_ptr<::UIControl> control);
114
115 MCAPI void _updateRootOfFocusTree();
116
117 MCAPI void addControl(::UIControl& control);
118
119 MCAPI void clearPendingFocusControl();
120
121 MCAPI void defaultFocus();
122
123 MCAPI bool focusPositionCaptured();
124
125 MCAPI void forceRepeatTTS();
126
127 MCAPI bool getAndResetRepeatTTS();
128
129 MCAPI bool getAndResetScrollToFocusedControlIfClipped();
130
131 MCAPI ::std::shared_ptr<::UIControl> getCurrentModalRoot();
132
133 MCAPI ::std::shared_ptr<::UIControl> getFocusedControl();
134
135 MCAPI ::std::shared_ptr<::UIControl> getPreviousFocusedControl();
136
137 MCFOLD ::FocusManagerProxy* getProxy();
138
139 MCAPI ::std::shared_ptr<::UIControl> getRootOfFocusTree();
140
141 MCAPI bool hasControl(::UIControl const& control) const;
142
143 MCAPI bool hasFocusedControl();
144
145 MCFOLD bool hasPendingFocusControl() const;
146
147 MCAPI bool hasRequestedFocusReset();
148
149 MCAPI bool isActive() const;
150
151 MCAPI bool isHoveringOverNothing() const;
152
153 MCFOLD ::Bedrock::PubSub::Subscription
154 listenToFocusChange(::std::function<void(::std::weak_ptr<::UIControl>, ::std::weak_ptr<::UIControl>)> func);
155
156 MCAPI void moveFocus(::ui::CardinalDirection direction, bool overrideOrigin, ::glm::vec2 overridePos);
157
158 MCAPI void onFocusContainerLostFocus();
159
160 MCAPI void removeControl(
161 ::UIControl& control,
162 ::std::map<::std::vector<::std::shared_ptr<::UIControl>>*, ::std::vector<::std::shared_ptr<::UIControl>>>&
163 controlsToRemove
164 );
165
166 MCAPI void requestFocusReset(bool focusPositionSetFlag);
167
168 MCAPI void setActive(bool active);
169
170 MCAPI bool setFocusControl(::UIControl const& control, bool allowDefault);
171
172 MCAPI void setFocusPosition(::glm::vec2 const& pos);
173
174 MCAPI void setFocusPositionCaptured(bool captured);
175
176 MCAPI void setFocusedControlToLostFocus();
177
178 MCAPI void setIncludeMagnetControls(bool include);
179
180 MCAPI void setLostFocusControl(::std::shared_ptr<::UIControl> control);
181
182 MCAPI void setModalRoot(::std::shared_ptr<::UIControl>& control);
183
184 MCAPI void setPendingFocusControl(::std::string const& name, ::std::string const& collectionName, int index);
185
186 MCFOLD void setSize(::glm::vec2 const& size);
187
188 MCAPI void updateDefaultFocusIfNeeded();
189
190 MCAPI bool updatePendingFocusControl();
191
192 MCAPI void validateFocusControl();
193
194 MCAPI ~FocusManager();
195 // NOLINTEND
196
197public:
198 // constructor thunks
199 // NOLINTBEGIN
200 MCAPI void* $ctor();
201 // NOLINTEND
202
203public:
204 // destructor thunk
205 // NOLINTBEGIN
206 MCAPI void $dtor();
207 // NOLINTEND
208};
Definition Subscription.h:10
Definition FocusManagerProxy.h:5
Definition FocusManager.h:5
Definition UIControl.h:5
Definition SweepDescription.h:5
Definition SweepResult.h:5