private static void OnProjectItemGUI(string guid, Rect position) { try { Profiler.BeginSample("Peek." + nameof(ProjectToolbars)); GuiCallback.Process(); var isList = position.height <= EditorGUIUtility.singleLineHeight; if (!isList) { return; } if (!PeekPlugin.Configuration.enableProjectToolbars) { return; } // Note: We can't properly handle sub-assets, because all we get is the GUID. var path = AssetDatabase.GUIDToAssetPath(guid); // Note: Force loading assets causes massive memory pressure on big projects if (!AssetDatabase.IsMainAssetAtPathLoaded(path)) { return; } position.xMin++; var fullRowPosition = position; fullRowPosition.xMax += 0; fullRowPosition.xMin -= 16; var target = AssetDatabase.LoadMainAssetAtPath(path); var isFocused = false; try { isFocused = ((EditorWindow)UnityEditorDynamic.ProjectBrowser.s_LastInteractedProjectBrowser).IsFocused(); } catch (Exception ex) { Debug.LogWarning($"Failed to determine if hierarchy window was focused:\n{ex}"); } TreeViewToolbars.OnItemGUI(toolbarControlProvider, target, position, fullRowPosition, isFocused); if (position.Contains(Event.current.mousePosition)) { EditorApplication.RepaintProjectWindow(); } } finally { Profiler.EndSample(); } }
private static void OnHierarchyItemGUI(int instanceID, Rect position) { GuiCallback.Process(); if (!PeekPlugin.Configuration.enableHierarchyToolbars) { return; } Profiler.BeginSample("Peek." + nameof(HierarchyToolbars)); var target = EditorUtility.InstanceIDToObject(instanceID); var fullRowPosition = position; fullRowPosition.xMax += 16; fullRowPosition.xMin -= 32; var isFocused = false; try { isFocused = UnityEditorDynamic.SceneHierarchyWindow.lastInteractedHierarchyWindow.sceneHierarchy.m_TreeView.HasFocus(); } catch (Exception ex) { Debug.LogWarning($"Failed to determine if hierarchy window was focused:\n{ex}"); } position.xMax -= Mathf.Abs(PeekPlugin.Configuration.hierarchyToolbarsOffset); TreeViewToolbars.OnItemGUI(toolbarControlProvider, target, position, fullRowPosition, isFocused); Profiler.EndSample(); if (fullRowPosition.Contains(Event.current.mousePosition)) { EditorApplication.RepaintHierarchyWindow(); } }
private void GameObjectRowContentGUI(Rect rowPosition, Rect contentPosition, GameObjectItem item, RowGUIArgs args) { var openPrefabButtonPosition = new Rect ( rowPosition.xMax - HierarchyStyles.openPrefabButton.fixedWidth - HierarchyStyles.openPrefabButton.margin.right, rowPosition.y, HierarchyStyles.openPrefabButton.fixedWidth, HierarchyStyles.openPrefabButton.fixedHeight ); if (item.canOpenPrefab) { if (GUI.Button(openPrefabButtonPosition, GUIContent.none, HierarchyStyles.openPrefabButton)) { GameObjectOperations.OpenPrefab(item.gameObject); parentWindow?.Close(); GUIUtility.ExitGUI(); return; } } contentPosition.xMax = openPrefabButtonPosition.xMin; var iconPosition = new Rect ( contentPosition.x, contentPosition.y, IconSize.Small, IconSize.Small ); if (PeekPlugin.Configuration.enablePreviewIcons && PreviewUtility.TryGetPreview(item.gameObject, out var preview) && preview != null) { GUI.DrawTexture(iconPosition, preview); } else if (item.icon != null) { GUI.DrawTexture(iconPosition, item.icon); } if (item.overlay != null) { GUI.DrawTexture(iconPosition, item.overlay); } var labelPosition = contentPosition; labelPosition.xMin += iconPosition.width; labelPosition.xMin += 2; var label = item.displayName; if (hasSearch) { label = SearchUtility.HighlightQuery(label, searchString); } if (e.type == EventType.Repaint) { item.style.Draw(labelPosition, label, false, false, args.selected, args.focused); } var target = item.gameObject; if (target == null) { return; } Object[] targets; if (args.selected) { targets = GetSelection().Where(i => FindItem(i, rootItem) is GameObjectItem).Select(i => FindGameObjectItem(i).gameObject).ToArray(); } else { targets = new[] { target.gameObject }; } TreeViewToolbars.Draw(false, toolbarControlProvider, target, targets, args.selected, args.label, contentPosition, rowPosition, HasFocus()); }