Переглянути джерело

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.
Aliaksandr Kalenik 1 рік тому
батько
коміт
2dd3b6fcff

+ 2 - 4
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;

+ 21 - 24
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<int>(), box_shadow_data.color);
+        if (!params.corner_radii.has_any_radius())
+            return painter.fill_rect(inner_bounding_rect.to_type<int>(), 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<int>(), box_shadow_data.color);
-        painter.fill_rect(right_rect.to_type<int>(), box_shadow_data.color);
-        painter.fill_rect(bottom_rect.to_type<int>(), box_shadow_data.color);
-        painter.fill_rect(left_rect.to_type<int>(), box_shadow_data.color);
-        painter.fill_rect(inner.to_type<int>(), box_shadow_data.color);
+        painter.fill_rect(top_rect.to_type<int>(), params.color);
+        painter.fill_rect(right_rect.to_type<int>(), params.color);
+        painter.fill_rect(bottom_rect.to_type<int>(), params.color);
+        painter.fill_rect(left_rect.to_type<int>(), params.color);
+        painter.fill_rect(inner.to_type<int>(), params.color);
     };
 
     auto shadows_bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRA8888, shadow_bitmap_rect.size().to_type<int>());
@@ -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<int>(),
-        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 };