From fb1a151fe34e0dfb6670aa802f2dff01ac6b81ca Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 19 May 2023 13:33:50 +0200 Subject: [PATCH] Revert "LibGfx: Remove clip check in `Painter::do_draw_scaled_bitmap`" This reverts commit 2959c2f2eb2c52929ce92a33d2af2367bede40aa. --- Userland/Libraries/LibGfx/Painter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp index f932c6cde9..5771b6f6d6 100644 --- a/Userland/Libraries/LibGfx/Painter.cpp +++ b/Userland/Libraries/LibGfx/Painter.cpp @@ -1273,13 +1273,19 @@ ALWAYS_INLINE static void do_draw_scaled_bitmap(Gfx::Bitmap& target, IntRect con i64 vscale = src_rect.height() * shift / dst_rect.height(); i64 src_left = src_rect.left() * shift; i64 src_top = src_rect.top() * shift; + i64 clipped_src_bottom_shifted = (clipped_src_rect.y() + clipped_src_rect.height()) * shift; + i64 clipped_src_right_shifted = (clipped_src_rect.x() + clipped_src_rect.width()) * shift; for (int y = clipped_rect.top(); y <= clipped_rect.bottom(); ++y) { auto* scanline = reinterpret_cast(target.scanline(y)); auto desired_y = (y - dst_rect.y()) * vscale + src_top; + if (desired_y < clipped_src_rect.top() || desired_y > clipped_src_bottom_shifted) + continue; for (int x = clipped_rect.left(); x <= clipped_rect.right(); ++x) { auto desired_x = (x - dst_rect.x()) * hscale + src_left; + if (desired_x < clipped_src_rect.left() || desired_x > clipped_src_right_shifted) + continue; Color src_pixel; if constexpr (scaling_mode == Painter::ScalingMode::BilinearBlend) {