MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / sendEvent

Method sendEvent

source/windowing/StarPane.cpp:73–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73bool Pane::sendEvent(InputEvent const& event) {
74 if (m_visible) {
75 if (event.is<MouseButtonDownEvent>() || event.is<MouseButtonUpEvent>() || event.is<MouseMoveEvent>()
76 || event.is<MouseWheelEvent>()) {
77 Vec2I mousePos = *m_context->mousePosition(event);
78 // First, handle preliminary mouse out / click up events
79 if (m_mouseOver) {
80 if (!m_mouseOver->inMember(mousePos) || !m_mouseOver->active()) {
81 m_mouseOver->mouseOut();
82 m_mouseOver.reset();
83 }
84 }
85
86 if (event.is<MouseButtonUpEvent>())
87 m_clickDown.reset();
88
89 WidgetPtr newClickDown;
90 WidgetPtr newMouseOver;
91 WidgetPtr newFocusWidget;
92
93 // Then, go through widgets in highest to lowest z-order and handle mouse
94 // over, focus, and capture events.
95 for (auto const& widget : reverseIterate(m_members)) {
96 if (widget->inMember(mousePos) && widget->active() && widget->interactive()) {
97 WidgetPtr topWidget = widget;
98 WidgetPtr child = getChildAt(mousePos);
99 if (child->active() && child->interactive()) {
100 if (event.is<MouseButtonDownEvent>()
101 && (event.get<MouseButtonDownEvent>().mouseButton == MouseButton::Left
102 || event.get<MouseButtonDownEvent>().mouseButton == MouseButton::Right)) {
103 if (!newClickDown)
104 newClickDown = child;
105
106 if (!newFocusWidget)
107 newFocusWidget = child;
108 }
109
110 if (!newMouseOver)
111 newMouseOver = child;
112 }
113 }
114 }
115
116 if (m_clickDown != newClickDown)
117 m_clickDown = newClickDown;
118
119 if (m_mouseOver != newMouseOver) {
120 if (m_mouseOver)
121 m_mouseOver->mouseOut();
122 m_mouseOver = newMouseOver;
123 if (m_mouseOver) {
124 if (m_clickDown == m_mouseOver)
125 m_mouseOver->mouseReturnStillDown();
126 else
127 m_mouseOver->mouseOver();
128 }
129 }
130

Callers 1

sendInputEventMethod · 0.45

Calls 11

reverseIterateFunction · 0.85
inMemberMethod · 0.80
focusMethod · 0.80
mousePositionMethod · 0.45
activeMethod · 0.45
mouseOutMethod · 0.45
resetMethod · 0.45
interactiveMethod · 0.45
mouseReturnStillDownMethod · 0.45
mouseOverMethod · 0.45
blurMethod · 0.45

Tested by

no test coverage detected