public void PrefabStageHeaderGUI(Rect rect)
{
var currentItem = StageNavigationManager.instance.currentItem;
if (currentItem.isMainStage)
{
Debug.LogError("Not a Prefab scene");
return;
}
var prefabStage = currentItem.prefabStage;
if (prefabStage == null)
{
return;
}
// Cache header text
if (m_PrefabHeaderContent == null || m_LastPrefabStageModifiedState == prefabStage.HasSceneBeenModified())
{
CachePrefabHeaderText(currentItem);
}
m_LastPrefabStageModifiedState = prefabStage.HasSceneBeenModified();
// Background
GUI.Label(rect, GUIContent.none, Styles.prefabHeaderBg);
// Back button
if (Event.current.type == EventType.Repaint)
{
Rect renderRect = new Rect(
rect.x + Styles.leftArrow.margin.left,
rect.y + (rect.height - Styles.leftArrow.fixedHeight) / 2,
Styles.leftArrow.fixedWidth,
Styles.leftArrow.fixedHeight);
Styles.leftArrow.Draw(renderRect, GUIContent.none, false, false, false, false);
}
Rect interactionRect = new Rect(
rect.x,
rect.y,
Styles.leftArrow.fixedWidth + Styles.leftArrow.margin.horizontal,
rect.height);
if (GUI.Button(interactionRect, GUIContent.none, GUIStyle.none))
{
StageNavigationManager.instance.NavigateBack(StageNavigationManager.Analytics.ChangeType.NavigateBackViaHierarchyHeaderLeftArrow);
}
// Prefab icon and name
EditorGUIUtility.SetIconSize(new Vector2(16, 16));
float width = TreeViewGUI.Styles.lineBoldStyle.CalcSize(m_PrefabHeaderContent).x;
float xStart = Styles.leftArrow.margin.left + Styles.leftArrow.fixedWidth;
float space = rect.width;
float offsetFromStart = Mathf.Max(xStart, (space - width) / 2);
Rect labelRect = new Rect(offsetFromStart, rect.y + 2, rect.width - xStart, 20);
if (GUI.Button(labelRect, m_PrefabHeaderContent, currentItem.valid ? BreadcrumbBar.DefaultStyles.labelBold : BreadcrumbBar.DefaultStyles.labelBoldMissing))
{
EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(prefabStage.prefabAssetPath));
}
EditorGUIUtility.SetIconSize(Vector2.zero);
// Version control overlay icons
if (VersionControl.Provider.isActive)
{
Rect overlayRect = labelRect;
overlayRect.width = 16;
overlayRect.y += (overlayRect.height - 16) / 2;
overlayRect.height = 16;
AssetsTreeViewGUI.OnIconOverlayGUI(AssetDatabase.LoadMainAssetAtPath(currentItem.prefabAssetPath).GetInstanceID(), overlayRect, true);
}
}