/* draw6: color palette; drag color onto items. */ import java.awt.*; public class Draw6 extends Draw5 { Item newItem() { return (Item)(new Item6()); } Item6 item6(int i) { return (Item6)item[i]; } int drawingColor = 0; boolean isDraggingColor = false; // ADD A COLOR PALETTE Color palette[] = { Item6.defaultColor, new Color(255, 0,100), new Color(255,128, 0), new Color(255,255, 0), new Color( 0,255, 0), new Color( 0,160,255), new Color(220, 0,255), bgColor(), }; int paletteX(int i) { return 20 + 20 * i; } // RE-INITIALIZING ALSO INITIALIZES THE DRAWING COLOR public void clear() { drawingColor = 0; super.clear(); } public void drawItem(int i) { item6(i).draw(g, palette); } // DRAW THE PALETTE BEFORE DRAWING ANY ITEMS public void renderFg() { for (int i = 0 ; i < palette.length ; i++) { int r = i == drawingColor ? 10 : 7; g.setColor(palette[i] == bgColor() ? Item6.faintColor : Color.black); g.fillOval(paletteX(i) - r , 20 - r , 2*r , 2*r ); g.setColor(palette[i]); g.fillOval(paletteX(i) - r+2, 20 - r+2, 2*r-4, 2*r-4); } for (int i = 0 ; i < nItems ; i++) if (i != iSelected && item6(i).color == palette.length-1) drawItem(i); for (int i = 0 ; i < nItems ; i++) if (i != iSelected && item6(i).color != palette.length-1) drawItem(i); for (int i = 0 ; i < nItems ; i++) if (i == iSelected) drawItem(i); //super.renderFg(); if (isDraggingColor) { g.setColor(palette[drawingColor]); g.fillOval(mx - 8, my - 8, 16, 16); } } // CHECK FOR MOUSE-DOWN OVER THE COLOR PALETTE public boolean mouseDown(Event e, int x, int y) { damage = true; isDraggingColor = false; for (int i = 0 ; i < palette.length ; i++) { int dx = paletteX(i) - x; int dy = 20 - y; if (dx * dx + dy * dy < 8 * 8) { drawingColor = i; isDraggingColor = true; } } if (isDraggingColor) return true; // IF ADDING A NEW ITEM, SET THE NEW ITEM'S COLOR TO THE DRAWING COLOR int nItemsPrevious = nItems; super.mouseDown(e, x, y); if (nItems > nItemsPrevious) setColor(nItems-1); return true; } // MAYBE DRAG A COLOR FROM THE PALETTE TO AN ITEM public boolean mouseDrag(Event e, int x, int y) { damage = true; if (isDraggingColor) { mx = x; my = y; thickenItemAt(x, y); return true; } return super.mouseDrag(e, x, y); } // DRAGGING A COLOR INTO AN ITEM CHANGES THE ITEM'S COLOR public boolean mouseUp(Event e, int x, int y) { damage = true; if (isDraggingColor) { isDraggingColor = false; setColor(itemAt(x, y)); return true; } return super.mouseUp(e, x, y); } public void setColor(int i) { if (i >= 0) item6(i).setColor(drawingColor); } boolean isColorKey = false; // TO SET DRAWING COLOR, USER CAN DO KEY SEQUENCE: CNTRL-C DIGIT public boolean keyUp(Event e, int key) { if (key == 3) { isColorKey = true; return true; } if (isColorKey && key >= '1' && key < '1' + palette.length) { drawingColor = key - '1'; for (int i = 0 ; i < nItems ; i++) if (item6(i).contains(mx,my)) setColor(i); damage = true; return true; } isColorKey = false; return super.keyUp(e, key); } }