1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

[web] add support for pen pressure

This commit is contained in:
Airyzz
2025-06-05 18:03:43 +09:30
parent 978b38797b
commit 5f8f0ac305
4 changed files with 10 additions and 9 deletions

View File

@@ -305,18 +305,18 @@ int DisplayServerWeb::_mouse_button_callback(int p_pressed, int p_button, double
return true; return true;
} }
void DisplayServerWeb::mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers) { void DisplayServerWeb::mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers, double p_pressure) {
#ifdef PROXY_TO_PTHREAD_ENABLED #ifdef PROXY_TO_PTHREAD_ENABLED
if (!Thread::is_main_thread()) { if (!Thread::is_main_thread()) {
callable_mp_static(DisplayServerWeb::_mouse_move_callback).call_deferred(p_x, p_y, p_rel_x, p_rel_y, p_modifiers); callable_mp_static(DisplayServerWeb::_mouse_move_callback).call_deferred(p_x, p_y, p_rel_x, p_rel_y, p_modifiers, p_pressure);
return; return;
} }
#endif #endif
_mouse_move_callback(p_x, p_y, p_rel_x, p_rel_y, p_modifiers); _mouse_move_callback(p_x, p_y, p_rel_x, p_rel_y, p_modifiers, p_pressure);
} }
void DisplayServerWeb::_mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers) { void DisplayServerWeb::_mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers, double p_pressure) {
BitField<MouseButtonMask> input_mask = Input::get_singleton()->get_mouse_button_mask(); BitField<MouseButtonMask> input_mask = Input::get_singleton()->get_mouse_button_mask();
// For motion outside the canvas, only read mouse movement if dragging // For motion outside the canvas, only read mouse movement if dragging
// started inside the canvas; imitating desktop app behavior. // started inside the canvas; imitating desktop app behavior.
@@ -332,6 +332,7 @@ void DisplayServerWeb::_mouse_move_callback(double p_x, double p_y, double p_rel
ev->set_position(pos); ev->set_position(pos);
ev->set_global_position(pos); ev->set_global_position(pos);
ev->set_pressure((float)p_pressure);
ev->set_relative(Vector2(p_rel_x, p_rel_y)); ev->set_relative(Vector2(p_rel_x, p_rel_y));
ev->set_relative_screen_position(ev->get_relative()); ev->set_relative_screen_position(ev->get_relative());

View File

@@ -120,8 +120,8 @@ private:
static void _fullscreen_change_callback(int p_fullscreen); static void _fullscreen_change_callback(int p_fullscreen);
WASM_EXPORT static int mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers); WASM_EXPORT static int mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers);
static int _mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers); static int _mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers);
WASM_EXPORT static void mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers); WASM_EXPORT static void mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers, double p_pressure);
static void _mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers); static void _mouse_move_callback(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers, double p_pressure);
WASM_EXPORT static int mouse_wheel_callback(double p_delta_x, double p_delta_y); WASM_EXPORT static int mouse_wheel_callback(double p_delta_x, double p_delta_y);
static int _mouse_wheel_callback(double p_delta_x, double p_delta_y); static int _mouse_wheel_callback(double p_delta_x, double p_delta_y);
WASM_EXPORT static void touch_callback(int p_type, int p_count); WASM_EXPORT static void touch_callback(int p_type, int p_count);

View File

@@ -57,7 +57,7 @@ extern int godot_js_pwa_update();
// Input // Input
extern void godot_js_input_mouse_button_cb(int (*p_callback)(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers)); extern void godot_js_input_mouse_button_cb(int (*p_callback)(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers));
extern void godot_js_input_mouse_move_cb(void (*p_callback)(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers)); extern void godot_js_input_mouse_move_cb(void (*p_callback)(double p_x, double p_y, double p_rel_x, double p_rel_y, int p_modifiers, double p_pressure));
extern void godot_js_input_mouse_wheel_cb(int (*p_callback)(double p_delta_x, double p_delta_y)); extern void godot_js_input_mouse_wheel_cb(int (*p_callback)(double p_delta_x, double p_delta_y));
extern void godot_js_input_touch_cb(void (*p_callback)(int p_type, int p_count), uint32_t *r_identifiers, double *r_coords); extern void godot_js_input_touch_cb(void (*p_callback)(int p_type, int p_count), uint32_t *r_identifiers, double *r_coords);
extern void godot_js_input_key_cb(void (*p_callback)(int p_type, int p_repeat, int p_modifiers), char r_code[32], char r_key[32]); extern void godot_js_input_key_cb(void (*p_callback)(int p_type, int p_repeat, int p_modifiers), char r_code[32], char r_key[32]);

View File

@@ -515,9 +515,9 @@ const GodotInput = {
const rel_pos_x = evt.movementX * rw; const rel_pos_x = evt.movementX * rw;
const rel_pos_y = evt.movementY * rh; const rel_pos_y = evt.movementY * rh;
const modifiers = GodotInput.getModifiers(evt); const modifiers = GodotInput.getModifiers(evt);
func(pos[0], pos[1], rel_pos_x, rel_pos_y, modifiers); func(pos[0], pos[1], rel_pos_x, rel_pos_y, modifiers, evt.pressure);
} }
GodotEventListeners.add(window, 'mousemove', move_cb, false); GodotEventListeners.add(window, 'pointermove', move_cb, false);
}, },
godot_js_input_mouse_wheel_cb__proxy: 'sync', godot_js_input_mouse_wheel_cb__proxy: 'sync',