| 648 | } |
| 649 | |
| 650 | int DisplayServerWeb::_mouse_wheel_callback(int p_delta_mode, double p_delta_x, double p_delta_y) { |
| 651 | if (!godot_js_display_canvas_is_focused() && !godot_js_is_ime_focused()) { |
| 652 | if (get_singleton()->cursor_inside_canvas) { |
| 653 | godot_js_display_canvas_focus(); |
| 654 | } else { |
| 655 | return false; |
| 656 | } |
| 657 | } |
| 658 | |
| 659 | Input *input = Input::get_singleton(); |
| 660 | Ref<InputEventMouseButton> ev; |
| 661 | ev.instantiate(); |
| 662 | ev->set_position(input->get_mouse_position()); |
| 663 | ev->set_global_position(ev->get_position()); |
| 664 | |
| 665 | ev->set_shift_pressed(input->is_key_pressed(Key::SHIFT)); |
| 666 | ev->set_alt_pressed(input->is_key_pressed(Key::ALT)); |
| 667 | ev->set_ctrl_pressed(input->is_key_pressed(Key::CTRL)); |
| 668 | ev->set_meta_pressed(input->is_key_pressed(Key::META)); |
| 669 | |
| 670 | enum DeltaMode { |
| 671 | DELTA_MODE_PIXEL = 0, |
| 672 | DELTA_MODE_LINE = 1, |
| 673 | DELTA_MODE_PAGE = 2, |
| 674 | }; |
| 675 | const float MOUSE_WHEEL_PIXEL_FACTOR = 0.03f; |
| 676 | const float MOUSE_WHEEL_LINE_FACTOR = 0.3f; |
| 677 | const float MOUSE_WHEEL_PAGE_FACTOR = 1.0f; |
| 678 | float mouse_wheel_factor; |
| 679 | |
| 680 | switch (p_delta_mode) { |
| 681 | case DELTA_MODE_PIXEL: { |
| 682 | mouse_wheel_factor = MOUSE_WHEEL_PIXEL_FACTOR; |
| 683 | } break; |
| 684 | case DELTA_MODE_LINE: { |
| 685 | mouse_wheel_factor = MOUSE_WHEEL_LINE_FACTOR; |
| 686 | } break; |
| 687 | case DELTA_MODE_PAGE: { |
| 688 | mouse_wheel_factor = MOUSE_WHEEL_PAGE_FACTOR; |
| 689 | } break; |
| 690 | } |
| 691 | |
| 692 | if (p_delta_y < 0) { |
| 693 | ev->set_button_index(MouseButton::WHEEL_UP); |
| 694 | ev->set_factor(-p_delta_y * mouse_wheel_factor); |
| 695 | } else if (p_delta_y > 0) { |
| 696 | ev->set_button_index(MouseButton::WHEEL_DOWN); |
| 697 | ev->set_factor(p_delta_y * mouse_wheel_factor); |
| 698 | } else if (p_delta_x > 0) { |
| 699 | ev->set_button_index(MouseButton::WHEEL_LEFT); |
| 700 | ev->set_factor(p_delta_x * mouse_wheel_factor); |
| 701 | } else if (p_delta_x < 0) { |
| 702 | ev->set_button_index(MouseButton::WHEEL_RIGHT); |
| 703 | ev->set_factor(-p_delta_x * mouse_wheel_factor); |
| 704 | } else { |
| 705 | return false; |
| 706 | } |
| 707 |
nothing calls this directly
no test coverage detected