diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java index 12fd726527..1df9d754ac 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/WebViewSubtitleOutput.java @@ -39,9 +39,6 @@ import java.util.List; * *
This is useful for subtitle styling not supported by Android's native text libraries such as * vertical text. - * - *
NOTE: This is currently extremely experimental and doesn't support most {@link Cue} styling - * properties. */ /* package */ final class WebViewSubtitleOutput extends FrameLayout implements SubtitleView.Output { @@ -136,9 +133,11 @@ import java.util.List; + "right:0;" + "color:%s;" + "font-size:%s;" + + "text-shadow:%s;" + "'>", HtmlUtils.toCssRgba(style.foregroundColor), - convertTextSizeToCss(defaultTextSizeType, defaultTextSize))); + convertTextSizeToCss(defaultTextSizeType, defaultTextSize), + convertCaptionStyleToCssTextShadow(style))); String backgroundColorCss = HtmlUtils.toCssRgba(style.backgroundColor); @@ -282,6 +281,28 @@ import java.util.List; return Util.formatInvariant("%.2fpx", sizeDp); } + private static String convertCaptionStyleToCssTextShadow(CaptionStyleCompat style) { + switch (style.edgeType) { + case CaptionStyleCompat.EDGE_TYPE_DEPRESSED: + return Util.formatInvariant( + "-0.05em -0.05em 0.15em %s", HtmlUtils.toCssRgba(style.edgeColor)); + case CaptionStyleCompat.EDGE_TYPE_DROP_SHADOW: + return Util.formatInvariant("0.1em 0.12em 0.15em %s", HtmlUtils.toCssRgba(style.edgeColor)); + case CaptionStyleCompat.EDGE_TYPE_OUTLINE: + // -webkit-text-stroke makes the underlying text appear too narrow, so we 'fake' an edge + // outline using 4 text-shadows each offset by 1px in different directions. + return Util.formatInvariant( + "1px 1px 0 %1$s, 1px -1px 0 %1$s, -1px 1px 0 %1$s, -1px -1px 0 %1$s", + HtmlUtils.toCssRgba(style.edgeColor)); + case CaptionStyleCompat.EDGE_TYPE_RAISED: + return Util.formatInvariant( + "0.06em 0.08em 0.15em %s", HtmlUtils.toCssRgba(style.edgeColor)); + case CaptionStyleCompat.EDGE_TYPE_NONE: + default: + return "unset"; + } + } + private static String convertVerticalTypeToCss(@Cue.VerticalType int verticalType) { switch (verticalType) { case Cue.VERTICAL_TYPE_LR: