/* Item8: text items */ import java.awt.*; public class Item8 extends Item7 { String text = ""; FontMetrics fontMetrics; // DRAW A TEXT ITEM IN HELVETICA FONT. // MAKE A THICK SHADOW, OUTLINE OR HALO BY SUCCESSIVE OVERDRAWING WITH X,Y OFFSETS. public void draw(Graphics g, int x, int y, int r) { if (text.length() > 0) { int b = 0; fontMetrics = g.getFontMetrics(g.getFont()); int w = fontMetrics.stringWidth(text); Color color = g.getColor(); if (highlight) { b = thicken ? 8 : 6; if (color != shadowColor) g.setColor(Color.white); for (int i = -b ; i <= b ; i++) for (int j = -b ; j <= b ; j++) if (i*i + j*j <= b*b) g.drawString(text, x + x0 - w/2 + i, y + y0 + 16 + j); } if (color != shadowColor) g.setColor(color == Color.white ? faintColor : Color.black); b = thicken ? 4 : 2; for (int i = -b ; i <= b ; i++) for (int j = -b ; j <= b ; j++) if (i*i + j*j <= b*b) g.drawString(text, x + x0 - w/2 + i, y + y0 + 16 + j); g.setColor(color); g.drawString(text, x + x0 - w/2, y + y0 + 16); } else super.draw(g, x, y, r); } // HIT TESTING FOR A TEXT ITEM REQUIRES MEASURING STRING WIDTH IN THIS FONT. public boolean contains(int x, int y) { if (text.length() > 0) { if (fontMetrics == null) return false; int w = fontMetrics.stringWidth(text); return x >= x0-w/2 && x < x0+w/2 && y >= y0-8 && y < y0+22; } else return super.contains(x, y); } }