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

Unified Diff: Source/core/html/track/vtt/VTTCue.cpp

Issue 869623002: VTTCue: Refactor display parameter handling (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 11 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/vtt/VTTCue.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/vtt/VTTCue.cpp
diff --git a/Source/core/html/track/vtt/VTTCue.cpp b/Source/core/html/track/vtt/VTTCue.cpp
index fa09bd03d570112a3eb16582db9ec5bfc24e0f0f..9b10e890c61eee6c2475feb0f7fd473ad239bbb0 100644
--- a/Source/core/html/track/vtt/VTTCue.cpp
+++ b/Source/core/html/track/vtt/VTTCue.cpp
@@ -143,7 +143,7 @@ VTTCueBox::VTTCueBox(Document& document, VTTCue* cue)
setShadowPseudoId(AtomicString("-webkit-media-text-track-display", AtomicString::ConstructFromLiteral));
}
-void VTTCueBox::applyCSSProperties(const IntSize&)
+void VTTCueBox::applyCSSProperties(const VTTDisplayParameters& displayParameters)
{
// FIXME: Apply all the initial CSS positioning properties. http://wkb.ug/79916
if (!m_cue->regionId().isEmpty()) {
@@ -160,12 +160,12 @@ void VTTCueBox::applyCSSProperties(const IntSize&)
setInlineStyleProperty(CSSPropertyUnicodeBidi, CSSValueWebkitPlaintext);
// the 'direction' property must be set to direction
- setInlineStyleProperty(CSSPropertyDirection, m_cue->getCSSWritingDirection());
+ setInlineStyleProperty(CSSPropertyDirection, displayParameters.direction);
// the 'writing-mode' property must be set to writing-mode
- setInlineStyleProperty(CSSPropertyWebkitWritingMode, m_cue->getCSSWritingMode());
+ setInlineStyleProperty(CSSPropertyWebkitWritingMode, displayParameters.writingMode);
- FloatPoint position = m_cue->getCSSPosition();
+ const FloatPoint& position = displayParameters.position;
// the 'top' property must be set to top,
setInlineStyleProperty(CSSPropertyTop, position.y(), CSSPrimitiveValue::CSS_PERCENTAGE);
@@ -175,18 +175,18 @@ void VTTCueBox::applyCSSProperties(const IntSize&)
// the 'width' property must be set to width, and the 'height' property must be set to height
if (m_cue->vertical() == horizontalKeyword()) {
- setInlineStyleProperty(CSSPropertyWidth, static_cast<double>(m_cue->getCSSSize()), CSSPrimitiveValue::CSS_PERCENTAGE);
+ setInlineStyleProperty(CSSPropertyWidth, displayParameters.size, CSSPrimitiveValue::CSS_PERCENTAGE);
setInlineStyleProperty(CSSPropertyHeight, CSSValueAuto);
} else {
setInlineStyleProperty(CSSPropertyWidth, CSSValueAuto);
- setInlineStyleProperty(CSSPropertyHeight, static_cast<double>(m_cue->getCSSSize()), CSSPrimitiveValue::CSS_PERCENTAGE);
+ setInlineStyleProperty(CSSPropertyHeight, displayParameters.size, CSSPrimitiveValue::CSS_PERCENTAGE);
}
// The 'text-align' property on the (root) List of WebVTT Node Objects must
// be set to the value in the second cell of the row of the table below
// whose first cell is the value of the corresponding cue's text track cue
// alignment:
- setInlineStyleProperty(CSSPropertyTextAlign, m_cue->getCSSAlignment());
+ setInlineStyleProperty(CSSPropertyTextAlign, displayAlignmentMap[m_cue->cueAlignment()]);
if (!m_cue->snapToLines()) {
// 10.13.1 Set up x and y:
@@ -221,15 +221,12 @@ VTTCue::VTTCue(Document& document, double startTime, double endTime, const Strin
: TextTrackCue(startTime, endTime)
, m_text(text)
, m_linePosition(std::numeric_limits<float>::quiet_NaN())
- , m_computedLinePosition(std::numeric_limits<float>::quiet_NaN())
, m_textPosition(std::numeric_limits<float>::quiet_NaN())
, m_cueSize(100)
, m_writingDirection(Horizontal)
, m_cueAlignment(Middle)
, m_vttNodeTree(nullptr)
, m_cueBackgroundBox(HTMLDivElement::create(document))
- , m_displayDirection(CSSValueLtr)
- , m_displaySize(std::numeric_limits<float>::quiet_NaN())
, m_snapToLines(true)
, m_displayTreeShouldChange(true)
, m_notifyRegion(true)
@@ -355,7 +352,6 @@ void VTTCue::setLine(const DoubleOrAutoKeyword& position, ExceptionState& except
cueWillChange();
m_linePosition = floatPosition;
- m_computedLinePosition = calculateComputedLinePosition();
cueDidChange();
}
@@ -529,7 +525,7 @@ void VTTCue::notifyRegionWhenRemovingDisplayTree(bool notifyRegion)
m_notifyRegion = notifyRegion;
}
-float VTTCue::calculateComputedLinePosition()
+float VTTCue::calculateComputedLinePosition() const
{
// http://dev.w3.org/html5/webvtt/#dfn-text-track-cue-computed-line-position
// A text track cue has a text track cue computed line position whose value
@@ -669,16 +665,20 @@ VTTCue::CueAlignment VTTCue::calculateComputedCueAlignment() const
}
}
-void VTTCue::calculateDisplayParameters()
-{
- createVTTNodeTree();
+VTTDisplayParameters::VTTDisplayParameters()
+ : size(std::numeric_limits<float>::quiet_NaN())
+ , direction(CSSValueNone)
+ , writingMode(CSSValueNone) { }
+VTTDisplayParameters VTTCue::calculateDisplayParameters() const
+{
// http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings
+ VTTDisplayParameters displayParameters;
// Steps 1 and 2.
- m_displayDirection = determineTextDirection(m_vttNodeTree.get());
+ displayParameters.direction = determineTextDirection(m_vttNodeTree.get());
- if (m_displayDirection == CSSValueRtl)
+ if (displayParameters.direction == CSSValueRtl)
UseCounter::count(document(), UseCounter::VTTCueRenderRtl);
// 3. If the text track cue writing direction is horizontal, then let
@@ -686,8 +686,7 @@ void VTTCue::calculateDisplayParameters()
// vertical growing left, then let block-flow be 'lr'. Otherwise, the text
// track cue writing direction is vertical growing right; let block-flow be
// 'rl'.
-
- // The above step is done through the writing direction static map.
+ displayParameters.writingMode = displayWritingModeMap[m_writingDirection];
// Resolve the cue alignment to one of the values {start, end, middle}.
CueAlignment computedCueAlignment = calculateComputedCueAlignment();
@@ -709,7 +708,7 @@ void VTTCue::calculateDisplayParameters()
// 5. If the text track cue size is less than maximum size, then let size
// be text track cue size. Otherwise, let size be maximum size.
- m_displaySize = std::min(m_cueSize, maximumSize);
+ displayParameters.size = std::min(m_cueSize, maximumSize);
// 6. If the text track cue writing direction is horizontal, then let width
// be 'size vw' and height be 'auto'. Otherwise, let width be 'auto' and
@@ -722,13 +721,13 @@ void VTTCue::calculateDisplayParameters()
if (m_writingDirection == Horizontal) {
switch (computedCueAlignment) {
case Start:
- m_displayPosition.setX(computedTextPosition);
+ displayParameters.position.setX(computedTextPosition);
break;
case End:
- m_displayPosition.setX(computedTextPosition - m_displaySize);
+ displayParameters.position.setX(computedTextPosition - displayParameters.size);
break;
case Middle:
- m_displayPosition.setX(computedTextPosition - m_displaySize / 2);
+ displayParameters.position.setX(computedTextPosition - displayParameters.size / 2);
break;
default:
ASSERT_NOT_REACHED();
@@ -737,13 +736,13 @@ void VTTCue::calculateDisplayParameters()
// Cases for m_writingDirection being VerticalGrowing{Left|Right}
switch (computedCueAlignment) {
case Start:
- m_displayPosition.setY(computedTextPosition);
+ displayParameters.position.setY(computedTextPosition);
break;
case End:
- m_displayPosition.setY(computedTextPosition - m_displaySize);
+ displayParameters.position.setY(computedTextPosition - displayParameters.size);
break;
case Middle:
- m_displayPosition.setY(computedTextPosition - m_displaySize / 2);
+ displayParameters.position.setY(computedTextPosition - displayParameters.size / 2);
break;
default:
ASSERT_NOT_REACHED();
@@ -752,22 +751,44 @@ void VTTCue::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();
+ float computedLinePosition = calculateComputedLinePosition();
// 8. Determine the value of whichever of x-position or y-position is not
// yet calculated for cue as per the appropriate rules from the following
// list:
if (!m_snapToLines) {
if (m_writingDirection == Horizontal)
- m_displayPosition.setY(m_computedLinePosition);
+ displayParameters.position.setY(computedLinePosition);
else
- m_displayPosition.setX(m_computedLinePosition);
+ displayParameters.position.setX(computedLinePosition);
} else {
if (m_writingDirection == Horizontal)
- m_displayPosition.setY(0);
+ displayParameters.position.setY(0);
else
- m_displayPosition.setX(0);
+ displayParameters.position.setX(0);
+ }
+
+ // FIXME: Remove this block.
fs 2015/01/22 17:43:21 Kept this block (from getPositionCoordinates) arou
philipj_slow 2015/01/26 03:00:16 Acknowledged.
+ if (!m_snapToLines) {
+ if (m_writingDirection == Horizontal && displayParameters.direction == CSSValueLtr)
+ displayParameters.position.setX(computedTextPosition);
+
+ if (m_writingDirection == Horizontal && displayParameters.direction == CSSValueRtl)
+ displayParameters.position.setX(100 - computedTextPosition);
+
+ if (m_writingDirection == VerticalGrowingLeft)
+ displayParameters.position = FloatPoint(100 - computedLinePosition, computedTextPosition);
+
+ if (m_writingDirection == VerticalGrowingRight)
+ displayParameters.position.setY(computedTextPosition);
}
+
+ // Step 9 not implemented (margin == 0).
+
+ ASSERT(std::isfinite(displayParameters.size));
+ ASSERT(displayParameters.direction != CSSValueNone);
+ ASSERT(displayParameters.writingMode != CSSValueNone);
+ return displayParameters;
}
void VTTCue::markFutureAndPastNodes(ContainerNode* root, double previousTimestamp, double movieTime)
@@ -815,14 +836,16 @@ void VTTCue::updateDisplayTree(double movieTime)
m_cueBackgroundBox->appendChild(referenceTree, ASSERT_NO_EXCEPTION);
}
-PassRefPtrWillBeRawPtr<VTTCueBox> VTTCue::getDisplayTree(const IntSize& videoSize)
+PassRefPtrWillBeRawPtr<VTTCueBox> VTTCue::getDisplayTree()
{
RefPtrWillBeRawPtr<VTTCueBox> displayTree(ensureDisplayTree());
if (!m_displayTreeShouldChange || !track()->isRendered())
return displayTree.release();
+ createVTTNodeTree();
+
// 10.1 - 10.10
- calculateDisplayParameters();
+ VTTDisplayParameters displayParameters = calculateDisplayParameters();
// 10.11. Apply the terms of the CSS specifications to nodes within the
// following constraints, thus obtaining a set of CSS boxes positioned
@@ -850,7 +873,7 @@ PassRefPtrWillBeRawPtr<VTTCueBox> VTTCue::getDisplayTree(const IntSize& videoSiz
// is no line breaking opportunity. (Thus, normally text wraps as needed,
// but if there is a particularly long word, it does not overflow as it
// normally would in CSS, it is instead forcibly wrapped at the box's edge.)
- displayTree->applyCSSProperties(videoSize);
+ displayTree->applyCSSProperties(displayParameters);
m_displayTreeShouldChange = false;
@@ -872,7 +895,7 @@ void VTTCue::removeDisplayTree()
m_displayTree->remove(ASSERT_NO_EXCEPTION);
}
-void VTTCue::updateDisplay(const IntSize& videoSize, HTMLDivElement& container)
+void VTTCue::updateDisplay(HTMLDivElement& container)
{
UseCounter::count(document(), UseCounter::VTTCueRender);
@@ -894,7 +917,7 @@ void VTTCue::updateDisplay(const IntSize& videoSize, HTMLDivElement& container)
if (m_cueAlignment != Middle)
UseCounter::count(document(), UseCounter::VTTCueRenderAlignNotMiddle);
- RefPtrWillBeRawPtr<VTTCueBox> displayBox = getDisplayTree(videoSize);
+ RefPtrWillBeRawPtr<VTTCueBox> displayBox = getDisplayTree();
VTTRegion* region = 0;
if (track()->regions())
region = track()->regions()->getRegionById(regionId());
@@ -920,29 +943,7 @@ void VTTCue::updateDisplay(const IntSize& videoSize, HTMLDivElement& container)
}
}
-FloatPoint VTTCue::getPositionCoordinates() const
-{
- // This method is used for setting x and y when snap to lines is not set.
- ASSERT(std::isfinite(m_computedLinePosition));
- float computedTextPosition = calculateComputedTextPosition();
-
- if (m_writingDirection == Horizontal && m_displayDirection == CSSValueLtr)
- return FloatPoint(computedTextPosition, m_computedLinePosition);
-
- if (m_writingDirection == Horizontal && m_displayDirection == CSSValueRtl)
- return FloatPoint(100 - computedTextPosition, m_computedLinePosition);
-
- if (m_writingDirection == VerticalGrowingLeft)
- return FloatPoint(100 - m_computedLinePosition, computedTextPosition);
-
- if (m_writingDirection == VerticalGrowingRight)
- return FloatPoint(m_computedLinePosition, computedTextPosition);
-
- ASSERT_NOT_REACHED();
- return FloatPoint();
-}
-
-VTTCue::CueSetting VTTCue::settingName(VTTScanner& input)
+VTTCue::CueSetting VTTCue::settingName(VTTScanner& input) const
{
CueSetting parsedSetting = None;
if (input.scan("vertical"))
@@ -1146,35 +1147,6 @@ void VTTCue::parseSettings(const String& inputString)
m_regionId = emptyString();
}
-CSSValueID VTTCue::getCSSAlignment() const
-{
- return displayAlignmentMap[m_cueAlignment];
-}
-
-CSSValueID VTTCue::getCSSWritingDirection() const
-{
- return m_displayDirection;
-}
-
-CSSValueID VTTCue::getCSSWritingMode() const
-{
- return displayWritingModeMap[m_writingDirection];
-}
-
-float VTTCue::getCSSSize() const
-{
- ASSERT(std::isfinite(m_displaySize));
- return m_displaySize;
-}
-
-FloatPoint VTTCue::getCSSPosition() const
-{
- if (!m_snapToLines)
- return getPositionCoordinates();
-
- return m_displayPosition;
-}
-
ExecutionContext* VTTCue::executionContext() const
{
ASSERT(m_cueBackgroundBox);
« no previous file with comments | « Source/core/html/track/vtt/VTTCue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698