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

Unified Diff: Source/core/rendering/RenderVTTCue.cpp

Issue 882023003: Refactor RenderVTTCue/SnapToLinesLayouter (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Additional touches. 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderVTTCue.cpp
diff --git a/Source/core/rendering/RenderVTTCue.cpp b/Source/core/rendering/RenderVTTCue.cpp
index 5d20273e884c1250f0c8b33b183c48fef4f1e35f..0dd875ed3a631e74ada28b8747b2a079e72362ae 100644
--- a/Source/core/rendering/RenderVTTCue.cpp
+++ b/Source/core/rendering/RenderVTTCue.cpp
@@ -59,14 +59,18 @@ public:
private:
bool isOutside() const;
bool isOverlapping() const;
+ LayoutUnit computeInitialPositionAdjustment(LayoutUnit&) const;
bool shouldSwitchDirection(InlineFlowBox*, LayoutUnit) const;
- void moveBoxesByStep(LayoutUnit);
- bool switchDirection(bool&, LayoutUnit&);
+ void moveBoxesBy(LayoutUnit distance)
+ {
+ if (m_cueWritingDirection == VTTCue::Horizontal)
+ m_cueBox.setY(m_cueBox.location().y() + distance);
+ else
+ m_cueBox.setX(m_cueBox.location().x() + distance);
+ }
- bool findFirstLineBox(InlineFlowBox*&);
- bool initializeLayoutParameters(InlineFlowBox*, LayoutUnit&, LayoutUnit&);
- void placeBoxInDefaultPosition(LayoutUnit, bool&);
+ InlineFlowBox* findFirstLineBox() const;
LayoutPoint m_specifiedPosition;
RenderVTTCue& m_cueBox;
@@ -74,28 +78,15 @@ private:
float m_linePosition;
};
-bool SnapToLinesLayouter::findFirstLineBox(InlineFlowBox*& firstLineBox)
+InlineFlowBox* SnapToLinesLayouter::findFirstLineBox() const
{
- if (m_cueBox.firstChild()->isRenderInline())
- firstLineBox = toRenderInline(m_cueBox.firstChild())->firstLineBox();
- else
- return false;
-
- return true;
+ if (!m_cueBox.firstChild()->isRenderInline())
+ return nullptr;
+ return toRenderInline(m_cueBox.firstChild())->firstLineBox();
}
-bool SnapToLinesLayouter::initializeLayoutParameters(InlineFlowBox* firstLineBox, LayoutUnit& step, LayoutUnit& position)
+LayoutUnit SnapToLinesLayouter::computeInitialPositionAdjustment(LayoutUnit& step) const
{
- ASSERT(m_cueBox.firstChild());
-
- // 4. Horizontal: Let step be the height of the first line box in boxes.
- // Vertical: Let step be the width of the first line box in boxes.
- step = m_cueWritingDirection == VTTCue::Horizontal ? firstLineBox->size().height() : firstLineBox->size().width();
-
- // 5. If step is zero, then jump to the step labeled done positioning below.
- if (!step)
- return false;
-
// 6. Let line position be the text track cue computed line position.
// 7. Round line position to an integer by adding 0.5 and then flooring it.
LayoutUnit linePosition = floorf(m_linePosition + 0.5f);
@@ -105,7 +96,7 @@ bool SnapToLinesLayouter::initializeLayoutParameters(InlineFlowBox* firstLineBox
linePosition = -(linePosition + 1);
// 9. Let position be the result of multiplying step and line position.
- position = step * linePosition;
+ LayoutUnit position = step * linePosition;
// 10. Vertical Growing Left: Decrease position by the width of the
// bounding box of the boxes in boxes, then increase position by step.
@@ -125,28 +116,7 @@ bool SnapToLinesLayouter::initializeLayoutParameters(InlineFlowBox* firstLineBox
// ... and negate step.
step = -step;
}
- return true;
-}
-
-void SnapToLinesLayouter::placeBoxInDefaultPosition(LayoutUnit position, bool& switched)
-{
- // 12. Move all boxes in boxes ...
- if (m_cueWritingDirection == VTTCue::Horizontal) {
- // Horizontal: ... down by the distance given by position
- m_cueBox.setY(m_cueBox.location().y() + position);
- } else {
- // Vertical: ... right by the distance given by position
- m_cueBox.setX(m_cueBox.location().x() + position);
- }
-
- // 13. Remember the position of all the boxes in boxes as their specified position.
- m_specifiedPosition = m_cueBox.location();
-
- // 14. Let best position be null. It will hold a position for boxes, much like specified position in the previous step.
- // 15. Let best position score be null.
-
- // 16. Let switched be false.
- switched = false;
+ return position;
}
bool SnapToLinesLayouter::isOutside() const
@@ -193,62 +163,42 @@ bool SnapToLinesLayouter::shouldSwitchDirection(InlineFlowBox* firstLineBox, Lay
return false;
}
-void SnapToLinesLayouter::moveBoxesByStep(LayoutUnit step)
-{
- // 22. Horizontal: Move all the boxes in boxes down by the distance
- // given by step. (If step is negative, then this will actually
- // result in an upwards movement of the boxes in absolute terms.)
- if (m_cueWritingDirection == VTTCue::Horizontal)
- m_cueBox.setY(m_cueBox.location().y() + step);
-
- // 22. Vertical: Move all the boxes in boxes right by the distance
- // given by step. (If step is negative, then this will actually
- // result in a leftwards movement of the boxes in absolute terms.)
- else
- m_cueBox.setX(m_cueBox.location().x() + step);
-}
-
-bool SnapToLinesLayouter::switchDirection(bool& switched, LayoutUnit& step)
-{
- // 24. Switch direction: If switched is true, then move all the boxes in
- // boxes back to their best position, and jump to the step labeled done
- // positioning below.
-
- // 25. Otherwise, move all the boxes in boxes back to their specified
- // position as determined in the earlier step.
- m_cueBox.setLocation(m_specifiedPosition);
-
- // XX. If switched is true, jump to the step labeled done
- // positioning below.
- if (switched)
- return false;
-
- // 26. Negate step.
- step = -step;
-
- // 27. Set switched to true.
- switched = true;
- return true;
-}
-
void SnapToLinesLayouter::layout()
{
// http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings
// Step 13, "If cue's text track cue snap-to-lines flag is set".
- InlineFlowBox* firstLineBox;
- if (!findFirstLineBox(firstLineBox))
+ InlineFlowBox* firstLineBox = findFirstLineBox();
+ if (!firstLineBox)
return;
- // Step 1 skipped.
+ // Steps 1-3 skipped.
+ // 4. Horizontal: Let step be the height of the first line box in boxes.
+ // Vertical: Let step be the width of the first line box in boxes.
+ LayoutUnit step = m_cueWritingDirection == VTTCue::Horizontal ? firstLineBox->size().height() : firstLineBox->size().width();
- LayoutUnit step;
- LayoutUnit position;
- if (!initializeLayoutParameters(firstLineBox, step, position))
+ // 5. If step is zero, then jump to the step labeled done positioning below.
+ if (!step)
return;
- bool switched;
- placeBoxInDefaultPosition(position, switched);
+ // Steps 6-11.
+ LayoutUnit positionAdjustment = computeInitialPositionAdjustment(step);
+
+ // 12. Move all boxes in boxes ...
+ // Horizontal: ... down by the distance given by position
+ // Vertical: ... right by the distance given by position
+ moveBoxesBy(positionAdjustment);
+
+ // 13. Remember the position of all the boxes in boxes as their specified
+ // position.
+ m_specifiedPosition = m_cueBox.location();
+
+ // 14. Let best position be null. It will hold a position for boxes, much
+ // like specified position in the previous step.
+ // 15. Let best position score be null.
+
+ // 16. Let switched be false.
+ bool switched = false;
// Step 17 skipped. (margin == 0; title area == video area)
@@ -267,13 +217,37 @@ void SnapToLinesLayouter::layout()
// as their best position, and set best position score to current
// position score.
if (!shouldSwitchDirection(firstLineBox, step)) {
- // 22. Move all the boxes in boxes ...
- moveBoxesByStep(step);
+ // 22. Horizontal: Move all the boxes in boxes down by the distance
+ // given by step. (If step is negative, then this will actually
+ // result in an upwards movement of the boxes in absolute terms.)
+ // Vertical: Move all the boxes in boxes right by the distance
+ // given by step. (If step is negative, then this will actually
+ // result in a leftwards movement of the boxes in absolute terms.)
+ moveBoxesBy(step);
+
// 23. Jump back to the step labeled step loop.
- } else if (!switchDirection(switched, step)) {
- break;
+ continue;
}
+ // 24. Switch direction: If switched is true, then move all the boxes in
+ // boxes back to their best position, and jump to the step labeled done
+ // positioning below.
+
+ // 25. Otherwise, move all the boxes in boxes back to their specified
+ // position as determined in the earlier step.
+ m_cueBox.setLocation(m_specifiedPosition);
+
+ // XX. If switched is true, jump to the step labeled done
+ // positioning below.
+ if (switched)
+ break;
+
+ // 26. Negate step.
+ step = -step;
+
+ // 27. Set switched to true.
+ switched = true;
+
// 28. Jump back to the step labeled step loop.
}
}
@@ -357,6 +331,8 @@ void RenderVTTCue::layout()
if (!m_cue->regionId().isEmpty())
return;
+ ASSERT(firstChild());
+
LayoutState state(*this, locationOffset());
// http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings - step 13.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698