diff --git a/Tests/LibGfx/TestRect.cpp b/Tests/LibGfx/TestRect.cpp index 3d6ccc2d20f..dfeeb3b20bf 100644 --- a/Tests/LibGfx/TestRect.cpp +++ b/Tests/LibGfx/TestRect.cpp @@ -45,3 +45,14 @@ TEST_CASE(rect_shatter) EXPECT_EQ(glass_plate.size().area() - hammer.size().area(), total_shard_area); } + +TEST_CASE(rect_closest_to) +{ + Gfx::IntRect const screen_rect = { 0, 0, 960, 540 }; + Gfx::Point p = { 460, 592 }; // point is below the rect + Gfx::Point closest = screen_rect.closest_to(p); + EXPECT_EQ(screen_rect.side(closest), Gfx::IntRect::Side::Bottom); + p = { 960, 0 }; // point exactly on top right corner + closest = screen_rect.closest_to(p); + EXPECT_EQ(screen_rect.side(closest), Gfx::IntRect::Side::Top); +} diff --git a/Userland/Libraries/LibGfx/Rect.h b/Userland/Libraries/LibGfx/Rect.h index ffb009ca532..37584d11a59 100644 --- a/Userland/Libraries/LibGfx/Rect.h +++ b/Userland/Libraries/LibGfx/Rect.h @@ -656,8 +656,8 @@ public: } }; - check_distance({ top_left(), top_right() }); - check_distance({ bottom_left(), bottom_right() }); + check_distance({ top_left(), top_right().moved_left(1) }); + check_distance({ bottom_left().moved_up(1), bottom_right().translated(-1) }); if (height() > 2) { check_distance({ { x(), y() + 1 }, { x(), bottom() - 2 } }); check_distance({ { right() - 1, y() + 1 }, { right() - 1, bottom() - 2 } });