private Rectangle computeBounds(List<Component> comps) {
		Point upperLeft = null;
		Point lowerRight = null;
		for (Component component : comps) {
			Point p1 = component.getLocationOnScreen();
			Dimension size = component.getSize();
			Point p2 = new Point(p1.x + size.width, p1.y + size.height);
			if (upperLeft == null) {
				upperLeft = p1;
				lowerRight = p2;
				continue;
			}
			upperLeft.x = Math.min(upperLeft.x, p1.x);
			upperLeft.y = Math.min(upperLeft.y, p1.y);
			lowerRight.x = Math.max(lowerRight.x, p2.x);
			lowerRight.y = Math.max(lowerRight.y, p2.y);
		}
		return new Rectangle(upperLeft.x, upperLeft.y, lowerRight.x - upperLeft.x,
			lowerRight.y - upperLeft.y);
	}
Captures the window, including decorations. This will use a {@link Robot} to create a screen
capture, which has the effect of getting all items within the window bounds. This method is
needed if you wish to capture child windows, like popups/hovers.

<P>
Other capture methods will not use the screen capture mechanism, but rather will directly
render the given component. In this case, subordinate windows will not be captured. For
example, see {@link #captureProvider(Class)}.

@param provider the provider's name
@param width the desired width
@param height the desired height
Ghidra/Features/Base/src/main/java/help/screenshot/AbstractScreenShotGenerator.java