Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1443.mcz
==================== Summary ====================
Name: Morphic-cmm.1443 Author: cmm Time: 30 May 2018, 4:50:16.716113 pm UUID: 2f269941-1afa-4615-9242-9e485ecd986e Ancestors: Morphic-mt.1442
- When updating a borderStyle:, only signal changes if the receiver is in the world for them to be seen. This fixes: NCAAConnectorMorph new - When halo's are on a background Morph, and a foreground morph covering it is blue-clicked, transfer the halos to the clicked morph. - Disable the new #balanceOffsets when Smart Splitters is enabled, unfortunately they currently don't play nicely together.
=============== Diff against Morphic-mt.1442 ===============
Item was changed: ----- Method: Morph>>borderStyle: (in category 'accessing') ----- borderStyle: aBorderStyle - aBorderStyle = self borderStyle ifTrue: [^ self]. - "If we cannot draw the new border, accept at least its color and width." ((self canDrawBorder: aBorderStyle) or: [aBorderStyle isNil]) ifTrue: [self setProperty: #borderStyle toValue: aBorderStyle] ifFalse: [ self borderStyle width: aBorderStyle width; baseColor: aBorderStyle baseColor]. - self borderStyle trackColorFrom: self. + self isInWorld ifTrue: + [ self + layoutChanged; + changed ]! - - self - layoutChanged; - changed.!
Item was changed: ----- Method: PasteUpMorph>>tryInvokeHalo: (in category 'events-processing') ----- + tryInvokeHalo: aUserInputEvent + "Invoke halos around the top-most world container at aUserInputEvent's #position. If it was already halo'd, zero-in on its next inward component morph at that position. Holding Shift during the click reverses this traversal order." + | stack target owners | + Preferences noviceMode ifTrue: [^self ]. + Morph haloForAll ifFalse: [^self]. + "the stack is the top-most morph to bottom-most." + stack := (self morphsAt: aUserInputEvent position unlocked: true) select: [ : each | each wantsHaloFromClick ]. + stack ifEmpty: [^self]. + target := + aUserInputEvent hand halo + ifNil: [ stack first ] + ifNotNil: + [ : existingHalo | + stack allButFirst "halo's are always topmost on the stack" + detect: [ : each | each owner == self ] + ifFound: + [ : topMostWhereClicked | + (existingHalo target withAllOwners includes: topMostWhereClicked) + ifTrue: [ "No invocation needed. Halo will handle transfer itself." ^self ] + ifFalse: + [ "Transfer halo to new world container." + aUserInputEvent hand removeHalo. + aUserInputEvent shiftPressed + ifTrue: [ stack second ] + ifFalse: [ topMostWhereClicked ] ] ] + ifNone: ["Okay, invoke halos on the world." self ] ]. + "With a modifier, we want the innermost, otherwise the outermost." + owners := target withAllOwners select: [ : each | each wantsHaloFromClick ]. + "the last owner is expected to be self." + target := aUserInputEvent shiftPressed ifTrue: [ owners first ] ifFalse: [ owners at: owners size-1 ifAbsent: [self] ]. + "Now that we have the target, show the halo. Abort event dispatching, too, to avoid confusion." + aUserInputEvent hand newMouseFocus: target event: aUserInputEvent. + target invokeHaloOrMove: aUserInputEvent. + "aUserInputEvent has been consumed, don't let it cause any further side-effects." + aUserInputEvent ignore! - tryInvokeHalo: anEvent - - | innerMost target | - anEvent hand halo ifNotNil: [^ self "No invocation needed. Halo will handle transfer itself."]. - Preferences noviceMode ifTrue: [^ self "No halo in novice mode."]. - Morph haloForAll ifFalse: [^ self]. - - innerMost := (self morphsAt: anEvent position unlocked: true) first. - - "1) Try to use innermost morph but skip all the ones that do not want to show a halo along the owner chain." - target := innerMost. - [target isNil or: [target wantsHaloFromClick]] - whileFalse: [target := target owner]. - target ifNil: [^ self]. - - "2) Without a modifier, which is normal, find the outermost container for that inner morph." - (innerMost == self or: [anEvent shiftPressed]) ifFalse: [ - | previousTargets | - previousTargets := OrderedCollection new. - [target notNil and: [target owner ~~ self]] whileTrue: [ - previousTargets add: target. - target := target owner]. - target ifNil: [^ self]. - [previousTargets isEmpty or: [target wantsHaloFromClick]] whileFalse: [ - target := previousTargets removeLast]. - target wantsHaloFromClick ifFalse: [^ self]]. - - "3) Now that we have the target, show the halo. Abort event dispatching, too, to avoid confusion." - anEvent hand newMouseFocus: target event: anEvent. - target invokeHaloOrMove: anEvent. - anEvent ignore.!
Item was changed: ----- Method: ProportionalSplitterMorph>>mouseUp: (in category 'events') ----- mouseUp: anEvent + (self bounds containsPoint: anEvent cursorPoint) ifFalse: [ anEvent hand showTemporaryCursor: nil ]. + self class fastSplitterResize ifTrue: [ self updateFromEvent: anEvent ]. + traceMorph ifNotNil: + [ traceMorph delete. + traceMorph := nil ]. - (self bounds containsPoint: anEvent cursorPoint) - ifFalse: [anEvent hand showTemporaryCursor: nil]. - self class fastSplitterResize - ifTrue: [self updateFromEvent: anEvent]. - traceMorph ifNotNil: [traceMorph delete. traceMorph := nil]. self color: self getOldColor. + "balanceOffsets currently disrupts Smart Splitter behavior." + (ProportionalSplitterMorph smartVerticalSplitters or: [ ProportionalSplitterMorph smartHorizontalSplitters ]) ifFalse: [ self balanceOffsets ]! - - self balanceOffsets!
Item was changed: ----- Method: ProportionalSplitterMorph>>step (in category 'events') ----- step splitsTopAndBottom ifTrue: [ self reduceTopBottomImbalance ] ifFalse: [ self reduceLeftRightImbalance abs > 1 ifTrue: [ self splittersLeftDo: [ : splitter | splitter reduceLeftRightImbalance ]. self splittersRightDo: + [ : splitter | splitter reduceLeftRightImbalance ] ] ]! - [ : splitter | splitter reduceLeftRightImbalance ] ] ]. - self balanceOffsets!
packages@lists.squeakfoundation.org