Squeak: Creating new SystemWindow

It’s very easy to get started with Squeak/Smalltalk. You can use Workspace and Transcript for basic programming tasks. But soon you need your own user interface, and it’s good to get started with the SystemWindow object in this case.

Here is some Smalltalk code that can help you create and display a SystemWindow.


window := SystemWindow new.
window setLabel:'New Window'.
pasteUpMorph := PasteUpMorph new.
pasteUpMorph extent: 640@480.
window addMorph: pasteUpMorph frame: (0@0 corner: 1@1).
window openInWorld.


Here is another code example with scrollPane.

window := SystemWindow new.
scrollPane := ScrollPane new.
pasteUpMorph := PasteUpMorph new.
pasteUpMorph extent: 1000@1000.
scrollPane scroller addMorph: pasteUpMorph.
window addMorph: scrollPane frame: (0@0 corner: 1@1).
window openInWorld.



The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange.


A morph whose submorphs comprise a paste-up of rectangular subparts which “show through”. Anything called a ‘Playfield’ is a PasteUpMorph.

Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided.

A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld. Morph subclasses that have specialized menus (BookMorph) build them in the message addBookMenuItemsTo:hand:. A PasteUpMorph that is a world, builds its menu in HandMorph buildWorldMenu.


SystemWindow is the Morphic equivalent of StandardSystemView — a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing.

The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.