LayoutContainerBox.cpp [plain text]
#include "config.h"
#include "LayoutContainerBox.h"
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include "RenderStyle.h"
#include <wtf/IsoMallocInlines.h>
namespace WebCore {
namespace Layout {
WTF_MAKE_ISO_ALLOCATED_IMPL(ContainerBox);
ContainerBox::ContainerBox(Optional<ElementAttributes> attributes, RenderStyle&& style, OptionSet<BaseTypeFlag> baseTypeFlags)
: Box(attributes, WTFMove(style), baseTypeFlags | ContainerBoxFlag)
{
}
const Box* ContainerBox::firstInFlowChild() const
{
if (auto* firstChild = this->firstChild()) {
if (firstChild->isInFlow())
return firstChild;
return firstChild->nextInFlowSibling();
}
return nullptr;
}
const Box* ContainerBox::firstInFlowOrFloatingChild() const
{
if (auto* firstChild = this->firstChild()) {
if (firstChild->isInFlow() || firstChild->isFloatingPositioned())
return firstChild;
return firstChild->nextInFlowOrFloatingSibling();
}
return nullptr;
}
const Box* ContainerBox::lastInFlowChild() const
{
if (auto* lastChild = this->lastChild()) {
if (lastChild->isInFlow())
return lastChild;
return lastChild->previousInFlowSibling();
}
return nullptr;
}
const Box* ContainerBox::lastInFlowOrFloatingChild() const
{
if (auto* lastChild = this->lastChild()) {
if (lastChild->isInFlow() || lastChild->isFloatingPositioned())
return lastChild;
return lastChild->previousInFlowOrFloatingSibling();
}
return nullptr;
}
void ContainerBox::setFirstChild(Box& childBox)
{
m_firstChild = &childBox;
}
void ContainerBox::setLastChild(Box& childBox)
{
m_lastChild = &childBox;
}
void ContainerBox::appendChild(Box& childBox)
{
childBox.setParent(*this);
if (m_lastChild) {
m_lastChild->setNextSibling(childBox);
childBox.setPreviousSibling(*m_lastChild);
} else
m_firstChild = &childBox;
m_lastChild = &childBox;
}
}
}
#endif