/* @author j.n.magee 14/08/98 */ package concurrency.supwork; import java.awt.*; import java.applet.*; /**************************************************************/ class SupervisorCanvas extends Canvas { String title_; Font f1 = new Font("Helvetica",Font.ITALIC+Font.BOLD,24); Font f2 = new Font("Helvetica",Font.BOLD,18); final static int Nslice = 32; // number of curve slices boolean drawSlice[] = new boolean[Nslice]; Color colorSlice [] = new Color[Nslice]; double area = 0.0; Function func = null; private final int Xmax = 256; private final int Ymax = 200; private final int delta = Xmax/Nslice; public SupervisorCanvas(String title, Color c) { super(); setSize(Xmax+50,Ymax+100); title_=title; setBackground(c); for (int i=0; i12) as = as.substring(0,12); w = fm.stringWidth(as); h = fm.getHeight(); int x1 = (size().width - w)/2; int y1 = y+Ymax+h; offgraphics.drawString(as, x1, y1+25); offgraphics.drawString("0.0",x-fm.stringWidth("0.0")/2,y1+20); offgraphics.drawString("1.0",x+Xmax-fm.stringWidth("1.0")/2,y1+20); g.drawImage(offscreen, 0, 0, null); } private void drawFunction(Graphics g, int X, int Y) { g.setColor(Color.white); g.fillRect(X,Y,Xmax,Ymax); //draw ruler g.setColor(Color.black); g.drawLine(X-1,Y,X-1,Y+Ymax); g.drawLine(X-2,Y,X-2,Y+Ymax); g.drawLine(X,Y+Ymax,X+Xmax,Y+Ymax); g.drawLine(X,Y+Ymax+1,X+Xmax,Y+Ymax+1); for (int i=X;i<=Xmax+X;i+=32) g.drawLine(i,Y+Ymax,i,Y+Ymax+5); if (func==null) return; double scaleY = Ymax/Math.max(func.fn(1.0),func.fn(0.0)); double deltaX = 1.0/Xmax; //draw computed areas for (int i = 0; i