FileDocCategorySizeDatePackage
TileSink.javaAPI DocphoneME MR2 API (J2ME)7332Wed May 02 18:00:34 BST 2007com.sun.perseus.j2d

TileSink

public class TileSink extends com.sun.pisces.PathSink
version
$Id: TileSink.java,v 1.3 2006/04/21 06:35:41 st125089 Exp $

Fields Summary
protected int
minX
The minimum x coordinate in S15.16 format.
protected int
minY
The minimum y coordinate in S15.16 format.
protected int
maxX
The maximum x coordinate in S15.16 format.
protected int
maxY
The maximum y coordinate in S15.16 format.
Constructors Summary
Methods Summary
voidcheckPoint(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 voidclose()
Closes the current path by drawing a line from the current drawing position to the point specified by the moset recent moveTo command.

    
public voidcubicTo(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).

param
x1 the X coordinate of the first control point in S15.16 format
param
y1 the Y coordinate of the first control point in S15.16 format
param
x2 the X coordinate of the second control point in S15.16 format
param
y2 the Y coordinate of the second control point in S15.16 format
param
x3 the final X coordinate in S15.16 format
param
y3 the final Y coordinate in S15.16 format

        checkPoint(x1, y1);
        checkPoint(x2, y2);
        checkPoint(x3, y3);
    
public voidend()
Ends the current path. It may be necessary to end a path in order to allow end caps to be drawn.

    
public voidlineJoin()
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 voidlineTo(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).

param
x1 the X coordinate in S15.16 format
param
y1 the Y coordinate in S15.16 format

        checkPoint(x1, y1);
    
public voidmoveTo(int x0, int y0)
Moves the current drawing position to the point (x0, y0).

param
x0 the X coordinate in S15.16 format
param
y0 the Y coordinate in S15.16 format

        checkPoint(x0, y0);
    
public voidquadTo(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).

param
x1 the X coordinate of the control point in S15.16 format
param
y1 the Y coordinate of the control point in S15.16 format
param
x2 the final X coordinate in S15.16 format
param
y2 the final Y coordinate in S15.16 format

        checkPoint(x1, y1);
        checkPoint(x2, y2);
    
public voidreset()
Resets the bounds to their initial values.

        minX = Integer.MAX_VALUE;
        minY = Integer.MAX_VALUE;
        maxX = Integer.MIN_VALUE;
        maxY = Integer.MIN_VALUE;
    
public voidsetTile(Tile tile)
Sets the tile to the current values.

param
tile the tile to set.

        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;
        }