[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