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 ::std::shared_ptr<::UIControl> _findFocusContainerControlFor(::std::shared_ptr<::UIControl> forControl)
const;
65 MCAPI
int _findFocusControlIndex(::UIControl
const& startControl)
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
void _setFocusControlFromIndex(
int focusControlIndex,
bool overrideLastFocus);
80 MCAPI
void _setFocusControlFromWeakPtr(::std::weak_ptr<::UIControl> control);
82 MCAPI
void _setFocusControlInternal(::UIControl
const& control,
bool allowDefault,
bool overrideLastFocus);
84 MCAPI
void _sweepForClosestControl(::std::shared_ptr<::UIControl> focusedControl);
86 MCAPI ::SweepResult _sweepForControl(
87 ::SweepDescription
const& desc,
88 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls,
92 MCAPI ::SweepResult _sweepForControlDirectional(
93 ::SweepDescription
const& desc,
94 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls,
98 MCAPI ::SweepResult _sweepForControlFocusOverride(
99 ::SweepDescription
const& desc,
100 ::std::vector<::std::shared_ptr<::UIControl>>
const& controls,
105 _sweepToNextFocusObject(::ui::CardinalDirection direction,
bool overrideOrigin, ::glm::vec2
const& overridePos);
107 MCAPI
void _updateFocusContainer(
108 ::std::weak_ptr<::UIControl> oldFocusedControl,
109 bool updateControlIndex,
110 bool overrideLastFocus
113 MCAPI
void _updateFocusControlIndex();
115 MCAPI
void _updateLostFocusControlList(::std::weak_ptr<::UIControl> control);
117 MCAPI
void _updateRootOfFocusTree();
119 MCAPI
bool _useLastFocus(
120 ::ui::CardinalDirection direction,
121 ::FocusContainerComponent* toFocusContainerComp,
122 ::FocusContainerComponent* fromFocusContainerComp
125 MCAPI
void addControl(::UIControl& control);
127 MCAPI
void clearPendingFocusControl();
129 MCAPI
void defaultFocus();
131 MCAPI
bool hasFocusedControl();
133 MCAPI
void removeControl(
134 ::UIControl& control,
135 ::std::map<::std::vector<::std::shared_ptr<::UIControl>>*, ::std::vector<::std::shared_ptr<::UIControl>>>&
139 MCAPI
bool setFocusControl(::UIControl
const& control,
bool allowDefault);
141 MCAPI
void setFocusedControlToLostFocus();
143 MCAPI
void setModalRoot(::std::shared_ptr<::UIControl>& control);
145 MCAPI
void setPendingFocusControl(::std::string
const& name, ::std::string
const& collectionName,
int index);
147 MCAPI
void updateDefaultFocusIfNeeded();
149 MCAPI
bool updatePendingFocusControl();
151 MCAPI
void validateFocusControl();
153 MCAPI ~FocusManager();
Definition FocusManagerProxy.h:5
Definition FocusManager.h:5
Definition SingleThreaded.h:7
Definition FocusContainerComponent.h:5
Definition SweepDescription.h:5
Definition SweepResult.h:5