/// <inheritdoc cref="IDrawableTask{TDrawingContext}.InitializeTask(TDrawingContext)" />
        public override void InitializeTask(SkiaSharpDrawingContext drawingContext)
        {
            if (skiaPaint == null)
            {
                skiaPaint = new SKPaint();
            }

            skiaPaint.Shader = SKShader.CreateLinearGradient(
                _startPoint,
                _endPoint,
                _gradientStops,
                SKShaderTileMode.Repeat);


            skiaPaint.IsAntialias = IsAntialias;
            skiaPaint.IsStroke    = false;
            skiaPaint.StrokeWidth = 0;
            if (ClipRectangle != RectangleF.Empty)
            {
                _ = drawingContext.Canvas.Save();
                drawingContext.Canvas.ClipRect(new SKRect(ClipRectangle.X, ClipRectangle.Y, ClipRectangle.Width, ClipRectangle.Height));
                _drawingContext = drawingContext;
            }

            drawingContext.Paint     = skiaPaint;
            drawingContext.PaintTask = this;
        }
Esempio n. 2
0
        /// <inheritdoc cref="Geometry.OnDraw(SkiaSharpDrawingContext, SKPaint)" />
        public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint)
        {
            var rx = Width / 2f;
            var ry = Height / 2f;

            context.Canvas.DrawOval(X + rx, Y + ry, rx, ry, paint);
        }
Esempio n. 3
0
    private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext)
    {
        var clip = GetClipRectangle(drawingContext.MotionCanvas);

        return(clip == LvcRectangle.Empty
            ? new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width)
            : new SKRect(clip.X, clip.Y, clip.Width, clip.Height));
    }
Esempio n. 4
0
 /// <inheritdoc cref="Geometry.OnDraw(SkiaSharpDrawingContext, SKPaint)" />
 public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint)
 {
     context.Canvas.DrawRect(
         new SKRect {
         Top = Y, Left = X, Size = new SKSize {
             Height = Height, Width = Width
         }
     }, paint);
 }
        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public override void Dispose()
        {
            if (ClipRectangle != RectangleF.Empty && _drawingContext != null)
            {
                _drawingContext.Canvas.Restore();
                _drawingContext = null;
            }

            base.Dispose();
        }
Esempio n. 6
0
    /// <inheritdoc cref="IPaint{TDrawingContext}.InitializeTask(TDrawingContext)" />
    public override void InitializeTask(SkiaSharpDrawingContext drawingContext)
    {
        skiaPaint ??= new SKPaint();

        var size   = GetDrawRectangleSize(drawingContext);
        var center = new SKPoint(size.Location.X + _center.X * size.Width, size.Location.Y + _center.Y * size.Height);
        var r      = size.Location.X + size.Width > size.Location.Y + size.Height
            ? size.Location.Y + size.Height
            : size.Location.X + size.Width;

        r *= _radius;

        skiaPaint.Shader = SKShader.CreateRadialGradient(
            center,
            r,
            _gradientStops,
            _colorPos,
            _tileMode);

        skiaPaint.IsAntialias = IsAntialias;
        skiaPaint.IsStroke    = true;
        skiaPaint.StrokeWidth = StrokeThickness;
        skiaPaint.StrokeCap   = StrokeCap;
        skiaPaint.StrokeJoin  = StrokeJoin;
        skiaPaint.StrokeMiter = StrokeMiter;
        skiaPaint.Style       = IsStroke ? SKPaintStyle.Stroke : SKPaintStyle.Fill;
        if (FontFamily != null)
        {
            skiaPaint.Typeface = GetTypeFaceFromFontFamily();
        }

        if (PathEffect is not null)
        {
            PathEffect.CreateEffect(drawingContext);
            skiaPaint.PathEffect = PathEffect.SKPathEffect;
        }

        if (ImageFilter is not null)
        {
            ImageFilter.CreateFilter(drawingContext);
            skiaPaint.ImageFilter = ImageFilter.SKImageFilter;
        }

        var clip = GetClipRectangle(drawingContext.MotionCanvas);

        if (clip != LvcRectangle.Empty)
        {
            _ = drawingContext.Canvas.Save();
            drawingContext.Canvas.ClipRect(new SKRect(clip.X, clip.Y, clip.X + clip.Width, clip.Y + clip.Height));
            _drawingContext = drawingContext;
        }

        drawingContext.Paint     = skiaPaint;
        drawingContext.PaintTask = this;
    }
Esempio n. 7
0
        /// <inheritdoc cref="IPaint{TDrawingContext}.RestoreOpacityMask(TDrawingContext, IPaintable{TDrawingContext})" />
        public override void RestoreOpacityMask(SkiaSharpDrawingContext context, IPaintable <SkiaSharpDrawingContext> geometry)
        {
            if (context.PaintTask is null || context.Paint is null)
            {
                return;
            }

            var baseColor = context.PaintTask.Color;

            context.Paint.Color = baseColor;
        }
Esempio n. 8
0
        /// <inheritdoc cref="IPaintTask{TDrawingContext}.SetOpacity(TDrawingContext, IGeometry{TDrawingContext})" />
        public override void SetOpacity(SkiaSharpDrawingContext context, IGeometry <SkiaSharpDrawingContext> geometry)
        {
            if (context.PaintTask is null || context.Paint is null)
            {
                return;
            }

            var baseColor = context.PaintTask.Color;

            context.Paint.Color =
                new SKColor(baseColor.Red, baseColor.Green, baseColor.Blue, unchecked ((byte)(255 * geometry.Opacity)));
        }
Esempio n. 9
0
        public override void InitializeTask(SkiaSharpDrawingContext drawingContext)
        {
            if (skiaPaint == null)
            {
                skiaPaint = new SKPaint();
            }

            skiaPaint.Color       = Color;
            skiaPaint.IsAntialias = IsAntialias;
            skiaPaint.IsStroke    = IsStroke;
            skiaPaint.StrokeWidth = StrokeWidth;

            drawingContext.Paint     = skiaPaint;
            drawingContext.PaintTask = this;
        }
Esempio n. 10
0
        /// <inheritdoc cref="IPaintTask{TDrawingContext}.ResetOpacity(TDrawingContext, IGeometry{TDrawingContext})" />
        public override void ResetOpacity(SkiaSharpDrawingContext context, IGeometry <SkiaSharpDrawingContext> geometry)
        {
            if (context.PaintTask is null || context.Paint is null)
            {
                return;
            }
            if (ImageFilter is not null)
            {
                ImageFilter.Dispose();
            }

            var baseColor = context.PaintTask.Color;

            context.Paint.Color = baseColor;
        }
Esempio n. 11
0
    public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint)
    {
        // lets also draw a white circle as background before the svg path is drawn
        // this will just make things look better

        using (var backgroundPaint = new SKPaint())
        {
            backgroundPaint.Style = SKPaintStyle.Fill;
            backgroundPaint.Color = SKColors.White;

            var r = Width / 2;
            context.Canvas.DrawCircle(X + r, Y + r, r, backgroundPaint);
        }

        base.OnDraw(context, paint);
    }
        /// <summary>
        /// Creates the image filter.
        /// </summary>
        /// <param name="drawingContext">The drawing context.</param>
        /// <exception cref="System.NotImplementedException"></exception>
        public override void CreateFilter(SkiaSharpDrawingContext drawingContext)
        {
            var imageFilters = new SKImageFilter[_filters.Length];
            var i            = 0;

            foreach (var item in _filters)
            {
                item.CreateFilter(drawingContext);
                if (item.SKImageFilter is null)
                {
                    throw new System.Exception("Image filter is not valid");
                }
                imageFilters[i++] = item.SKImageFilter;
            }

            SKImageFilter = SKImageFilter.CreateMerge(imageFilters, _cropRect);
        }
        /// <inheritdoc cref="IDrawableTask{TDrawingContext}.InitializeTask(TDrawingContext)" />
        public override void InitializeTask(SkiaSharpDrawingContext drawingContext)
        {
            if (skiaPaint == null)
            {
                skiaPaint = new SKPaint();
            }

            var size   = GetDrawRectangleSize(drawingContext);
            var center = new SKPoint(size.Location.X + _center.X * size.Width, size.Location.Y + _center.Y * size.Height);
            var r      = size.Location.X + size.Width > size.Location.Y + size.Height
                ? size.Location.Y + size.Height
                : size.Location.X + size.Width;

            r *= _radius;

            skiaPaint.Shader = SKShader.CreateRadialGradient(
                center,
                r,
                _gradientStops,
                _colorPos,
                _tileMode);

            skiaPaint.IsAntialias = IsAntialias;
            skiaPaint.IsStroke    = true;
            skiaPaint.StrokeWidth = StrokeThickness;
            skiaPaint.Style       = IsStroke ? SKPaintStyle.Stroke : SKPaintStyle.Fill;

            if (PathEffect != null)
            {
                PathEffect.CreateEffect(drawingContext);
                skiaPaint.PathEffect = PathEffect.SKPathEffect;
            }

            if (ClipRectangle != RectangleF.Empty)
            {
                _ = drawingContext.Canvas.Save();
                drawingContext.Canvas.ClipRect(
                    new SKRect(
                        ClipRectangle.X, ClipRectangle.Y, ClipRectangle.X + ClipRectangle.Width, ClipRectangle.Y + ClipRectangle.Height));
                _drawingContext = drawingContext;
            }

            drawingContext.Paint     = skiaPaint;
            drawingContext.PaintTask = this;
        }
Esempio n. 14
0
        /// <inheritdoc cref="IPaint{TDrawingContext}.InitializeTask(TDrawingContext)" />
        public override void InitializeTask(SkiaSharpDrawingContext drawingContext)
        {
            skiaPaint ??= new SKPaint();

            skiaPaint.Color       = Color;
            skiaPaint.IsAntialias = IsAntialias;
            skiaPaint.IsStroke    = IsStroke;
            skiaPaint.StrokeCap   = StrokeCap;
            skiaPaint.StrokeJoin  = StrokeJoin;
            skiaPaint.StrokeMiter = StrokeMiter;
            skiaPaint.StrokeWidth = StrokeThickness;
            skiaPaint.Style       = IsStroke ? SKPaintStyle.Stroke : SKPaintStyle.Fill;
            if (FontFamily != null)
            {
                skiaPaint.Typeface = GetTypeFaceFromFontFamily();
            }

            if (PathEffect is not null)
            {
                PathEffect.CreateEffect(drawingContext);
                skiaPaint.PathEffect = PathEffect.SKPathEffect;
            }

            if (ImageFilter is not null)
            {
                ImageFilter.CreateFilter(drawingContext);
                skiaPaint.ImageFilter = ImageFilter.SKImageFilter;
            }

            var clip = GetClipRectangle(drawingContext.MotionCanvas);

            if (clip != LvcRectangle.Empty)
            {
                _ = drawingContext.Canvas.Save();
                drawingContext.Canvas.ClipRect(new SKRect(clip.X, clip.Y, clip.X + clip.Width, clip.Y + clip.Height));
                _drawingContext = drawingContext;
            }

            drawingContext.Paint     = skiaPaint;
            drawingContext.PaintTask = this;
        }
Esempio n. 15
0
 /// <summary>
 /// Creates the path effect.
 /// </summary>
 /// <param name="drawingContext">The drawing context.</param>
 public abstract void CreateEffect(SkiaSharpDrawingContext drawingContext);
Esempio n. 16
0
 /// <summary>
 /// Creates the image filter.
 /// </summary>
 /// <param name="drawingContext">The drawing context.</param>
 public abstract void CreateFilter(SkiaSharpDrawingContext drawingContext);
Esempio n. 17
0
 private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext)
 {
     return(new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width));
 }
Esempio n. 18
0
 /// <inheritdoc cref="IDrawableTask{TDrawingContext}.SetOpacity(TDrawingContext, IGeometry{TDrawingContext})" />
 public override void SetOpacity(SkiaSharpDrawingContext context, IGeometry <SkiaSharpDrawingContext> geometry)
 {
     throw new System.NotImplementedException();
 }
Esempio n. 19
0
 /// <summary>
 /// Creates the path effect.
 /// </summary>
 /// <param name="drawingContext">The drawing context.</param>
 public override void CreateEffect(SkiaSharpDrawingContext drawingContext)
 {
     SKPathEffect = SKPathEffect.CreateDash(_dashArray, _phase);
 }
Esempio n. 20
0
 /// <summary>
 /// Creates the image filter.
 /// </summary>
 /// <param name="drawingContext">The drawing context.</param>
 public override void CreateFilter(SkiaSharpDrawingContext drawingContext)
 {
     SKImageFilter = SKImageFilter.CreateDropShadow(_dx, _dy, _sigmaX, _sigmaY, _color, _filter, _cropRect);
 }
Esempio n. 21
0
 private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext)
 {
     return(ClipRectangle == null
         ? new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width)
         : new SKRect(ClipRectangle.X, ClipRectangle.Y, ClipRectangle.Width, ClipRectangle.Height));
 }
Esempio n. 22
0
 /// <inheritdoc cref="IPaint{TDrawingContext}.ApplyOpacityMask(TDrawingContext, IPaintable{TDrawingContext})" />
 public override void ApplyOpacityMask(SkiaSharpDrawingContext context, IPaintable <SkiaSharpDrawingContext> geometry)
 {
     throw new System.NotImplementedException();
 }
Esempio n. 23
0
        /// <inheritdoc cref="Geometry.OnDraw(SkiaSharpDrawingContext, SKPaint)" />
        public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint)
        {
            var rx = Width / 2f;

            context.Canvas.DrawCircle(X + rx, Y + rx, rx, paint);
        }
Esempio n. 24
0
 /// <summary>
 /// Creates the filter.
 /// </summary>
 /// <param name="drawingContext">The drawing context.</param>
 /// <returns></returns>
 public override void CreateFilter(SkiaSharpDrawingContext drawingContext)
 {
     SKImageFilter = SKImageFilter.CreateBlur(_sigmaX, _sigmaY, _filter, _cropRect);
 }