Package org.apache.batik.ext.awt
Class RadialGradientPaintContext
java.lang.Object
org.apache.batik.ext.awt.MultipleGradientPaintContext
org.apache.batik.ext.awt.RadialGradientPaintContext
- All Implemented Interfaces:
PaintContext
Provides the actual implementation for the RadialGradientPaint.
This is where the pixel processing is done. A RadialGradienPaint
only supports circular gradients, but it should be possible to scale
the circle to look approximately elliptical, by means of a
gradient transform passed into the RadialGradientPaint constructor.
- Version:
- $Id: RadialGradientPaintContext.java 1733416 2016-03-03 07:07:13Z gadams $
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
private float
Variables representing center and focus points.private float
Variables representing center and focus points.private float
Constant part of X, Y user space coordinates.private float
Constant part of X, Y user space coordinates.private static final int
private int
private static final int
private float
Variables representing center and focus points.private float
Variables representing center and focus points.private float
Length of a square distance intervale in the lookup tableprivate boolean
True when (cycleMethod == NO_CYCLE)private boolean
True when (focus == center)private static final int
Used to limit the size of the square root lookup tableprivate float
Radius of the outermost circle defining the 100% gradient stop.private float
Radius of the gradient circle squared.private static final float
Amount for offset when clamping focus.private int[]
Square root lookup tableprivate float
This value represents the solution when focusX == X.Fields inherited from class org.apache.batik.ext.awt.MultipleGradientPaintContext
a00, a01, a02, a10, a11, a12, cached, cachedModel, colorSpace, cycleMethod, dataModel, DEBUG, fastGradientArraySize, fractions, gradient, GRADIENT_SIZE, GRADIENT_SIZE_INDEX, gradientAverage, gradientOverflow, gradients, gradientsLength, gradientUnderflow, hasDiscontinuity, isSimpleLookup, model, normalizedIntervals, saved
-
Constructor Summary
ConstructorsConstructorDescriptionRadialGradientPaintContext
(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, AffineTransform t, RenderingHints hints, float cx, float cy, float r, float fx, float fy, float[] fractions, Color[] colors, MultipleGradientPaint.CycleMethodEnum cycleMethod, MultipleGradientPaint.ColorSpaceEnum colorSpace) Constructor for RadialGradientPaintContext. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
antiAliasFillRaster
(int[] pixels, int off, int adjust, int x, int y, int w, int h) Fill the raster, cycling the gradient colors when a point falls outside of the perimeter of the 100% stop circle.private void
Build square root lookup tableprivate void
cyclicCircularGradientFillRaster
(int[] pixels, int off, int adjust, int x, int y, int w, int h) Fill the raster, cycling the gradient colors when a point falls outside of the perimeter of the 100% stop circle.protected void
fillRaster
(int[] pixels, int off, int adjust, int x, int y, int w, int h) Return a Raster containing the colors generated for the graphics operation.private void
fixedPointSimplestCaseNonCyclicFillRaster
(int[] pixels, int off, int adjust, int x, int y, int w, int h) This code works in the simplest of cases, where the focus == center point, the gradient is noncyclic, and the gradient lookup method is fast (single array index, no conversion necessary).Methods inherited from class org.apache.batik.ext.awt.MultipleGradientPaintContext
calculateGradientFractions, dispose, getCachedRaster, getColorModel, getRaster, indexGradientAntiAlias, indexIntoGradientsArrays, putCachedRaster
-
Field Details
-
isSimpleFocus
private boolean isSimpleFocusTrue when (focus == center) -
isNonCyclic
private boolean isNonCyclicTrue when (cycleMethod == NO_CYCLE) -
radius
private float radiusRadius of the outermost circle defining the 100% gradient stop. -
centerX
private float centerXVariables representing center and focus points. -
centerY
private float centerYVariables representing center and focus points. -
focusX
private float focusXVariables representing center and focus points. -
focusY
private float focusYVariables representing center and focus points. -
radiusSq
private float radiusSqRadius of the gradient circle squared. -
constA
private float constAConstant part of X, Y user space coordinates. -
constB
private float constBConstant part of X, Y user space coordinates. -
trivial
private float trivialThis value represents the solution when focusX == X. It is called trivial because it is easier to calculate than the general case. -
FIXED_POINT_IMPL
private static final int FIXED_POINT_IMPL- See Also:
-
DEFAULT_IMPL
private static final int DEFAULT_IMPL- See Also:
-
ANTI_ALIAS_IMPL
private static final int ANTI_ALIAS_IMPL- See Also:
-
fillMethod
private int fillMethod -
SCALEBACK
private static final float SCALEBACKAmount for offset when clamping focus.- See Also:
-
invSqStepFloat
private float invSqStepFloatLength of a square distance intervale in the lookup table -
MAX_PRECISION
private static final int MAX_PRECISIONUsed to limit the size of the square root lookup table- See Also:
-
sqrtLutFixed
private int[] sqrtLutFixedSquare root lookup table
-
-
Constructor Details
-
RadialGradientPaintContext
public RadialGradientPaintContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, AffineTransform t, RenderingHints hints, float cx, float cy, float r, float fx, float fy, float[] fractions, Color[] colors, MultipleGradientPaint.CycleMethodEnum cycleMethod, MultipleGradientPaint.ColorSpaceEnum colorSpace) throws NoninvertibleTransformException Constructor for RadialGradientPaintContext.- Parameters:
cm
-ColorModel
that receives thePaint
data. This is used only as a hint.deviceBounds
- the device space bounding box of the graphics primitive being rendereduserBounds
- the user space bounding box of the graphics primitive being renderedt
- theAffineTransform
from user space into device space (gradientTransform should be concatenated with this)hints
- the hints that the context object uses to choose between rendering alternativescx
- the center point in user space of the circle defining the gradient. The last color of the gradient is mapped to the perimeter of this circle X coordinatecy
- the center point in user space of the circle defining the gradient. The last color of the gradient is mapped to the perimeter of this circle Y coordinater
- the radius of the circle defining the extents of the color gradientfx
- the point in user space to which the first color is mapped X coordinatefy
- the point in user space to which the first color is mapped Y coordinatefractions
- the fractions specifying the gradient distributioncolors
- the gradient colorscycleMethod
- either NO_CYCLE, REFLECT, or REPEATcolorSpace
- which colorspace to use for interpolation, either SRGB or LINEAR_RGB- Throws:
NoninvertibleTransformException
-
-
Method Details
-
fillRaster
protected void fillRaster(int[] pixels, int off, int adjust, int x, int y, int w, int h) Return a Raster containing the colors generated for the graphics operation.- Specified by:
fillRaster
in classMultipleGradientPaintContext
- Parameters:
x
- The x coordinate of the area in device space for which colors are generated.y
- The y coordinate of the area in device space for which colors are generated.w
- The width of the area in device space for which colors are generated.h
- The height of the area in device space for which colors are generated.
-
fixedPointSimplestCaseNonCyclicFillRaster
private void fixedPointSimplestCaseNonCyclicFillRaster(int[] pixels, int off, int adjust, int x, int y, int w, int h) This code works in the simplest of cases, where the focus == center point, the gradient is noncyclic, and the gradient lookup method is fast (single array index, no conversion necessary). -
calculateFixedPointSqrtLookupTable
private void calculateFixedPointSqrtLookupTable()Build square root lookup table -
cyclicCircularGradientFillRaster
private void cyclicCircularGradientFillRaster(int[] pixels, int off, int adjust, int x, int y, int w, int h) Fill the raster, cycling the gradient colors when a point falls outside of the perimeter of the 100% stop circle. This calculation first computes the intersection point of the line from the focus through the current point in the raster, and the perimeter of the gradient circle. Then it determines the percentage distance of the current point along that line (focus is 0%, perimeter is 100%). Equation of a circle centered at (a,b) with radius r: (x-a)^2 + (y-b)^2 = r^2 Equation of a line with slope m and y-intercept b y = mx + b replacing y in the cirlce equation and solving using the quadratic formula produces the following set of equations. Constant factors have been extracted out of the inner loop. -
antiAliasFillRaster
private void antiAliasFillRaster(int[] pixels, int off, int adjust, int x, int y, int w, int h) Fill the raster, cycling the gradient colors when a point falls outside of the perimeter of the 100% stop circle. Use the anti-aliased gradient lookup. This calculation first computes the intersection point of the line from the focus through the current point in the raster, and the perimeter of the gradient circle. Then it determines the percentage distance of the current point along that line (focus is 0%, perimeter is 100%). Equation of a circle centered at (a,b) with radius r: (x-a)^2 + (y-b)^2 = r^2 Equation of a line with slope m and y-intercept b y = mx + b replacing y in the cirlce equation and solving using the quadratic formula produces the following set of equations. Constant factors have been extracted out of the inner loop.
-