2 * Copyright (C) 2018 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
27 #include "InlineFormattingContext.h"
29 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
31 #include "FloatingState.h"
32 #include "InlineFormattingState.h"
33 #include "LayoutBox.h"
34 #include "LayoutContext.h"
35 #include <wtf/IsoMallocInlines.h>
40 WTF_MAKE_ISO_ALLOCATED_IMPL(InlineFormattingContext);
42 InlineFormattingContext::InlineFormattingContext(const Box& formattingContextRoot, LayoutContext& layoutContext)
43 : FormattingContext(formattingContextRoot, layoutContext)
47 void InlineFormattingContext::layout(LayoutContext&, FormattingState&) const
51 std::unique_ptr<FormattingState> InlineFormattingContext::createFormattingState(Ref<FloatingState>&& floatingState) const
53 return std::make_unique<InlineFormattingState>(WTFMove(floatingState));
56 Ref<FloatingState> InlineFormattingContext::createOrFindFloatingState() const
58 // If the block container box that initiates this inline formatting context also establishes a block context, the floats outside of the formatting root
59 // should not interfere with the content inside.
60 // <div style="float: left"></div><div style="overflow: hidden"> <- is a non-intrusive float, because overflow: hidden triggers new block formatting context.</div>
61 if (root().establishesBlockFormattingContext())
62 return FloatingState::create();
63 // Otherwise, the formatting context inherits the floats from the parent formatting context.
64 // Find the formatting state in which this formatting root lives, not the one it creates (this) and use its floating state.
65 auto& formattingState = layoutContext().formattingStateForBox(root());
66 return formattingState.floatingState();
69 void InlineFormattingContext::computeInFlowWidth(const Box&, Display::Box&) const
73 void InlineFormattingContext::computeInFlowHeight(const Box&, Display::Box&) const