<div dir="ltr"><div>Oups, sorry, this was for inbox!</div><div>Let me repair that if I can...<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le lun. 17 févr. 2020 à 17:07, <<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Nicolas Cellier uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-nice.1625.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/trunk/Morphic-nice.1625.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-nice.1625<br>
Author: nice<br>
Time: 17 February 2020, 5:06:10.606532 pm<br>
UUID: 094e2566-ddfe-2340-8fab-2338d255e164<br>
Ancestors: Morphic-mt.1624<br>
<br>
Free our mind from un-initialized LayoutFrame. There should not be any such thing.<br>
<br>
Require Graphics-nice.425<br>
<br>
=============== Diff against Morphic-mt.1624 ===============<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----<br>
addMorph: aMorph fullFrame: aLayoutFrame<br>
"Add aMorph according to aLayoutFrame."<br>
<br>
self cellGap > 0 ifTrue: [<br>
| left right bottom top spacing |<br>
<br>
spacing := self cellGap.<br>
+ left := aLayoutFrame leftOffset.<br>
+ right := aLayoutFrame rightOffset.<br>
- left := aLayoutFrame leftOffset ifNil: [0].<br>
- right := aLayoutFrame rightOffset ifNil: [0].<br>
<br>
+ bottom := aLayoutFrame bottomOffset.<br>
+ top := aLayoutFrame topOffset.<br>
- bottom := aLayoutFrame bottomOffset ifNil: [0].<br>
- top := aLayoutFrame topOffset ifNil: [0].<br>
<br>
"Add a spacing to the frame if it is not top or leftmost."<br>
aLayoutFrame leftFraction = 0<br>
ifFalse: [left := left + spacing]<br>
ifTrue: [<br>
"Expect another, resizable widget besides me if I have a fixed width."<br>
aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].<br>
aLayoutFrame topFraction = 0<br>
ifFalse: [top := top + spacing]<br>
ifTrue: [<br>
"Expect another, resizable widget besides me if I have a fixed height."<br>
aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].<br>
<br>
aLayoutFrame<br>
topOffset: top;<br>
bottomOffset: bottom;<br>
leftOffset: left;<br>
rightOffset: right].<br>
<br>
super addMorph: aMorph fullFrame: aLayoutFrame.<br>
<br>
self wantsPaneSplitters ifTrue: [self addPaneSplitters].!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----<br>
addPaneHSplitterAtBottomOfRow: someMorphs<br>
<br>
| targetY minX maxX splitter |<br>
targetY := someMorphs first layoutFrame bottomFraction.<br>
<br>
minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.<br>
maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.<br>
<br>
splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.<br>
splitter layoutFrame: (LayoutFrame<br>
fractions: (minX @ targetY corner: maxX @ targetY)<br>
+ offsets: (someMorphs first layoutFrame leftOffset @ 0 <br>
+ corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).<br>
- offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0 <br>
- corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).<br>
<br>
self addMorphBack: (splitter position: self position).!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----<br>
addPaneVSplitterAtRightOfColumn: someMorphs<br>
<br>
| targetX minY maxY splitter |<br>
targetX := someMorphs first layoutFrame rightFraction.<br>
<br>
minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.<br>
maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.<br>
<br>
splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.<br>
splitter layoutFrame: (LayoutFrame<br>
fractions: (targetX @ minY corner: targetX @ maxY)<br>
+ offsets: (0 @ (someMorphs first layoutFrame topOffset)<br>
+ corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).<br>
- offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])<br>
- corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).<br>
<br>
self addMorphBack: (splitter position: self position).!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----<br>
linkSubmorphsToSplitters<br>
<br>
self splitters do: [:splitter |<br>
splitter splitsTopAndBottom ifTrue: [<br>
self submorphsDo: [:morph |<br>
((morph ~= splitter<br>
and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])<br>
and: [morph layoutFrame hasFixedHeight not<br>
+ or: [(morph layoutFrame topOffset) < 0]])<br>
- or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])<br>
ifTrue: [splitter addLeftOrTop: morph].<br>
((morph ~= splitter<br>
and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])<br>
and: [morph layoutFrame hasFixedHeight not<br>
+ or: [(morph layoutFrame bottomOffset) > 0]])<br>
- or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])<br>
ifTrue: [splitter addRightOrBottom: morph]]].<br>
splitter splitsLeftAndRight ifTrue: [<br>
self submorphsDo: [:morph |<br>
((morph ~= splitter<br>
and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])<br>
and: [morph layoutFrame hasFixedWidth not<br>
+ or: [(morph layoutFrame leftOffset) < 0]])<br>
- or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])<br>
ifTrue: [splitter addLeftOrTop: morph].<br>
((morph ~= splitter <br>
and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])<br>
and: [morph layoutFrame hasFixedWidth not<br>
+ or: [(morph layoutFrame rightOffset) > 0]])<br>
- or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])<br>
ifTrue: [splitter addRightOrBottom: morph]]]]!<br>
<br>
Item was changed:<br>
----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----<br>
balanceOffsets<br>
<br>
| fdx fdy |<br>
<br>
(self hasProperty: #fullDelta) ifFalse: [^ self].<br>
<br>
fdx := (self valueOfProperty: #fullDelta) x.<br>
fdy := (self valueOfProperty: #fullDelta) y.<br>
<br>
self layoutFrame hasFixedHeight ifTrue: [<br>
| otop obot ctop cbot topf |<br>
<br>
otop := (owner submorphs detect: [:m | <br>
m layoutFrame topFraction isZero] ifNone: [^ self]) in: [:tm | <br>
+ tm top - (tm layoutFrame topOffset)].<br>
- tm top - (tm layoutFrame topOffset ifNil: [0])].<br>
<br>
obot := (owner submorphs detect: [:m | <br>
m layoutFrame bottomFraction = 1] ifNone: [^ self]) in: [:tm | <br>
+ tm bottom - (tm layoutFrame bottomOffset)].<br>
- tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].<br>
<br>
ctop := (self layoutFrame topFraction * (obot - otop)) rounded <br>
+ + otop + (self layoutFrame topOffset).<br>
- + otop + (self layoutFrame topOffset ifNil: [0]).<br>
cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded <br>
+ + otop + (self layoutFrame bottomOffset).<br>
- + otop + (self layoutFrame bottomOffset ifNil: [0]).<br>
<br>
topf := self layoutFrame topFraction.<br>
self layoutFrame topFraction: ((ctop + cbot) * 0.5 - otop) / (obot - otop) asFloat.<br>
self layoutFrame bottomFraction: self layoutFrame topFraction.<br>
self layoutFrame topOffset: self layoutFrame topOffset - fdy.<br>
self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.<br>
<br>
(leftOrTop copy union: rightOrBottom) do: [:m |<br>
(m layoutFrame topFraction closeTo: topf) ifTrue: [<br>
m layoutFrame topFraction: self layoutFrame topFraction.<br>
m layoutFrame topOffset: m layoutFrame topOffset - fdy].<br>
(m layoutFrame bottomFraction closeTo: topf) ifTrue: [<br>
m layoutFrame bottomFraction: self layoutFrame topFraction.<br>
m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .<br>
<br>
self layoutFrame hasFixedWidth ifTrue: [<br>
| oleft oright cleft cright leftf |<br>
<br>
oleft := (owner submorphs detect: [:m | <br>
m layoutFrame leftFraction isZero] ifNone: [^ self]) in: [:tm | <br>
+ tm left - (tm layoutFrame leftOffset)].<br>
- tm left - (tm layoutFrame leftOffset ifNil: [0])].<br>
<br>
oright := (owner submorphs detect: [:m | <br>
m layoutFrame rightFraction = 1] ifNone: [^ self]) in: [:tm | <br>
+ tm right - (tm layoutFrame rightOffset)].<br>
- tm right - (tm layoutFrame rightOffset ifNil: [0])].<br>
<br>
cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded <br>
+ + oleft + (self layoutFrame leftOffset).<br>
- + oleft + (self layoutFrame leftOffset ifNil: [0]).<br>
cright := (self layoutFrame rightFraction * (oright - oleft)) rounded <br>
+ + oleft + (self layoutFrame rightOffset).<br>
- + oleft + (self layoutFrame rightOffset ifNil: [0]).<br>
<br>
leftf := self layoutFrame leftFraction.<br>
self layoutFrame leftFraction: ((cleft + cright) * 0.5 - oleft) / (oright - oleft) asFloat.<br>
self layoutFrame rightFraction: self layoutFrame leftFraction.<br>
<br>
<br>
self layoutFrame leftOffset: self layoutFrame leftOffset - fdx.<br>
self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.<br>
<br>
(leftOrTop copy union: rightOrBottom) do: [:m |<br>
(m layoutFrame leftFraction closeTo: leftf) ifTrue: [<br>
m layoutFrame leftFraction: self layoutFrame leftFraction.<br>
m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].<br>
(m layoutFrame rightFraction closeTo: leftf) ifTrue: [<br>
m layoutFrame rightFraction: self layoutFrame leftFraction.<br>
m layoutFrame rightOffset: m layoutFrame rightOffset - fdx.]]] .<br>
<br>
self removeProperty: #fullDelta.<br>
owner layoutChanged<br>
!<br>
<br>
Item was changed:<br>
----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----<br>
repositionBy: delta<br>
| selfTop selfBottom selfLeft selfRight |<br>
<br>
self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.<br>
<br>
leftOrTop do:<br>
[ : each | | firstRight firstBottom firstLeft firstTop |<br>
+ firstRight := each layoutFrame rightOffset.<br>
+ firstBottom := each layoutFrame bottomOffset.<br>
- firstRight := each layoutFrame rightOffset ifNil: [ 0 ].<br>
- firstBottom := each layoutFrame bottomOffset ifNil: [ 0 ].<br>
each layoutFrame rightOffset: firstRight + delta x.<br>
each layoutFrame bottomOffset: firstBottom + delta y.<br>
each layoutFrame hasFixedHeight ifTrue: [<br>
+ firstTop := each layoutFrame topOffset.<br>
- firstTop := each layoutFrame topOffset ifNil: [ 0 ].<br>
each layoutFrame topOffset: firstTop + delta y ].<br>
each layoutFrame hasFixedWidth ifTrue: [<br>
+ firstLeft := each layoutFrame leftOffset.<br>
- firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].<br>
each layoutFrame leftOffset: firstLeft + delta x. ] ].<br>
rightOrBottom do:<br>
[ : each | | secondLeft secondTop secondRight secondBottom |<br>
+ secondLeft := each layoutFrame leftOffset.<br>
+ secondTop := each layoutFrame topOffset.<br>
- secondLeft := each layoutFrame leftOffset ifNil: [ 0 ].<br>
- secondTop := each layoutFrame topOffset ifNil: [ 0 ].<br>
each layoutFrame leftOffset: secondLeft + delta x.<br>
each layoutFrame topOffset: secondTop + delta y.<br>
each layoutFrame hasFixedHeight ifTrue: [<br>
+ secondBottom := each layoutFrame bottomOffset.<br>
- secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].<br>
each layoutFrame bottomOffset: secondBottom + delta y. ].<br>
each layoutFrame hasFixedWidth ifTrue: [<br>
+ secondRight := each layoutFrame rightOffset.<br>
- secondRight := each layoutFrame rightOffset ifNil: [ 0 ].<br>
each layoutFrame rightOffset: secondRight + delta x. ] ].<br>
<br>
+ selfTop := self layoutFrame topOffset.<br>
+ selfBottom := self layoutFrame bottomOffset.<br>
+ selfLeft := self layoutFrame leftOffset.<br>
+ selfRight := self layoutFrame rightOffset.<br>
- selfTop := self layoutFrame topOffset ifNil: [ 0 ].<br>
- selfBottom := self layoutFrame bottomOffset ifNil: [ 0 ].<br>
- selfLeft := self layoutFrame leftOffset ifNil: [ 0 ].<br>
- selfRight := self layoutFrame rightOffset ifNil: [ 0 ].<br>
self layoutFrame<br>
topOffset: selfTop + delta y ;<br>
bottomOffset: selfBottom + delta y ;<br>
leftOffset: selfLeft + delta x ;<br>
rightOffset: selfRight + delta x.<br>
self owner layoutChanged.<br>
self movements removeFirst; add: (splitsTopAndBottom ifTrue: [ delta y sign ] ifFalse: [ delta x sign ])!<br>
<br>
Item was changed:<br>
----- Method: SystemWindow>>convertAlignment (in category 'layout') -----<br>
convertAlignment<br>
"Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"<br>
<br>
self layoutPolicy: ProportionalLayout new.<br>
(paneMorphs isNil <br>
or: [paneRects isNil or: [paneMorphs size ~= paneRects size]]) <br>
ifFalse: <br>
[self addLabelArea.<br>
self putLabelItemsInLabelArea.<br>
self setFramesForLabelArea.<br>
paneMorphs with: paneRects<br>
do: <br>
[:m :r | <br>
| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: r left;<br>
rightFraction: r right;<br>
topFraction: r top;<br>
bottomFraction: r bottom.<br>
m layoutFrame: frame.<br>
m<br>
hResizing: #spaceFill;<br>
vResizing: #spaceFill]].<br>
labelArea isNil <br>
ifTrue: <br>
[self addLabelArea.<br>
self putLabelItemsInLabelArea.<br>
self setFramesForLabelArea.<br>
paneMorphs ifNotNil: <br>
[paneMorphs do: <br>
[:m | <br>
| frame |<br>
frame := m layoutFrame ifNil: [LayoutFrame new].<br>
+ frame topOffset: (frame topOffset) - self labelHeight.<br>
- frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.<br>
frame bottomFraction ~= 1.0 <br>
ifTrue: <br>
+ [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].<br>
- [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].<br>
label ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0.5;<br>
topFraction: 0;<br>
leftOffset: label width negated // 2.<br>
label layoutFrame: frame].<br>
collapseBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
rightFraction: 1;<br>
topFraction: 0;<br>
rightOffset: -1;<br>
topOffset: 1.<br>
collapseBox layoutFrame: frame].<br>
stripes ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
topFraction: 0;<br>
rightFraction: 1;<br>
leftOffset: 1;<br>
topOffset: 1;<br>
rightOffset: -1.<br>
stripes first layoutFrame: frame.<br>
stripes first height: self labelHeight - 2.<br>
stripes first hResizing: #spaceFill.<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
topFraction: 0;<br>
rightFraction: 1;<br>
leftOffset: 3;<br>
topOffset: 3;<br>
rightOffset: -3.<br>
stripes last layoutFrame: frame.<br>
stripes last height: self labelHeight - 6.<br>
stripes last hResizing: #spaceFill].<br>
menuBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
leftOffset: 19;<br>
topFraction: 0;<br>
topOffset: 1.<br>
menuBox layoutFrame: frame].<br>
closeBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
leftOffset: 4;<br>
topFraction: 0;<br>
topOffset: 1.<br>
closeBox layoutFrame: frame]!<br>
<br>
Item was changed:<br>
----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----<br>
setPaneRectsFromBounds<br>
"Reset proportional specs from actual bounds, eg, after reframing panes"<br>
| layoutBounds |<br>
layoutBounds := self layoutBounds.<br>
paneMorphs do:[:m| | box left bottom top frame right |<br>
frame := m layoutFrame.<br>
box := m bounds.<br>
frame ifNotNil:[<br>
+ left := box left - layoutBounds left - frame leftOffset.<br>
+ right := box right - layoutBounds left - frame rightOffset.<br>
+ top := box top - layoutBounds top - frame topOffset.<br>
+ bottom := box bottom - layoutBounds top - frame bottomOffset.<br>
- left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).<br>
- right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).<br>
- top := box top - layoutBounds top - (frame topOffset ifNil:[0]).<br>
- bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).<br>
frame leftFraction: (left / layoutBounds width asFloat).<br>
frame rightFraction: (right / layoutBounds width asFloat).<br>
frame topFraction: (top / layoutBounds height asFloat).<br>
frame bottomFraction: (bottom / layoutBounds height asFloat).<br>
].<br>
].!<br>
<br>
<br>
</blockquote></div>