/* draw10: user interface for selecting images */ import java.net.*; import java.awt.*; import java.util.*; public class Draw10 extends Draw9 { // IMPLEMENT JUST THE USER INTERFACE FOR LOADING AND SELECTING IMAGES Item newItem() { return (Item)new Item10(); } Item10 item10(int i) { return (Item10)item[i]; } Color whiteScrim = new Color(255, 255, 255, 160); int nImgs = 0, imgAtMouse = 0; Image img[] = new Image[100]; String imgName[] = new String[100]; int rr, wr, nr, npy = 0, ipy = 0; ImageList imgList = new ImageList(); public void renderInit() { super.renderInit(); nImgs = imgList.data.length; for (int i = 0 ; i < nImgs ; i++) { String name = imgList.data[i]; //img[i] = readImage("imgs/" + name); img[i] = readImage("http://mrl.nyu.edu/~perlin/drawing/imgs/" + name); } rr = 40; wr = w / rr * rr; nr = wr / rr; npy = nImgs / nr * rr; ipy = npy; } // DRAW AN IMAGE PALETTE OVER THE BACKGROUND. // AS MOUSE GOES IN OR OUT OF POSITIONAL RANGE FOR SELECTION FROM PALETTE, // GRADUALLY ROLL THE IMAGE PALETTE ON OR OFF THE SCREEN. public void renderBg() { super.renderBg(); if (ipy < npy) for (int i = 0 ; i < nImgs ; i++) { int x = (i * rr) % wr + (w - wr)/2; int y = h - rr * (i / nr + 1) + ipy - 1; int b = i == imgAtMouse ? -1 : 3; g.drawImage(img[i], x + b, y + b, rr - b - b, rr - b - b, this); if (i == imgAtMouse) { setShadow(i); g.drawRect(x + b, y + b, rr - b - b - 1, rr - b - b - 1); } else { g.setColor(whiteScrim); g.fillRect(x + b, y + b, rr - b - b, rr - b - b); } } if (my >= h - (npy + rr)) { animating = ipy > 0; ipy = Math.max(0, ipy - (h-npy)/20); } else { animating = ipy < 3 * rr; ipy = Math.min(npy, ipy + (h-npy)/20); } } // COMPUTE WHICH IMAGE (IF ANY) IN IMAGE PALETTE IS AT THIS X,Y int imageAt(int x, int y) { if (rr == 0) return -1; x = Math.min(x, wr); x -= (w - wr) / 2; int n = x / rr + (h - y) / rr * nr; if (n < 0 || n >= nImgs) return -1; return n; } // MOUSE MOVEMENT HIGHLIGHTS THE IMAGE IN PALETTE AT THE CURSOR, IF ANY. public boolean mouseMove(Event e, int x, int y) { if (imageAt(x, y) != imgAtMouse) { imgAtMouse = imageAt(x, y); damage = true; return true; } return super.mouseMove(e, x, y); } // READ AN IMAGE FROM A URL OR FROM A LOCAL FILE Image readImage(String file) { try { if (file.length() >= 4 && file.substring(0,4).equals("http")) return getImage(new URL(file)); return Toolkit.getDefaultToolkit().getImage(new URL(getCodeBase(), file)); } catch (Exception e) { System.err.println(e); } return null; } }