Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.2053.mcz
==================== Summary ====================
Name: Morphic-mt.2053 Author: mt Time: 21 November 2022, 11:26:08.284072 am UUID: e5103676-4f14-f245-8dee-e81e3f692664 Ancestors: Morphic-ct.2052
More commentary for mouse and keyboard events.
=============== Diff against Morphic-ct.2052 ===============
Item was changed: ----- Method: Morph>>handleKeyDown: (in category 'events-processing') ----- handleKeyDown: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesKeyboard: and #keyDown: in your custom morphs." + - "System level event handling." anEvent wasHandled ifTrue: [^ self]. (self handlesKeyboard: anEvent) ifFalse: [^ self]. (anEvent hand keyboardFocus ~~ self and: [self handlesKeyboardOnlyOnFocus]) ifTrue: [^ self]. anEvent wasHandled: true. ^ self keyDown: anEvent!
Item was changed: ----- Method: Morph>>handleKeyUp: (in category 'events-processing') ----- handleKeyUp: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesKeyboard: and #keyUp: in your custom morphs." + - "System level event handling." anEvent wasHandled ifTrue: [^ self]. (self handlesKeyboard: anEvent) ifFalse: [^ self]. (anEvent hand keyboardFocus ~~ self and: [self handlesKeyboardOnlyOnFocus]) ifTrue: [^ self]. anEvent wasHandled: true. ^ self keyUp: anEvent!
Item was changed: ----- Method: Morph>>handleKeystroke: (in category 'events-processing') ----- handleKeystroke: anEvent + "System level event handling. Supports automatically grabbing the keyboard focus via keyboard focus delegate; see #newKeyboardFocus:. - "System level event handling. Has support for automatically grabbing the keyboard focus considering the keyboard focus delegate. See #newKeyboardFocus:" + AVOID OVERRIDE if possible. Instead, please use #handlesKeyboard: and #keyStroke: in your custom morphs." + | handler | anEvent wasHandled ifTrue: [^ self]. (self handlesKeyboard: anEvent) ifFalse: [^ self]. (anEvent hand keyboardFocus ~~ self and: [self handlesKeyboardOnlyOnFocus]) ifTrue: [^ self]. handler := self wantsKeyboardFocus ifFalse: [self] ifTrue: [(anEvent hand newKeyboardFocus: self) ifNil: [self]]. anEvent handler: handler. anEvent wasHandled: true. ^ handler keyStroke: anEvent!
Item was changed: ----- Method: Morph>>handleMouseDown: (in category 'events-processing') ----- handleMouseDown: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesMouseDown: and #mouseDown: in your custom morphs. See #handlerForMouseDown: and #mouseDownPriority." + - "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" anEvent hand removePendingBalloonFor: self. anEvent hand removePendingHaloFor: self. anEvent wasHandled: true.
"Make me modal during mouse transitions" anEvent hand newMouseFocus: self event: anEvent. "this mouse down could be the start of a gesture, or the end of a gesture focus" (self isGestureStart: anEvent) ifTrue: [^ self gestureStart: anEvent].
self mouseDown: anEvent.
(self handlesMouseStillDown: anEvent) ifTrue:[ self startStepping: #handleMouseStillDown: at: Time millisecondClockValue + self mouseStillDownThreshold arguments: {anEvent copy resetHandlerFields} stepTime: self mouseStillDownStepRate ]. !
Item was changed: ----- Method: Morph>>handleMouseEnter: (in category 'events-processing') ----- handleMouseEnter: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesMouseOver: and #mouseEnter: in your custom morphs. Also see/use #handlesMouseOverDragging: and #mouseEnterDragging:." + - "System level event handling." (anEvent isDraggingEvent) ifTrue:[ (self handlesMouseOverDragging: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseEnterDragging: anEvent]. ^self]. self wantsHalo "If receiver wants halo and balloon, trigger balloon after halo" ifTrue:[anEvent hand triggerHaloFor: self after: self haloDelayTime] ifFalse:[self wantsBalloon ifTrue:[anEvent hand triggerBalloonFor: self after: self balloonHelpDelayTime]]. (self handlesMouseOver: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseEnter: anEvent. ].!
Item was changed: ----- Method: Morph>>handleMouseLeave: (in category 'events-processing') ----- handleMouseLeave: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesMouseOver: and #mouseLeave: in your custom morphs. Also see/use #handlesMouseOverDragging: and #mouseLeaveDragging:." + - "System level event handling." anEvent hand removePendingBalloonFor: self. anEvent hand removePendingHaloFor: self. anEvent isDraggingEvent ifTrue:[ (self handlesMouseOverDragging: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseLeaveDragging: anEvent]. ^self]. (self handlesMouseOver: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseLeave: anEvent. ]. !
Item was changed: ----- Method: Morph>>handleMouseMove: (in category 'events-processing') ----- handleMouseMove: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesMouseMove: and #mouseMove: in your custom morphs. Also see/use #wantsEveryMouseMove." + - "System level event handling." anEvent wasHandled ifTrue: [ ^ self ]. "not interested" (self handlesMouseMove: anEvent) ifFalse: [ ^ self ]. anEvent wasHandled: true. self mouseMove: anEvent. (self handlesMouseStillDown: anEvent) ifTrue: [ "Step at the new location" self startStepping: #handleMouseStillDown: at: Time millisecondClockValue arguments: {anEvent copy resetHandlerFields} stepTime: self mouseStillDownStepRate ]!
Item was changed: ----- Method: Morph>>handleMouseOver: (in category 'events-processing') ----- handleMouseOver: anEvent + "System level event handling. DO NOT OVERRIDE. See #handleMouseMove:, #handleMouseEnter:, #handleMouseLeave:." + - "System level event handling." anEvent hand mouseFocus == self ifTrue:[ "Got this directly through #handleFocusEvent: so check explicitly" (self containsPoint: anEvent position event: anEvent) ifFalse:[^self]]. anEvent hand noticeMouseOver: self event: anEvent!
Item was changed: ----- Method: Morph>>handleMouseUp: (in category 'events-processing') ----- handleMouseUp: anEvent + "System level event handling. Complements #handleMouseDown: (and #mouseDown:). AVOID OVERRIDE if possible. Instead, please use #handlesMouseDown: and #mouseUp: in your custom morphs. See #handlerForMouseDown: and #mouseDownPriority." + - "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" anEvent hand mouseFocus == self ifFalse:[^self]. "Not interested in other parties" anEvent hand releaseMouseFocus: self. anEvent wasHandled: true. self mouseUp: anEvent. self stopSteppingSelector: #handleMouseStillDown:.!
Item was changed: ----- Method: Morph>>handleMouseWheel: (in category 'events-processing') ----- handleMouseWheel: anEvent + "System level event handling. AVOID OVERRIDE if possible. Instead, please use #handlesMouseWheel: and #mouseWheel: in your custom morphs." - "System level event handling."
anEvent wasHandled ifTrue: [^self]. (self handlesMouseWheel: anEvent) ifFalse: [^ self]. anEvent wasHandled: true. ^ self mouseWheel: anEvent!
Item was changed: ----- Method: Morph>>keyDown: (in category 'event handling') ----- keyDown: anEvent + "Handle a key down event. The default response is to let my eventHandler, if any, handle it. Ask anEvent for #key to work with a cross-platform representation of virtual-key presses. DO NOT access #keyValue or #keyCharacter as those are for #keyStroke: only. + + For #virtualModifiers, ask for #shiftPressed, #controlKeyPressed, #optionKeyPressed, or #commandKeyPressed. Note that if you want to SHOW platform-specific information about modifiers (e.g., ALT on Windows), see #physicalModifiers. For control-flow expressions (e.g., #ifTrue:), only use #virtualModifiers to remain cross-platform compatible." - "Handle a key down event. The default response is to let my eventHandler, if any, handle it."
self eventHandler ifNotNil: [self eventHandler keyDown: anEvent fromMorph: self]. !
Item was changed: ----- Method: Morph>>keyStroke: (in category 'event handling') ----- keyStroke: anEvent + "Handle a keystroke event. The default response is to let my eventHandler, if any, handle it. Ask anEvent for #keyCharacter to work with the (Unicode) character the user entered. See class comment in Character. + + Please implement keyboard shortcuts via #keyDown: instead. Here, as in #keyDown: and #keyUp, you may ask anEvent for #key but should do that in #keyDown: or #keyUp: if possible. + + Please AVOID checking #modifiers (or #virtualModifiers) in combination with #keyCharacter as, for example, #shiftPressed has an effect on #keyCharacter as well. This is not the case for #key (or #virtualKey)." - "Handle a keystroke event. The default response is to let my eventHandler, if any, handle it."
self eventHandler ifNotNil: [self eventHandler keyStroke: anEvent fromMorph: self]. !
Item was changed: ----- Method: Morph>>keyUp: (in category 'event handling') ----- keyUp: anEvent + "Handle a key up event. The default response is to let my eventHandler, if any, handle it. Ask anEvent for #key to work with a cross-platform representation of virtual-key releases. DO NOT access #keyValue or #keyCharacter as those are for #keyStroke: only. + + For #virtualModifiers, ask for #shiftPressed, #controlKeyPressed, #optionKeyPressed, or #commandKeyPressed. Note that if you want to SHOW platform-specific information about modifiers (e.g., ALT on Windows), see #physicalModifiers. For control-flow expressions (e.g., #ifTrue:), only use #virtualModifiers to remain cross-platform compatible." - "Handle a key up event. The default response is to let my eventHandler, if any, handle it."
self eventHandler ifNotNil: [self eventHandler keyUp: anEvent fromMorph: self]. !
squeak-dev@lists.squeakfoundation.org