12auto get_key_map() -> bimap<key_code, int>&
14 static bimap<key_code, int> keyMap;
29 auto gamepad = std::make_shared<os_gamepad>(index);
31 gamepads_[index] =
gamepad.get();
34 auto keyboard = std::make_shared<os_keyboard>();
38 auto mouse = std::make_shared<os_mouse>();
39 devices_.emplace_back(
mouse);
51 return *gamepads_.at(index);
79 auto pos = os::mouse::get_position();
86 for(
auto& kvp : gamepads_)
94 window_input_zone_ = window_zone;
99 work_input_zone_ = work_zone;
104 input_reference_size_ = reference_size;
111 case os::events::key_down:
118 case os::events::key_up:
126 case os::events::mouse_button:
131 switch(
e.button.state_id)
133 case os::state::pressed:
138 case os::state::released:
148 switch(
e.button.button)
150 case os::mouse::button::left:
155 case os::mouse::button::right:
160 case os::mouse::button::middle:
165 case os::mouse::button::x1:
171 case os::mouse::button::x2:
182 state_map.set_state(
static_cast<uint32_t
>(
mouse_button), state);
187 case os::events::mouse_motion:
192 case os::events::mouse_wheel:
201 case os::events::gamepad_added:
203 for(
auto& kvp : gamepads_)
210 case os::events::gamepad_removed:
212 for(
auto& kvp : gamepads_)
227 auto calc_zone = work_input_zone_ ? work_input_zone_ : window_input_zone_;
234 const auto& work_zone = *calc_zone;
236 coord remapped_pos{};
237 remapped_pos.
x = global_pos.x - work_zone.x;
238 remapped_pos.y = global_pos.y - work_zone.y;
240 if(input_reference_size_)
242 remapped_pos.x *= float(input_reference_size_->w) / float(work_zone.w);
243 remapped_pos.y *= float(input_reference_size_->h) / float(work_zone.h);
251 auto calc_zone = work_input_zone_ ? work_input_zone_ : window_input_zone_;
258 const auto& work_zone = *calc_zone;
260 auto right = work_zone.w;
262 auto bottom = work_zone.h;
265 if(input_reference_size_)
267 float scale_x = float(input_reference_size_->w) / float(work_zone.w);
268 float scale_y = float(input_reference_size_->h) / float(work_zone.h);
275 return pos.x >=
left && pos.x <=
right && pos.y >= top && pos.y <= bottom;
280 is_input_allowed_ = allowed;
282 for(
const auto& dev : devices_)
284 dev->set_is_input_allowed(allowed);
290 return is_input_allowed_;