diff options
author | Sam Atkins <atkinssj@serenityos.org> | 2022-02-08 15:33:27 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-08 17:45:51 +0100 |
commit | 103613a3a933a0213c88064f65b1d3e5ab48ec3b (patch) | |
tree | e25fbe7b0faf1f749e8353e8d7028653f8b8b112 /Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp | |
parent | 10c6c77b5c252ac88a5411b8188b8ee4ed190827 (diff) | |
download | serenity-103613a3a933a0213c88064f65b1d3e5ab48ec3b.zip |
LibWeb: Incorporate spread-distance into box-shadow rendering
We also pass whether the shadow goes inside or outside the element. Only
outer shadows are rendered currently, and inner ones may want to be
handled separately from them, as they will never interfere with each
other.
Diffstat (limited to 'Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp')
-rw-r--r-- | Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp b/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp index 5fa8eafdf5..95644b4c12 100644 --- a/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp +++ b/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp @@ -21,17 +21,20 @@ void paint_box_shadow(PaintContext& context, Gfx::IntRect const& content_rect, V // Note: Box-shadow layers are ordered front-to-back, so we paint them in reverse for (int layer_index = box_shadow_layers.size() - 1; layer_index >= 0; layer_index--) { auto& box_shadow_data = box_shadow_layers[layer_index]; + // FIXME: Paint inset shadows. + if (box_shadow_data.placement != BoxShadowPlacement::Outer) + continue; Gfx::IntRect bitmap_rect = { 0, 0, - content_rect.width() + 4 * box_shadow_data.blur_radius, - content_rect.height() + 4 * box_shadow_data.blur_radius + content_rect.width() + (2 * box_shadow_data.spread_distance) + (4 * box_shadow_data.blur_radius), + content_rect.height() + (2 * box_shadow_data.spread_distance) + (4 * box_shadow_data.blur_radius) }; Gfx::IntPoint blur_rect_position = { - content_rect.x() - 2 * box_shadow_data.blur_radius + box_shadow_data.offset_x, - content_rect.y() - 2 * box_shadow_data.blur_radius + box_shadow_data.offset_y + content_rect.x() - box_shadow_data.spread_distance - (2 * box_shadow_data.blur_radius) + box_shadow_data.offset_x, + content_rect.y() - box_shadow_data.spread_distance - (2 * box_shadow_data.blur_radius) + box_shadow_data.offset_y }; if (bitmap_rect.is_empty()) @@ -45,7 +48,7 @@ void paint_box_shadow(PaintContext& context, Gfx::IntRect const& content_rect, V auto new_bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors(); Gfx::Painter painter(*new_bitmap); - painter.fill_rect({ { 2 * box_shadow_data.blur_radius, 2 * box_shadow_data.blur_radius }, content_rect.size() }, box_shadow_data.color); + painter.fill_rect({ { 2 * box_shadow_data.blur_radius, 2 * box_shadow_data.blur_radius }, { content_rect.width() + (2 * box_shadow_data.spread_distance), content_rect.height() + (2 * box_shadow_data.spread_distance) } }, box_shadow_data.color); Gfx::FastBoxBlurFilter filter(*new_bitmap); filter.apply_three_passes(box_shadow_data.blur_radius); |