private void SelectElementOnMouseOver(MouseEventArgs e) { List <RadElement> radElementList = new List <RadElement>(); RadElement elementAtPoint = this.Owner.ElementTree.GetElementAtPoint((RadElement)this.Owner.ElementTree.RootElement, e.Location, radElementList); this.HandleHoveredElementsChanged(radElementList); if (elementAtPoint != this.selectedElement) { this.EnsureElementUnderMouseMonitorTimer(); if (this.selectedElement != null && elementAtPoint != null) { if (!elementAtPoint.ShouldHandleMouseInput || !this.selectedElement.ShouldHandleMouseInput || (!elementAtPoint.NotifyParentOnMouseInput || this.selectedElement.NotifyParentOnMouseInput)) { this.HandleMouseLeave((EventArgs)e, elementAtPoint); } else { this.AddElementsUnderMouseToMonitor(this.selectedElement); } } else if (elementAtPoint == null) { this.HandleMouseLeave((EventArgs)e); } if (elementAtPoint != null) { this.RemoveElementsUnderMouseToMonitor(elementAtPoint); this.CheckRemoveParentElementsUnderMouseToMonitor(elementAtPoint); elementAtPoint.CallDoMouseEnter((EventArgs)e); if (!this.Owner.IsDesignMode) { this.MouseHoverTimer.Start(elementAtPoint); } } } this.selectedElement = elementAtPoint; if (this.selectedElement == null || !this.selectedElement.ShouldHandleMouseInput) { return; } this.selectedElement.CallDoMouseMove(e); }
private void CheckRemoveParentElementsUnderMouseToMonitor(RadElement elementUnderMouse) { if (!elementUnderMouse.NotifyParentOnMouseInput) { return; } for (RadElement parent = elementUnderMouse.Parent; parent != null; parent = parent.Parent) { if (parent.ShouldHandleMouseInput) { if (!parent.IsMouseOver) { parent.CallDoMouseEnter(EventArgs.Empty); } this.RemoveElementsUnderMouseToMonitor(parent); if (!parent.NotifyParentOnMouseInput) { break; } } } }
private void SelectElementOnMouseOver(MouseEventArgs e) { List <RadElement> newHoveredElements = new List <RadElement>(); RadElement elementUnderMouse = this.Owner.ElementTree.GetElementAtPoint( this.Owner.ElementTree.RootElement, e.Location, newHoveredElements); //Handle the actually hovered element this.HandleHoveredElementsChanged(newHoveredElements); if (elementUnderMouse != selectedElement) { EnsureElementUnderMouseMonitorTimer(); //Debug.WriteLine("----------------------------------------------------"); if ((selectedElement != null) && (elementUnderMouse != null)) { //Debug.WriteLine("selectedElement: " + selectedElement.ToString()); //Debug.WriteLine("elementUnderMouse: " + elementUnderMouse.ToString()); //if (elementUnderMouse is FillPrimitive) // Debug.WriteLine("elementUnderMouse.Parent: " + elementUnderMouse.Parent.ToString()); if (! (elementUnderMouse.ShouldHandleMouseInput && selectedElement.ShouldHandleMouseInput && elementUnderMouse.NotifyParentOnMouseInput && !selectedElement.NotifyParentOnMouseInput )) { //Debug.WriteLine("HandleMouseLeave1 selectedElement"); HandleMouseLeave(e, elementUnderMouse); } else { this.AddElementsUnderMouseToMonitor(selectedElement); } } else if (elementUnderMouse == null) { //Debug.WriteLine("HandleMouseLeave2 selectedElement"); HandleMouseLeave(e); } if (elementUnderMouse != null) { //Debug.WriteLine("DoMouseEnter elementUnderMouse"); this.RemoveElementsUnderMouseToMonitor(elementUnderMouse); this.CheckRemoveParentElementsUnderMouseToMonitor(elementUnderMouse); elementUnderMouse.CallDoMouseEnter(e); if (!this.Owner.IsDesignMode) { this.MouseHoverTimer.Start(elementUnderMouse); } //elementUnderMouse.StopMouseLeaveNotifyTimer(); } //Debug.WriteLine("----------------------------------------------------"); } this.selectedElement = elementUnderMouse; if ((this.selectedElement != null) && (this.selectedElement.ShouldHandleMouseInput)) { this.selectedElement.CallDoMouseMove(e); } //} //catch(Exception ex) //{ // MessageBox.Show("Internal error finding item under mouse " + ex.ToString()); //} }