| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Victor Carbune (victor@rosedu.org) | 2 * Copyright (C) 2012 Victor Carbune (victor@rosedu.org) |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 // position to their current position, and then jump to the step labeled | 266 // position to their current position, and then jump to the step labeled |
| 267 // done positioning below. If there are multiple such positions that are | 267 // done positioning below. If there are multiple such positions that are |
| 268 // equidistant from their current position, use the highest one amongst | 268 // equidistant from their current position, use the highest one amongst |
| 269 // them; if there are several at that height, then use the leftmost one | 269 // them; if there are several at that height, then use the leftmost one |
| 270 // amongst them. | 270 // amongst them. |
| 271 | 271 |
| 272 // 5. Otherwise, jump to the step labeled done positioning below. (The | 272 // 5. Otherwise, jump to the step labeled done positioning below. (The |
| 273 // boxes will unfortunately overlap.) | 273 // boxes will unfortunately overlap.) |
| 274 } | 274 } |
| 275 | 275 |
| 276 void LayoutVTTCue::adjustForTopAndBottomMarginBorderAndPadding() | |
| 277 { | |
| 278 // Accommodate extra top and bottom padding, border or margin. | |
| 279 // Note: this is supported only for internal UA styling, not through the cue
selector. | |
| 280 if (!hasInlineDirectionBordersPaddingOrMargin()) | |
| 281 return; | |
| 282 IntRect containerRect = containingBlock()->absoluteBoundingBoxRect(); | |
| 283 IntRect cueRect = absoluteBoundingBoxRect(); | |
| 284 | |
| 285 int topOverflow = cueRect.y() - containerRect.y(); | |
| 286 int bottomOverflow = containerRect.y() + containerRect.height() - cueRect.y(
) - cueRect.height(); | |
| 287 | |
| 288 int adjustment = 0; | |
| 289 if (topOverflow < 0) | |
| 290 adjustment = -topOverflow; | |
| 291 else if (bottomOverflow < 0) | |
| 292 adjustment = bottomOverflow; | |
| 293 | |
| 294 if (!adjustment) | |
| 295 return; | |
| 296 | |
| 297 setY(location().y() + adjustment); | |
| 298 } | |
| 299 | |
| 300 void LayoutVTTCue::layout() | 276 void LayoutVTTCue::layout() |
| 301 { | 277 { |
| 302 LayoutBlockFlow::layout(); | 278 LayoutBlockFlow::layout(); |
| 303 | 279 |
| 304 ASSERT(firstChild()); | 280 ASSERT(firstChild()); |
| 305 | 281 |
| 306 LayoutState state(*this, locationOffset()); | 282 LayoutState state(*this, locationOffset()); |
| 307 | 283 |
| 308 // Determine the area covered by the media controls, if any. If the controls | 284 // Determine the area covered by the media controls, if any. If the controls |
| 309 // are present, they are the next sibling of the text track container, which | 285 // are present, they are the next sibling of the text track container, which |
| 310 // is our parent. (LayoutMedia ensures that the media controls are laid out | 286 // is our parent. (LayoutMedia ensures that the media controls are laid out |
| 311 // before text tracks, so that the layout is up-to-date here.) | 287 // before text tracks, so that the layout is up-to-date here.) |
| 312 ASSERT(parent()->node()->isTextTrackContainer()); | 288 ASSERT(parent()->node()->isTextTrackContainer()); |
| 313 IntRect controlsRect; | 289 IntRect controlsRect; |
| 314 if (LayoutObject* parentSibling = parent()->nextSibling()) { | 290 if (LayoutObject* parentSibling = parent()->nextSibling()) { |
| 315 // Only a part of the media controls is used for overlap avoidance. | 291 // Only a part of the media controls is used for overlap avoidance. |
| 316 MediaControls* controls = toMediaControls(parentSibling->node()); | 292 MediaControls* controls = toMediaControls(parentSibling->node()); |
| 317 if (LayoutObject* controlsLayout = controls->layoutObjectForTextTrackLay
out()) | 293 if (LayoutObject* controlsLayout = controls->layoutObjectForTextTrackLay
out()) |
| 318 controlsRect = controlsLayout->absoluteBoundingBoxRect(); | 294 controlsRect = controlsLayout->absoluteBoundingBoxRect(); |
| 319 } | 295 } |
| 320 | 296 |
| 321 // http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings - step 13. | 297 // http://dev.w3.org/html5/webvtt/#dfn-apply-webvtt-cue-settings - step 13. |
| 322 if (!std::isnan(m_snapToLinesPosition)) { | 298 if (!std::isnan(m_snapToLinesPosition)) |
| 323 SnapToLinesLayouter(*this, controlsRect).layout(); | 299 SnapToLinesLayouter(*this, controlsRect).layout(); |
| 324 | 300 else |
| 325 adjustForTopAndBottomMarginBorderAndPadding(); | |
| 326 } else { | |
| 327 repositionCueSnapToLinesNotSet(); | 301 repositionCueSnapToLinesNotSet(); |
| 328 } | |
| 329 } | 302 } |
| 330 | 303 |
| 331 } // namespace blink | 304 } // namespace blink |
| OLD | NEW |