private void DrawBlockingListGUI() { var lineColor1 = new Color(0.3f, 0.3f, 0.3f, 0.5f); var lineColor2 = new Color(0.3f, 0.3f, 0.3f, 0.3f); var maxId = infos.Any() ? infos.Select(x => x.id).Max() : 0; var idLabelSize = EditorStyles.label.CalcSize(new GUIContent(maxId.ToString())); using (new EditorGUILayout.VerticalScope(listStyle)) { using (var scrollView = new EditorGUILayout.ScrollViewScope(listScrollPosition, GUILayout.ExpandWidth(true))) { for (var i = 0; i < infos.Length; i++) { var info = infos[i]; var color = i % 2 == 0 ? lineColor1 : lineColor2; if (selectionId == info.id) { color = SelectionLineColor; } var backgroundStyle = BackgroundStyle.Get(color); using (new EditorGUILayout.HorizontalScope(backgroundStyle)) { EditorGUILayout.LabelField(info.id.ToString(), GUILayout.Width(idLabelSize.x)); GUILayout.Space(4f); var size = EditorStyles.label.CalcSize(new GUIContent(info.from)); if (GUILayout.Button(info.from, EditorStyles.label, GUILayout.Width(size.x))) { selectionId = info.id; } } } listScrollPosition = scrollView.scrollPosition; } } }