width, height がマイナスだと交差判定関数は正しく動作しない
どのフレームワークでも同じような問題を抱えているようです。
NSPointInRect(NSPoint aPoint, NSRect aRect, BOOL flipped) や NSMouseInRect(NSPoint aPoint, NSRect aRect) といった交差判定用の関数は、判定領域 aRect の width, height がマイナスだと正しく判定できないようです。
NSPointInRect(NSMakePoint(50, 50), NSMakeRect(100, 100, -200, -200)); // NO NSMouseInRect(NSMakePoint(50, 50), NSMakeRect(100, 100, -200, -200), NO); // NO
したがって、width, height をプラスに変換する関数を別途定義する必要がありそうです。
static inline BOOL PointInRect(NSPoint aPoint, NSRect aRect) { if (aRect.size.width < 0) { aRect.size.width = -aRect.size.width; aRect.origin.x -= aRect.size.width; } if (aRect.size.height < 0) { aRect.size.height = -aRect.size.height; aRect.origin.y -= aRect.size.height; } return NSPointInRect(aPoint, aRect); } static inline BOOL MouseInRect(NSPoint aPoint, NSRect aRect, BOOL flipped) { if (aRect.size.width < 0) { aRect.size.width = -aRect.size.width; aRect.origin.x -= aRect.size.width; } if (aRect.size.height < 0) { aRect.size.height = -aRect.size.height; aRect.origin.y -= aRect.size.height; } return NSMouseInRect(aPoint, aRect, flipped); }