18 key_pressed_time_[static_cast<std::size_t>(key_id)] = timer::now();
20 on_key_pressed(key_pressed_data{key_id});
23 connections_.push_back(src.on_key_pressed_repeat.connect([&](
key key_id) {
28 connections_.push_back(src.on_key_released.connect([&](
key key_id) {
30 on_key_released(key_released_data{key_id});
33 connections_.push_back(src.on_text_entered.connect([&](std::uint32_t c) {
35 on_text_entered(text_entered_data{c});
38 connections_.push_back(
41 mouse_pos /= scaling_factor_;
44 auto time_last = mouse_pressed_time_[
static_cast<std::size_t
>(button_id)];
45 auto time_now = timer::now();
46 mouse_pressed_time_[
static_cast<std::size_t
>(button_id)] = time_now;
47 double click_time = std::chrono::duration<double>(time_now - time_last).count();
50 on_mouse_pressed(mouse_pressed_data{button_id, mouse_pos});
52 if (click_time < double_click_time_)
53 on_mouse_double_clicked(mouse_double_clicked_data{button_id, mouse_pos});
56 connections_.push_back(
59 mouse_pos /= scaling_factor_;
62 bool was_dragged = is_mouse_dragged_ && button_id == mouse_drag_button_;
63 on_mouse_released(mouse_released_data{button_id, mouse_pos, was_dragged});
66 is_mouse_dragged_ =
false;
67 on_mouse_drag_stop(mouse_drag_stop_data{button_id, mouse_pos});
71 connections_.push_back(src.on_mouse_wheel.connect([&](
float wheel,
gui::vector2f mouse_pos) {
73 mouse_pos /= scaling_factor_;
75 on_mouse_wheel(mouse_wheel_data{wheel, mouse_pos});
78 connections_.push_back(
81 movement /= scaling_factor_;
82 mouse_pos /= scaling_factor_;
85 on_mouse_moved(mouse_moved_data{movement, mouse_pos});
87 if (!is_mouse_dragged_) {
88 std::size_t mouse_button_pressed = std::numeric_limits<std::size_t>::max();
91 mouse_button_pressed = i;
96 if (mouse_button_pressed != std::numeric_limits<std::size_t>::max()) {
97 is_mouse_dragged_ =
true;
98 mouse_drag_button_ =
static_cast<mouse_button>(mouse_button_pressed);
99 on_mouse_drag_start(mouse_drag_start_data{mouse_drag_button_, mouse_pos});