From 2dd3b6fcffce3b40ce8d0fe6333cd85b3464609e Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 7 Jun 2024 15:42:35 +0300 Subject: [PATCH] LibWeb: Remove unused members in PaintOuterBoxShadowParams This struct had all members in CSSPixels and DevicePixels, but only the latter are needed for painting. Shrinks PaintOuterBoxShadowParams from 144 bytes to 72 bytes. --- .../Painting/PaintOuterBoxShadowParams.h | 6 +-- .../LibWeb/Painting/ShadowPainting.cpp | 45 +++++++++---------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/Userland/Libraries/LibWeb/Painting/PaintOuterBoxShadowParams.h b/Userland/Libraries/LibWeb/Painting/PaintOuterBoxShadowParams.h index a11e4d102be..790b9782ff1 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintOuterBoxShadowParams.h +++ b/Userland/Libraries/LibWeb/Painting/PaintOuterBoxShadowParams.h @@ -12,10 +12,8 @@ namespace Web::Painting { struct PaintOuterBoxShadowParams { - RecordingPainter& painter; - CSSPixelRect content_rect; - BorderRadiiData border_radii; - ShadowData box_shadow_data; + Gfx::Color color; + ShadowPlacement placement; CornerRadii corner_radii; DevicePixels offset_x; DevicePixels offset_y; diff --git a/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp b/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp index fc792fef162..c5ab22f410d 100644 --- a/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp +++ b/Userland/Libraries/LibWeb/Painting/ShadowPainting.cpp @@ -57,20 +57,20 @@ void paint_inner_box_shadow(Gfx::Painter& painter, PaintOuterBoxShadowParams par auto top_right_corner = params.corner_radii.top_right; auto bottom_right_corner = params.corner_radii.bottom_right; auto bottom_left_corner = params.corner_radii.bottom_left; - shadow_painter.fill_rect(outer_shadow_rect, params.box_shadow_data.color.with_alpha(0xff)); - if (params.border_radii.has_any_radius()) { - shadow_aa_painter.fill_rect_with_rounded_corners(inner_shadow_rect, params.box_shadow_data.color.with_alpha(0xff), + shadow_painter.fill_rect(outer_shadow_rect, params.color.with_alpha(0xff)); + if (params.corner_radii.has_any_radius()) { + shadow_aa_painter.fill_rect_with_rounded_corners(inner_shadow_rect, params.color.with_alpha(0xff), top_left_corner, top_right_corner, bottom_right_corner, bottom_left_corner, Gfx::AntiAliasingPainter::BlendMode::AlphaSubtract); } else { shadow_painter.clear_rect(inner_shadow_rect, Color::Transparent); } Gfx::StackBlurFilter filter(*shadow_bitmap); - filter.process_rgba(blur_radius.value(), params.box_shadow_data.color); + filter.process_rgba(blur_radius.value(), params.color); Gfx::PainterStateSaver save { painter }; painter.add_clip_rect(device_content_rect_int); painter.blit({ device_content_rect_int.left() - blur_radius.value(), device_content_rect_int.top() - blur_radius.value() }, - *shadow_bitmap, shadow_bitmap->rect(), params.box_shadow_data.color.alpha() / 255.); + *shadow_bitmap, shadow_bitmap->rect(), params.color.alpha() / 255.); } struct OuterBoxShadowMetrics { @@ -306,9 +306,7 @@ Gfx::IntRect get_outer_box_shadow_bounding_rect(PaintOuterBoxShadowParams params void paint_outer_box_shadow(Gfx::Painter& painter, PaintOuterBoxShadowParams params) { - auto const& box_shadow_data = params.box_shadow_data; auto const& device_content_rect = params.device_content_rect; - auto const& border_radii = params.border_radii; auto const& top_left_corner = params.corner_radii.top_left; auto const& top_right_corner = params.corner_radii.top_right; @@ -366,14 +364,14 @@ void paint_outer_box_shadow(Gfx::Painter& painter, PaintOuterBoxShadowParams par }; // If there's no blurring, nor rounded corners, we can save a lot of effort. - if (blur_radius == 0 && !border_radii.has_any_radius()) { - fill_rect_masked(painter, non_blurred_shadow_rect.translated(offset_x, offset_y), device_content_rect, box_shadow_data.color); + if (blur_radius == 0 && !params.corner_radii.has_any_radius()) { + fill_rect_masked(painter, non_blurred_shadow_rect.translated(offset_x, offset_y), device_content_rect, params.color); return; } auto paint_shadow_infill = [&] { - if (!params.border_radii.has_any_radius()) - return painter.fill_rect(inner_bounding_rect.to_type(), box_shadow_data.color); + if (!params.corner_radii.has_any_radius()) + return painter.fill_rect(inner_bounding_rect.to_type(), params.color); auto top_left_inner_width = top_left_corner_rect.width() - blurred_edge_thickness; auto top_left_inner_height = top_left_corner_rect.height() - blurred_edge_thickness; @@ -415,11 +413,11 @@ void paint_outer_box_shadow(Gfx::Painter& painter, PaintOuterBoxShadowParams par inner_bounding_rect.height() - top_rect.height() - bottom_rect.height() }; - painter.fill_rect(top_rect.to_type(), box_shadow_data.color); - painter.fill_rect(right_rect.to_type(), box_shadow_data.color); - painter.fill_rect(bottom_rect.to_type(), box_shadow_data.color); - painter.fill_rect(left_rect.to_type(), box_shadow_data.color); - painter.fill_rect(inner.to_type(), box_shadow_data.color); + painter.fill_rect(top_rect.to_type(), params.color); + painter.fill_rect(right_rect.to_type(), params.color); + painter.fill_rect(bottom_rect.to_type(), params.color); + painter.fill_rect(left_rect.to_type(), params.color); + painter.fill_rect(inner.to_type(), params.color); }; auto shadows_bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRA8888, shadow_bitmap_rect.size().to_type()); @@ -433,9 +431,9 @@ void paint_outer_box_shadow(Gfx::Painter& painter, PaintOuterBoxShadowParams par aa_corner_painter.fill_rect_with_rounded_corners( shadow_bitmap_rect.shrunken(double_radius, double_radius, double_radius, double_radius).to_type(), - box_shadow_data.color, top_left_shadow_corner, top_right_shadow_corner, bottom_right_shadow_corner, bottom_left_shadow_corner); + params.color, top_left_shadow_corner, top_right_shadow_corner, bottom_right_shadow_corner, bottom_left_shadow_corner); Gfx::StackBlurFilter filter(*shadow_bitmap); - filter.process_rgba(blur_radius.value(), box_shadow_data.color); + filter.process_rgba(blur_radius.value(), params.color); auto paint_shadow = [&](DevicePixelRect clip_rect) { Gfx::PainterStateSaver save { painter }; @@ -552,10 +550,8 @@ void paint_box_shadow(PaintContext& context, } auto params = PaintOuterBoxShadowParams { - .painter = context.recording_painter(), - .content_rect = bordered_content_rect, - .border_radii = border_radii, - .box_shadow_data = box_shadow_data, + .color = box_shadow_data.color, + .placement = box_shadow_data.placement, .corner_radii = CornerRadii { .top_left = border_radii.top_left.as_corner(context), .top_right = border_radii.top_right.as_corner(context), @@ -569,8 +565,9 @@ void paint_box_shadow(PaintContext& context, }; if (box_shadow_data.placement == ShadowPlacement::Inner) { - params.border_radii.shrink(borders_data.top.width, borders_data.right.width, borders_data.bottom.width, borders_data.left.width); - ScopedCornerRadiusClip corner_clipper { context, device_content_rect, params.border_radii, CornerClip::Outside }; + auto shrinked_border_radii = border_radii; + shrinked_border_radii.shrink(borders_data.top.width, borders_data.right.width, borders_data.bottom.width, borders_data.left.width); + ScopedCornerRadiusClip corner_clipper { context, device_content_rect, shrinked_border_radii, CornerClip::Outside }; context.recording_painter().paint_inner_box_shadow_params(params); } else { ScopedCornerRadiusClip corner_clipper { context, device_content_rect, border_radii, CornerClip::Inside };