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);
}