Add vertical text support to SubtitleWebView

PiperOrigin-RevId: 304186326
This commit is contained in:
ibaker 2020-04-01 16:06:47 +01:00 committed by Oliver Woodman
parent eb65f5e20a
commit 262f19aa63

View File

@ -212,6 +212,19 @@ import java.util.List;
String textAlign = convertAlignmentToCss(cue.textAlignment); String textAlign = convertAlignmentToCss(cue.textAlignment);
String writingMode = convertVerticalTypeToCss(cue.verticalType);
// All measurements are done orthogonally for vertical text (i.e. from left of screen instead
// of top, or vice versa). So flip the position & translation values.
if (cue.verticalType == Cue.VERTICAL_TYPE_LR || cue.verticalType == Cue.VERTICAL_TYPE_RL) {
float tmpFloat = horizontalPositionPercent;
horizontalPositionPercent = verticalPositionPercent;
verticalPositionPercent = tmpFloat;
int tmpInt = horizontalTranslatePercent;
horizontalTranslatePercent = verticalTranslatePercent;
verticalTranslatePercent = tmpInt;
}
html.append( html.append(
Util.formatInvariant( Util.formatInvariant(
"<div style=\"" "<div style=\""
@ -220,12 +233,14 @@ import java.util.List;
+ "top:%.2f%%;" + "top:%.2f%%;"
+ "width:%s;" + "width:%s;"
+ "text-align:%s;" + "text-align:%s;"
+ "writing-mode:%s;"
+ "transform:translate(%s%%,%s%%);" + "transform:translate(%s%%,%s%%);"
+ "\">", + "\">",
horizontalPositionPercent, horizontalPositionPercent,
verticalPositionPercent, verticalPositionPercent,
width, width,
textAlign, textAlign,
writingMode,
horizontalTranslatePercent, horizontalTranslatePercent,
verticalTranslatePercent)) verticalTranslatePercent))
.append(SpannedToHtmlConverter.convert(cue.text)) .append(SpannedToHtmlConverter.convert(cue.text))
@ -241,6 +256,18 @@ import java.util.List;
"base64"); "base64");
} }
private String convertVerticalTypeToCss(@Cue.VerticalType int verticalType) {
switch (verticalType) {
case Cue.VERTICAL_TYPE_LR:
return "vertical-lr";
case Cue.VERTICAL_TYPE_RL:
return "vertical-rl";
case Cue.TYPE_UNSET:
default:
return "horizontal-tb";
}
}
private String convertAlignmentToCss(@Nullable Layout.Alignment alignment) { private String convertAlignmentToCss(@Nullable Layout.Alignment alignment) {
if (alignment == null) { if (alignment == null) {
return "unset"; return "unset";