Skip to content

Commit d76486d

Browse files
authored
Typo: NSMouseInRect compares .y to minx instead of minY (#5299)
This causes points to be misclassified,
1 parent c64b3fd commit d76486d

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

Sources/Foundation/NSGeometry.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,7 @@ public func NSPointInRect(_ aPoint: NSPoint, _ aRect: NSRect) -> Bool {
997997

998998
public func NSMouseInRect(_ aPoint: NSPoint, _ aRect: NSRect, _ flipped: Bool) -> Bool {
999999
if flipped {
1000-
return aPoint.x >= aRect.minX && aPoint.y >= aRect.minX && aPoint.x < aRect.maxX && aPoint.y < aRect.maxY
1000+
return aPoint.x >= aRect.minX && aPoint.y >= aRect.minY && aPoint.x < aRect.maxX && aPoint.y < aRect.maxY
10011001
}
10021002
return aPoint.x >= aRect.minX && aPoint.y > aRect.minY && aPoint.x < aRect.maxX && aPoint.y <= aRect.maxY
10031003
}

Tests/Foundation/TestNSGeometry.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,23 @@ class TestNSGeometry : XCTestCase {
982982
XCTAssertTrue(NSMouseInRect(p3, r1, true))
983983
}
984984

985+
func test_NSMouseInRect_FlippedUsesMinY() {
986+
// Regression: in flipped coordinates the Y checks must use minY/maxY, not minX.
987+
let r = NSMakeRect(CGFloat(10.0), CGFloat(1.0), CGFloat(2.0), CGFloat(4.0)) // y ∈ [1,5)
988+
989+
let topEdge = NSMakePoint(CGFloat(10.0), CGFloat(1.0))
990+
XCTAssertTrue(NSMouseInRect(topEdge, r, true))
991+
992+
let bottomEdge = NSMakePoint(CGFloat(10.0), CGFloat(5.0))
993+
XCTAssertFalse(NSMouseInRect(bottomEdge, r, true))
994+
995+
let inside = NSMakePoint(CGFloat(11.0), CGFloat(3.0))
996+
XCTAssertTrue(NSMouseInRect(inside, r, true))
997+
998+
let outsideX = NSMakePoint(CGFloat(13.0), CGFloat(3.0))
999+
XCTAssertFalse(NSMouseInRect(outsideX, r, true))
1000+
}
1001+
9851002
func test_NSContainsRect() {
9861003
let r1 = NSMakeRect(CGFloat(1.2), CGFloat(3.1), CGFloat(10.0), CGFloat(10.0))
9871004
let r2 = NSMakeRect(CGFloat(-2.3), CGFloat(-1.5), CGFloat(1.0), CGFloat(1.0))

0 commit comments

Comments
 (0)