// Copyright 2012 Citrix Systems, Inc. Licensed under the // Apache License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. Citrix Systems, Inc. // reserves all rights not expressly granted by the License. // You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.consoleproxy.util; import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; public class Region { private Rectangle bound; private List<Rectangle> rectList; public Region() { bound = new Rectangle(0, 0, 0, 0); rectList = new ArrayList<Rectangle>(); } public Region(Rectangle rect) { bound = new Rectangle(rect.x, rect.y, rect.width, rect.height); rectList = new ArrayList<Rectangle>(); rectList.add(rect); } public Rectangle getBound() { return bound; } public void clearBound() { assert(rectList.size() == 0); bound.x = bound.y = bound.width = bound.height = 0; } public List<Rectangle> getRectangles() { return rectList; } public boolean add(Rectangle rect) { if(bound.isEmpty()) { assert(rectList.size() == 0); bound.x = rect.x; bound.y = rect.y; bound.width = rect.width; bound.height = rect.height; rectList.add(rect); return true; } Rectangle rcInflated = new Rectangle(rect.x - 1, rect.y- 1, rect.width + 2, rect.height + 2); if(!bound.intersects(rcInflated)) return false; for(Rectangle r : rectList) { if(r.intersects(rcInflated)) { if(!r.contains(rect)) { enlargeBound(rect); rectList.add(rect); return true; } } } return false; } private void enlargeBound(Rectangle rect) { int boundLeft = Math.min(bound.x, rect.x); int boundTop = Math.min(bound.y, rect.y); int boundRight = Math.max(bound.x + bound.width, rect.x + rect.width); int boundBottom = Math.max(bound.y + bound.height, rect.y + rect.height); bound.x = boundLeft; bound.y = boundTop; bound.width = boundRight - boundLeft; bound.height = boundBottom - boundTop; } }