Bug 1276831 - part1 : VTTCue's position should be double or auto keyword. r=rillian,smaug

MozReview-Commit-ID: 5zsEMxbwuEH

--HG--
extra : rebase_source : 85bef3d55b06509e5178e1709a752096d0ed402a
This commit is contained in:
Alastor Wu 2016-06-15 16:51:17 +01:00
Родитель e6988379ea
Коммит 360c0c9da2
3 изменённых файлов: 42 добавлений и 13 удалений

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

@ -33,7 +33,7 @@ StaticRefPtr<nsIWebVTTParserWrapper> TextTrackCue::sParserWrapper;
void
TextTrackCue::SetDefaultCueSettings()
{
mPosition = 50;
mPositionIsAutoKeyword = true;
mPositionAlign = PositionAlignSetting::Center;
mSize = 100.0;
mPauseOnExit = false;
@ -204,6 +204,20 @@ TextTrackCue::ComputedLine()
return (-1.0) * showingTracksNum;
}
double
TextTrackCue::ComputedPosition()
{
// See spec https://w3c.github.io/webvtt/#cue-computed-position
if (!mPositionIsAutoKeyword) {
return mPosition;
} else if (mAlign == AlignSetting::Left) {
return 0.0;
} else if (mAlign == AlignSetting::Right) {
return 100.0;
}
return 50.0;
}
PositionAlignSetting
TextTrackCue::ComputedPositionAlign()
{

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

@ -190,24 +190,35 @@ public:
mLineAlign = aLineAlign;
}
int32_t Position() const
void GetPosition(OwningDoubleOrAutoKeyword& aPosition) const
{
return mPosition;
}
void SetPosition(int32_t aPosition, ErrorResult& aRv)
{
if (mPosition == aPosition) {
if (mPositionIsAutoKeyword) {
aPosition.SetAsAutoKeyword() = AutoKeyword::Auto;
return;
}
aPosition.SetAsDouble() = mPosition;
}
if (aPosition > 100 || aPosition < 0){
void SetPosition(const DoubleOrAutoKeyword& aPosition, ErrorResult& aRv)
{
if (!aPosition.IsAutoKeyword() &&
(aPosition.GetAsDouble() > 100.0 || aPosition.GetAsDouble() < 0.0)){
aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
return;
}
mReset = true;
mPosition = aPosition;
if (aPosition.IsDouble() &&
(mPositionIsAutoKeyword || (aPosition.GetAsDouble() != mPosition))) {
mPositionIsAutoKeyword = false;
mPosition = aPosition.GetAsDouble();
mReset = true;
return;
}
if (aPosition.IsAutoKeyword() && !mPositionIsAutoKeyword) {
mPositionIsAutoKeyword = true;
mReset = true;
}
}
PositionAlignSetting PositionAlign() const
@ -300,6 +311,7 @@ public:
}
double ComputedLine();
double ComputedPosition();
PositionAlignSetting ComputedPositionAlign();
// Helper functions for implementation.
@ -365,7 +377,8 @@ private:
RefPtr<TextTrack> mTrack;
RefPtr<HTMLTrackElement> mTrackElement;
nsString mId;
int32_t mPosition;
double mPosition;
bool mPositionIsAutoKeyword;
PositionAlignSetting mPositionAlign;
double mSize;
bool mPauseOnExit;

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

@ -47,7 +47,7 @@ interface VTTCue : TextTrackCue {
[SetterThrows]
attribute LineAlignSetting lineAlign;
[SetterThrows]
attribute long position;
attribute (double or AutoKeyword) position;
[SetterThrows]
attribute PositionAlignSetting positionAlign;
[SetterThrows]
@ -66,5 +66,7 @@ partial interface VTTCue {
[ChromeOnly]
readonly attribute double computedLine;
[ChromeOnly]
readonly attribute double computedPosition;
[ChromeOnly]
readonly attribute PositionAlignSetting computedPositionAlign;
};