/// <summary> /// Calls the methods in its invocation list when Unity draws this GUISystems's GUI. /// </summary> public void OnGUI() { var controlIDCheck = m_GUIState.GetControlID(kControlIDCheckHashCode, FocusType.Passive); if (m_GUIState.eventType == EventType.Layout) { m_ControlIDCheck = controlIDCheck; } else if (m_GUIState.eventType != EventType.Used && m_ControlIDCheck != controlIDCheck) { Debug.LogWarning("GetControlID at event " + m_GUIState.eventType + " returns a controlID different from the one in Layout event"); } var nearestLayoutData = LayoutData.zero; foreach (var control in m_Controls) { control.GetControl(m_GUIState); } if (m_GUIState.eventType == EventType.Layout) { foreach (var control in m_Controls) { control.BeginLayout(m_GUIState); } foreach (var control in m_Controls) { control.Layout(m_GUIState); nearestLayoutData = LayoutData.Nearest(nearestLayoutData, control.layoutData); } foreach (var control in m_Controls) { m_GUIState.AddControl(control.ID, control.layoutData.distance); } foreach (var control in m_Controls) { control.EndLayout(m_GUIState); } if (m_PrevNearestControl == m_GUIState.nearestControl) { if (nearestLayoutData.index != m_PrevNearestLayoutData.index) { m_GUIState.Repaint(); } } else { m_PrevNearestControl = m_GUIState.nearestControl; m_GUIState.Repaint(); } m_PrevNearestLayoutData = nearestLayoutData; } if (m_GUIState.eventType == EventType.Repaint) { foreach (var action in m_Actions) { if (action.IsRepaintEnabled(m_GUIState)) { action.PreRepaint(m_GUIState); } } foreach (var control in m_Controls) { control.Repaint(m_GUIState); } } var repaintOnMouseMove = false; foreach (var action in m_Actions) { if (IsMouseMoveEvent()) { repaintOnMouseMove |= action.IsRepaintOnMouseMoveEnabled(m_GUIState); } action.OnGUI(m_GUIState); } if (repaintOnMouseMove) { m_GUIState.Repaint(); } }
public void OnGUI() { var nearestLayoutData = LayoutData.zero; foreach (var control in m_Controls) { control.GetControl(m_GUIState); } if (m_GUIState.eventType == EventType.Layout) { foreach (var control in m_Controls) { control.BeginLayout(m_GUIState); } foreach (var control in m_Controls) { control.Layout(m_GUIState); nearestLayoutData = LayoutData.Nearest(nearestLayoutData, control.layoutData); } foreach (var control in m_Controls) { m_GUIState.AddControl(control.ID, control.layoutData.distance); } foreach (var control in m_Controls) { control.EndLayout(m_GUIState); } if (m_PrevNearestControl == m_GUIState.nearestControl) { if (nearestLayoutData.index != m_PrevNearestLayoutData.index) { m_GUIState.Repaint(); } } else { m_PrevNearestControl = m_GUIState.nearestControl; m_GUIState.Repaint(); } m_PrevNearestLayoutData = nearestLayoutData; } if (m_GUIState.eventType == EventType.Repaint) { foreach (var action in m_Actions) { if (action.IsRepaintEnabled(m_GUIState)) { action.PreRepaint(m_GUIState); } } foreach (var control in m_Controls) { control.Repaint(m_GUIState); } } var repaintOnMouseMove = false; foreach (var action in m_Actions) { if (IsMouseMoveEvent()) { repaintOnMouseMove |= action.IsRepaintOnMouseMoveEnabled(m_GUIState); } action.OnGUI(m_GUIState); } if (repaintOnMouseMove) { m_GUIState.UseCurrentEvent(); } }