Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / Source / core / layout / LayoutTextTrackContainer.cpp
blob497dbf88f16b17e9bde1d4b90e33db99de55af01
1 /*
2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc.
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
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.
28 #include "config.h"
29 #include "core/layout/LayoutTextTrackContainer.h"
31 #include "core/frame/DeprecatedScheduleStyleRecalcDuringLayout.h"
32 #include "core/layout/LayoutVideo.h"
34 namespace blink {
36 LayoutTextTrackContainer::LayoutTextTrackContainer(Element* element)
37 : LayoutBlockFlow(element)
38 , m_fontSize(0)
42 void LayoutTextTrackContainer::layout()
44 LayoutBlockFlow::layout();
45 if (style()->display() == NONE)
46 return;
48 DeprecatedScheduleStyleRecalcDuringLayout marker(node()->document().lifecycle());
50 LayoutObject* mediaLayoutObject = parent();
51 if (!mediaLayoutObject || !mediaLayoutObject->isVideo())
52 return;
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)
65 return false;
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)
72 return false;
73 m_fontSize = fontSize;
74 return true;
77 } // namespace blink