Пример #1
0
        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);
        }