public void OnMouseMoved(View3D view, Vector2 mousePosition, out bool shouldUpdate) { Vector2 mousePositionCorrected = mousePosition + view.ViewportOffset; // new Vector2(view.Viewport.X, view.Viewport.Y); shouldUpdate = false; if (m_Focused != null && (m_MouseState == MouseState.Dragging || m_MouseState == MouseState.DragStart)) { m_MouseState = MouseState.Dragging; m_Focused.DoMouseInteraction(m_MouseState, m_MouseButtons, mousePositionCorrected, out shouldUpdate); } else { UiControl foundTopMost = null; foreach (UiControl control in Controls) { UiControl found = null; if (control.IsVisible == true) { control.BeginPick(mousePositionCorrected, out found); } if (found != null) { if (foundTopMost == null) { foundTopMost = found; } else if (foundTopMost.ZIndex < found.ZIndex) { foundTopMost = found; } } } if (foundTopMost != null && m_Control_ClickStart == foundTopMost) { m_MouseState = MouseState.ClickStart; } else { if (m_Hovered != null && foundTopMost != m_Hovered && m_Hovered is UiSubScene) { bool shouldSubUpdate; (m_Hovered as UiSubScene).OnMouseMoved(view, mousePosition, out shouldSubUpdate); } if (m_Hovered != null && foundTopMost != null) { if (m_Hovered != foundTopMost) { m_Hovered.EndPick(mousePositionCorrected, PickType.UnHover, foundTopMost); if (m_Hovered is UiSubScene) { (m_Hovered as UiSubScene).UnhoverControls(); } m_Hovered = foundTopMost; m_Hovered.EndPick(mousePositionCorrected, PickType.Hover, m_Hovered); shouldUpdate = true; } } else if (foundTopMost != null) { m_Hovered = foundTopMost; m_Hovered.EndPick(mousePositionCorrected, PickType.Hover, m_Hovered); shouldUpdate = true; } else if (m_Hovered != null && foundTopMost == null) { m_Hovered.EndPick(mousePositionCorrected, PickType.UnHover, null); if (m_Hovered is UiSubScene) { (m_Hovered as UiSubScene).UnhoverControls(); } m_Hovered = null; shouldUpdate = true; } if (m_Hovered != null && m_Hovered is UiSubScene) { bool shouldSubUpdate; (m_Hovered as UiSubScene).OnMouseMoved(view, mousePosition, out shouldSubUpdate); } if (m_Hovered != null) { m_MouseState = MouseState.Hovering; } else { m_MouseState = MouseState.Moving; } } } }
public void OnMouseDown(View3D view, Vector2 mousePosition, System.Windows.Forms.MouseButtons mouseButtons, out bool shouldUpdate) { Vector2 mousePositionCorrected = mousePosition + view.ViewportOffset; // new Vector2(view.Viewport.X, view.Viewport.Y); shouldUpdate = false; UiControl foundTopMost = null; foreach (UiControl control in Controls) { UiControl found = null; if (control.IsVisible == true) { control.BeginPick(mousePositionCorrected, out found); } if (found != null) { if (foundTopMost == null) { foundTopMost = found; } else if (foundTopMost.ZIndex < found.ZIndex) { foundTopMost = found; } } } if (m_Focused != null && foundTopMost != null) { if (m_Focused != foundTopMost) { m_Focused.EndPick(mousePositionCorrected, PickType.UnFocus, foundTopMost); if (m_Focused is UiSubScene) { (m_Focused as UiSubScene).UnfocusControls(); } m_Focused = foundTopMost; m_Focused.EndPick(mousePositionCorrected, PickType.Focus, m_Focused); shouldUpdate = true; } } else if (foundTopMost != null) { m_Focused = foundTopMost; m_Focused.EndPick(mousePositionCorrected, PickType.Focus, m_Focused); shouldUpdate = true; } else if (m_Focused != null && foundTopMost == null) { m_Focused.EndPick(mousePositionCorrected, PickType.UnFocus, null); if (m_Focused is UiSubScene) { (m_Focused as UiSubScene).UnfocusControls(); } m_Focused = null; shouldUpdate = true; } if (m_Focused != null) { if (m_Focused is UiSubScene) { bool shouldSubUpdate; (m_Focused as UiSubScene).OnMouseDown(view, mousePosition, mouseButtons, out shouldSubUpdate); m_MouseState = MouseState.Hovering; m_MouseButtons = System.Windows.Forms.MouseButtons.None; } else { if ((m_Focused.InteractionType & ControlInteractionType.Drag) == ControlInteractionType.Drag) { m_MouseState = MouseState.DragStart; m_MouseButtons = mouseButtons; m_Focused.DoMouseInteraction(m_MouseState, m_MouseButtons, mousePositionCorrected, out shouldUpdate); } else if ((m_Focused.InteractionType & ControlInteractionType.Click) == ControlInteractionType.Click) { m_MouseState = MouseState.ClickStart; m_MouseButtons = mouseButtons; m_Control_ClickStart = m_Focused; m_Focused.DoMouseInteraction(m_MouseState, m_MouseButtons, mousePositionCorrected, out shouldUpdate); } else { m_MouseState = MouseState.Hovering; m_MouseButtons = System.Windows.Forms.MouseButtons.None; m_Focused.DoMouseInteraction(m_MouseState, m_MouseButtons, mousePositionCorrected, out shouldUpdate); } } } else { m_MouseState = MouseState.None; m_MouseButtons = System.Windows.Forms.MouseButtons.None; m_Control_ClickStart = null; } }