////////////////// // Widget management ////////////////// public void UpdateWidgets() { if (currentPage == null) { return; } mouseOver.Clear(); // Update widget lists widgets = GetCurrentWidgets(); for (int i = 0; i < widgets.Length; i++) { OGWidget w = widgets[i]; if (w == null || !w.isDrawn || w.isDisabled) { continue; } // Check mouse if (w.CheckMouseOver()) { w.OnMouseOver(); mouseOver.Add(w); } // Check scroll offset if (!w.clipTo) { w.scrollOffset.x = 0; w.scrollOffset.y = 0; } w.root = this; w.gameObject.layer = this.gameObject.layer; w.UpdateWidget(); w.Recalculate(); // Cleanup from previous OpenGUI versions if (w.hidden) { DestroyImmediate(w.gameObject); } } // Is mouse over anything? isMouseOver = mouseOver.Count > 0; }
public void UpdateMouse() { if (widgets == null) { return; } int i = 0; OGWidget w; // Click if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(2) || GetTouch() == TouchPhase.Began) { OGWidget topWidget = null; for (i = 0; i < mouseOver.Count; i++) { w = mouseOver[i]; if ((w.GetType() != typeof(OGScrollView) || (w as OGScrollView).touchControl) && (topWidget == null || w.transform.position.z < topWidget.transform.position.z) && w.isSelectable) { topWidget = w; } } if (downWidget && downWidget != topWidget) { downWidget.OnMouseCancel(); } if (topWidget != null && topWidget.CheckMouseOver() && !topWidget.isDisabled) { topWidget.OnMouseDown(); downWidget = topWidget; } // Release } else if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(2) || GetTouch() == TouchPhase.Ended || GetTouch() == TouchPhase.Canceled) { if (downWidget) { // Draggable if (downWidget.resetAfterDrag && downWidget.GetType() != typeof(OGScrollView)) { downWidget.transform.position = downWidget.dragOrigPos; downWidget.dragOffset = Vector3.zero; downWidget.dragOrigPos = Vector3.zero; } // Mouse over if ((downWidget.CheckMouseOver() || GetTouch() == TouchPhase.Ended) && !downWidget.isDisabled && downWidget.CheckMouseOver()) { downWidget.OnMouseUp(); // Mouse out } else { downWidget.OnMouseCancel(); } } // Dragging } else if (GetDragging() != Vector2.zero) { if (downWidget != null && !downWidget.isDisabled) { if (downWidget.clipTo && downWidget.clipTo.GetType() == typeof(OGScrollView) && (downWidget.clipTo as OGScrollView).touchControl) { OGWidget thisWidget = downWidget; thisWidget.OnMouseCancel(); downWidget = thisWidget.clipTo; } downWidget.OnMouseDrag(); if (downWidget.isDraggable && downWidget.GetType() != typeof(OGScrollView)) { Vector3 mousePos = Input.mousePosition; mousePos.y = screenHeight - mousePos.y; if (downWidget.dragOffset == Vector3.zero) { if (downWidget.resetAfterDrag) { downWidget.dragOrigPos = downWidget.transform.position; } downWidget.dragOffset = downWidget.transform.position - mousePos; } Vector3 newPos = downWidget.transform.position; newPos = mousePos + downWidget.dragOffset; downWidget.transform.position = newPos; } } } // Escape key if (Input.GetKeyDown(KeyCode.Escape)) { if (downWidget != null) { downWidget.OnMouseCancel(); ReleaseWidget(); } } }