From 312e6089f82ce7c10a88ac8fbf0932ef894f9ea6 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 16 Oct 2023 19:05:41 +0200 Subject: [PATCH] Fixes leading space GlyphRun.InkBounds (#13268) * Make sure glyph bounds of whitespaces are calculated properly * Add unit test --- src/Skia/Avalonia.Skia/GlyphRunImpl.cs | 5 +++++ .../Media/GlyphRunTests.cs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/Skia/Avalonia.Skia/GlyphRunImpl.cs b/src/Skia/Avalonia.Skia/GlyphRunImpl.cs index 10337f77c2..067ccc3d60 100644 --- a/src/Skia/Avalonia.Skia/GlyphRunImpl.cs +++ b/src/Skia/Avalonia.Skia/GlyphRunImpl.cs @@ -70,6 +70,11 @@ namespace Avalonia.Skia var gBounds = glyphBounds[i]; var advance = glyphInfos[i].GlyphAdvance; + if(gBounds.Width == 0) + { + gBounds = new SKRect(0, 0, (float)advance, 1); + } + runBounds = runBounds.Union(new Rect(currentX + gBounds.Left, baselineOrigin.Y + gBounds.Top, gBounds.Width, gBounds.Height)); currentX += advance; diff --git a/tests/Avalonia.Skia.UnitTests/Media/GlyphRunTests.cs b/tests/Avalonia.Skia.UnitTests/Media/GlyphRunTests.cs index 4eddfd44f6..b96b1c1a65 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/GlyphRunTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/GlyphRunTests.cs @@ -175,6 +175,22 @@ namespace Avalonia.Skia.UnitTests.Media } } + [Fact] + public void GlyphRun_With_Leading_Space_Has_Correct_InBounds() + { + using (Start()) + { + var typeface = new Typeface("resm:Avalonia.Skia.UnitTests.Assets?assembly=Avalonia.Skia.UnitTests#Inter"); + var options = new TextShaperOptions(typeface.GlyphTypeface, 14); + var shapedBuffer = TextShaper.Current.ShapeText(" ", options); + + var glyphRun1 = CreateGlyphRun(shapedBuffer); + var bounds = glyphRun1.InkBounds; + + Assert.Equal(shapedBuffer[0].GlyphAdvance, bounds.Width); + } + } + private static List BuildRects(GlyphRun glyphRun) { var height = glyphRun.Bounds.Height;