<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>Hi Marcel,</p>
<p><br>
</p>
<p>following observations for your first question:</p>
<p><br>
</p>
<p></p>
<ul style="margin-bottom: 0px; margin-top: 0px;">
<li>Key strokes for characters such as $+, $#, $ß, $?, or $- yield "Squeak1" or "Squeak2" in my image.</li><li>Combinations such as "dead circumflex , space" that print a $^ on my Qwertz system are displayed as pure "space" in the tool.</li><li>Ctrl + Alt + E (types $€), Ctrl + Alt + 7 (types ${), Alt + (NumPlus , Num2, Num0) (types $ ), etc. are printed as "E", "7", "0", etc. only.</li></ul>
<div><br>
</div>
<div>Regarding your remaining questions, I cannot really add much value to this because I have never dealt with this before. But there weren't any WTF moments. :-)</div>
<p></p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
What about different keyboard layouts such as QWERTZ/QWERTY/AWERTY etc.? What about virtual ways to enter characters (e.g. tools for special characters, emojipads, etc.). How do you make sure that these virtual keys are mapped correctly to their physical equivalents?</div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<br>
</div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Best,</div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Christoph<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Taeumel, Marcel<br>
<b>Gesendet:</b> Mittwoch, 28. April 2021 12:02 Uhr<br>
<b>An:</b> squeak-dev<br>
<b>Betreff:</b> Re: [squeak-dev] Please try out | Cross-platform mapping for virtual key codes :-)</font>
<div> </div>
</div>
<div>
<div id="__MailbirdStyleContent" dir="ltr" style="font-size:10pt; font-family:Arial; color:#000000; text-align:left">
<div><span style="font-size:13.3333px">Hi all!</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Here is a small update. Please find attached the changeset.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Updates:</span></div>
<div><span style="font-size:13.3333px">- Adds KeyboardEvent >> #keyCode (via new inst-var)</span></div>
<div><span style="font-size:13.3333px">- Logs the last key-down event to attach virtual-key codes to key-stroke events; see HandMorph >> #generateKeyboardEvent:</span></div>
<div><span style="font-size:13.3333px">- Simplifies KeyboardEvent >> #key</span></div>
<div><span style="font-size:13.3333px">- Show event repetition in KeyboardExecizer</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><img naturalheight="198" naturalwidth="847" id="f6d464cc-dd08-4ed5-aba3-046dd659a427" width="519" height="121" style="user-select: none;" src="cid:64f61a46-f546-4de3-8792-45bd873a11f5"><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Major questions:</span></div>
<div><span style="font-size:13.3333px">1. Does it work on your machine?</span></div>
<div><span style="font-size:13.3333px">2. What are your thoughts on KeyboardEvent >> #key?</span></div>
<div><span style="font-size:13.3333px">3. What are your thoughts on KeyboardEvent >> #keyCode?</span></div>
<div><span style="font-size:13.3333px">4. Do you understand KeyboardEvent >> #physicalKey #virtualKey #physicalModifiers #virtualModifiers ?</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Happy testing!</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Best,</span></div>
<div><span style="font-size:13.3333px">Marcel</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">P.S.: Don't forget about the X11 key (scan?) codes. ^__^ I haven't had the time to look into the VM plugin yet.</span></div>
<div class="mb_sig"></div>
<blockquote class="history_container" type="cite" style="border-left-style:solid; border-width:1px; margin-top:20px; margin-left:0px; padding-left:10px; min-width:500px">
<p style="color:#AAAAAA; margin-top:10px">Am 27.04.2021 16:40:56 schrieb Marcel Taeumel <marcel.taeumel@hpi.de>:</p>
<div style="font-family:Arial,Helvetica,sans-serif">
<div id="__MailbirdStyleContent" dir="ltr" style="font-size:10pt; font-family:Arial; color:#000000; text-align:left">
<div>Hi all!<br>
</div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Please find attached a changeset that adds mapping tables for virtual keys (or scan codes) for macOS, X11, and Windows. You can find them in EventSensor class >> #virtualKeysOn*</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">You can try out if they work through the KeyboardExerciser. Please take a look at the balloon text (i.e. tool tip) to better understand the data.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">There is also a new preference:</span></div>
<div><span style="font-size:13.3333px">[x] Simplify Virtual-key codes</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">... because of Windows who dares to couple codes to the input language (e.g. US vs. DE), which Squeak knows nothing about. macOS is better in this regard. :-)</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Biggest mess is on Linux/X11. For key-down/up events, the Linux VM delivers actual character codes instead of scan codes, which makes a basic mapping to physical keys almost impossible. See EventSensor class >> #virtualKeysOnX11.
 We MUST fix that! Please. Somebody. Can I haz scan codes? ^__^</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">***</span></div>
<div><img naturalheight="408" naturalwidth="931" id="af6cb333-4a04-4609-ac24-d8d07d02b787" width="491" height="215" style="user-select: none;" src="cid:4d3dcc25-f68b-4238-a5a7-bf997a213c69"><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">***</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">The good news: KeyboardEvent >> #key (and UserInputEvent >> #modifiers) now gives you cross-platform stable information about physical keys to be used in keyboard handlers. Yes, for both key-stroke and key-down/up events.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Or at least, that is the plan. That's why it would be great if you could help testing! :-)</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Why key-stroke events too? Aren't they for typing text only?</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">1. Almost all keyboard shortcuts in current Squeak are based on key-stroke events.</span></div>
<div><span style="font-size:13.3333px">2. Using the #keyCharacter is tricky because SHIFT changes lower-case to upper-case, which makes "anEvent shiftPressed" hard to understand.</span></div>
<div><span style="font-size:13.3333px">3. CTRL combinations might not do the expected thing. How would you handle CTRL+C? The #keyCharacter could arrive as $c or Character enter. See the preference "Map non-printable characters to printable characters. Now,
 #key will always answer $C in such a case. Regardless of that preference.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Can't we just use #keyCharacter in key-down/up events?</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">No. Those are undefined. Never do that. key-down/up events carry virtual-key codes in their #keyValue. We might want to change #keyCharacter to answer "nil" for those events.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">***</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Q: What is a "physical key" or "physical modifier"?</span></div>
<div><span style="font-size:13.3333px">A: The label that can be presented to the user so that he or she feels at home when using Squeak. Thus, looks platform-<b>specific</b>.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Q: What is a "virtual key" or "virtual modifier"?</span></div>
<div><span style="font-size:13.3333px">A: The information to be processed in your application's key handlers. Thus, looks platform-<b>independent</b>. If you have still no clue how to talk to keyboard events, please read the commentary in KeyboardEvent >> #checkCommandKey.</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">***</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Happy testing! :-) And thank you all in advance!</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">Best,</span></div>
<div><span style="font-size:13.3333px">Marcel</span></div>
<div><span style="font-size:13.3333px"><br>
</span></div>
<div><span style="font-size:13.3333px">P.S.: You might want to disable the preference "synthesize mouse-wheel events from keyboard-events" to get CTRL+ArrowUp and CTRL+ArrowDown ;-)</span></div>
<div class="mb_sig"></div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</body>
</html>