Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1285)

Unified Diff: Source/core/html/track/TextTrackCue.cpp

Issue 25155003: Fix cue rendering test and include support for left/right alignment. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/track/TextTrackCue.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/track/TextTrackCue.cpp
diff --git a/Source/core/html/track/TextTrackCue.cpp b/Source/core/html/track/TextTrackCue.cpp
index f80d78cbc5f8fc8bff2c3be130ea49516817f4c0..b1c908787384c5642727799feb1506ed47528e76 100644
--- a/Source/core/html/track/TextTrackCue.cpp
+++ b/Source/core/html/track/TextTrackCue.cpp
@@ -73,6 +73,18 @@ static const String& endKeyword()
return end;
}
+static const String& leftKeyword()
+{
+ DEFINE_STATIC_LOCAL(const String, left, ("left"));
+ return left;
+}
+
+static const String& rightKeyword()
+{
+ DEFINE_STATIC_LOCAL(const String, right, ("right"));
+ return right;
+}
+
static const String& horizontalKeyword()
{
return emptyString();
@@ -153,8 +165,12 @@ void TextTrackCueBox::applyCSSProperties(const IntSize&)
setInlineStyleProperty(CSSPropertyTextAlign, CSSValueStart);
else if (m_cue->align() == endKeyword())
setInlineStyleProperty(CSSPropertyTextAlign, CSSValueEnd);
- else
+ else if (m_cue->align() == middleKeyword())
philipj_slow 2013/10/03 09:04:43 The implementation of TextTrackCue::align() alread
vcarbune.chromium 2013/10/04 13:30:26 I added the map and a getCSSAlignment method on Te
setInlineStyleProperty(CSSPropertyTextAlign, CSSValueCenter);
+ else if (m_cue->align() == leftKeyword())
+ setInlineStyleProperty(CSSPropertyTextAlign, CSSValueLeft);
+ else if (m_cue->align() == rightKeyword())
+ setInlineStyleProperty(CSSPropertyTextAlign, CSSValueRight);
if (!m_cue->snapToLines()) {
// 10.13.1 Set up x and y:
@@ -435,6 +451,10 @@ const String& TextTrackCue::align() const
return middleKeyword();
case End:
return endKeyword();
+ case Left:
+ return leftKeyword();
+ case Right:
+ return rightKeyword();
default:
ASSERT_NOT_REACHED();
return emptyString();
@@ -456,6 +476,10 @@ void TextTrackCue::setAlign(const String& value, ExceptionState& es)
alignment = Middle;
else if (value == endKeyword())
alignment = End;
+ else if (value == leftKeyword())
+ alignment = Left;
+ else if (value == rightKeyword())
+ alignment = Right;
else
es.throwUninformativeAndGenericDOMException(SyntaxError);
@@ -650,6 +674,10 @@ void TextTrackCue::determineTextDirection()
void TextTrackCue::calculateDisplayParameters()
{
+ // A text track cue has a text track cue computed line position whose value
+ // is defined in terms of the other aspects of the cue.
+ m_computedLinePosition = calculateComputedLinePosition();
acolwell GONE FROM CHROMIUM 2013/10/02 16:19:37 Does this really need to be moved to the top of th
philipj_slow 2013/10/03 09:04:43 In <http://dev.w3.org/html5/webvtt/> it's used in
vcarbune.chromium 2013/10/04 13:30:26 I moved it right before the point where it's used.
+
// Steps 10.2, 10.3
determineTextDirection();
@@ -665,13 +693,15 @@ void TextTrackCue::calculateDisplayParameters()
int maximumSize = m_textPosition;
if ((m_writingDirection == Horizontal && m_cueAlignment == Start && m_displayDirection == CSSValueLtr)
|| (m_writingDirection == Horizontal && m_cueAlignment == End && m_displayDirection == CSSValueRtl)
- || (m_writingDirection == VerticalGrowingLeft && m_cueAlignment == Start)
- || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Start)) {
+ || (m_writingDirection == Horizontal && m_cueAlignment == Left)
+ || (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == Start || m_cueAlignment == Left))
+ || (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == Start || m_cueAlignment == Left))) {
maximumSize = 100 - m_textPosition;
} else if ((m_writingDirection == Horizontal && m_cueAlignment == End && m_displayDirection == CSSValueLtr)
|| (m_writingDirection == Horizontal && m_cueAlignment == Start && m_displayDirection == CSSValueRtl)
- || (m_writingDirection == VerticalGrowingLeft && m_cueAlignment == End)
- || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == End)) {
+ || (m_writingDirection == Horizontal && m_cueAlignment == Right)
+ || (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == End || m_cueAlignment == Right))
+ || (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == End || m_cueAlignment == Right))) {
maximumSize = m_textPosition;
} else if (m_cueAlignment == Middle) {
maximumSize = m_textPosition <= 50 ? m_textPosition : (100 - m_textPosition);
@@ -695,28 +725,32 @@ void TextTrackCue::calculateDisplayParameters()
m_displayPosition.first = 100 - m_textPosition;
else
m_displayPosition.first = m_textPosition - m_displaySize;
+ } else if (m_cueAlignment == Left) {
+ if (m_displayDirection == CSSValueLtr)
+ m_displayPosition.first = m_textPosition;
+ else
+ m_displayPosition.first = 100 - m_textPosition;
+ } else if (m_cueAlignment == Right) {
+ if (m_displayDirection == CSSValueLtr)
+ m_displayPosition.first = m_textPosition - m_displaySize;
+ else
+ m_displayPosition.first = 100 - m_textPosition - m_displaySize;
+ } else if (m_cueAlignment == Middle) {
+ if (m_displayDirection == CSSValueLtr)
+ m_displayPosition.first = m_textPosition - m_displaySize / 2;
+ else
+ m_displayPosition.first = 100 - m_textPosition - m_displaySize / 2;
}
+ } else {
+ // Cases for m_writingDirection being VerticalGrowing{Left|Right}
acolwell GONE FROM CHROMIUM 2013/10/02 16:19:37 nit: Please use switch(m_cueAlignment) here and ab
vcarbune.chromium 2013/10/04 13:30:26 Done. I had to add a default case though because o
+ if (m_cueAlignment == Start || m_cueAlignment == Left)
+ m_displayPosition.second = m_textPosition;
+ else if (m_cueAlignment == End || m_cueAlignment == Right)
+ m_displayPosition.second = m_textPosition - m_displaySize;
+ else if (m_cueAlignment == Middle)
+ m_displayPosition.second = m_textPosition - m_displaySize / 2;
}
- if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == Start)
- || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Start)) {
- m_displayPosition.second = m_textPosition;
- } else if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == End)
- || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == End)) {
- m_displayPosition.second = 100 - m_textPosition;
- }
-
- if (m_writingDirection == Horizontal && m_cueAlignment == Middle) {
- if (m_displayDirection == CSSValueLtr)
- m_displayPosition.first = m_textPosition - m_displaySize / 2;
- else
- m_displayPosition.first = 100 - m_textPosition - m_displaySize / 2;
- }
-
- if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == Middle)
- || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Middle))
- m_displayPosition.second = m_textPosition - m_displaySize / 2;
-
// 10.9 Determine the value of whichever of x-position or y-position is not
philipj_slow 2013/10/03 09:04:43 This is step 10.8 in <http://dev.w3.org/html5/webv
vcarbune.chromium 2013/10/04 13:30:26 Looking at the dates when this was submitted, look
philipj_slow 2013/10/07 08:52:31 For HTML there's <https://github.com/whatwg/html-m
vcarbune.chromium 2013/10/07 09:37:28 Thanks for the explanation, I think this can be ea
// yet calculated for cue as per the appropriate rules from the following
// list:
@@ -732,10 +766,6 @@ void TextTrackCue::calculateDisplayParameters()
if (!m_snapToLines && (m_writingDirection == VerticalGrowingLeft || m_writingDirection == VerticalGrowingRight))
m_displayPosition.first = m_computedLinePosition;
-
- // A text track cue has a text track cue computed line position whose value
- // is defined in terms of the other aspects of the cue.
- m_computedLinePosition = calculateComputedLinePosition();
}
void TextTrackCue::markFutureAndPastNodes(ContainerNode* root, double previousTimestamp, double movieTime)
@@ -1094,6 +1124,14 @@ void TextTrackCue::setCueSettings(const String& input)
// 3. If value is a case-sensitive match for the string "end", then let cue's text track cue alignment be end alignment.
else if (cueAlignment == endKeyword())
m_cueAlignment = End;
+
+ // 4. If value is a case-sensitive match for the string "left", then let cue's text track cue alignment be left alignment.
+ else if (cueAlignment == leftKeyword())
+ m_cueAlignment = Left;
+
+ // 5. If value is a case-sensitive match for the string "right", then let cue's text track cue alignment be right alignment.
+ else if (cueAlignment == rightKeyword())
+ m_cueAlignment = Right;
}
break;
#if ENABLE(WEBVTT_REGIONS)
« no previous file with comments | « Source/core/html/track/TextTrackCue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698