Package org.jfree.svg

Class SVGGraphics2D


  • public final class SVGGraphics2D
    extends java.awt.Graphics2D

    A Graphics2D implementation that creates SVG output. After rendering the graphics via the SVGGraphics2D, you can retrieve an SVG element (see getSVGElement()) or an SVG document (see getSVGDocument()) containing your content.

    Usage

    Using the SVGGraphics2D class is straightforward. First, create an instance specifying the height and width of the SVG element that will be created. Then, use standard Java2D API calls to draw content into the element. Finally, retrieve the SVG element that has been accumulated. For example:

    SVGGraphics2D g2 = new SVGGraphics2D(300, 200);
     g2.setPaint(Color.RED);
     g2.draw(new Rectangle(10, 10, 280, 180));
     String svgElement = g2.getSVGElement();

    For the content generation step, you can make use of third party libraries, such as JFreeChart and Orson Charts, that render output using standard Java2D API calls.

    Rendering Hints

    The SVGGraphics2D supports a couple of custom rendering hints - for details, refer to the SVGHints class documentation. Also see the examples in this blog post: Orson Charts 3D / Enhanced SVG Export.

    Other Notes
    Some additional notes:
    • by default, JFreeSVG uses a fast conversion of numerical values to strings for the SVG output (the 'RyuDouble' implementation). If you prefer a different approach (for example, controlling the number of decimal places in the output to reduce the file size) you can set your own functions for converting numerical values - see the setGeomDoubleConverter(DoubleFunction) and setTransformDoubleConverter(DoubleFunction) methods.
    • the getFontMetrics(java.awt.Font) and getFontRenderContext() methods return values that come from an internal BufferedImage, this is a short-cut and we don't know if there are any negative consequences (if you know of any, please let us know and we'll add the info here or find a way to fix it);
    • Images are supported, but for methods with an ImageObserver parameter note that the observer is ignored completely. In any case, using images that are not fully loaded already would not be a good idea in the context of generating SVG data/files;
    • when an HTML page contains multiple SVG elements, the items within the DEFS element for each SVG element must have IDs that are unique across all SVG elements in the page. JFreeSVG auto-populates the defsKeyPrefix attribute to help ensure that unique IDs are generated.

    For some demos showing how to use this class, look at the JFree-Demos project at GitHub: https://github.com/jfree/jfree-demos.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.awt.geom.Arc2D arc
      An instance that is reused in draw/fillArc to avoid creating a lot of garbage.
      private java.awt.Color background
      The background color, used by clearRect().
      private boolean checkStrokeControlHint
      A flag that controls whether or not the KEY_STROKE_CONTROL hint is checked.
      private java.awt.Shape clip
      The user clip (can be null).
      private static java.lang.String CLIP_KEY_PREFIX
      The prefix for keys used to identify clip paths.
      private java.util.List<java.lang.String> clipPaths
      A list of the registered clip regions.
      private java.lang.String clipRef
      The reference for the current clip.
      private java.awt.Color color  
      private java.awt.Composite composite  
      private static float DEFAULT_MITER_LIMIT  
      private static java.lang.String DEFAULT_STROKE_CAP  
      private static java.lang.String DEFAULT_STROKE_JOIN  
      private java.lang.String defsKeyPrefix
      A prefix for the keys used in the DEFS element.
      private java.awt.GraphicsConfiguration deviceConfiguration
      The device configuration (this is lazily instantiated in the getDeviceConfiguration() method).
      private java.util.Set<java.lang.String> elementIDs
      A set of element IDs.
      private java.lang.String filePrefix
      The filename prefix for images that are referenced rather than embedded but don't have an href supplied via the SVGHints.KEY_IMAGE_HREF hint.
      private java.lang.String fileSuffix
      The filename suffix for images that are referenced rather than embedded but don't have an href supplied via the SVGHints.KEY_IMAGE_HREF hint.
      private java.awt.image.BufferedImage fmImage
      An internal image used for font metrics.
      private java.awt.Graphics2D fmImageG2D
      The graphics target for the internal image that is used for font metrics.
      private java.awt.Font font
      The last font that was set.
      private java.util.function.Function<java.lang.String,​java.lang.String> fontFunction
      Generates the SVG font from the Java font family name (this function provides a hook for custom output formatting (for example putting quotes around the font family name - see issue #27) and font substitutions.
      private java.awt.font.FontRenderContext fontRenderContext
      The font render context.
      private SVGUnits fontSizeUnits
      The font size units.
      private java.util.function.DoubleFunction<java.lang.String> geomDoubleConverter
      The function used to convert double values to strings for the geometry coordinates in the SVG output.
      private java.lang.String gradientPaintRef
      If the current paint is an instance of GradientPaint, this field will contain the reference id that is used in the DEFS element for that linear gradient.
      private java.util.Map<GradientPaintKey,​java.lang.String> gradientPaints
      A map of all the gradients used, and the corresponding id.
      private double height
      The height of the SVG.
      private java.awt.RenderingHints hints
      Rendering hints (see SVGHints).
      private java.util.List<ImageElement> imageElements
      A list of images that are referenced but not embedded in the SVG.
      private java.awt.geom.Line2D line
      An instance that is lazily instantiated in drawLine and then subsequently reused to avoid creating a lot of garbage.
      private java.util.Map<LinearGradientPaintKey,​java.lang.String> linearGradientPaints
      A map of all the linear gradients used, and the corresponding id.
      private java.awt.geom.Ellipse2D oval
      An instance that is lazily instantiated in draw/fillOval and then subsequently reused to avoid creating a lot of garbage.
      private java.awt.Paint paint
      The paint used to draw or fill shapes and text.
      private java.util.Map<RadialGradientPaintKey,​java.lang.String> radialGradientPaints
      A map of all the radial gradients used, and the corresponding id.
      private java.awt.geom.Rectangle2D rect
      An instance that is lazily instantiated in fillRect and then subsequently reused to avoid creating a lot of garbage.
      private java.awt.geom.RoundRectangle2D roundRect
      An instance that is lazily instantiated in draw/fillRoundRect and then subsequently reused to avoid creating a lot of garbage.
      private java.lang.StringBuilder sb
      The buffer that accumulates the SVG output.
      private java.awt.Stroke stroke
      The current stroke.
      private java.awt.geom.AffineTransform transform
      The current transform.
      private java.util.function.DoubleFunction<java.lang.String> transformDoubleConverter
      The function used to convert double values to strings when writing matrix values for transforms in the SVG output.
      private SVGUnits units
      Units for the width and height of the SVG, if null then no unit information is written in the SVG output.
      private double width
      The width of the SVG.
      private double zeroStrokeWidth
      The width of the SVG stroke to use when the user supplies a BasicStroke with a width of 0.0 (in this case the Java specification says "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting.")
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        SVGGraphics2D​(double width, double height)
      Creates a new instance with the specified width and height.
        SVGGraphics2D​(double width, double height, SVGUnits units)
      Creates a new instance with the specified width and height in the given units.
        SVGGraphics2D​(double width, double height, SVGUnits units, java.lang.StringBuilder sb)
      Creates a new instance with the specified width and height that will populate the supplied StringBuilder instance.
      private SVGGraphics2D​(SVGGraphics2D parent)
      Creates a new instance that is a child of the supplied parent.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addRenderingHints​(java.util.Map<?,​?> hints)
      Adds all the supplied rendering hints.
      private void appendOptionalElementIDFromHint​(java.lang.StringBuilder builder)
      A utility method that appends an optional element id if one is specified via the rendering hints.
      void clearRect​(int x, int y, int width, int height)
      Clears the specified rectangle by filling it with the current background color.
      void clip​(java.awt.Shape s)
      Clips to the intersection of the current clipping region and the specified shape.
      void clipRect​(int x, int y, int width, int height)
      Clips to the intersection of the current clipping region and the specified rectangle.
      void copyArea​(int x, int y, int width, int height, int dx, int dy)
      This method does nothing.
      java.awt.Graphics create()
      Creates a new graphics object that is a copy of this graphics object (except that it has not accumulated the drawing operations).
      void dispose()
      This method does nothing, there are no resources to dispose.
      void draw​(java.awt.Shape s)
      Draws the specified shape with the current paint and stroke.
      void drawArc​(int x, int y, int width, int height, int startAngle, int arcAngle)
      Draws an arc contained within the rectangle (x, y, width, height), starting at startAngle and continuing through arcAngle degrees using the current paint and stroke.
      void drawGlyphVector​(java.awt.font.GlyphVector g, float x, float y)
      Draws the specified glyph vector at the location (x, y).
      void drawImage​(java.awt.image.BufferedImage img, java.awt.image.BufferedImageOp op, int x, int y)
      Draws the image resulting from applying the BufferedImageOp to the specified image at the location (x, y).
      boolean drawImage​(java.awt.Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, java.awt.Color bgcolor, java.awt.image.ImageObserver observer)
      Draws part of an image (defined by the source rectangle (sx1, sy1, sx2, sy2)) into the destination rectangle (dx1, dy1, dx2, dy2).
      boolean drawImage​(java.awt.Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, java.awt.image.ImageObserver observer)
      Draws part of an image (defined by the source rectangle (sx1, sy1, sx2, sy2)) into the destination rectangle (dx1, dy1, dx2, dy2).
      boolean drawImage​(java.awt.Image img, int x, int y, int w, int h, java.awt.Color bgcolor, java.awt.image.ImageObserver observer)
      Draws an image to the rectangle (x, y, w, h) (scaling it if required), first filling the background with the specified color.
      boolean drawImage​(java.awt.Image img, int x, int y, int w, int h, java.awt.image.ImageObserver observer)
      Draws the image into the rectangle defined by (x, y, w, h).
      boolean drawImage​(java.awt.Image img, int x, int y, java.awt.Color bgcolor, java.awt.image.ImageObserver observer)
      Draws an image at the location (x, y).
      boolean drawImage​(java.awt.Image img, int x, int y, java.awt.image.ImageObserver observer)
      Draws an image at the location (x, y).
      boolean drawImage​(java.awt.Image img, java.awt.geom.AffineTransform xform, java.awt.image.ImageObserver obs)
      Draws an image with the specified transform.
      void drawLine​(int x1, int y1, int x2, int y2)
      Draws a line from (x1, y1) to (x2, y2) using the current paint and stroke.
      void drawOval​(int x, int y, int width, int height)
      Draws an oval framed by the rectangle (x, y, width, height) using the current paint and stroke.
      void drawPolygon​(int[] xPoints, int[] yPoints, int nPoints)
      Draws the specified polygon using the current paint and stroke.
      void drawPolyline​(int[] xPoints, int[] yPoints, int nPoints)
      Draws the specified multi-segment line using the current paint and stroke.
      void drawRenderableImage​(java.awt.image.renderable.RenderableImage img, java.awt.geom.AffineTransform xform)
      Draws the renderable image.
      void drawRenderedImage​(java.awt.image.RenderedImage img, java.awt.geom.AffineTransform xform)
      Draws the rendered image.
      void drawRoundRect​(int x, int y, int width, int height, int arcWidth, int arcHeight)
      Draws a rectangle with rounded corners using the current paint and stroke.
      void drawString​(java.lang.String str, float x, float y)
      Draws a string at (x, y).
      void drawString​(java.lang.String str, int x, int y)
      Draws a string at (x, y).
      void drawString​(java.text.AttributedCharacterIterator iterator, float x, float y)
      Draws a string of attributed characters at (x, y).
      void drawString​(java.text.AttributedCharacterIterator iterator, int x, int y)
      Draws a string of attributed characters at (x, y).
      void fill​(java.awt.Shape s)
      Fills the specified shape with the current paint.
      void fillArc​(int x, int y, int width, int height, int startAngle, int arcAngle)
      Fills an arc contained within the rectangle (x, y, width, height), starting at startAngle and continuing through arcAngle degrees, using the current paint.
      void fillOval​(int x, int y, int width, int height)
      Fills an oval framed by the rectangle (x, y, width, height).
      void fillPolygon​(int[] xPoints, int[] yPoints, int nPoints)
      Fills the specified polygon using the current paint.
      void fillRect​(int x, int y, int width, int height)
      Fills the specified rectangle with the current paint.
      void fillRoundRect​(int x, int y, int width, int height, int arcWidth, int arcHeight)
      Fills a rectangle with rounded corners using the current paint.
      private java.lang.String geomDP​(double d)
      Returns a string representation of the specified number for use in the SVG output.
      private float getAlpha()
      Returns the current alpha (transparency) in the range 0.0 to 1.0.
      java.awt.Color getBackground()
      Returns the background color.
      boolean getCheckStrokeControlHint()
      Returns the flag that controls whether or not this object will observe the KEY_STROKE_CONTROL rendering hint.
      java.awt.Shape getClip()
      Returns the user clipping region.
      java.awt.Rectangle getClipBounds()
      Returns the bounds of the user clipping region.
      private java.lang.String getClipPathRef()
      Returns a clip path reference for the current user clip.
      java.awt.Color getColor()
      Returns the foreground color.
      private float getColorAlpha()
      Returns the alpha value of the current paint, or 1.0f if it is not an instance of Color.
      java.awt.Composite getComposite()
      Returns the current composite.
      java.lang.String getDefsKeyPrefix()
      Returns the prefix used for all keys in the DEFS element.
      java.awt.GraphicsConfiguration getDeviceConfiguration()
      Returns the device configuration associated with this Graphics2D.
      java.util.Set<java.lang.String> getElementIDs()
      Returns a new set containing the element IDs that have been used in output so far.
      java.lang.String getFilePrefix()
      Returns the prefix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.
      java.lang.String getFileSuffix()
      Returns the suffix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.
      java.awt.Font getFont()
      Returns the current font used for drawing text.
      java.util.function.Function<java.lang.String,​java.lang.String> getFontFunction()
      Returns the function that generates SVG font references from a supplied Java font family name.
      java.awt.FontMetrics getFontMetrics​(java.awt.Font f)
      Returns the font metrics for the specified font.
      java.awt.font.FontRenderContext getFontRenderContext()
      Returns the font render context.
      SVGUnits getFontSizeUnits()
      Returns the font size units.
      java.util.function.DoubleFunction<java.lang.String> getGeomDoubleConverter()
      Returns the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output.
      double getHeight()
      Returns the height for the SVG element, specified in the constructor.
      private java.lang.String getLinearGradientElement​(java.lang.String id, java.awt.GradientPaint paint)
      Returns an element to represent a linear gradient.
      private java.lang.String getLinearGradientElement​(java.lang.String id, java.awt.LinearGradientPaint paint)
      Returns an element to represent a linear gradient.
      java.awt.Paint getPaint()
      Returns the paint used to draw or fill shapes (or text).
      private byte[] getPNGBytes​(java.awt.Image img)
      Returns the bytes representing a PNG format image.
      private java.lang.String getRadialGradientElement​(java.lang.String id, java.awt.RadialGradientPaint rgp)
      Returns an element to represent a radial gradient.
      java.lang.Object getRenderingHint​(java.awt.RenderingHints.Key hintKey)
      Returns the current value for the specified hint.
      java.awt.RenderingHints getRenderingHints()
      Returns a copy of the rendering hints.
      java.awt.Stroke getStroke()
      Returns the current stroke (used when drawing shapes).
      java.lang.String getSVGDocument()
      Returns an SVG document (this contains the content returned by the getSVGElement() method, prepended with the required document header).
      java.lang.String getSVGElement()
      Returns the SVG element that has been generated by calls to this Graphics2D implementation.
      java.lang.String getSVGElement​(java.lang.String id)
      Returns the SVG element that has been generated by calls to this Graphics2D implementation, giving it the specified id.
      java.lang.String getSVGElement​(java.lang.String id, boolean includeDimensions, ViewBox viewBox, PreserveAspectRatio preserveAspectRatio, MeetOrSlice meetOrSlice)
      Returns the SVG element that has been generated by calls to this Graphics2D implementation, giving it the specified id.
      private java.lang.String getSVGFillStyle()
      Returns a fill style string based on the current paint and alpha settings.
      private java.lang.String getSVGFontStyle()
      Returns a string containing font style info.
      java.util.List<ImageElement> getSVGImages()
      Returns the list of image elements that have been referenced in the SVG output but not embedded.
      private java.lang.String getSVGPathData​(java.awt.geom.Path2D path)
      Creates an SVG path string for the supplied Java2D path.
      private java.lang.String getSVGTransform​(java.awt.geom.AffineTransform t)  
      java.awt.geom.AffineTransform getTransform()
      Returns a copy of the current transform.
      java.util.function.DoubleFunction<java.lang.String> getTransformDoubleConverter()
      Returns the double-to-string function that is used when writing values for matrix transformations in the SVG output.
      SVGUnits getUnits()
      Returns the units for the width and height of the SVG element's viewport, as specified in the constructor.
      double getWidth()
      Returns the width for the SVG element, specified in the constructor.
      double getZeroStrokeWidth()
      Returns the width to use for the SVG stroke when the AWT stroke specified has a zero width (the default value is 0.1).
      boolean hit​(java.awt.Rectangle rect, java.awt.Shape s, boolean onStroke)
      Returns true if the rectangle (in device space) intersects with the shape (the interior, if onStroke is false, otherwise the stroked outline of the shape).
      private boolean isDefsOutputRequired()
      Returns true if there are items that need to be written to the DEFS element, and false otherwise.
      private java.lang.String registerClip​(java.awt.Shape clip)
      Registers the clip so that we can later write out all the clip definitions in the DEFS element.
      private java.lang.String rgbaColorStr​(java.awt.Color c)
      Returns a string representing the specified color in RGBA format.
      private java.lang.String rgbColorStr​(java.awt.Color c)
      Returns the SVG RGB color string for the specified color.
      void rotate​(double theta)
      Applies a rotation (anti-clockwise) about (0, 0).
      void rotate​(double theta, double x, double y)
      Applies a rotation (anti-clockwise) about (x, y).
      void scale​(double sx, double sy)
      Applies a scale transformation.
      void setBackground​(java.awt.Color color)
      Sets the background color.
      void setCheckStrokeControlHint​(boolean check)
      Sets the flag that controls whether or not this object will observe the KEY_STROKE_CONTROL rendering hint.
      void setClip​(int x, int y, int width, int height)
      Sets the user clipping region to the specified rectangle.
      void setClip​(java.awt.Shape shape)
      Sets the user clipping region.
      void setColor​(java.awt.Color c)
      Sets the foreground color.
      void setComposite​(java.awt.Composite comp)
      Sets the composite (only AlphaComposite is handled).
      void setDefsKeyPrefix​(java.lang.String prefix)
      Sets the prefix that will be used for all keys in the DEFS element.
      void setFilePrefix​(java.lang.String prefix)
      Sets the prefix used to generate a filename for any image that is referenced from the SVG element.
      void setFileSuffix​(java.lang.String suffix)
      Sets the suffix used to generate a filename for any image that is referenced from the SVG element.
      void setFont​(java.awt.Font font)
      Sets the font to be used for drawing text.
      void setFontFunction​(java.util.function.Function<java.lang.String,​java.lang.String> fontFunction)
      Sets the font function that is used to generate SVG font references from Java font family names.
      void setFontSizeUnits​(SVGUnits fontSizeUnits)
      Sets the font size units.
      void setGeomDoubleConverter​(java.util.function.DoubleFunction<java.lang.String> converter)
      Sets the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output.
      private void setOval​(int x, int y, int width, int height)
      Sets the attributes of the reusable Ellipse2D object that is used by the drawOval(int, int, int, int) and fillOval(int, int, int, int) methods.
      void setPaint​(java.awt.Paint paint)
      Sets the paint used to draw or fill shapes (or text).
      void setPaintMode()
      Does nothing in this SVGGraphics2D implementation.
      private void setRect​(int x, int y, int width, int height)
      Sets the attributes of the reusable Rectangle2D object that is used by the Graphics.drawRect(int, int, int, int) and fillRect(int, int, int, int) methods.
      void setRenderingHint​(java.awt.RenderingHints.Key hintKey, java.lang.Object hintValue)
      Sets the value for a hint.
      void setRenderingHints​(java.util.Map<?,​?> hints)
      Sets the rendering hints to the specified collection.
      private void setRoundRect​(int x, int y, int width, int height, int arcWidth, int arcHeight)
      Sets the attributes of the reusable RoundRectangle2D object that is used by the drawRoundRect(int, int, int, int, int, int) and fillRoundRect(int, int, int, int, int, int) methods.
      void setStroke​(java.awt.Stroke s)
      Sets the stroke that will be used to draw shapes.
      void setTransform​(java.awt.geom.AffineTransform t)
      Sets the transform.
      void setTransformDoubleConverter​(java.util.function.DoubleFunction<java.lang.String> converter)
      Sets the double-to-string function that is used when writing coordinates for matrix transformations in the SVG output.
      void setXORMode​(java.awt.Color c)
      Does nothing in this SVGGraphics2D implementation.
      void setZeroStrokeWidth​(double width)
      Sets the width to use for the SVG stroke when the current AWT stroke has a width of 0.0.
      void shear​(double shx, double shy)
      Applies a shear transformation.
      private java.lang.String strokeStyle()
      Returns a stroke style string based on the current stroke and alpha settings.
      private java.lang.String svgColorStr()
      Returns an SVG color string based on the current paint.
      void transform​(java.awt.geom.AffineTransform t)
      Applies this transform to the existing transform by concatenating it.
      private java.lang.String transformDP​(double d)
      Returns a string representation of the specified number for use in the SVG output.
      void translate​(double tx, double ty)
      Applies the translation (tx, ty).
      void translate​(int tx, int ty)
      Applies the translation (tx, ty).
      • Methods inherited from class java.awt.Graphics2D

        draw3DRect, fill3DRect
      • Methods inherited from class java.awt.Graphics

        create, drawBytes, drawChars, drawPolygon, drawRect, fillPolygon, finalize, getClipBounds, getClipRect, getFontMetrics, hitClip, toString
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • CLIP_KEY_PREFIX

        private static final java.lang.String CLIP_KEY_PREFIX
        The prefix for keys used to identify clip paths.
        See Also:
        Constant Field Values
      • width

        private final double width
        The width of the SVG.
      • height

        private final double height
        The height of the SVG.
      • units

        private final SVGUnits units
        Units for the width and height of the SVG, if null then no unit information is written in the SVG output. This is set via the class constructors.
      • fontSizeUnits

        private SVGUnits fontSizeUnits
        The font size units.
      • hints

        private final java.awt.RenderingHints hints
        Rendering hints (see SVGHints).
      • checkStrokeControlHint

        private boolean checkStrokeControlHint
        A flag that controls whether or not the KEY_STROKE_CONTROL hint is checked.
      • transformDoubleConverter

        private java.util.function.DoubleFunction<java.lang.String> transformDoubleConverter
        The function used to convert double values to strings when writing matrix values for transforms in the SVG output.
      • geomDoubleConverter

        private java.util.function.DoubleFunction<java.lang.String> geomDoubleConverter
        The function used to convert double values to strings for the geometry coordinates in the SVG output.
      • sb

        private final java.lang.StringBuilder sb
        The buffer that accumulates the SVG output.
      • defsKeyPrefix

        private java.lang.String defsKeyPrefix
        A prefix for the keys used in the DEFS element. This can be used to ensure that the keys are unique when creating more than one SVG element for a single HTML page.
      • gradientPaints

        private java.util.Map<GradientPaintKey,​java.lang.String> gradientPaints
        A map of all the gradients used, and the corresponding id. When generating the SVG file, all the gradient paints used must be defined in the defs element.
      • linearGradientPaints

        private java.util.Map<LinearGradientPaintKey,​java.lang.String> linearGradientPaints
        A map of all the linear gradients used, and the corresponding id. When generating the SVG file, all the linear gradient paints used must be defined in the defs element.
      • radialGradientPaints

        private java.util.Map<RadialGradientPaintKey,​java.lang.String> radialGradientPaints
        A map of all the radial gradients used, and the corresponding id. When generating the SVG file, all the radial gradient paints used must be defined in the defs element.
      • clipPaths

        private java.util.List<java.lang.String> clipPaths
        A list of the registered clip regions. These will be written to the DEFS element.
      • filePrefix

        private java.lang.String filePrefix
        The filename prefix for images that are referenced rather than embedded but don't have an href supplied via the SVGHints.KEY_IMAGE_HREF hint.
      • fileSuffix

        private java.lang.String fileSuffix
        The filename suffix for images that are referenced rather than embedded but don't have an href supplied via the SVGHints.KEY_IMAGE_HREF hint.
      • imageElements

        private java.util.List<ImageElement> imageElements
        A list of images that are referenced but not embedded in the SVG. After the SVG is generated, the caller can make use of this list to write PNG files if they don't already exist.
      • clip

        private java.awt.Shape clip
        The user clip (can be null).
      • clipRef

        private java.lang.String clipRef
        The reference for the current clip.
      • transform

        private java.awt.geom.AffineTransform transform
        The current transform.
      • paint

        private java.awt.Paint paint
        The paint used to draw or fill shapes and text.
      • color

        private java.awt.Color color
      • composite

        private java.awt.Composite composite
      • stroke

        private java.awt.Stroke stroke
        The current stroke.
      • zeroStrokeWidth

        private double zeroStrokeWidth
        The width of the SVG stroke to use when the user supplies a BasicStroke with a width of 0.0 (in this case the Java specification says "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting.")
      • font

        private java.awt.Font font
        The last font that was set.
      • fontRenderContext

        private final java.awt.font.FontRenderContext fontRenderContext
        The font render context. The fractional metrics flag solves the glyph positioning issue identified by Christoph Nahr: http://news.kynosarges.org/2014/06/28/glyph-positioning-in-jfreesvg-orsonpdf/
      • fontFunction

        private java.util.function.Function<java.lang.String,​java.lang.String> fontFunction
        Generates the SVG font from the Java font family name (this function provides a hook for custom output formatting (for example putting quotes around the font family name - see issue #27) and font substitutions.
      • background

        private java.awt.Color background
        The background color, used by clearRect().
      • fmImage

        private java.awt.image.BufferedImage fmImage
        An internal image used for font metrics.
      • fmImageG2D

        private java.awt.Graphics2D fmImageG2D
        The graphics target for the internal image that is used for font metrics.
      • line

        private java.awt.geom.Line2D line
        An instance that is lazily instantiated in drawLine and then subsequently reused to avoid creating a lot of garbage.
      • rect

        private java.awt.geom.Rectangle2D rect
        An instance that is lazily instantiated in fillRect and then subsequently reused to avoid creating a lot of garbage.
      • roundRect

        private java.awt.geom.RoundRectangle2D roundRect
        An instance that is lazily instantiated in draw/fillRoundRect and then subsequently reused to avoid creating a lot of garbage.
      • oval

        private java.awt.geom.Ellipse2D oval
        An instance that is lazily instantiated in draw/fillOval and then subsequently reused to avoid creating a lot of garbage.
      • arc

        private final java.awt.geom.Arc2D arc
        An instance that is reused in draw/fillArc to avoid creating a lot of garbage.
      • gradientPaintRef

        private java.lang.String gradientPaintRef
        If the current paint is an instance of GradientPaint, this field will contain the reference id that is used in the DEFS element for that linear gradient.
      • deviceConfiguration

        private java.awt.GraphicsConfiguration deviceConfiguration
        The device configuration (this is lazily instantiated in the getDeviceConfiguration() method).
      • elementIDs

        private final java.util.Set<java.lang.String> elementIDs
        A set of element IDs.
      • DEFAULT_STROKE_CAP

        private static final java.lang.String DEFAULT_STROKE_CAP
        See Also:
        Constant Field Values
      • DEFAULT_STROKE_JOIN

        private static final java.lang.String DEFAULT_STROKE_JOIN
        See Also:
        Constant Field Values
    • Constructor Detail

      • SVGGraphics2D

        public SVGGraphics2D​(double width,
                             double height)
        Creates a new instance with the specified width and height.
        Parameters:
        width - the width of the SVG element.
        height - the height of the SVG element.
      • SVGGraphics2D

        public SVGGraphics2D​(double width,
                             double height,
                             SVGUnits units)
        Creates a new instance with the specified width and height in the given units.
        Parameters:
        width - the width of the SVG element.
        height - the height of the SVG element.
        units - the units for the width and height (null permitted).
        Since:
        3.2
      • SVGGraphics2D

        public SVGGraphics2D​(double width,
                             double height,
                             SVGUnits units,
                             java.lang.StringBuilder sb)
        Creates a new instance with the specified width and height that will populate the supplied StringBuilder instance.
        Parameters:
        width - the width of the SVG element.
        height - the height of the SVG element.
        units - the units for the width and height (null permitted).
        sb - the string builder (null not permitted).
        Since:
        3.2
      • SVGGraphics2D

        private SVGGraphics2D​(SVGGraphics2D parent)
        Creates a new instance that is a child of the supplied parent.
        Parameters:
        parent - the parent (null not permitted).
    • Method Detail

      • getWidth

        public double getWidth()
        Returns the width for the SVG element, specified in the constructor. This value will be written to the SVG element returned by the getSVGElement() method.
        Returns:
        The width for the SVG element.
      • getHeight

        public double getHeight()
        Returns the height for the SVG element, specified in the constructor. This value will be written to the SVG element returned by the getSVGElement() method.
        Returns:
        The height for the SVG element.
      • getUnits

        public SVGUnits getUnits()
        Returns the units for the width and height of the SVG element's viewport, as specified in the constructor. The default value is null).
        Returns:
        The units (possibly null).
        Since:
        3.2
      • getCheckStrokeControlHint

        public boolean getCheckStrokeControlHint()
        Returns the flag that controls whether or not this object will observe the KEY_STROKE_CONTROL rendering hint. The default value is true.
        Returns:
        A boolean.
        Since:
        2.0
        See Also:
        setCheckStrokeControlHint(boolean)
      • setCheckStrokeControlHint

        public void setCheckStrokeControlHint​(boolean check)
        Sets the flag that controls whether or not this object will observe the KEY_STROKE_CONTROL rendering hint. When enabled (the default), a hint to normalise strokes will write a stroke-style attribute with the value crispEdges.
        Parameters:
        check - the new flag value.
        Since:
        2.0
        See Also:
        getCheckStrokeControlHint()
      • getDefsKeyPrefix

        public java.lang.String getDefsKeyPrefix()
        Returns the prefix used for all keys in the DEFS element. The default value is "_"+ String.valueOf(System.nanoTime()).
        Returns:
        The prefix string (never null).
        Since:
        1.9
      • setDefsKeyPrefix

        public void setDefsKeyPrefix​(java.lang.String prefix)
        Sets the prefix that will be used for all keys in the DEFS element. If required, this must be set immediately after construction (before any content generation methods have been called).
        Parameters:
        prefix - the prefix (null not permitted).
        Since:
        1.9
      • getGeomDoubleConverter

        public java.util.function.DoubleFunction<java.lang.String> getGeomDoubleConverter()
        Returns the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output. The default function uses the Ryu algorithm for speed (see class description for more details).
        Returns:
        The double-to-string function (never null).
        Since:
        5.0
      • setGeomDoubleConverter

        public void setGeomDoubleConverter​(java.util.function.DoubleFunction<java.lang.String> converter)
        Sets the double-to-string function that is used when writing coordinates for geometrical shapes in the SVG output. The default converter optimises for speed when generating the SVG and should cover normal usage. However, this method provides the ability to substitute an alternative function (for example, one that favours output size over speed of generation).
        Parameters:
        converter - the convertor function (null not permitted).
        Since:
        5.0
        See Also:
        setTransformDoubleConverter(java.util.function.DoubleFunction)
      • getTransformDoubleConverter

        public java.util.function.DoubleFunction<java.lang.String> getTransformDoubleConverter()
        Returns the double-to-string function that is used when writing values for matrix transformations in the SVG output.
        Returns:
        The double-to-string function (never null).
        Since:
        5.0
      • setTransformDoubleConverter

        public void setTransformDoubleConverter​(java.util.function.DoubleFunction<java.lang.String> converter)
        Sets the double-to-string function that is used when writing coordinates for matrix transformations in the SVG output. The default converter optimises for speed when generating the SVG and should cover normal usage. However this method provides the ability to substitute an alternative function (for example, one that favours output size over speed of generation).
        Parameters:
        converter - the convertor function (null not permitted).
        Since:
        5.0
        See Also:
        setGeomDoubleConverter(java.util.function.DoubleFunction)
      • getFilePrefix

        public java.lang.String getFilePrefix()
        Returns the prefix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.
        Returns:
        The file prefix (never null).
        Since:
        1.5
      • setFilePrefix

        public void setFilePrefix​(java.lang.String prefix)
        Sets the prefix used to generate a filename for any image that is referenced from the SVG element.
        Parameters:
        prefix - the new prefix (null not permitted).
        Since:
        1.5
      • getFileSuffix

        public java.lang.String getFileSuffix()
        Returns the suffix used to generate a filename for an image that is referenced from, rather than embedded in, the SVG element.
        Returns:
        The file suffix (never null).
        Since:
        1.5
      • setFileSuffix

        public void setFileSuffix​(java.lang.String suffix)
        Sets the suffix used to generate a filename for any image that is referenced from the SVG element.
        Parameters:
        suffix - the new prefix (null not permitted).
        Since:
        1.5
      • getZeroStrokeWidth

        public double getZeroStrokeWidth()
        Returns the width to use for the SVG stroke when the AWT stroke specified has a zero width (the default value is 0.1). In the Java specification for BasicStroke it states "If width is set to 0.0f, the stroke is rendered as the thinnest possible line for the target device and the antialias hint setting." We don't have a means to implement that accurately since we must specify a fixed width.
        Returns:
        The width.
        Since:
        1.9
      • setZeroStrokeWidth

        public void setZeroStrokeWidth​(double width)
        Sets the width to use for the SVG stroke when the current AWT stroke has a width of 0.0.
        Parameters:
        width - the new width (must be 0 or greater).
        Since:
        1.9
      • getDeviceConfiguration

        public java.awt.GraphicsConfiguration getDeviceConfiguration()
        Returns the device configuration associated with this Graphics2D.
        Specified by:
        getDeviceConfiguration in class java.awt.Graphics2D
        Returns:
        The graphics configuration.
      • create

        public java.awt.Graphics create()
        Creates a new graphics object that is a copy of this graphics object (except that it has not accumulated the drawing operations). Not sure yet when or why this would be useful when creating SVG output. Note that the fontFunction object (getFontFunction()) is shared between the existing instance and the new one.
        Specified by:
        create in class java.awt.Graphics
        Returns:
        A new graphics object.
      • getPaint

        public java.awt.Paint getPaint()
        Returns the paint used to draw or fill shapes (or text). The default value is Color.BLACK.
        Specified by:
        getPaint in class java.awt.Graphics2D
        Returns:
        The paint (never null).
        See Also:
        setPaint(java.awt.Paint)
      • setPaint

        public void setPaint​(java.awt.Paint paint)
        Sets the paint used to draw or fill shapes (or text). If paint is an instance of Color, this method will also update the current color attribute (see getColor()). If you pass null to this method, it does nothing (in accordance with the JDK specification).
        Specified by:
        setPaint in class java.awt.Graphics2D
        Parameters:
        paint - the paint (null is permitted but ignored).
        See Also:
        getPaint()
      • getColor

        public java.awt.Color getColor()
        Returns the foreground color. This method exists for backwards compatibility in AWT, you should use the getPaint() method.
        Specified by:
        getColor in class java.awt.Graphics
        Returns:
        The foreground color (never null).
        See Also:
        getPaint()
      • setColor

        public void setColor​(java.awt.Color c)
        Sets the foreground color. This method exists for backwards compatibility in AWT, you should use the setPaint(java.awt.Paint) method.
        Specified by:
        setColor in class java.awt.Graphics
        Parameters:
        c - the color (null permitted but ignored).
        See Also:
        setPaint(java.awt.Paint)
      • getBackground

        public java.awt.Color getBackground()
        Returns the background color. The default value is Color.BLACK. This is used by the clearRect(int, int, int, int) method.
        Specified by:
        getBackground in class java.awt.Graphics2D
        Returns:
        The background color (possibly null).
        See Also:
        setBackground(java.awt.Color)
      • setBackground

        public void setBackground​(java.awt.Color color)
        Sets the background color. This is used by the clearRect(int, int, int, int) method. The reference implementation allows null for the background color, so we allow that too (but for that case, the clearRect method will do nothing).
        Specified by:
        setBackground in class java.awt.Graphics2D
        Parameters:
        color - the color (null permitted).
        See Also:
        getBackground()
      • getComposite

        public java.awt.Composite getComposite()
        Returns the current composite.
        Specified by:
        getComposite in class java.awt.Graphics2D
        Returns:
        The current composite (never null).
        See Also:
        setComposite(java.awt.Composite)
      • setComposite

        public void setComposite​(java.awt.Composite comp)
        Sets the composite (only AlphaComposite is handled).
        Specified by:
        setComposite in class java.awt.Graphics2D
        Parameters:
        comp - the composite (null not permitted).
        See Also:
        getComposite()
      • getStroke

        public java.awt.Stroke getStroke()
        Returns the current stroke (used when drawing shapes).
        Specified by:
        getStroke in class java.awt.Graphics2D
        Returns:
        The current stroke (never null).
        See Also:
        setStroke(java.awt.Stroke)
      • setStroke

        public void setStroke​(java.awt.Stroke s)
        Sets the stroke that will be used to draw shapes.
        Specified by:
        setStroke in class java.awt.Graphics2D
        Parameters:
        s - the stroke (null not permitted).
        See Also:
        getStroke()
      • getRenderingHint

        public java.lang.Object getRenderingHint​(java.awt.RenderingHints.Key hintKey)
        Returns the current value for the specified hint. See the SVGHints class for information about the hints that can be used with SVGGraphics2D.
        Specified by:
        getRenderingHint in class java.awt.Graphics2D
        Parameters:
        hintKey - the hint key (null permitted, but the result will be null also).
        Returns:
        The current value for the specified hint (possibly null).
        See Also:
        setRenderingHint(java.awt.RenderingHints.Key, java.lang.Object)
      • setRenderingHint

        public void setRenderingHint​(java.awt.RenderingHints.Key hintKey,
                                     java.lang.Object hintValue)
        Sets the value for a hint. See the SVGHints class for information about the hints that can be used with this implementation.
        Specified by:
        setRenderingHint in class java.awt.Graphics2D
        Parameters:
        hintKey - the hint key (null not permitted).
        hintValue - the hint value.
        See Also:
        getRenderingHint(java.awt.RenderingHints.Key)
      • getRenderingHints

        public java.awt.RenderingHints getRenderingHints()
        Returns a copy of the rendering hints. Modifying the returned copy will have no impact on the state of this Graphics2D instance.
        Specified by:
        getRenderingHints in class java.awt.Graphics2D
        Returns:
        The rendering hints (never null).
        See Also:
        setRenderingHints(java.util.Map)
      • setRenderingHints

        public void setRenderingHints​(java.util.Map<?,​?> hints)
        Sets the rendering hints to the specified collection.
        Specified by:
        setRenderingHints in class java.awt.Graphics2D
        Parameters:
        hints - the new set of hints (null not permitted).
        See Also:
        getRenderingHints()
      • addRenderingHints

        public void addRenderingHints​(java.util.Map<?,​?> hints)
        Adds all the supplied rendering hints.
        Specified by:
        addRenderingHints in class java.awt.Graphics2D
        Parameters:
        hints - the hints (null not permitted).
      • appendOptionalElementIDFromHint

        private void appendOptionalElementIDFromHint​(java.lang.StringBuilder builder)
        A utility method that appends an optional element id if one is specified via the rendering hints.
        Parameters:
        builder - the string builder (null not permitted).
      • draw

        public void draw​(java.awt.Shape s)
        Draws the specified shape with the current paint and stroke. There is direct handling for Line2D, Rectangle2D, Ellipse2D and Path2D. All other shapes are mapped to a GeneralPath and then drawn (effectively as Path2D objects).
        Specified by:
        draw in class java.awt.Graphics2D
        Parameters:
        s - the shape (null not permitted).
        See Also:
        fill(java.awt.Shape)
      • fill

        public void fill​(java.awt.Shape s)
        Fills the specified shape with the current paint. There is direct handling for Rectangle2D, Ellipse2D and Path2D. All other shapes are mapped to a GeneralPath and then filled.
        Specified by:
        fill in class java.awt.Graphics2D
        Parameters:
        s - the shape (null not permitted).
        See Also:
        draw(java.awt.Shape)
      • getSVGPathData

        private java.lang.String getSVGPathData​(java.awt.geom.Path2D path)
        Creates an SVG path string for the supplied Java2D path.
        Parameters:
        path - the path (null not permitted).
        Returns:
        An SVG path string.
      • getAlpha

        private float getAlpha()
        Returns the current alpha (transparency) in the range 0.0 to 1.0. If the current composite is an AlphaComposite we read the alpha value from there, otherwise this method returns 1.0.
        Returns:
        The current alpha (transparency) in the range 0.0 to 1.0.
      • svgColorStr

        private java.lang.String svgColorStr()
        Returns an SVG color string based on the current paint. To handle GradientPaint we rely on the setPaint() method having set the gradientPaintRef attribute.
        Returns:
        An SVG color string.
      • rgbColorStr

        private java.lang.String rgbColorStr​(java.awt.Color c)
        Returns the SVG RGB color string for the specified color.
        Parameters:
        c - the color (null not permitted).
        Returns:
        The SVG RGB color string.
      • rgbaColorStr

        private java.lang.String rgbaColorStr​(java.awt.Color c)
        Returns a string representing the specified color in RGBA format.
        Parameters:
        c - the color (null not permitted).
        Returns:
        The SVG RGBA color string.
      • strokeStyle

        private java.lang.String strokeStyle()
        Returns a stroke style string based on the current stroke and alpha settings. Implementation note: the last attribute in the string will not have a semicolon after it.
        Returns:
        A stroke style string.
      • getColorAlpha

        private float getColorAlpha()
        Returns the alpha value of the current paint, or 1.0f if it is not an instance of Color.
        Returns:
        The alpha value (in the range 0.0 to 1.0).
      • getSVGFillStyle

        private java.lang.String getSVGFillStyle()
        Returns a fill style string based on the current paint and alpha settings.
        Returns:
        A fill style string.
      • getFont

        public java.awt.Font getFont()
        Returns the current font used for drawing text.
        Specified by:
        getFont in class java.awt.Graphics
        Returns:
        The current font (never null).
        See Also:
        setFont(java.awt.Font)
      • setFont

        public void setFont​(java.awt.Font font)
        Sets the font to be used for drawing text.
        Specified by:
        setFont in class java.awt.Graphics
        Parameters:
        font - the font (null is permitted but ignored).
        See Also:
        getFont()
      • getFontFunction

        public java.util.function.Function<java.lang.String,​java.lang.String> getFontFunction()
        Returns the function that generates SVG font references from a supplied Java font family name. The default function will convert Java logical font names to the equivalent SVG generic font name, pass-through all other font names unchanged, and surround the result in single quotes.
        Returns:
        The font mapper (never null).
        Since:
        5.0
        See Also:
        setFontFunction(java.util.function.Function)
      • setFontFunction

        public void setFontFunction​(java.util.function.Function<java.lang.String,​java.lang.String> fontFunction)
        Sets the font function that is used to generate SVG font references from Java font family names.
        Parameters:
        fontFunction - the font mapper (null not permitted).
        Since:
        5.0
      • getFontSizeUnits

        public SVGUnits getFontSizeUnits()
        Returns the font size units. The default value is SVGUnits.PX.
        Returns:
        The font size units.
        Since:
        3.4
      • setFontSizeUnits

        public void setFontSizeUnits​(SVGUnits fontSizeUnits)
        Sets the font size units. In general, if this method is used it should be called immediately after the SVGGraphics2D instance is created and before any content is generated.
        Parameters:
        fontSizeUnits - the font size units (null not permitted).
        Since:
        3.4
      • getSVGFontStyle

        private java.lang.String getSVGFontStyle()
        Returns a string containing font style info.
        Returns:
        A string containing font style info.
      • getFontMetrics

        public java.awt.FontMetrics getFontMetrics​(java.awt.Font f)
        Returns the font metrics for the specified font.
        Specified by:
        getFontMetrics in class java.awt.Graphics
        Parameters:
        f - the font.
        Returns:
        The font metrics.
      • getFontRenderContext

        public java.awt.font.FontRenderContext getFontRenderContext()
        Returns the font render context.
        Specified by:
        getFontRenderContext in class java.awt.Graphics2D
        Returns:
        The font render context (never null).
      • drawString

        public void drawString​(java.lang.String str,
                               int x,
                               int y)
        Draws a string at (x, y). The start of the text at the baseline level will be aligned with the (x, y) point.

        Note that you can make use of the SVGHints.KEY_TEXT_RENDERING hint when drawing strings (this is completely optional though).
        Specified by:
        drawString in class java.awt.Graphics2D
        Parameters:
        str - the string (null not permitted).
        x - the x-coordinate.
        y - the y-coordinate.
        See Also:
        drawString(java.lang.String, float, float)
      • drawString

        public void drawString​(java.lang.String str,
                               float x,
                               float y)
        Draws a string at (x, y). The start of the text at the baseline level will be aligned with the (x, y) point.

        Note that you can make use of the SVGHints.KEY_TEXT_RENDERING hint when drawing strings (this is completely optional though).
        Specified by:
        drawString in class java.awt.Graphics2D
        Parameters:
        str - the string (null not permitted).
        x - the x-coordinate.
        y - the y-coordinate.
      • drawString

        public void drawString​(java.text.AttributedCharacterIterator iterator,
                               int x,
                               int y)
        Draws a string of attributed characters at (x, y). The call is delegated to drawString(AttributedCharacterIterator, float, float).
        Specified by:
        drawString in class java.awt.Graphics2D
        Parameters:
        iterator - an iterator for the characters.
        x - the x-coordinate.
        y - the x-coordinate.
      • drawString

        public void drawString​(java.text.AttributedCharacterIterator iterator,
                               float x,
                               float y)
        Draws a string of attributed characters at (x, y).
        Specified by:
        drawString in class java.awt.Graphics2D
        Parameters:
        iterator - an iterator over the characters (null not permitted).
        x - the x-coordinate.
        y - the y-coordinate.
      • drawGlyphVector

        public void drawGlyphVector​(java.awt.font.GlyphVector g,
                                    float x,
                                    float y)
        Draws the specified glyph vector at the location (x, y).
        Specified by:
        drawGlyphVector in class java.awt.Graphics2D
        Parameters:
        g - the glyph vector (null not permitted).
        x - the x-coordinate.
        y - the y-coordinate.
      • translate

        public void translate​(int tx,
                              int ty)
        Applies the translation (tx, ty). This call is delegated to translate(double, double).
        Specified by:
        translate in class java.awt.Graphics2D
        Parameters:
        tx - the x-translation.
        ty - the y-translation.
        See Also:
        translate(double, double)
      • translate

        public void translate​(double tx,
                              double ty)
        Applies the translation (tx, ty).
        Specified by:
        translate in class java.awt.Graphics2D
        Parameters:
        tx - the x-translation.
        ty - the y-translation.
      • rotate

        public void rotate​(double theta)
        Applies a rotation (anti-clockwise) about (0, 0).
        Specified by:
        rotate in class java.awt.Graphics2D
        Parameters:
        theta - the rotation angle (in radians).
      • rotate

        public void rotate​(double theta,
                           double x,
                           double y)
        Applies a rotation (anti-clockwise) about (x, y).
        Specified by:
        rotate in class java.awt.Graphics2D
        Parameters:
        theta - the rotation angle (in radians).
        x - the x-coordinate.
        y - the y-coordinate.
      • scale

        public void scale​(double sx,
                          double sy)
        Applies a scale transformation.
        Specified by:
        scale in class java.awt.Graphics2D
        Parameters:
        sx - the x-scaling factor.
        sy - the y-scaling factor.
      • shear

        public void shear​(double shx,
                          double shy)
        Applies a shear transformation. This is equivalent to the following call to the transform method:

        • transform(AffineTransform.getShearInstance(shx, shy));
        Specified by:
        shear in class java.awt.Graphics2D
        Parameters:
        shx - the x-shear factor.
        shy - the y-shear factor.
      • transform

        public void transform​(java.awt.geom.AffineTransform t)
        Applies this transform to the existing transform by concatenating it.
        Specified by:
        transform in class java.awt.Graphics2D
        Parameters:
        t - the transform (null not permitted).
      • getTransform

        public java.awt.geom.AffineTransform getTransform()
        Returns a copy of the current transform.
        Specified by:
        getTransform in class java.awt.Graphics2D
        Returns:
        A copy of the current transform (never null).
        See Also:
        setTransform(java.awt.geom.AffineTransform)
      • setTransform

        public void setTransform​(java.awt.geom.AffineTransform t)
        Sets the transform.
        Specified by:
        setTransform in class java.awt.Graphics2D
        Parameters:
        t - the new transform (null permitted, resets to the identity transform).
        See Also:
        getTransform()
      • hit

        public boolean hit​(java.awt.Rectangle rect,
                           java.awt.Shape s,
                           boolean onStroke)
        Returns true if the rectangle (in device space) intersects with the shape (the interior, if onStroke is false, otherwise the stroked outline of the shape).
        Specified by:
        hit in class java.awt.Graphics2D
        Parameters:
        rect - a rectangle (in device space).
        s - the shape.
        onStroke - test the stroked outline only?
        Returns:
        A boolean.
      • setPaintMode

        public void setPaintMode()
        Does nothing in this SVGGraphics2D implementation.
        Specified by:
        setPaintMode in class java.awt.Graphics
      • setXORMode

        public void setXORMode​(java.awt.Color c)
        Does nothing in this SVGGraphics2D implementation.
        Specified by:
        setXORMode in class java.awt.Graphics
        Parameters:
        c - ignored
      • getClipBounds

        public java.awt.Rectangle getClipBounds()
        Returns the bounds of the user clipping region.
        Specified by:
        getClipBounds in class java.awt.Graphics
        Returns:
        The clip bounds (possibly null).
        See Also:
        getClip()
      • getClip

        public java.awt.Shape getClip()
        Returns the user clipping region. The initial default value is null.
        Specified by:
        getClip in class java.awt.Graphics
        Returns:
        The user clipping region (possibly null).
        See Also:
        setClip(java.awt.Shape)
      • setClip

        public void setClip​(java.awt.Shape shape)
        Sets the user clipping region.
        Specified by:
        setClip in class java.awt.Graphics
        Parameters:
        shape - the new user clipping region (null permitted).
        See Also:
        getClip()
      • registerClip

        private java.lang.String registerClip​(java.awt.Shape clip)
        Registers the clip so that we can later write out all the clip definitions in the DEFS element.
        Parameters:
        clip - the clip (ignored if null)
      • transformDP

        private java.lang.String transformDP​(double d)
        Returns a string representation of the specified number for use in the SVG output.
        Parameters:
        d - the number.
        Returns:
        A string representation of the number.
      • geomDP

        private java.lang.String geomDP​(double d)
        Returns a string representation of the specified number for use in the SVG output.
        Parameters:
        d - the number.
        Returns:
        A string representation of the number.
      • getSVGTransform

        private java.lang.String getSVGTransform​(java.awt.geom.AffineTransform t)
      • clip

        public void clip​(java.awt.Shape s)
        Clips to the intersection of the current clipping region and the specified shape. According to the Oracle API specification, this method will accept a null argument, however there is a bug report (opened in 2004 and fixed in 2021) that describes the passing of null as "not recommended":

        http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6206189

        Specified by:
        clip in class java.awt.Graphics2D
        Parameters:
        s - the clip shape (null not recommended).
      • clipRect

        public void clipRect​(int x,
                             int y,
                             int width,
                             int height)
        Clips to the intersection of the current clipping region and the specified rectangle.
        Specified by:
        clipRect in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
      • setClip

        public void setClip​(int x,
                            int y,
                            int width,
                            int height)
        Sets the user clipping region to the specified rectangle.
        Specified by:
        setClip in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        See Also:
        getClip()
      • drawLine

        public void drawLine​(int x1,
                             int y1,
                             int x2,
                             int y2)
        Draws a line from (x1, y1) to (x2, y2) using the current paint and stroke.
        Specified by:
        drawLine in class java.awt.Graphics
        Parameters:
        x1 - the x-coordinate of the start point.
        y1 - the y-coordinate of the start point.
        x2 - the x-coordinate of the end point.
        y2 - the x-coordinate of the end point.
      • fillRect

        public void fillRect​(int x,
                             int y,
                             int width,
                             int height)
        Fills the specified rectangle with the current paint.
        Specified by:
        fillRect in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the rectangle width.
        height - the rectangle height.
      • clearRect

        public void clearRect​(int x,
                              int y,
                              int width,
                              int height)
        Clears the specified rectangle by filling it with the current background color. If the background color is null, this method will do nothing.
        Specified by:
        clearRect in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        See Also:
        getBackground()
      • drawRoundRect

        public void drawRoundRect​(int x,
                                  int y,
                                  int width,
                                  int height,
                                  int arcWidth,
                                  int arcHeight)
        Draws a rectangle with rounded corners using the current paint and stroke.
        Specified by:
        drawRoundRect in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        arcWidth - the arc-width.
        arcHeight - the arc-height.
        See Also:
        fillRoundRect(int, int, int, int, int, int)
      • fillRoundRect

        public void fillRoundRect​(int x,
                                  int y,
                                  int width,
                                  int height,
                                  int arcWidth,
                                  int arcHeight)
        Fills a rectangle with rounded corners using the current paint.
        Specified by:
        fillRoundRect in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        arcWidth - the arc-width.
        arcHeight - the arc-height.
        See Also:
        drawRoundRect(int, int, int, int, int, int)
      • drawOval

        public void drawOval​(int x,
                             int y,
                             int width,
                             int height)
        Draws an oval framed by the rectangle (x, y, width, height) using the current paint and stroke.
        Specified by:
        drawOval in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        See Also:
        fillOval(int, int, int, int)
      • fillOval

        public void fillOval​(int x,
                             int y,
                             int width,
                             int height)
        Fills an oval framed by the rectangle (x, y, width, height).
        Specified by:
        fillOval in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        See Also:
        drawOval(int, int, int, int)
      • drawArc

        public void drawArc​(int x,
                            int y,
                            int width,
                            int height,
                            int startAngle,
                            int arcAngle)
        Draws an arc contained within the rectangle (x, y, width, height), starting at startAngle and continuing through arcAngle degrees using the current paint and stroke.
        Specified by:
        drawArc in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        startAngle - the start angle in degrees, 0 = 3 o'clock.
        arcAngle - the angle (anticlockwise) in degrees.
        See Also:
        fillArc(int, int, int, int, int, int)
      • fillArc

        public void fillArc​(int x,
                            int y,
                            int width,
                            int height,
                            int startAngle,
                            int arcAngle)
        Fills an arc contained within the rectangle (x, y, width, height), starting at startAngle and continuing through arcAngle degrees, using the current paint.
        Specified by:
        fillArc in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        startAngle - the start angle in degrees, 0 = 3 o'clock.
        arcAngle - the angle (anticlockwise) in degrees.
        See Also:
        drawArc(int, int, int, int, int, int)
      • drawPolyline

        public void drawPolyline​(int[] xPoints,
                                 int[] yPoints,
                                 int nPoints)
        Draws the specified multi-segment line using the current paint and stroke.
        Specified by:
        drawPolyline in class java.awt.Graphics
        Parameters:
        xPoints - the x-points.
        yPoints - the y-points.
        nPoints - the number of points to use for the polyline.
      • drawPolygon

        public void drawPolygon​(int[] xPoints,
                                int[] yPoints,
                                int nPoints)
        Draws the specified polygon using the current paint and stroke.
        Specified by:
        drawPolygon in class java.awt.Graphics
        Parameters:
        xPoints - the x-points.
        yPoints - the y-points.
        nPoints - the number of points to use for the polygon.
        See Also:
        fillPolygon(int[], int[], int)
      • fillPolygon

        public void fillPolygon​(int[] xPoints,
                                int[] yPoints,
                                int nPoints)
        Fills the specified polygon using the current paint.
        Specified by:
        fillPolygon in class java.awt.Graphics
        Parameters:
        xPoints - the x-points.
        yPoints - the y-points.
        nPoints - the number of points to use for the polygon.
        See Also:
        drawPolygon(int[], int[], int)
      • getPNGBytes

        private byte[] getPNGBytes​(java.awt.Image img)
        Returns the bytes representing a PNG format image.
        Parameters:
        img - the image to encode (null not permitted).
        Returns:
        The bytes representing a PNG format image.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int x,
                                 int y,
                                 java.awt.image.ImageObserver observer)
        Draws an image at the location (x, y). Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image (null permitted...method will do nothing).
        x - the x-coordinate.
        y - the y-coordinate.
        observer - ignored.
        Returns:
        true if there is no more drawing to be done.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int x,
                                 int y,
                                 int w,
                                 int h,
                                 java.awt.image.ImageObserver observer)
        Draws the image into the rectangle defined by (x, y, w, h). Note that the observer is ignored (it is not useful in this context).
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image (null permitted...draws nothing).
        x - the x-coordinate.
        y - the y-coordinate.
        w - the width.
        h - the height.
        observer - ignored.
        Returns:
        true if there is no more drawing to be done.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int x,
                                 int y,
                                 java.awt.Color bgcolor,
                                 java.awt.image.ImageObserver observer)
        Draws an image at the location (x, y). Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image (null permitted...draws nothing).
        x - the x-coordinate.
        y - the y-coordinate.
        bgcolor - the background color (null permitted).
        observer - ignored.
        Returns:
        true if there is no more drawing to be done.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int x,
                                 int y,
                                 int w,
                                 int h,
                                 java.awt.Color bgcolor,
                                 java.awt.image.ImageObserver observer)
        Draws an image to the rectangle (x, y, w, h) (scaling it if required), first filling the background with the specified color. Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image.
        x - the x-coordinate.
        y - the y-coordinate.
        w - the width.
        h - the height.
        bgcolor - the background color (null permitted).
        observer - ignored.
        Returns:
        true if the image is drawn.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int dx1,
                                 int dy1,
                                 int dx2,
                                 int dy2,
                                 int sx1,
                                 int sy1,
                                 int sx2,
                                 int sy2,
                                 java.awt.image.ImageObserver observer)
        Draws part of an image (defined by the source rectangle (sx1, sy1, sx2, sy2)) into the destination rectangle (dx1, dy1, dx2, dy2). Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image.
        dx1 - the x-coordinate for the top left of the destination.
        dy1 - the y-coordinate for the top left of the destination.
        dx2 - the x-coordinate for the bottom right of the destination.
        dy2 - the y-coordinate for the bottom right of the destination.
        sx1 - the x-coordinate for the top left of the source.
        sy1 - the y-coordinate for the top left of the source.
        sx2 - the x-coordinate for the bottom right of the source.
        sy2 - the y-coordinate for the bottom right of the source.
        Returns:
        true if the image is drawn.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 int dx1,
                                 int dy1,
                                 int dx2,
                                 int dy2,
                                 int sx1,
                                 int sy1,
                                 int sx2,
                                 int sy2,
                                 java.awt.Color bgcolor,
                                 java.awt.image.ImageObserver observer)
        Draws part of an image (defined by the source rectangle (sx1, sy1, sx2, sy2)) into the destination rectangle (dx1, dy1, dx2, dy2). The destination rectangle is first cleared by filling it with the specified bgcolor. Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics
        Parameters:
        img - the image.
        dx1 - the x-coordinate for the top left of the destination.
        dy1 - the y-coordinate for the top left of the destination.
        dx2 - the x-coordinate for the bottom right of the destination.
        dy2 - the y-coordinate for the bottom right of the destination.
        sx1 - the x-coordinate for the top left of the source.
        sy1 - the y-coordinate for the top left of the source.
        sx2 - the x-coordinate for the bottom right of the source.
        sy2 - the y-coordinate for the bottom right of the source.
        bgcolor - the background color (null permitted).
        observer - ignored.
        Returns:
        true if the image is drawn.
      • drawRenderedImage

        public void drawRenderedImage​(java.awt.image.RenderedImage img,
                                      java.awt.geom.AffineTransform xform)
        Draws the rendered image. If img is null this method does nothing.
        Specified by:
        drawRenderedImage in class java.awt.Graphics2D
        Parameters:
        img - the image (null permitted).
        xform - the transform.
      • drawRenderableImage

        public void drawRenderableImage​(java.awt.image.renderable.RenderableImage img,
                                        java.awt.geom.AffineTransform xform)
        Draws the renderable image.
        Specified by:
        drawRenderableImage in class java.awt.Graphics2D
        Parameters:
        img - the renderable image.
        xform - the transform.
      • drawImage

        public boolean drawImage​(java.awt.Image img,
                                 java.awt.geom.AffineTransform xform,
                                 java.awt.image.ImageObserver obs)
        Draws an image with the specified transform. Note that the observer is ignored.
        Specified by:
        drawImage in class java.awt.Graphics2D
        Parameters:
        img - the image.
        xform - the transform (null permitted).
        obs - the image observer (ignored).
        Returns:
        true if the image is drawn.
      • drawImage

        public void drawImage​(java.awt.image.BufferedImage img,
                              java.awt.image.BufferedImageOp op,
                              int x,
                              int y)
        Draws the image resulting from applying the BufferedImageOp to the specified image at the location (x, y).
        Specified by:
        drawImage in class java.awt.Graphics2D
        Parameters:
        img - the image.
        op - the operation (null permitted).
        x - the x-coordinate.
        y - the y-coordinate.
      • copyArea

        public void copyArea​(int x,
                             int y,
                             int width,
                             int height,
                             int dx,
                             int dy)
        This method does nothing. The operation assumes that the output is in bitmap form, which is not the case for SVG, so we silently ignore this method call.
        Specified by:
        copyArea in class java.awt.Graphics
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width of the area.
        height - the height of the area.
        dx - the delta x.
        dy - the delta y.
      • dispose

        public void dispose()
        This method does nothing, there are no resources to dispose.
        Specified by:
        dispose in class java.awt.Graphics
      • getSVGElement

        public java.lang.String getSVGElement()
        Returns the SVG element that has been generated by calls to this Graphics2D implementation.
        Returns:
        The SVG element.
      • getSVGElement

        public java.lang.String getSVGElement​(java.lang.String id)
        Returns the SVG element that has been generated by calls to this Graphics2D implementation, giving it the specified id. If id is null, the element will have no id attribute.
        Parameters:
        id - the element id (null permitted).
        Returns:
        A string containing the SVG element.
        Since:
        1.8
      • getSVGElement

        public java.lang.String getSVGElement​(java.lang.String id,
                                              boolean includeDimensions,
                                              ViewBox viewBox,
                                              PreserveAspectRatio preserveAspectRatio,
                                              MeetOrSlice meetOrSlice)
        Returns the SVG element that has been generated by calls to this Graphics2D implementation, giving it the specified id. If id is null, the element will have no id attribute. This method also allows for a viewBox to be defined, along with the settings that handle scaling.
        Parameters:
        id - the element id (null permitted).
        includeDimensions - include the width and height attributes?
        viewBox - the view box specification (if null then no viewBox attribute will be defined).
        preserveAspectRatio - the value of the preserveAspectRatio attribute (if null then not attribute will be defined).
        meetOrSlice - the value of the meetOrSlice attribute.
        Returns:
        A string containing the SVG element.
        Since:
        3.2
      • isDefsOutputRequired

        private boolean isDefsOutputRequired()
        Returns true if there are items that need to be written to the DEFS element, and false otherwise.
        Returns:
        A boolean.
      • getSVGDocument

        public java.lang.String getSVGDocument()
        Returns an SVG document (this contains the content returned by the getSVGElement() method, prepended with the required document header).
        Returns:
        An SVG document.
      • getSVGImages

        public java.util.List<ImageElement> getSVGImages()
        Returns the list of image elements that have been referenced in the SVG output but not embedded. If the image files don't already exist, you can use this list as the basis for creating the image files.
        Returns:
        The list of image elements.
        See Also:
        SVGHints.KEY_IMAGE_HANDLING
      • getElementIDs

        public java.util.Set<java.lang.String> getElementIDs()
        Returns a new set containing the element IDs that have been used in output so far.
        Returns:
        The element IDs.
        Since:
        1.5
      • getLinearGradientElement

        private java.lang.String getLinearGradientElement​(java.lang.String id,
                                                          java.awt.GradientPaint paint)
        Returns an element to represent a linear gradient. All the linear gradients that are used get written to the DEFS element in the SVG.
        Parameters:
        id - the reference id.
        paint - the gradient.
        Returns:
        The SVG element.
      • getLinearGradientElement

        private java.lang.String getLinearGradientElement​(java.lang.String id,
                                                          java.awt.LinearGradientPaint paint)
        Returns an element to represent a linear gradient. All the linear gradients that are used get written to the DEFS element in the SVG.
        Parameters:
        id - the reference id.
        paint - the gradient.
        Returns:
        The SVG element.
      • getRadialGradientElement

        private java.lang.String getRadialGradientElement​(java.lang.String id,
                                                          java.awt.RadialGradientPaint rgp)
        Returns an element to represent a radial gradient. All the radial gradients that are used get written to the DEFS element in the SVG.
        Parameters:
        id - the reference id.
        rgp - the radial gradient.
        Returns:
        The SVG element.
      • getClipPathRef

        private java.lang.String getClipPathRef()
        Returns a clip path reference for the current user clip. This is written out on all SVG elements that draw or fill shapes or text.
        Returns:
        A clip path reference.
      • setRect

        private void setRect​(int x,
                             int y,
                             int width,
                             int height)
        Sets the attributes of the reusable Rectangle2D object that is used by the Graphics.drawRect(int, int, int, int) and fillRect(int, int, int, int) methods.
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
      • setRoundRect

        private void setRoundRect​(int x,
                                  int y,
                                  int width,
                                  int height,
                                  int arcWidth,
                                  int arcHeight)
        Sets the attributes of the reusable RoundRectangle2D object that is used by the drawRoundRect(int, int, int, int, int, int) and fillRoundRect(int, int, int, int, int, int) methods.
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.
        arcWidth - the arc width.
        arcHeight - the arc height.
      • setOval

        private void setOval​(int x,
                             int y,
                             int width,
                             int height)
        Sets the attributes of the reusable Ellipse2D object that is used by the drawOval(int, int, int, int) and fillOval(int, int, int, int) methods.
        Parameters:
        x - the x-coordinate.
        y - the y-coordinate.
        width - the width.
        height - the height.