summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@serenityos.org>2021-09-19 20:49:23 +0100
committerAndreas Kling <kling@serenityos.org>2021-09-19 22:53:35 +0200
commit0cedb7a7c47b8232cecb31c55b0ca556bcc13cec (patch)
treecc1afe058f2d0ef04fd81fefea38682c5e006fcb
parente1f3fb01468523c803d348372b03684b231a7b55 (diff)
downloadserenity-0cedb7a7c47b8232cecb31c55b0ca556bcc13cec.zip
LibWeb: Give InlineNodes borders :^)
-rw-r--r--Userland/Libraries/LibWeb/Layout/InlineNode.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/InlineNode.cpp b/Userland/Libraries/LibWeb/Layout/InlineNode.cpp
index e38cac640d..cebd859588 100644
--- a/Userland/Libraries/LibWeb/Layout/InlineNode.cpp
+++ b/Userland/Libraries/LibWeb/Layout/InlineNode.cpp
@@ -81,6 +81,31 @@ void InlineNode::paint(PaintContext& context, PaintPhase phase)
});
}
+ if (phase == PaintPhase::Border) {
+ auto top_left_border_radius = computed_values().border_top_left_radius();
+ auto top_right_border_radius = computed_values().border_top_right_radius();
+ auto bottom_right_border_radius = computed_values().border_bottom_right_radius();
+ auto bottom_left_border_radius = computed_values().border_bottom_left_radius();
+
+ auto borders_data = Painting::BordersData {
+ .top = computed_values().border_top(),
+ .right = computed_values().border_right(),
+ .bottom = computed_values().border_bottom(),
+ .left = computed_values().border_left(),
+ };
+
+ for_each_fragment([&](auto& fragment) {
+ // FIXME: This recalculates our (InlineNode's) absolute_rect() for every single fragment!
+ auto bordered_rect = fragment.absolute_rect();
+ bordered_rect.inflate(borders_data.top.width, borders_data.right.width, borders_data.bottom.width, borders_data.left.width);
+ auto border_radius_data = Painting::normalized_border_radius_data(*this, bordered_rect, top_left_border_radius, top_right_border_radius, bottom_right_border_radius, bottom_left_border_radius);
+
+ Painting::paint_all_borders(context, bordered_rect, border_radius_data, borders_data);
+
+ return IterationDecision::Continue;
+ });
+ }
+
if (phase == PaintPhase::Foreground && document().inspected_node() == dom_node()) {
// FIXME: This paints a double-thick border between adjacent fragments, where ideally there
// would be none. Once we implement non-rectangular outlines for the `outline` CSS