2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include "core/layout/LayoutTextTrackContainer.h"
31 #include "core/frame/DeprecatedScheduleStyleRecalcDuringLayout.h"
32 #include "core/layout/LayoutVideo.h"
36 LayoutTextTrackContainer::LayoutTextTrackContainer(Element
* element
)
37 : LayoutBlockFlow(element
)
42 void LayoutTextTrackContainer::layout()
44 LayoutBlockFlow::layout();
45 if (style()->display() == NONE
)
48 DeprecatedScheduleStyleRecalcDuringLayout
marker(node()->document().lifecycle());
50 LayoutObject
* mediaLayoutObject
= parent();
51 if (!mediaLayoutObject
|| !mediaLayoutObject
->isVideo())
53 if (updateSizes(toLayoutVideo(*mediaLayoutObject
)))
54 toElement(node())->setInlineStyleProperty(CSSPropertyFontSize
, m_fontSize
, CSSPrimitiveValue::UnitType::Pixels
);
57 bool LayoutTextTrackContainer::updateSizes(const LayoutVideo
& videoLayoutObject
)
59 // FIXME: The video size is used to calculate the font size (a workaround
60 // for lack of per-spec vh/vw support) but the whole media element is used
61 // for cue rendering. This is inconsistent. See also the somewhat related
62 // spec bug: https://www.w3.org/Bugs/Public/show_bug.cgi?id=28105
63 IntSize videoSize
= videoLayoutObject
.videoBox().size();
64 if (m_videoSize
== videoSize
)
66 m_videoSize
= videoSize
;
68 float smallestDimension
= std::min(m_videoSize
.height(), m_videoSize
.width());
70 float fontSize
= smallestDimension
* 0.05f
;
71 if (m_fontSize
== fontSize
)
73 m_fontSize
= fontSize
;