[squeak-dev] The Inbox: Morphic-cmm.1408.mcz
David T. Lewis
lewis at mail.msen.com
Tue Apr 3 01:09:58 UTC 2018
That looks much better, thanks :-)
Dave
On Mon, Apr 02, 2018 at 06:43:41PM -0500, Chris Muller wrote:
> From only 2 minutes of testing, this updated version appears to fix
> the issues I found in "take 2" (both caused by the same problem).
>
> If we don't find any other issues over the next week or so, let's put
> it in trunk, it's a nice fix.
>
> - Chris
>
> On Mon, Apr 2, 2018 at 6:35 PM, <commits at source.squeak.org> wrote:
> > Chris Muller uploaded a new version of Morphic to project The Inbox:
> > http://source.squeak.org/inbox/Morphic-cmm.1408.mcz
> >
> > ==================== Summary ====================
> >
> > Name: Morphic-cmm.1408
> > Author: cmm
> > Time: 2 April 2018, 6:34:32.944359 pm
> > UUID: 1b84680b-ad85-4d86-a6d4-29fb3c2f8193
> > Ancestors: Morphic-cmm.1407
> >
> > Integrate fix from St??phane Rollandin that keeps ProportionalSplitter bars in their proportionally-assigned place after resizing windows.
> >
> > =============== Diff against Morphic-cmm.1407 ===============
> >
> > Item was added:
> > + ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'layout') -----
> > + balanceOffsets
> > +
> > + self layoutFrame hasFixedHeight ifTrue: [
> > + | otop obot ctop cbot topf |
> > +
> > + otop := (owner submorphs detect: [:m |
> > + m layoutFrame topFraction isZero] ifNone: [^ self]) in: [:tm |
> > + tm top - (tm layoutFrame topOffset ifNil: [0])].
> > +
> > + obot := (owner submorphs detect: [:m |
> > + m layoutFrame bottomFraction = 1] ifNone: [^ self]) in: [:tm |
> > + tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].
> > +
> > + ctop := (self layoutFrame topFraction * (obot - otop)) rounded
> > + + otop + (self layoutFrame topOffset ifNil: [0]).
> > + cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
> > + + otop + (self layoutFrame bottomOffset ifNil: [0]).
> > +
> > + topf := self layoutFrame topFraction.
> > + self layoutFrame topFraction: ((ctop + cbot) * 0.5 - otop) / (obot - otop) asFloat.
> > + self layoutFrame bottomFraction: self layoutFrame topFraction.
> > + self layoutFrame topOffset: ctop -
> > + (self layoutFrame topFraction * (obot - otop) + otop) rounded.
> > + self layoutFrame bottomOffset: cbot -
> > + (self layoutFrame bottomFraction * (obot - otop) + otop) rounded..
> > +
> > + (leftOrTop copy union: rightOrBottom) do: [:m |
> > + (m layoutFrame topFraction closeTo: topf) ifTrue: [
> > + m layoutFrame topFraction: self layoutFrame topFraction.
> > + m layoutFrame topOffset:
> > + m layoutFrame topOffset - (self valueOfProperty: #fullDelta) y].
> > + (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
> > + m layoutFrame bottomFraction: self layoutFrame topFraction.
> > + m layoutFrame bottomOffset:
> > + m layoutFrame bottomOffset - (self valueOfProperty: #fullDelta) y.]]] .
> > +
> > + self layoutFrame hasFixedWidth ifTrue: [
> > + | oleft oright cleft cright leftf |
> > +
> > + oleft := (owner submorphs detect: [:m |
> > + m layoutFrame leftFraction isZero] ifNone: [^ self]) in: [:tm |
> > + tm left - (tm layoutFrame leftOffset ifNil: [0])].
> > +
> > + oright := (owner submorphs detect: [:m |
> > + m layoutFrame rightFraction = 1] ifNone: [^ self]) in: [:tm |
> > + tm right - (tm layoutFrame rightOffset ifNil: [0])].
> > +
> > + cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
> > + + oleft + (self layoutFrame leftOffset ifNil: [0]).
> > + cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
> > + + oleft + (self layoutFrame rightOffset ifNil: [0]).
> > +
> > + leftf := self layoutFrame leftFraction.
> > + self layoutFrame leftFraction: ((cleft + cright) * 0.5 - oleft) / (oright - oleft) asFloat.
> > + self layoutFrame rightFraction: self layoutFrame leftFraction.
> > +
> > + self layoutFrame leftOffset: cleft -
> > + (self layoutFrame leftFraction * (oright - oleft) + oleft) rounded.
> > + self layoutFrame rightOffset: cright -
> > + (self layoutFrame rightFraction * (oright - oleft) + oleft) rounded.
> > +
> > + (leftOrTop copy union: rightOrBottom) do: [:m |
> > + (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
> > + m layoutFrame leftFraction: self layoutFrame leftFraction.
> > + m layoutFrame leftOffset:
> > + m layoutFrame leftOffset - (self valueOfProperty: #fullDelta) x].
> > + (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
> > + m layoutFrame rightFraction: self layoutFrame leftFraction.
> > + m layoutFrame rightOffset:
> > + m layoutFrame rightOffset - (self valueOfProperty: #fullDelta) x.]]] .
> > +
> > + self removeProperty: #fullDelta.
> > + owner layoutChanged
> > + !
> >
> > Item was changed:
> > ----- Method: ProportionalSplitterMorph>>mouseDown: (in category 'events') -----
> > mouseDown: anEvent
> > "If the user manually drags me, don't override him with auto positioning."
> >
> > + self setProperty: #fullDelta toValue: 0 at 0.
> > +
> > anEvent redButtonChanged
> > ifTrue: [ self withSiblingSplittersDo: [ : each | each stopStepping ] ]
> > ifFalse:
> > [ anEvent shiftPressed
> > ifTrue: [ self startStepping ]
> > ifFalse:
> > [ self startStepping.
> > self withSiblingSplittersDo: [ : each | each startStepping ] ] ].
> > (self class showSplitterHandles not and: [ self bounds containsPoint: anEvent cursorPoint ]) ifTrue:
> > [ oldColor := self color.
> > self color: Color black ].
> > ^ super mouseDown: anEvent!
> >
> > 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 color: self getOldColor.
> > +
> > + self balanceOffsets!
> > - self color: self getOldColor!
> >
> > Item was changed:
> > ----- Method: ProportionalSplitterMorph>>reduceLeftRightImbalance (in category 'layout') -----
> > reduceLeftRightImbalance
> > | correction |
> > correction := self leftRightImbalance.
> > correction abs > 1
> > ifTrue:
> > [ (self proposedCorrectionWouldCauseFocusChange: correction) ifFalse:
> > [ self repositionBy:
> > (correction abs > 4
> > ifTrue: [ correction sign * 2 @ 0 ]
> > ifFalse: [ correction sign @ 0 ]) ] ]
> > ifFalse:
> > + [ self class smartVerticalSplitters ifFalse:
> > + [ self
> > + stopStepping ;
> > + balanceOffsets ] ].
> > - [ self class smartVerticalSplitters ifFalse: [ self stopStepping ] ].
> > ^ correction!
> >
> > Item was changed:
> > ----- Method: ProportionalSplitterMorph>>reduceTopBottomImbalance (in category 'layout') -----
> > reduceTopBottomImbalance
> > | correction |
> > (correction := self topBottomCorrection) isZero
> > ifTrue:
> > + [ self class smartHorizontalSplitters ifFalse:
> > + [ self
> > + stopStepping ;
> > + balanceOffsets ] ]
> > - [ self class smartHorizontalSplitters ifFalse: [ self stopStepping ] ]
> > ifFalse:
> > [ (self proposedCorrectionWouldCauseFocusChange: correction) ifFalse: [ self repositionBy: 0 @ correction ] ].
> > ^ correction!
> >
> > Item was changed:
> > ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'layout') -----
> > repositionBy: delta
> > | selfTop selfBottom selfLeft selfRight |
> > +
> > + self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0 at 0]) + delta.
> > +
> > leftOrTop do:
> > [ : each | | firstRight firstBottom firstLeft firstTop |
> > firstRight := each layoutFrame rightOffset ifNil: [ 0 ].
> > firstBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
> > each layoutFrame rightOffset: firstRight + delta x.
> > each layoutFrame bottomOffset: firstBottom + delta y.
> > each layoutFrame hasFixedHeight ifTrue: [
> > firstTop := each layoutFrame topOffset ifNil: [ 0 ].
> > each layoutFrame topOffset: firstTop + delta y ].
> > each layoutFrame hasFixedWidth ifTrue: [
> > firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
> > each layoutFrame leftOffset: firstLeft + delta x. ] ].
> > rightOrBottom do:
> > [ : each | | secondLeft secondTop secondRight secondBottom |
> > secondLeft := each layoutFrame leftOffset ifNil: [ 0 ].
> > secondTop := each layoutFrame topOffset ifNil: [ 0 ].
> > each layoutFrame leftOffset: secondLeft + delta x.
> > each layoutFrame topOffset: secondTop + delta y.
> > each layoutFrame hasFixedHeight ifTrue: [
> > secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
> > each layoutFrame bottomOffset: secondBottom + delta y. ].
> > each layoutFrame hasFixedWidth ifTrue: [
> > secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
> > each layoutFrame rightOffset: secondRight + delta x. ] ].
> >
> > selfTop := self layoutFrame topOffset ifNil: [ 0 ].
> > selfBottom := self layoutFrame bottomOffset ifNil: [ 0 ].
> > selfLeft := self layoutFrame leftOffset ifNil: [ 0 ].
> > selfRight := self layoutFrame rightOffset ifNil: [ 0 ].
> > self layoutFrame
> > topOffset: selfTop + delta y ;
> > bottomOffset: selfBottom + delta y ;
> > leftOffset: selfLeft + delta x ;
> > rightOffset: selfRight + delta x.
> > self owner layoutChanged.
> > self movements removeFirst; add: (splitsTopAndBottom ifTrue: [ delta y sign ] ifFalse: [ delta x sign ])!
> >
> >
> >
> >
>
More information about the Squeak-dev
mailing list
|