|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package javax.swing; |
|
|
|
import java.awt.*; |
|
import java.awt.image.*; |
|
import java.text.AttributedCharacterIterator; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class DebugGraphics extends Graphics { |
|
Graphics graphics; |
|
Image buffer; |
|
int debugOptions; |
|
int graphicsID = graphicsCount++; |
|
int xOffset, yOffset; |
|
private static int graphicsCount = 0; |
|
private static ImageIcon imageLoadingIcon = new ImageIcon(); |
|
|
|
|
|
public static final int LOG_OPTION = 1 << 0; |
|
|
|
public static final int FLASH_OPTION = 1 << 1; |
|
|
|
public static final int BUFFERED_OPTION = 1 << 2; |
|
|
|
public static final int NONE_OPTION = -1; |
|
|
|
static { |
|
JComponent.DEBUG_GRAPHICS_LOADED = true; |
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
public DebugGraphics() { |
|
super(); |
|
buffer = null; |
|
xOffset = yOffset = 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public DebugGraphics(Graphics graphics, JComponent component) { |
|
this(graphics); |
|
setDebugOptions(component.shouldDebugGraphics()); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public DebugGraphics(Graphics graphics) { |
|
this(); |
|
this.graphics = graphics; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Graphics create() { |
|
DebugGraphics debugGraphics; |
|
|
|
debugGraphics = new DebugGraphics(); |
|
debugGraphics.graphics = graphics.create(); |
|
debugGraphics.debugOptions = debugOptions; |
|
debugGraphics.buffer = buffer; |
|
|
|
return debugGraphics; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Graphics create(int x, int y, int width, int height) { |
|
DebugGraphics debugGraphics; |
|
|
|
debugGraphics = new DebugGraphics(); |
|
debugGraphics.graphics = graphics.create(x, y, width, height); |
|
debugGraphics.debugOptions = debugOptions; |
|
debugGraphics.buffer = buffer; |
|
debugGraphics.xOffset = xOffset + x; |
|
debugGraphics.yOffset = yOffset + y; |
|
|
|
return debugGraphics; |
|
} |
|
|
|
|
|
//------------------------------------------------ |
|
// NEW METHODS |
|
//------------------------------------------------ |
|
|
|
|
|
|
|
*/ |
|
public static void setFlashColor(Color flashColor) { |
|
info().flashColor = flashColor; |
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
public static Color flashColor() { |
|
return info().flashColor; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public static void setFlashTime(int flashTime) { |
|
info().flashTime = flashTime; |
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
public static int flashTime() { |
|
return info().flashTime; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public static void setFlashCount(int flashCount) { |
|
info().flashCount = flashCount; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public static int flashCount() { |
|
return info().flashCount; |
|
} |
|
|
|
|
|
*/ |
|
public static void setLogStream(java.io.PrintStream stream) { |
|
info().stream = stream; |
|
} |
|
|
|
|
|
|
|
*/ |
|
public static java.io.PrintStream logStream() { |
|
return info().stream; |
|
} |
|
|
|
|
|
*/ |
|
public void setFont(Font aFont) { |
|
if (debugLog()) { |
|
info().log(toShortString() + " Setting font: " + aFont); |
|
} |
|
graphics.setFont(aFont); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Font getFont() { |
|
return graphics.getFont(); |
|
} |
|
|
|
|
|
*/ |
|
public void setColor(Color aColor) { |
|
if (debugLog()) { |
|
info().log(toShortString() + " Setting color: " + aColor); |
|
} |
|
graphics.setColor(aColor); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Color getColor() { |
|
return graphics.getColor(); |
|
} |
|
|
|
|
|
//----------------------------------------------- |
|
// OVERRIDDEN METHODS |
|
//------------------------------------------------ |
|
|
|
|
|
|
|
*/ |
|
public FontMetrics getFontMetrics() { |
|
return graphics.getFontMetrics(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public FontMetrics getFontMetrics(Font f) { |
|
return graphics.getFontMetrics(f); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void translate(int x, int y) { |
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Translating by: " + new Point(x, y)); |
|
} |
|
xOffset += x; |
|
yOffset += y; |
|
graphics.translate(x, y); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void setPaintMode() { |
|
if (debugLog()) { |
|
info().log(toShortString() + " Setting paint mode"); |
|
} |
|
graphics.setPaintMode(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void setXORMode(Color aColor) { |
|
if (debugLog()) { |
|
info().log(toShortString() + " Setting XOR mode: " + aColor); |
|
} |
|
graphics.setXORMode(aColor); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Rectangle getClipBounds() { |
|
return graphics.getClipBounds(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void clipRect(int x, int y, int width, int height) { |
|
graphics.clipRect(x, y, width, height); |
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Setting clipRect: " + (new Rectangle(x, y, width, height)) + |
|
" New clipRect: " + graphics.getClip()); |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void setClip(int x, int y, int width, int height) { |
|
graphics.setClip(x, y, width, height); |
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Setting new clipRect: " + graphics.getClip()); |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
public Shape getClip() { |
|
return graphics.getClip(); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void setClip(Shape clip) { |
|
graphics.setClip(clip); |
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Setting new clipRect: " + graphics.getClip()); |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawRect(int x, int y, int width, int height) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing rect: " + |
|
new Rectangle(x, y, width, height)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawRect(x, y, width, height); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawRect(x, y, width, height); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawRect(x, y, width, height); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fillRect(int x, int y, int width, int height) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling rect: " + |
|
new Rectangle(x, y, width, height)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fillRect(x, y, width, height); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fillRect(x, y, width, height); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fillRect(x, y, width, height); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void clearRect(int x, int y, int width, int height) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Clearing rect: " + |
|
new Rectangle(x, y, width, height)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.clearRect(x, y, width, height); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.clearRect(x, y, width, height); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.clearRect(x, y, width, height); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawRoundRect(int x, int y, int width, int height, |
|
int arcWidth, int arcHeight) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing round rect: " + |
|
new Rectangle(x, y, width, height) + |
|
" arcWidth: " + arcWidth + |
|
" archHeight: " + arcHeight); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawRoundRect(x, y, width, height, |
|
arcWidth, arcHeight); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawRoundRect(x, y, width, height, |
|
arcWidth, arcHeight); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawRoundRect(x, y, width, height, arcWidth, arcHeight); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fillRoundRect(int x, int y, int width, int height, |
|
int arcWidth, int arcHeight) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling round rect: " + |
|
new Rectangle(x, y, width, height) + |
|
" arcWidth: " + arcWidth + |
|
" archHeight: " + arcHeight); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fillRoundRect(x, y, width, height, |
|
arcWidth, arcHeight); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fillRoundRect(x, y, width, height, |
|
arcWidth, arcHeight); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fillRoundRect(x, y, width, height, arcWidth, arcHeight); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawLine(int x1, int y1, int x2, int y2) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing line: from " + pointToString(x1, y1) + |
|
" to " + pointToString(x2, y2)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawLine(x1, y1, x2, y2); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawLine(x1, y1, x2, y2); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawLine(x1, y1, x2, y2); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void draw3DRect(int x, int y, int width, int height, |
|
boolean raised) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing 3D rect: " + |
|
new Rectangle(x, y, width, height) + |
|
" Raised bezel: " + raised); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.draw3DRect(x, y, width, height, raised); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.draw3DRect(x, y, width, height, raised); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.draw3DRect(x, y, width, height, raised); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fill3DRect(int x, int y, int width, int height, |
|
boolean raised) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling 3D rect: " + |
|
new Rectangle(x, y, width, height) + |
|
" Raised bezel: " + raised); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fill3DRect(x, y, width, height, raised); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fill3DRect(x, y, width, height, raised); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fill3DRect(x, y, width, height, raised); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawOval(int x, int y, int width, int height) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing oval: " + |
|
new Rectangle(x, y, width, height)); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawOval(x, y, width, height); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawOval(x, y, width, height); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawOval(x, y, width, height); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fillOval(int x, int y, int width, int height) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling oval: " + |
|
new Rectangle(x, y, width, height)); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fillOval(x, y, width, height); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fillOval(x, y, width, height); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fillOval(x, y, width, height); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawArc(int x, int y, int width, int height, |
|
int startAngle, int arcAngle) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing arc: " + |
|
new Rectangle(x, y, width, height) + |
|
" startAngle: " + startAngle + |
|
" arcAngle: " + arcAngle); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawArc(x, y, width, height, |
|
startAngle, arcAngle); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawArc(x, y, width, height, startAngle, arcAngle); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawArc(x, y, width, height, startAngle, arcAngle); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fillArc(int x, int y, int width, int height, |
|
int startAngle, int arcAngle) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling arc: " + |
|
new Rectangle(x, y, width, height) + |
|
" startAngle: " + startAngle + |
|
" arcAngle: " + arcAngle); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fillArc(x, y, width, height, |
|
startAngle, arcAngle); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fillArc(x, y, width, height, startAngle, arcAngle); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fillArc(x, y, width, height, startAngle, arcAngle); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawPolyline(int xPoints[], int yPoints[], int nPoints) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing polyline: " + |
|
" nPoints: " + nPoints + |
|
" X's: " + xPoints + |
|
" Y's: " + yPoints); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawPolyline(xPoints, yPoints, nPoints); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawPolyline(xPoints, yPoints, nPoints); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawPolyline(xPoints, yPoints, nPoints); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawPolygon(int xPoints[], int yPoints[], int nPoints) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing polygon: " + |
|
" nPoints: " + nPoints + |
|
" X's: " + xPoints + |
|
" Y's: " + yPoints); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawPolygon(xPoints, yPoints, nPoints); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.drawPolygon(xPoints, yPoints, nPoints); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawPolygon(xPoints, yPoints, nPoints); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void fillPolygon(int xPoints[], int yPoints[], int nPoints) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Filling polygon: " + |
|
" nPoints: " + nPoints + |
|
" X's: " + xPoints + |
|
" Y's: " + yPoints); |
|
} |
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.fillPolygon(xPoints, yPoints, nPoints); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor : oldColor); |
|
graphics.fillPolygon(xPoints, yPoints, nPoints); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.fillPolygon(xPoints, yPoints, nPoints); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawString(String aString, int x, int y) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing string: \"" + aString + |
|
"\" at: " + new Point(x, y)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawString(aString, x, y); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor |
|
: oldColor); |
|
graphics.drawString(aString, x, y); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawString(aString, x, y); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawString(AttributedCharacterIterator iterator, int x, int y) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing text: \"" + iterator + |
|
"\" at: " + new Point(x, y)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawString(iterator, x, y); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor |
|
: oldColor); |
|
graphics.drawString(iterator, x, y); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawString(iterator, x, y); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawBytes(byte data[], int offset, int length, int x, int y) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
Font font = graphics.getFont(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing bytes at: " + new Point(x, y)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawBytes(data, offset, length, x, y); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor |
|
: oldColor); |
|
graphics.drawBytes(data, offset, length, x, y); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawBytes(data, offset, length, x, y); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void drawChars(char data[], int offset, int length, int x, int y) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
Font font = graphics.getFont(); |
|
|
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Drawing chars at " + new Point(x, y)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawChars(data, offset, length, x, y); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
Color oldColor = getColor(); |
|
int i, count = (info.flashCount * 2) - 1; |
|
|
|
for (i = 0; i < count; i++) { |
|
graphics.setColor((i % 2) == 0 ? info.flashColor |
|
: oldColor); |
|
graphics.drawChars(data, offset, length, x, y); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
graphics.setColor(oldColor); |
|
} |
|
graphics.drawChars(data, offset, length, x, y); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, int x, int y, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" at: " + new Point(x, y)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, x, y, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, x, y, |
|
imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, x, y, observer); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, int x, int y, int width, int height, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" at: " + new Rectangle(x, y, width, height)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, x, y, width, height, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, x, y, |
|
width, height, imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, x, y, width, height, observer); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, int x, int y, |
|
Color bgcolor, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" at: " + new Point(x, y) + |
|
", bgcolor: " + bgcolor); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, x, y, bgcolor, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, x, y, |
|
bgcolor, imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, x, y, bgcolor, observer); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, int x, int y,int width, int height, |
|
Color bgcolor, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" at: " + new Rectangle(x, y, width, height) + |
|
", bgcolor: " + bgcolor); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, x, y, width, height, |
|
bgcolor, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, x, y, |
|
width, height, bgcolor, imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, x, y, width, height, bgcolor, observer); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, |
|
int dx1, int dy1, int dx2, int dy2, |
|
int sx1, int sy1, int sx2, int sy2, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" destination: " + new Rectangle(dx1, dy1, dx2, dy2) + |
|
" source: " + new Rectangle(sx1, sy1, sx2, sy2)); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, dx1, dy1, dx2, dy2, |
|
sx1, sy1, sx2, sy2, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, |
|
dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, |
|
imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, |
|
observer); |
|
} |
|
|
|
|
|
|
|
*/ |
|
public boolean drawImage(Image img, |
|
int dx1, int dy1, int dx2, int dy2, |
|
int sx1, int sy1, int sx2, int sy2, |
|
Color bgcolor, |
|
ImageObserver observer) { |
|
DebugGraphicsInfo info = info(); |
|
|
|
if (debugLog()) { |
|
info.log(toShortString() + |
|
" Drawing image: " + img + |
|
" destination: " + new Rectangle(dx1, dy1, dx2, dy2) + |
|
" source: " + new Rectangle(sx1, sy1, sx2, sy2) + |
|
", bgcolor: " + bgcolor); |
|
} |
|
|
|
if (isDrawingBuffer()) { |
|
if (debugBuffered()) { |
|
Graphics debugGraphics = debugGraphics(); |
|
|
|
debugGraphics.drawImage(img, dx1, dy1, dx2, dy2, |
|
sx1, sy1, sx2, sy2, bgcolor, observer); |
|
debugGraphics.dispose(); |
|
} |
|
} else if (debugFlash()) { |
|
int i, count = (info.flashCount * 2) - 1; |
|
ImageProducer oldProducer = img.getSource(); |
|
ImageProducer newProducer |
|
= new FilteredImageSource(oldProducer, |
|
new DebugGraphicsFilter(info.flashColor)); |
|
Image newImage |
|
= Toolkit.getDefaultToolkit().createImage(newProducer); |
|
DebugGraphicsObserver imageObserver |
|
= new DebugGraphicsObserver(); |
|
|
|
Image imageToDraw; |
|
for (i = 0; i < count; i++) { |
|
imageToDraw = (i % 2) == 0 ? newImage : img; |
|
loadImage(imageToDraw); |
|
graphics.drawImage(imageToDraw, |
|
dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, |
|
bgcolor, imageObserver); |
|
Toolkit.getDefaultToolkit().sync(); |
|
sleep(info.flashTime); |
|
} |
|
} |
|
return graphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, |
|
bgcolor, observer); |
|
} |
|
|
|
static void loadImage(Image img) { |
|
imageLoadingIcon.loadImage(img); |
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
public void copyArea(int x, int y, int width, int height, |
|
int destX, int destY) { |
|
if (debugLog()) { |
|
info().log(toShortString() + |
|
" Copying area from: " + |
|
new Rectangle(x, y, width, height) + |
|
" to: " + new Point(destX, destY)); |
|
} |
|
graphics.copyArea(x, y, width, height, destX, destY); |
|
} |
|
|
|
final void sleep(int mSecs) { |
|
try { |
|
Thread.sleep(mSecs); |
|
} catch (Exception e) { |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
public void dispose() { |
|
graphics.dispose(); |
|
graphics = null; |
|
} |
|
|
|
// ALERT! |
|
|
|
|
|
|
|
|
|
*/ |
|
public boolean isDrawingBuffer() { |
|
return buffer != null; |
|
} |
|
|
|
String toShortString() { |
|
return "Graphics" + (isDrawingBuffer() ? "<B>" : "") + "(" + graphicsID + "-" + debugOptions + ")"; |
|
} |
|
|
|
String pointToString(int x, int y) { |
|
return "(" + x + ", " + y + ")"; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public void setDebugOptions(int options) { |
|
if (options != 0) { |
|
if (options == NONE_OPTION) { |
|
if (debugOptions != 0) { |
|
System.err.println(toShortString() + " Disabling debug"); |
|
debugOptions = 0; |
|
} |
|
} else { |
|
if (debugOptions != options) { |
|
debugOptions |= options; |
|
if (debugLog()) { |
|
System.err.println(toShortString() + " Enabling debug"); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
public int getDebugOptions() { |
|
return debugOptions; |
|
} |
|
|
|
|
|
|
|
*/ |
|
static void setDebugOptions(JComponent component, int options) { |
|
info().setDebugOptions(component, options); |
|
} |
|
|
|
|
|
*/ |
|
static int getDebugOptions(JComponent component) { |
|
DebugGraphicsInfo debugGraphicsInfo = info(); |
|
if (debugGraphicsInfo == null) { |
|
return 0; |
|
} else { |
|
return debugGraphicsInfo.getDebugOptions(component); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
static int shouldComponentDebug(JComponent component) { |
|
DebugGraphicsInfo info = info(); |
|
if (info == null) { |
|
return 0; |
|
} else { |
|
Container container = (Container)component; |
|
int debugOptions = 0; |
|
|
|
while (container != null && (container instanceof JComponent)) { |
|
debugOptions |= info.getDebugOptions((JComponent)container); |
|
container = container.getParent(); |
|
} |
|
|
|
return debugOptions; |
|
} |
|
} |
|
|
|
|
|
|
|
*/ |
|
static int debugComponentCount() { |
|
DebugGraphicsInfo debugGraphicsInfo = info(); |
|
if (debugGraphicsInfo != null && |
|
debugGraphicsInfo.componentToDebug != null) { |
|
return debugGraphicsInfo.componentToDebug.size(); |
|
} else { |
|
return 0; |
|
} |
|
} |
|
|
|
boolean debugLog() { |
|
return (debugOptions & LOG_OPTION) == LOG_OPTION; |
|
} |
|
|
|
boolean debugFlash() { |
|
return (debugOptions & FLASH_OPTION) == FLASH_OPTION; |
|
} |
|
|
|
boolean debugBuffered() { |
|
return (debugOptions & BUFFERED_OPTION) == BUFFERED_OPTION; |
|
} |
|
|
|
|
|
*/ |
|
private Graphics debugGraphics() { |
|
DebugGraphics debugGraphics; |
|
DebugGraphicsInfo info = info(); |
|
JFrame debugFrame; |
|
|
|
if (info.debugFrame == null) { |
|
info.debugFrame = new JFrame(); |
|
info.debugFrame.setSize(500, 500); |
|
} |
|
debugFrame = info.debugFrame; |
|
debugFrame.show(); |
|
debugGraphics = new DebugGraphics(debugFrame.getGraphics()); |
|
debugGraphics.setFont(getFont()); |
|
debugGraphics.setColor(getColor()); |
|
debugGraphics.translate(xOffset, yOffset); |
|
debugGraphics.setClip(getClipBounds()); |
|
if (debugFlash()) { |
|
debugGraphics.setDebugOptions(FLASH_OPTION); |
|
} |
|
return debugGraphics; |
|
} |
|
|
|
|
|
*/ |
|
static DebugGraphicsInfo info() { |
|
DebugGraphicsInfo debugGraphicsInfo = (DebugGraphicsInfo) |
|
SwingUtilities.appContextGet(debugGraphicsInfoKey); |
|
if (debugGraphicsInfo == null) { |
|
debugGraphicsInfo = new DebugGraphicsInfo(); |
|
SwingUtilities.appContextPut(debugGraphicsInfoKey, |
|
debugGraphicsInfo); |
|
} |
|
return debugGraphicsInfo; |
|
} |
|
private static final Class debugGraphicsInfoKey = DebugGraphicsInfo.class; |
|
|
|
|
|
} |