[Vm-dev] VM Maker: VMMaker.oscog-eem.1419.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Jul 15 07:05:33 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1419.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1419
Author: eem
Time: 15 July 2015, 12:03:32.999 am
UUID: 40db9abe-8bac-4b73-8cfa-a8773c2f1db0
Ancestors: VMMaker.oscog-eem.1418
Reduce the simulator's event handling to just keyboard and mouse events. Filter-out mouse moves unless buttons are pressed so that the simulator doesn't get endless window leave events as one interacts with the simulator's window.
=============== Diff against VMMaker.oscog-eem.1418 ===============
Item was added:
+ ----- Method: CogVMSimulator>>handleListenEvent: (in category 'I/O primitives support') -----
+ handleListenEvent: aMorphicEvent
+ "openAsMorph regsitered me for listen events via HandMorph>>addEventListener.
+ Transform the listen event and add it to my event queue."
+ (aMorphicEvent isMouse or: [aMorphicEvent isKeyboard]) ifFalse:
+ [^self].
+ (SimulatorEventTransformer default degenerateEvent: aMorphicEvent) ifNotNil:
+ [:evtBuf|
+ (evtBuf first = SimulatorEventTransformer eventTypeMouse
+ and: [displayView bounds containsPoint: aMorphicEvent position]) ifTrue:
+ [| xtranslated ytranslated |
+ xtranslated := (evtBuf at:3) - displayView bounds left - 2. "<--heh"
+ ytranslated := (evtBuf at:4) - displayView bounds top.
+ evtBuf at: 3 put: xtranslated.
+ evtBuf at: 4 put: ytranslated].
+ evtBuf at: 8 put: 1. "windowIndex"
+ self queueForwardedEvent: evtBuf]!
Item was added:
+ ----- Method: CogVMSimulator>>queueForwardedEvent: (in category 'I/O primitives support') -----
+ queueForwardedEvent: event
+ eventQueue ifNil:
+ [eventQueue := SharedQueue new].
+ eventQueue nextPut: event!
Item was changed:
Object subclass: #SimulatorEventTransformer
+ instanceVariableNames: 'buttons'
- instanceVariableNames: ''
classVariableNames: 'Default'
poolDictionaries: 'EventSensorConstants'
category: 'VMMaker-InterpreterSimulation-Morphic'!
!SimulatorEventTransformer commentStamp: 'eem 7/14/2015 17:05' prior: 0!
A SimulatorEventTransformer takes events as wrapped by HandMorph and converts them to a form a StackInterpreterSimulator can deal with.
See HandMorph >> handleEvent to see what the wrapping entails.
See HandMorph >> ProcessEvents or EventSensor >> fetchMoreEvents for examples of what an unwrapped event looks like when given to the system for pre-wrapping.
Instance Variables
!
Item was changed:
----- Method: SimulatorEventTransformer>>degenerateEvent: (in category 'event transformation') -----
degenerateEvent: aMorphicEvent
"tty. Bert had mentioned a distinction between events and polling events and that Morphic could handle both.
+ I don't know what he is talking about."
+ aMorphicEvent isMouse ifTrue:
+ [^self degenerateMouseEvent: aMorphicEvent].
+ aMorphicEvent isKeyboard ifTrue:
+ [^self degenerateKeyboardEvent: aMorphicEvent].
- I don't know what he is talking about."
- | evt type |
- self flag:'tty'.
-
- evt := nil.
- type := aMorphicEvent type.
- " Transcript show:type;cr."
- (('mouse' charactersExactlyMatching: type asString) > 4) "mous"
- ifTrue: [^self degenerateMouseEvent: aMorphicEvent].
- (('key' charactersExactlyMatching: type asString) > 2) "key"
- ifTrue: [^self degenerateKeyboardEvent: aMorphicEvent].
" type = EventTypeDragDropFiles ifTrue: [evt := self generateDropFilesEvent: evtBuf].
type = EventTypeWindow ifTrue:[evt := self generateWindowEvent: evtBuf]."
+ ^nil!
- ^ #(0 0 0 0 0 0 0 0).!
Item was changed:
----- Method: SimulatorEventTransformer>>degenerateKeyboardEvent: (in category 'event transformation') -----
degenerateKeyboardEvent: aMorphicEvent
- | evt |
"see HandMorph>>generateKeyboardEvent and EventSensor class comment"
+ ^{ 2.
+ aMorphicEvent timeStamp.
+ aMorphicEvent keyValue. "<--this is wrong. See Sensor FirstEvt: for what needs to happen. hooo boy"
+ aMorphicEvent type caseOf: {
+ [#keyDown] -> [EventKeyDown].
+ [#keyUp] -> [EventKeyUp].
+ [#keystroke] -> [EventKeyChar] }.
+ aMorphicEvent buttons bitAnd: 7.
+ aMorphicEvent keyValue.
+ 0.
+ 0 }!
- evt := {2 . 0 . 0 . 0 . 0. 0 . 0 . 0}.
-
- evt at:2 put: aMorphicEvent timeStamp.
- evt at:3 put: aMorphicEvent keyValue. "<--this is wrong. See Sensor FirstEvt: for what needs to happen. hooo boy"
- evt at:4 put: aMorphicEvent position y.
- evt at:5 put: (aMorphicEvent buttons bitAnd: 7). "thanks Ron T."
- evt at:6 put: (aMorphicEvent buttons >> 3). "Thanks dtl"
- ^evt
-
-
- !
Item was removed:
- ----- Method: SimulatorEventTransformer>>degenerateMouseButtonEvent: (in category 'event transformation') -----
- degenerateMouseButtonEvent: aMorphicEvent
- | evt |
- "see HandMorph>>generateMouseEvent"
- evt := {1 . 0 . 0 . 0 . 0. 0 . 0 . 0}.
-
- evt at:2 put: aMorphicEvent timeStamp.
- evt at:3 put: aMorphicEvent position x.
- evt at:4 put: aMorphicEvent position y.
- evt at:5 put: (aMorphicEvent buttons bitAnd: 7). "thanks Ron T."
- evt at:6 put: (aMorphicEvent buttons >> 3). "Thanks dtl"
- ^evt
-
-
- !
Item was changed:
----- Method: SimulatorEventTransformer>>degenerateMouseEvent: (in category 'event transformation') -----
degenerateMouseEvent: aMorphicEvent
"see HandMorph>>generateMouseEvent"
+ aMorphicEvent type == #mouseMove
+ ifTrue: [buttons = 0 ifTrue: [^nil]] "filter-out mouse moves unless buttons are pressed, so simulation doersn't get window leave events when we leave its window"
+ ifFalse: [buttons := aMorphicEvent buttons].
+ ^{ 1.
+ aMorphicEvent timeStamp.
+ aMorphicEvent position x.
+ aMorphicEvent position y.
+ buttons bitAnd: 7. "thanks Ron T."
+ buttons >> 3. "Thanks dtl"
+ 0.
+ 0 }!
- (aMorphicEvent type) = #mouseMove
- ifTrue:[^self degenerateMouseMoveEvent: aMorphicEvent].
-
- ((aMorphicEvent type) = #mouseUp) | ((aMorphicEvent type) = #mouseDown)
- ifTrue:[^self degenerateMouseButtonEvent: aMorphicEvent].
- " (aMorphicEvent type) = #mouseDrag
- ifTrue:[evt := self degenerateMouseDragEvent: aMorphicEvent].
- "
- ^{0 . 0. 0. 0. 0. 0. 0. 0}.!
Item was removed:
- ----- Method: SimulatorEventTransformer>>degenerateMouseMoveEvent: (in category 'event transformation') -----
- degenerateMouseMoveEvent: aMorphicEvent
- | evt |
- "see HandMorph>>generateMouseEvent"
- evt := {1 . 0 . 0 . 0 . 0. 0 . 0 . 0}.
-
- evt at:2 put: aMorphicEvent timeStamp.
- evt at:3 put: aMorphicEvent position x.
- evt at:4 put: aMorphicEvent position y.
- evt at:5 put: (aMorphicEvent buttons bitAnd: 7). "thanks Ron T."
- evt at:6 put: (aMorphicEvent buttons >> 3). "Thanks dtl"
- ^evt
-
-
- !
Item was added:
+ ----- Method: SimulatorEventTransformer>>initialize (in category 'initialize-release') -----
+ initialize
+ buttons := 0!
Item was changed:
----- Method: SimulatorMorphicModel>>handleListenEvent: (in category 'event-forwarding') -----
handleListenEvent: aMorphicEvent
"The SimulatorImageMorph regsitered me (a SimulatorMorphicModel ) with HandMorph>>addEventListener
HandMorph then broadcasts events to all registered listeners at this method. See HandMorph>>sendListenPrimitiveEvent
"
- | evtBuf xtranslated ytranslated |
morph ifNotNil:
+ [(SimulatorEventTransformer default degenerateEvent: aMorphicEvent) ifNotNil:
+ [:evtBuf|
+ ((evtBuf at: 1) = EventTypeMouse and: [morph bounds containsPoint: aMorphicEvent position]) ifTrue:
+ [| xtranslated ytranslated |
+ xtranslated := (evtBuf at:3) - (morph bounds left) - 2 . "<--heh"
+ ytranslated := (evtBuf at:4) - (morph bounds top).
+ evtBuf at: 3 put: xtranslated.
+ evtBuf at: 4 put: ytranslated].
- [evtBuf := SimulatorEventTransformer default degenerateEvent: aMorphicEvent.
- ((evtBuf at: 1) = EventTypeMouse and: [morph bounds containsPoint: aMorphicEvent position]) ifTrue:
- [xtranslated := (evtBuf at:3) - (morph bounds left) - 2 . "<--heh"
- ytranslated := (evtBuf at:4) - (morph bounds top).
- evtBuf at: 3 put: xtranslated.
- evtBuf at: 4 put: ytranslated.
vm queueForwardedEvent: evtBuf]]!
Item was changed:
----- Method: StackInterpreterSimulator>>handleListenEvent: (in category 'I/O primitives support') -----
handleListenEvent: aMorphicEvent
"openAsMorph regsitered me for listen events via HandMorph>>addEventListener.
Transform the listen event and add it to my event queue."
+ (aMorphicEvent isMouse or: [aMorphicEvent isKeyboard]) ifFalse:
+ [^self].
+ (SimulatorEventTransformer default degenerateEvent: aMorphicEvent) ifNotNil:
+ [:evtBuf|
+ (evtBuf first = SimulatorEventTransformer eventTypeMouse
+ and: [displayView bounds containsPoint: aMorphicEvent position]) ifTrue:
+ [| xtranslated ytranslated |
+ xtranslated := (evtBuf at:3) - displayView bounds left - 2. "<--heh"
+ ytranslated := (evtBuf at:4) - displayView bounds top.
+ evtBuf at: 3 put: xtranslated.
+ evtBuf at: 4 put: ytranslated].
+ evtBuf at: 8 put: 1. "windowIndex"
+ self queueForwardedEvent: evtBuf]!
- | evtBuf xtranslated ytranslated |
- evtBuf := SimulatorEventTransformer default degenerateEvent: aMorphicEvent.
- (evtBuf first = SimulatorEventTransformer eventTypeMouse
- and: [displayView bounds containsPoint: aMorphicEvent position]) ifTrue:
- [xtranslated := (evtBuf at:3) - displayView bounds left - 2. "<--heh"
- ytranslated := (evtBuf at:4) - displayView bounds top.
- evtBuf at: 3 put: xtranslated.
- evtBuf at: 4 put: ytranslated].
- self queueForwardedEvent: evtBuf!
More information about the Vm-dev
mailing list