示例#1
0
        public void BeginLayout(IGUIState guiState)
        {
            Debug.Assert(guiState.eventType == EventType.Layout);

            m_LayoutData = OnBeginLayout(LayoutData.zero, guiState);
        }
示例#2
0
 internal void SetActionID(int actionID)
 {
     m_ActionID      = actionID;
     m_HotLayoutData = m_LayoutData;
 }
示例#3
0
 protected override LayoutData OnBeginLayout(LayoutData data, IGUIState guiState)
 {
     data.distance = kPickDistance;
     return(data);
 }
示例#4
0
 protected virtual LayoutData OnBeginLayout(LayoutData data, IGUIState guiState)
 {
     return(data);
 }
示例#5
0
        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.UseCurrentEvent();
            }
        }