[squeak-dev] The Trunk: Morphic-nice.1625.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Mon Feb 17 16:16:04 UTC 2020
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/80dff426/attachment.html>
More information about the Squeak-dev
mailing list
|