[squeak-dev] The Inbox: Morphic-dtl.1681.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Sep 16 02:29:46 UTC 2020


A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-dtl.1681.mcz

==================== Summary ====================

Name: Morphic-dtl.1681
Author: dtl
Time: 15 September 2020, 10:29:40.709583 pm
UUID: ee5dc42a-7d85-4c8b-b9e0-618eae3df221
Ancestors: Morphic-dtl.1680

Use Sensor eventTimeNow for synthesized event times.

=============== Diff against Morphic-dtl.1680 ===============

Item was changed:
  ----- Method: HandMorph>>generateDropFilesEvent: (in category 'private events') -----
  generateDropFilesEvent: evtBuf 
  	"Generate the appropriate mouse event for the given raw event buffer"
  
  	"Note: This is still in an experimental phase and will need more work"
  
  	| position buttons modifiers stamp numFiles dragType |
  	stamp := evtBuf second.
+ 	stamp = 0 ifTrue: [stamp := Sensor eventTimeNow].
- 	stamp = 0 ifTrue: [stamp := Time eventMillisecondClock].
  	dragType := evtBuf third.
  	position := evtBuf fourth @ evtBuf fifth.
  	buttons := 0.
  	modifiers := evtBuf sixth.
  	buttons := buttons bitOr: (modifiers bitShift: 3).
  	numFiles := evtBuf seventh.
  	dragType = 4 
  		ifTrue: 
  			["e.g., drop"
  
  			owner borderWidth: 0.
  			^DropFilesEvent new 
  				setPosition: position
  				contents: numFiles
  				hand: self].
  	"the others are currently not handled by morphs themselves"
  	dragType = 1 
  		ifTrue: 
  			["experimental drag enter"
  
  			owner
  				borderWidth: 4;
  				borderColor: owner color asColor negated].
  	dragType = 2 
  		ifTrue: 
  			["experimental drag move"
  
  			].
  	dragType = 3 
  		ifTrue: 
  			["experimental drag leave"
  
  			owner borderWidth: 0].
  	^nil!

Item was changed:
  ----- Method: HandMorph>>generateKeyboardEvent: (in category 'private events') -----
  generateKeyboardEvent: evtBuf
  	"Generate the appropriate mouse event for the given raw event buffer"
  
  	| buttons modifiers type pressType stamp keyValue |
  	stamp := evtBuf second.
+ 	stamp = 0 ifTrue: [stamp := Sensor eventTimeNow].
- 	stamp = 0 ifTrue: [stamp := Time eventMillisecondClock].
  	pressType := evtBuf fourth.
  	pressType = EventKeyDown ifTrue: [type := #keyDown].
  	pressType = EventKeyUp ifTrue: [type := #keyUp].
  	pressType = EventKeyChar ifTrue: [type := #keystroke].
  	modifiers := evtBuf fifth.
  	buttons := (modifiers bitShift: 3) bitOr: (lastMouseEvent buttons bitAnd: 7).
  	type = #keystroke
  		ifTrue: [keyValue := (self keyboardInterpreter nextCharFrom: Sensor firstEvt: evtBuf) asInteger]
  		ifFalse: [keyValue := evtBuf third].
  	^ KeyboardEvent new
  		setType: type
  		buttons: buttons
  		position: self position
  		keyValue: keyValue
  		hand: self
  		stamp: stamp.
  !

Item was changed:
  ----- Method: HandMorph>>generateMouseEvent: (in category 'private events') -----
  generateMouseEvent: evtBuf 
  	"Generate the appropriate mouse event for the given raw event buffer"
  
  	| position buttons modifiers type trail stamp oldButtons evtChanged |
  	evtBuf first = lastEventBuffer first 
  		ifTrue: 
  			["Workaround for Mac VM bug, *always* generating 3 events on clicks"
  
  			evtChanged := false.
  			3 to: evtBuf size
  				do: [:i | (lastEventBuffer at: i) = (evtBuf at: i) ifFalse: [evtChanged := true]].
  			evtChanged ifFalse: [^nil]].
  	stamp := evtBuf second.
+ 	stamp = 0 ifTrue: [stamp := Sensor eventTimeNow].
- 	stamp = 0 ifTrue: [stamp := Time eventMillisecondClock].
  	position := evtBuf third @ evtBuf fourth.
  	buttons := evtBuf fifth.
  	modifiers := evtBuf sixth.
  
  	type := buttons = 0 
  		ifTrue:[
  				lastEventBuffer fifth = 0 		
  					ifTrue: [#mouseMove] 	"this time no button and previously no button .. just mouse move"
  					ifFalse: [#mouseUp]		"this time no button but previously some button ... therefore button was released"
  		]
  		ifFalse:[
  				buttons = lastEventBuffer fifth
  						ifTrue: [#mouseMove]		"button states are the same .. now and past .. therfore a mouse movement"
  						ifFalse: [					"button states are different .. button was pressed or released"
  							buttons > lastEventBuffer fifth
  								ifTrue: [#mouseDown]
  								ifFalse:[#mouseUp].
  						].
  		].
  	buttons := buttons bitOr: (modifiers bitShift: 3).
  	oldButtons := lastEventBuffer fifth 
  				bitOr: (lastEventBuffer sixth bitShift: 3).
  	lastEventBuffer := evtBuf.
  	type == #mouseMove 
  		ifTrue: 
  			[trail := self mouseTrailFrom: evtBuf.
  			^MouseMoveEvent new 
  				setType: type
  				startPoint: (self position)
  				endPoint: trail last
  				trail: trail
  				buttons: buttons
  				hand: self
  				stamp: stamp].
  	^MouseButtonEvent new 
  		setType: type
  		position: position
  		which: (oldButtons bitXor: buttons)
  		buttons: buttons
  		nClicks: (evtBuf seventh ifNil: [0])
  		hand: self
  		stamp: stamp!

Item was changed:
  ----- Method: HandMorph>>generateMouseWheelEvent: (in category 'private events') -----
  generateMouseWheelEvent: evtBuf
  	"Generate the appropriate mouse wheel event for the given raw event buffer"
  
  	| buttons modifiers deltaX deltaY stamp nextEvent |
  	stamp := evtBuf second.
+ 	stamp = 0 ifTrue: [stamp := Sensor eventTimeNow].
- 	stamp = 0 ifTrue: [stamp := Time eventMillisecondClock].
  	deltaX := evtBuf third.
  	deltaY := evtBuf fourth.
  	buttons := evtBuf fifth.
  	modifiers := evtBuf sixth.
  	[(deltaX abs + deltaY abs < self class minimumWheelDelta)
  			and: [(nextEvent := Sensor peekEvent) notNil
  			and: [nextEvent first = evtBuf first
  			and: [nextEvent fifth = evtBuf fifth 
  			and: [nextEvent sixth = evtBuf sixth]
  			and: [nextEvent third isZero = evtBuf third isZero "both horizontal or vertical"]]]]]
  		whileTrue:
  			["nextEvent is similar.  Remove it from the queue, and check the next."
  			nextEvent := Sensor nextEvent.
  			deltaX := deltaX + nextEvent third.
  			deltaY := deltaY + nextEvent fourth].
  	^ MouseWheelEvent new
  		setType: #mouseWheel
  		position: self position
  		delta: deltaX at deltaY
  		buttons: buttons	
  		hand: self
  		stamp: stamp!

Item was changed:
  ----- Method: HandMorph>>generateWindowEvent: (in category 'private events') -----
  generateWindowEvent: evtBuf 
  	"Generate the appropriate window event for the given raw event buffer"
  
  	| evt |
  	evt := WindowEvent new.
  	evt setTimeStamp: evtBuf second.
+ 	evt timeStamp = 0 ifTrue: [evt setTimeStamp: Sensor eventTimeNow].
- 	evt timeStamp = 0 ifTrue: [evt setTimeStamp: Time eventMillisecondClock].
  	evt action: evtBuf third.
  	evt rectangle: (Rectangle origin: evtBuf fourth @ evtBuf fifth corner: evtBuf sixth @ evtBuf seventh ).
  	
  	^evt!

Item was changed:
  ----- Method: MorphicEvent>>timeStamp (in category 'accessing') -----
  timeStamp
  	"Return the millisecond clock value at which the event was generated"
+ 	^timeStamp ifNil:[timeStamp := Sensor eventTimeNow]!
- 	^timeStamp ifNil:[timeStamp := Time eventMillisecondClock]!



More information about the Squeak-dev mailing list