src/RectangleUtil.hh (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#ifndef RECTANGLEUTIL_HH #define RECTANGLEUTIL_HH namespace RectangleUtil { inline bool insideRectangle(int x, int y, int width, int height, int px, int py) { return px >= x && px < (x + width) && py >= y && py < (y + height); } /* * Determines if a point is inside a rectangle-like objects border. * @param rect A rectangle-like object that has accessors for x, y, width, and * height. * @param x * @param y * @param border The size of the border. * @returns true if point is inside the rectangle-like object. */ template <typename RectangleLike> bool insideBorder(const RectangleLike& rect, int x, int y, int border) { const int w = static_cast<int>(rect.width()) - border; const int h = static_cast<int>(rect.height()) - border; return insideRectangle(rect.x() + border, rect.y() + border, w, h, x, y); } /* * Determines if rectangle 'a' overlaps rectangle 'b' * @returns true if 'a' overlaps 'b' * * outside overlap situations * * a----a a----a a--------a b--------b * | | b----b | b-+--b | b----b | | a----a | * a----a | | a--+-a | | | | | | | | | * b----b b----b | b----b | | a----a | * a--------a b--------b * */ inline bool overlapRectangles( int ax, int ay, int awidth, int aheight, int bx, int by, int bwidth, int bheight) { bool do_not_overlap = ax > (bx + bwidth) || bx > (ax + awidth) || ay > (by + bheight) || by > (ay + aheight); return !do_not_overlap; } /* * Determines if rectangle 'a' overlaps rectangle 'b' * @param a - rectangle a * @param b - rectangle b * @returns true if 'a' overlaps 'b' */ template <typename RectangleLikeA, typename RectangleLikeB> bool overlapRectangles(const RectangleLikeA& a, const RectangleLikeB& b) { return overlapRectangles( a.x(), a.y(), a.width(), a.height(), b.x(), b.y(), b.width(), b.height()); } } // namespace RectangleUtil #endif // RECTANGLEUTIL_HH |