diff options
author | Timothy Flynn <trflynn89@pm.me> | 2021-04-02 18:19:33 -0400 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-04-03 11:24:33 +0200 |
commit | fa9ba8bce53e24c983e2cac53d205e0ed8882b82 (patch) | |
tree | f2ad913e00e8aea6f9b498d3c8d8d0f2564cf207 /Userland/Libraries/LibWeb/Layout/Box.cpp | |
parent | bd5a91269f27ae1d8aac0027b57d9f2426bec5f4 (diff) | |
download | serenity-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.cpp | 17 |
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()); } } |