public void Resize(NodeResizeSide side, float delta) { var oldRatio = LabelWidth / NodeWidth; switch (side) { case NodeResizeSide.Left: if (NodeWidth - delta < MinNodeWidth) { delta = NodeWidth - MinNodeWidth; } Move(new Vector2(delta, 0)); delta = -delta; break; case NodeResizeSide.Right: if (NodeWidth + delta < MinNodeWidth) { delta = MinNodeWidth - NodeWidth; } break; default: throw new ArgumentOutOfRangeException(nameof(side), side, null); } NodeWidth += delta; LabelWidth = oldRatio * NodeWidth; }
private void OnLeftMouseDown() { var mouseGridPosition = GuiToGridPosition(Event.current.mousePosition); if (Nodes == null) { _isDragging = true; return; } foreach (var node in Nodes) { if (node.Content == null) { continue; } if (node.Content.RightResizeZone.Contains(mouseGridPosition)) { _resizedNode = node.Content; _resizedZone = NodeResizeSide.Right; return; } if (node.Content.LeftResizeZone.Contains(mouseGridPosition)) { _resizedNode = node.Content; _resizedZone = NodeResizeSide.Left; return; } if (node.Content.HeaderRect.Contains(mouseGridPosition)) { _selectedNode = node.Content; return; } if (node.Content.ContentRect.Contains(mouseGridPosition) || node.Content.SliderRect.Contains(mouseGridPosition)) { _selectedKnob = null; return; } if (node.Content.Knobs.Any(k => k.Rect.Contains(mouseGridPosition))) { return; } } _isDragging = true; }