The Trunk: Morphic-nice.1625.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Morphic-nice.1625.mcz

commits-2
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
  "Add aMorph according to aLayoutFrame."
 
  self cellGap > 0 ifTrue: [
  | left right bottom top spacing |
 
  spacing := self cellGap.
+ left := aLayoutFrame leftOffset.
+ right := aLayoutFrame rightOffset.
- left := aLayoutFrame leftOffset ifNil: [0].
- right := aLayoutFrame rightOffset ifNil: [0].
 
+ bottom := aLayoutFrame bottomOffset.
+ top := aLayoutFrame topOffset.
- bottom := aLayoutFrame bottomOffset ifNil: [0].
- top := aLayoutFrame topOffset ifNil: [0].
 
  "Add a spacing to the frame if it is not top or leftmost."
  aLayoutFrame leftFraction = 0
  ifFalse: [left := left + spacing]
  ifTrue: [
  "Expect another, resizable widget besides me if I have a fixed width."
  aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
  aLayoutFrame topFraction = 0
  ifFalse: [top := top + spacing]
  ifTrue: [
  "Expect another, resizable widget besides me if I have a fixed height."
  aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].
 
  aLayoutFrame
  topOffset: top;
  bottomOffset: bottom;
  leftOffset: left;
  rightOffset: right].
 
  super addMorph: aMorph fullFrame: aLayoutFrame.
 
  self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs
 
  | targetY minX maxX splitter |
  targetY := someMorphs first layoutFrame bottomFraction.
 
  minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
  maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.
 
  splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
  splitter layoutFrame: (LayoutFrame
  fractions: (minX @ targetY corner: maxX @ targetY)
+ offsets: (someMorphs first layoutFrame leftOffset @ 0
+ corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
- offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
- corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).
 
  self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs
 
  | targetX minY maxY splitter |
  targetX := someMorphs first layoutFrame rightFraction.
 
  minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
  maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.
 
  splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
  splitter layoutFrame: (LayoutFrame
  fractions: (targetX @ minY corner: targetX @ maxY)
+ offsets: (0 @ (someMorphs first layoutFrame topOffset)
+ corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
- offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
- corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).
 
  self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters
 
  self splitters do: [:splitter |
  splitter splitsTopAndBottom ifTrue: [
  self submorphsDo: [:morph |
  ((morph ~= splitter
  and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
  and: [morph layoutFrame hasFixedHeight not
+ or: [(morph layoutFrame topOffset) < 0]])
- or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
  ifTrue: [splitter addLeftOrTop: morph].
  ((morph ~= splitter
  and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
  and: [morph layoutFrame hasFixedHeight not
+ or: [(morph layoutFrame bottomOffset) > 0]])
- or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
  ifTrue: [splitter addRightOrBottom: morph]]].
  splitter splitsLeftAndRight ifTrue: [
  self submorphsDo: [:morph |
  ((morph ~= splitter
  and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
  and: [morph layoutFrame hasFixedWidth not
+ or: [(morph layoutFrame leftOffset) < 0]])
- or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
  ifTrue: [splitter addLeftOrTop: morph].
  ((morph ~= splitter
  and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
  and: [morph layoutFrame hasFixedWidth not
+ or: [(morph layoutFrame rightOffset) > 0]])
- or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
  ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets
 
  | fdx fdy |
 
  (self hasProperty: #fullDelta) ifFalse: [^ self].
 
  fdx := (self valueOfProperty: #fullDelta) x.
  fdy := (self valueOfProperty: #fullDelta) y.
 
  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)].
- 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)].
- tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].
 
  ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+ + otop + (self layoutFrame topOffset).
- + otop + (self layoutFrame topOffset ifNil: [0]).
  cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+ + otop + (self layoutFrame bottomOffset).
- + 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: self layoutFrame topOffset - fdy.
  self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.
 
  (leftOrTop copy union: rightOrBottom) do: [:m |
  (m layoutFrame topFraction closeTo: topf) ifTrue: [
  m layoutFrame topFraction: self layoutFrame topFraction.
  m layoutFrame topOffset: m layoutFrame topOffset - fdy].
  (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
  m layoutFrame bottomFraction: self layoutFrame topFraction.
  m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .
 
  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)].
- 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)].
- tm right - (tm layoutFrame rightOffset ifNil: [0])].
 
  cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+ + oleft + (self layoutFrame leftOffset).
- + oleft + (self layoutFrame leftOffset ifNil: [0]).
  cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+ + oleft + (self layoutFrame rightOffset).
- + 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: self layoutFrame leftOffset - fdx.
  self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.
 
  (leftOrTop copy union: rightOrBottom) do: [:m |
  (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
  m layoutFrame leftFraction: self layoutFrame leftFraction.
  m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
  (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
  m layoutFrame rightFraction: self layoutFrame leftFraction.
  m layoutFrame rightOffset: m layoutFrame rightOffset - fdx.]]] .
 
  self removeProperty: #fullDelta.
  owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
  | selfTop selfBottom selfLeft selfRight |
 
  self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.
 
  leftOrTop do:
  [ : each | | firstRight firstBottom firstLeft firstTop |
+ firstRight := each layoutFrame rightOffset.
+ firstBottom := each layoutFrame bottomOffset.
- 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.
- firstTop := each layoutFrame topOffset ifNil: [ 0 ].
  each layoutFrame topOffset: firstTop + delta y ].
  each layoutFrame hasFixedWidth ifTrue: [
+ firstLeft := each layoutFrame leftOffset.
- firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
  each layoutFrame leftOffset: firstLeft + delta x. ] ].
  rightOrBottom do:
  [ : each | | secondLeft secondTop secondRight secondBottom |
+ secondLeft := each layoutFrame leftOffset.
+ secondTop := each layoutFrame topOffset.
- 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.
- secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
  each layoutFrame bottomOffset: secondBottom + delta y. ].
  each layoutFrame hasFixedWidth ifTrue: [
+ secondRight := each layoutFrame rightOffset.
- secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
  each layoutFrame rightOffset: secondRight + delta x. ] ].
 
+ selfTop := self layoutFrame topOffset.
+ selfBottom := self layoutFrame bottomOffset.
+ selfLeft := self layoutFrame leftOffset.
+ selfRight := self layoutFrame rightOffset.
- 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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
  "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"
 
  self layoutPolicy: ProportionalLayout new.
  (paneMorphs isNil
  or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
  ifFalse:
  [self addLabelArea.
  self putLabelItemsInLabelArea.
  self setFramesForLabelArea.
  paneMorphs with: paneRects
  do:
  [:m :r |
  | frame |
  frame := LayoutFrame new.
  frame
  leftFraction: r left;
  rightFraction: r right;
  topFraction: r top;
  bottomFraction: r bottom.
  m layoutFrame: frame.
  m
  hResizing: #spaceFill;
  vResizing: #spaceFill]].
  labelArea isNil
  ifTrue:
  [self addLabelArea.
  self putLabelItemsInLabelArea.
  self setFramesForLabelArea.
  paneMorphs ifNotNil:
  [paneMorphs do:
  [:m |
  | frame |
  frame := m layoutFrame ifNil: [LayoutFrame new].
+ frame topOffset: (frame topOffset) - self labelHeight.
- frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
  frame bottomFraction ~= 1.0
  ifTrue:
+ [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
- [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
  label ifNotNil:
  [| frame |
  frame := LayoutFrame new.
  frame
  leftFraction: 0.5;
  topFraction: 0;
  leftOffset: label width negated // 2.
  label layoutFrame: frame].
  collapseBox ifNotNil:
  [| frame |
  frame := LayoutFrame new.
  frame
  rightFraction: 1;
  topFraction: 0;
  rightOffset: -1;
  topOffset: 1.
  collapseBox layoutFrame: frame].
  stripes ifNotNil:
  [| frame |
  frame := LayoutFrame new.
  frame
  leftFraction: 0;
  topFraction: 0;
  rightFraction: 1;
  leftOffset: 1;
  topOffset: 1;
  rightOffset: -1.
  stripes first layoutFrame: frame.
  stripes first height: self labelHeight - 2.
  stripes first hResizing: #spaceFill.
  frame := LayoutFrame new.
  frame
  leftFraction: 0;
  topFraction: 0;
  rightFraction: 1;
  leftOffset: 3;
  topOffset: 3;
  rightOffset: -3.
  stripes last layoutFrame: frame.
  stripes last height: self labelHeight - 6.
  stripes last hResizing: #spaceFill].
  menuBox ifNotNil:
  [| frame |
  frame := LayoutFrame new.
  frame
  leftFraction: 0;
  leftOffset: 19;
  topFraction: 0;
  topOffset: 1.
  menuBox layoutFrame: frame].
  closeBox ifNotNil:
  [| frame |
  frame := LayoutFrame new.
  frame
  leftFraction: 0;
  leftOffset: 4;
  topFraction: 0;
  topOffset: 1.
  closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
  "Reset proportional specs from actual bounds, eg, after reframing panes"
  | layoutBounds |
  layoutBounds := self layoutBounds.
  paneMorphs do:[:m| | box left bottom top frame right |
  frame := m layoutFrame.
  box := m bounds.
  frame ifNotNil:[
+ left := box left - layoutBounds left - frame leftOffset.
+ right := box right - layoutBounds left - frame rightOffset.
+ top := box top - layoutBounds top - frame topOffset.
+ bottom := box bottom - layoutBounds top - frame bottomOffset.
- left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
- right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
- top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
- bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
  frame leftFraction: (left / layoutBounds width asFloat).
  frame rightFraction: (right / layoutBounds width asFloat).
  frame topFraction: (top / layoutBounds height asFloat).
  frame bottomFraction: (bottom / layoutBounds height asFloat).
  ].
  ].!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Nicolas Cellier
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!




Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Christoph Thiede

Is this the reason why I cannot open Browsers any longer?




Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:16:04
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!




Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Nicolas Cellier
Yes, apologies.

Le lun. 17 févr. 2020 à 17:19, Thiede, Christoph <[hidden email]> a écrit :

Is this the reason why I cannot open Browsers any longer?




Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:16:04
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!





Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Christoph Thiede

Hm, could you provide a rollback commit? It's very hard to revert this change without using any tools ^^


Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:19:10
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Yes, apologies.

Le lun. 17 févr. 2020 à 17:19, Thiede, Christoph <[hidden email]> a écrit :

Is this the reason why I cannot open Browsers any longer?




Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:16:04
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!





Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Nicolas Cellier
The best thing to repair your image would be to load the pre-requisite Graphics-nice.425.

Installer squeakInbox package: 'Graphics-nice.425'; quietly; install.

or maybe:

Installer squeakTrunk package: 'Morphic'; latest; quietly; install.

You will loose your changes to either package though (I do not see an API for merging/reverting).



Le lun. 17 févr. 2020 à 17:22, Thiede, Christoph <[hidden email]> a écrit :

Hm, could you provide a rollback commit? It's very hard to revert this change without using any tools ^^


Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:19:10
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Yes, apologies.

Le lun. 17 févr. 2020 à 17:19, Thiede, Christoph <[hidden email]> a écrit :

Is this the reason why I cannot open Browsers any longer?




Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:16:04
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!






Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Morphic-nice.1625.mcz

Christoph Thiede

Thank you, I eventually repaired it via restore changes because I had unaccepted changes in my package.


Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:33:33
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
The best thing to repair your image would be to load the pre-requisite Graphics-nice.425.

Installer squeakInbox package: 'Graphics-nice.425'; quietly; install.

or maybe:

Installer squeakTrunk package: 'Morphic'; latest; quietly; install.

You will loose your changes to either package though (I do not see an API for merging/reverting).



Le lun. 17 févr. 2020 à 17:22, Thiede, Christoph <[hidden email]> a écrit :

Hm, could you provide a rollback commit? It's very hard to revert this change without using any tools ^^


Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:19:10
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Yes, apologies.

Le lun. 17 févr. 2020 à 17:19, Thiede, Christoph <[hidden email]> a écrit :

Is this the reason why I cannot open Browsers any longer?




Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Montag, 17. Februar 2020 17:16:04
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz
 
Oups, sorry, this was for inbox!
Let me repair that if I can...

Le lun. 17 févr. 2020 à 17:07, <[hidden email]> a écrit :
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.1625.mcz

==================== Summary ====================

Name: Morphic-nice.1625
Author: nice
Time: 17 February 2020, 5:06:10.606532 pm
UUID: 094e2566-ddfe-2340-8fab-2338d255e164
Ancestors: Morphic-mt.1624

Free our mind from un-initialized LayoutFrame. There should not be any such thing.

Require Graphics-nice.425

=============== Diff against Morphic-mt.1624 ===============

Item was changed:
  ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
  addMorph: aMorph fullFrame: aLayoutFrame
        "Add aMorph according to aLayoutFrame."

        self cellGap > 0 ifTrue: [
                | left right bottom top spacing |

                spacing := self cellGap.
+               left := aLayoutFrame leftOffset.
+               right := aLayoutFrame rightOffset.
-               left := aLayoutFrame leftOffset ifNil: [0].
-               right := aLayoutFrame rightOffset ifNil: [0].

+               bottom := aLayoutFrame bottomOffset.
+               top := aLayoutFrame topOffset.
-               bottom := aLayoutFrame bottomOffset ifNil: [0].
-               top := aLayoutFrame topOffset ifNil: [0].

                "Add a spacing to the frame if it is not top or leftmost."
                aLayoutFrame leftFraction = 0
                        ifFalse: [left := left + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed width."
                                aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
                aLayoutFrame topFraction = 0
                        ifFalse: [top := top + spacing]
                        ifTrue: [
                                "Expect another, resizable widget besides me if I have a fixed height."
                                aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].

                aLayoutFrame
                        topOffset: top;
                        bottomOffset: bottom;
                        leftOffset: left;
                        rightOffset: right].

        super addMorph: aMorph fullFrame: aLayoutFrame.

        self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
  ----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----
  addPaneHSplitterAtBottomOfRow: someMorphs

        | targetY minX maxX splitter |
        targetY := someMorphs first layoutFrame bottomFraction.

        minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
        maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.

        splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (minX @ targetY corner: maxX @ targetY)
+               offsets: (someMorphs first layoutFrame leftOffset @ 0
+                       corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).
-               offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
-                       corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----
  addPaneVSplitterAtRightOfColumn: someMorphs

        | targetX minY maxY splitter |
        targetX := someMorphs first layoutFrame rightFraction.

        minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
        maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.

        splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.
        splitter layoutFrame: (LayoutFrame
                fractions: (targetX @ minY corner: targetX @ maxY)
+               offsets: (0 @ (someMorphs first layoutFrame topOffset)
+                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).
-               offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])
-                       corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).

        self addMorphBack: (splitter position: self position).!

Item was changed:
  ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
  linkSubmorphsToSplitters

        self splitters do: [:splitter |
                splitter splitsTopAndBottom ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame topOffset) < 0]])
-                                                       or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
                                                and: [morph layoutFrame hasFixedHeight not
+                                                       or: [(morph layoutFrame bottomOffset) > 0]])
-                                                       or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]].
                splitter splitsLeftAndRight ifTrue: [
                        self submorphsDo: [:morph |
                                        ((morph ~= splitter
                                                and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame leftOffset) < 0]])
-                                                       or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
                                                                ifTrue: [splitter addLeftOrTop: morph].
                                        ((morph ~= splitter
                                                and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
                                                and: [morph layoutFrame hasFixedWidth not
+                                                       or: [(morph layoutFrame rightOffset) > 0]])
-                                                       or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
                                                                ifTrue: [splitter addRightOrBottom: morph]]]]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----
  balanceOffsets

        | fdx fdy |

        (self hasProperty: #fullDelta) ifFalse: [^ self].

        fdx := (self valueOfProperty: #fullDelta) x.
        fdy := (self valueOfProperty: #fullDelta) y.

        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)].
-                                               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)].
-                                               tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].

                ctop := (self layoutFrame topFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame topOffset).
-                                       + otop + (self layoutFrame topOffset ifNil: [0]).
                cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
+                                       + otop + (self layoutFrame bottomOffset).
-                                       + 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: self layoutFrame topOffset - fdy.
                self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame topFraction closeTo: topf) ifTrue: [
                                m layoutFrame topFraction: self layoutFrame topFraction.
                                m layoutFrame topOffset: m layoutFrame topOffset - fdy].
                        (m layoutFrame bottomFraction closeTo: topf) ifTrue: [
                                m layoutFrame bottomFraction: self layoutFrame topFraction.
                                m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .

        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)].
-                               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)].
-                               tm right - (tm layoutFrame rightOffset ifNil: [0])].

                cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame leftOffset).
-                                       + oleft + (self layoutFrame leftOffset ifNil: [0]).
                cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
+                                       + oleft + (self layoutFrame rightOffset).
-                                       + 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: self layoutFrame leftOffset - fdx.
                self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.

                (leftOrTop copy union: rightOrBottom) do: [:m |
                        (m layoutFrame leftFraction closeTo: leftf) ifTrue: [
                                m layoutFrame leftFraction: self layoutFrame leftFraction.
                                m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].
                        (m layoutFrame rightFraction closeTo: leftf) ifTrue: [
                                m layoutFrame rightFraction: self layoutFrame leftFraction.
                                m layoutFrame rightOffset:      m layoutFrame rightOffset - fdx.]]] .

        self removeProperty: #fullDelta.
        owner layoutChanged
  !

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----
  repositionBy: delta
        | selfTop selfBottom selfLeft selfRight |

        self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.

        leftOrTop do:
                [ : each | | firstRight firstBottom firstLeft firstTop |
+               firstRight := each layoutFrame rightOffset.
+               firstBottom := each layoutFrame bottomOffset.
-               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.
-                       firstTop := each layoutFrame topOffset ifNil: [ 0 ].
                        each layoutFrame topOffset: firstTop + delta y ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       firstLeft := each layoutFrame leftOffset.
-                       firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
                        each layoutFrame leftOffset: firstLeft + delta x. ] ].
        rightOrBottom do:
                [ : each | | secondLeft secondTop secondRight secondBottom |
+               secondLeft := each layoutFrame leftOffset.
+               secondTop := each layoutFrame topOffset.
-               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.
-                       secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
                        each layoutFrame bottomOffset: secondBottom + delta y. ].
                each layoutFrame hasFixedWidth ifTrue: [
+                       secondRight := each layoutFrame rightOffset.
-                       secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
                        each layoutFrame rightOffset: secondRight + delta x. ] ].

+       selfTop := self layoutFrame topOffset.
+       selfBottom := self layoutFrame bottomOffset.
+       selfLeft := self layoutFrame leftOffset.
+       selfRight := self layoutFrame rightOffset.
-       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 ])!

Item was changed:
  ----- Method: SystemWindow>>convertAlignment (in category 'layout') -----
  convertAlignment
        "Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"

        self layoutPolicy: ProportionalLayout new.
        (paneMorphs isNil
                or: [paneRects isNil or: [paneMorphs size ~= paneRects size]])
                        ifFalse:
                                [self addLabelArea.
                                self putLabelItemsInLabelArea.
                                self setFramesForLabelArea.
                                paneMorphs with: paneRects
                                        do:
                                                [:m :r |
                                                | frame |
                                                frame := LayoutFrame new.
                                                frame
                                                        leftFraction: r left;
                                                        rightFraction: r right;
                                                        topFraction: r top;
                                                        bottomFraction: r bottom.
                                                m layoutFrame: frame.
                                                m
                                                        hResizing: #spaceFill;
                                                        vResizing: #spaceFill]].
        labelArea isNil
                ifTrue:
                        [self addLabelArea.
                        self putLabelItemsInLabelArea.
                        self setFramesForLabelArea.
                        paneMorphs ifNotNil:
                                        [paneMorphs do:
                                                        [:m |
                                                        | frame |
                                                        frame := m layoutFrame ifNil: [LayoutFrame new].
+                                                       frame topOffset: (frame topOffset) - self labelHeight.
-                                                       frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.
                                                        frame bottomFraction ~= 1.0
                                                                ifTrue:
+                                                                       [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].
-                                                                       [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].
        label ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0.5;
                                topFraction: 0;
                                leftOffset: label width negated // 2.
                        label layoutFrame: frame].
        collapseBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                rightFraction: 1;
                                topFraction: 0;
                                rightOffset: -1;
                                topOffset: 1.
                        collapseBox layoutFrame: frame].
        stripes ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 1;
                                topOffset: 1;
                                rightOffset: -1.
                        stripes first layoutFrame: frame.
                        stripes first height: self labelHeight - 2.
                        stripes first hResizing: #spaceFill.
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                topFraction: 0;
                                rightFraction: 1;
                                leftOffset: 3;
                                topOffset: 3;
                                rightOffset: -3.
                        stripes last layoutFrame: frame.
                        stripes last height: self labelHeight - 6.
                        stripes last hResizing: #spaceFill].
        menuBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 19;
                                topFraction: 0;
                                topOffset: 1.
                        menuBox layoutFrame: frame].
        closeBox ifNotNil:
                        [| frame |
                        frame := LayoutFrame new.
                        frame
                                leftFraction: 0;
                                leftOffset: 4;
                                topFraction: 0;
                                topOffset: 1.
                        closeBox layoutFrame: frame]!

Item was changed:
  ----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----
  setPaneRectsFromBounds
        "Reset proportional specs from actual bounds, eg, after reframing panes"
        | layoutBounds |
        layoutBounds := self layoutBounds.
        paneMorphs do:[:m| | box left bottom top frame right |
                frame := m layoutFrame.
                box := m bounds.
                frame ifNotNil:[
+                       left := box left - layoutBounds left - frame leftOffset.
+                       right := box right - layoutBounds left - frame rightOffset.
+                       top := box top - layoutBounds top - frame topOffset.
+                       bottom := box bottom - layoutBounds top - frame bottomOffset.
-                       left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).
-                       right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).
-                       top := box top - layoutBounds top - (frame topOffset ifNil:[0]).
-                       bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).
                        frame leftFraction: (left / layoutBounds width asFloat).
                        frame rightFraction: (right / layoutBounds width asFloat).
                        frame topFraction: (top / layoutBounds height asFloat).
                        frame bottomFraction: (bottom / layoutBounds height asFloat).
                ].
        ].!






Carpe Squeak!