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});