From e55dfcd1a284cac46a63ea9e010b854c19ce8553 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 5 Aug 2024 18:19:38 +0200 Subject: [PATCH] Fixes ShapedTextRun background rendering (#16594) * Add failing test * Fix ShapedTextRun background rendering --- .../Media/TextFormatting/ShapedTextRun.cs | 2 +- .../Controls/TextBlockTests.cs | 31 ++++++++++++++++++ ...ould_Draw_Run_With_Background.expected.png | Bin 0 -> 947 bytes ...ould_Draw_Run_With_Background.expected.png | Bin 0 -> 809 bytes 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/TestFiles/Direct2D1/Controls/TextBlock/Should_Draw_Run_With_Background.expected.png create mode 100644 tests/TestFiles/Skia/Controls/TextBlock/Should_Draw_Run_With_Background.expected.png diff --git a/src/Avalonia.Base/Media/TextFormatting/ShapedTextRun.cs b/src/Avalonia.Base/Media/TextFormatting/ShapedTextRun.cs index 05f3f84d45..caaaa00780 100644 --- a/src/Avalonia.Base/Media/TextFormatting/ShapedTextRun.cs +++ b/src/Avalonia.Base/Media/TextFormatting/ShapedTextRun.cs @@ -64,7 +64,7 @@ namespace Avalonia.Media.TextFormatting if (Properties.BackgroundBrush != null) { - drawingContext.DrawRectangle(Properties.BackgroundBrush, null, GlyphRun.Bounds.Translate(new Vector(0, -Baseline))); + drawingContext.DrawRectangle(Properties.BackgroundBrush, null, GlyphRun.Bounds); } drawingContext.DrawGlyphRun(Properties.ForegroundBrush, GlyphRun); diff --git a/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs b/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs index 1a61a10919..14c56299e3 100644 --- a/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs +++ b/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs @@ -1,6 +1,7 @@ using System.Net; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Controls.Documents; using Avalonia.Layout; using Avalonia.Media; using Xunit; @@ -145,5 +146,35 @@ namespace Avalonia.Direct2D1.RenderTests.Controls await RenderToFile(target); CompareImages(); } + + [Win32Fact("Has text")] + public async Task Should_Draw_Run_With_Background() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 50, + Child = new TextBlock + { + FontFamily = new FontFamily("Courier New"), + FontSize = 12, + Foreground = Brushes.Black, + VerticalAlignment = VerticalAlignment.Top, + TextWrapping = TextWrapping.NoWrap, + Inlines = new InlineCollection + { + new Run + { + Text = "Neque porro quisquam", + Background = Brushes.Red + } + } + } + }; + + await RenderToFile(target); + CompareImages(); + } } } diff --git a/tests/TestFiles/Direct2D1/Controls/TextBlock/Should_Draw_Run_With_Background.expected.png b/tests/TestFiles/Direct2D1/Controls/TextBlock/Should_Draw_Run_With_Background.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6ba9f4d3f9e8df26ced02f62717c43ea3e8935 GIT binary patch literal 947 zcmeAS@N?(olHy`uVBq!ia0vp^CxF<9gAGVZ22Obhq!^2X+?^QKos)S9*vq6+IoKFI~OG2r?I@PU{d^F{}lUMY_snsAD?;I zSwks%My+F>*+Zs%UstZPzU@+VG4CPE!Os)wkH4{d-gVUb)83cG^EX#z%9+N#2v)kh zg?C#<{I0K}ud^<$epX)tR4X&G=3d+Q{#S}zu)0T%(yM1|3|l;J->9=}d8z#Eb8yV7#grYdXk=ZWqr1RpMU4R?~(IY?eY`+n)UyN?=Cxer&C63 zm$vqQ{F6PW$}|1V5y|3PfyOYaNzzUk9H~UoPI#x!GgtGsCcV zi&x|wI(4NqLG~>3-^B9hbvzF*-AJu9J9s+a`rFdWA~`Q|4;UKlyJ2(Xbj_WcKl9^k za{M?F8kfJDrIWGux1Hpn(imx{1I&4=tdHMSWchXenDUzBwW+@krLB3*I7jYGVqfj` z^uCYf*VVG-SNxqbujlnYty|7@wKM-c`#DEr$L4Jd!ryIt{qD}n=2y1co+YoI##??R z?oPCD(6kcKpT&pLwp!mH=j|2IHv%8@x$f=0 zw{!ZTz%}P3{vBVHgVeFnCg%^M-BEGtu$gIpTz1{uH z!(ZU%|A=3lM%F*($9~W1=z4SJ<+|O*F0M!kodEO6jmxF`8Gqe#;dh*H{TMLgF?hQA KxvXp+aoTZS|tR(^W$%4}Jl=qSXSK6B$)k9<7WoB8|ZCy8R8jdNv-H+Zd#@k-U3Ix|E}QFrMko~MTK zv&ssq^FBp>6}WX;1J_u~znF zI`;Z@@6P0icYc1HY+;u6?vwX*z4GVwfBxLNpPygd8+WPRv#K;ze$}-2kLNxGU-DjY z+oQ@XcfRV`?7pw-{#yUty(%?Uw%9Xx^W63bGsX2Tb3?tP+Mi6HxKp$H__v3*Y}+;! z-#T+%Gg;P7HK`^$^toYG_Ky7Od23ge729R+I3IoO1(T%rtQQ}ih;wbXn|$k((C;cm08hhORrtscxPSV-+fPCJ)IQGJim(lWX%5HjkmV$ls~_IW4~;&)-|j5^108B z%P+RK-)8eQF7dUVr17)j$>)9kEA@O1W&ZD6d{_AH6Y)p4e*45K#P(fGeWm=Z@A#hA z)4yz9XBznJ+>~EZ#cNe2zpDAVYwDNC&&iW(FO^hGyz`ay(Ep@`+2w!R59OQQ`t#0) ki|6M3eax^Vhm-#Lm-%mVlSD;*;X05SPgg&ebxsLQ00u;cP5=M^ literal 0 HcmV?d00001