/* Item11: rendering, hit-testing, and I/O for image items */ import java.awt.*; import java.util.*; public class Item11 extends Item10 { Image image = null; String imageName = ""; int ix = 0, iy = 0; Draw11 parent; // ADD IMAGE ITEM CASE TO THE DRAW ROUTINE public void draw(Graphics g, Color palette[]) { if (image != null) draw(g, 0, 0, thicken ? 2*r : r); else super.draw(g, palette); } // MUST TAKE CARE OF DROP-SHADOW, BLACK OUTLINE, LINK-ITEM HIGHLIGHTING, AND WHITE HALO. public void draw(Graphics g, int x, int y, int r) { if (image != null) { boolean isShadow = g.getColor() == shadowColor; int xx = x0 + ix + x - 50; int yy = y0 + iy + y - 50; int x1 = xx - (r+1)/2; int y1 = yy - (r+1)/2; int xd = 100 + r + (r%2); int yd = 100 + r + (r%2); if (isShadow) { int b = thicken ? r / 4 : 0; if (highlight) g.fillRoundRect(x1 - b, y1 - b, xd + 2*b, yd + 2*b, 2*r/3, 2*r/3); else g.fillRect(x1, y1, xd, yd); } else if (highlight) { int b = thicken ? r / 2 : r; g.setColor(Color.white); g.fillRoundRect(x1 - b, y1 - b, xd + 2*b, yd + 2*b, 2*b, 2*b); g.setColor(Color.black); g.fillRect(x1, y1, xd, yd); g.drawImage(image, xx + 25, yy + 25, 50, 50, parent); } else { g.setColor(Color.black); g.fillRect(x1, y1, xd, yd); g.drawImage(image, xx, yy, parent); } } else super.draw(g, x, y, r); } // HIT-TESTING FOR AN IMAGE ITEM. public boolean contains(int x, int y) { if (image != null) return x >= x0 + ix - 50 && x < x0 + ix + 50 && y >= y0 + iy - 50 && y < y0 + iy + 50; else return super.contains(x, y); } // EXTEND FILE READING AND WRITING TO HANDLE THE FIELDS OF AN IMAGE ITEM. public String fieldsToString() { return super.fieldsToString() + " image " + "\"" + imageName + "\"\n" + " ix " + ix + "\n" + " iy " + iy + "\n" ; } public void parseField() { if (token.equals("image") && (imageName = parseStr()).length() > 0) image = parent.readImage(imageName); else if (token.equals("ix")) ix = parseInt(); else if (token.equals("iy")) iy = parseInt(); else super.parseField(); } public void parse(StringTokenizer st, Item item[]) { super.parse(st, item); System.err.println("imageName = |" + imageName + "|"); } }