mirror of
https://github.com/androidx/media.git
synced 2025-05-14 11:09:53 +08:00
Fix bug in TTML inherited text alignment
Fix bug where child does not correctly inherit ancestor's text alignment setting. Make it so that alignment is only applied on a P node. https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-textAlign
This commit is contained in:
parent
1d96d6b6b0
commit
5ef0ba4171
@ -409,17 +409,21 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
if (resolvedStyle != null) {
|
||||
TtmlRenderUtil.applyStylesToSpan(
|
||||
text, start, end, resolvedStyle, parent, globalStyles, verticalType);
|
||||
if (resolvedStyle.getShearPercentage() != TtmlStyle.UNSPECIFIED_SHEAR && TAG_P.equals(tag)) {
|
||||
// Shear style should only be applied to P nodes
|
||||
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
|
||||
// The spec doesn't specify the coordinate system to use for block shear
|
||||
// however the spec shows examples of how different values are expected to be rendered.
|
||||
// See: https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
|
||||
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-fontShear
|
||||
// This maps the shear percentage to shear angle in graphics coordinates
|
||||
regionOutput.setShearDegrees((resolvedStyle.getShearPercentage() * -90) / 100);
|
||||
if (TAG_P.equals(tag)) {
|
||||
if (resolvedStyle.getShearPercentage() != TtmlStyle.UNSPECIFIED_SHEAR) {
|
||||
// Shear style should only be applied to P nodes
|
||||
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
|
||||
// The spec doesn't specify the coordinate system to use for block shear
|
||||
// however the spec shows examples of how different values are expected to be rendered.
|
||||
// See: https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
|
||||
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-fontShear
|
||||
// This maps the shear percentage to shear angle in graphics coordinates
|
||||
regionOutput.setShearDegrees((resolvedStyle.getShearPercentage() * -90) / 100);
|
||||
}
|
||||
if (resolvedStyle.getTextAlign() != null) {
|
||||
regionOutput.setTextAlignment(resolvedStyle.getTextAlign());
|
||||
}
|
||||
}
|
||||
regionOutput.setTextAlignment(resolvedStyle.getTextAlign());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -607,6 +607,14 @@ public final class TtmlDecoderTest {
|
||||
Cue seventhCue = getOnlyCueAtTimeUs(subtitle, 70_000_000);
|
||||
assertThat(seventhCue.text.toString()).isEqualTo("No textAlign property");
|
||||
assertThat(seventhCue.textAlignment).isNull();
|
||||
|
||||
Cue eighthCue = getOnlyCueAtTimeUs(subtitle, 80_000_000);
|
||||
assertThat(eighthCue.text.toString()).isEqualTo("Ancestor start alignment");
|
||||
assertThat(eighthCue.textAlignment).isEqualTo(Layout.Alignment.ALIGN_NORMAL);
|
||||
|
||||
Cue ninthCue = getOnlyCueAtTimeUs(subtitle, 90_000_000);
|
||||
assertThat(ninthCue.text.toString()).isEqualTo("Not a P node");
|
||||
assertThat(ninthCue.textAlignment).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -24,5 +24,11 @@
|
||||
<div>
|
||||
<p begin="70s" end="78s">No textAlign property</p>
|
||||
</div>
|
||||
<div>
|
||||
<p begin="80s" end="88s" tts:textAlign="start"><span tts:fontSize="50%">Ancestor start</span> alignment</p>
|
||||
</div>
|
||||
<div>
|
||||
<p begin="90s" end="98s"><span tts:textAlign="start">Not a P node</span></p>
|
||||
</div>
|
||||
</body>
|
||||
</tt>
|
||||
|
Loading…
x
Reference in New Issue
Block a user