Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 3rd Edition (Vita Nuova)

Media Vault

Software Library

Restoration Projects

Artifacts Sought

DRAW-SCREEN(2)

NAME

Screen − type to define the data structures for the windows on a display, or subwindows within a window

SYNOPSIS

include"draw.m";
draw := load Draw Draw->PATH;
 Screen: adt
{
  id:        int;
  image:     ref Image;
  fill:      ref Image;
  allocate:  fn(image, fill: ref Image, public: int):   ref Screen;
  newwindow: fn(screen: self ref Screen, r: Rect):      ref Image;
  top:       fn(screen: self ref Screen, wins: array of ref Image);
};

DESCRIPTION

A ­Screen is the data structure representing a set of windows visible on a particular ­Image such as the display or a parent window. 

­id When a ­Screen object is allocated (see ­allocate below), the system assigns it a unique integer, id.  It may be declared “public” and accessible to arbitrary processes and machines with access to the screen’s Display.  The ­id value may be used as an argument to Display.publicscreen; see draw-display(2).

­fill When windows are deleted from a screen, the system uses the ­fill image to repaint the screen’s base image. 

­image The image upon which the windows appear. 

allocate(image, fill, public)
­Allocate makes a new ­Screen object.  The ­image argument provides the base image on which the windows will be made.  The ­fill argument provides the ­Screen.fill image.  ­Allocate does not affect the contents of image; it may be necessary after allocation to paint the base image with fill. 

Using a non-zero ­public argument allocates a public screen; zero requests a private screen.  Public screens may be attached by any process on any machine with access to the ­Display upon which the screen is allocated, enabling remote processes to create windows on the screen.  Knowing only the ­id field of the original Screen, the remote process can call the ­Display.publicscreen function to acquire a handle to the screen.  The ­image and ­fill fields of a ­Screen obtained this way are nil, but they are not needed for ordinary window management. 

screen.newwindow(r)
Allocates a window on the display at the specified rectangle; the return value is an ­Image that may be used like any other. 

screen.top(wins)
­Top organizes a group of windows on a screen.  Given wins, an array of window images, it places the ­wins[0] element at the top, ­wins[1] behind that, and so on, with the last element of ­wins in front of the all the windows on the screen not in wins. Images in the array must be on the specified ­screen (nil elements are ignored). 

Plan 9  —  June 29, 2000

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026