/// <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 }
///<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(); }