// Rectangle.java Rectangle drawable object // designed to be used as a display list item in draw.java // needs Shape import java.awt.*; import java.awt.event.*; import java.io.*; public class Rectangle extends Shape { // lower left, width and height int x0, y0, width, height; boolean filled; public Rectangle(int Ax, int Ay, int Awidth, int Aheight, Color Lcolor, Color Fcolor, boolean Afilled, int Aline_width) { x0=Math.min(Ax,Ax+Awidth); y0=Math.min(Ay,Ay+Aheight); width=Math.abs(Awidth); height=Math.abs(Aheight); filled=Afilled; line_color=Lcolor; fill_color=Fcolor; line_width=Aline_width; B.xmin=Math.min(Ax,Ax+Awidth); // Bounding box for Shape.java B.xmax=Math.max(Ax,Ax+Awidth); B.ymin=Math.min(Ay,Ay+Aheight); B.ymax=Math.max(Ay,Ay+Aheight); } public Rectangle(Rectangle R) { x0=R.x0; y0=R.y0; width=R.width; height=R.height; filled=R.filled; line_color=R.line_color; fill_color=R.fill_color; line_width=R.line_width; B=R.B; } public Rectangle() { System.out.println("Rectangle() no arguments"); // immediately follow by restore !! } public void save(PrintWriter file_out, Frame_data frame_read) { //fprintf(save_file, // "Rectangle %d,%d %d,%d, %X,%X,%d,%d \n", // x0,y0,width,height, line_color.pixel, // fill_color.pixel,line_width,filled); file_out.print("rectangle "); file_out.print((x0-frame_read.xmid)+","+ (y0-frame_read.ymid)+" "); file_out.print(width+","+height+" "); file_out.print(DrawUtil.coltohex(line_color)+","+ DrawUtil.coltohex(fill_color)+","); file_out.println(line_width+","+(filled?1:0)+" "); } // end save public void restore(int ntok, String token[], Frame_data frame_read) { System.out.println("restore "+token[0]); x0 = Integer.parseInt(token[1]); x0 = x0+frame_read.xmid; y0 = Integer.parseInt(token[2]); y0 = y0+frame_read.ymid; width = Integer.parseInt(token[3]); height = Integer.parseInt(token[4]); line_color = DrawUtil.hextocol(token[5]); fill_color = DrawUtil.hextocol(token[6]); line_width = Integer.parseInt(token[7]); filled = (Integer.parseInt(token[8])==1)?true:false; B.xmin=Math.min(x0,x0+width); B.xmax=Math.max(x0,x0+width); B.ymin=Math.min(y0,y0+height); B.ymax=Math.max(y0,y0+height); System.out.println("x0="+x0+", y0="+y0+", width="+width+"height="+height); } // end restore public int obj_kind() { return Names.RECTANGLE; } // end obj_kind public void set_filled(boolean Avalue) { filled = Avalue; } // end set_filled public int move_to(int Ax0, int Ay0, int Ax1, int Ay1, int All) { if(All!=0 || (x0<=Ax0 && Ax0<=(x0+width) && y0<=Ay0 && Ay0<=(y0+height))) { x0 = x0 + (Ax1-Ax0); y0 = y0 + (Ay1-Ay0); B.xmin = B.xmin + (Ax1-Ax0); B.ymin = B.ymin + (Ay1-Ay0); B.xmax = B.xmax + (Ax1-Ax0); B.ymax = B.ymax + (Ay1-Ay0); return 1; } return 0; } // end move_to public void draw(Graphics g, int xoff_at, int yoff_at, double scale, int xmid, int ymid, int grid_spacing) { System.out.println("drawing Rectangle at x0="+x0+", y0="+y0); if(filled) { g.setColor(fill_color); g.fillRect(x0, y0, width, height); } for(int i=0; i 0) x0 += dx; if (height > 0) y0 += dy; width -= dx; height -= dy; } else if (corner == Names.MINMAX) { if (width > 0) x0 += dx; if (height <= 0) y0 += dy; width -= dx; height += dy; } else if (corner == Names.MAXMIN) { if (width <= 0) x0 += dx; if (height > 0) y0 += dy; width += dx; height -= dy; } else if (corner == Names.MAXMAX) { if (width <= 0) x0 += dx; if (height <= 0) y0 += dy; width += dx; height += dy; } do_resize_bound(startX, startY, lastX, lastY); } // end do_resize } // end class Rectangle