#pragma once
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include <wtf/Optional.h>
namespace WebCore {
namespace Layout {
struct ComputedVerticalMargin {
Optional<LayoutUnit> before;
Optional<LayoutUnit> after;
};
struct UsedVerticalMargin {
LayoutUnit before() const { return m_collapsedValues.before.valueOr(m_nonCollapsedValues.before); }
LayoutUnit after() const { return m_collapsedValues.after.valueOr(m_nonCollapsedValues.after); }
struct NonCollapsedValues {
LayoutUnit before;
LayoutUnit after;
};
NonCollapsedValues nonCollapsedValues() const { return m_nonCollapsedValues; }
struct CollapsedValues {
Optional<LayoutUnit> before;
Optional<LayoutUnit> after;
};
CollapsedValues collapsedValues() const { return m_collapsedValues; }
bool hasCollapsedValues() const { return m_collapsedValues.before || m_collapsedValues.after; }
void setCollapsedValues(CollapsedValues collapsedValues) { m_collapsedValues = collapsedValues; }
UsedVerticalMargin(NonCollapsedValues, CollapsedValues);
UsedVerticalMargin() = default;
~UsedVerticalMargin() = default;
private:
NonCollapsedValues m_nonCollapsedValues;
CollapsedValues m_collapsedValues;
};
struct ComputedHorizontalMargin {
Optional<LayoutUnit> start;
Optional<LayoutUnit> end;
};
struct UsedHorizontalMargin {
LayoutUnit start;
LayoutUnit end;
};
struct PositiveAndNegativeVerticalMargin {
struct Values {
Optional<LayoutUnit> positive;
Optional<LayoutUnit> negative;
};
Values before;
Values after;
};
inline UsedVerticalMargin::UsedVerticalMargin(UsedVerticalMargin::NonCollapsedValues nonCollapsedValues, UsedVerticalMargin::CollapsedValues collapsedValues)
: m_nonCollapsedValues(nonCollapsedValues)
, m_collapsedValues(collapsedValues)
{
}
}
}
#endif