Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 #include "core/rendering/RenderTextTrackCue.h" | 48 #include "core/rendering/RenderTextTrackCue.h" |
| 49 #include "wtf/MathExtras.h" | 49 #include "wtf/MathExtras.h" |
| 50 #include "wtf/text/StringBuilder.h" | 50 #include "wtf/text/StringBuilder.h" |
| 51 | 51 |
| 52 namespace WebCore { | 52 namespace WebCore { |
| 53 | 53 |
| 54 static const int invalidCueIndex = -1; | 54 static const int invalidCueIndex = -1; |
| 55 static const int undefinedPosition = -1; | 55 static const int undefinedPosition = -1; |
| 56 static const int autoSize = 0; | 56 static const int autoSize = 0; |
| 57 | 57 |
| 58 static const CSSValueID displayWritingModeMap[TextTrackCue::NumberOfWritingDirec tions] = { | |
|
adamk
2013/10/08 19:46:10
Putting NumberOfWritingDirections inside the brack
vcarbune.chromium
2013/10/08 22:20:32
Nice, I didn't use it before. Thanks.
| |
| 59 CSSValueHorizontalTb, CSSValueVerticalRl, CSSValueVerticalLr | |
| 60 }; | |
| 61 | |
| 62 static const CSSValueID displayAlignmentMap[TextTrackCue::NumberOfAlignments] = { | |
|
adamk
2013/10/08 19:46:10
Same here as above.
vcarbune.chromium
2013/10/08 22:20:32
Done.
| |
| 63 CSSValueStart, CSSValueCenter, CSSValueEnd, CSSValueLeft, CSSValueRight | |
| 64 }; | |
| 65 | |
| 58 static const String& startKeyword() | 66 static const String& startKeyword() |
| 59 { | 67 { |
| 60 DEFINE_STATIC_LOCAL(const String, start, ("start")); | 68 DEFINE_STATIC_LOCAL(const String, start, ("start")); |
| 61 return start; | 69 return start; |
| 62 } | 70 } |
| 63 | 71 |
| 64 static const String& middleKeyword() | 72 static const String& middleKeyword() |
| 65 { | 73 { |
| 66 DEFINE_STATIC_LOCAL(const String, middle, ("middle")); | 74 DEFINE_STATIC_LOCAL(const String, middle, ("middle")); |
| 67 return middle; | 75 return middle; |
| 68 } | 76 } |
| 69 | 77 |
| 70 static const String& endKeyword() | 78 static const String& endKeyword() |
| 71 { | 79 { |
| 72 DEFINE_STATIC_LOCAL(const String, end, ("end")); | 80 DEFINE_STATIC_LOCAL(const String, end, ("end")); |
| 73 return end; | 81 return end; |
| 74 } | 82 } |
| 75 | 83 |
| 84 static const String& leftKeyword() | |
| 85 { | |
| 86 DEFINE_STATIC_LOCAL(const String, left, ("left")); | |
| 87 return left; | |
| 88 } | |
| 89 | |
| 90 static const String& rightKeyword() | |
| 91 { | |
| 92 DEFINE_STATIC_LOCAL(const String, right, ("right")); | |
| 93 return right; | |
| 94 } | |
| 95 | |
| 76 static const String& horizontalKeyword() | 96 static const String& horizontalKeyword() |
| 77 { | 97 { |
| 78 return emptyString(); | 98 return emptyString(); |
| 79 } | 99 } |
| 80 | 100 |
| 81 static const String& verticalGrowingLeftKeyword() | 101 static const String& verticalGrowingLeftKeyword() |
| 82 { | 102 { |
| 83 DEFINE_STATIC_LOCAL(const String, verticalrl, ("rl")); | 103 DEFINE_STATIC_LOCAL(const String, verticalrl, ("rl")); |
| 84 return verticalrl; | 104 return verticalrl; |
| 85 } | 105 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 setInlineStyleProperty(CSSPropertyHeight, CSSValueAuto); | 162 setInlineStyleProperty(CSSPropertyHeight, CSSValueAuto); |
| 143 } else { | 163 } else { |
| 144 setInlineStyleProperty(CSSPropertyWidth, CSSValueAuto); | 164 setInlineStyleProperty(CSSPropertyWidth, CSSValueAuto); |
| 145 setInlineStyleProperty(CSSPropertyHeight, static_cast<double>(m_cue->get CSSSize()), CSSPrimitiveValue::CSS_PERCENTAGE); | 165 setInlineStyleProperty(CSSPropertyHeight, static_cast<double>(m_cue->get CSSSize()), CSSPrimitiveValue::CSS_PERCENTAGE); |
| 146 } | 166 } |
| 147 | 167 |
| 148 // The 'text-align' property on the (root) List of WebVTT Node Objects must | 168 // The 'text-align' property on the (root) List of WebVTT Node Objects must |
| 149 // be set to the value in the second cell of the row of the table below | 169 // be set to the value in the second cell of the row of the table below |
| 150 // whose first cell is the value of the corresponding cue's text track cue | 170 // whose first cell is the value of the corresponding cue's text track cue |
| 151 // alignment: | 171 // alignment: |
| 152 if (m_cue->align() == startKeyword()) | 172 setInlineStyleProperty(CSSPropertyTextAlign, m_cue->getCSSAlignment()); |
| 153 setInlineStyleProperty(CSSPropertyTextAlign, CSSValueStart); | |
| 154 else if (m_cue->align() == endKeyword()) | |
| 155 setInlineStyleProperty(CSSPropertyTextAlign, CSSValueEnd); | |
| 156 else | |
| 157 setInlineStyleProperty(CSSPropertyTextAlign, CSSValueCenter); | |
| 158 | 173 |
| 159 if (!m_cue->snapToLines()) { | 174 if (!m_cue->snapToLines()) { |
| 160 // 10.13.1 Set up x and y: | 175 // 10.13.1 Set up x and y: |
| 161 // Note: x and y are set through the CSS left and top above. | 176 // Note: x and y are set through the CSS left and top above. |
| 162 | 177 |
| 163 // 10.13.2 Position the boxes in boxes such that the point x% along the | 178 // 10.13.2 Position the boxes in boxes such that the point x% along the |
| 164 // width of the bounding box of the boxes in boxes is x% of the way | 179 // width of the bounding box of the boxes in boxes is x% of the way |
| 165 // across the width of the video's rendering area, and the point y% | 180 // across the width of the video's rendering area, and the point y% |
| 166 // along the height of the bounding box of the boxes in boxes is y% | 181 // along the height of the bounding box of the boxes in boxes is y% |
| 167 // of the way across the height of the video's rendering area, while | 182 // of the way across the height of the video's rendering area, while |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 , m_scriptExecutionContext(context) | 218 , m_scriptExecutionContext(context) |
| 204 , m_isActive(false) | 219 , m_isActive(false) |
| 205 , m_pauseOnExit(false) | 220 , m_pauseOnExit(false) |
| 206 , m_snapToLines(true) | 221 , m_snapToLines(true) |
| 207 , m_cueBackgroundBox(HTMLDivElement::create(*toDocument(context))) | 222 , m_cueBackgroundBox(HTMLDivElement::create(*toDocument(context))) |
| 208 , m_displayTreeShouldChange(true) | 223 , m_displayTreeShouldChange(true) |
| 209 , m_displayDirection(CSSValueLtr) | 224 , m_displayDirection(CSSValueLtr) |
| 210 { | 225 { |
| 211 ASSERT(m_scriptExecutionContext->isDocument()); | 226 ASSERT(m_scriptExecutionContext->isDocument()); |
| 212 ScriptWrappable::init(this); | 227 ScriptWrappable::init(this); |
| 213 | |
| 214 // 4. If the text track cue writing direction is horizontal, then let | |
| 215 // writing-mode be 'horizontal-tb'. Otherwise, if the text track cue writing | |
| 216 // direction is vertical growing left, then let writing-mode be | |
| 217 // 'vertical-rl'. Otherwise, the text track cue writing direction is | |
| 218 // vertical growing right; let writing-mode be 'vertical-lr'. | |
| 219 m_displayWritingModeMap[Horizontal] = CSSValueHorizontalTb; | |
| 220 m_displayWritingModeMap[VerticalGrowingLeft] = CSSValueVerticalRl; | |
| 221 m_displayWritingModeMap[VerticalGrowingRight] = CSSValueVerticalLr; | |
| 222 } | 228 } |
| 223 | 229 |
| 224 TextTrackCue::~TextTrackCue() | 230 TextTrackCue::~TextTrackCue() |
| 225 { | 231 { |
| 226 displayTreeInternal()->remove(ASSERT_NO_EXCEPTION); | 232 displayTreeInternal()->remove(ASSERT_NO_EXCEPTION); |
| 227 } | 233 } |
| 228 | 234 |
| 229 PassRefPtr<TextTrackCueBox> TextTrackCue::createDisplayTree() | 235 PassRefPtr<TextTrackCueBox> TextTrackCue::createDisplayTree() |
| 230 { | 236 { |
| 231 ASSERT(ownerDocument()); | 237 ASSERT(ownerDocument()); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 428 | 434 |
| 429 const String& TextTrackCue::align() const | 435 const String& TextTrackCue::align() const |
| 430 { | 436 { |
| 431 switch (m_cueAlignment) { | 437 switch (m_cueAlignment) { |
| 432 case Start: | 438 case Start: |
| 433 return startKeyword(); | 439 return startKeyword(); |
| 434 case Middle: | 440 case Middle: |
| 435 return middleKeyword(); | 441 return middleKeyword(); |
| 436 case End: | 442 case End: |
| 437 return endKeyword(); | 443 return endKeyword(); |
| 444 case Left: | |
| 445 return leftKeyword(); | |
| 446 case Right: | |
| 447 return rightKeyword(); | |
| 438 default: | 448 default: |
| 439 ASSERT_NOT_REACHED(); | 449 ASSERT_NOT_REACHED(); |
| 440 return emptyString(); | 450 return emptyString(); |
| 441 } | 451 } |
| 442 } | 452 } |
| 443 | 453 |
| 444 void TextTrackCue::setAlign(const String& value, ExceptionState& es) | 454 void TextTrackCue::setAlign(const String& value, ExceptionState& es) |
| 445 { | 455 { |
| 446 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-ele ment.html#dom-texttrackcue-align | 456 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-ele ment.html#dom-texttrackcue-align |
| 447 // On setting, the text track cue alignment must be set to the value given i n the | 457 // On setting, the text track cue alignment must be set to the value given i n the |
| 448 // first cell of the row in the table above whose second cell is a case-sens itive | 458 // first cell of the row in the table above whose second cell is a case-sens itive |
| 449 // match for the new value, if any. If none of the values match, then the us er | 459 // match for the new value, if any. If none of the values match, then the us er |
| 450 // agent must instead throw a SyntaxError exception. | 460 // agent must instead throw a SyntaxError exception. |
| 451 | 461 |
| 452 CueAlignment alignment = m_cueAlignment; | 462 CueAlignment alignment = m_cueAlignment; |
| 453 if (value == startKeyword()) | 463 if (value == startKeyword()) |
| 454 alignment = Start; | 464 alignment = Start; |
| 455 else if (value == middleKeyword()) | 465 else if (value == middleKeyword()) |
| 456 alignment = Middle; | 466 alignment = Middle; |
| 457 else if (value == endKeyword()) | 467 else if (value == endKeyword()) |
| 458 alignment = End; | 468 alignment = End; |
| 469 else if (value == leftKeyword()) | |
| 470 alignment = Left; | |
| 471 else if (value == rightKeyword()) | |
| 472 alignment = Right; | |
| 459 else | 473 else |
| 460 es.throwUninformativeAndGenericDOMException(SyntaxError); | 474 es.throwUninformativeAndGenericDOMException(SyntaxError); |
| 461 | 475 |
| 462 if (alignment == m_cueAlignment) | 476 if (alignment == m_cueAlignment) |
| 463 return; | 477 return; |
| 464 | 478 |
| 465 cueWillChange(); | 479 cueWillChange(); |
| 466 m_cueAlignment = alignment; | 480 m_cueAlignment = alignment; |
| 467 cueDidChange(); | 481 cueDidChange(); |
| 468 } | 482 } |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 651 void TextTrackCue::calculateDisplayParameters() | 665 void TextTrackCue::calculateDisplayParameters() |
| 652 { | 666 { |
| 653 // Steps 10.2, 10.3 | 667 // Steps 10.2, 10.3 |
| 654 determineTextDirection(); | 668 determineTextDirection(); |
| 655 | 669 |
| 656 // 10.4 If the text track cue writing direction is horizontal, then let | 670 // 10.4 If the text track cue writing direction is horizontal, then let |
| 657 // block-flow be 'tb'. Otherwise, if the text track cue writing direction is | 671 // block-flow be 'tb'. Otherwise, if the text track cue writing direction is |
| 658 // vertical growing left, then let block-flow be 'lr'. Otherwise, the text | 672 // vertical growing left, then let block-flow be 'lr'. Otherwise, the text |
| 659 // track cue writing direction is vertical growing right; let block-flow be | 673 // track cue writing direction is vertical growing right; let block-flow be |
| 660 // 'rl'. | 674 // 'rl'. |
| 661 m_displayWritingMode = m_displayWritingModeMap[m_writingDirection]; | 675 |
| 676 // The above step is done through the writing direction static map. | |
| 662 | 677 |
| 663 // 10.5 Determine the value of maximum size for cue as per the appropriate | 678 // 10.5 Determine the value of maximum size for cue as per the appropriate |
| 664 // rules from the following list: | 679 // rules from the following list: |
| 665 int maximumSize = m_textPosition; | 680 int maximumSize = m_textPosition; |
| 666 if ((m_writingDirection == Horizontal && m_cueAlignment == Start && m_displa yDirection == CSSValueLtr) | 681 if ((m_writingDirection == Horizontal && m_cueAlignment == Start && m_displa yDirection == CSSValueLtr) |
| 667 || (m_writingDirection == Horizontal && m_cueAlignment == End && m_d isplayDirection == CSSValueRtl) | 682 || (m_writingDirection == Horizontal && m_cueAlignment == End && m_d isplayDirection == CSSValueRtl) |
| 668 || (m_writingDirection == VerticalGrowingLeft && m_cueAlignment == S tart) | 683 || (m_writingDirection == Horizontal && m_cueAlignment == Left) |
| 669 || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Start)) { | 684 || (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == Start || m_cueAlignment == Left)) |
| 685 || (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == Start || m_cueAlignment == Left))) { | |
| 670 maximumSize = 100 - m_textPosition; | 686 maximumSize = 100 - m_textPosition; |
| 671 } else if ((m_writingDirection == Horizontal && m_cueAlignment == End && m_d isplayDirection == CSSValueLtr) | 687 } else if ((m_writingDirection == Horizontal && m_cueAlignment == End && m_d isplayDirection == CSSValueLtr) |
| 672 || (m_writingDirection == Horizontal && m_cueAlignment == Start && m _displayDirection == CSSValueRtl) | 688 || (m_writingDirection == Horizontal && m_cueAlignment == Start && m _displayDirection == CSSValueRtl) |
| 673 || (m_writingDirection == VerticalGrowingLeft && m_cueAlignment == E nd) | 689 || (m_writingDirection == Horizontal && m_cueAlignment == Right) |
| 674 || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == End)) { | 690 || (m_writingDirection == VerticalGrowingLeft && (m_cueAlignment == End || m_cueAlignment == Right)) |
| 691 || (m_writingDirection == VerticalGrowingRight && (m_cueAlignment == End || m_cueAlignment == Right))) { | |
| 675 maximumSize = m_textPosition; | 692 maximumSize = m_textPosition; |
| 676 } else if (m_cueAlignment == Middle) { | 693 } else if (m_cueAlignment == Middle) { |
| 677 maximumSize = m_textPosition <= 50 ? m_textPosition : (100 - m_textPosit ion); | 694 maximumSize = m_textPosition <= 50 ? m_textPosition : (100 - m_textPosit ion); |
| 678 maximumSize = maximumSize * 2; | 695 maximumSize = maximumSize * 2; |
| 696 } else { | |
| 697 ASSERT_NOT_REACHED(); | |
| 679 } | 698 } |
| 680 | 699 |
| 681 // 10.6 If the text track cue size is less than maximum size, then let size | 700 // 10.6 If the text track cue size is less than maximum size, then let size |
| 682 // be text track cue size. Otherwise, let size be maximum size. | 701 // be text track cue size. Otherwise, let size be maximum size. |
| 683 m_displaySize = std::min(m_cueSize, maximumSize); | 702 m_displaySize = std::min(m_cueSize, maximumSize); |
| 684 | 703 |
| 704 // FIXME: Understand why step 10.7 is missing (just a copy/paste error?) | |
| 705 // Could be done within a spec implementation check - http://crbug.com/30158 0 | |
| 706 | |
| 685 // 10.8 Determine the value of x-position or y-position for cue as per the | 707 // 10.8 Determine the value of x-position or y-position for cue as per the |
| 686 // appropriate rules from the following list: | 708 // appropriate rules from the following list: |
| 687 if (m_writingDirection == Horizontal) { | 709 if (m_writingDirection == Horizontal) { |
| 688 if (m_cueAlignment == Start) { | 710 switch (m_cueAlignment) { |
| 711 case Start: | |
| 689 if (m_displayDirection == CSSValueLtr) | 712 if (m_displayDirection == CSSValueLtr) |
| 690 m_displayPosition.first = m_textPosition; | 713 m_displayPosition.first = m_textPosition; |
| 691 else | 714 else |
| 692 m_displayPosition.first = 100 - m_textPosition - m_displaySize; | 715 m_displayPosition.first = 100 - m_textPosition - m_displaySize; |
| 693 } else if (m_cueAlignment == End) { | 716 break; |
| 717 case End: | |
| 694 if (m_displayDirection == CSSValueRtl) | 718 if (m_displayDirection == CSSValueRtl) |
| 695 m_displayPosition.first = 100 - m_textPosition; | 719 m_displayPosition.first = 100 - m_textPosition; |
| 696 else | 720 else |
| 697 m_displayPosition.first = m_textPosition - m_displaySize; | 721 m_displayPosition.first = m_textPosition - m_displaySize; |
| 722 break; | |
| 723 case Left: | |
| 724 if (m_displayDirection == CSSValueLtr) | |
| 725 m_displayPosition.first = m_textPosition; | |
| 726 else | |
| 727 m_displayPosition.first = 100 - m_textPosition; | |
| 728 break; | |
| 729 case Right: | |
| 730 if (m_displayDirection == CSSValueLtr) | |
| 731 m_displayPosition.first = m_textPosition - m_displaySize; | |
| 732 else | |
| 733 m_displayPosition.first = 100 - m_textPosition - m_displaySize; | |
| 734 break; | |
| 735 case Middle: | |
| 736 if (m_displayDirection == CSSValueLtr) | |
| 737 m_displayPosition.first = m_textPosition - m_displaySize / 2; | |
| 738 else | |
| 739 m_displayPosition.first = 100 - m_textPosition - m_displaySize / 2; | |
| 740 break; | |
| 741 case NumberOfAlignments: | |
| 742 ASSERT_NOT_REACHED(); | |
| 743 } | |
| 744 } else { | |
| 745 // Cases for m_writingDirection being VerticalGrowing{Left|Right} | |
| 746 switch (m_cueAlignment) { | |
| 747 case Start: | |
| 748 case Left: | |
| 749 m_displayPosition.second = m_textPosition; | |
| 750 break; | |
| 751 case End: | |
| 752 case Right: | |
| 753 m_displayPosition.second = m_textPosition - m_displaySize; | |
| 754 break; | |
| 755 case Middle: | |
| 756 m_displayPosition.second = m_textPosition - m_displaySize / 2; | |
| 757 break; | |
| 758 case NumberOfAlignments: | |
| 759 ASSERT_NOT_REACHED(); | |
| 698 } | 760 } |
| 699 } | 761 } |
| 700 | 762 |
| 701 if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == Start) | 763 // A text track cue has a text track cue computed line position whose value |
| 702 || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Start)) { | 764 // is defined in terms of the other aspects of the cue. |
| 703 m_displayPosition.second = m_textPosition; | 765 m_computedLinePosition = calculateComputedLinePosition(); |
| 704 } else if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == E nd) | |
| 705 || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == End)) { | |
| 706 m_displayPosition.second = 100 - m_textPosition; | |
| 707 } | |
| 708 | |
| 709 if (m_writingDirection == Horizontal && m_cueAlignment == Middle) { | |
| 710 if (m_displayDirection == CSSValueLtr) | |
| 711 m_displayPosition.first = m_textPosition - m_displaySize / 2; | |
| 712 else | |
| 713 m_displayPosition.first = 100 - m_textPosition - m_displaySize / 2; | |
| 714 } | |
| 715 | |
| 716 if ((m_writingDirection == VerticalGrowingLeft && m_cueAlignment == Middle) | |
| 717 || (m_writingDirection == VerticalGrowingRight && m_cueAlignment == Midd le)) | |
| 718 m_displayPosition.second = m_textPosition - m_displaySize / 2; | |
| 719 | 766 |
| 720 // 10.9 Determine the value of whichever of x-position or y-position is not | 767 // 10.9 Determine the value of whichever of x-position or y-position is not |
| 721 // yet calculated for cue as per the appropriate rules from the following | 768 // yet calculated for cue as per the appropriate rules from the following |
| 722 // list: | 769 // list: |
| 723 if (m_snapToLines && m_displayPosition.second == undefinedPosition && m_writ ingDirection == Horizontal) | 770 if (m_snapToLines && m_displayPosition.second == undefinedPosition && m_writ ingDirection == Horizontal) |
| 724 m_displayPosition.second = 0; | 771 m_displayPosition.second = 0; |
| 725 | 772 |
| 726 if (!m_snapToLines && m_displayPosition.second == undefinedPosition && m_wri tingDirection == Horizontal) | 773 if (!m_snapToLines && m_displayPosition.second == undefinedPosition && m_wri tingDirection == Horizontal) |
| 727 m_displayPosition.second = m_computedLinePosition; | 774 m_displayPosition.second = m_computedLinePosition; |
| 728 | 775 |
| 729 if (m_snapToLines && m_displayPosition.first == undefinedPosition | 776 if (m_snapToLines && m_displayPosition.first == undefinedPosition |
| 730 && (m_writingDirection == VerticalGrowingLeft || m_writingDirection == VerticalGrowingRight)) | 777 && (m_writingDirection == VerticalGrowingLeft || m_writingDirection == VerticalGrowingRight)) |
| 731 m_displayPosition.first = 0; | 778 m_displayPosition.first = 0; |
| 732 | 779 |
| 733 if (!m_snapToLines && (m_writingDirection == VerticalGrowingLeft || m_writin gDirection == VerticalGrowingRight)) | 780 if (!m_snapToLines && (m_writingDirection == VerticalGrowingLeft || m_writin gDirection == VerticalGrowingRight)) |
| 734 m_displayPosition.first = m_computedLinePosition; | 781 m_displayPosition.first = m_computedLinePosition; |
| 735 | |
| 736 // A text track cue has a text track cue computed line position whose value | |
| 737 // is defined in terms of the other aspects of the cue. | |
| 738 m_computedLinePosition = calculateComputedLinePosition(); | |
| 739 } | 782 } |
| 740 | 783 |
| 741 void TextTrackCue::markFutureAndPastNodes(ContainerNode* root, double previousTi mestamp, double movieTime) | 784 void TextTrackCue::markFutureAndPastNodes(ContainerNode* root, double previousTi mestamp, double movieTime) |
| 742 { | 785 { |
| 743 DEFINE_STATIC_LOCAL(const String, timestampTag, ("timestamp")); | 786 DEFINE_STATIC_LOCAL(const String, timestampTag, ("timestamp")); |
| 744 | 787 |
| 745 bool isPastNode = true; | 788 bool isPastNode = true; |
| 746 double currentTimestamp = previousTimestamp; | 789 double currentTimestamp = previousTimestamp; |
| 747 if (currentTimestamp > movieTime) | 790 if (currentTimestamp > movieTime) |
| 748 isPastNode = false; | 791 isPastNode = false; |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1087 if (cueAlignment == startKeyword()) | 1130 if (cueAlignment == startKeyword()) |
| 1088 m_cueAlignment = Start; | 1131 m_cueAlignment = Start; |
| 1089 | 1132 |
| 1090 // 2. If value is a case-sensitive match for the string "middle", th en let cue's text track cue alignment be middle alignment. | 1133 // 2. If value is a case-sensitive match for the string "middle", th en let cue's text track cue alignment be middle alignment. |
| 1091 else if (cueAlignment == middleKeyword()) | 1134 else if (cueAlignment == middleKeyword()) |
| 1092 m_cueAlignment = Middle; | 1135 m_cueAlignment = Middle; |
| 1093 | 1136 |
| 1094 // 3. If value is a case-sensitive match for the string "end", then let cue's text track cue alignment be end alignment. | 1137 // 3. If value is a case-sensitive match for the string "end", then let cue's text track cue alignment be end alignment. |
| 1095 else if (cueAlignment == endKeyword()) | 1138 else if (cueAlignment == endKeyword()) |
| 1096 m_cueAlignment = End; | 1139 m_cueAlignment = End; |
| 1140 | |
| 1141 // 4. If value is a case-sensitive match for the string "left", then let cue's text track cue alignment be left alignment. | |
| 1142 else if (cueAlignment == leftKeyword()) | |
| 1143 m_cueAlignment = Left; | |
| 1144 | |
| 1145 // 5. If value is a case-sensitive match for the string "right", the n let cue's text track cue alignment be right alignment. | |
| 1146 else if (cueAlignment == rightKeyword()) | |
| 1147 m_cueAlignment = Right; | |
| 1097 } | 1148 } |
| 1098 break; | 1149 break; |
| 1099 #if ENABLE(WEBVTT_REGIONS) | 1150 #if ENABLE(WEBVTT_REGIONS) |
| 1100 case RegionId: | 1151 case RegionId: |
| 1101 m_regionId = WebVTTParser::collectWord(input, &position); | 1152 m_regionId = WebVTTParser::collectWord(input, &position); |
| 1102 break; | 1153 break; |
| 1103 #endif | 1154 #endif |
| 1104 case None: | 1155 case None: |
| 1105 break; | 1156 break; |
| 1106 } | 1157 } |
| 1107 | 1158 |
| 1108 NextSetting: | 1159 NextSetting: |
| 1109 position = endOfSetting; | 1160 position = endOfSetting; |
| 1110 } | 1161 } |
| 1111 #if ENABLE(WEBVTT_REGIONS) | 1162 #if ENABLE(WEBVTT_REGIONS) |
| 1112 // If cue's line position is not auto or cue's size is not 100 or cue's | 1163 // If cue's line position is not auto or cue's size is not 100 or cue's |
| 1113 // writing direction is not horizontal, but cue's region identifier is not | 1164 // writing direction is not horizontal, but cue's region identifier is not |
| 1114 // the empty string, let cue's region identifier be the empty string. | 1165 // the empty string, let cue's region identifier be the empty string. |
| 1115 if (m_regionId.isEmpty()) | 1166 if (m_regionId.isEmpty()) |
| 1116 return; | 1167 return; |
| 1117 | 1168 |
| 1118 if (m_linePosition != undefinedPosition || m_cueSize != 100 || m_writingDire ction != Horizontal) | 1169 if (m_linePosition != undefinedPosition || m_cueSize != 100 || m_writingDire ction != Horizontal) |
| 1119 m_regionId = emptyString(); | 1170 m_regionId = emptyString(); |
| 1120 #endif | 1171 #endif |
| 1121 } | 1172 } |
| 1122 | 1173 |
| 1174 CSSValueID TextTrackCue::getCSSAlignment() const | |
| 1175 { | |
| 1176 return displayAlignmentMap[m_cueAlignment]; | |
| 1177 } | |
| 1178 | |
| 1123 CSSValueID TextTrackCue::getCSSWritingDirection() const | 1179 CSSValueID TextTrackCue::getCSSWritingDirection() const |
| 1124 { | 1180 { |
| 1125 return m_displayDirection; | 1181 return m_displayDirection; |
| 1126 } | 1182 } |
| 1127 | 1183 |
| 1128 CSSValueID TextTrackCue::getCSSWritingMode() const | 1184 CSSValueID TextTrackCue::getCSSWritingMode() const |
| 1129 { | 1185 { |
| 1130 return m_displayWritingMode; | 1186 return displayWritingModeMap[m_writingDirection]; |
| 1131 } | 1187 } |
| 1132 | 1188 |
| 1133 int TextTrackCue::getCSSSize() const | 1189 int TextTrackCue::getCSSSize() const |
| 1134 { | 1190 { |
| 1135 return m_displaySize; | 1191 return m_displaySize; |
| 1136 } | 1192 } |
| 1137 | 1193 |
| 1138 std::pair<double, double> TextTrackCue::getCSSPosition() const | 1194 std::pair<double, double> TextTrackCue::getCSSPosition() const |
| 1139 { | 1195 { |
| 1140 if (!m_snapToLines) | 1196 if (!m_snapToLines) |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1184 return false; | 1240 return false; |
| 1185 if (m_cueSize != cue.size()) | 1241 if (m_cueSize != cue.size()) |
| 1186 return false; | 1242 return false; |
| 1187 if (align() != cue.align()) | 1243 if (align() != cue.align()) |
| 1188 return false; | 1244 return false; |
| 1189 | 1245 |
| 1190 return true; | 1246 return true; |
| 1191 } | 1247 } |
| 1192 | 1248 |
| 1193 } // namespace WebCore | 1249 } // namespace WebCore |
| OLD | NEW |