Browse Source

Fix unpositioned GlyphRuns

pull/9375/head
Benedikt Stebner 4 years ago
parent
commit
b295935286
  1. 10
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
  2. 6
      tests/Avalonia.RenderTests/Media/GlyphRunTests.cs
  3. BIN
      tests/TestFiles/Direct2D1/Media/GlyphRun/Should_Render_GlyphRun_Positioned.expected.png
  4. BIN
      tests/TestFiles/Direct2D1/Media/GlyphRun/Should_Render_GlyphRun_UnPositioned.expected.png
  5. BIN
      tests/TestFiles/Skia/Media/GlyphRun/Should_Render_GlyphRun_Positioned.expected.png
  6. BIN
      tests/TestFiles/Skia/Media/GlyphRun/Should_Render_GlyphRun_UnPositioned.expected.png

10
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -242,7 +242,7 @@ namespace Avalonia.Skia
"Current GPU acceleration backend does not support OpenGL integration");
}
public IGlyphRunImpl CreateGlyphRun(IGlyphTypeface glyphTypeface, double fontRenderingEmSize, IReadOnlyList<ushort> glyphIndices,
public IGlyphRunImpl CreateGlyphRun(IGlyphTypeface glyphTypeface, double fontRenderingEmSize, IReadOnlyList<ushort> glyphIndices,
IReadOnlyList<double> glyphAdvances, IReadOnlyList<Vector> glyphOffsets)
{
if (glyphTypeface == null)
@ -273,7 +273,7 @@ namespace Avalonia.Skia
var count = glyphIndices.Count;
if(glyphOffsets != null && glyphAdvances != null)
if (glyphOffsets != null && glyphAdvances != null)
{
var runBuffer = builder.AllocatePositionedRun(font, count);
@ -295,7 +295,7 @@ namespace Avalonia.Skia
}
else
{
if(glyphAdvances != null)
if (glyphAdvances != null)
{
var runBuffer = builder.AllocateHorizontalRun(font, count, 0);
@ -304,7 +304,7 @@ namespace Avalonia.Skia
var currentX = 0.0;
for (int i = 0; i < glyphOffsets.Count; i++)
for (int i = 0; i < glyphAdvances.Count; i++)
{
glyphSpan[i] = glyphIndices[i];
@ -319,7 +319,7 @@ namespace Avalonia.Skia
var glyphSpan = runBuffer.GetGlyphSpan();
for (int i = 0; i < glyphOffsets.Count; i++)
for (int i = 0; i < glyphIndices.Count; i++)
{
glyphSpan[i] = glyphIndices[i];
}

6
tests/Avalonia.RenderTests/Media/GlyphRunTests.cs

@ -166,9 +166,11 @@ namespace Avalonia.Direct2D1.RenderTests.Media
var glyphIndices = new[] { glyphTypeface.GetGlyph('A'), glyphTypeface.GetGlyph('B'), glyphTypeface.GetGlyph('C') };
var scale = glyphTypeface.Metrics.DesignEmHeight / 100.0;
var scale = 100.0 / glyphTypeface.Metrics.DesignEmHeight;
var advances = new[] { glyphTypeface.GetGlyphAdvance(glyphIndices[0]) * scale, glyphTypeface.GetGlyphAdvance(glyphIndices[1]) * scale, glyphTypeface.GetGlyphAdvance(glyphIndices[2]) * scale };
var advance = glyphTypeface.GetGlyphAdvance(glyphIndices[0]) * scale;
var advances = new[] { advance, advance, advance};
var characters = new[] { 'A', 'B', 'C' };

BIN
tests/TestFiles/Direct2D1/Media/GlyphRun/Should_Render_GlyphRun_Positioned.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
tests/TestFiles/Direct2D1/Media/GlyphRun/Should_Render_GlyphRun_UnPositioned.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
tests/TestFiles/Skia/Media/GlyphRun/Should_Render_GlyphRun_Positioned.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
tests/TestFiles/Skia/Media/GlyphRun/Should_Render_GlyphRun_UnPositioned.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Loading…
Cancel
Save