June 28, 2006
Dieses Dokument beschreibt die API der Implementierung des ConcurrentML Toy-Window-Systems [cite{Reppy1999}] f?r Scheme 48 und Scsh.
(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.
Ein Parameter mit dem Namen raster-op bezeichnet eine logische Verkn?pfungsoperation zwischen den Pixeln der Quelle und des Ziels. Die m?glichen Operationen werden durch die Symbole copy, xor, or, and, clear und set.
(make-bitmap bitmap rectangle) => bitmap
erzeugt eine neue Bitmap auf dem Schirm, die ein Kind von bitmap ist und sich im Rechteck rectangle (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 bitmap1 der Gr??e von rectangle1 nach bitmap2 an die Stelle point1. Quelle und Ziel werden mit raster-op verkn?pft.
(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 Textes text. Dabei ist ascent die H?he des Textes oberhalb der Basislinie.
(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 synchrone Kan?le f?r Maus- und Tastatur-Ereignisse zur?ck.
(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
(key-message-down? message) => boolean
stellt fest, ob die Taste unten ist.
(key-message-keycode message) => integer
liefert den X11-Keycode der Taste.
(key-message-string message) => string
liefert den String f?r die gedr?ckte Taste oder einen leeren String f?r Steuertasten.
(make-widget-env bitmap mouse-channel keyboard-channel
control-in-channel
control-out-channel) => widget-env
liefert ein Widget-Environment. Control-out-channel ist ein asynchroner Kanal, die restlichen Kan?le sind synchron.
(make-vanilla-widget-env bitmap) => widget-env
erzeugt 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 den Maus-Kanal eines Widget-Environments.
(widget-env-keyboard-channel widget-env) => channel
liefert den 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 den synchronen Kanal 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) => widget-env
initialisiert das Window-System (ruft also make-display auf), erzeugt ein initiales Widget-Environment f?r das gesamte Fenster und gibt dieses zur?ck.
(control-message? thing) => boolean
?berpr?ft ob thing ein Control-Message-Record ist.
(control-message-type ctrl-msg) => symbol)
Liefert den Typ einer Kontroll-Nachricht als Symbol zur?ck. Da es bisher nur einen Typ Kontroll-Nachrichten gibt (f?r das L?schen eines Widgets), gibt diese Funktion immer 'delete zur?ck.
(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.
(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.