links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
Last updated at 4:20 pm UTC on 5 April 2020

How does layout work in Morphic?

Laying out usually occurs when the size or position of a Morph is changed, althought there are other possible reasons. As this happens in the event processing stage of a UI cycle, the Morphs are only marked to be relaid in the layout stage. This is done via Morph method layoutChanged. This should not be confused with changed method of MVC UI.

Then, in the drawing stage, WorldState@displayWorld:submorphs: calls fullBounds to each submorph.
fullBounds "CODE STRIPPED!!!"
	"Return the bounding box of the receiver and all its children. Recompute the layout if necessary."
	fullBounds ifNotNil:[^fullBounds].
	self doLayoutIn: self layoutBounds
As you can see, if the layout wasn't changed, fullBounds is not nil, so nothing happens. If it was nil,
doLayoutIn: is sent to self.
doLayoutIn: layoutBounds "CODE STRIPPED!!!"
	"Compute a new layout based on the given layout bounds."
	| layout box priorBounds |
	submorphs do: [:m | m ownerChanged].
	layout := self layoutPolicy.
	layout layout: self in: layoutBound].
	fullBounds := self privateFullBounds.

Layout types

The actual laying out can be done several ways;

See also