public static void UnregisterListeners <TEventType>(CallbackEventHandler ceh, Delegate callback)
        {
            bool flag = !GlobalCallbackRegistry.IsEventDebuggerConnected;

            if (!flag)
            {
                Dictionary <Type, List <GlobalCallbackRegistry.ListenerRecord> > dictionary;
                bool flag2 = !GlobalCallbackRegistry.s_Listeners.TryGetValue(ceh, out dictionary);
                if (!flag2)
                {
                    Type   expr_3A = callback.Method.DeclaringType;
                    string str     = ((expr_3A != null) ? expr_3A.Name : null) ?? string.Empty;
                    string b       = str + "." + callback.Method.Name;
                    List <GlobalCallbackRegistry.ListenerRecord> list;
                    bool flag3 = !dictionary.TryGetValue(typeof(TEventType), out list);
                    if (!flag3)
                    {
                        for (int i = list.Count - 1; i >= 0; i--)
                        {
                            GlobalCallbackRegistry.ListenerRecord listenerRecord = list[i];
                            bool flag4 = listenerRecord.name == b;
                            if (flag4)
                            {
                                list.RemoveAt(i);
                            }
                        }
                    }
                }
            }
        }
        public static void UnregisterListeners <TEventType>(CallbackEventHandler ceh, Delegate callback)
        {
            if (!IsEventDebuggerConnected)
            {
                return;
            }
            Dictionary <Type, List <ListenerRecord> > dict;

            if (!s_Listeners.TryGetValue(ceh, out dict))
            {
                return;
            }

            var declType = callback.Method.DeclaringType?.Name ?? string.Empty;
            var itemName = declType + "." + callback.Method.Name;

            List <ListenerRecord> callbackRecords;

            if (!dict.TryGetValue(typeof(TEventType), out callbackRecords))
            {
                return;
            }

            for (var i = callbackRecords.Count - 1; i >= 0; i--)
            {
                var callbackRecord = callbackRecords[i];
                if (callbackRecord.name == itemName)
                {
                    callbackRecords.RemoveAt(i);
                }
            }
        }
        public static void RegisterListeners <TEventType>(CallbackEventHandler ceh, Delegate callback, TrickleDown useTrickleDown)
        {
#if UNITY_EDITOR
            if (!IsEventDebuggerConnected)
            {
                return;
            }
            Dictionary <Type, List <ListenerRecord> > dict;
            if (!s_Listeners.TryGetValue(ceh, out dict))
            {
                dict = new Dictionary <Type, List <ListenerRecord> >();
                s_Listeners.Add(ceh, dict);
            }

            var    declType   = callback.Method.DeclaringType?.Name ?? string.Empty;
            string objectName = (callback.Target as VisualElement).GetDisplayName();
            string itemName   = declType + "." + callback.Method.Name + " > " + useTrickleDown + " [" + objectName + "]";

            List <ListenerRecord> callbackRecords;
            if (!dict.TryGetValue(typeof(TEventType), out callbackRecords))
            {
                callbackRecords = new List <ListenerRecord>();
                dict.Add(typeof(TEventType), callbackRecords);
            }

            StackFrame callStack = new StackFrame(2, true);
            callbackRecords.Add(new ListenerRecord
            {
                hashCode   = callback.GetHashCode(),
                name       = itemName,
                fileName   = callStack.GetFileName(),
                lineNumber = callStack.GetFileLineNumber()
            });
#endif
        }
        public static bool RegisterValueChangedCallback <T>(this INotifyValueChanged <T> control, EventCallback <ChangeEvent <T> > callback)
        {
            CallbackEventHandler callbackEventHandler = control as CallbackEventHandler;
            bool flag = callbackEventHandler != null;
            bool result;

            if (flag)
            {
                callbackEventHandler.RegisterCallback <ChangeEvent <T> >(callback, TrickleDown.NoTrickleDown);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
        public static void RegisterListeners <TEventType>(CallbackEventHandler ceh, Delegate callback, TrickleDown useTrickleDown)
        {
            bool flag = !GlobalCallbackRegistry.IsEventDebuggerConnected;

            if (!flag)
            {
                Dictionary <Type, List <GlobalCallbackRegistry.ListenerRecord> > dictionary;
                bool flag2 = !GlobalCallbackRegistry.s_Listeners.TryGetValue(ceh, out dictionary);
                if (flag2)
                {
                    dictionary = new Dictionary <Type, List <GlobalCallbackRegistry.ListenerRecord> >();
                    GlobalCallbackRegistry.s_Listeners.Add(ceh, dictionary);
                }
                Type   expr_4A     = callback.Method.DeclaringType;
                string text        = ((expr_4A != null) ? expr_4A.Name : null) ?? string.Empty;
                string displayName = (callback.Target as VisualElement).GetDisplayName(true);
                string name        = string.Concat(new string[]
                {
                    text,
                    ".",
                    callback.Method.Name,
                    " > ",
                    useTrickleDown.ToString(),
                    " [",
                    displayName,
                    "]"
                });
                List <GlobalCallbackRegistry.ListenerRecord> list;
                bool flag3 = !dictionary.TryGetValue(typeof(TEventType), out list);
                if (flag3)
                {
                    list = new List <GlobalCallbackRegistry.ListenerRecord>();
                    dictionary.Add(typeof(TEventType), list);
                }
                StackFrame stackFrame = new StackFrame(2, true);
                list.Add(new GlobalCallbackRegistry.ListenerRecord
                {
                    hashCode   = callback.GetHashCode(),
                    name       = name,
                    fileName   = stackFrame.GetFileName(),
                    lineNumber = stackFrame.GetFileLineNumber()
                });
            }
        }
Esempio n. 6
0
        public static void PropagateEvent(EventBase evt)
        {
            Debug.Assert(!evt.dispatch, "Event is being dispatched recursively.");
            evt.dispatch = true;
            bool flag = evt.path == null;

            if (flag)
            {
                CallbackEventHandler expr_36 = evt.target as CallbackEventHandler;
                if (expr_36 != null)
                {
                    expr_36.HandleEventAtTargetPhase(evt);
                }
            }
            else
            {
                bool tricklesDown = evt.tricklesDown;
                if (tricklesDown)
                {
                    evt.propagationPhase = PropagationPhase.TrickleDown;
                    for (int i = evt.path.trickleDownPath.Count - 1; i >= 0; i--)
                    {
                        bool isPropagationStopped = evt.isPropagationStopped;
                        if (isPropagationStopped)
                        {
                            break;
                        }
                        bool flag2 = evt.Skip(evt.path.trickleDownPath[i]);
                        if (!flag2)
                        {
                            evt.currentTarget = evt.path.trickleDownPath[i];
                            evt.currentTarget.HandleEvent(evt);
                        }
                    }
                }
                evt.propagationPhase = PropagationPhase.AtTarget;
                foreach (VisualElement current in evt.path.targetElements)
                {
                    bool flag3 = evt.Skip(current);
                    if (!flag3)
                    {
                        evt.target        = current;
                        evt.currentTarget = evt.target;
                        evt.currentTarget.HandleEvent(evt);
                    }
                }
                evt.propagationPhase = PropagationPhase.DefaultActionAtTarget;
                foreach (VisualElement current2 in evt.path.targetElements)
                {
                    bool flag4 = evt.Skip(current2);
                    if (!flag4)
                    {
                        evt.target        = current2;
                        evt.currentTarget = evt.target;
                        evt.currentTarget.HandleEvent(evt);
                    }
                }
                evt.target = evt.leafTarget;
                bool bubbles = evt.bubbles;
                if (bubbles)
                {
                    evt.propagationPhase = PropagationPhase.BubbleUp;
                    foreach (VisualElement current3 in evt.path.bubbleUpPath)
                    {
                        bool flag5 = evt.Skip(current3);
                        if (!flag5)
                        {
                            evt.currentTarget = current3;
                            evt.currentTarget.HandleEvent(evt);
                        }
                    }
                }
            }
            evt.dispatch         = false;
            evt.propagationPhase = PropagationPhase.None;
            evt.currentTarget    = null;
        }
Esempio n. 7
0
        public void DispatchEvent(EventBase evt, IPanel panel)
        {
            MouseCaptureDispatchingStrategy.EventBehavior eventBehavior = MouseCaptureDispatchingStrategy.EventBehavior.None;
            IEventHandler eventHandler = (panel != null) ? panel.GetCapturingElement(PointerId.mousePointerId) : null;
            bool          flag         = eventHandler == null;

            if (!flag)
            {
                VisualElement visualElement = eventHandler as VisualElement;
                bool          flag2         = evt.eventTypeId != EventBase <MouseCaptureOutEvent> .TypeId() && visualElement != null && visualElement.panel == null;

                if (flag2)
                {
                    visualElement.ReleaseMouse();
                }
                else
                {
                    bool flag3 = panel != null && visualElement != null && visualElement.panel.contextType != panel.contextType;
                    if (!flag3)
                    {
                        IMouseEvent mouseEvent = evt as IMouseEvent;
                        bool        flag4      = mouseEvent != null && (evt.target == null || evt.target == eventHandler);
                        if (flag4)
                        {
                            eventBehavior  = MouseCaptureDispatchingStrategy.EventBehavior.IsCapturable;
                            eventBehavior |= MouseCaptureDispatchingStrategy.EventBehavior.IsSentExclusivelyToCapturingElement;
                        }
                        else
                        {
                            bool flag5 = evt.imguiEvent != null && evt.target == null;
                            if (flag5)
                            {
                                eventBehavior = MouseCaptureDispatchingStrategy.EventBehavior.IsCapturable;
                            }
                        }
                        bool flag6 = evt.eventTypeId == EventBase <MouseEnterWindowEvent> .TypeId() || evt.eventTypeId == EventBase <MouseLeaveWindowEvent> .TypeId() || evt.eventTypeId == EventBase <WheelEvent> .TypeId();

                        if (flag6)
                        {
                            eventBehavior = MouseCaptureDispatchingStrategy.EventBehavior.None;
                        }
                        bool flag7 = (eventBehavior & MouseCaptureDispatchingStrategy.EventBehavior.IsCapturable) == MouseCaptureDispatchingStrategy.EventBehavior.IsCapturable;
                        if (flag7)
                        {
                            BaseVisualElementPanel baseVisualElementPanel = panel as BaseVisualElementPanel;
                            bool flag8 = mouseEvent != null && baseVisualElementPanel != null;
                            if (flag8)
                            {
                                IMouseEventInternal expr_139 = mouseEvent as IMouseEventInternal;
                                bool flag9  = expr_139 == null || expr_139.recomputeTopElementUnderMouse;
                                bool flag10 = flag9;
                                if (flag10)
                                {
                                    baseVisualElementPanel.RecomputeTopElementUnderPointer(mouseEvent.mousePosition, evt);
                                }
                            }
                            evt.dispatch = true;
                            evt.target   = eventHandler;
                            CallbackEventHandler expr_175 = eventHandler as CallbackEventHandler;
                            if (expr_175 != null)
                            {
                                expr_175.HandleEventAtTargetPhase(evt);
                            }
                            bool flag11 = (eventBehavior & MouseCaptureDispatchingStrategy.EventBehavior.IsSentExclusivelyToCapturingElement) != MouseCaptureDispatchingStrategy.EventBehavior.IsSentExclusivelyToCapturingElement;
                            if (flag11)
                            {
                                evt.target = null;
                            }
                            evt.currentTarget    = null;
                            evt.propagationPhase = PropagationPhase.None;
                            evt.dispatch         = false;
                            evt.skipElements.Add(eventHandler);
                            evt.stopDispatch = ((eventBehavior & MouseCaptureDispatchingStrategy.EventBehavior.IsSentExclusivelyToCapturingElement) == MouseCaptureDispatchingStrategy.EventBehavior.IsSentExclusivelyToCapturingElement);
                            bool flag12 = evt.target is IMGUIContainer;
                            if (flag12)
                            {
                                evt.propagateToIMGUI = true;
                                evt.skipElements.Add(evt.target);
                            }
                            else
                            {
                                evt.propagateToIMGUI = false;
                            }
                        }
                    }
                }
            }
        }