using UnityEngine; using Unity.PlasticSCM.Editor.UI; namespace Unity.PlasticSCM.Editor.CloudDrive.Workspaces.DirectoryContent { internal static class ItemsPosition { internal static bool IsMousePositionInsideGrid( Vector2 mousePosition, Rect rect, bool isScrollbarVisible) { if (mousePosition.y < 0 || mousePosition.y > rect.height) return false; if (isScrollbarVisible) rect.width -= UnityConstants.SCROLLBAR_WIDTH; if (mousePosition.x < 0 || mousePosition.x > rect.width) return false; return true; } internal static bool IsMousePositionNearTopEdge( Vector2 mousePosition) { return mousePosition.y < 10; } internal static bool IsMousePositionNearBottomEdge( Vector2 mousePosition, Rect rect) { return mousePosition.y > rect.height - 10; } internal static int GetItemIndexFromMousePosition( Vector2 mousePosition, Vector2 itemSize, float scrollPosition, int columnsCount, int itemsCount) { Vector2 itemsGridContentMousePosition = new Vector2( mousePosition.x - DrawItemsGridView.GRID_AREA_MARGIN, mousePosition.y - DrawItemsGridView.GRID_AREA_MARGIN + scrollPosition); if (itemsGridContentMousePosition.x < 0 || itemsGridContentMousePosition.y < 0) return -1; if (itemsGridContentMousePosition.x > itemSize.x * columnsCount) return -1; int col = (int)(itemsGridContentMousePosition.x / itemSize.x); int row = (int)(itemsGridContentMousePosition.y / itemSize.y); if (row * columnsCount + col >= itemsCount) return -1; Vector2 itemMousePosition = new Vector2( itemsGridContentMousePosition.x - (col * itemSize.x), itemsGridContentMousePosition.y - (row * itemSize.y)); if (itemMousePosition.x < DrawExpandedTreeNode.PADDING || itemMousePosition.x > itemSize.x - DrawExpandedTreeNode.PADDING || itemMousePosition.y < DrawExpandedTreeNode.PADDING || itemMousePosition.y > itemSize.y - DrawExpandedTreeNode.PADDING) { return -1; } return row * columnsCount + col; } internal static float GetScrollPosition( int rowsCount, int columnsCount, int itemIndex, float itemHeight, float availableHeight, float scrollPosition) { int row = itemIndex / columnsCount; if (row == 0) return 0; if (row == rowsCount - 1) return itemHeight * rowsCount + 2 * DrawItemsGridView.GRID_AREA_MARGIN - availableHeight; float top = itemHeight * row + DrawItemsGridView.GRID_AREA_MARGIN; float bottom = top + itemHeight; float targetPosition = scrollPosition; if (bottom > availableHeight + scrollPosition) targetPosition = bottom - availableHeight; if (top < scrollPosition) targetPosition = top; return Mathf.Max(targetPosition, 0f); } } }