On Jul 3, 2007, at 1:23 , Blake wrote:
On Mon, 02 Jul 2007 16:06:08 -0700, Bert Freudenberg bert@freudenbergs.de wrote:
Send #addKeyboardListener: with your morph as argument to the Hand. This way you get all keyboard events independent ot keyboard focus.
Well, that's what I thought. In the words of Randy Newman, maybe I'm doing it wrong. In my morph class I have:
initialize super initialize. xDir _ 0. yDir _ 0. ActiveHand addKeyboardListener: self; keyboardFocus: self.
which is the only reason it works at all. In my keydown method, I have:
keyDown: evt self halt. (evt keyCharacter = $W) ifTrue: [xDir _ 0. yDir _ -1]. (evt keyCharacter = $S) ifTrue: [xDir _ 0. yDir _ 1]. (evt keyCharacter = $D) ifTrue: [xDir _ 1. yDir _ 0]. (evt keyCharacter = $A) ifTrue: [xDir _ -1. yDir _ 0]. ^evt
I put in the halt just in case the code was wrong somehow, but if I click on any text window, messages stop going to keyDown for my morph.
Works for me (though you actually do not need the #keyboardFocus: send).
Note that in Morphic some parts only work with keyStroke events. And keyDown/Up events are pretty much neglected, you find almost no examples with them. Besides, up/down codes are platform dependent (on my Mac W,A,S,D gives keyValues 13, 0, 1, 2, but they will give these codes independent of the keyboard setting so you can be sure it refers to the same physical keys).
- Bert -