Răsfoiți Sursa

Merge pull request #3920 from Hinsbart/js_echo_keys

html5: workaround for echo key events.
Rémi Verschelde 9 ani în urmă
părinte
comite
6b1ca582f9

+ 19 - 0
platform/javascript/javascript_main.cpp

@@ -74,6 +74,15 @@ static void _glut_skey(bool pressed,int key) {
 		case GLUT_KEY_INSERT: ev.key.scancode=KEY_INSERT; break;
 	}
 
+	if (pressed) {
+		if (os->skey_pressed[key])
+			ev.key.echo = true;
+		else
+			os->skey_pressed[key] = true;
+	}
+	else {
+		os->skey_pressed[key] = false;
+	}
 
 	uint32_t m = glutGetModifiers();
 	ev.key.mod.alt=(m&GLUT_ACTIVE_ALT)!=0;
@@ -107,6 +116,16 @@ static void _glut_key(bool pressed,unsigned char key) {
 		default: {
 			ev.key.unicode=key;
 		}
+
+		if (pressed) {
+			if (os->key_pressed[key])
+				ev.key.echo = true;
+			else
+				os->key_pressed[key] = true;
+		}
+		else {
+			os->key_pressed[key] = false;
+		}
 	}
 
 

+ 5 - 1
platform/javascript/os_javascript.cpp

@@ -693,7 +693,11 @@ OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, Ope
 
 	time_to_save_sync=-1;
 
-
+	for (int i = 0; i < 256; i++) {
+		key_pressed[i] = false;
+		if (i < 121)
+			skey_pressed[i] = false;
+	}
 }
 
 OS_JavaScript::~OS_JavaScript() {

+ 3 - 1
platform/javascript/os_javascript.h

@@ -56,10 +56,12 @@ public:
 		Point2 pos;
 	};
 
+	bool skey_pressed[121];
+	bool key_pressed[256];
+
 private:
 
 	Vector<TouchPos> touch;
-
 	Point2 last_mouse;
 	unsigned int last_id;
 	GFXInitFunc gfx_init_func;