[squeak-dev] Re: Event filters for user input events (i.e. mouse
clicks etc.)
marcel.taeumel
Marcel.Taeumel at hpi.de
Fri May 20 19:33:40 UTC 2016
Tony Garnock-Jones-3 wrote
> On 2016-05-20 9:19 AM, marcel.taeumel wrote:
>> Then you can do things like "if you type a y, make a z out of it and vice
>> versa": [...]
>
> Would it be possible to have "if you type y, pretend you typed abcde"?
>
> That is, instead of having the filter yield zero or one events (for
> refiltering??), could it yield zero or more events?
>
> Tony
Hi Tony,
yes, I think so. You event create code is kind of awkward but I would work
like this:
...
[:event :target |
...
event hand
handleEvent: ((KeyboardEvent newFrom: event) stroke: $a);
handleEvent: ((KeyboardEvent newFrom: event) stroke: $b);
handleEvent: ((KeyboardEvent newFrom: event) stroke: $c);
handleEvent: ((KeyboardEvent newFrom: event) stroke: $d);
handleEvent: ((KeyboardEvent newFrom: event) stroke: $e).
event wasIgnored: true.
event].
Note that this API "(KeyboardEvent newFrom: event) stroke: $a" does not
exist at the moment. It is not that convenient to generate new events but
"event hand handleEvent: ..." should work. I have not tried this yet,
however, the event dispatching and handling code should be reentrant.
I think that I should separate upstream and downstream event filters. When
calling "ActiveHand addEventFilter: ..." it is only downstream because this
is where event processing starts. When calling "someMorphInTheWorld
addEventFilter: ..." this is rather upstream because it starts at Morph >>
#handleEvent:. Hmm... downstream event filters for any morph would be
possible in Morph >> #processEvent:using:.
Still ... I am struggling with the concept of keyboard focus and mouse
focus. There, you directly call Morph >> #handleFocusEvent:, which calls
Morph >> #handleEvent:. No bubbling up, no bubbling down. If focused morphs
want to bubble down, they have to call Morph >> #processEvent: and watch for
the #rejected pattern. See UserDialogBoxMorph >> #handleFocusEvent: for an
example. I now that this is a performance thing. If you type in a text
field, you do not want to bubble all the way down from the world. Again and
again. And again.
Best,
Marcel
--
View this message in context: http://forum.world.st/Event-filters-for-user-input-events-i-e-mouse-clicks-etc-tp4895521p4896440.html
Sent from the Squeak - Dev mailing list archive at Nabble.com.
More information about the Squeak-dev
mailing list
|