Kurzübersicht für das Toy-Window-System

Struktur toy-geometry

(make-point x y) => point
stellt einen Wert her, der einen Punkt oder einen Vektor repräsentiert. Der Ursprung ist dabei in der oberen linken Ecke, die Y-Achse wächst nach unten
(point+ point1 point2) => point
addiert zwei Punkte koordinatenweise.
(point+ point1 point2) => point
subtrahiert zwei Punkte koordinatenweise.
(point<? point1 point2) => boolean
vergleicht zwei Punkte koordinatenweise.
(make-rectangle x y width height) => rectangle
stellt einen Wert her, der ein Rechteck repräsentiert.
(rectangle-origin rectangle) => point
liefert den Ursprungs des Rechteck.
(rectangle-x rectangle) => int
liefert die X-Koordinate des Ursprungs des Rechtecks.
(rectangle-y rectangle) => int
liefert die Y-Koordinate des Ursprungs des Rechtecks.
(rectangle-width rectangle) => int
liefert die Breite des Rechtecks.
(rectangle-height rectangle) => int
liefert die Höhe des Rechtecks.
(point-in-rectangle? point rectangle) => boolean
testet, ob ein Punkt innerhalb eines Rechtecks liegt.
(rectangle+ rectangle point) => rectangle
liefert ein Rechteck, das gegenüber rectangle um point verschoben ist.
(rectangle- rectangle point) => rectangle
liefert ein Rechteck, das gegenüber rectangle um -point verschoben ist.
(rectangle-within rectangle1 rectangle2) => rectangle
liefert ein Rechteck der Größe von rectangle2, das ggf. verschoben ist, um so gut wie möglich innerhalb von rectangle1 zu passen.

Struktur toy-display-system

Bitmaps

Die Mal-Prozeduren nehmen jeweils ein raster-op-Argument. Dies kann eins der Symbole copy, xor, or, and, clear und set sein, womit jeweils eine logische Verknüpfung zwischen Quelle (bei den einfach Mal-Prozeduren 1) und Ziel gemeint ist

(make-bitmap bitmap rectangle) => bitmap
erzeugt eine neue Bitmap auf dem Schirm, die ein Kind von bitmap ist und sich im Rechteck Rechteck (relativ zu bitmap) befindet. Die Bitmap ist dabei zunächst unter den Kindern von bitmap (den "Geschwistern") ganz vorn.
(bitmap-to-front! bitmap)
rückt bitmap unter den Geschwistern ganz nach vorn.
(bitmap-to-back! bitmap)
rückt bitmap unter den Geschwistern ganz nach hinten.
(bitmap-move! bitmap point)
verschiebt bitmap (relativ) um point.
(bitmap-delete! bitmap)
löscht die Bitmap bitmap.
(bitmap-clear bitmap)
löscht den Inhalt von bitmap.
(bitmap-draw-line bitmap raster-op point1 point2)
zeichnet eine Linie von point1 nach point2.
(bitmap-draw-rectangle bitmap raster-op rectangle)
zeichnet ein Rechteck, das gegenüber rectangle nach rechts und unten um einen Punkt größer ist.
(bitmap-fill-rectangle bitmap raster-op texture rectangle)
füllt ein Rechteck der Größe von rectangle mit der Textur texture. Die (für den Moment) einzig sinnvolle Textur ist texture-solid.
(bitmap-bitblt bitmap1 raster-op point1 bitmap2 rectangle1)
kopiert ein Rechteck aus bitmap2 der Größe von rectangle1 nach bitmap2 an die Stelle point1.
(bitmap-draw-text bitmap raster-op point text)
malt den Text text an die Stelle point. Dabei ist point links und auf der Höhe der Basislinie.
(bitmap-text-size bitmap text) => width height ascent
ermittelt die Größe des Texts text. Dabei ist ascent die Höhe des Texts oberhalb der Basislinie.

Initialisierung

(make-display label width height) => bitmap mouse-channel keyboard-channel
initialisiert das Display-System, erzeugt ein X-Fenster der Breite width und der Höhe height mit Titel label und liefert eine Bitmap für das gesamte Fenster sowie Kanäle für Maus- und Tastatur-Ereignisse zurück.

Maus-Messages

(mouse-message-up? message) => boolean
stellt fest, ob der Mausknopf oben ist.
(mouse-message-down? message) => boolean
stellt fest, ob der Mausknopf unten ist.
(mouse-message-position message) => point
liefert die Position der Maus zurück.
(mouse-message-translate point message) => mouse-message
transformiert die Positionskoordinaten von message relativ zu point

Struktur toy-window-system

(make-widget-env bitmap mouse-channel keyboard-channel control-in-channel control-out-channel) => widget-env
liefert ein Widget-Environment. Alle Kanäle bis auf control-out-channel sind synchron, nur control-out-channel ist asynchron.
(make-vanilla-widget-env bitmap) => widget-env
erzügt ein Widget-Environment mit frischen Kanälen.
(widget-env-bitmap widget-env) => bitmap
liefert die Bitmap eines Widget-Environments.
(widget-env-mouse-channel widget-env) => channel
liefert die Maus-Kanal eines Widget-Environments.
(widget-env-keyboard-channel widget-env) => channel
liefert die Tastatur-Kanal eines Widget-Environments.
(widget-env-control-in--channel widget-env) => channel
liefert den Kontroll-Eingangs-Kanal eines Widget-Environments.
(widget-env-control-out--channel widget-env) => async-channel
liefert den Kontroll-Ausgangs-Kanal eines Widget-Environments.
(make-channel-sink channel)
stellt einen Abfluß für channel her, der alle ankommenden Werte abholt und wegwirft.
(realize-widget bitmap rectangle realization-proc => value
erzeugt ein frisches Widget-Environment innerhalb der Eltern-Bitmap bitmap an Position rectangle und übergibt dieses an realization-proc. Dessen Rückgabewert gibt auch realize-widget zurück.
(make-window-system label width height)
initialisiert das Window-System (ruft also make-display auf), erzeugt ein initiales Widget-Environment für das gesamte Fenster und gibt dieses zurück.

Struktur toy-button

(make-button label thunk widget-env) => widget-env
stellt innerhalb von widget-env einen Knopf mit Beschriftung label her; bei Betätigung wird thunk aufgerufen.

Struktur toy-frame

(make-frame realize widget-env) => frame value
malt innerhalb von widget-env einen Rahmen um ein anderes Widget, an das es alle Nachrichten weitergibt. Das andere Widget muß von realize erzeugt werden, das als Parameter ein eigenes Widget-Environment übergeben bekommt. Zurückgegeben werden ein Wert, der das Frame repräsentiert, sowie der Rückgabewert von realize.

Michael Sperber [Mr. Preprocessor]
Last modified: Wed Jun 19 09:49:46 MST 2002