/// <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; }
/// <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); }
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)); }
/// <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(); }
/// <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; }
/// <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; }
/// <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))); }
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; }
/// <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; }
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; }
/// <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; }
/// <summary> /// Creates the path effect. /// </summary> /// <param name="drawingContext">The drawing context.</param> public abstract void CreateEffect(SkiaSharpDrawingContext drawingContext);
/// <summary> /// Creates the image filter. /// </summary> /// <param name="drawingContext">The drawing context.</param> public abstract void CreateFilter(SkiaSharpDrawingContext drawingContext);
private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext) { return(new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width)); }
/// <inheritdoc cref="IDrawableTask{TDrawingContext}.SetOpacity(TDrawingContext, IGeometry{TDrawingContext})" /> public override void SetOpacity(SkiaSharpDrawingContext context, IGeometry <SkiaSharpDrawingContext> geometry) { throw new System.NotImplementedException(); }
/// <summary> /// Creates the path effect. /// </summary> /// <param name="drawingContext">The drawing context.</param> public override void CreateEffect(SkiaSharpDrawingContext drawingContext) { SKPathEffect = SKPathEffect.CreateDash(_dashArray, _phase); }
/// <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); }
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)); }
/// <inheritdoc cref="IPaint{TDrawingContext}.ApplyOpacityMask(TDrawingContext, IPaintable{TDrawingContext})" /> public override void ApplyOpacityMask(SkiaSharpDrawingContext context, IPaintable <SkiaSharpDrawingContext> geometry) { throw new System.NotImplementedException(); }
/// <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); }
/// <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); }