Skip to content

Commit 38ee1f9

Browse files
committed
JSKeyEvent streamlining
1 parent 4125be0 commit 38ee1f9

File tree

1 file changed

+23
-26
lines changed

1 file changed

+23
-26
lines changed

sources/net.sf.j2s.java.core/src/swingjs/JSKeyEvent.java

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,8 @@ public JSKeyEvent(JComponent source, Object jQueryEvent) {
8181

8282
id = (evType == "keydown" ? KEY_PRESSED : evType == "keypress" ? KEY_TYPED : evType == "keyup" ? KEY_RELEASED : 0);
8383
keyCode = getJavaKeyCode(jskeyCode, jskey);
84-
boolean noKey = checkNoKey(keyCode, jskey);
85-
if (noKey) {
86-
ignore = (id == KEY_TYPED);
87-
keyChar = (ignore ? (char) keyCode : CHAR_UNDEFINED);
88-
} else {
89-
keyChar = getKeyChar(keyCode, jskey);
90-
}
84+
keyChar = getJavaKeyChar(keyCode, jskey);
85+
ignore = (keyChar == CHAR_UNDEFINED && id == KEY_TYPED);
9186
if (id == KEY_TYPED)
9287
keyCode = 0;
9388
}
@@ -96,6 +91,9 @@ private static int getJavaKeyCode(int jskeyCode, String jskey) {
9691

9792
// see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
9893

94+
// enter is special
95+
if (jskeyCode == 13)
96+
return VK_ENTER;
9997
if (jskeyCode <= 40) {
10098
// 0-40 is same
10199
return jskeyCode;
@@ -105,16 +103,15 @@ private static int getJavaKeyCode(int jskeyCode, String jskey) {
105103
return (jskeyCode >= 96 && jskeyCode <= 105 ? jskeyCode : 0 + jskey.toUpperCase().charAt(0));
106104
}
107105
switch (jskeyCode) {
108-
109106
case 91: // META
110-
return 157;
107+
return VK_META;
111108
case 93: // CONTEXT_MENU
112-
return 525;
109+
return VK_CONTEXT_MENU;
113110
case 144: // NUM_LOCK
114111
case 145: // SCROLL_LOCK
115112
return jskeyCode;
116113
case 244: // Kanji
117-
return 25;
114+
return VK_KANJI;
118115
}
119116

120117
String keyName = "VK_" + jskey.toUpperCase();
@@ -129,38 +126,38 @@ private static int getJavaKeyCode(int jskeyCode, String jskey) {
129126
return jskeyCode;
130127
}
131128

132-
private static char getKeyChar(int jskeyCode, String jskey) {
129+
private static char getJavaKeyChar(int jsKeyCode, String jskey) {
133130
if (jskey.length() == 1)
134131
return jskey.charAt(0);
135-
switch (jskeyCode) {
132+
// valid Java characters that are named in JavaScript
133+
switch (jsKeyCode) {
134+
case 13:
135+
jsKeyCode = VK_ENTER;
136+
// fall through
136137
case VK_ENTER:
137-
return '\n';
138138
case VK_BACK_SPACE:
139-
return '\b';
140139
case VK_TAB:
141-
return '\t';
142140
case VK_DELETE:
143-
return (char) 127;
144141
case VK_ESCAPE:
145-
return (char) 27;
142+
return (char) jsKeyCode;
146143
default:
147144
return '\uFFFF';
148145
}
149146
}
150147

151-
private static boolean checkNoKey(int keyCode, String jskey) {
152-
switch (keyCode) {
148+
private static boolean hasKeyChar(int javaKeyCode, String jskey) {
149+
switch (javaKeyCode) {
153150
case VK_ENTER:
154-
case VK_TAB:
155151
case VK_BACK_SPACE:
152+
case VK_TAB:
156153
case VK_DELETE:
157154
case VK_ESCAPE:
158-
case VK_CANCEL: // untested
159-
case VK_CLEAR: // untested
160-
return false;
155+
return true;
156+
default:
157+
// otherwise only single-char jskeys have characters in Java
158+
return (jskey.length() == 1);
161159
}
162-
// otherwise only single-char jskeys have characters in Java
163-
return (jskey.length() > 1);
160+
164161
}
165162

166163
private static int getModifiers(boolean shift, boolean ctrl, boolean alt, boolean meta, boolean altGraph) {

0 commit comments

Comments
 (0)