3#include "pixelbullet/application/layer.h"
4#include "pixelbullet/core/event.h"
11namespace pixelbullet::application_internal
15 bool block_events =
true;
16 bool want_capture_mouse =
false;
17 bool want_capture_keyboard =
false;
23 if (!capture_state.block_events)
25 return pixelbullet::core::EventResult::Ignored;
28 if (event.is_in_category(pixelbullet::core::EventCategory::Mouse) && capture_state.want_capture_mouse)
30 return pixelbullet::core::EventResult::Consumed;
33 if (event.is_in_category(pixelbullet::core::EventCategory::Keyboard) && capture_state.want_capture_keyboard)
35 return pixelbullet::core::EventResult::Consumed;
38 return pixelbullet::core::EventResult::Ignored;
41template <
typename BuiltInHandler>
42pixelbullet::core::EventResult RouteEvent(pixelbullet::core::Event& event,
const std::vector<std::unique_ptr<Layer>>& layers,
43 BuiltInHandler&& built_in_handler)
47 const auto merge_result = [&](
const pixelbullet::core::EventResult result) -> pixelbullet::core::EventResult
49 event.merge_result(result);
50 return event.result();
53 const auto route_layers = [&]() -> pixelbullet::core::EventResult
55 constexpr std::array<EventPhase, 2> k_event_phases = { EventPhase::Early, EventPhase::Normal };
56 for (
const EventPhase phase : k_event_phases)
58 for (
auto it = layers.rbegin(); it != layers.rend(); ++it)
60 if ((*it)->GetEventPhase() != phase)
65 merge_result((*it)->OnEvent(event));
68 return event.result();
73 return event.result();
75 const auto invoke_built_in = [&]() -> pixelbullet::core::EventResult
76 {
return merge_result(std::forward<BuiltInHandler>(built_in_handler)(event)); };
78 if (event.type() == pixelbullet::core::EventType::WindowClose)
83 return event.result();
87 return event.result();
93 return event.result();
97 return event.result();
Definition event_routing.h:14