summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/Layout/Box.cpp
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2021-04-02 18:19:33 -0400
committerAndreas Kling <kling@serenityos.org>2021-04-03 11:24:33 +0200
commitfa9ba8bce53e24c983e2cac53d205e0ed8882b82 (patch)
treef2ad913e00e8aea6f9b498d3c8d8d0f2564cf207 /Userland/Libraries/LibWeb/Layout/Box.cpp
parentbd5a91269f27ae1d8aac0027b57d9f2426bec5f4 (diff)
downloadserenity-fa9ba8bce53e24c983e2cac53d205e0ed8882b82.zip
LibWeb: Support rendering background images with 'background-repeat'
Update the painting of background images for both <body> nodes and other non-initial nodes. Currently, only the following values are supported: repeat, repeat-x, repeat-y, no-repeat This also doesn't support the two-value syntax which allows for setting horizontal and vertical repetition separately.
Diffstat (limited to 'Userland/Libraries/LibWeb/Layout/Box.cpp')
-rw-r--r--Userland/Libraries/LibWeb/Layout/Box.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/Box.cpp b/Userland/Libraries/LibWeb/Layout/Box.cpp
index dd466a371a..eee05e81d7 100644
--- a/Userland/Libraries/LibWeb/Layout/Box.cpp
+++ b/Userland/Libraries/LibWeb/Layout/Box.cpp
@@ -49,6 +49,23 @@ void Box::paint(PaintContext& context, PaintPhase phase)
auto background_rect = enclosing_int_rect(padded_rect);
context.painter().fill_rect(background_rect, computed_values().background_color());
if (background_image() && background_image()->bitmap()) {
+ switch (computed_values().background_repeat()) {
+ case CSS::Repeat::Repeat:
+ // The background rect is already sized to align with 'repeat'.
+ break;
+ case CSS::Repeat::RepeatX:
+ background_rect.set_height(background_image()->bitmap()->height());
+ break;
+ case CSS::Repeat::RepeatY:
+ background_rect.set_width(background_image()->bitmap()->width());
+ break;
+ case CSS::Repeat::NoRepeat:
+ default: // FIXME: Support 'round' and 'square'
+ background_rect.set_width(background_image()->bitmap()->width());
+ background_rect.set_height(background_image()->bitmap()->height());
+ break;
+ }
+
context.painter().blit_tiled(background_rect, *background_image()->bitmap(), background_image()->bitmap()->rect());
}
}