[squeak-dev] The Trunk: Morphic-nice.1625.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Mon Feb 17 16:33:33 UTC 2020


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 <
Christoph.Thiede at student.hpi.uni-potsdam.de> a écrit :

> Hm, could you provide a rollback commit? It's very hard to revert this
> change without using any tools ^^
> <http://www.hpi.de/>
> ------------------------------
> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
> Auftrag von Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
> *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 <
> Christoph.Thiede at student.hpi.uni-potsdam.de> a écrit :
>
>> Is this the reason why I cannot open Browsers any longer?
>>
>>
>>
>> <http://www.hpi.de/>
>> ------------------------------
>> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
>> Auftrag von Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>
>> *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, <commits at source.squeak.org> 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 at 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).
>>>                 ].
>>>         ].!
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200217/a2313eab/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pastedImage.png
Type: image/png
Size: 46687 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200217/a2313eab/attachment-0001.png>


More information about the Squeak-dev mailing list