Thank you Stef.

What I understand is that we should make Phratch works, modifying 
InputEventSensor.
Then we will modify Phratch when Pharo3.0 will be enough stable to port it.

Cheers,
Jannik

On May 15, 2013, at 9:15 PM, stephane ducasse <stephane.duca...@free.fr> wrote:

> 
> 
> I hate this code :)
> I remember that in the EventModel we had to store the previous event somehow 
> but this was one year ago.
> I should go back to the code one of these days.
> So for now I say make Phrath working we will check the kernel later.
> 
> Stef
> 
>> But as far as I can see, that "if key <space> pressed?" cannot be event 
>> driven, because we don't want to start execution at that block if the space 
>> key is pressed, rather we want that to evaluate to true if the space key has 
>> been pressed recently ("recently" seems a problematic term to use here but 
>> that's another issue!).
>> 
>> Here's the code I started throwing together to make this work -- see the bit 
>> following this line:
>>     type = EventTypeKeyboard
>> 
>> InputEventSensor>>processEvent: evt 
>>      "Process a single event. This method is run at high priority.
>>      
>>      The event record is:
>>      <type><timestamp><character code><updown><modifier keys>...
>>      where updown is:
>>        0 - keystroke
>>        1 - key down
>>        2 - key up
>>      
>>      NOTE: You must ensure that there is an instance variable keyPressed."
>>      
>>      | type updown |
>>              
>>      type := evt at: 1.
>> 
>>      "Treat menu events first"
>>      type = EventTypeMenu
>>              ifTrue: [
>>                      self processMenuEvent: evt.
>>                      ^nil].
>> 
>>      "Tackle mouse events first"
>>      type = EventTypeMouse
>>              ifTrue: [
>>                      "Transmogrify the button state according to the 
>> platform's button map definition"
>>                      evt at: 5 put: (ButtonDecodeTable at: (evt at: 5) + 1).
>>                      "Map the mouse buttons depending on modifiers"
>>                      evt at: 5 put: (self mapButtons: (evt at: 5) modifiers: 
>> (evt at: 6)).
>> 
>>                      "Update state for polling calls"
>>                      mousePosition := (evt at: 3) @ (evt at: 4).
>>                      modifiers := evt at: 6.
>>                      mouseButtons := evt at: 5.
>> 
>>                      ^evt].
>>      
>>      
>>      "Finally keyboard"
>>      type = EventTypeKeyboard
>>              ifTrue: [
>>                      "Update state for polling calls"
>>                      modifiers := evt at: 5.
>>                      updown := evt at: 4.
>>                      (updown = 2) ifTrue: [ 
>>                              keyPressed := nil
>>                      ] ifFalse: [  
>>                              keyPressed := evt at: 3 ].
>>                      ^evt].
>>                              
>>      "Handle all events other than Keyborad or Mouse."
>>      ^evt.
>>      
>> Then I use this:
>> 
>> InputEventSensor>>keyPressed: asciiValue
>>      "Is this key being pressed?"
>>      self nextEvent.
>>      ^keyPressed = asciiValue
>> 
>> So should I be doing this? Should I test out these changes and suggest a 
>> patch to Pharo? I'm happy that the answer might be "no", but what can I try 
>> instead?
>> 
>> Thanks for your help.
>> -Eric.
>> 
>> 
>> -- 
>> Eric Clack
>> ericcl...@googlemail.com
>> East Sussex, England.
> 

Reply via email to