MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / _mouse_button_callback

Method _mouse_button_callback

platform/web/display_server_web.cpp:234–308  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232}
233
234int DisplayServerWeb::_mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers) {
235 DisplayServerWeb *ds = get_singleton();
236
237 Point2 pos(p_x, p_y);
238 Ref<InputEventMouseButton> ev;
239 ev.instantiate();
240 ev->set_position(pos);
241 ev->set_global_position(pos);
242 ev->set_pressed(p_pressed);
243 dom2godot_mod(ev, p_modifiers, Key::NONE);
244
245 switch (p_button) {
246 case DOM_BUTTON_LEFT:
247 ev->set_button_index(MouseButton::LEFT);
248 break;
249 case DOM_BUTTON_MIDDLE:
250 ev->set_button_index(MouseButton::MIDDLE);
251 break;
252 case DOM_BUTTON_RIGHT:
253 ev->set_button_index(MouseButton::RIGHT);
254 break;
255 case DOM_BUTTON_XBUTTON1:
256 ev->set_button_index(MouseButton::MB_XBUTTON1);
257 break;
258 case DOM_BUTTON_XBUTTON2:
259 ev->set_button_index(MouseButton::MB_XBUTTON2);
260 break;
261 default:
262 return false;
263 }
264
265 if (p_pressed) {
266 uint64_t diff = (OS::get_singleton()->get_ticks_usec() / 1000) - ds->last_click_ms;
267
268 if (ev->get_button_index() == ds->last_click_button_index) {
269 if (diff < 400 && Point2(ds->last_click_pos).distance_to(ev->get_position()) < 5) {
270 ds->last_click_ms = 0;
271 ds->last_click_pos = Point2(-100, -100);
272 ds->last_click_button_index = MouseButton::NONE;
273 ev->set_double_click(true);
274 }
275
276 } else {
277 ds->last_click_button_index = ev->get_button_index();
278 }
279
280 if (!ev->is_double_click()) {
281 ds->last_click_ms += diff;
282 ds->last_click_pos = ev->get_position();
283 }
284 }
285
286 BitField<MouseButtonMask> mask = Input::get_singleton()->get_mouse_button_mask();
287 MouseButtonMask button_flag = mouse_button_to_mask(ev->get_button_index());
288 if (ev->is_pressed()) {
289 mask.set_flag(button_flag);
290 } else if (mask.has_flag(button_flag)) {
291 mask.clear_flag(button_flag);

Callers

nothing calls this directly

Calls 15

mouse_button_to_maskFunction · 0.85
set_button_indexMethod · 0.80
get_button_indexMethod · 0.80
set_double_clickMethod · 0.80
is_double_clickMethod · 0.80
get_mouse_button_maskMethod · 0.80
clear_flagMethod · 0.80
parse_input_eventMethod · 0.80
resume_audioMethod · 0.80
flush_buffered_eventsMethod · 0.80
instantiateMethod · 0.45
set_positionMethod · 0.45

Tested by

no test coverage detected