// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Layout { using System; using System.Linq; using System.Reactive; using System.Reactive.Subjects; public class LayoutManager : ILayoutManager { private ILayoutRoot root; private Subject layoutNeeded; public LayoutManager(ILayoutRoot root) { Contract.Requires(root != null); this.root = root; this.layoutNeeded = new Subject(); } public IObservable LayoutNeeded { get { return this.layoutNeeded; } } public void ExecuteLayoutPass() { if (this.root != null) { this.root.Measure(this.root.ClientSize); this.root.Arrange(new Rect(this.root.ClientSize)); } } public void InvalidateMeasure(ILayoutable item) { IVisual visual = item as IVisual; this.layoutNeeded.OnNext(Unit.Default); } public void InvalidateArrange(ILayoutable item) { IVisual visual = item as IVisual; this.layoutNeeded.OnNext(Unit.Default); } } }