private IEnumerator <object> DragSeparatorTask(int index) { RaiseDragStarted(); var initialMousePosition = Input.MousePosition; var initialHeights = Nodes.Select(i => i.AsWidget.Height).ToList(); while (Input.IsMousePressed()) { WidgetContext.Current.MouseCursor = MouseCursor.SizeNS; var dragDelta = Input.MousePosition.Y - initialMousePosition.Y; AdjustStretchDelta(initialHeights[index], Nodes[index].AsWidget, ref dragDelta); dragDelta = -dragDelta; AdjustStretchDelta(initialHeights[index + 1], Nodes[index + 1].AsWidget, ref dragDelta); dragDelta = -dragDelta; for (int i = 0; i < Nodes.Count; i++) { var d = (i == index) ? dragDelta : ((i == index + 1) ? -dragDelta : 0); if (i == Stretches.Count) { Stretches.Add(0); } Stretches[i] = initialHeights[i] + d; } Layout.InvalidateConstraintsAndArrangement(); yield return(null); } RaiseDragEnded(); }
public void Add(TrackStretch stretch) { if (stretch == null) { throw new ArgumentNullException(nameof(stretch)); } if (Stretches.Count > 0 && stretch.End.Station.Equals(Stretches.Last().Start.Station)) { Stretches.Insert(0, stretch); } else { Stretches.Add(stretch); } }