summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@serenityos.org>2021-10-05 16:55:02 +0100
committerAndreas Kling <kling@serenityos.org>2021-10-05 18:49:47 +0200
commitfc7af21c7c0988ccbc786c5d88ff333175034a2f (patch)
treec409fcbadd80b11515e707a7d4c069eb6bb851ca /Userland/Libraries/LibWeb
parent3c192f492a9a5696d5e84ebf7d811bce3f3d28a4 (diff)
downloadserenity-fc7af21c7c0988ccbc786c5d88ff333175034a2f.zip
LibWeb: Make things aware of box-sizing
Of course, we don't actually *use* the box-sizing property yet, but the value is applied and shows up in the computed style.
Diffstat (limited to 'Userland/Libraries/LibWeb')
-rw-r--r--Userland/Libraries/LibWeb/CSS/ComputedValues.h4
-rw-r--r--Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp13
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleProperties.cpp16
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleProperties.h1
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleValue.h5
-rw-r--r--Userland/Libraries/LibWeb/Layout/Node.cpp2
6 files changed, 41 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/ComputedValues.h b/Userland/Libraries/LibWeb/CSS/ComputedValues.h
index da5b23b0ca..efa80e1e96 100644
--- a/Userland/Libraries/LibWeb/CSS/ComputedValues.h
+++ b/Userland/Libraries/LibWeb/CSS/ComputedValues.h
@@ -32,6 +32,7 @@ public:
static CSS::JustifyContent justify_content() { return CSS::JustifyContent::FlexStart; }
static CSS::AlignItems align_items() { return CSS::AlignItems::FlexStart; }
static CSS::Overflow overflow() { return CSS::Overflow::Visible; }
+ static CSS::BoxSizing box_sizing() { return CSS::BoxSizing::ContentBox; }
};
struct BorderData {
@@ -79,6 +80,7 @@ public:
Optional<float> const& opacity() const { return m_noninherited.opacity; }
CSS::JustifyContent justify_content() const { return m_noninherited.justify_content; }
Optional<BoxShadowData> const& box_shadow() const { return m_noninherited.box_shadow; }
+ CSS::BoxSizing box_sizing() const { return m_noninherited.box_sizing; }
const CSS::Length& width() const { return m_noninherited.width; }
const CSS::Length& min_width() const { return m_noninherited.min_width; }
const CSS::Length& max_width() const { return m_noninherited.max_width; }
@@ -176,6 +178,7 @@ protected:
Optional<float> opacity;
Optional<BoxShadowData> box_shadow {};
Vector<CSS::Transformation> transformations {};
+ CSS::BoxSizing box_sizing { InitialValues::box_sizing() };
} m_noninherited;
};
@@ -228,6 +231,7 @@ public:
void set_justify_content(CSS::JustifyContent value) { m_noninherited.justify_content = value; }
void set_box_shadow(Optional<BoxShadowData> value) { m_noninherited.box_shadow = move(value); }
void set_transformations(Vector<CSS::Transformation> value) { m_noninherited.transformations = move(value); }
+ void set_box_sizing(CSS::BoxSizing value) { m_noninherited.box_sizing = value; }
void set_fill(Color value) { m_inherited.fill = value; }
void set_stroke(Color value) { m_inherited.stroke = value; }
diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
index 89dbc77f35..6ab3388d13 100644
--- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
+++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
@@ -33,6 +33,17 @@ String ResolvedCSSStyleDeclaration::item(size_t index) const
return {};
}
+static CSS::ValueID to_css_value_id(CSS::BoxSizing value)
+{
+ switch (value) {
+ case CSS::BoxSizing::BorderBox:
+ return CSS::ValueID::BorderBox;
+ case CSS::BoxSizing::ContentBox:
+ return CSS::ValueID::ContentBox;
+ }
+ VERIFY_NOT_REACHED();
+}
+
static CSS::ValueID to_css_value_id(CSS::Display value)
{
switch (value) {
@@ -546,6 +557,8 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
}
case CSS::PropertyID::ListStyleType:
return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().list_style_type()));
+ case CSS::PropertyID::BoxSizing:
+ return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().box_sizing()));
case CSS::PropertyID::Invalid:
return IdentifierStyleValue::create(CSS::ValueID::Invalid);
case CSS::PropertyID::Custom:
diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
index ae022f05dc..872af5b496 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
@@ -728,4 +728,20 @@ Optional<CSS::BoxShadowData> StyleProperties::box_shadow() const
auto& box = value->as_box_shadow();
return { { box.offset_x(), box.offset_y(), box.blur_radius(), box.color() } };
}
+
+CSS::BoxSizing StyleProperties::box_sizing() const
+{
+ auto value = property(CSS::PropertyID::BoxSizing);
+ if (!value.has_value())
+ return {};
+
+ switch (value.value()->to_identifier()) {
+ case CSS::ValueID::BorderBox:
+ return CSS::BoxSizing::BorderBox;
+ case CSS::ValueID::ContentBox:
+ return CSS::BoxSizing::ContentBox;
+ default:
+ return {};
+ }
+}
}
diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.h b/Userland/Libraries/LibWeb/CSS/StyleProperties.h
index 36e1e26d56..b78782889f 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleProperties.h
+++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.h
@@ -66,6 +66,7 @@ public:
Optional<CSS::Repeat> background_repeat_x() const;
Optional<CSS::Repeat> background_repeat_y() const;
Optional<CSS::BoxShadowData> box_shadow() const;
+ CSS::BoxSizing box_sizing() const;
Vector<CSS::Transformation> transformations() const;
diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h
index f12954a846..a250980b99 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleValue.h
+++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h
@@ -39,6 +39,11 @@ enum class AlignItems {
Stretch,
};
+enum class BoxSizing {
+ BorderBox,
+ ContentBox,
+};
+
enum class Clear {
None,
Left,
diff --git a/Userland/Libraries/LibWeb/Layout/Node.cpp b/Userland/Libraries/LibWeb/Layout/Node.cpp
index 98d1437310..8602ea25bf 100644
--- a/Userland/Libraries/LibWeb/Layout/Node.cpp
+++ b/Userland/Libraries/LibWeb/Layout/Node.cpp
@@ -223,6 +223,8 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& specified_style)
m_background_image = bgimage.value()->as_image();
}
+ computed_values.set_box_sizing(specified_style.box_sizing());
+
// FIXME: BorderXRadius properties are now BorderRadiusStyleValues, so make use of that.
auto border_bottom_left_radius = specified_style.property(CSS::PropertyID::BorderBottomLeftRadius);
if (border_bottom_left_radius.has_value())