Bug 1544455 - part1 : check the base direction of cue text in 'ComputedPositionAlign()'. r=heycam

According to the spec [1], when text alignment is `start` or `end`, we have to check the base direction of the cue text in order to decide the position alignment.

[1] https://www.w3.org/TR/webvtt1/#cue-computed-position-alignment

Differential Revision: https://phabricator.services.mozilla.com/D35270

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Alastor Wu 2019-07-03 00:39:50 +00:00
Родитель 88dcb17147
Коммит d5695bf69c
2 изменённых файлов: 17 добавлений и 0 удалений

Просмотреть файл

@ -9,6 +9,7 @@
#include "mozilla/dom/TextTrackRegion.h"
#include "nsComponentManagerUtils.h"
#include "mozilla/ClearOnShutdown.h"
#include "unicode/ubidi.h"
extern mozilla::LazyLogModule gTextTrackLog;
@ -205,10 +206,24 @@ PositionAlignSetting TextTrackCue::ComputedPositionAlign() {
return PositionAlignSetting::Line_left;
} else if (mAlign == AlignSetting::Right) {
return PositionAlignSetting::Line_right;
} else if (mAlign == AlignSetting::Start) {
return IsTextBaseDirectionLTR() ? PositionAlignSetting::Line_left
: PositionAlignSetting::Line_right;
} else if (mAlign == AlignSetting::End) {
return IsTextBaseDirectionLTR() ? PositionAlignSetting::Line_right
: PositionAlignSetting::Line_left;
}
return PositionAlignSetting::Center;
}
bool TextTrackCue::IsTextBaseDirectionLTR() const {
// The returned result by `ubidi_getBaseDirection` might be `neutral` if the
// text only contains netural charaters. In this case, we would treat its
// base direction as LTR.
return ubidi_getBaseDirection(mText.BeginReading(), mText.Length()) !=
UBIDI_RTL;
}
void TextTrackCue::NotifyDisplayStatesChanged() {
if (!mReset) {
return;

Просмотреть файл

@ -298,6 +298,8 @@ class TextTrackCue final : public DOMEventTargetHelper {
void SetDefaultCueSettings();
nsresult StashDocument();
bool IsTextBaseDirectionLTR() const;
RefPtr<Document> mDocument;
nsString mText;
double mStartTime;