[squeak-dev] How do I create a "synthetic" keyboard event?
Eduardo Ochs
eduardoochs at gmail.com
Sun Feb 19 03:42:58 UTC 2023
Hi list,
this is a follow-up to these two messages:
http://lists.squeakfoundation.org/pipermail/squeak-dev/2023-February/223407.html
http://lists.squeakfoundation.org/pipermail/squeak-dev/2023-February/223408.html
The first one was a question that I asked, and the second was an
answer by Marcel Taeumel. I was able to decypher almost all his
pointers - but not yet this one:
HandMorph >> #generateKeyboardEvent:
I am using this code:
a := Array with: 50 at 100 with: 200 at 300 with: 100 at 400.
b := (PolygonMorph
vertices: a color: Color red
borderWidth: 1 borderColor: Color black).
World addMorph: b.
b beSmoothCurve.
b beStraightSegments.
b vertices.
b vertices at: 1.
b vertices at: 1 put: 40 at 100.
b vertices at: 1 put: 50 at 100.
b vertices at: 1 put: 40 at 100. b computeBounds.
b vertices at: 1 put: 50 at 100. b computeBounds.
b color.
b color: Color banana.
b color: Color red.
e := EventHandler new.
b eventHandler.
b eventHandler: nil.
b eventHandler: e.
bl := [ :a :b | { a . b }].
bl := [ :a :b | Transcript show: { a . b }; cr. ].
bl numArgs.
bl value: 2 value: 3.
bl perform: #value:value: with: 2 with: 3.
bl := [ :evt :sm | Transcript show: { evt . sm }; cr. ].
bl := [ :evt :sm | Transcript show: { evt keyValue . sm }; cr. ].
bl := [ :evt :sm | self halt. ].
e on: #keyStroke send: #value:value: to: bl.
b currentHand newKeyboardFocus: b.
It is meant to be used in a workspace. By selecting the right parts of
it and running them with "do it"s or "print it"s in the right order I
can create a PolygonMorph, some EventHandlers, and some blocks, and
then I can make the PolygonMorph react to keyboard events in different
ways. The last line switches the keyboardFocus to my PolygonMorph, and
then I can send several keystroke events to my PolygonMorph, and
inspect their events either on the transcript or on the debugger.
Question: suppose that evt is an event whose printed representation is
this one:
[79 at 273 keystroke ' ' (32) 956759]
I know that this means that:
evt position -> 79 at 273
evt type -> #keystroke
evt keyValue -> 32
evt keyCode -> 32
evt source -> self currentHand
evt timeStamp -> 956759
How do I write code that creates an event like that? I would like to
create, ahem, "synthetic keystrokes", and experiment with sending them
to certain morphs...
Thanks in advance!
Eduardo Ochs
http://anggtwu.net/eev-squeak.html
More information about the Squeak-dev
mailing list
|