Issue #2124 - Adjust overflow parser to handle two values

This commit is contained in:
erixreyes 2025-07-05 05:39:25 +08:00 • committed by roytam1
commit f4ffb1ec16

View file

@ -15847,25 +15847,41 @@ CSSParserImpl::ParseOutline()
bool bool
CSSParserImpl::ParseOverflow() CSSParserImpl::ParseOverflow()
{ {
nsCSSValue overflow; nsCSSValue overflowX, overflowY;
if (!ParseSingleTokenVariant(overflow, VARIANT_HK, // Parse the first value
nsCSSProps::kOverflowKTable)) { if (!ParseSingleTokenVariant(overflowX, VARIANT_HK, nsCSSProps::kOverflowKTable)) {
return false; return false;
} }
nsCSSValue overflowX(overflow); // Try to parse a second value (optional)
nsCSSValue overflowY(overflow); bool haveSecond = ParseSingleTokenVariant(overflowY, VARIANT_HK, nsCSSProps::kOverflowKTable);
if (eCSSUnit_Enumerated == overflow.GetUnit()) if (!haveSecond) {
switch(overflow.GetIntValue()) { overflowY = overflowX;
case NS_STYLE_OVERFLOW_SCROLLBARS_HORIZONTAL: }
overflowX.SetIntValue(NS_STYLE_OVERFLOW_SCROLL, eCSSUnit_Enumerated);
overflowY.SetIntValue(NS_STYLE_OVERFLOW_HIDDEN, eCSSUnit_Enumerated); // Handle legacy scrollbars keywords for each axis
break; auto fix_legacy = [](nsCSSValue& v, bool isX) {
case NS_STYLE_OVERFLOW_SCROLLBARS_VERTICAL: if (v.GetUnit() == eCSSUnit_Enumerated) {
overflowX.SetIntValue(NS_STYLE_OVERFLOW_HIDDEN, eCSSUnit_Enumerated); switch (v.GetIntValue()) {
overflowY.SetIntValue(NS_STYLE_OVERFLOW_SCROLL, eCSSUnit_Enumerated); case NS_STYLE_OVERFLOW_SCROLLBARS_HORIZONTAL:
break; if (isX) {
v.SetIntValue(NS_STYLE_OVERFLOW_SCROLL, eCSSUnit_Enumerated);
} else {
v.SetIntValue(NS_STYLE_OVERFLOW_HIDDEN, eCSSUnit_Enumerated);
}
break;
case NS_STYLE_OVERFLOW_SCROLLBARS_VERTICAL:
if (isX) {
v.SetIntValue(NS_STYLE_OVERFLOW_HIDDEN, eCSSUnit_Enumerated);
} else {
v.SetIntValue(NS_STYLE_OVERFLOW_SCROLL, eCSSUnit_Enumerated);
}
break;
}
} }
};
fix_legacy(overflowX, true);
fix_legacy(overflowY, false);
AppendValue(eCSSProperty_overflow_x, overflowX); AppendValue(eCSSProperty_overflow_x, overflowX);
AppendValue(eCSSProperty_overflow_y, overflowY); AppendValue(eCSSProperty_overflow_y, overflowY);
return true; return true;