Hi Stephane and Jannik,
Well I don't hate the code (yet ;-) So perhaps I'll have a play with it a
bit more and see if I can get something that works well, and fits with
plans for Pharo3.0.

Cheers,
-Eric.


On 15 May 2013 21:16, jannik.laval <jannik.la...@gmail.com> wrote:

> 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.
>
>
>
>


-- 
Eric Clack
ericcl...@googlemail.com
East Sussex, England.

Reply via email to