package nl.tudelft.simulation.dsol.web.animation; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Canvas; import java.awt.Color; import java.awt.Composite; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.Paint; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.RenderingHints.Key; import java.awt.Shape; import java.awt.Stroke; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Path2D; import java.awt.geom.PathIterator; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ImageObserver; import java.awt.image.RenderedImage; import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; import java.util.LinkedHashMap; import java.util.Map; import org.djutils.logger.CategoryLogger; import nl.tudelft.simulation.dsol.animation.gis.SerializablePath; import nl.tudelft.simulation.dsol.logger.Cat; /** * HTMLGraphics.java.
*
* Copyright (c) 2003-2022 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See * for project information www.simulation.tudelft.nl. The * source code and binary code of this software is proprietary information of Delft University of Technology. * @author Alexander Verbraeck */ public class HTMLGraphics2D extends Graphics2D { /** the current color of the background for drawing. */ Color background = Color.WHITE; /** the current drawing color. */ Color color = Color.BLACK; /** the current font. */ Font font = new Font(Font.SANS_SERIF, Font.PLAIN, 10); /** the drawing canvas. */ Canvas canvas = new Canvas(); /** the cached current font properties. */ FontMetrics fontMetrics = this.canvas.getFontMetrics(this.font); /** the current paint. */ Paint paint = Color.BLACK; /** the current stroke. */ Stroke stroke = new BasicStroke(); /** TODO: the current rendering hints. */ RenderingHints renderingHints = new RenderingHints(new LinkedHashMap()); /** the current affine transform. */ AffineTransform affineTransform = new AffineTransform(); /** TODO: the current composite. What is that? */ Composite composite = AlphaComposite.Clear; /** the commands to send over the channel to the HTML5 code. */ StringBuffer commands = new StringBuffer(); /** * Clear the commands and put the start tag in. */ public void clearCommand() { this.commands = new StringBuffer(); this.commands.append("\n"); } /** * Close the commands and put the end tag in. * @return the current set of commands */ public String closeAndGetCommands() { this.commands.append("\n"); return this.commands.toString(); } /** * Add a draw command. * @param drawCommand String; the tag for the draw command * @param params Object...; the params for the draw command */ protected void addDraw(final String drawCommand, final Object... params) { this.commands.append("" + drawCommand); for (Object param : params) { this.commands.append("," + param.toString()); } this.commands.append("\n"); } /** * add AffineTransform to the command. */ protected void addAffineTransform() { this.commands.append(","); this.commands.append(this.affineTransform.getScaleX()); this.commands.append(","); this.commands.append(this.affineTransform.getShearY()); this.commands.append(","); this.commands.append(this.affineTransform.getShearX()); this.commands.append(","); this.commands.append(this.affineTransform.getScaleY()); this.commands.append(","); this.commands.append(this.affineTransform.getTranslateX()); this.commands.append(","); this.commands.append(this.affineTransform.getTranslateY()); } /** * add Color to the command. * @param c Color; the color */ protected void addColor(final Color c) { this.commands.append(","); this.commands.append(c.getRed()); this.commands.append(","); this.commands.append(c.getGreen()); this.commands.append(","); this.commands.append(c.getBlue()); this.commands.append(","); this.commands.append(c.getAlpha()); this.commands.append(","); this.commands.append(c.getTransparency()); } /** * add font data to the command, font-name, font-size, bold/italic/plain. */ protected void addFontData() { this.commands.append(","); String javaFontName = this.font.getFontName().toLowerCase(); String htmlFontName; if (javaFontName.contains("arial") || javaFontName.contains("helvetica") || javaFontName.contains("verdana") || javaFontName.contains("tahoma") || javaFontName.contains("segoe") || javaFontName.contains("sans")) htmlFontName = "sans-serif"; else if (javaFontName.contains("times") || javaFontName.contains("cambria") || javaFontName.contains("georgia") || javaFontName.contains("serif")) htmlFontName = "serif"; else if (javaFontName.contains("courier") || javaFontName.contains("consol") || javaFontName.contains("mono")) htmlFontName = "monospace"; else htmlFontName = "sans-serif"; this.commands.append(htmlFontName); this.commands.append(","); this.commands.append(this.font.getSize2D()); this.commands.append(","); if (this.font.isBold()) this.commands.append("bold"); else if (this.font.isItalic()) this.commands.append("italic"); else this.commands.append("plain"); } /** * Add fill command, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), color.r, color.g, color.b, color.alpha, color.transparency, * params... * @param fillCommand String; the tag to use * @param params Object...; the params to send */ protected void addTransformFill(final String fillCommand, final Object... params) { this.commands.append("" + fillCommand); addAffineTransform(); if (this.paint instanceof Color) addColor((Color) this.paint); else addColor(this.color); for (Object param : params) { this.commands.append("," + param.toString()); } this.commands.append("\n"); } /** * Add command, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), linecolor.r, linecolor.g, linecolor.b, linecolor.alpha, * linecolor.transparency, line-width, params... * @param drawCommand String; the tag to use * @param params Object...; the params */ protected void addTransformDraw(final String drawCommand, final Object... params) { this.commands.append("" + drawCommand); addAffineTransform(); if (this.paint instanceof Color) addColor((Color) this.paint); else addColor(this.color); if (this.stroke instanceof BasicStroke) this.commands.append("," + ((BasicStroke) this.stroke).getLineWidth()); else this.commands.append(", 0.1"); for (Object param : params) { this.commands.append("," + param.toString()); } this.commands.append("\n"); } /** * adds a float array to the command. * @param array float[]; the array * @param length int; the number of points from the array to write */ private void addFloatArray(final float[] array, final int length) { for (int i = 0; i < length; i++) { this.commands.append(", " + array[i]); } } /** * adds a double array to the command. * @param array double[]; the array * @param length int; the number of points from the array to write */ private void addDoubleArray(final double[] array, final int length) { for (int i = 0; i < length; i++) { this.commands.append(", " + array[i]); } } /** * Add a path2D to the command. In case of fill:
* FILL, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), fillcolor.r, fillcolor.g, fillcolor.b, fillcolor.alpha, * fillcolor.transparency, winding_rule[WIND_EVEN_ODD/WIND_NON_ZERO], COMMAND, coords, COMMAND, coords, ...
* In case of draw:
* DRAW, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), strokecolor.r, strokecolor.g, strokecolor.b, strokecolor.alpha, * strokecolor.transparency, line_width, COMMAND, coords, COMMAND, coords, ...
* where command can be one of the following:
* - CLOSE, followed by no coordinates
* - CUBICTO, followed by 3 coordinates (6 numbers)
* - LINETO, followed by 1 coordinate (2 numbers)
* - MOVETO, followed by 1 coordinate (2 numbers)
* - QUADTO, followed by 2 coordinates (4 numbers)
* @param path Path2D.Float; the path to draw * @param fill boolean; */ protected void addTransformPathFloat(final Path2D.Float path, final boolean fill) { if (fill) this.commands.append("FILL"); else this.commands.append("DRAW"); addAffineTransform(); addColor(this.color); if (fill) { if (path.getWindingRule() == Path2D.WIND_EVEN_ODD) this.commands.append(",WIND_EVEN_ODD"); else this.commands.append(",WIND_NON_ZERO"); } else { if (this.stroke instanceof BasicStroke) this.commands.append("," + ((BasicStroke) this.stroke).getLineWidth()); else this.commands.append(", 0.1"); } float[] coords = new float[6]; PathIterator i = path.getPathIterator(null); while (!i.isDone()) { int segment = i.currentSegment(coords); switch (segment) { case PathIterator.SEG_CLOSE: this.commands.append(",CLOSE"); break; case PathIterator.SEG_CUBICTO: this.commands.append(",CUBICTO"); addFloatArray(coords, 6); break; case PathIterator.SEG_LINETO: this.commands.append(",LINETO"); addFloatArray(coords, 2); break; case PathIterator.SEG_MOVETO: this.commands.append(",MOVETO"); addFloatArray(coords, 2); break; case PathIterator.SEG_QUADTO: this.commands.append(",QUADTO"); addFloatArray(coords, 4); break; default: throw new RuntimeException("unkown segment"); } i.next(); } this.commands.append("\n"); } /** * Add a path2D to the command. In case of fill:
* FILL, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), fillcolor.r, fillcolor.g, fillcolor.b, fillcolor.alpha, * fillcolor.transparency, winding_rule[WIND_EVEN_ODD/WIND_NON_ZERO], COMMAND, coords, COMMAND, coords, ...
* In case of draw:
* DRAW, transform.m11(h-scale), transform.m12(h-skew), transform.m21(v-skew), transform.m22(v-scale), * transform.dx(h-translate), transform.dy(v-translate), strokecolor.r, strokecolor.g, strokecolor.b, strokecolor.alpha, * strokecolor.transparency, line_width, COMMAND, coords, COMMAND, coords, ...
* where command can be one of the following:
* - CLOSE, followed by no coordinates
* - CUBICTO, followed by 3 coordinates (6 numbers)
* - LINETO, followed by 1 coordinate (2 numbers)
* - MOVETO, followed by 1 coordinate (2 numbers)
* - QUADTO, followed by 2 coordinates (4 numbers)
* @param path Path2D.Double; the path to draw * @param fill boolean; */ protected void addTransformPathDouble(final Path2D.Double path, final boolean fill) { if (fill) this.commands.append("FILL"); else this.commands.append("DRAW"); addAffineTransform(); addColor(this.color); if (fill) { if (path.getWindingRule() == Path2D.WIND_EVEN_ODD) this.commands.append(",WIND_EVEN_ODD"); else this.commands.append(",WIND_NON_ZERO"); } else { if (this.stroke instanceof BasicStroke) this.commands.append("," + ((BasicStroke) this.stroke).getLineWidth()); else this.commands.append(", 0.1"); } double[] coords = new double[6]; PathIterator i = path.getPathIterator(null); while (!i.isDone()) { int segment = i.currentSegment(coords); switch (segment) { case PathIterator.SEG_CLOSE: this.commands.append(",CLOSE"); break; case PathIterator.SEG_CUBICTO: this.commands.append(",CUBICTO"); addDoubleArray(coords, 6); break; case PathIterator.SEG_LINETO: this.commands.append(",LINETO"); addDoubleArray(coords, 2); break; case PathIterator.SEG_MOVETO: this.commands.append(",MOVETO"); addDoubleArray(coords, 2); break; case PathIterator.SEG_QUADTO: this.commands.append(",QUADTO"); addDoubleArray(coords, 4); break; default: throw new RuntimeException("unkown segment"); } i.next(); } this.commands.append("\n"); } /** * Add string, 0=command, 1=transform.m11(h-scale), 2=transform.m12(h-skew), 3=transform.m21(v-skew), * 4=transform.m22(v-scale), 5=transform.dx(h-translate), 6=transform.dy(v-translate), 7=color.r, 8=color.g, 9=color.b, * 10=color.alpha, 11=color.transparency, 12=fontname, 13=fontsize, 14=fontstyle(normal/italic/bold), 15=x, 16=y, 17=text. * @param drawCommand String; the tag to use * @param params Object...; the params */ protected void addTransformText(final String drawCommand, final Object... params) { this.commands.append("" + drawCommand); addAffineTransform(); addColor(this.color); addFontData(); for (Object param : params) { this.commands.append("," + param.toString()); } this.commands.append("\n"); } /** {@inheritDoc} */ @Override public void draw(final Shape shape) { drawFillShape(shape, false); } /** * Draw or fill a shape. * @param shape Shape; the shape * @param fill boolean; filled or not */ protected void drawFillShape(final Shape shape, final boolean fill) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.draw(shape: {})", shape.getClass().getSimpleName()); if (shape instanceof Ellipse2D.Double) { Ellipse2D.Double ellipse = (Ellipse2D.Double) shape; if (fill) addTransformFill("fillOval", ellipse.getCenterX(), ellipse.getCenterY(), ellipse.width / 2.0, ellipse.height / 2.0); else addTransformDraw("drawOval", ellipse.getCenterX(), ellipse.getCenterY(), ellipse.width / 2.0, ellipse.height / 2.0); } else if (shape instanceof Ellipse2D.Float) { Ellipse2D.Float ellipse = (Ellipse2D.Float) shape; if (fill) addTransformFill("fillOval", ellipse.getCenterX(), ellipse.getCenterY(), ellipse.width / 2.0, ellipse.height / 2.0); else addTransformDraw("drawOval", ellipse.getCenterX(), ellipse.getCenterY(), ellipse.width / 2.0, ellipse.height / 2.0); } else if (shape instanceof Line2D.Double) { Line2D.Double line = (Line2D.Double) shape; addTransformDraw("drawLine", line.x1, line.y1, line.x2, line.y2); } else if (shape instanceof Line2D.Float) { Line2D.Float line = (Line2D.Float) shape; addTransformDraw("drawLine", line.x1, line.y1, line.x2, line.y2); } else if (shape instanceof Rectangle2D.Double) { Rectangle2D.Double rect = (Rectangle2D.Double) shape; if (fill) addTransformFill("fillRect", rect.x, rect.y, rect.width, rect.height); else addTransformDraw("drawRect", rect.x, rect.y, rect.width, rect.height); } else if (shape instanceof Rectangle2D.Float) { Rectangle2D.Float rect = (Rectangle2D.Float) shape; if (fill) addTransformFill("fillRect", rect.x, rect.y, rect.width, rect.height); else addTransformDraw("drawRect", rect.x, rect.y, rect.width, rect.height); } else if (shape instanceof SerializablePath) { Path2D.Float path = (Path2D.Float) shape; addTransformPathFloat(path, fill); } else if (shape instanceof Path2D.Float) { Path2D.Float path = (Path2D.Float) shape; addTransformPathFloat(path, fill); } else if (shape instanceof Path2D.Double) { Path2D.Double path = (Path2D.Double) shape; addTransformPathDouble(path, fill); } } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final AffineTransform xform, final ImageObserver obs) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return true; } /** {@inheritDoc} */ @Override public void drawImage(final BufferedImage img, final BufferedImageOp op, final int x, final int y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); } /** {@inheritDoc} */ @Override public void drawRenderedImage(final RenderedImage img, final AffineTransform xform) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawRenderedImage()"); } /** {@inheritDoc} */ @Override public void drawRenderableImage(final RenderableImage img, final AffineTransform xform) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawRenderableImage()"); } /** {@inheritDoc} */ @Override public void drawString(final String str, final int x, final int y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawString()"); addTransformText("drawString", x, y, str); } /** {@inheritDoc} */ @Override public void drawString(final String str, final float x, final float y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawString()"); addTransformText("drawString", x, y, str); } /** {@inheritDoc} */ @Override public void drawString(final AttributedCharacterIterator iterator, final int x, final int y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawString()"); } /** {@inheritDoc} */ @Override public void drawString(final AttributedCharacterIterator iterator, final float x, final float y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawString()"); } /** {@inheritDoc} */ @Override public void drawGlyphVector(final GlyphVector g, final float x, final float y) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawGlyphVector()"); } /** {@inheritDoc} */ @Override public void fill(final Shape shape) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fill()"); drawFillShape(shape, true); } /** {@inheritDoc} */ @Override public boolean hit(final Rectangle rect, final Shape s, final boolean onStroke) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.hit()"); return false; } /** {@inheritDoc} */ @Override public GraphicsConfiguration getDeviceConfiguration() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getDeviceConfiguration()"); return null; } /** {@inheritDoc} */ @Override public void setComposite(final Composite comp) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setComposite()"); } /** {@inheritDoc} */ @Override public void setPaint(final Paint paint) { this.paint = paint; CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setPaint()"); } /** {@inheritDoc} */ @Override public void setStroke(final Stroke s) { this.stroke = s; CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setStroke()"); } /** {@inheritDoc} */ @Override public void setRenderingHint(final Key hintKey, final Object hintValue) { this.renderingHints.put(hintKey, hintValue); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setRenderingHint()"); } /** {@inheritDoc} */ @Override public Object getRenderingHint(final Key hintKey) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getRenderingHint()"); return this.renderingHints.get(hintKey); } /** {@inheritDoc} */ @Override public void setRenderingHints(final Map hints) { this.renderingHints.clear(); this.renderingHints.putAll(hints); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setRenderingHints()"); } /** {@inheritDoc} */ @Override public void addRenderingHints(final Map hints) { this.renderingHints.putAll(hints); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.addRenderingHints()"); } /** {@inheritDoc} */ @Override public RenderingHints getRenderingHints() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getRenderingHints()"); return this.renderingHints; } /** {@inheritDoc} */ @Override public void translate(final int x, final int y) { this.affineTransform.translate(x, y); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.translate()"); } /** {@inheritDoc} */ @Override public void translate(final double tx, final double ty) { this.affineTransform.translate(tx, ty); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.translate()"); } /** {@inheritDoc} */ @Override public void rotate(final double theta) { this.affineTransform.rotate(theta); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.rotate()"); } /** {@inheritDoc} */ @Override public void rotate(final double theta, final double x, final double y) { this.affineTransform.rotate(theta, x, y); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.rotate()"); } /** {@inheritDoc} */ @Override public void scale(final double sx, final double sy) { this.affineTransform.scale(sx, sy); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.scale()"); } /** {@inheritDoc} */ @Override public void shear(final double shx, final double shy) { this.affineTransform.shear(shx, shy); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.shear()"); } /** {@inheritDoc} */ @Override public void transform(final AffineTransform Tx) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.transform()"); } /** {@inheritDoc} */ @Override public void setTransform(final AffineTransform Tx) { this.affineTransform = (AffineTransform) Tx.clone(); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setTransform()"); } /** {@inheritDoc} */ @Override public AffineTransform getTransform() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getTransform()"); return this.affineTransform; } /** {@inheritDoc} */ @Override public Paint getPaint() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getPaint()"); return this.paint; } /** {@inheritDoc} */ @Override public Composite getComposite() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getComposite()"); return this.composite; } /** {@inheritDoc} */ @Override public void setBackground(final Color color) { this.background = color; CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setBackground()"); } /** {@inheritDoc} */ @Override public Color getBackground() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getBackground()"); return this.background; } /** {@inheritDoc} */ @Override public Stroke getStroke() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getStroke()"); return this.stroke; } /** {@inheritDoc} */ @Override public void clip(final Shape s) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.clip()"); } /** {@inheritDoc} */ @Override public FontRenderContext getFontRenderContext() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getFontRenderContext()"); return new FontRenderContext(this.affineTransform, true, true); } /** {@inheritDoc} */ @Override public Graphics create() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.create()"); return new HTMLGraphics2D(); // TODO: clone } /** {@inheritDoc} */ @Override public Color getColor() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getColor()"); return this.color; } /** {@inheritDoc} */ @Override public void setColor(final Color c) { this.color = c; this.paint = c; // TODO see how difference between paint and color should be handled CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setColor()"); } /** {@inheritDoc} */ @Override public void setPaintMode() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setPaintMode()"); } /** {@inheritDoc} */ @Override public void setXORMode(final Color c1) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setXORMode()"); } /** {@inheritDoc} */ @Override public Font getFont() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getFont()"); return this.font; } /** {@inheritDoc} */ @Override public void setFont(final Font font) { this.font = font; this.fontMetrics = this.canvas.getFontMetrics(this.font); CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setFont()"); } /** {@inheritDoc} */ @Override public FontMetrics getFontMetrics(final Font f) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getFontMetrics()"); return this.fontMetrics; } /** {@inheritDoc} */ @Override public Rectangle getClipBounds() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getClipBounds()"); return null; } /** {@inheritDoc} */ @Override public void clipRect(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.clipRect()"); } /** {@inheritDoc} */ @Override public void setClip(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setClip()"); } /** {@inheritDoc} */ @Override public Shape getClip() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.getClip()"); return null; } /** {@inheritDoc} */ @Override public void setClip(final Shape clip) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.setClip()"); } /** {@inheritDoc} */ @Override public void copyArea(final int x, final int y, final int width, final int height, final int dx, final int dy) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.copyArea()"); } /** {@inheritDoc} */ @Override public void drawLine(final int x1, final int y1, final int x2, final int y2) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawLine()"); addTransformDraw("drawLine", x1, y1, x2, y2); } /** {@inheritDoc} */ @Override public void fillRect(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillRect()"); addTransformFill("fillRect", x, y, width, height); } /** {@inheritDoc} */ @Override public void clearRect(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.clearRect()"); addTransformDraw("clearRect", x, y, width, height); } /** {@inheritDoc} */ @Override public void drawRoundRect(final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawRoundRect()"); } /** {@inheritDoc} */ @Override public void fillRoundRect(final int x, final int y, final int width, final int height, final int arcWidth, final int arcHeight) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillRoundRect()"); } /** {@inheritDoc} */ @Override public void drawOval(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawOval()"); addTransformDraw("drawOval", x, y, width, height); } /** {@inheritDoc} */ @Override public void fillOval(final int x, final int y, final int width, final int height) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillOval()"); addTransformFill("fillOval", x, y, width, height); } /** {@inheritDoc} */ @Override public void drawArc(final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawArc()"); } /** {@inheritDoc} */ @Override public void fillArc(final int x, final int y, final int width, final int height, final int startAngle, final int arcAngle) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillArc()"); } /** {@inheritDoc} */ @Override public void drawPolyline(final int[] xPoints, final int[] yPoints, final int nPoints) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillPolyline()"); } /** {@inheritDoc} */ @Override public void drawPolygon(final int[] xPoints, final int[] yPoints, final int nPoints) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawPolygon()"); } /** {@inheritDoc} */ @Override public void fillPolygon(final int[] xPoints, final int[] yPoints, final int nPoints) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.fillPolygon()"); } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int x, final int y, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int x, final int y, final int width, final int height, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int x, final int y, final Color bgcolor, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int x, final int y, final int width, final int height, final Color bgcolor, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int dx1, final int dy1, final int dx2, final int dy2, final int sx1, final int sy1, final int sx2, final int sy2, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public boolean drawImage(final Image img, final int dx1, final int dy1, final int dx2, final int dy2, final int sx1, final int sy1, final int sx2, final int sy2, final Color bgcolor, final ImageObserver observer) { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.drawImage()"); return false; } /** {@inheritDoc} */ @Override public void dispose() { CategoryLogger.filter(Cat.WEB).trace("HTMLGraphics2D.dispose()"); } }