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

Unified Diff: Source/core/layout/LayoutVTTCue.cpp

Issue 1018593004: Implement <video controls> dodging for text track layout (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: braces Created 5 years, 9 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/layout/LayoutMedia.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/layout/LayoutVTTCue.cpp
diff --git a/Source/core/layout/LayoutVTTCue.cpp b/Source/core/layout/LayoutVTTCue.cpp
index cd3007f1284658ad94209a1cd09278e134fb67c5..15cb2f3ccda33cf3b6816539543c835200df6c4f 100644
--- a/Source/core/layout/LayoutVTTCue.cpp
+++ b/Source/core/layout/LayoutVTTCue.cpp
@@ -26,6 +26,7 @@
#include "config.h"
#include "core/layout/LayoutVTTCue.h"
+#include "core/html/shadow/MediaControls.h"
#include "core/html/track/vtt/VTTCue.h"
#include "core/layout/LayoutInline.h"
#include "core/layout/LayoutState.h"
@@ -41,8 +42,9 @@ LayoutVTTCue::LayoutVTTCue(VTTCueBox* element)
class SnapToLinesLayouter {
STACK_ALLOCATED();
public:
- SnapToLinesLayouter(LayoutVTTCue& cueBox, float linePosition)
+ SnapToLinesLayouter(LayoutVTTCue& cueBox, const IntRect& controlsRect, float linePosition)
: m_cueBox(cueBox)
+ , m_controlsRect(controlsRect)
, m_linePosition(linePosition)
{
}
@@ -64,6 +66,7 @@ private:
LayoutPoint m_specifiedPosition;
LayoutVTTCue& m_cueBox;
+ IntRect m_controlsRect;
float m_linePosition;
};
@@ -116,13 +119,17 @@ bool SnapToLinesLayouter::isOutside() const
bool SnapToLinesLayouter::isOverlapping() const
{
+ IntRect cueBoxRect = m_cueBox.absoluteBoundingBoxRect();
for (LayoutObject* box = m_cueBox.previousSibling(); box; box = box->previousSibling()) {
IntRect boxRect = box->absoluteBoundingBoxRect();
- if (m_cueBox.absoluteBoundingBoxRect().intersects(boxRect))
+ if (cueBoxRect.intersects(boxRect))
return true;
}
+ if (cueBoxRect.intersects(m_controlsRect))
+ return true;
+
return false;
}
@@ -317,9 +324,22 @@ void LayoutVTTCue::layout()
LayoutState state(*this, locationOffset());
+ // Determine the area covered by the media controls, if any. If the controls
+ // are present, they are the next sibling of the text track container, which
+ // is our parent. (LayoutMedia ensures that the media controls are laid out
+ // before text tracks, so that the layout is up-to-date here.)
+ ASSERT(parent()->node()->isTextTrackContainer());
+ IntRect controlsRect;
+ if (LayoutObject* parentSibling = parent()->nextSibling()) {
+ // Only a part of the media controls is used for overlap avoidance.
+ MediaControls* controls = toMediaControls(parentSibling->node());
+ if (LayoutObject* controlsLayout = controls->layoutObjectForTextTrackLayout())
+ controlsRect = controlsLayout->absoluteBoundingBoxRect();
+ }
+
// http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings - step 13.
if (m_cue->snapToLines()) {
- SnapToLinesLayouter(*this, m_cue->calculateComputedLinePosition()).layout();
+ SnapToLinesLayouter(*this, controlsRect, m_cue->calculateComputedLinePosition()).layout();
adjustForTopAndBottomMarginBorderAndPadding();
} else {
@@ -328,4 +348,3 @@ void LayoutVTTCue::layout()
}
} // namespace blink
-
« no previous file with comments | « Source/core/layout/LayoutMedia.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698