Class AwtRenderingBackend
- java.lang.Object
-
- org.htmlunit.platform.canvas.rendering.AwtRenderingBackend
-
- All Implemented Interfaces:
RenderingBackend
public class AwtRenderingBackend extends java.lang.Object implements RenderingBackend
The default implementation ofRenderingBackend
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
AwtRenderingBackend.SaveState
-
Nested classes/interfaces inherited from interface org.htmlunit.platform.canvas.rendering.RenderingBackend
RenderingBackend.WindingRule
-
-
Field Summary
Fields Modifier and Type Field Description private java.awt.Color
fillColor_
private float
globalAlpha_
private java.awt.Graphics2D
graphics2D_
private int
id_
private static int
ID_GENERATOR_
private java.awt.image.BufferedImage
image_
private static java.util.Map<java.lang.String,java.awt.Color>
knownColors
private int
lineWidth_
private static org.apache.commons.logging.Log
LOG
private java.util.Deque<AwtRenderingBackend.SaveState>
savedStates_
private java.awt.Color
strokeColor_
private java.util.List<java.awt.geom.Path2D>
subPaths_
private java.awt.geom.AffineTransform
transformation_
-
Constructor Summary
Constructors Constructor Description AwtRenderingBackend(int imageWidth, int imageHeight)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
arc(double x, double y, double radius, double startAngle, double endAngle, boolean anticlockwise)
Adds a circular arc to the current sub-path.void
beginPath()
Starts a new path by emptying the list of sub-paths.void
bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y)
Adds a cubic Bézier curve to the current sub-path.void
clearRect(double x, double y, double w, double h)
Paints the specified rectangular area.void
clip(RenderingBackend.WindingRule windingRule, Path2D path)
Turns the current or given path into the current clipping region.void
closePath()
Attempts to add a straight line from the current point to the start of the current sub-path.void
drawImage(ImageData imageData, int sx, int sy, java.lang.Integer sWidth, java.lang.Integer sHeight, int dx, int dy, java.lang.Integer dWidth, java.lang.Integer dHeight)
Draws images onto the context.void
ellipse(double x, double y, double radiusX, double radiusY, double rotation, double startAngle, double endAngle, boolean anticlockwise)
Creates an elliptical arc centered at (x, y) with the radii radiusX and radiusY.java.lang.String
encodeToString(java.lang.String type)
Constructs a base64 encoded string out of the image data.private static java.awt.Color
extractColor(java.lang.String style)
void
fill()
Fills the current or given path with the current fillStyle.void
fillRect(int x, int y, int w, int h)
Paints the specified rectangular area.void
fillText(java.lang.String text, double x, double y)
Fills a given text at the given (x, y) position.byte[]
getBytes(int width, int height, int sx, int sy)
Creates a byte array containing the (4) color values of all pixels.private java.awt.geom.Path2D
getCurrentSubPath()
double
getGlobalAlpha()
int
getLineWidth()
Returns thelineWidth
property.void
lineTo(double x, double y)
Adds a straight line to the current sub-path by connecting the sub-path's last point to the specified (x, y) coordinates.void
moveTo(double x, double y)
Begins a new sub-path at the point specified by the given (x, y) coordinates.private static int
nextId()
void
putImageData(byte[] imageDataBytes, int imageDataWidth, int imageDataHeight, int dx, int dy, int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight)
Paints data from the given ImageData object onto the canvas.void
quadraticCurveTo(double cpx, double cpy, double x, double y)
Adds a quadratic Bézier curve to the current sub-path.void
rect(double x, double y, double w, double h)
Adds a rectangle to the current path.void
restore()
Restores the most recently saved canvas state by popping the top entry in the drawing state stack.void
rotate(double angle)
Adds a rotation to the transformation matrix.void
save()
Saves the entire state of the canvas by pushing the current state onto a stack.void
setFillStyle(java.lang.String fillStyle)
Sets thefillStyle
property.void
setGlobalAlpha(double globalAlpha)
Specifies the alpha (transparency) value that is applied to shapes and images before they are drawn onto the canvas.void
setLineWidth(int lineWidth)
Sets thelineWidth
property.void
setStrokeStyle(java.lang.String strokeStyle)
Sets thestrokeStyle
property.void
setTransform(double m11, double m12, double m21, double m22, double dx, double dy)
Resets (overrides) the current transformation to the identity matrix, and then invokes a transformation described by the arguments of this method.void
stroke()
Strokes (outlines) the current or given path with the current stroke style.void
strokeRect(int x, int y, int w, int h)
Paints the specified rectangular area.private static java.awt.Color
toAwtColor(Color color)
void
transform(double m11, double m12, double m21, double m22, double dx, double dy)
Multiplies the current transformation with the matrix described by the arguments of this method.void
translate(int x, int y)
Adds a translation transformation to the current matrix.
-
-
-
Field Detail
-
LOG
private static final org.apache.commons.logging.Log LOG
-
ID_GENERATOR_
private static int ID_GENERATOR_
-
knownColors
private static final java.util.Map<java.lang.String,java.awt.Color> knownColors
-
id_
private final int id_
-
image_
private final java.awt.image.BufferedImage image_
-
graphics2D_
private final java.awt.Graphics2D graphics2D_
-
transformation_
private java.awt.geom.AffineTransform transformation_
-
globalAlpha_
private float globalAlpha_
-
lineWidth_
private int lineWidth_
-
fillColor_
private java.awt.Color fillColor_
-
strokeColor_
private java.awt.Color strokeColor_
-
subPaths_
private final java.util.List<java.awt.geom.Path2D> subPaths_
-
savedStates_
private final java.util.Deque<AwtRenderingBackend.SaveState> savedStates_
-
-
Method Detail
-
nextId
private static int nextId()
-
getGlobalAlpha
public double getGlobalAlpha()
- Specified by:
getGlobalAlpha
in interfaceRenderingBackend
- Returns:
- the alpha (transparency) value that is applied to shapes and images before they are drawn onto the canvas.
-
setGlobalAlpha
public void setGlobalAlpha(double globalAlpha)
Specifies the alpha (transparency) value that is applied to shapes and images before they are drawn onto the canvas.- Specified by:
setGlobalAlpha
in interfaceRenderingBackend
- Parameters:
globalAlpha
- the new alpha
-
beginPath
public void beginPath()
Starts a new path by emptying the list of sub-paths.- Specified by:
beginPath
in interfaceRenderingBackend
-
ellipse
public void ellipse(double x, double y, double radiusX, double radiusY, double rotation, double startAngle, double endAngle, boolean anticlockwise)
Creates an elliptical arc centered at (x, y) with the radii radiusX and radiusY. The path starts at startAngle and ends at endAngle, and travels in the direction given by anticlockwise (defaulting to clockwise).- Specified by:
ellipse
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yradiusX
- the radiusXradiusY
- the radiusYrotation
- the rotationstartAngle
- the start angleendAngle
- the end angleanticlockwise
- is anti-clockwise
-
bezierCurveTo
public void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y)
Adds a cubic Bézier curve to the current sub-path. It requires three points: the first two are control points and the third one is the end point. The starting point is the latest point in the current path, which can be changed using moveTo() before creating the Bézier curve.- Specified by:
bezierCurveTo
in interfaceRenderingBackend
- Parameters:
cp1x
- the cp1xcp1y
- the cp1ycp2x
- the cp2xcp2y
- the cp2yx
- the xy
- the y
-
arc
public void arc(double x, double y, double radius, double startAngle, double endAngle, boolean anticlockwise)
Adds a circular arc to the current sub-path.- Specified by:
arc
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yradius
- the radiusstartAngle
- the start angleendAngle
- the end angleanticlockwise
- is anti-clockwise
-
clearRect
public void clearRect(double x, double y, double w, double h)
Paints the specified rectangular area.- Specified by:
clearRect
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yw
- the widthh
- the height
-
drawImage
public void drawImage(ImageData imageData, int sx, int sy, java.lang.Integer sWidth, java.lang.Integer sHeight, int dx, int dy, java.lang.Integer dWidth, java.lang.Integer dHeight) throws java.io.IOException
Draws images onto the context.- Specified by:
drawImage
in interfaceRenderingBackend
- Parameters:
imageData
- the reader to read the image from 8the first one)sx
- the X coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination contextsy
- the Y coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination contextsWidth
- the width of the sub-rectangle of the source image to draw into the destination contextsHeight
- the height of the sub-rectangle of the source image to draw into the destination contextdx
- the X coordinate in the destination canvas at which to place the top-left corner of the source imagedy
- the Y coordinate in the destination canvas at which to place the top-left corner of the source imagedWidth
- the width to draw the image in the destination canvas. This allows scaling of the drawn imagedHeight
- the height to draw the image in the destination canvas. This allows scaling of the drawn image- Throws:
java.io.IOException
- in case o problems
-
encodeToString
public java.lang.String encodeToString(java.lang.String type) throws java.io.IOException
Constructs a base64 encoded string out of the image data.- Specified by:
encodeToString
in interfaceRenderingBackend
- Parameters:
type
- the name of the image format- Returns:
- the base64 encoded string
- Throws:
java.io.IOException
- in case o problems
-
fill
public void fill()
Fills the current or given path with the current fillStyle.- Specified by:
fill
in interfaceRenderingBackend
-
fillRect
public void fillRect(int x, int y, int w, int h)
Paints the specified rectangular area.- Specified by:
fillRect
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yw
- the widthh
- the height
-
fillText
public void fillText(java.lang.String text, double x, double y)
Fills a given text at the given (x, y) position.- Specified by:
fillText
in interfaceRenderingBackend
- Parameters:
text
- the textx
- the xy
- the y
-
getBytes
public byte[] getBytes(int width, int height, int sx, int sy)
Creates a byte array containing the (4) color values of all pixels.- Specified by:
getBytes
in interfaceRenderingBackend
- Parameters:
width
- the widthheight
- the heightsx
- start point xsy
- start point y- Returns:
- the bytes
-
lineTo
public void lineTo(double x, double y)
Adds a straight line to the current sub-path by connecting the sub-path's last point to the specified (x, y) coordinates.- Specified by:
lineTo
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the y
-
moveTo
public void moveTo(double x, double y)
Begins a new sub-path at the point specified by the given (x, y) coordinates.- Specified by:
moveTo
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the y
-
putImageData
public void putImageData(byte[] imageDataBytes, int imageDataWidth, int imageDataHeight, int dx, int dy, int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight)
Paints data from the given ImageData object onto the canvas.- Specified by:
putImageData
in interfaceRenderingBackend
- Parameters:
imageDataBytes
- an array of pixel valuesimageDataWidth
- the height of the imageDataimageDataHeight
- the width of the imageDatadx
- horizontal position (x coordinate) at which to place the image data in the destination canvasdy
- vertical position (y coordinate) at which to place the image data in the destination canvasdirtyX
- horizontal position (x coordinate) of the top-left corner from which the image data will be extracted. Defaults to 0.dirtyY
- vertical position (y coordinate) of the top-left corner from which the image data will be extracted. Defaults to 0.dirtyWidth
- width of the rectangle to be painted. Defaults to the width of the image data.dirtyHeight
- height of the rectangle to be painted. Defaults to the height of the image data.
-
quadraticCurveTo
public void quadraticCurveTo(double cpx, double cpy, double x, double y)
Adds a quadratic Bézier curve to the current sub-path. It requires two points: the first one is a control point and the second one is the end point. The starting point is the latest point in the current path, which can be changed using moveTo() before creating the quadratic Bézier curve.- Specified by:
quadraticCurveTo
in interfaceRenderingBackend
- Parameters:
cpx
- the cpxcpy
- the cpyx
- the xy
- the y
-
rect
public void rect(double x, double y, double w, double h)
Adds a rectangle to the current path.- Specified by:
rect
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yw
- the widthh
- the height
-
setFillStyle
public void setFillStyle(java.lang.String fillStyle)
Sets thefillStyle
property.- Specified by:
setFillStyle
in interfaceRenderingBackend
- Parameters:
fillStyle
- thefillStyle
property
-
setStrokeStyle
public void setStrokeStyle(java.lang.String strokeStyle)
Sets thestrokeStyle
property.- Specified by:
setStrokeStyle
in interfaceRenderingBackend
- Parameters:
strokeStyle
- thestrokeStyle
property
-
extractColor
private static java.awt.Color extractColor(java.lang.String style)
-
getLineWidth
public int getLineWidth()
Returns thelineWidth
property.- Specified by:
getLineWidth
in interfaceRenderingBackend
- Returns:
- the
lineWidth
property
-
restore
public void restore()
Restores the most recently saved canvas state by popping the top entry in the drawing state stack. If there is no saved state, this method does nothing.- Specified by:
restore
in interfaceRenderingBackend
-
rotate
public void rotate(double angle)
Adds a rotation to the transformation matrix.- Specified by:
rotate
in interfaceRenderingBackend
- Parameters:
angle
- the angle
-
save
public void save()
Saves the entire state of the canvas by pushing the current state onto a stack.- Specified by:
save
in interfaceRenderingBackend
-
setLineWidth
public void setLineWidth(int lineWidth)
Sets thelineWidth
property.- Specified by:
setLineWidth
in interfaceRenderingBackend
- Parameters:
lineWidth
- thelineWidth
property
-
setTransform
public void setTransform(double m11, double m12, double m21, double m22, double dx, double dy)
Resets (overrides) the current transformation to the identity matrix, and then invokes a transformation described by the arguments of this method. This lets you scale, rotate, translate (move), and skew the context.- Specified by:
setTransform
in interfaceRenderingBackend
- Parameters:
m11
- Horizontal scaling. A value of 1 results in no scalingm12
- Vertical skewingm21
- Horizontal skewingm22
- Vertical scaling. A value of 1 results in no scalingdx
- Horizontal translation (moving)dy
- Vertical translation (moving).
-
stroke
public void stroke()
Strokes (outlines) the current or given path with the current stroke style.- Specified by:
stroke
in interfaceRenderingBackend
-
strokeRect
public void strokeRect(int x, int y, int w, int h)
Paints the specified rectangular area.- Specified by:
strokeRect
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the yw
- the widthh
- the height
-
transform
public void transform(double m11, double m12, double m21, double m22, double dx, double dy)
Multiplies the current transformation with the matrix described by the arguments of this method. This lets you scale, rotate, translate (move), and skew the context.- Specified by:
transform
in interfaceRenderingBackend
- Parameters:
m11
- Horizontal scaling. A value of 1 results in no scalingm12
- Vertical skewingm21
- Horizontal skewingm22
- Vertical scaling. A value of 1 results in no scalingdx
- Horizontal translation (moving)dy
- Vertical translation (moving).
-
translate
public void translate(int x, int y)
Adds a translation transformation to the current matrix.- Specified by:
translate
in interfaceRenderingBackend
- Parameters:
x
- the xy
- the y
-
clip
public void clip(RenderingBackend.WindingRule windingRule, Path2D path)
Turns the current or given path into the current clipping region. It replaces any previous clipping region.- Specified by:
clip
in interfaceRenderingBackend
- Parameters:
windingRule
- the RenderingBackend.WindingRuleRenderingBackend.WindingRule
to be usedpath
- the path or null if the current path should be used
-
closePath
public void closePath()
Attempts to add a straight line from the current point to the start of the current sub-path. If the shape has already been closed or has only one point, this function does nothing.- Specified by:
closePath
in interfaceRenderingBackend
-
getCurrentSubPath
private java.awt.geom.Path2D getCurrentSubPath()
-
toAwtColor
private static java.awt.Color toAwtColor(Color color)
-
-