protected override void OldOnGUI() { const float space = 10; const float largeSpace = 20; const float standardButtonWidth = 32; const float dropdownWidth = 80; const float playPauseStopWidth = 140; InitializeToolIcons(); bool isOrWillEnterPlaymode = EditorApplication.isPlayingOrWillChangePlaymode; GUI.color = isOrWillEnterPlaymode ? HostView.kPlayModeDarken : Color.white; if (Event.current.type == EventType.Repaint) { Styles.appToolbar.Draw(new Rect(0, 0, position.width, position.height), false, false, false, false); } // Position left aligned controls controls - start from left to right. Rect pos = new Rect(0, 0, 0, 0); ReserveWidthRight(space, ref pos); ReserveWidthRight(standardButtonWidth * s_ShownToolIcons.Length, ref pos); DoToolButtons(EditorToolGUI.GetThickArea(pos)); ReserveWidthRight(largeSpace, ref pos); int playModeControlsStart = Mathf.RoundToInt((position.width - playPauseStopWidth) / 2); pos.x += pos.width; pos.width = (playModeControlsStart - pos.x) - largeSpace; DoToolSettings(EditorToolGUI.GetThickArea(pos)); // Position centered controls. pos = new Rect(playModeControlsStart, 0, 240, 0); if (ModeService.HasCapability(ModeCapability.Playbar, true)) { GUILayout.BeginArea(EditorToolGUI.GetThickArea(pos)); GUILayout.BeginHorizontal(); { if (!ModeService.Execute("gui_playbar", isOrWillEnterPlaymode)) { DoPlayButtons(isOrWillEnterPlaymode); } } GUILayout.EndHorizontal(); GUILayout.EndArea(); } // Position right aligned controls controls - start from right to left. pos = new Rect(position.width, 0, 0, 0); // Right spacing side ReserveWidthLeft(space, ref pos); ReserveWidthLeft(dropdownWidth, ref pos); DoLayoutDropDown(EditorToolGUI.GetThinArea(pos)); if (ModeService.HasCapability(ModeCapability.Layers, true)) { ReserveWidthLeft(space, ref pos); ReserveWidthLeft(dropdownWidth, ref pos); DoLayersDropDown(EditorToolGUI.GetThinArea(pos)); } ReserveWidthLeft(space, ref pos); ReserveWidthLeft(dropdownWidth, ref pos); if (EditorGUI.DropdownButton(EditorToolGUI.GetThinArea(pos), s_AccountContent, FocusType.Passive, Styles.dropdown)) { ShowUserMenu(EditorToolGUI.GetThinArea(pos)); } ReserveWidthLeft(space, ref pos); ReserveWidthLeft(32, ref pos); if (GUI.Button(EditorToolGUI.GetThinArea(pos), s_CloudIcon)) { UnityConnectServiceCollection.instance.ShowService(HubAccess.kServiceName, true, "cloud_icon"); // Should show hub when it's done } foreach (SubToolbar subToolbar in s_SubToolbars) { ReserveWidthLeft(space, ref pos); ReserveWidthLeft(subToolbar.Width, ref pos); subToolbar.OnGUI(EditorToolGUI.GetThinArea(pos)); } if (ModeService.modeCount > 1) { EditorGUI.BeginChangeCheck(); ReserveWidthLeft(space, ref pos); ReserveWidthLeft(dropdownWidth, ref pos); var selectedModeIndex = EditorGUI.Popup(EditorToolGUI.GetThinArea(pos), ModeService.currentIndex, ModeService.modeNames, Styles.dropdown); if (EditorGUI.EndChangeCheck()) { EditorApplication.delayCall += () => ModeService.ChangeModeByIndex(selectedModeIndex); GUIUtility.ExitGUI(); } } EditorGUI.ShowRepaints(); Highlighter.ControlHighlightGUI(this); }
internal static void Handle(Rect position, string text) { Highlighter.INTERNAL_CALL_Handle(ref position, text); }
internal static void internal_set_activeRect(Rect value) { Highlighter.INTERNAL_CALL_internal_set_activeRect(ref value); }
/// <summary> /// <para>Highlights an element in the editor.</para> /// </summary> /// <param name="windowTitle">The title of the window the element is inside.</param> /// <param name="text">The text to identify the element with.</param> /// <param name="mode">Optional mode to specify how to search for the element.</param> /// <returns> /// <para>true if the requested element was found; otherwise false.</para> /// </returns> public static bool Highlight(string windowTitle, string text) { return(Highlighter.Highlight(windowTitle, text, HighlightSearchMode.Auto)); }
private void UpdateExploredGUIStyle(Vector2 screenPos) { GUIView mouseUnderView = GetViewUnderMouse(screenPos, m_ExploredViews); ExploredDrawInstructionIndex = -1; ExploredStyle = null; if (mouseUnderView != m_ExploredView) { if (m_ExploredView) { GUIViewDebuggerHelper.StopDebugging(); // Debug.Log("Stop debugging: " + GetViewName(m_ExploredView)); } m_ExploredView = CanInspectView(mouseUnderView) ? mouseUnderView : null; if (m_ExploredView) { // Start debugging GUIViewDebuggerHelper.DebugWindow(m_ExploredView); // Debug.Log("Start debugging: " + GetViewName(m_ExploredView)); // Since we have attached the debugger, this view hasn't logged its repaint steps yet. m_ExploredView.Repaint(); } } if (m_ExploredView) { var drawInstructions = new List <IMGUIDrawInstruction>(); GUIViewDebuggerHelper.GetDrawInstructions(drawInstructions); var localPosition = new Vector2(screenPos.x - mouseUnderView.screenPosition.x, screenPos.y - mouseUnderView.screenPosition.y); GUIStyle mouseUnderStyle = null; /** Note: no perfect way to find the style under cursor: * - Lots of style rect overlap * - by starting with the end, we hope to follow the "Last drawn instruction is the one on top" * - Some styles are "transparent" and drawn last (TabWindowBackground and such) * - We try to go with the smallest rect that fits */ Rect styleRect = new Rect(0, 0, 10000, 10000); var smallestRectArea = styleRect.width * styleRect.height; for (var i = drawInstructions.Count - 1; i >= 0; --i) { var instr = drawInstructions[i]; if (instr.rect.Contains(localPosition) && smallestRectArea > instr.rect.width * instr.rect.height) { mouseUnderStyle = instr.usedGUIStyle; styleRect = instr.rect; smallestRectArea = instr.rect.width * instr.rect.height; ExploredDrawInstructionIndex = i; // Debug.Log(GetViewName(m_ExploredView) + " - Found Style: " + instr.usedGUIStyle.name); } } if (Highlighter != null && mouseUnderStyle != null) { var visualElement = m_ExploredView.windowBackend.visualTree as VisualElement; if (visualElement != null) { // Debug.Log(GetViewName(m_ExploredView) + " - Highlight Style: " + mouseUnderStyle.name); Highlighter.HighlightElement(visualElement, styleRect, mouseUnderStyle); } } ExploredStyle = mouseUnderStyle; } }