зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
88dcb17147
Коммит
d5695bf69c
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче