Skip to content

Commit

Permalink
[css-contain] Use StyleBuilderConverter instead of StyleBuilderCustom…
Browse files Browse the repository at this point in the history
… for contain property

https://bugs.webkit.org/show_bug.cgi?id=259248

Reviewed by Darin Adler.

This is just converting a CSSValue to OptionSet<Containment>, we don't need to use BuilderCustom for this.

* Source/WebCore/css/CSSProperties.json:
* Source/WebCore/style/StyleBuilderConverter.h:
(WebCore::Style::BuilderConverter::convertContain):
* Source/WebCore/style/StyleBuilderCustom.h:
(WebCore::Style::BuilderCustom::applyInitialContain): Deleted.
(WebCore::Style::BuilderCustom::applyInheritContain): Deleted.
(WebCore::Style::BuilderCustom::applyValueContain): Deleted.

Canonical link: https://commits.webkit.org/266087@main
  • Loading branch information
nt1m committed Jul 16, 2023
1 parent b41af45 commit 6e39851
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 54 deletions.
3 changes: 2 additions & 1 deletion Source/WebCore/css/CSSProperties.json
Original file line number Diff line number Diff line change
Expand Up @@ -6371,7 +6371,8 @@
},
"contain": {
"codegen-properties": {
"custom": "All",
"converter": "Contain",
"initial": "initialContainment",
"settings-flag": "cssContainmentEnabled",
"parser-function": "consumeContain",
"parser-grammar-unused": "none | strict | content | [ size || layout || paint ]",
Expand Down
39 changes: 39 additions & 0 deletions Source/WebCore/style/StyleBuilderConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ class BuilderConverter {
static GapLength convertGapLength(BuilderState&, const CSSValue&);

static OffsetRotation convertOffsetRotate(BuilderState&, const CSSValue&);

static OptionSet<Containment> convertContain(BuilderState&, const CSSValue&);
static Vector<AtomString> convertContainerName(BuilderState&, const CSSValue&);

static OptionSet<MarginTrimType> convertMarginTrim(BuilderState&, const CSSValue&);
Expand Down Expand Up @@ -1963,5 +1965,42 @@ inline std::optional<Length> BuilderConverter::convertBlockStepSize(BuilderState
return convertLength(builderState, value);
}

inline OptionSet<Containment> BuilderConverter::convertContain(BuilderState&, const CSSValue& value)
{
if (is<CSSPrimitiveValue>(value)) {
if (value.valueID() == CSSValueNone)
return RenderStyle::initialContainment();
if (value.valueID() == CSSValueStrict)
return RenderStyle::strictContainment();
return RenderStyle::contentContainment();
}

OptionSet<Containment> containment;
for (auto& item : downcast<CSSValueList>(value)) {
auto& value = downcast<CSSPrimitiveValue>(item);
switch (value.valueID()) {
case CSSValueSize:
containment.add(Containment::Size);
break;
case CSSValueInlineSize:
containment.add(Containment::InlineSize);
break;
case CSSValueLayout:
containment.add(Containment::Layout);
break;
case CSSValuePaint:
containment.add(Containment::Paint);
break;
case CSSValueStyle:
containment.add(Containment::Style);
break;
default:
ASSERT_NOT_REACHED();
break;
};
}
return containment;
}

} // namespace Style
} // namespace WebCore
53 changes: 0 additions & 53 deletions Source/WebCore/style/StyleBuilderCustom.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ class BuilderCustom {
DECLARE_PROPERTY_CUSTOM_HANDLERS(CaretColor);
DECLARE_PROPERTY_CUSTOM_HANDLERS(Clip);
DECLARE_PROPERTY_CUSTOM_HANDLERS(Color);
DECLARE_PROPERTY_CUSTOM_HANDLERS(Contain);
DECLARE_PROPERTY_CUSTOM_HANDLERS(ContainIntrinsicWidth);
DECLARE_PROPERTY_CUSTOM_HANDLERS(ContainIntrinsicHeight);
DECLARE_PROPERTY_CUSTOM_HANDLERS(Content);
Expand Down Expand Up @@ -134,8 +133,6 @@ class BuilderCustom {
static void applyInheritWebkitMaskImage(BuilderState&) { }

// Custom handling of inherit + value setting only.
static void applyInheritDisplay(BuilderState&);
static void applyValueDisplay(BuilderState&, CSSValue&);
static void applyInheritVerticalAlign(BuilderState&);
static void applyValueVerticalAlign(BuilderState&, CSSValue&);
static void applyInheritBaselineShift(BuilderState&);
Expand Down Expand Up @@ -1180,56 +1177,6 @@ inline void BuilderCustom::applyValueAspectRatio(BuilderState& builderState, CSS
builderState.style().setAspectRatio(width, height);
}

inline void BuilderCustom::applyInitialContain(BuilderState& builderState)
{
builderState.style().setContain(RenderStyle::initialContainment());
}

inline void BuilderCustom::applyInheritContain(BuilderState& builderState)
{
builderState.style().setContain(forwardInheritedValue(builderState.parentStyle().contain()));
}

inline void BuilderCustom::applyValueContain(BuilderState& builderState, CSSValue& value)
{
if (is<CSSPrimitiveValue>(value)) {
if (value.valueID() == CSSValueNone)
return builderState.style().setContain(RenderStyle::initialContainment());
if (value.valueID() == CSSValueStrict)
return builderState.style().setContain(RenderStyle::strictContainment());
return builderState.style().setContain(RenderStyle::contentContainment());
}

if (!is<CSSValueList>(value))
return;

OptionSet<Containment> containment;
auto& list = downcast<CSSValueList>(value);
for (auto& item : list) {
auto& value = downcast<CSSPrimitiveValue>(item);
switch (value.valueID()) {
case CSSValueSize:
containment.add(Containment::Size);
break;
case CSSValueInlineSize:
containment.add(Containment::InlineSize);
break;
case CSSValueLayout:
containment.add(Containment::Layout);
break;
case CSSValuePaint:
containment.add(Containment::Paint);
break;
case CSSValueStyle:
containment.add(Containment::Style);
break;
default:
break;
};
}
return builderState.style().setContain(containment);
}

inline void BuilderCustom::applyValueTextEmphasisStyle(BuilderState& builderState, CSSValue& value)
{
if (is<CSSValueList>(value)) {
Expand Down

0 comments on commit 6e39851

Please sign in to comment.