Browse Source

add skia implementation

pull/5683/head
Jumar Macato 6 years ago
parent
commit
60d111b074
No known key found for this signature in database GPG Key ID: B19884DAC3A5BF3F
  1. 43
      src/Skia/Avalonia.Skia/GeometryImpl.cs

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

@ -11,9 +11,20 @@ namespace Avalonia.Skia
internal abstract class GeometryImpl : IGeometryImpl
{
private PathCache _pathCache;
/// <inheritdoc />
public abstract Rect Bounds { get; }
/// <inheritdoc />
public double ContourLength
{
get
{
if (EffectivePath is null) return 0;
return new SKPathMeasure(EffectivePath).Length;
}
}
public abstract SKPath EffectivePath { get; }
/// <inheritdoc />
@ -103,6 +114,36 @@ namespace Avalonia.Skia
{
return new TransformedGeometryImpl(this, transform);
}
/// <inheritdoc />
public bool TryGetPointAtDistance(double distance, out Point point)
{
if (EffectivePath is null)
{
point = new Point();
return false;
}
var res = new SKPathMeasure(EffectivePath).GetPosition((float)distance, out var skPoint);
point = new Point(skPoint.X, skPoint.Y);
return res;
}
/// <inheritdoc />
public bool TryGetPointAndTangentAtDistance(double distance, out Point point, out Point tangent)
{
if (EffectivePath is null)
{
point = new Point();
tangent = new Point();
return false;
}
var res = new SKPathMeasure(EffectivePath).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;
}
/// <summary>
/// Invalidate all caches. Call after chaining path contents.

Loading…
Cancel
Save