Browse Source

address review

pull/5683/head
Jumar Macato 6 years ago
parent
commit
1ab777c961
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 6
      samples/RenderDemo/Pages/PathMeasurementPage.cs
  2. 2
      src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs
  3. 43
      src/Skia/Avalonia.Skia/GeometryImpl.cs

6
samples/RenderDemo/Pages/PathMeasurementPage.cs

@ -15,13 +15,17 @@ namespace RenderDemo.Pages
{ {
public class PathMeasurementPage : Control public class PathMeasurementPage : Control
{ {
static PathMeasurementPage()
{
AffectsRender<PathMeasurementPage>(BoundsProperty);
}
private RenderTargetBitmap _bitmap; private RenderTargetBitmap _bitmap;
protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e)
{ {
_bitmap = new RenderTargetBitmap(new PixelSize(500, 500), new Vector(96, 96)); _bitmap = new RenderTargetBitmap(new PixelSize(500, 500), new Vector(96, 96));
base.OnAttachedToLogicalTree(e); base.OnAttachedToLogicalTree(e);
AffectsRender<PathMeasurementPage>(BoundsProperty);
} }
protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e)

2
src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs

@ -178,7 +178,7 @@ namespace Avalonia.Rendering.SceneGraph
++_drawOperationindex; ++_drawOperationindex;
} }
} }
public void Custom(ICustomDrawOperation custom) public void Custom(ICustomDrawOperation custom)
{ {
var next = NextDrawAs<CustomDrawOperation>(); var next = NextDrawAs<CustomDrawOperation>();

43
src/Skia/Avalonia.Skia/GeometryImpl.cs

@ -11,7 +11,20 @@ namespace Avalonia.Skia
internal abstract class GeometryImpl : IGeometryImpl internal abstract class GeometryImpl : IGeometryImpl
{ {
private PathCache _pathCache; private PathCache _pathCache;
private SKPathMeasure _pathMeasureCache; private SKPathMeasure _pathMeasureCachex;
private SKPathMeasure CachedPathMeasure
{
get
{
if (_pathMeasureCachex is null)
{
_pathMeasureCachex = new SKPathMeasure(EffectivePath);
}
return _pathMeasureCachex;
}
}
/// <inheritdoc /> /// <inheritdoc />
public abstract Rect Bounds { get; } public abstract Rect Bounds { get; }
@ -24,12 +37,7 @@ namespace Avalonia.Skia
if (EffectivePath is null) if (EffectivePath is null)
return 0; return 0;
if (_pathMeasureCache is null) return (double)CachedPathMeasure?.Length;
{
_pathMeasureCache = new SKPathMeasure(EffectivePath);
}
return (double)_pathMeasureCache?.Length;
} }
} }
@ -132,12 +140,7 @@ namespace Avalonia.Skia
return false; return false;
} }
if (_pathMeasureCache is null) var res = CachedPathMeasure.GetPosition((float)distance, out var skPoint);
{
_pathMeasureCache = new SKPathMeasure(EffectivePath);
}
var res = _pathMeasureCache.GetPosition((float)distance, out var skPoint);
point = new Point(skPoint.X, skPoint.Y); point = new Point(skPoint.X, skPoint.Y);
return res; return res;
} }
@ -152,12 +155,7 @@ namespace Avalonia.Skia
return false; return false;
} }
if (_pathMeasureCache is null) var res = CachedPathMeasure.GetPositionAndTangent((float)distance, out var skPoint, out var skTangent);
{
_pathMeasureCache = new SKPathMeasure(EffectivePath);
}
var res = _pathMeasureCache.GetPositionAndTangent((float)distance, out var skPoint, out var skTangent);
point = new Point(skPoint.X, skPoint.Y); point = new Point(skPoint.X, skPoint.Y);
tangent = new Point(skTangent.X, skTangent.Y); tangent = new Point(skTangent.X, skTangent.Y);
return res; return res;
@ -172,16 +170,11 @@ namespace Avalonia.Skia
return false; return false;
} }
if (_pathMeasureCache is null)
{
_pathMeasureCache = new SKPathMeasure(EffectivePath);
}
segmentGeometry = null; segmentGeometry = null;
var _skPathSegment = new SKPath(); 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) if (res)
{ {

Loading…
Cancel
Save