aboutsummaryrefslogtreecommitdiff
path: root/platform/javascript
diff options
context:
space:
mode:
authoreska2016-11-23 23:53:38 +0100
committereska2016-12-03 15:33:59 +0100
commit49e22aa83ff5523ab6e976f04cac067de21e4a5e (patch)
tree9503dc188612c94516cebc918765350075809d15 /platform/javascript
parent6d86a63648c65c9e5e72747130ee3cb0ed49ab4c (diff)
downloadgodot-49e22aa83ff5523ab6e976f04cac067de21e4a5e.tar.gz
godot-49e22aa83ff5523ab6e976f04cac067de21e4a5e.tar.zst
godot-49e22aa83ff5523ab6e976f04cac067de21e4a5e.zip
Fix some mouse bugs in WebAssembly/asm.js
- Emit mouse wheel release events - Set button masks, fixes #5092
Diffstat (limited to 'platform/javascript')
-rw-r--r--platform/javascript/javascript_main.cpp11
-rw-r--r--platform/javascript/os_javascript.cpp10
-rw-r--r--platform/javascript/os_javascript.h1
3 files changed, 17 insertions, 5 deletions
diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp
index af12384bc..586ccc9b4 100644
--- a/platform/javascript/javascript_main.cpp
+++ b/platform/javascript/javascript_main.cpp
@@ -66,11 +66,12 @@ static void _glut_mouse_button(int button, int state, int x, int y) {
if (ev.mouse_button.button_index<4) {
if (ev.mouse_button.pressed) {
- _mouse_button_mask|=1<<ev.mouse_button.button_index;
+ _mouse_button_mask |= 1 << (ev.mouse_button.button_index-1);
} else {
- _mouse_button_mask&=~(1<<ev.mouse_button.button_index);
+ _mouse_button_mask &= ~(1 << (ev.mouse_button.button_index-1));
}
}
+ ev.mouse_button.button_mask=_mouse_button_mask;
uint32_t m = glutGetModifiers();
ev.mouse_button.mod.alt=(m&GLUT_ACTIVE_ALT)!=0;
@@ -79,6 +80,11 @@ static void _glut_mouse_button(int button, int state, int x, int y) {
os->push_input(ev);
+ if (ev.mouse_button.button_index==BUTTON_WHEEL_UP || ev.mouse_button.button_index==BUTTON_WHEEL_DOWN) {
+ // GLUT doesn't send release events for mouse wheel, so send manually
+ ev.mouse_button.pressed=false;
+ os->push_input(ev);
+ }
}
@@ -162,7 +168,6 @@ int main(int argc, char *argv[]) {
glutMouseFunc(_glut_mouse_button);
glutMotionFunc(_glut_mouse_motion);
- glutMotionFunc(_glut_mouse_motion);
glutPassiveMotionFunc(_glut_mouse_motion);
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 37ae7bf27..6c8ed6f4d 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -294,13 +294,15 @@ bool OS_JavaScript::is_mouse_grab_enabled() const {
//*sigh* technology has evolved so much since i was a kid..
return false;
}
+
Point2 OS_JavaScript::get_mouse_pos() const {
- return Point2();
+ return input->get_mouse_pos();
}
+
int OS_JavaScript::get_mouse_button_state() const {
- return 0;
+ return last_button_mask;
}
void OS_JavaScript::set_window_title(const String& p_title) {
@@ -422,6 +424,9 @@ void OS_JavaScript::push_input(const InputEvent& p_ev) {
if (ev.type==InputEvent::MOUSE_MOTION) {
input->set_mouse_pos(Point2(ev.mouse_motion.x, ev.mouse_motion.y));
}
+ else if (ev.type==InputEvent::MOUSE_BUTTON) {
+ last_button_mask = ev.mouse_button.button_mask;
+ }
input->parse_input_event(p_ev);
}
@@ -760,6 +765,7 @@ OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, Get
gfx_init_func=p_gfx_init_func;
gfx_init_ud=p_gfx_init_ud;
+ last_button_mask=0;
main_loop=NULL;
last_id=1;
gl_extensions=NULL;
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index 0f52d671d..abcc47aca 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -58,6 +58,7 @@ private:
Vector<TouchPos> touch;
Point2 last_mouse;
+ int last_button_mask;
unsigned int last_id;
GFXInitFunc gfx_init_func;
void*gfx_init_ud;