@@ -211,72 +211,31 @@ EventDispatcher::~EventDispatcher()
211
211
removeAllEventListeners ();
212
212
}
213
213
214
- void EventDispatcher::visitTarget (Node* node, bool isRootNode )
214
+ void EventDispatcher::fillNodePriorityMap (Node* rootNode )
215
215
{
216
- node->sortAllChildren ();
216
+ rootNode->fillGlobalZNodeMap (
217
+ _globalZOrderNodeMap, [this ](Node* n) -> bool { return _nodeListenersMap.find (n) != _nodeListenersMap.end (); });
217
218
218
- int i = 0 ;
219
- auto & children = node-> getChildren ( );
219
+ std::vector< float > globalZOrders ;
220
+ globalZOrders. reserve (_globalZOrderNodeMap. size () );
220
221
221
- auto childrenCount = children.size ();
222
-
223
- if (childrenCount > 0 )
222
+ for (const auto & e : _globalZOrderNodeMap)
224
223
{
225
- Node* child = nullptr ;
226
- // visit children zOrder < 0
227
- for (; i < childrenCount; i++)
228
- {
229
- child = children.at (i);
224
+ globalZOrders.emplace_back (e.first );
225
+ }
230
226
231
- if (child && child->getLocalZOrder () < 0 )
232
- visitTarget (child, false );
233
- else
234
- break ;
235
- }
227
+ std::stable_sort (globalZOrders.begin (), globalZOrders.end (),
228
+ [](const float a, const float b) { return a < b; });
236
229
237
- if (_nodeListenersMap.find (node) != _nodeListenersMap.end ())
238
- {
239
- _globalZOrderNodeMap[node->getGlobalZOrder ()].emplace_back (node);
240
- }
241
-
242
- for (; i < childrenCount; i++)
243
- {
244
- child = children.at (i);
245
- if (child)
246
- visitTarget (child, false );
247
- }
248
- }
249
- else
230
+ for (const auto & globalZ : globalZOrders)
250
231
{
251
- if (_nodeListenersMap. find (node) != _nodeListenersMap. end () )
232
+ for ( const auto & n : _globalZOrderNodeMap[globalZ] )
252
233
{
253
- _globalZOrderNodeMap[node-> getGlobalZOrder ()]. emplace_back (node) ;
234
+ _nodePriorityMap[n] = ++_nodePriorityIndex ;
254
235
}
255
236
}
256
237
257
- if (isRootNode)
258
- {
259
- std::vector<float > globalZOrders;
260
- globalZOrders.reserve (_globalZOrderNodeMap.size ());
261
-
262
- for (const auto & e : _globalZOrderNodeMap)
263
- {
264
- globalZOrders.emplace_back (e.first );
265
- }
266
-
267
- std::stable_sort (globalZOrders.begin (), globalZOrders.end (),
268
- [](const float a, const float b) { return a < b; });
269
-
270
- for (const auto & globalZ : globalZOrders)
271
- {
272
- for (const auto & n : _globalZOrderNodeMap[globalZ])
273
- {
274
- _nodePriorityMap[n] = ++_nodePriorityIndex;
275
- }
276
- }
277
-
278
- _globalZOrderNodeMap.clear ();
279
- }
238
+ _globalZOrderNodeMap.clear ();
280
239
}
281
240
282
241
void EventDispatcher::pauseEventListenersForTarget (Node* target, bool recursive /* = false */ )
@@ -1317,7 +1276,7 @@ void EventDispatcher::sortEventListenersOfSceneGraphPriority(std::string_view li
1317
1276
_nodePriorityIndex = 0 ;
1318
1277
_nodePriorityMap.clear ();
1319
1278
1320
- visitTarget (rootNode, true );
1279
+ fillNodePriorityMap (rootNode);
1321
1280
1322
1281
// After sort: priority < 0, > 0
1323
1282
std::stable_sort (sceneGraphListeners->begin (), sceneGraphListeners->end (),
0 commit comments