Fix top/bottom to adjust fallback ascent/descent.

The fallback ascent/descent can be larger than default font top/bottom
height. Not to clip the bottom of the view, adjust the top/bottom with
fallback ascent/descent.

Bug: 210163467
Test: atest StaticLayoutFallbackLineSpacingTest
Change-Id: Ifbf64f6d281d3324a926a6f0b45941824d499179
This commit is contained in:
Seigo Nonaka
2021-12-10 16:27:10 -08:00
parent 5bb7a510ef
commit d2980207d2

View File

@@ -874,6 +874,18 @@ public class StaticLayout extends Layout {
? Math.max(fmDescent, Math.round(descents[breakIndex]))
: fmDescent;
// The fallback ascent/descent may be larger than top/bottom of the default font
// metrics. Adjust top/bottom with ascent/descent for avoiding unexpected
// clipping.
if (fallbackLineSpacing) {
if (ascent < fmTop) {
fmTop = ascent;
}
if (descent > fmBottom) {
fmBottom = descent;
}
}
v = out(source, here, endPos,
ascent, descent, fmTop, fmBottom,
v, spacingmult, spacingadd, chooseHt, chooseHtv, fm,