16 assert(event->getTarget());
21 dynamic_cast<GuiEventDispatchChain*
>(
event->getTarget()->buildEventDispatchChain(&baseDispatchChain));
23 Sml::Event* returnEvent = targetDispatchChain->sendThroughChain(event);
24 baseDispatchChain.reset();
32void GuiEventDispatcher::attachFilter(
const std::initializer_list<Sml::EventType>& types,
33 Sml::Listener* filter)
36 m_FiltersNotifier.attachListener(types, filter);
39void GuiEventDispatcher::detachFilter(Sml::Listener* filter)
42 m_FiltersNotifier.detachListener(filter);
45void GuiEventDispatcher::attachHandler(
const std::initializer_list<Sml::EventType>& types,
46 Sml::Listener* handler)
49 m_HandlersNotifier.attachListener(types, handler);
52void GuiEventDispatcher::detachHandler(Sml::Listener* handler)
55 m_HandlersNotifier.detachListener(handler);
58Sml::Event* GuiEventDispatcher::dispatchEvent(Sml::Event* event, Sml::EventDispatchChain* chain)
63 event = dispatchCapturingEvent(event);
65 if (event->isConsumed())
71 event = chain->sendThroughChain(event);
76 event = dispatchBubblingEvent(event);
78 if (event->isConsumed())
87Sml::Event* GuiEventDispatcher::dispatchCapturingEvent(Sml::Event* event)
90 m_FiltersNotifier.notify(event);
95Sml::Event* GuiEventDispatcher::dispatchBubblingEvent(Sml::Event* event)
98 m_HandlersNotifier.notify(event);
106GuiEventDispatchChain::GuiEventDispatchChain(
size_t defaultDispatchersCount)
107 : m_Dispatchers(defaultDispatchersCount), m_ActiveCount(0) {}
109void GuiEventDispatchChain::reset()
111 for (
auto it = m_Dispatchers.begin(); it != m_Dispatchers.end(); ++it)
116 m_Dispatchers.clear();
124 if (m_ActiveCount >= m_Dispatchers.size())
136Sml::Event* GuiEventDispatchChain::sendThroughChain(Sml::Event* event)
140 if (m_ActiveCount == 0)
145 uint32_t savedActiveCount = m_ActiveCount;
148 Sml::Event* returnEvent = nextDispatcher->dispatchEvent(event,
this);
150 m_ActiveCount = savedActiveCount;
virtual void prependDispatcher(Sml::EventDispatcher *dispatcher) override
Sml::Event * fireEvent(Sml::Event *event)
Fire the event from the specified.