// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ void StartDrag(exUIEvent _event) { exUIPointEvent pointEvent = _event as exUIPointEvent; if (draggable && (pointEvent.isTouch || pointEvent.GetMouseButton(0))) { dragging = true; draggingID = pointEvent.mainPoint.id; damping = false; spring = false; velocity = Vector2.zero; exUIMng.inst.SetFocus(this); _event.StopPropagation(); } }
/////////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////// // ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected new void Awake() { base.Awake(); // handle scroll bar Transform transBar = transform.Find("__bar"); if (transBar) { bar = transBar.GetComponent <exSprite>(); if (bar) { bar.customSize = true; bar.anchor = Anchor.TopLeft; } // exUIButton btnBar = transBar.GetComponent <exUIButton>(); if (btnBar) { btnBar.grabMouseOrTouch = true; btnBar.AddEventListener("onPressDown", delegate(exUIEvent _event) { if (dragging) { return; } exUIPointEvent pointEvent = _event as exUIPointEvent; if (pointEvent.isTouch || pointEvent.GetMouseButton(0)) { dragging = true; draggingID = pointEvent.mainPoint.id; exUIMng.inst.SetFocus(this); } }); btnBar.AddEventListener("onPressUp", delegate(exUIEvent _event) { exUIPointEvent pointEvent = _event as exUIPointEvent; if ((pointEvent.isTouch || pointEvent.GetMouseButton(0)) && pointEvent.pointInfos[0].id == draggingID) { if (dragging) { dragging = false; draggingID = -1; } } }); btnBar.AddEventListener("onHoverMove", delegate(exUIEvent _event) { if (scrollView) { exUIPointEvent pointEvent = _event as exUIPointEvent; for (int i = 0; i < pointEvent.pointInfos.Length; ++i) { exUIPointInfo point = pointEvent.pointInfos[i]; if (dragging && (pointEvent.isTouch || pointEvent.GetMouseButton(0)) && point.id == draggingID) { Vector2 delta = point.worldDelta; delta.y = -delta.y; scrollView.Scroll(delta / ratio); } } } }); } } // handle background background = GetComponent <exSprite>(); if (background) { scrollStart = transBar ? transBar.localPosition : Vector3.zero; if (background.spriteType == exSpriteType.Sliced) { if (direction == Direction.Horizontal) { scrollStart.x = background.leftBorderSize; } else { scrollStart.y = background.topBorderSize; } } } // handle scroll view if (scrollView) { scrollView.AddEventListener("onContentResized", delegate(exUIEvent _event) { UpdateScrollBarRatio(); UpdateScrollBar(); }); scrollView.AddEventListener("onScroll", delegate(exUIEvent _event) { if (direction == Direction.Horizontal) { scrollOffset = scrollView.scrollOffset.x * ratio; } else { scrollOffset = scrollView.scrollOffset.y * ratio; } UpdateScrollBar(); // if (scrollView.showCondition == exUIScrollView.ShowCondition.WhenDragging) { activeSelf = true; } }); scrollView.AddEventListener("onScrollFinished", delegate(exUIEvent _event) { if (scrollView.showCondition == exUIScrollView.ShowCondition.WhenDragging) { cooldownTimer = cooldown; isCoolingDown = true; } }); UpdateScrollBarRatio(); UpdateScrollBar(); // handle scrollbar effect if (scrollView.showCondition == exUIScrollView.ShowCondition.WhenDragging) { // exUIEffect effect = GetComponent <exUIEffect>(); if (effect == null) { effect = gameObject.AddComponent <exUIEffect>(); if (background != null) { effect.AddEffect_Color(background, EffectEventType.Deactive, exEase.Type.Linear, new Color(background.color.r, background.color.g, background.color.b, 0.0f), 0.5f); } if (bar != null) { effect.AddEffect_Color(bar, EffectEventType.Deactive, exEase.Type.Linear, new Color(bar.color.r, bar.color.g, bar.color.b, 0.0f), 0.5f); } } // if (background) { Color tmpColor = background.color; tmpColor.a = 0.0f; background.color = tmpColor; } // if (bar) { Color tmpColor = bar.color; tmpColor.a = 0.0f; bar.color = tmpColor; } // active_ = false; } } }
/////////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////// // ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected new void Awake() { base.Awake(); grabMouseOrTouch = true; if (contentAnchor != null) { originalAnchorPos = contentAnchor.localPosition; } AddEventListener("onPressDown", delegate(exUIEvent _event) { if (dragging) { _event.StopPropagation(); return; } StartDrag(_event); }); AddEventListener("onPressUp", delegate(exUIEvent _event) { exUIPointEvent pointEvent = _event as exUIPointEvent; if (draggable && (pointEvent.isTouch || pointEvent.GetMouseButton(0)) && pointEvent.pointInfos[0].id == draggingID) { if (dragging) { dragging = false; draggingID = -1; StartScroll(); } _event.StopPropagation(); } }); AddEventListener("onHoverIn", delegate(exUIEvent _event) { if (dragging) { _event.StopPropagation(); return; } StartDrag(_event); }); AddEventListener("onHoverMove", delegate(exUIEvent _event) { if (dragging == false) { StartDrag(_event); return; } float contentX = (horizontalContentDir == ContentDirection.LeftToRight) ? 0.0f : -(contentSize_.x - width); float contentY = (verticalContentDir == ContentDirection.TopToBottom) ? 0.0f : -(contentSize_.y - height); Rect scrollRect = new Rect(scrollOffset_.x, scrollOffset_.y, width, height); Rect contentRect = new Rect(contentX, contentY, Mathf.Max(contentSize_.x, width), Mathf.Max(contentSize_.y, height)); Vector2 constrainOffset = exGeometryUtility.GetConstrainOffset(scrollRect, contentRect); exUIPointEvent pointEvent = _event as exUIPointEvent; for (int i = 0; i < pointEvent.pointInfos.Length; ++i) { exUIPointInfo point = pointEvent.pointInfos[i]; if (draggable && (pointEvent.isTouch || pointEvent.GetMouseButton(0)) && point.id == draggingID) { Vector2 delta = point.worldDelta; delta.x = -delta.x; if (Mathf.Abs(constrainOffset.x) > 0.001f) { delta.x *= 0.5f; } if (Mathf.Abs(constrainOffset.y) > 0.001f) { delta.y *= 0.5f; } // velocity = Vector2.Lerp(velocity, velocity + (delta / Time.deltaTime) * scrollSpeed, 0.67f); if (Mathf.Sign(velocity.x) != Mathf.Sign(delta.x)) { velocity.x = 0.0f; } if (Mathf.Sign(velocity.y) != Mathf.Sign(delta.y)) { velocity.y = 0.0f; } _event.StopPropagation(); Scroll(delta); break; } } }); AddEventListener("onMouseWheel", delegate(exUIEvent _event) { // TODO: if ( mouseWheelByHorizontal ) float contentX = (horizontalContentDir == ContentDirection.LeftToRight) ? 0.0f : -(contentSize_.x - width); float contentY = (verticalContentDir == ContentDirection.TopToBottom) ? 0.0f : -(contentSize_.y - height); exUIWheelEvent wheelEvent = _event as exUIWheelEvent; Vector2 delta = new Vector2(0.0f, -wheelEvent.delta * 100.0f); Vector2 constrainOffset = exGeometryUtility.GetConstrainOffset(new Rect(scrollOffset_.x, scrollOffset_.y, width, height), new Rect(contentX, contentY, contentSize_.x, contentSize_.y)); if (Mathf.Abs(constrainOffset.y) > 0.001f) { delta.y *= 0.5f; } velocity = Vector2.Lerp(velocity, velocity + (delta / Time.deltaTime) * scrollSpeed, 0.67f); if (Mathf.Sign(velocity.x) != Mathf.Sign(delta.x)) { velocity.x = 0.0f; } if (Mathf.Sign(velocity.y) != Mathf.Sign(delta.y)) { velocity.y = 0.0f; } _event.StopPropagation(); Scroll(delta); StartScroll(); }); }
/////////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////// // ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected new void Awake() { base.Awake(); AddEventListener("onPressDown", delegate(exUIEvent _event) { if (pressing) { return; } exUIPointEvent pointEvent = _event as exUIPointEvent; if (pointEvent.isTouch || pointEvent.GetMouseButton(0)) { pressing = true; pressDownAt = pointEvent.mainPoint.pos; pressingID = pointEvent.mainPoint.id; exUIMng.inst.SetFocus(this); exUIEvent evtButtonDown = new exUIEvent(); evtButtonDown.bubbles = false; OnButtonDown(evtButtonDown); _event.StopPropagation(); } }); AddEventListener("onPressUp", delegate(exUIEvent _event) { exUIPointEvent pointEvent = _event as exUIPointEvent; if (pointEvent.isTouch || pointEvent.GetMouseButton(0)) { exUIEvent evtButtonUp = new exUIEvent(); evtButtonUp.bubbles = false; OnButtonUp(evtButtonUp); if (pressing) { pressing = false; exUIEvent evtClick = new exUIEvent(); evtClick.bubbles = false; OnClick(evtClick); _event.StopPropagation(); } } }); AddEventListener("onHoverOut", delegate(exUIEvent _event) { if (pressing) { pressing = false; pressingID = -1; _event.StopPropagation(); } }); AddEventListener("onHoverMove", delegate(exUIEvent _event) { if (pressing) { exUIPointEvent pointEvent = _event as exUIPointEvent; for (int i = 0; i < pointEvent.pointInfos.Length; ++i) { exUIPointInfo point = pointEvent.pointInfos[i]; if (point.id == pressingID) { Vector2 delta = pointEvent.mainPoint.pos - pressDownAt; if (allowDrag == false && delta.sqrMagnitude >= dragThreshold * dragThreshold) { exUIMng.inst.HoverOut(this, point.id); } else { _event.StopPropagation(); } } } } }); }