paint method
Paints the line to the canvas
.
Implementation
void paint(Canvas canvas) {
// Check input values
assert(_points != null);
if (_points.length < 2) return;
assert(_points.length == colors.length);
assert(_points.length == widths.length);
_cachedPaint.blendMode = transferMode;
// Calculate normals
List<Vector2> vectors = <Vector2>[];
for (Offset pt in _points) {
vectors.add(new Vector2(pt.dx, pt.dy));
}
List<Vector2> miters = _computeMiterList(vectors, false);
List<Offset> vertices = <Offset>[];
List<int> indices = <int>[];
List<Color> verticeColors = <Color>[];
List<Offset> textureCoordinates;
double textureTop;
double textureBottom;
List<double> stops;
// Add first point
Offset lastPoint = _points[0];
Vector2 lastMiter = miters[0];
// Add vertices and colors
_addVerticesForPoint(vertices, lastPoint, lastMiter, widths[0]);
verticeColors.add(colors[0]);
verticeColors.add(colors[0]);
if (texture != null) {
assert(texture.rotated == false);
// Setup for calculating texture coordinates
textureTop = texture.frame.top;
textureBottom = texture.frame.bottom;
textureCoordinates = <Offset>[];
// Use correct stops
if (textureStops != null) {
assert(_points.length == textureStops.length);
stops = textureStops;
} else {
if (_calculatedTextureStops == null) _calculateTextureStops();
stops = _calculatedTextureStops;
}
// Texture coordinate points
double xPos = _xPosForStop(stops[0]);
textureCoordinates.add(new Offset(xPos, textureTop));
textureCoordinates.add(new Offset(xPos, textureBottom));
}
// Add the rest of the points
for (int i = 1; i < _points.length; i++) {
// Add vertices
Offset currentPoint = _points[i];
Vector2 currentMiter = miters[i];
_addVerticesForPoint(vertices, currentPoint, currentMiter, widths[i]);
// Add references to the triangles
int lastIndex0 = (i - 1) * 2;
int lastIndex1 = (i - 1) * 2 + 1;
int currentIndex0 = i * 2;
int currentIndex1 = i * 2 + 1;
indices.addAll(<int>[lastIndex0, lastIndex1, currentIndex0]);
indices.addAll(<int>[lastIndex1, currentIndex1, currentIndex0]);
// Add colors
verticeColors.add(colors[i]);
verticeColors.add(colors[i]);
if (texture != null) {
// Texture coordinate points
double xPos = _xPosForStop(stops[i]);
textureCoordinates.add(new Offset(xPos, textureTop));
textureCoordinates.add(new Offset(xPos, textureBottom));
}
// Update last values
lastPoint = currentPoint;
lastMiter = currentMiter;
}
//TODO: Fix
// canvas.drawVertices(VertexMode.triangles, vertices, textureCoordinates, verticeColors, BlendMode.modulate, indices, _cachedPaint);
}