public void Drag(Vector2 delta, Vector2 constraint) { dragPosition.position += delta; var lockedPosition = dragPosition; if (constraint.x == 0) { lockedPosition.x = dragLockOrigin.x; } if (constraint.y == 0) { lockedPosition.y = dragLockOrigin.y; } if (snapToGrid) { position = GraphGUI.SnapToGrid(lockedPosition, canResizeHorizontal && canResizeVertical); } else { position = lockedPosition.PixelPerfect(); } Reposition(); }
private void HandleResizing() { if (e.IsMouseDrag(MouseButton.Left) && !isResizing && canStartResize) { if (resizeLeftArea.Contains(mousePosition)) { isResizingXMin = true; xMinResizeOffset = mousePosition.x - position.xMin; } if (resizeRightArea.Contains(mousePosition)) { isResizingXMax = true; xMaxResizeOffset = mousePosition.x - position.xMax; } if (resizeTopArea.Contains(mousePosition)) { isResizingYMin = true; yMinResizeOffset = mousePosition.y - position.yMin; } if (resizeBottomArea.Contains(mousePosition)) { isResizingYMax = true; yMaxResizeOffset = mousePosition.y - position.yMax; } if (resizeTopLeftArea.Contains(mousePosition)) { isResizingXMin = true; isResizingYMin = true; xMinResizeOffset = mousePosition.x - position.xMin; yMinResizeOffset = mousePosition.y - position.yMin; } if (resizeTopRightArea.Contains(mousePosition)) { isResizingXMax = true; isResizingYMin = true; xMaxResizeOffset = mousePosition.x - position.xMax; yMinResizeOffset = mousePosition.y - position.yMin; } if (resizeBottomLeftArea.Contains(mousePosition)) { isResizingXMin = true; isResizingYMax = true; xMinResizeOffset = mousePosition.x - position.xMin; yMaxResizeOffset = mousePosition.y - position.yMax; } if (resizeBottomRightArea.Contains(mousePosition)) { isResizingXMax = true; isResizingYMax = true; xMaxResizeOffset = mousePosition.x - position.xMax; yMaxResizeOffset = mousePosition.y - position.yMax; } e.Use(); } else if (e.IsMouseDrag(MouseButton.Left) && isResizing) { var resizedPosition = position; if (isResizingXMin) { resizedPosition.xMin = Mathf.Min(position.xMax - minResizeSize.x, mousePosition.x - xMinResizeOffset); if (snapToGrid) { resizedPosition.xMin = GraphGUI.SnapToGrid(resizedPosition.xMin); } } if (isResizingXMax) { resizedPosition.xMax = Mathf.Max(position.xMin + minResizeSize.x, mousePosition.x - xMaxResizeOffset); if (snapToGrid) { resizedPosition.xMax = GraphGUI.SnapToGrid(resizedPosition.xMax); } } if (isResizingYMin) { resizedPosition.yMin = Mathf.Min(position.yMax - minResizeSize.y, mousePosition.y - yMinResizeOffset); if (snapToGrid) { resizedPosition.yMin = GraphGUI.SnapToGrid(resizedPosition.yMin); } } if (isResizingYMax) { resizedPosition.yMax = Mathf.Max(position.yMin + minResizeSize.y, mousePosition.y - yMaxResizeOffset); if (snapToGrid) { resizedPosition.yMax = GraphGUI.SnapToGrid(resizedPosition.yMax); } } resizedPosition.width = Mathf.Clamp(resizedPosition.width, minResizeSize.x, maxResizeSize.x); resizedPosition.height = Mathf.Clamp(resizedPosition.height, minResizeSize.y, maxResizeSize.y); UndoUtility.RecordEditedObject("Resize Graph Element"); position = resizedPosition; Reposition(); e.Use(); } else if (e.IsMouseUp(MouseButton.Left) && isResizing) { isResizingXMin = false; isResizingXMax = false; isResizingYMin = false; isResizingYMax = false; e.Use(); } }