Exemple #1
0
        private void DrawItems(GUICell cells)
        {
            int startRowIndex = Mathf.CeilToInt(mScrolledViewRect.yMin / 16.0f);
            int endRowIndex   = Mathf.CeilToInt(mScrolledViewRect.yMax / 16.0f);

            //int startColumnIndex = Mathf.CeilToInt(mScrolledViewRect.xMin / 16.0f);
            //int endColumnIndex = Mathf.CeilToInt(mScrolledViewRect.xMax / 16.0f);

            for (int i = 0; i < cells.Rows.Count; ++i)
            {
                if (i >= cells.Rows.Count)
                {
                    break;
                }
                var row = cells.Rows[i];

                Rect rect = new Rect(0, i * 16, 0, 16);

                for (int j = 0; j < row.Columns.Count; ++j)
                {
                    var column = row.Columns[j];
                    var size   = GUI.skin.label.CalcSize(new GUIContent(column.StringValue));
                    mColumnWidth[j] = Mathf.Max(size.x + 20, mColumnWidth[j]);
                    rect.width      = mColumnWidth[j];
                    if (mScrolledViewRect.Overlaps(new Rect(rect.position, size)))
                    {
                        ++mDebugDrawCount;
                        GUI.SetNextControlName("cell." + i + "." + j);
                        EditorGUI.SelectableLabel(rect, column.StringValue);
                    }
                    rect.x += rect.width;
                }
            }
        }
Exemple #2
0
        public void DrawCells(Rect rect, GUICell cells)
        {
            GUI.Box(rect, GUIContent.none);
            Rect scrollViewContentRect = new Rect(0, 0, rect.width - 20, cells.RowCount * 16);

            Utility.ListAutoResize(mColumnWidth, cells.ColumnCount, DefatultWidth);

            Rect clipRect   = new Rect(rect.x, rect.y, rect.width, 20);
            Rect columnRect = clipRect;

            columnRect.x     = -ScrollPosition.x;
            columnRect.y     = 0;
            columnRect.width = TotalColumnWidth;

            GUI.Button(new Rect(columnRect.y - 20, 0, 120, 20), mDebugDrawCount.ToString(), EditorStyles.miniButtonMid);
            mDebugDrawCount = 0;
            using (new GUI.ClipScope(clipRect))
            {
                Rect hitRect = new Rect(0, 0, rect.width, clipRect.height);
                // カラム名の描画
                for (int i = 0; i < cells.ColumnCount; ++i)
                {
                    columnRect.width = mColumnWidth[i];
                    if (hitRect.Overlaps(columnRect))
                    {
                        ++mDebugDrawCount;
                        GUI.Button(columnRect, cells.ColumnNames[i], EditorStyles.miniButtonMid);
                    }
                    columnRect.x += mColumnWidth[i];
                }
            }
            scrollViewContentRect.width = TotalColumnWidth - 40;

            Rect viewRect = new RectOffset(0, 0, (int)columnRect.height, 0).Remove(rect);

            ViewSize = viewRect.size - new Vector2(20, 20);
            // セルの描画
            using (var scrollView = new GUI.ScrollViewScope(viewRect, ScrollPosition, scrollViewContentRect))
            {
                DrawItems(cells);

                // スクロール座標の更新
                ScrollPosition = scrollView.scrollPosition;
            }


            clipRect         = new Rect(rect.x, rect.y, rect.width - 20, viewRect.height + 1);
            columnRect.x     = -ScrollPosition.x;
            columnRect.y     = 0;
            columnRect.width = TotalColumnWidth;
            using (new GUI.ClipScope(clipRect))
            {
                Rect hitRect = new Rect(0, 0, rect.width, clipRect.height);
                Handles.BeginGUI();
                Handles.color = Color.gray;
                for (int i = 0; i < cells.ColumnCount; ++i)
                {
                    columnRect.width = mColumnWidth[i];
                    if (hitRect.Contains(new Vector2(columnRect.x + 0.5f, 1)))
                    {
                        ++mDebugDrawCount;
                        Handles.DrawLine(new Vector2(columnRect.x + 0.5f, 1), new Vector2(columnRect.x + 0.5f, viewRect.height + 0.5f));
                    }
                    columnRect.x += mColumnWidth[i];
                }
                Handles.color = Color.white;
                Handles.EndGUI();
            }
        }