public SKPaint CreatePaint(EvaluationContext context) { if (context.Equals(lastContext)) { return(lastPaint); } if (variableColor || variableOpacity) { var c = variableColor ? funcColor(context) : color; var o = variableOpacity ? funcOpacity(context) : opacity; paint.Color = c.WithAlpha((byte)(c.Alpha * o)); } if (variableStyle) { paint.Style = funcStyle(context); } if (variableAntialias) { paint.IsAntialias = funcAntialias(context); } if (variableStrokeWidth) { paint.StrokeWidth = funcStrokeWidth(context) * context.Scale; } else { paint.StrokeWidth = strokeWidth * context.Scale; } if (variableStrokeCap) { paint.StrokeCap = funcStrokeCap(context); } if (variableStrokeJoin) { paint.StrokeJoin = funcStrokeJoin(context); } if (variableStrokeMiter) { paint.StrokeMiter = funcStrokeMiter(context); } if (variableShader) { paint.Shader = funcShader(context); } // We have to multiply the dasharray with the linewidth if (variableDashArray) { var array = funcDashArray(context); for (var i = 0; i < array.Length; i++) { array[i] = array[i] * paint.StrokeWidth; } paint.PathEffect = SKPathEffect.CreateDash(array, 0); } else if (fixDashArray != null) { var array = new float[fixDashArray.Length]; for (var i = 0; i < array.Length; i++) { array[i] = fixDashArray[i] * paint.StrokeWidth; } paint.PathEffect = SKPathEffect.CreateDash(array, 0); } lastContext = new EvaluationContext(context.Zoom, context.Scale, context.Tags); lastPaint = paint; return(paint); }