diff --git a/samples/RenderDemo/Pages/PathMeasurementPage.cs b/samples/RenderDemo/Pages/PathMeasurementPage.cs index 6373e39ac5..212377deae 100644 --- a/samples/RenderDemo/Pages/PathMeasurementPage.cs +++ b/samples/RenderDemo/Pages/PathMeasurementPage.cs @@ -15,13 +15,17 @@ namespace RenderDemo.Pages { public class PathMeasurementPage : Control { + static PathMeasurementPage() + { + AffectsRender(BoundsProperty); + } + private RenderTargetBitmap _bitmap; protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) { _bitmap = new RenderTargetBitmap(new PixelSize(500, 500), new Vector(96, 96)); base.OnAttachedToLogicalTree(e); - AffectsRender(BoundsProperty); } protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs index ec162e3e2a..e6092574c5 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs @@ -178,7 +178,7 @@ namespace Avalonia.Rendering.SceneGraph ++_drawOperationindex; } } - + public void Custom(ICustomDrawOperation custom) { var next = NextDrawAs(); diff --git a/src/Skia/Avalonia.Skia/GeometryImpl.cs b/src/Skia/Avalonia.Skia/GeometryImpl.cs index e5794c1a64..23fc5be20a 100644 --- a/src/Skia/Avalonia.Skia/GeometryImpl.cs +++ b/src/Skia/Avalonia.Skia/GeometryImpl.cs @@ -11,7 +11,20 @@ namespace Avalonia.Skia internal abstract class GeometryImpl : IGeometryImpl { private PathCache _pathCache; - private SKPathMeasure _pathMeasureCache; + private SKPathMeasure _pathMeasureCachex; + + private SKPathMeasure CachedPathMeasure + { + get + { + if (_pathMeasureCachex is null) + { + _pathMeasureCachex = new SKPathMeasure(EffectivePath); + } + + return _pathMeasureCachex; + } + } /// public abstract Rect Bounds { get; } @@ -24,12 +37,7 @@ namespace Avalonia.Skia if (EffectivePath is null) return 0; - if (_pathMeasureCache is null) - { - _pathMeasureCache = new SKPathMeasure(EffectivePath); - } - - return (double)_pathMeasureCache?.Length; + return (double)CachedPathMeasure?.Length; } } @@ -132,12 +140,7 @@ namespace Avalonia.Skia return false; } - if (_pathMeasureCache is null) - { - _pathMeasureCache = new SKPathMeasure(EffectivePath); - } - - var res = _pathMeasureCache.GetPosition((float)distance, out var skPoint); + var res = CachedPathMeasure.GetPosition((float)distance, out var skPoint); point = new Point(skPoint.X, skPoint.Y); return res; } @@ -152,12 +155,7 @@ namespace Avalonia.Skia return false; } - if (_pathMeasureCache is null) - { - _pathMeasureCache = new SKPathMeasure(EffectivePath); - } - - var res = _pathMeasureCache.GetPositionAndTangent((float)distance, out var skPoint, out var skTangent); + var res = CachedPathMeasure.GetPositionAndTangent((float)distance, out var skPoint, out var skTangent); point = new Point(skPoint.X, skPoint.Y); tangent = new Point(skTangent.X, skTangent.Y); return res; @@ -172,16 +170,11 @@ namespace Avalonia.Skia return false; } - if (_pathMeasureCache is null) - { - _pathMeasureCache = new SKPathMeasure(EffectivePath); - } - segmentGeometry = null; var _skPathSegment = new SKPath(); - var res = _pathMeasureCache.GetSegment((float)startDistance, (float)stopDistance, _skPathSegment, startOnBeginFigure); + var res = CachedPathMeasure.GetSegment((float)startDistance, (float)stopDistance, _skPathSegment, startOnBeginFigure); if (res) {