diff --git a/teachpack/htdc/Docs/draw.thtml b/teachpack/htdc/Docs/draw.thtml
index 984812c36c..9da6301966 100644
--- a/teachpack/htdc/Docs/draw.thtml
+++ b/teachpack/htdc/Docs/draw.thtml
@@ -1,7 +1,7 @@
{ (define LIBNAME "A Functional Drawing Library (HtDC)")
(include "head.tinc") }
-This `draw' package provides classes and methods for a visual
+This draw
package provides classes and methods for a visual
world. Here is its class diagram of public fields and methods:
@@ -11,9 +11,9 @@ world. Here is its class diagram of public fields and methods:
| Canvas theCanvas |------>| Canvas |
+-----------------------------------+ +---------------------------------------+
| boolean bigBang(int,int,double) | +---------------------------------------+
- | boolean endOfTime() | | boolean start(int,int) |
- | boolean endOfWorld() | | boolean stop() |
- | World lastWorld() | | boolean drawCircle(Posn,int,Color) |
+ | boolean endOfTime() | | boolean show() |
+ | World endOfWorld() | | boolean close() |
+ | | | boolean drawCircle(Posn,int,Color) |
| | | boolean drawDisk(Posn,int,Color) |
| abstract World onTick() | | boolean drawRect(Posn,int,int,Color) |
| abstract World onKeyEvent(String) | | boolean drawLine(Posn,Posn,Color) |
@@ -46,4 +46,125 @@ world. Here is its class diagram of public fields and methods:
+
+The abstract World
class exports the following methods:
+
bigBang(width,height,speed)
, which initializes the world,
+associates it with a width
x height
Canvas
, displays
+this canvas, and finally starts the clock at a rate of one tick per
+speed
seconds. If it succeeds with all of its actions, the method
+produces true
.
+
+A World
is associated with one default Canvas
,
+called theCanvas
. If a World
needs additional
+canvases for its graphical presentation, its concrete subclasses must add
+those.
endOfTime
, stops the clock and, if it succeeds, produces
+true
.
+endOfWorld
, stops the clock and, if it succeeds, produces the
+last World
.
+A derived concrete class must supply definitions for the following methods: +
onTick()
, which is invoked for every tick of the clock. Its
+purpose is to create a World
whose differences with
+this
one represent what happened during the amount of time it takes
+the clock to tick.
+onKeyEvent(key)
, which is invoked for every keyboard event. Its
+purposes is to create a World
whose differences with
+this
one represent what happens due to the user's use of the
+keyboard. The latter is represented with the string-valued argument
+key
.
+draw()
, which is invoked after one of the two event
+handlers has been called. Its purpose is to present this World
+graphically on its canvas. If it succeeds, its result is true.
+erase()
, which is invoked after one of the two event
+handlers has been called. Its purpose is to erase this World
's
+canvas, as much as needed. If it succeeds, its result is true.
+World
. If it does, the event handlers are called in a unpredictable
+order.
+
+
+To create an instance of the Canvas
class, a program must supply
+two int
values: one for the width of the canvas and one for its
+height. The canvas is a rectangle, whose borders are parallel to the computer
+screen's borders. A program can use the following methods on instances of
+Canvas:
+
show()
, which displays the canvas.
+If it succeeds, it produces true
.close()
, which destroys the canvas.
+If it succeeds, it produces true
.drawCircle(p,r,c)
, which draws a circle on this
+Canvas
at p
with radius r
and color
+c
. If it succeeds, it produces true
.drawDisk(p,r,c)
, which draws a disk on
+this Canvas
at p
with radius r
and color
+c
. If it succeeds, it produces true
.drawRect(p,w,h, c)
, which draws a solid rectangle on this
+Canvas
at p
with width w
, height
+h
, and color c
. The rectangle's lines are parallel to
+the canvas's borders. If it succeeds, it produces true
.drawLine(p0,p1,c)
, which draws a line on this
+Canvas
from p0
to p1
using color
+c
. If it succeeds, it produces true
.drawString(p,s)
, which draws the string s
at
+p
on this Canvas
. If it succeeds, it produces
+true
.clearCircle(p,r,c)
, which erases a circle from this
+Canvas
at p
with radius r
and color
+c
. If it succeeds, it produces true
.clearDisk(p,r,c)
, which erases a disk from
+this Canvas
at p
with radius r
and color
+c
. If it succeeds, it produces true
.clearRect(p,w,w,c)
, which draws a solid rectangle from this
+Canvas
at p
with width w
, height
+h
, and color c
. The rectangle's lines are parallel to
+the canvas's borders. If it succeeds, it produces true
.clearLine(Posn p0, Posn p1, Color c)
, which erases a line from this
+Canvas
from p0
to p1
using color
+c
. If it succeeds, it produces true
.To create an instance of the Posn
class, a program must supply
+two int
values: one for its x coordinate of the canvas and the
+second for its y coordinate.
The Color
class is abstract. Its variants (subclasses) are
+created with no arguments.
+
idraw
package provides stateful classes and imperative methods
+for a visual world. Here is its class diagram of public fields and methods:
+import draw.Color;
+import draw.Posn;
+
+---------------------------------+
| abstract World |
+---------------------------------+ +------------------------------------+
@@ -25,28 +28,18 @@ a visual world. Here is its class diagram of public fields and methods:
| void clearRect(Posn,int,int,Color) |
| void clearLine(Posn,Posn,Color) |
+------------------------------------+
-
- +----------+
- | Posn |
- +----------+
- | int x |
- | int y |
- +----------+
-
- +-------+
- | Color |
- +-------+
- |
- / \
- ---
- |
- ------------------------------------------
- | | | | |
- +-------+ +-------+ +-------+ +-------+ +-------+
- | Blue | | Green | | Red | | White | | Yellow|
- +-------+ +-------+ +-------+ +-------+ +-------+
-
+The abstract World
class in idraw
provides the same
+methods as the World
class in the
+draw
library. Their return values are usually void
,
+however, except for endOfTime
and endOfWorld
, which
+continue to return the last world.
In an analogous manner, the methods in the Canvas
class export
+the same methods as the Canvas
class in the draw
package. Their return values,
+however, are void
.