//============================================================================== void RectangleList::add (const Rectangle<int>& rect) { if (! rect.isEmpty()) { if (rects.size() == 0) { rects.add (rect); } else { bool anyOverlaps = false; int i; for (i = rects.size(); --i >= 0;) { Rectangle<int>& ourRect = rects.getReference (i); if (rect.intersects (ourRect)) { if (rect.contains (ourRect)) rects.remove (i); else if (! ourRect.reduceIfPartlyContainedIn (rect)) anyOverlaps = true; } } if (anyOverlaps && rects.size() > 0) { RectangleList r (rect); for (i = rects.size(); --i >= 0;) { const Rectangle<int>& ourRect = rects.getReference (i); if (rect.intersects (ourRect)) { r.subtract (ourRect); if (r.rects.size() == 0) return; } } for (i = r.getNumRectangles(); --i >= 0;) rects.add (r.rects.getReference (i)); } else { rects.add (rect); } } } }
void drawMouseOverCorners (Graphics& g, int w, int h) { RectangleList r (Rectangle<int> (0, 0, w, h)); r.subtract (Rectangle<int> (1, 1, w - 2, h - 2)); const int size = jmin (w / 3, h / 3, 12); r.subtract (Rectangle<int> (size, 0, w - size - size, h)); r.subtract (Rectangle<int> (0, size, w, h - size - size)); g.setColour (Colours::darkgrey); for (int i = r.getNumRectangles(); --i >= 0;) g.fillRect (r.getRectangle (i)); }