Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1426.mcz ==================== Summary ==================== Name: Morphic-mt.1426 Author: mt Time: 4 May 2018, 8:49:10.20407 am UUID: 1f2d43f7-f891-4a45-a18c-306ae6fa4094 Ancestors: Morphic-mt.1425 Minor fix to reset mouse cursor for drag-drop operations. Got annoying because of the text cursor in workspaces. Try: "Morph new openInHand". Needs further clean-up because #attachMorph:, #grabMorph:, and #grabMorph:from: exhibit much code duplication. =============== Diff against Morphic-mt.1425 =============== Item was changed: ----- Method: HandMorph>>attachMorph: (in category 'grabbing/dropping') ----- attachMorph: m "Position the center of the given morph under this hand, then grab it. This method is used to grab far away or newly created morphs." | delta | self releaseMouseFocus. "Break focus" + self showTemporaryCursor: nil. delta := m bounds extent // 2. m position: (self position - delta). m formerPosition: m position. targetOffset := m position - self position. self addMorphBack: m.! Item was changed: ----- Method: HandMorph>>grabMorph: (in category 'meta-actions') ----- grabMorph: aMorph "Grab the given morph (i.e., add it to this hand and remove it from its current owner) without changing its position. This is used to pick up a morph under the hand's current position, versus attachMorph: which is used to pick up a morph that may not be near this hand." | grabbed | self releaseMouseFocus. "Break focus" + self showTemporaryCursor: nil. grabbed := aMorph aboutToBeGrabbedBy: self. grabbed ifNil:[^self]. grabbed := grabbed topRendererOrSelf. ^self grabMorph: grabbed from: grabbed owner! Item was changed: ----- Method: HandMorph>>grabMorph:from: (in category 'grabbing/dropping') ----- grabMorph: aMorph from: formerOwner "Grab the given morph (i.e., add it to this hand and remove it from its current owner) without changing its position. This is used to pick up a morph under the hand's current position, versus attachMorph: which is used to pick up a morph that may not be near this hand." | grabbed offset targetPoint grabTransform fullTransform | self releaseMouseFocus. "Break focus" + self showTemporaryCursor: nil. grabbed := aMorph. aMorph keepsTransform ifTrue:[ grabTransform := fullTransform := IdentityTransform new. ] ifFalse:[ "Compute the transform to apply to the grabbed morph" grabTransform := formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner grabTransform]. "Compute the full transform for the grabbed morph" fullTransform := formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner transformFrom: owner]. ]. "targetPoint is point in aMorphs reference frame" targetPoint := fullTransform globalPointToLocal: self position. "but current position will be determined by grabTransform, so compute offset" offset := targetPoint - (grabTransform globalPointToLocal: self position). "apply the transform that should be used after grabbing" grabbed := grabbed transformedBy: grabTransform. grabbed == aMorph ifFalse: [grabbed setProperty: #addedFlexAtGrab toValue: true]. "offset target to compensate for differences in transforms" grabbed position: grabbed position - offset asIntegerPoint. "And compute distance from hand's position" targetOffset := grabbed position - self position. self addMorphBack: grabbed. grabbed justGrabbedFrom: formerOwner.! |
Free forum by Nabble | Edit this page |