1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:27:43 +00:00

LibWeb: Handle multiple backgrounds in StyleComputer

This actually involves doing *less*, because we now just pass the
StyleValueLists through instead of needing to grab their first layer's
value. :^)
This commit is contained in:
Sam Atkins 2021-11-11 11:52:33 +00:00 committed by Andreas Kling
parent c052457498
commit ecf1b7f977

View file

@ -293,7 +293,8 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
}
if (property_id == CSS::PropertyID::Background) {
auto set_single_background = [&](CSS::BackgroundStyleValue const& background) {
if (value.is_background()) {
auto& background = value.as_background();
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundColor, background.color(), document);
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundImage, background.image(), document);
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundPosition, background.position(), document);
@ -302,21 +303,6 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundAttachment, background.attachment(), document);
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundOrigin, background.origin(), document);
set_property_expanding_shorthands(style, CSS::PropertyID::BackgroundClip, background.clip(), document);
};
if (value.is_background()) {
auto& background = value.as_background();
set_single_background(background);
return;
}
if (value.is_value_list()) {
auto& background_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_list.is_empty()) {
auto& background = background_list.first();
if (background.is_background())
set_single_background(background.as_background());
}
return;
}
@ -331,110 +317,6 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
return;
}
if (property_id == CSS::PropertyID::BackgroundAttachment) {
if (value.is_value_list()) {
auto& background_attachment_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_attachment_list.is_empty()) {
auto& background_attachment = background_attachment_list.first();
style.set_property(CSS::PropertyID::BackgroundAttachment, background_attachment);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundAttachment, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundClip) {
if (value.is_value_list()) {
auto& background_clip_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_clip_list.is_empty()) {
auto& background_clip = background_clip_list.first();
style.set_property(CSS::PropertyID::BackgroundClip, background_clip);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundClip, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundImage) {
if (value.is_value_list()) {
auto& background_image_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_image_list.is_empty()) {
auto& background_image = background_image_list.first();
style.set_property(CSS::PropertyID::BackgroundImage, background_image);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundImage, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundOrigin) {
if (value.is_value_list()) {
auto& background_origin_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_origin_list.is_empty()) {
auto& background_origin = background_origin_list.first();
style.set_property(CSS::PropertyID::BackgroundOrigin, background_origin);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundOrigin, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundPosition) {
if (value.is_value_list()) {
auto& background_position_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_position_list.is_empty()) {
auto& background_position = background_position_list.first();
style.set_property(CSS::PropertyID::BackgroundPosition, background_position);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundPosition, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundRepeat) {
if (value.is_value_list()) {
auto& background_repeat_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_repeat_list.is_empty()) {
auto& background_repeat = background_repeat_list.first();
style.set_property(CSS::PropertyID::BackgroundRepeat, background_repeat);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundRepeat, value);
return;
}
if (property_id == CSS::PropertyID::BackgroundSize) {
if (value.is_value_list()) {
auto& background_size_list = value.as_value_list().values();
// FIXME: Handle multiple backgrounds.
if (!background_size_list.is_empty()) {
auto& background_size = background_size_list.first();
style.set_property(CSS::PropertyID::BackgroundSize, background_size);
}
return;
}
style.set_property(CSS::PropertyID::BackgroundSize, value);
return;
}
if (property_id == CSS::PropertyID::Margin) {
if (value.is_value_list()) {
auto& values_list = value.as_value_list();