[Vm-dev] VM Maker: VMMakerUI-eem.27.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Jul 26 19:47:40 UTC 2020
Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker:
http://source.squeak.org/VMMaker/VMMakerUI-eem.27.mcz
==================== Summary ====================
Name: VMMakerUI-eem.27
Author: eem
Time: 26 July 2020, 12:47:38.901108 pm
UUID: ac8c4a65-9aef-4923-a182-41cee05503b1
Ancestors: VMMakerUI-eem.26
Fix several bugs in SimulatorEventTransformer. The UI is now "usable", i.e. I managed to bring up the About dialog. Now I at least have a chance of debugging the corrupted fixed pitch font output bug observed in the System reporter.
=============== Diff against VMMakerUI-eem.26 ===============
Item was changed:
----- Method: CogVMSimulator>>handleListenEvent: (in category '*VMMakerUI-I/O primitive support') -----
handleListenEvent: aMorphicEvent
"openAsMorph[NoTranscript] registered me for listen events via HandMorph>>addEventListener.
Transform the listen event and add it to my event queue. ALso check if the displayForm should resize."
(displayForm ~~ fakeForm and: [displayForm extent ~= displayView extent]) ifTrue:
[| newForm |
newForm := Form
extent: displayView extent
depth: displayForm depth.
displayForm displayOn: newForm.
displayForm := newForm.
displayView image: displayForm].
((aMorphicEvent isMouse or: [aMorphicEvent isKeyboard])
and: [displayView bounds containsPoint: aMorphicEvent position]) ifTrue:
+ [[eventTransformer degenerateEvent: aMorphicEvent for: self]
+ on: Error
+ do: [:ex|
+ displayView activeHand removeEventListener: self.
+ ex pass]]!
- [eventTransformer degenerateEvent: aMorphicEvent for: self]!
Item was changed:
Object subclass: #SimulatorEventTransformer
+ instanceVariableNames: 'buttons modifiers lastMouseMoveEvent'
- instanceVariableNames: 'buttons modifiers'
classVariableNames: 'Default'
poolDictionaries: 'EventSensorConstants'
category: 'VMMakerUI-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>>degenerateKeyboardEvent:for: (in category 'event transformation') -----
degenerateKeyboardEvent: aMorphicEvent for: aClient
"Convert the keyboard event into a low-level event for the VM simulator (aClient).
See HandMorph>>generateKeyboardEvent and EventSensor class comment"
aClient queueForwardedEvent:
+ { EventTypeKeyboard.
+ aClient ioUTCMicroseconds // 1000.
+ aMorphicEvent keyValue. "<--this is wrong. See nextCharFrom:firstEvt: for what needs to be undone. hooo boy"
- { 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] }.
modifiers.
aMorphicEvent keyValue.
0.
self windowIndex }!
Item was changed:
----- Method: SimulatorEventTransformer>>degenerateMouseEvent:for: (in category 'event transformation') -----
degenerateMouseEvent: aMorphicEvent for: aClient
"Convert the mouse event into low-level events for the VM simulator (aClient). Filter-out mouse moves,
and generate a fake mouse move before each button press.
See HandMorph>>generateMouseEvent"
| translated |
- translated := aMorphicEvent position - aClient displayView bounds origin.
modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..."
+ "filter-out mouse moves unless buttons are pressed, so simulation doesn't get window leave events when we leave its window"
+ aMorphicEvent type == #mouseMove ifTrue:
+ [(aClient displayView bounds containsPoint: aMorphicEvent position) ifFalse:
+ [^self].
+ "If buttons (which includes modifiers) change, or are pressed, communicate the event, otherwise (at least potentially) filter it out."
+ (aMorphicEvent buttons = 0
+ and: [lastMouseMoveEvent notNil
+ and: [lastMouseMoveEvent buttons = 0]]) ifTrue:
+ [lastMouseMoveEvent := aMorphicEvent copy.
+ lastMouseMoveEvent timeStamp: (aClient ioUTCMicroseconds // 1000).
+ lastMouseMoveEvent position: lastMouseMoveEvent position - aClient displayView bounds origin.
+ ^self]].
+ lastMouseMoveEvent ifNotNil:
+ [aClient queueForwardedEvent:
+ { EventTypeMouse.
+ lastMouseMoveEvent timeStamp.
+ lastMouseMoveEvent position x.
+ lastMouseMoveEvent position y.
+ lastMouseMoveEvent buttons bitAnd: 7.
+ lastMouseMoveEvent buttons >> 3.
+ 0.
+ self windowIndex }.
+ lastMouseMoveEvent := nil].
+ buttons := aMorphicEvent buttons.
+ translated := aMorphicEvent position - aClient displayView bounds origin.
- aMorphicEvent type == #mouseMove
- ifTrue: "filter-out mouse moves unless buttons are pressed, so simulation doesn't get window leave events when we leave its window"
- [buttons = 0 ifTrue: [^nil]]
- ifFalse:"If the buttons are going down, make sure to add a mouse move event to the current position before the buttons are pressed."
- [((buttons bitAnd: 7) = 0 and: [(aMorphicEvent buttons bitAnd: 7) ~= 0]) ifTrue:
- [aClient queueForwardedEvent:
- { 1.
- aMorphicEvent timeStamp.
- translated x.
- translated y.
- 0.
- buttons >> 3. "Thanks dtl"
- 0.
- self windowIndex }].
- buttons := aMorphicEvent buttons].
aClient queueForwardedEvent:
+ { EventTypeMouse.
+ aClient ioUTCMicroseconds // 1000.
- { 1.
- aMorphicEvent timeStamp.
translated x.
translated y.
+ buttons bitAnd: 7. "thanks Ron T."
+ buttons >> 3. "Thanks dtl"
- buttons bitAnd: 7. "thanks Ron T."
- buttons >> 3. "Thanks dtl"
0.
self windowIndex }!
Item was changed:
----- Method: StackInterpreterSimulator>>handleListenEvent: (in category '*VMMakerUI-I/O primitive support') -----
handleListenEvent: aMorphicEvent
"openAsMorph[NoTranscript] registered me for listen events via HandMorph>>addEventListener.
Transform the listen event and add it to my event queue. ALso check if the displayForm should resize."
(displayForm ~~ fakeForm and: [displayForm extent ~= displayView extent]) ifTrue:
[| newForm |
newForm := Form
extent: displayView extent
depth: displayForm depth.
displayForm displayOn: newForm.
displayForm := newForm.
displayView image: displayForm].
((aMorphicEvent isMouse or: [aMorphicEvent isKeyboard])
and: [displayView bounds containsPoint: aMorphicEvent position]) ifTrue:
+ [[eventTransformer degenerateEvent: aMorphicEvent for: self]
+ on: Error
+ do: [:ex|
+ displayView activeHand removeEventListener: self.
+ ex pass]]!
- [eventTransformer degenerateEvent: aMorphicEvent for: self]!
More information about the Vm-dev
mailing list