/// <summary>
        /// Finds the Component stack under the mouse poiner
        /// </summary>
// ReSharper disable MemberCanBePrivate.Global
        public void RecalculateMouseWheelTargets()
// ReSharper restore MemberCanBePrivate.Global
        {
            //Debug.Log("RecalculateMouseWheelTargets: " + deltaY);
            if (_isMouseLeave)
            {
                _mouseWheelTargets.Clear();
                return;
            }

            var members = CoordinateProcessor.GetComponentStackUnderCoordinatesOnAllStages(
                _mouseEvent.GlobalPosition,
                MouseWheelFilter,
                true, true // stopOnDisabled, stopOnInvisible
                );

            _mouseWheelTargets = new List <Component>();

            foreach (DisplayListMember member in members)
            {
                _mouseWheelTargets.Add((Component)member);
            }

            // Important: reverse targets
            //_mouseWheelTargets.Reverse();

//            Debug.Log(string.Format(@"Mouse wheel targets ({0}):
//{1}", _mouseWheelTargets.Count, ComponentUtil.DescribeComponentList(_mouseWheelTargets)));

#if DEBUG
            if (DebugMode)
            {
                Debug.Log(string.Format(@"Mouse wheel targets ({0}): 
{1}", _mouseWheelTargets.Count, ComponentUtil.DescribeComponentList(_mouseWheelTargets)));
            }
#endif
        }
Example #2
0
        ///<summary>
        ///</summary>
        override public List <Component> GetComponentsMatchingSelector(Selector selector)
        {
            //Debug.Log("##### GetComponentsMatchingSelector #####");
            var stageList = StageManager.Instance.StageList;
            var count     = stageList.Count;

            List <Component> components = new List <Component>();

            for (int i = 0; i < count; i++)
            {
                Component component = stageList[i];
                FindComps(components, component, selector);
            }

            if (0 == components.Count)
            {
#if DEBUG
                if (DebugMode)
                {
                    Debug.Log("No components found.");
                }
#endif
            }
            else
            {
#if DEBUG
                if (DebugMode)
                {
                    Debug.Log(string.Format(@"Found {0} components: 
{1}", components.Count, ComponentUtil.DescribeComponentList(components, true)));
                }
#endif
            }

            return(components);
        }
        //private float _spX;
        //private float _spY;

        private void OnMouseWheel(Event e)
        {
#if DEBUG
            if (DebugMode)
            {
                Debug.Log("MouseEventDispatcher.OnMouseWheel: " + e);
            }
#endif
            _mouseEvent = (MouseEvent)e;

            RecalculateMouseWheelTargets();

            //UnityEngine.Event.current.delta.y

            //Debug.Log("UnityEngine.Event.current.delta: " + UnityEngine.Event.current.delta);
            //Point amount = new Point(UnityEngine.Event.current.delta.x, UnityEngine.Event.current.delta.y);

#if DEBUG
            if (DebugMode)
            {
                if (_mouseWheelTargets.Count > 0)
                {
                    Debug.Log(string.Format(@"Mouse wheel targets ({0}): 
{1}", _mouseWheelTargets.Count, ComponentUtil.DescribeComponentList(_mouseWheelTargets)));
                }
            }
#endif
            //var deltaY = UnityEngine.Event.current.delta.y;

            //foreach (Component mouseWheelTarget in _mouseWheelTargets)
            //{
            //    //if (mouseWheelTarget.StopMouseWheelPropagation)
            //    //    break;

            //    //IScrollable sc = mouseWheelTarget as IScrollable;
            //    //if (null != sc)
            //    //{
            //    //    if (sc.MouseWheelStep == 0)
            //    //        throw new Exception("MouseWheelStep of IScrollable should be greater than 0");

            //    //    //Debug.Log("!!!");
            //    //    var pixels = deltaY * sc.MouseWheelStep;
            //    //    Debug.Log("pixels: " + pixels);

            //    //    var oldVScroll = sc.VerticalScrollPosition;
            //    //    sc.VerticalScrollPosition += pixels;
            //    //    var diff = sc.VerticalScrollPosition - oldVScroll;

            //    //    var res = pixels - diff;

            //    //    //Debug.Log("diff: " + diff);
            //    //    //Debug.Log("oldVScroll: " + oldVScroll);
            //    //    //Debug.Log("sc.VerticalScrollPosition: " + sc.VerticalScrollPosition);
            //    //    //Debug.Log("res: " + res);

            //    //    //amount = amount.Divide(sc.MouseWheelStep);
            //    //    //Debug.Log("amount: " + amount);
            //    //    //if (amount.Equals(Point.Zero)) // no residuum, exit
            //    //    if (res == 0)
            //    //        break;

            //    //    deltaY = res / pixels * deltaY;
            //    //}
            //}

//            if (MouseWheelTarget == null)
//                return;
//#if DEBUG
//            if (DebugMode)
//                Debug.Log("OnMouseWheel component: " + MouseWheelTarget);
//#endif
            //IScrollable scrollable = MouseWheelTarget as IScrollable;
            //Container container = scrollable as Container;

            //Debug.Log(container);
            ////Debug.Log("    -> scrollable: " + scrollable);
            ////Debug.Log("    -> QScrollContent: " + container.QScrollContent);
            ////Debug.Log("    -> ScrollContent: " + container.ScrollContent);
            //if (null != scrollable) // ScrollContent?
            //{
            //    //bool sc = null != container ? container.QScrollContent : scrollable.ScrollContent; // commented out 20130410
            //    bool sc = scrollable.ScrollContent; // commented out 20130410
            //    Debug.Log("    -> sc: " + sc);
            //    //bool sc = scrollable.ScrollContent;
            //    if (sc)
            //    {
            //        Debug.Log(sc);
            //        var delta = UnityEngine.Event.current.delta;
            //        if (delta.x != 0 || delta.y != 0)
            //        {
            //            _spX = scrollable.ScrollPosition.X;
            //            float d = delta.y*scrollable.MouseWheelStep;
            //            Debug.Log("Delta: " + d);
            //            Debug.Log("scrollable.ScrollPosition.Y: " + scrollable.ScrollPosition.Y);
            //            _spY = scrollable.ScrollPosition.Y + d;
            //            Debug.Log("_spY 2: " + _spY);
            //            scrollable.ScrollPosition = new Point(_spX, _spY);
            //        }

            //        //scrollable.ScrollPosition = new Point(0, 100);
            //    }
            //}

            /**
             * Dispatch the mouse wheel event on the top component
             * Other component could receive the event via the event bubbling
             * */
            if (_mouseWheelTargets.Count > 0)
            {
                MouseEventHelper.BuildAndDispatchMouseEvent(this, _mouseWheelTargets[0], MouseEvent.MOUSE_WHEEL,
                                                            _mouseEvent.GlobalPosition, _mouseEvent.CurrentEvent);
            }

            /**
             * Stuff could have moved, so we need recalculating // 20120520
             * TODO: perhaps this needs to be defered?
             * */
            RecalculateMouseTarget();
            RecalculateMouseWheelTargets();
        }