package draw; import geometry.*; import colors.*; public class Canvas { private int width = 0; private int height = 0; /** *@author Matthias Felleisen, Kathy Gray *@param width positive int, the width of the visible canvas *@param height positive int, the height of the visible canvas */ public Canvas(int width, int height) { this.width = width; this.height = height; } // these two are cheats: protected native boolean copy(); protected native boolean stop(); // I need to figure out how to accomplish these two things, especially stop, // directly at the Scheme level w/o going thru the Java layer. private boolean showing = false; /** *@return true, if it can display a white canvas *The method initializes the canvas to a white area, *enables the drawing methods, and finally displays the canvas. If it *succeeds, it produces true. Invoking the method a second *time without calling close before has no effect. */ public boolean show() { if (!showing) { xshow(); showing = true; } return true; } /** *@return true, if it can hide the canvas *The method hides the canvas and erases the current content. */ public boolean close() { xclose(); showing = false; return true; } public native boolean xshow(); public native boolean xclose(); /** *@param p the center of the circle *@param r its radius *@param c its outline color *@return true, if it can draw the circle into this canvas */ public native boolean drawCircle(Posn p, int r, IColor c); /** *@param p the center of the disk *@param r its radius *@param c its fill and outline color *@return true, if it can draw the disk into this canvas */ public native boolean drawDisk(Posn p, int r, IColor c); /** *@param p the upper left of the rectangle *@param width positive int *@param height positive int *@param c its outline color *@return true, if it can draw the rectangle into this canvas */ public native boolean drawRect(Posn p, int width, int height, IColor c); /** *@param p0 the first point on the line *@param p1 the second point on the line *@param c its color *@return true, if it can draw the line into this canvas */ public native boolean drawLine(Posn p0, Posn p1, IColor c); /** *@param p the position of the baseline of the string *@param s the message to be drawn *@return true, if it can draw the string into this canvas */ public native boolean drawString(Posn p, String s); }