private void OnMouseDrag() { AdjustPointerID(); if (!CheckPointerRelativePosition(out Vector2 pt)) { return; } if (opStatus == "down") { if ((pt - dragFrom).sqrMagnitude <= 0.1f) { return; } opStatus = "dragging"; OnStartDragging.SC(dragFrom.x, dragFrom.y); lastDraggingPos = dragFrom; draggingOffset = Vector2.zero; } else if (opStatus == "dragging") { var dPos = pt - lastDraggingPos; lastDraggingPos = pt; draggingOffset += dPos; OnDragging.SC(dragFrom.x, dragFrom.y, dragFrom.x + draggingOffset.x, dragFrom.y + draggingOffset.y); } }
/// <summary> /// Event that fires when we mouse down /// </summary> private void StartDragging(Object sender, MouseEventArgs e) { // remove all dock styles, set location of the mouse, start dragging, and invoke events MouseDownLocation = e.Location; Dragging = true; DraggingOnPadding = PointIsOnPadding(e.Location); MouseDownSize = Size; if (!DraggingOnPadding) { OnStartDragging?.Invoke(this); Dock = DockStyle.None; } }
private void Update() { AdjustPointerID(); if (!CheckPointerRelativePosition(out Vector2 pt)) { return; } if (opStatus == "scaling") { if (Input.touchCount == 0) { OnEndDragging.SC(dragFrom.x, dragFrom.y, lastDraggingPos.x, lastDraggingPos.y); opStatus = "default"; } else if (Input.touchCount == 1) { lastDraggingPos = pt; opStatus = "dragging"; } else { if (!CheckPointerRelativePosition(out Vector2 pt1, 1)) { return; } var centreFrom = (pt0From + pt1From) / 2; var centreTo = (pt1 + pt) / 2; var dPos = centreTo - centreFrom; draggingOffset += dPos; lastDraggingPos = pt; // 暂时屏蔽双指拖动效果,会影响缩放手势的位置计算 // OnDragging.SC(dragFrom.x, dragFrom.y, dragFrom.x + draggingOffset.x, dragFrom.y + draggingOffset.y); var s = (pt1 - pt).magnitude / (pt1From - pt0From).magnitude; totalScale *= s; OnScaling.SC(totalScale, centreTo.x, centreTo.y); pt0From = pt; pt1From = pt1; } } else if (Input.touchCount == 2) { if (!CheckPointerRelativePosition(out Vector2 pt1, 1)) { return; } if (opStatus != "dragging") { lastDraggingPos = dragFrom = pt; draggingOffset = Vector2.zero; OnStartDragging.SC(dragFrom.x, dragFrom.y); } pt0From = pt; pt1From = pt1; totalScale = 1; opStatus = "scaling"; var centreFrom = (pt0From + pt1From) / 2; OnStartScaling.SC(); } }