<div dir="ltr">Yes, apologies.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le lun. 17 févr. 2020 à 17:19, Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_6493367463672502928divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif" dir="ltr">
<div id="gmail-m_6493367463672502928divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p>Is this the reason why I cannot open Browsers any longer?</p>
<p><br>
</p>
<p><img size="46687" id="gmail-m_6493367463672502928img621926" style="max-width: 99.9%;" src="cid:17053f1b9a5f456b1e51"><br>
</p>
<div id="gmail-m_6493367463672502928Signature">
<div id="gmail-m_6493367463672502928divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper">
<div>
<div id="gmail-m_6493367463672502928Item.MessagePartBody">
<div id="gmail-m_6493367463672502928Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="gmail-m_6493367463672502928divtagdefaultwrapper"><font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="gmail-m_6493367463672502928Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" rel="noopener noreferrer" id="gmail-m_6493367463672502928LPNoLP" target="_blank"><font size="2"><span id="gmail-m_6493367463672502928LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_6493367463672502928divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>> im Auftrag von Nicolas Cellier <<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>><br>
<b>Gesendet:</b> Montag, 17. Februar 2020 17:16:04<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] The Trunk: Morphic-nice.1625.mcz</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>Oups, sorry, this was for inbox!</div>
<div>Let me repair that if I can...<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Le lun. 17 févr. 2020 à 17:07, <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>> a écrit :<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-nice.1625.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/trunk/Morphic-nice.1625.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-nice.1625<br>
Author: nice<br>
Time: 17 February 2020, 5:06:10.606532 pm<br>
UUID: 094e2566-ddfe-2340-8fab-2338d255e164<br>
Ancestors: Morphic-mt.1624<br>
<br>
Free our mind from un-initialized LayoutFrame. There should not be any such thing.<br>
<br>
Require Graphics-nice.425<br>
<br>
=============== Diff against Morphic-mt.1624 ===============<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----<br>
addMorph: aMorph fullFrame: aLayoutFrame<br>
"Add aMorph according to aLayoutFrame."<br>
<br>
self cellGap > 0 ifTrue: [<br>
| left right bottom top spacing |<br>
<br>
spacing := self cellGap.<br>
+ left := aLayoutFrame leftOffset.<br>
+ right := aLayoutFrame rightOffset.<br>
- left := aLayoutFrame leftOffset ifNil: [0].<br>
- right := aLayoutFrame rightOffset ifNil: [0].<br>
<br>
+ bottom := aLayoutFrame bottomOffset.<br>
+ top := aLayoutFrame topOffset.<br>
- bottom := aLayoutFrame bottomOffset ifNil: [0].<br>
- top := aLayoutFrame topOffset ifNil: [0].<br>
<br>
"Add a spacing to the frame if it is not top or leftmost."<br>
aLayoutFrame leftFraction = 0<br>
ifFalse: [left := left + spacing]<br>
ifTrue: [<br>
"Expect another, resizable widget besides me if I have a fixed width."<br>
aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].<br>
aLayoutFrame topFraction = 0<br>
ifFalse: [top := top + spacing]<br>
ifTrue: [<br>
"Expect another, resizable widget besides me if I have a fixed height."<br>
aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].<br>
<br>
aLayoutFrame<br>
topOffset: top;<br>
bottomOffset: bottom;<br>
leftOffset: left;<br>
rightOffset: right].<br>
<br>
super addMorph: aMorph fullFrame: aLayoutFrame.<br>
<br>
self wantsPaneSplitters ifTrue: [self addPaneSplitters].!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addPaneHSplitterAtBottomOfRow: (in category 'resize handling') -----<br>
addPaneHSplitterAtBottomOfRow: someMorphs<br>
<br>
| targetY minX maxX splitter |<br>
targetY := someMorphs first layoutFrame bottomFraction.<br>
<br>
minX := (someMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.<br>
maxX := (someMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.<br>
<br>
splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.<br>
splitter layoutFrame: (LayoutFrame<br>
fractions: (minX @ targetY corner: maxX @ targetY)<br>
+ offsets: (someMorphs first layoutFrame leftOffset @ 0 <br>
+ corner: someMorphs first layoutFrame rightOffset @ AbstractResizerMorph gripThickness)).<br>
- offsets: ((someMorphs first layoutFrame leftOffset ifNil: [0]) @ 0
<br>
- corner: (someMorphs first layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)).<br>
<br>
self addMorphBack: (splitter position: self position).!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>addPaneVSplitterAtRightOfColumn: (in category 'resize handling') -----<br>
addPaneVSplitterAtRightOfColumn: someMorphs<br>
<br>
| targetX minY maxY splitter |<br>
targetX := someMorphs first layoutFrame rightFraction.<br>
<br>
minY := (someMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.<br>
maxY := (someMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.<br>
<br>
splitter := ProportionalSplitterMorph new beSplitsLeftAndRight; yourself.<br>
splitter layoutFrame: (LayoutFrame<br>
fractions: (targetX @ minY corner: targetX @ maxY)<br>
+ offsets: (0 @ (someMorphs first layoutFrame topOffset)<br>
+ corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset)))).<br>
- offsets: (0 @ (someMorphs first layoutFrame topOffset ifNil: [0])<br>
- corner: (AbstractResizerMorph gripThickness@ (someMorphs first layoutFrame bottomOffset ifNil: [0])))).<br>
<br>
self addMorphBack: (splitter position: self position).!<br>
<br>
Item was changed:<br>
----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----<br>
linkSubmorphsToSplitters<br>
<br>
self splitters do: [:splitter |<br>
splitter splitsTopAndBottom ifTrue: [<br>
self submorphsDo: [:morph |<br>
((morph ~= splitter<br>
and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])<br>
and: [morph layoutFrame hasFixedHeight not<br>
+ or: [(morph layoutFrame topOffset) < 0]])<br>
- or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])<br>
ifTrue: [splitter addLeftOrTop: morph].<br>
((morph ~= splitter<br>
and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])<br>
and: [morph layoutFrame hasFixedHeight not<br>
+ or: [(morph layoutFrame bottomOffset) > 0]])<br>
- or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])<br>
ifTrue: [splitter addRightOrBottom: morph]]].<br>
splitter splitsLeftAndRight ifTrue: [<br>
self submorphsDo: [:morph |<br>
((morph ~= splitter<br>
and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])<br>
and: [morph layoutFrame hasFixedWidth not<br>
+ or: [(morph layoutFrame leftOffset) < 0]])<br>
- or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])<br>
ifTrue: [splitter addLeftOrTop: morph].<br>
((morph ~= splitter <br>
and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])<br>
and: [morph layoutFrame hasFixedWidth not<br>
+ or: [(morph layoutFrame rightOffset) > 0]])<br>
- or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])<br>
ifTrue: [splitter addRightOrBottom: morph]]]]!<br>
<br>
Item was changed:<br>
----- Method: ProportionalSplitterMorph>>balanceOffsets (in category 'events') -----<br>
balanceOffsets<br>
<br>
| fdx fdy |<br>
<br>
(self hasProperty: #fullDelta) ifFalse: [^ self].<br>
<br>
fdx := (self valueOfProperty: #fullDelta) x.<br>
fdy := (self valueOfProperty: #fullDelta) y.<br>
<br>
self layoutFrame hasFixedHeight ifTrue: [<br>
| otop obot ctop cbot topf |<br>
<br>
otop := (owner submorphs detect: [:m | <br>
m layoutFrame topFraction isZero] ifNone: [^ self]) in: [:tm |
<br>
+ tm top - (tm layoutFrame topOffset)].<br>
- tm top - (tm layoutFrame topOffset ifNil: [0])].<br>
<br>
obot := (owner submorphs detect: [:m | <br>
m layoutFrame bottomFraction = 1] ifNone: [^ self]) in: [:tm |
<br>
+ tm bottom - (tm layoutFrame bottomOffset)].<br>
- tm bottom - (tm layoutFrame bottomOffset ifNil: [0])].<br>
<br>
ctop := (self layoutFrame topFraction * (obot - otop)) rounded <br>
+ + otop + (self layoutFrame topOffset).<br>
- + otop + (self layoutFrame topOffset ifNil: [0]).<br>
cbot := (self layoutFrame bottomFraction * (obot - otop)) rounded
<br>
+ + otop + (self layoutFrame bottomOffset).<br>
- + otop + (self layoutFrame bottomOffset ifNil: [0]).<br>
<br>
topf := self layoutFrame topFraction.<br>
self layoutFrame topFraction: ((ctop + cbot) * 0.5 - otop) / (obot - otop) asFloat.<br>
self layoutFrame bottomFraction: self layoutFrame topFraction.<br>
self layoutFrame topOffset: self layoutFrame topOffset - fdy.<br>
self layoutFrame bottomOffset: self layoutFrame bottomOffset - fdy.<br>
<br>
(leftOrTop copy union: rightOrBottom) do: [:m |<br>
(m layoutFrame topFraction closeTo: topf) ifTrue: [<br>
m layoutFrame topFraction: self layoutFrame topFraction.<br>
m layoutFrame topOffset: m layoutFrame topOffset - fdy].<br>
(m layoutFrame bottomFraction closeTo: topf) ifTrue: [<br>
m layoutFrame bottomFraction: self layoutFrame topFraction.<br>
m layoutFrame bottomOffset: m layoutFrame bottomOffset - fdy]]] .<br>
<br>
self layoutFrame hasFixedWidth ifTrue: [<br>
| oleft oright cleft cright leftf |<br>
<br>
oleft := (owner submorphs detect: [:m | <br>
m layoutFrame leftFraction isZero] ifNone: [^ self]) in: [:tm |
<br>
+ tm left - (tm layoutFrame leftOffset)].<br>
- tm left - (tm layoutFrame leftOffset ifNil: [0])].<br>
<br>
oright := (owner submorphs detect: [:m | <br>
m layoutFrame rightFraction = 1] ifNone: [^ self]) in: [:tm |
<br>
+ tm right - (tm layoutFrame rightOffset)].<br>
- tm right - (tm layoutFrame rightOffset ifNil: [0])].<br>
<br>
cleft := (self layoutFrame leftFraction * (oright - oleft)) rounded
<br>
+ + oleft + (self layoutFrame leftOffset).<br>
- + oleft + (self layoutFrame leftOffset ifNil: [0]).<br>
cright := (self layoutFrame rightFraction * (oright - oleft)) rounded
<br>
+ + oleft + (self layoutFrame rightOffset).<br>
- + oleft + (self layoutFrame rightOffset ifNil: [0]).<br>
<br>
leftf := self layoutFrame leftFraction.<br>
self layoutFrame leftFraction: ((cleft + cright) * 0.5 - oleft) / (oright - oleft) asFloat.<br>
self layoutFrame rightFraction: self layoutFrame leftFraction.<br>
<br>
<br>
self layoutFrame leftOffset: self layoutFrame leftOffset - fdx.<br>
self layoutFrame rightOffset: self layoutFrame rightOffset - fdx.<br>
<br>
(leftOrTop copy union: rightOrBottom) do: [:m |<br>
(m layoutFrame leftFraction closeTo: leftf) ifTrue: [<br>
m layoutFrame leftFraction: self layoutFrame leftFraction.<br>
m layoutFrame leftOffset: m layoutFrame leftOffset - fdx].<br>
(m layoutFrame rightFraction closeTo: leftf) ifTrue: [<br>
m layoutFrame rightFraction: self layoutFrame leftFraction.<br>
m layoutFrame rightOffset: m layoutFrame rightOffset - fdx.]]] .<br>
<br>
self removeProperty: #fullDelta.<br>
owner layoutChanged<br>
!<br>
<br>
Item was changed:<br>
----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'events') -----<br>
repositionBy: delta<br>
| selfTop selfBottom selfLeft selfRight |<br>
<br>
self setProperty: #fullDelta toValue: ((self valueOfProperty: #fullDelta) ifNil: [0@0]) + delta.<br>
<br>
leftOrTop do:<br>
[ : each | | firstRight firstBottom firstLeft firstTop |<br>
+ firstRight := each layoutFrame rightOffset.<br>
+ firstBottom := each layoutFrame bottomOffset.<br>
- firstRight := each layoutFrame rightOffset ifNil: [ 0 ].<br>
- firstBottom := each layoutFrame bottomOffset ifNil: [ 0 ].<br>
each layoutFrame rightOffset: firstRight + delta x.<br>
each layoutFrame bottomOffset: firstBottom + delta y.<br>
each layoutFrame hasFixedHeight ifTrue: [<br>
+ firstTop := each layoutFrame topOffset.<br>
- firstTop := each layoutFrame topOffset ifNil: [ 0 ].<br>
each layoutFrame topOffset: firstTop + delta y ].<br>
each layoutFrame hasFixedWidth ifTrue: [<br>
+ firstLeft := each layoutFrame leftOffset.<br>
- firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].<br>
each layoutFrame leftOffset: firstLeft + delta x. ] ].<br>
rightOrBottom do:<br>
[ : each | | secondLeft secondTop secondRight secondBottom |<br>
+ secondLeft := each layoutFrame leftOffset.<br>
+ secondTop := each layoutFrame topOffset.<br>
- secondLeft := each layoutFrame leftOffset ifNil: [ 0 ].<br>
- secondTop := each layoutFrame topOffset ifNil: [ 0 ].<br>
each layoutFrame leftOffset: secondLeft + delta x.<br>
each layoutFrame topOffset: secondTop + delta y.<br>
each layoutFrame hasFixedHeight ifTrue: [<br>
+ secondBottom := each layoutFrame bottomOffset.<br>
- secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].<br>
each layoutFrame bottomOffset: secondBottom + delta y. ].<br>
each layoutFrame hasFixedWidth ifTrue: [<br>
+ secondRight := each layoutFrame rightOffset.<br>
- secondRight := each layoutFrame rightOffset ifNil: [ 0 ].<br>
each layoutFrame rightOffset: secondRight + delta x. ] ].<br>
<br>
+ selfTop := self layoutFrame topOffset.<br>
+ selfBottom := self layoutFrame bottomOffset.<br>
+ selfLeft := self layoutFrame leftOffset.<br>
+ selfRight := self layoutFrame rightOffset.<br>
- selfTop := self layoutFrame topOffset ifNil: [ 0 ].<br>
- selfBottom := self layoutFrame bottomOffset ifNil: [ 0 ].<br>
- selfLeft := self layoutFrame leftOffset ifNil: [ 0 ].<br>
- selfRight := self layoutFrame rightOffset ifNil: [ 0 ].<br>
self layoutFrame<br>
topOffset: selfTop + delta y ;<br>
bottomOffset: selfBottom + delta y ;<br>
leftOffset: selfLeft + delta x ;<br>
rightOffset: selfRight + delta x.<br>
self owner layoutChanged.<br>
self movements removeFirst; add: (splitsTopAndBottom ifTrue: [ delta y sign ] ifFalse: [ delta x sign ])!<br>
<br>
Item was changed:<br>
----- Method: SystemWindow>>convertAlignment (in category 'layout') -----<br>
convertAlignment<br>
"Primarily Jesse Welton's code to convert old system windows to ones with modern layout scheme"<br>
<br>
self layoutPolicy: ProportionalLayout new.<br>
(paneMorphs isNil <br>
or: [paneRects isNil or: [paneMorphs size ~= paneRects size]]) <br>
ifFalse: <br>
[self addLabelArea.<br>
self putLabelItemsInLabelArea.<br>
self setFramesForLabelArea.<br>
paneMorphs with: paneRects<br>
do: <br>
[:m :r | <br>
| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: r left;<br>
rightFraction: r right;<br>
topFraction: r top;<br>
bottomFraction: r bottom.<br>
m layoutFrame: frame.<br>
m<br>
hResizing: #spaceFill;<br>
vResizing: #spaceFill]].<br>
labelArea isNil <br>
ifTrue: <br>
[self addLabelArea.<br>
self putLabelItemsInLabelArea.<br>
self setFramesForLabelArea.<br>
paneMorphs ifNotNil: <br>
[paneMorphs do: <br>
[:m | <br>
| frame |<br>
frame := m layoutFrame ifNil: [LayoutFrame new].<br>
+ frame topOffset: (frame topOffset) - self labelHeight.<br>
- frame topOffset: (frame topOffset ifNil: [0]) - self labelHeight.<br>
frame bottomFraction ~= 1.0
<br>
ifTrue: <br>
+ [frame bottomOffset: (frame bottomOffset) - self labelHeight]]]].<br>
- [frame bottomOffset: (frame bottomOffset ifNil: [0]) - self labelHeight]]]].<br>
label ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0.5;<br>
topFraction: 0;<br>
leftOffset: label width negated // 2.<br>
label layoutFrame: frame].<br>
collapseBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
rightFraction: 1;<br>
topFraction: 0;<br>
rightOffset: -1;<br>
topOffset: 1.<br>
collapseBox layoutFrame: frame].<br>
stripes ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
topFraction: 0;<br>
rightFraction: 1;<br>
leftOffset: 1;<br>
topOffset: 1;<br>
rightOffset: -1.<br>
stripes first layoutFrame: frame.<br>
stripes first height: self labelHeight - 2.<br>
stripes first hResizing: #spaceFill.<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
topFraction: 0;<br>
rightFraction: 1;<br>
leftOffset: 3;<br>
topOffset: 3;<br>
rightOffset: -3.<br>
stripes last layoutFrame: frame.<br>
stripes last height: self labelHeight - 6.<br>
stripes last hResizing: #spaceFill].<br>
menuBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
leftOffset: 19;<br>
topFraction: 0;<br>
topOffset: 1.<br>
menuBox layoutFrame: frame].<br>
closeBox ifNotNil: <br>
[| frame |<br>
frame := LayoutFrame new.<br>
frame<br>
leftFraction: 0;<br>
leftOffset: 4;<br>
topFraction: 0;<br>
topOffset: 1.<br>
closeBox layoutFrame: frame]!<br>
<br>
Item was changed:<br>
----- Method: SystemWindow>>setPaneRectsFromBounds (in category 'geometry') -----<br>
setPaneRectsFromBounds<br>
"Reset proportional specs from actual bounds, eg, after reframing panes"<br>
| layoutBounds |<br>
layoutBounds := self layoutBounds.<br>
paneMorphs do:[:m| | box left bottom top frame right |<br>
frame := m layoutFrame.<br>
box := m bounds.<br>
frame ifNotNil:[<br>
+ left := box left - layoutBounds left - frame leftOffset.<br>
+ right := box right - layoutBounds left - frame rightOffset.<br>
+ top := box top - layoutBounds top - frame topOffset.<br>
+ bottom := box bottom - layoutBounds top - frame bottomOffset.<br>
- left := box left - layoutBounds left - (frame leftOffset ifNil:[0]).<br>
- right := box right - layoutBounds left - (frame rightOffset ifNil:[0]).<br>
- top := box top - layoutBounds top - (frame topOffset ifNil:[0]).<br>
- bottom := box bottom - layoutBounds top - (frame bottomOffset ifNil:[0]).<br>
frame leftFraction: (left / layoutBounds width asFloat).<br>
frame rightFraction: (right / layoutBounds width asFloat).<br>
frame topFraction: (top / layoutBounds height asFloat).<br>
frame bottomFraction: (bottom / layoutBounds height asFloat).<br>
].<br>
].!<br>
<br>
<br>
</blockquote>
</div>
</div>
</div>
</div>
<br>
</blockquote></div>