TileSinkpublic class TileSink extends com.sun.pisces.PathSink
Fields Summary |
---|
protected int | minXThe minimum x coordinate in S15.16 format. | protected int | minYThe minimum y coordinate in S15.16 format. | protected int | maxXThe maximum x coordinate in S15.16 format. | protected int | maxYThe maximum y coordinate in S15.16 format. |
Methods Summary |
---|
void | checkPoint(int x0, int y0)Checks whether this point falls within the current region. If not,
adjusts minX, minY, maxX, maxY.
if (x0 < minX) {
minX = x0;
} else if (x0 > maxX) {
maxX = x0;
}
if (y0 < minY) {
minY = y0;
} else if (y0 > maxY) {
maxY = y0;
}
| public void | close()Closes the current path by drawing a line from the current
drawing position to the point specified by the moset recent
moveTo command.
| public void | cubicTo(int x1, int y1, int x2, int y2, int x3, int y3)Draws a cubic Bezier curve starting at the current drawing
position and ending at the point (x3, y3)
according to the formulas:
x(t) = (1 - t)^3*x0 + 3*(1 - t)^2*t*x1 + 3*(1 - t)*t^2*x2 + t^3*x3
y(t) = (1 - t)^3*y0 + 3*(1 - t)^2*t*y1 + 3*(1 - t)*t^2*y2 + t^3*x3
0 <= t <= 1
where (x0, y0) is the current drawing position.
Finally, the current drawing position is set to (x3,
y3) .
checkPoint(x1, y1);
checkPoint(x2, y2);
checkPoint(x3, y3);
| public void | end()Ends the current path. It may be necessary to end a path in
order to allow end caps to be drawn.
| public void | lineJoin()Provides a hint that the current segment should be joined to
the following segment using an explicit miter or round join if
required.
An application-generated path will generally have no need
to contain calls to this method; they are typically introduced
by a Flattener to mark segment divisions that
appear in its input, and consumed by a Stroker
that is responsible for emitting the miter or round join
segments.
Other LineSink classes should simply pass this
hint to their output sink as needed.
| public void | lineTo(int x1, int y1)Draws a line from the current drawing position to the point
(x1, y1) and sets the current drawing position to
(x1, y1) .
checkPoint(x1, y1);
| public void | moveTo(int x0, int y0)Moves the current drawing position to the point (x0,
y0) .
checkPoint(x0, y0);
| public void | quadTo(int x1, int y1, int x2, int y2)Draws a quadratic Bezier curve starting at the current drawing
position and ending at the point (x2, y2)
according to the formulas:
x(t) = (1 - t)^2*x0 + 2*(1 - t)*t*x1 + t^2*x2
y(t) = (1 - t)^2*y0 + 2*(1 - t)*t*y1 + t^2*x2
0 <= t <= 1
where (x0, y0) is the current drawing position.
Finally, the current drawing position is set to (x2,
y2) .
checkPoint(x1, y1);
checkPoint(x2, y2);
| public void | reset()Resets the bounds to their initial values.
minX = Integer.MAX_VALUE;
minY = Integer.MAX_VALUE;
maxX = Integer.MIN_VALUE;
maxY = Integer.MIN_VALUE;
| public void | setTile(Tile tile)Sets the tile to the current values.
tile.x = minX >> 16;
tile.y = minY >> 16;
tile.maxX = (maxX >> 16) - 1;
tile.maxY = (maxY >> 16) - 1;
// Precision adjustments.
// If x and y are positive, then, the int value for minX is
// smaller than or equal to the fixed point value, so there
// is no adjustment needed.
// If x and y are netative, then, the int value for minX is
// greater than the fixed point value. We need to be at least
// as large as the bounds, so we decrease the value by one
// to encompass the origin.
if (minX < 0 && (minX & 0xffff) != 0) {
tile.x -= 1;
}
if (minY < 0 && (minX & 0xffff) != 0) {
tile.y -= 1;
}
// If there is a fractional part in the maxX and maxY values,
// we adjust them to be at least as big as the rendering area.
if (maxX > 0 && (maxX & 0xffff) != 0) {
tile.maxX += 1;
}
if (maxY > 0 && (maxY & 0xffff) != 0) {
tile.maxY += 1;
}
|
|