using System.Collections.Generic; namespace UnityEngine.UI { /// /// Utility class to help when clipping using IClipper. /// public static class Clipping { /// /// Find the Rect to use for clipping. /// Given the input RectMask2ds find a rectangle that is the overlap of all the inputs. /// /// RectMasks to build the overlap rect from. /// Was there a valid Rect found. /// The final compounded overlapping rect public static Rect FindCullAndClipWorldRect(List rectMaskParents, out bool validRect) { if (rectMaskParents.Count == 0) { validRect = false; return new Rect(); } Rect current = rectMaskParents[0].canvasRect; Vector4 offset = rectMaskParents[0].padding; float xMin = current.xMin + offset.x; float xMax = current.xMax - offset.z; float yMin = current.yMin + offset.y; float yMax = current.yMax - offset.w; var rectMaskParentsCount = rectMaskParents.Count; for (var i = 1; i < rectMaskParentsCount; ++i) { current = rectMaskParents[i].canvasRect; offset = rectMaskParents[i].padding; if (xMin < current.xMin + offset.x) xMin = current.xMin + offset.x; if (yMin < current.yMin + offset.y) yMin = current.yMin + offset.y; if (xMax > current.xMax - offset.z) xMax = current.xMax - offset.z; if (yMax > current.yMax - offset.w) yMax = current.yMax - offset.w; } validRect = xMax > xMin && yMax > yMin; return validRect ? new Rect(xMin, yMin, xMax - xMin, yMax - yMin) : new Rect(); } } }