Ejemplo n.º 1
0
		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;
					}
				}
			}
		}
Ejemplo n.º 2
0
		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;
			}
		}