+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+/*\r
+ *\r
+ * @author Toni Kalajainen\r
+ */\r
+package org.simantics.g2d.chassis;\r
+\r
+import java.awt.Color;\r
+import java.awt.Composite;\r
+import java.awt.Font;\r
+import java.awt.FontMetrics;\r
+import java.awt.Graphics;\r
+import java.awt.Graphics2D;\r
+import java.awt.GraphicsConfiguration;\r
+import java.awt.Image;\r
+import java.awt.Paint;\r
+import java.awt.Rectangle;\r
+import java.awt.RenderingHints;\r
+import java.awt.Shape;\r
+import java.awt.Stroke;\r
+import java.awt.RenderingHints.Key;\r
+import java.awt.font.FontRenderContext;\r
+import java.awt.font.GlyphVector;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.image.BufferedImage;\r
+import java.awt.image.BufferedImageOp;\r
+import java.awt.image.ImageObserver;\r
+import java.awt.image.RenderedImage;\r
+import java.awt.image.renderable.RenderableImage;\r
+import java.io.PrintStream;\r
+import java.text.AttributedCharacterIterator;\r
+import java.util.Arrays;\r
+import java.util.Map;\r
+\r
+public class DebugGraphics extends GraphicsAdapter {\r
+\r
+ public final PrintStream o;\r
+ \r
+ public DebugGraphics(Graphics2D g, PrintStream out)\r
+ {\r
+ super(g);\r
+ this.o = out;\r
+ }\r
+\r
+ public DebugGraphics(Graphics2D g)\r
+ {\r
+ super(g);\r
+ this.o = System.out;\r
+ }\r
+\r
+ public void print(Object ... args)\r
+ {\r
+ StackTraceElement[] e = Thread.currentThread().getStackTrace();\r
+ o.print( e[2].getMethodName() );\r
+ if (args!=null && args.length>0) {\r
+ o.print(Arrays.toString(args));\r
+ }\r
+ o.println();\r
+ }\r
+ \r
+ @Override\r
+ public void addRenderingHints(Map<?, ?> hints) {\r
+ print();\r
+ super.addRenderingHints(hints);\r
+ }\r
+\r
+ @Override\r
+ public void clip(Shape s) {\r
+ print();\r
+ super.clip(s);\r
+ }\r
+\r
+ @Override\r
+ public void draw(Shape s) {\r
+ print(s);\r
+ super.draw(s);\r
+ }\r
+\r
+ @Override\r
+ public void drawGlyphVector(GlyphVector g, float x, float y) {\r
+ super.drawGlyphVector(g, x, y);\r
+ print(g, x, y);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) {\r
+ print(img, xform, obs);\r
+ return g.drawImage(img, xform, obs);\r
+ }\r
+\r
+ @Override\r
+ public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {\r
+ print(img, op, x, y);\r
+ super.drawImage(img, op, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void drawRenderableImage(RenderableImage img, AffineTransform xform) {\r
+ print(img, xform);\r
+ super.drawRenderableImage(img, xform);\r
+ }\r
+\r
+ @Override\r
+ public void drawRenderedImage(RenderedImage img, AffineTransform xform) {\r
+ print(img, xform);\r
+ super.drawRenderedImage(img, xform);\r
+ }\r
+\r
+ @Override\r
+ public void drawString(String str, int x, int y) {\r
+ print(str, x, y);\r
+ super.drawString(str, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void drawString(String str, float x, float y) {\r
+ print(str, x, y);\r
+ super.drawString(str, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void drawString(AttributedCharacterIterator iterator, int x, int y) {\r
+ print(iterator, x, y);\r
+ super.drawString(iterator, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void drawString(AttributedCharacterIterator iterator, float x, float y) {\r
+ print(iterator, x, y);\r
+ super.drawString(iterator, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void fill(Shape s) {\r
+ print(s);\r
+ super.fill(s);\r
+ }\r
+\r
+ @Override\r
+ public Color getBackground() {\r
+ print();\r
+ return g.getBackground();\r
+ }\r
+\r
+ @Override\r
+ public Composite getComposite() {\r
+ print();\r
+ return g.getComposite();\r
+ }\r
+\r
+ @Override\r
+ public GraphicsConfiguration getDeviceConfiguration() {\r
+ print();\r
+ return g.getDeviceConfiguration();\r
+ }\r
+\r
+ @Override\r
+ public FontRenderContext getFontRenderContext() {\r
+ print();\r
+ return g.getFontRenderContext();\r
+ }\r
+\r
+ @Override\r
+ public Paint getPaint() {\r
+ print();\r
+ return g.getPaint();\r
+ }\r
+\r
+ @Override\r
+ public Object getRenderingHint(Key hintKey) {\r
+ print(hintKey);\r
+ return g.getRenderingHint(hintKey);\r
+ }\r
+\r
+ @Override\r
+ public RenderingHints getRenderingHints() {\r
+ print();\r
+ return g.getRenderingHints();\r
+ }\r
+\r
+ @Override\r
+ public Stroke getStroke() {\r
+ print();\r
+ return g.getStroke();\r
+ }\r
+\r
+ @Override\r
+ public AffineTransform getTransform() {\r
+ print();\r
+ return g.getTransform();\r
+ }\r
+\r
+ @Override\r
+ public boolean hit(Rectangle rect, Shape s, boolean onStroke) {\r
+ print(rect, s, onStroke);\r
+ return g.hit(rect, s, onStroke);\r
+ }\r
+\r
+ @Override\r
+ public void rotate(double theta) {\r
+ print(theta);\r
+ super.rotate(theta);\r
+ }\r
+\r
+ @Override\r
+ public void rotate(double theta, double x, double y) {\r
+ print(theta, x, y);\r
+ super.rotate(theta, x, y);\r
+ }\r
+\r
+ @Override\r
+ public void scale(double sx, double sy) {\r
+ print(sx, sy);\r
+ super.scale(sx, sy);\r
+ }\r
+\r
+ @Override\r
+ public void setBackground(Color color) {\r
+ print(color);\r
+ super.setBackground(color);\r
+ }\r
+\r
+ @Override\r
+ public void setComposite(Composite comp) {\r
+ print(comp);\r
+ super.setComposite(comp);\r
+ }\r
+\r
+ @Override\r
+ public void setPaint(Paint paint) {\r
+ print(paint);\r
+ super.setPaint(paint);\r
+ }\r
+\r
+ @Override\r
+ public void setRenderingHint(Key hintKey, Object hintValue) {\r
+ print(hintKey, hintValue);\r
+ super.setRenderingHint(hintKey, hintValue);\r
+ }\r
+\r
+ @Override\r
+ public void setRenderingHints(Map<?, ?> hints) { \r
+ print(hints);\r
+ super.setRenderingHints(hints);\r
+ }\r
+\r
+ @Override\r
+ public void setStroke(Stroke s) {\r
+ print(s);\r
+ super.setStroke(s);\r
+ }\r
+\r
+ @Override\r
+ public void setTransform(AffineTransform Tx) {\r
+ print(Tx);\r
+ super.setTransform(Tx);\r
+ }\r
+\r
+ @Override\r
+ public void shear(double shx, double shy) {\r
+ print(shx, shy);\r
+ super.shear(shx, shy);\r
+ }\r
+\r
+ @Override\r
+ public void transform(AffineTransform Tx) {\r
+ print(Tx);\r
+ super.transform(Tx);\r
+ }\r
+\r
+ @Override\r
+ public void translate(int x, int y) {\r
+ print(x, y);\r
+ super.translate(x, y);\r
+ }\r
+\r
+ @Override\r
+ public void translate(double tx, double ty) {\r
+ print(tx, ty);\r
+ super.translate(tx, ty);\r
+ }\r
+\r
+ @Override\r
+ public void clearRect(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.clearRect(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void clipRect(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.clearRect(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void copyArea(int x, int y, int width, int height, int dx, int dy) {\r
+ print(x, y, width, height, dx, dy);\r
+ super.copyArea(x, y, width, height, dx, dy);\r
+ }\r
+\r
+ @Override\r
+ public Graphics create() {\r
+ print();\r
+ return new DebugGraphics((Graphics2D) g.create());\r
+ }\r
+\r
+ @Override\r
+ public void dispose() {\r
+ print();\r
+ super.dispose();\r
+ }\r
+\r
+ @Override\r
+ public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {\r
+ print(x, y, width, height, startAngle, arcAngle);\r
+ super.drawArc(x, y, width, height, startAngle, arcAngle);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int x, int y, ImageObserver observer) {\r
+ print(img, x, y, observer);\r
+ return g.drawImage(img, x, y, observer);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {\r
+ print(img, x, y, bgcolor, observer);\r
+ return g.drawImage(img, x, y, bgcolor, observer);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {\r
+ print(img, x, y, width, height, observer);\r
+ return g.drawImage(img, x, y, width, height, observer);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {\r
+ print(img, x, y, width, height, bgcolor, observer);\r
+ return g.drawImage(img, x, y, width, height, bgcolor, observer);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,\r
+ ImageObserver observer) { \r
+ print(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);\r
+ return g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);\r
+ }\r
+\r
+ @Override\r
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,\r
+ Color bgcolor, ImageObserver observer) {\r
+ print(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);\r
+ return g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);\r
+ }\r
+\r
+ @Override\r
+ public void drawLine(int x1, int y1, int x2, int y2) {\r
+ print(x1, y1, x2, y2);\r
+ super.drawLine(x1, y1, x2, y2);\r
+ }\r
+\r
+ @Override\r
+ public void drawOval(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.drawOval(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void drawPolygon(int[] points, int[] points2, int points3) {\r
+ print(points, points2, points3);\r
+ super.drawPolygon(points, points2, points3);\r
+ }\r
+\r
+ @Override\r
+ public void drawPolyline(int[] points, int[] points2, int points3) {\r
+ print(points, points2, points3);\r
+ super.drawPolyline(points, points2, points3);\r
+ }\r
+\r
+ @Override\r
+ public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {\r
+ print(x, y, width, height, arcWidth, arcHeight);\r
+ super.drawRoundRect(x, y, width, height, arcWidth, arcHeight);\r
+ }\r
+\r
+ @Override\r
+ public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {\r
+ print(x, y, width, height, startAngle, arcAngle);\r
+ super.fillArc(x, y, width, height, startAngle, arcAngle);\r
+ }\r
+\r
+ @Override\r
+ public void fillOval(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.fillOval(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void fillPolygon(int[] points, int[] points2, int points3) {\r
+ print(points, points2, points3);\r
+ super.fillPolygon(points, points2, points3);\r
+ }\r
+\r
+ @Override\r
+ public void fillRect(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.fillRect(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {\r
+ print(x, y, width, height, arcWidth, arcHeight);\r
+ super.fillRoundRect(x, y, width, height, arcWidth, arcHeight);\r
+ }\r
+\r
+ @Override\r
+ public Shape getClip() {\r
+ print();\r
+ return g.getClip();\r
+ }\r
+\r
+ @Override\r
+ public Rectangle getClipBounds() {\r
+ print();\r
+ return g.getClipBounds();\r
+ }\r
+\r
+ @Override\r
+ public Color getColor() {\r
+ print();\r
+ return g.getColor();\r
+ }\r
+\r
+ @Override\r
+ public Font getFont() {\r
+ print();\r
+ return g.getFont();\r
+ }\r
+\r
+ @Override\r
+ public FontMetrics getFontMetrics(Font f) {\r
+ print();\r
+ return g.getFontMetrics(f);\r
+ }\r
+\r
+ @Override\r
+ public void setClip(Shape clip) {\r
+ print(clip);\r
+ super.setClip(clip);\r
+ }\r
+\r
+ @Override\r
+ public void setClip(int x, int y, int width, int height) {\r
+ print(x, y, width, height);\r
+ super.setClip(x, y, width, height);\r
+ }\r
+\r
+ @Override\r
+ public void setColor(Color c) {\r
+ print(c);\r
+ super.setColor(c);\r
+ }\r
+\r
+ @Override\r
+ public void setFont(Font font) {\r
+ print(font);\r
+ super.setFont(font);\r
+ }\r
+\r
+ @Override\r
+ public void setPaintMode() {\r
+ print();\r
+ super.setPaintMode();\r
+ }\r
+\r
+ @Override\r
+ public void setXORMode(Color c1) {\r
+ print(c1);\r
+ super.setXORMode(c1);\r
+ }\r
+\r
+}\r