using System;
#nullable enable
namespace Avalonia.Layout
{
///
/// Manages measuring and arranging of controls.
///
public interface ILayoutManager : IDisposable
{
///
/// Raised when the layout manager completes a layout pass.
///
event EventHandler LayoutUpdated;
///
/// Notifies the layout manager that a control requires a measure.
///
/// The control.
void InvalidateMeasure(ILayoutable control);
///
/// Notifies the layout manager that a control requires an arrange.
///
/// The control.
void InvalidateArrange(ILayoutable control);
///
/// Executes a layout pass.
///
///
/// You should not usually need to call this method explictly, the layout manager will
/// schedule layout passes itself.
///
void ExecuteLayoutPass();
///
/// Executes the initial layout pass on a layout root.
///
///
/// You should not usually need to call this method explictly, the layout root will call
/// it to carry out the initial layout of the control.
///
void ExecuteInitialLayoutPass();
///
/// Executes the initial layout pass on a layout root.
///
/// The control to lay out.
///
/// You should not usually need to call this method explictly, the layout root will call
/// it to carry out the initial layout of the control.
///
[Obsolete("Call ExecuteInitialLayoutPass without parameter")]
void ExecuteInitialLayoutPass(ILayoutRoot root);
///
/// Registers a control as wanting to receive effective viewport notifications.
///
/// The control.
void RegisterEffectiveViewportListener(ILayoutable control);
///
/// Registers a control as no longer wanting to receive effective viewport notifications.
///
/// The control.
void UnregisterEffectiveViewportListener(ILayoutable control);
}
}